ordinal/0000755000175100001440000000000014660604713011727 5ustar hornikusersordinal/tests/0000755000175100001440000000000014533322576013074 5ustar hornikusersordinal/tests/test.clm.predict.R0000644000175100001440000001376612447061401016403 0ustar hornikuserslibrary(ordinal) ## source("test.clm.predict.R") ## library(devtools) ## r2path <- "/Users/rhbc/Documents/Rpackages/ordinal/pkg/ordinal" ## clean_dll(pkg = r2path) ## load_all(r2path) cy <- with(wine, which(temp == "cold" & contact == "yes")) options("contrasts" = c("contr.treatment", "contr.poly")) getOption("contrasts") ## Example model wine1.clm <- clm(rating ~ temp*contact, subset = -cy, data = wine) summary(wine1.clm) names(wine1.clm) wine.clm <- clm(rating~temp*contact, data=wine) summary(wine.clm) names(wine.clm) ## Make sure the same elements are present with a rank deficient model ## fit: stopifnot(all(names(wine1.clm) == names(wine.clm))) ## With treatment contrasts: options("contrasts" = c("contr.treatment", "contr.poly")) wine.clm <- clm(rating~temp*contact, data=wine) coef(summary(wine.clm)) head(model.matrix(wine.clm)$X) wine.clm$contrasts head(pred1 <- predict(wine.clm)$fit) ## With sum contrasts: options("contrasts" = c("contr.sum", "contr.poly")) wine.clm <- clm(rating~temp*contact, data=wine) coef(summary(wine.clm)) head(model.matrix(wine.clm)$X) wine.clm$contrasts head(pred2 <- predict(wine.clm)$fit) ## Mixture of sum and treatment contrasts: options("contrasts" = c("contr.treatment", "contr.poly")) wine.clm <- clm(rating~temp*contact, data=wine, contrasts=list(temp="contr.sum")) coef(summary(wine.clm)) head(model.matrix(wine.clm)$X) wine.clm$contrasts head(pred3 <- predict(wine.clm)$fit) stopifnot(isTRUE(all.equal(pred1, pred2))) stopifnot(isTRUE(all.equal(pred1, pred3))) ################################# ### Now for a rank deficient fit: ################################# cy <- with(wine, which(temp == "cold" & contact == "yes")) options("contrasts" = c("contr.treatment", "contr.poly")) wine1.clm <- clm(rating ~ temp*contact, subset = -cy, data = wine) coef(summary(wine1.clm)) attributes(model.matrix(wine1.clm)$X)$contrasts wine1.clm$contrasts head(pred4 <- predict(wine1.clm)$fit) options("contrasts" = c("contr.sum", "contr.poly")) wine1.clm <- clm(rating ~ temp*contact, subset = -cy, data = wine) attributes(model.matrix(wine1.clm)$X)$contrasts options("contrasts" = c("contr.treatment", "contr.poly")) attributes(model.matrix(wine1.clm)$X)$contrasts ## Notice that the contrasts change in the attributes of the fit!!! coef(summary(wine1.clm)) wine1.clm$contrasts head(pred5 <- predict(wine1.clm)$fit) head(cbind(pred4, pred5)) stopifnot(isTRUE(all.equal(pred4, pred5))) options("contrasts" = c("contr.treatment", "contr.poly")) wine1.clm <- clm(rating ~ temp*contact, subset = -cy, data = wine, contrasts=list(temp="contr.sum")) coef(summary(wine1.clm)) head(model.matrix(wine1.clm)$X) attributes(model.matrix(wine1.clm)$X)$contrasts wine1.clm$contrasts head(pred6 <- predict(wine1.clm)$fit) head(cbind(pred4, pred5, pred6)) stopifnot(isTRUE(all.equal(pred4, pred6))) ################################################################## ## Compare equality of fitted values for models with different contrasts: options("contrasts" = c("contr.treatment", "contr.poly")) fm1 <- clm(rating ~ temp + contact, data=wine) fitted(fm1) options("contrasts" = c("contr.sum", "contr.poly")) fm2 <- clm(rating ~ temp + contact, data=wine) fitted(fm2) options("contrasts" = c("contr.treatment", "contr.poly")) fm3 <- clm(rating ~ temp + contact, data=wine, contrasts=list(contact="contr.sum")) fitted(fm3) stopifnot(isTRUE(all.equal(fitted(fm1), fitted(fm2)))) stopifnot(isTRUE(all.equal(fitted(fm1), fitted(fm3)))) ################################################################## ## Compare equality of fitted values for models with different ## contrasts in face of aliased coefficients: options("contrasts" = c("contr.treatment", "contr.poly")) cy <- with(wine, which(temp == "cold" & contact == "yes")) Wine <- subset(wine, subset=!(temp == "cold" & contact == "yes")) fm1 <- clm(rating ~ temp + contact, data=Wine) options("contrasts" = c("contr.sum", "contr.poly")) fm2 <- clm(rating ~ temp + contact, data=Wine) options("contrasts" = c("contr.treatment", "contr.poly")) fm3 <- clm(rating ~ temp + contact, data=Wine, contrasts=list(contact="contr.sum")) stopifnot(isTRUE(all.equal(fitted(fm1), fitted(fm2)))) stopifnot(isTRUE(all.equal(fitted(fm1), fitted(fm3)))) stopifnot(isTRUE(all.equal(predict(fm1)$fit, predict(fm2)$fit))) stopifnot(isTRUE(all.equal(predict(fm1)$fit, predict(fm3)$fit))) ################################# ## Does this also happen if the wine data has changed? options("contrasts" = c("contr.treatment", "contr.poly")) Wine <- subset(wine, subset=!(temp == "cold" & contact == "yes")) fm1 <- clm(rating ~ temp + contact, data=Wine) fit1 <- fitted(fm1) pred1 <- predict(fm1)$fit Wine <- wine pred2 <- predict(fm1)$fit stopifnot(isTRUE(all.equal(fit1, pred1))) stopifnot(isTRUE(all.equal(fit1, pred2))) ## What if weights, say, is an expression? ## Notice that updating the model object changes it: set.seed(123) fm1 <- clm(rating ~ temp + contact, data=wine, weights=runif(nrow(wine), .5, 1.5)) fm2 <- update(fm1) stopifnot(isTRUE(all.equal(fitted(fm1), predict(fm1)$fit))) stopifnot(!isTRUE(all.equal(fitted(fm1), fitted(fm2)))) ################################# ## Test equality of fits and predictions of models with: ## 'x + I(x^2)' and 'poly(x, 2)': ## December 25th 2014, RHBC. data(wine) set.seed(1) x <- rnorm(nrow(wine), sd=2) + as.numeric(wine$rating) range(x) ## Comparison of 'x + I(x^2)' and 'poly(x, 2)': fm3 <- clm(rating ~ temp + x + I(x^2), data=wine) fm4 <- clm(rating ~ temp + poly(x, 2), data=wine) ## Same model fits, but different parameterizations: stopifnot( !isTRUE(all.equal(coef(fm3), coef(fm4), check.names=FALSE)) ) stopifnot(isTRUE(all.equal(logLik(fm3), logLik(fm4)))) newData <- expand.grid(temp = levels(wine$temp), x=seq(-1, 7, 3)) predict(fm3, newdata=newData)$fit predict(fm4, newdata=newData)$fit stopifnot(isTRUE(all.equal(fitted(fm3), fitted(fm4)))) stopifnot(isTRUE( all.equal(predict(fm3, newdata=newData)$fit, predict(fm4, newdata=newData)$fit))) ################################# ordinal/tests/clm.formula.R0000644000175100001440000001126412447062614015436 0ustar hornikuserslibrary(ordinal) ## library(devtools) ## r2path <- "/Users/rhbc/Documents/Rpackages/ordinal/pkg/ordinal" ## clean_dll(pkg = r2path) ## load_all(r2path) ################################# ## Appropriate evaluation of formulas: ## These fail and give appropriate error messages: ## fm1 <- clm(rating ~ contact, scale=temp, data=wine) ## fm1 <- clm(rating ~ contact, scale=~Temp, data=wine) ## fm1 <- clm(rating ~ contact, scale="temp", data=wine) ## sca <- "temp" ## fm1 <- clm(rating ~ contact, scale=sca, data=wine) ## sca <- as.formula(sca) ## sca <- as.formula(temp) ## sca <- with(wine, as.formula(temp)) ## These all work as intended with no warnings or errors: fm1 <- clm(rating ~ contact, scale="~temp", data=wine) fm1 <- clm(rating ~ contact, scale=~temp, data=wine) sca <- "~temp" fm1 <- clm(rating ~ contact, scale=sca, data=wine) sca <- as.formula("~temp") fm1 <- clm(rating ~ contact, scale=sca, data=wine) fm1 <- clm(rating ~ contact, scale=as.formula(~temp), data=wine) fm1 <- clm(rating ~ contact, scale=as.formula("~temp"), data=wine) ################################# ## can evaluate if 'formula' is a character: f <- "rating ~ contact + temp" clm(f, data=wine) clm(as.formula(f), data=wine) ################################# ### finding variables in the environment of the formula: makeform <- function() { f1 <- as.formula(rating ~ temp + contact) rating <- wine$rating temp <- wine$temp contact <- wine$contact f1 } ## 'makeform' makes are formula object in the environment of the ## function makeform: f1 <- makeform() f1 # print class(f1) ## If we give the data, we can evaluate the model: fm1 <- clm(f1, data=wine) ## We can also evaluate the model because the data are available in ## the environment associated with the formula: fm1 <- clm(f1) ## For instance, the 'rating' variable is not found in the Global ## environment; we have to evaluate the 'name' of 'rating' in the ## appropriate environment: (try(rating, silent=TRUE)) eval(as.name("rating"), envir=environment(f1)) ## If instead we generate the formula in the Global environment where ## the variables are not found, we cannot evaluate the model: f2 <- as.formula(rating ~ temp + contact) (try(fm2 <- clm(f2), silent=TRUE)) environment(f2) <- environment(f1) fm2 <- clm(f2) ################################# ## Use of formula-objects in location, scale and nominal: ## Bug-report from Lluís Marco Almagro ## 5 May 2010 17:58 f <- formula(rating ~ temp) fs <- formula( ~ contact) m2 <- clm(f, scale = fs, data = wine) summary(m2) ################################# ## Other ways to construct formulas: set.seed(12345) y <- factor(sample(1:4,20,replace=TRUE)) x <- rnorm(20) data <- data.frame(y=y,x=x) rm(x, y) fit <- clm(data$y ~ data$x) fit fit <- clm(data[,1] ~ data[,2]) fit ## This previously failed, but now works: fit <- clm(data$y ~ data$x, ~data$x) fit ################################# ## Evaluation within other functions: ## date: January 18th 2012. ## ## The problem was raised by Stefan Herzog (stefan.herzog@unibas.ch) ## January 12th 2012 in trying to make clm work with glmulti. fun.clm <- function(formula, data) ### This only works because clm via eclm.model.frame is careful to ### evaluate the 'formula' in the parent environment such it is not the ### character "formula" that is attempted evaluated. clm(formula, data = data) fun2.clm <- function(formula, data, weights, subset) { ### This should be the safe way to ensure evaluation of clm in the ### right environment. mc <- match.call() mc[[1]] <- as.name("clm") eval.parent(mc) } fun.clm(rating ~ temp + contact, data=wine) ## works fun2.clm(rating ~ temp + contact, data=wine) ## works form1 <- "rating ~ temp + contact" fun.clm(form1, data=wine) ## works fun2.clm(form1, data=wine) ## works form2 <- formula(rating ~ temp + contact) fun.clm(form2, data=wine) ## works fun2.clm(form2, data=wine) ## works ## Notice that clm is not able to get the name of the data (wine) ## correct when using fun.clm. ################################# ## Evaluation of long formulas: no line breaking in getFullForm: data(soup, package="ordinal") rhs <- paste(names(soup)[c(3, 5:12)], collapse=" + ") Location <- as.formula(paste("SURENESS ~ ", rhs, sep=" ")) Scale <- as.formula("~ PROD") fm5 <- clm(Location, scale=Scale, data=soup) summary(fm5) ################################# ## Check that "."-notation works in formula: ## December 25th 2014, RHBC data(wine) wine2 <- wine[c("rating", "contact", "temp")] str(wine2) fm0 <- clm(rating ~ ., data=wine2) fm1 <- clm(rating ~ contact + temp, data=wine2) keep <- c("coefficients", "logLik", "info") fun <- function(x, y) stopifnot(isTRUE(all.equal(x, y))) mapply(fun, fm0[keep], fm1[keep]) ################################# ordinal/tests/test.clm.model.matrix.R0000644000175100001440000001104213633002525017335 0ustar hornikuserslibrary(ordinal) ## source("test.clm.model.matrix.R") ## library(devtools) ## r2path <- "/Users/rhbc/Documents/Rpackages/ordinal/pkg/ordinal" ## clean_dll(pkg = r2path) ## load_all(r2path) ## Check that get_clmDesign works in standard setting: fm1 <- clm(rating ~ temp, scale=~contact, nominal=~contact, data=wine) contr <- c(fm1$contrasts, fm1$S.contrasts, fm1$nom.contrasts) XX <- ordinal:::get_clmDesign(fm1$model, terms(fm1, "all"), contrasts=contr) XX2 <- update(fm1, method="design") (keep <- intersect(names(XX), names(XX2))) (test <- mapply(function(x, y) isTRUE(all.equal(x, y)), XX[keep], XX2[keep])) stopifnot(all(test)) ## Check that get_clmDesign works with singular fit and NAs: cy <- with(wine, which(temp == "cold" & contact == "yes")) wine2 <- subset(wine, subset=(!1:nrow(wine) %in% cy)) wine2[c(9, 15, 46), "rating"] <- NA fm1 <- clm(rating ~ temp, scale=~contact, nominal=~contact, data=wine2) contr <- c(fm1$contrasts, fm1$S.contrasts, fm1$nom.contrasts) XX <- ordinal:::get_clmDesign(fm1$model, terms(fm1, "all"), contrasts=contr) XX2 <- update(fm1, method="design") (keep <- intersect(names(XX), names(XX2))) (test <- mapply(function(x, y) isTRUE(all.equal(x, y)), XX[keep], XX2[keep])) stopifnot(all(test)) ## In this situation update and get_clmRho give the same results: wine2 <- wine fm1 <- clm(rating ~ temp + contact, data=wine2) ## OK rho1 <- ordinal:::get_clmRho.clm(fm1) l1 <- as.list(rho1) l2 <- as.list(update(fm1, doFit=FALSE)) (test <- mapply(function(x, y) isTRUE(all.equal(x, y)), l1, l2[names(l1)])) stopifnot(all(test)) ## If we modify the data (or other subset, weights, formulae, etc.) ## used in the model call, the results from update no longer correspond ## to the elements of the fitted model object. get_clmRho gets it ## right on the other hand: wine2[10:13, "rating"] <- NA l3 <- as.list(ordinal:::get_clmRho.clm(fm1)) l4 <- as.list(update(fm1, doFit=FALSE)) (test <- mapply(function(x, y) isTRUE(all.equal(x, y)), l1, l3)) stopifnot(all(test)) ## same (test <- mapply(function(x, y) isTRUE(all.equal(x, y)), l3, l4[names(l3)])) stopifnot(sum(!test) == 8) ## not all the same anymore! ## In conclusion l1, l2, and l3 are identical. l4 is different. ################################# ## Test that checkContrasts give appropriate warnings: contr <- c(temp="contr.sum", contact="contr.sum") fm1 <- clm(rating ~ temp + contact, scale=~contact, data=wine) ## OK fm1 <- clm(rating ~ temp + contact, scale=~contact, data=wine, contrasts=contr) ## OK fm1 <- clm(rating ~ temp, scale=~contact, data=wine, contrasts=contr) ## OK ## These should give warnings: fm1 <- clm(rating ~ temp, contrasts=c(contact="contr.sum"), data=wine) fm1 <- clm(rating ~ temp, contrasts=contr, data=wine) fm1 <- clm(rating ~ 1, scale=~contact, contrasts=c(temp="contr.sum"), data=wine) fm1 <- clm(rating ~ 1, scale=~contact, contrasts=list(temp="contr.sum"), data=wine) fm0 <- clm(rating ~ temp + contact, scale=~contact, data=wine) ordinal:::checkContrasts(fm0$S.terms, fm0$contrasts) ordinal:::checkContrasts(fm0$S.terms, fm0$S.contrasts) ordinal:::checkContrasts(fm0$terms, fm0$contrasts) ordinal:::checkContrasts(fm0$terms, fm0$S.contrasts) ################################# ## Check that clm and model.matrix respects contrast settings: options("contrasts" = c("contr.treatment", "contr.poly")) fm0 <- clm(rating ~ temp + contact, data=wine) options("contrasts" = c("contr.sum", "contr.poly")) fm1 <- clm(rating ~ temp + contact, data=wine) stopifnot(all(model.matrix(fm0)$X[, 2] %in% c(0, 1))) stopifnot(all(model.matrix(fm1)$X[, 2] %in% c(1, -1))) ################################# ## Check that model.matrix results do not depend on global contrast ## setting: options("contrasts" = c("contr.sum", "contr.poly")) fm0 <- clm(rating ~ temp + contact, scale=~contact, data=wine) MM <- model.matrix(fm0) options("contrasts" = c("contr.treatment", "contr.poly")) MM2 <- model.matrix(fm0) for(x in MM) print(head(x)) for(x in MM2) print(head(x)) stopifnot(all(mapply(all.equal, MM, MM2))) ################################# ## This gave a warning before getContrasts was implemented: fm0 <- clm(rating ~ temp + contact, scale=~contact, data=wine) MM <- model.matrix(fm0) ## > fm0 <- clm(rating ~ temp + contact, scale=~contact, data=wine) ## > MM <- model.matrix(fm0) ## Warning message: ## In model.matrix.default(res$S.terms, data = fullmf, contrasts.arg = getContrasts(res$S.terms, : ## variable 'temp' is absent, its contrast will be ignored for(x in MM) print(head(x)) ordinal/tests/test.sign.R0000644000175100001440000000610313633002525015122 0ustar hornikusers# test.sign.R # Test the use of sign.location and sign.nominal in clm.control(): library(ordinal) fm1 <- clm(rating ~ temp + contact, data=wine) fm2 <- clm(rating ~ temp + contact, data=wine, sign.location="positive") # dput(names(fm1)) keep <- c("aliased", "alpha", "cond.H", "contrasts", "convergence", "df.residual", "edf", "fitted.values", "formula", "formulas", "gradient", "info", "link", "logLik", "maxGradient", "message", "model", "n", "niter", "nobs", "start", "terms", "Theta", "threshold", "tJac", "xlevels", "y", "y.levels") check <- mapply(function(x, y) isTRUE(all.equal(x, y)), fm1[keep], fm2[keep]) stopifnot(all(check)) stopifnot(isTRUE(all.equal( fm1$beta, - fm2$beta ))) fm1 <- clm(rating ~ temp, nominal=~ contact, data=wine) fm2 <- clm(rating ~ temp, nominal=~ contact, data=wine, sign.nominal="negative") keep <- c("aliased", "beta", "cond.H", "contrasts", "convergence", "df.residual", "edf", "fitted.values", "formula", "formulas", "gradient", "info", "link", "logLik", "maxGradient", "message", "model", "n", "niter", "nobs", "start", "terms", "Theta", "threshold", "tJac", "xlevels", "y", "y.levels") # check <- mapply(function(x, y) isTRUE(all.equal(x, y)), fm1, fm2) check <- mapply(function(x, y) isTRUE(all.equal(x, y)), fm1[keep], fm2[keep]) stopifnot(all(check)) stopifnot(isTRUE(all.equal( fm1$alpha[5:8], -fm2$alpha[5:8] ))) fm1 <- clm(rating ~ temp, nominal=~ contact, data=wine) fm2 <- clm(rating ~ temp, nominal=~ contact, data=wine, sign.nominal="negative", sign.location="positive") keep <- c("aliased", "cond.H", "contrasts", "convergence", "df.residual", "edf", "fitted.values", "formula", "formulas", "gradient", "info", "link", "logLik", "maxGradient", "message", "model", "n", "niter", "nobs", "start", "terms", "Theta", "threshold", "tJac", "xlevels", "y", "y.levels") # check <- mapply(function(x, y) isTRUE(all.equal(x, y)), fm1, fm2) check <- mapply(function(x, y) isTRUE(all.equal(x, y)), fm1[keep], fm2[keep]) stopifnot(all(check)) stopifnot( isTRUE(all.equal(fm1$alpha[5:8], -fm2$alpha[5:8])), isTRUE(all.equal(fm1$beta, -fm2$beta)) ) # Check predict method: newData <- with(wine, expand.grid(temp=levels(temp), contact=levels(contact))) (p1 <- predict(fm1, newdata=newData)) (p2 <- predict(fm2, newdata=newData)) stopifnot(isTRUE(all.equal(p1, p2))) stopifnot(isTRUE( all.equal(predict(fm1, newdata=wine, se=TRUE, interval=TRUE), predict(fm2, newdata=wine, se=TRUE, interval=TRUE)) )) # Check profile and confint methods: confint.default(fm1) confint.default(fm2) stopifnot( isTRUE(all.equal(confint(fm1), -confint(fm2)[, 2:1, drop=FALSE], check.attributes=FALSE)) ) fm1 <- clm(rating ~ temp + contact, data=wine) fm2 <- clm(rating ~ temp + contact, data=wine, sign.location="positive") pr1 <- profile(fm1) pr2 <- profile(fm2) stopifnot( isTRUE(all.equal(confint(fm1), - confint(fm2)[, 2:1], check.attributes=FALSE)) ) ordinal/tests/testCLM.R0000644000175100001440000002021013633002525014512 0ustar hornikuserslibrary(ordinal) options(contrasts = c("contr.treatment", "contr.poly")) ## library(devtools) ## r2path <- "/Users/rhbc/Documents/Rpackages/ordinal/pkg/ordinal" ## clean_dll(pkg = r2path) ## load_all(r2path) ## More manageable data set: data(soup, package="ordinal") (tab26 <- with(soup, table("Product" = PROD, "Response" = SURENESS))) dimnames(tab26)[[2]] <- c("Sure", "Not Sure", "Guess", "Guess", "Not Sure", "Sure") dat26 <- expand.grid(sureness = as.factor(1:6), prod = c("Ref", "Test")) dat26$wghts <- c(t(tab26)) m1 <- clm(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logit") ## print, summary, vcov, logLik, AIC: m1 summary(m1) vcov(m1) logLik(m1) ll.m1 <- structure(-2687.74456343981, df = 7L, nobs = 1847, class = "logLik") stopifnot(all.equal(logLik(m1), ll.m1)) AIC(m1) coef(m1) cm1 <- c(-1.49125702755587, -0.45218462707814, -0.107208315524318, 0.163365282774162, 0.88291347877514, 1.29587762626394, 0.147986162902775) stopifnot(all.equal(as.vector(coef(m1)), cm1)) coef(summary(m1)) csm1 <- structure(c(-1.49125702755587, -0.45218462707814, -0.107208315524318, 0.163365282774162, 0.88291347877514, 1.29587762626394, 0.147986162902775, 0.0921506468161812, 0.0718240681909781, 0.069954084652323, 0.0702546879687391, 0.0795708692869622, 0.119032405993894, 0.065104213008022, -16.1828167145758, -6.2957256316336, -1.53255261729392, 2.32532927691394, 11.0959385851501, 10.8867632762999, 2.27306584421104, 6.66732036748908e-59, 3.05965144996025e-10, 0.125386123756898, 0.0200543599621069, 1.31274723412040e-28, 1.33293711602276e-27, 0.0230222123418036), .Dim = c(7L, 4L), .Dimnames = list( c("1|2", "2|3", "3|4", "4|5", "5|6", "prodTest", "prodTest" ), c("Estimate", "Std. Error", "z value", "Pr(>|z|)"))) stopifnot(all.equal(coef(summary(m1)), csm1)) ## link functions: m2 <- update(m1, link = "probit") m3 <- update(m1, link = "cloglog") m4 <- update(m1, link = "loglog") m5 <- update(m1, link = "cauchit", start = coef(m1)) ## m6 <- update(m1, link = "Aranda-Ordaz", lambda = 1) ## m7 <- update(m1, link = "Aranda-Ordaz") ## m8 <- update(m1, link = "log-gamma", lambda = 1) ## m9 <- update(m1, link = "log-gamma") ## nominal effects: mN1 <- clm(sureness ~ 1, nominal = ~ prod, data = dat26, weights = wghts) anova(m1, mN1) ## optimizer / method: update(m1, scale = ~ 1, method = "Newton") update(m1, scale = ~ 1, method = "ucminf") update(m1, scale = ~ 1, method = "nlminb") update(m1, scale = ~ 1, method = "optim") update(m1, scale = ~ 1, method = "model.frame") update(m1, ~.-prod, scale = ~ 1, nominal = ~ prod, method = "model.frame") ## threshold functions mT1 <- update(m1, threshold = "symmetric") mT2 <- update(m1, threshold = "equidistant") anova(m1, mT1, mT2) ## Extend example from polr in package MASS: ## Fit model from polr example: if(require(MASS)) { fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) fm1 summary(fm1) ## With probit link: summary(update(fm1, link = "probit")) ## Allow scale to depend on Cont-variable summary(fm2 <- update(fm1, scale =~ Cont)) summary(fm3 <- update(fm1, location =~.-Cont, nominal =~ Cont)) summary(fm4 <- update(fm2, location =~.-Cont, nominal =~ Cont)) anova(fm1, fm2, fm3, fm4) ## which seems to improve the fit } ################################# ## Better handling of ill-defined variance-covariance matrix of the ## parameters in summary methods for clm and clmm objects: dat26.2 <- data.frame(sureness = as.factor(1:12), prod = rep(c("One", "Two", "Three"),each=4)) fm1 <- clm(sureness ~ prod, ~prod, data = dat26.2) fm1 summary(fm1) summary(fm1, corr = 1) ## fm1$Hessian ## sl1 <- slice(fm1, 13) ## fitted(fm1) ## convergence(fm1) ## eigen(fm1$Hessian)$values ## sqrt(diag(solve(fm1$Hessian))) ## sqrt(diag(ginv(fm1$Hessian))) ################################# ## Missing values: ## Bug-report from Jonathan Williams ## , 18 March 2010 12:42 data(soup, package = "ordinal") soup$SURENESS[10] <- NA c1a <- clm(ordered(SURENESS)~PROD, data=soup); summary(c1a) c2a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup) summary(c2a) c3a <- clm(ordered(SURENESS)~1, scale = ~PROD, data=soup) summary(c3a) data(soup, package = "ordinal") soup$PROD[1] <- NA c1a <- clm(ordered(SURENESS)~PROD, data=soup) summary(c1a) c2a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup) summary(c2a) c3a <- clm(ordered(SURENESS)~1, scale = ~PROD, data=soup) summary(c3a) soup$SURENESS[10] <- NA c1a <- clm(ordered(SURENESS)~PROD, data=soup) summary(c1a) c2a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup) summary(c2a) c3a <- clm(ordered(SURENESS)~1, scale = ~PROD, data=soup) summary(c3a) ## na.actions: c4a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup, na.action=na.omit) summary(c4a) tC1 <- try(clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup, na.action=na.fail), silent = TRUE) stopifnot(inherits(tC1, "try-error")) c4a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup, na.action=na.exclude) summary(c4a) tC2 <- try(clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup, na.action=na.pass), silent = TRUE) stopifnot(inherits(tC2, "try-error")) ## Subset: data(soup, package="ordinal") c4a <- clm(ordered(SURENESS)~PROD, scale = ~PROD, data=soup, subset = 1:100) c4a <- clm(ordered(SURENESS)~1, scale = ~PROD, data=soup, subset = 1:100) c4a <- clm(ordered(SURENESS)~PROD, data=soup, subset = 1:100) c4a <- clm(ordered(SURENESS)~1, data=soup, subset = 1:100) ## Offset: data(soup, package = "ordinal") set.seed(290980) offs <- runif(nrow(soup)) c4a <- clm(ordered(SURENESS)~PROD + offset(offs), scale = ~PROD, data=soup, subset = 1:100) summary(c4a) c4a <- clm(ordered(SURENESS)~PROD + offset(offs), scale = ~PROD + offset(offs), data=soup, subset = 1:100) summary(c4a) off2 <- offs c4a <- clm(ordered(SURENESS)~PROD + offset(offs), scale = ~PROD + offset(off2), data=soup, subset = 1:100) summary(c4a) c4a <- clm(ordered(SURENESS)~PROD, scale = ~PROD + offset(offs), data=soup, subset = 1:100) summary(c4a) ## data as matrix: dat26M <- as.matrix(dat26) m1 <- clm(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logit") summary(m1) ## data in enclosing environment: attach(soup) m1 <- clm(SURENESS ~ PROD, scale = ~PROD) summary(m1) detach(soup) ################################################################## ### Parameter estimates were not correct with large scale effects due ### to end cut-points being \pm 100. This is not enough for ### location-scale model, but seems to be for location only models. ### Bug report from Ioannis Kosmidis : ### A 2x3 contigency table that will give a large estimated value of ### zeta x <- rep(0:1, each = 3) response <- factor(rep(c(1, 2, 3), times = 2)) freq <- c(1, 11, 1, 13, 1, 14) totals <- rep(tapply(freq, x, sum), each = 3) Dat <- data.frame(response, x, freq) ### Fitting a cumulative link model with dispersion effects modClm <- clm(response ~ x, scale = ~ x, weights = freq, data = Dat, control = clm.control(grtol = 1e-10, convTol = 1e-10)) summary(modClm) ### The maximized log-likelihood for this saturated model should be sum(freq*log(freq/totals)) # > sum(freq*log(freq/totals)) # [1] -29.97808 ### but apparently clm fails to maximixe the log-likelihood modClm$logLik # > modClm$logLik # [1] -30.44452 stopifnot(isTRUE(all.equal(sum(freq*log(freq/totals)), modClm$logLik))) ### The estimates reported by clm are coef(modClm) coef.res <- structure(c(-2.48490664104217, 2.48490665578163, 2.48490659188594, 3.54758796387530), .Names = c("1|2", "2|3", "x", "x")) stopifnot(isTRUE(all.equal(coef.res, coef(modClm)))) # > modClm$coefficients # 1|2 2|3 x x # -2.297718 2.297038 1.239023 2.834285 ### while they should be (from my own software) # 1|2 2|3 x disp.x #-2.484907 2.484907 2.484907 3.547588 convergence(modClm) ################################################################## ordinal/tests/confint.R0000755000175100001440000000344011617035245014655 0ustar hornikusers################################# ## test profile and confint methods: library(ordinal) data(wine) fm1 <- clm(rating ~ contact + temp, data = wine) summary(fm1) ## profile.clm and confint.clm: pr1 <- profile(fm1) confint(pr1) pr1 <- profile(fm1, which.beta = 1:2) confint(pr1) pr1 <- profile(fm1, which.beta = 2:1) confint(pr1) pr1 <- profile(fm1, which.beta = 1) confint(pr1) pr1 <- profile(fm1, which.beta = 2) confint(pr1) pr1 <- try(profile(fm1, which.beta = 0), silent = TRUE) ## error pr1 <- try(profile(fm1, which.beta = "no.par"), silent = TRUE) ## error pr1 <- try(profile(fm1, which.beta = -1), silent = TRUE) ## error pr1 <- profile(fm1, which.beta = "tempwarm") confint(pr1) pr1 <- profile(fm1, alpha = 0.1) confint(pr1) ## should give NA in this case? pr1 <- profile(fm1, max.steps = 9) pr1 <- profile(fm1, step.warn = 7) pr1 <- profile(fm1, nsteps = 6) pr1 <- profile(fm1, trace = 1) pr1 <- profile(fm1, control = list(gradTol = .1)) confint(pr1) ## not at all unreliable... ## single regression coef setting: fm2 <- clm(rating ~ contact, data = wine) summary(fm2) pr2 <- profile(fm2) confint(pr2) ## confint.clm: confint(fm1) confint(fm1, 2) confint(fm1, 1) confint(fm1, "tempwarm") confint(fm1, type = "profile") confint(fm1, type = "Wald") confint(fm1, 2, type = "Wald") confint(fm1, level = 0.5) confint(fm1, level = 1 - 1e-6) confint(fm1, level = 1 - 1e-10) ## extreme, but it works confint(fm1, trace = 1) ## plot.profile: pr1 <- profile(fm1, which.beta=1:2, alpha = 1e-3) par(mfrow = c(1,2)) plot(pr1) plot(pr1, 1) plot(pr1, "contactyes") plot(pr1, level = .97) plot(pr1, Log = TRUE) plot(pr1, relative = FALSE) plot(pr1, root = TRUE) plot(pr1, approx = TRUE) plot(pr1, n=10) plot(pr1, ylim = c(0,2)) plot(pr1, las = 1) plot(pr2) ordinal/tests/anova.R0000755000175100001440000000111213277532341014316 0ustar hornikuserslibrary(ordinal) data(wine) fm1 <- clm(rating ~ temp, data=wine) fmm1 <- clmm(rating ~ temp + (1|judge), data=wine) ## These now give identical printed results: ## Previously the printed model names were messed up when anova.clmm ## were called. anova(fm1, fmm1) anova(fmm1, fm1) ## Testing if 'test' and 'type' arguments are ignored properly: fm1 <- clm(rating ~ temp + contact, data=wine) fm2 <- clm(rating ~ temp, data=wine) anova(fm1, fm2, test="Chi") anova(fm1, fm2, type="Chi") anova(fm1, fm2) ## calling anova.clmm anova(fmm1, fm1, test="Chi") anova(fmm1, fm1, type="Chi") ordinal/tests/test.clm.Theta.R0000644000175100001440000001201012447075623016006 0ustar hornikuserslibrary(ordinal) ################################# ## 1 categorical variable in nominal: fm <- clm(rating ~ temp, nominal=~contact, data=wine) fm$Theta fm$alpha.mat ## Threshold effects: fm <- clm(rating ~ temp, nominal=~contact, data=wine, threshold="symmetric") fm$Theta fm$alpha.mat fm <- clm(rating ~ temp, nominal=~contact, data=wine, threshold="equidistant") fm$Theta fm$alpha.mat ## Singular fit is still ok (with a warning, though) fm <- clm(rating ~ contact, nominal=~temp, data=wine) fm$alpha.mat fm$Theta ################################# ## 1 continuous variable: set.seed(123) x <- rnorm(nrow(wine), sd=1) fm <- clm(rating ~ temp, nominal=~ x, data=wine) fm$alpha.mat fm$Theta fm <- clm(rating ~ temp, nominal=~ poly(x, 2), data=wine) fm$alpha.mat fm$Theta ################################# ## 1 categorical + 1 continuous variable: set.seed(123) x <- rnorm(nrow(wine), sd=1) fm <- clm(rating ~ temp, nominal=~contact + x, data=wine) fm$alpha.mat fm$Theta fm <- clm(rating ~ temp, nominal=~contact + x, data=wine, threshold="symmetric") fm$alpha.mat fm$Theta ################################# ### NOTE: To get the by-threshold nominal effects of continuous terms ## use: with(fm, t(apply(alpha.mat, 1, function(th) tJac %*% th))) ################################# ## Interactions: fm <- clm(rating ~ temp, nominal=~contact:x, data=wine) fm$alpha.mat fm$Theta fm <- clm(rating ~ temp, nominal=~contact+x+contact:x, data=wine) fm$alpha.mat fm$Theta fm <- clm(rating ~ temp, nominal=~contact*x, data=wine) fm$alpha.mat fm$Theta ## polynomial terms: fm <- clm(rating ~ temp, nominal=~contact + poly(x, 2), data=wine) fm$alpha.mat fm$Theta ## logical variables: (treated like numeric variables) wine$Con <- as.character(wine$contact) == "yes" fm <- clm(rating ~ temp, nominal=~Con, data=wine) fm$Theta fm$alpha.mat wine$Con.num <- 1 * wine$Con fm <- clm(rating ~ temp, nominal=~Con.num, data=wine) fm$Theta fm$alpha.mat ################################# ## Two continuous variables: set.seed(321) y <- rnorm(nrow(wine), sd=1) fm1 <- clm(rating ~ temp, nominal=~y + x, data=wine) fm1$alpha.mat fm1$Theta ## summary(fm1) ################################# ## 1 categorical + 2 continuous variables: fm1 <- clm(rating ~ temp, nominal=~y + contact + x, data=wine) fm1$alpha.mat fm1$Theta fm1 <- clm(rating ~ temp, nominal=~contact + x + contact:x + y, data=wine) summary(fm1) fm1$Theta fm1$alpha.mat fm1 <- clm(rating ~ temp, nominal=~contact*x + y, data=wine) fm1$Theta fm1$alpha.mat t(fm1$alpha.mat) fm1 ################################# ## ordered factors (behaves like numerical variables): data(soup, package="ordinal") fm2 <- clm(SURENESS ~ 1, nominal=~PRODID + DAY, data=soup) fm2$Theta fm2$alpha.mat prodid <- factor(soup$PRODID, ordered=TRUE) fm2 <- clm(SURENESS ~ 1, nominal=~prodid + DAY, data=soup) fm2$alpha.mat fm2$Theta fm2 <- clm(SURENESS ~ 1, nominal=~prodid, data=soup) fm2$alpha.mat fm2$Theta ################################# ## Aliased Coefficients: ## ## Example where the interaction in the nominal effects is aliased (by ## design). Here the two Theta matrices coincide. The alpha.mat ## matrices are similar except one has an extra row with NAs: soup2 <- soup levels(soup2$DAY) levels(soup2$GENDER) xx <- with(soup2, DAY == "2" & GENDER == "Female") ## Model with additive nominal effects: fm8 <- clm(SURENESS ~ PRODID, nominal= ~ DAY + GENDER, data=soup2, subset=!xx) fm8$alpha.mat fm8$Theta ## Model with non-additive, but aliased nominal effects: fm9 <- clm(SURENESS ~ PRODID, nominal= ~ DAY * GENDER, data=soup2, subset=!xx) fm9$alpha.mat fm9$Theta stopEqual <- function(x, y, ca=FALSE) stopifnot(isTRUE(all.equal(x, y, check.attributes=ca))) stopEqual(fm8$alpha.mat, fm9$alpha.mat[1:3, ]) stopEqual(fm8$Theta, fm9$Theta) stopEqual(logLik(fm8), logLik(fm9)) ################################# ## Weights: set.seed(12345) wts <- runif(nrow(soup)) fm2 <- clm(SURENESS ~ 1, nominal=~SOUPTYPE + DAY, data=soup, weights=wts) fm2$Theta ## Offset (correctly gives and error) fm2 <- try(clm(SURENESS ~ 1, nominal=~SOUPTYPE + DAY + offset(wts), data=soup), silent=TRUE) stopifnot(inherits(fm2, "try-error")) ################################# ### Other (misc) examples: fm2 <- clm(SURENESS ~ 1, nominal=~SOUPTYPE + DAY, data=soup) fm2$Theta fm2 fm2 <- clm(SURENESS ~ 1, nominal=~SOUPTYPE * DAY, data=soup) fm2$Theta fm2 fm2$alpha.mat fm2 <- clm(SURENESS ~ 1, nominal=~SOUPTYPE * DAY, data=soup, threshold="symmetric") fm2$Theta fm2$alpha.mat ################################# ### Check correctness of Theta matrix when intercept is removed in ### nominal formula: ### December 25th 2014, RHBC fm1 <- clm(rating ~ temp, nominal=~contact-1, data=wine) fm2 <- clm(rating ~ temp, nominal=~contact, data=wine) stopifnot(isTRUE(all.equal(fm1$Theta, fm2$Theta))) stopifnot(isTRUE(all.equal(fm1$logLik, fm2$logLik))) wine2 <- wine wine2$contact <- relevel(wine2$contact, "yes") fm3 <- clm(rating ~ temp, nominal=~contact, data=wine2) stopifnot(isTRUE(all.equal(coef(fm1, na.rm=TRUE), coef(fm3)))) ################################# ordinal/tests/test.clm.flex.link.R0000644000175100001440000000523013654764615016650 0ustar hornikusers# test.clm.flex.link.R library(ordinal) fm <- clm(rating ~ contact + temp, data=wine, link="log-gamma") fm summary(fm) vcov(fm) logLik(fm) extractAIC(fm) fm2 <- update(fm, link="probit") anova(fm, fm2) head(model.matrix(fm)$X) head(model.frame(fm)) coef(fm) coef(summary(fm)) nobs(fm) terms(fm) # profile(fm) # not implemented confint(fm) predict(fm, se=TRUE, interval = TRUE) predict(fm, type="class") newData <- expand.grid(temp = c("cold", "warm"), contact = c("no", "yes")) ## Predicted probabilities in all five response categories for each of ## the four cases in newData: predict(fm, newdata=newData, type="prob") predict(fm, newdata=newData, type="class") predict(fm, newdata=newData, type="prob", se.fit = TRUE, interval = TRUE) ## Aranda-Ordaz link: fm <- clm(rating ~ contact + temp, data=wine, link="Aranda-Ordaz") fm summary(fm) vcov(fm) logLik(fm) extractAIC(fm) fm2 <- update(fm, link="logit") anova(fm, fm2) head(model.matrix(fm)$X) head(model.frame(fm)) coef(fm) coef(summary(fm)) nobs(fm) terms(fm) # profile(fm) # not implemented confint(fm) predict(fm, se=TRUE, interval = TRUE) predict(fm, type="class") newData <- expand.grid(temp = c("cold", "warm"), contact = c("no", "yes")) ## Predicted probabilities in all five response categories for each of ## the four cases in newData: predict(fm, newdata=newData, type="prob") predict(fm, newdata=newData, type="class") predict(fm, newdata=newData, type="prob", se.fit = TRUE, interval = TRUE) ######################################################################## ### Models with scale + flex link (or cauchit link) ######################################################################## fm <- clm(SURENESS ~ PRODID, scale=~PROD, data = soup, link="Aranda-Ordaz") summary(fm) fm <- clm(SURENESS ~ PRODID, scale=~PROD, data = soup, link="log-gamma") summary(fm) fm <- clm(SURENESS ~ PRODID, scale=~PROD, data = soup, link="cauchit") summary(fm) ######################################################################## ### clm.fit ######################################################################## ## Example with log-gamma: fm1 <- clm(rating ~ contact + temp, data=wine, link="log-gamma") summary(fm1) ## get the model frame containing y and X: mf1 <- update(fm1, method="design") names(mf1) res <- clm.fit(mf1$y, mf1$X, link="log-gamma") ## invoking the factor method coef(res) stopifnot(all.equal(coef(res), coef(fm1))) ## Example with Aranda-Ordaz: fm1 <- clm(rating ~ contact + temp, data=wine, link="Aranda-Ordaz") mf1 <- update(fm1, method="design") res <- clm.fit(mf1$y, mf1$X, link="Aranda") ## invoking the factor method stopifnot(all.equal(coef(res), coef(fm1))) ordinal/tests/clmm.formula.R0000755000175100001440000001231111752454332015610 0ustar hornikuserslibrary(ordinal) data(wine) ################################# ## Appropriate evaluation of formulas: ## These all work as intended with no warnings or errors: fm1 <- clmm(rating ~ contact + (1|judge), data=wine) fm1 fm1 <- clmm("rating ~ contact + (1|judge)", data=wine) fm1 fm1 <- clmm(as.formula("rating ~ contact + (1|judge)"), data=wine) fm1 fm1 <- clmm(as.formula(rating ~ contact + (1|judge)), data=wine) fm1 ################################# ### finding variables in the environment of the formula: makeform <- function() { f1 <- as.formula(rating ~ temp + contact + (1|judge)) rating <- wine$rating temp <- wine$temp contact <- wine$contact judge <- wine$judge f1 } ## 'makeform' makes are formula object in the environment of the ## function makeform: f1 <- makeform() f1 # print class(f1) ## If we give the data, we can evaluate the model: fm1 <- clmm(f1, data=wine) ## We can also evaluate the model because the data are available in ## the environment associated with the formula: fm1 <- clmm(f1) ## For instance, the 'rating' variable is not found in the Global ## environment; we have to evaluate the 'name' of 'rating' in the ## appropriate environment: (try(rating, silent=TRUE)) eval(as.name("rating"), envir=environment(f1)) ## If instead we generate the formula in the Global environment where ## the variables are not found, we cannot evaluate the model: f2 <- as.formula(rating ~ temp + contact + (1|judge)) (try(fm2 <- clmm(f2), silent=TRUE)) environment(f2) <- environment(f1) fm2 <- clmm(f2) ################################# ## Use of formula-objects f <- formula(rating ~ temp + contact + (1|judge)) m2 <- clmm(f, data = wine) summary(m2) ################################# ## Other ways to construct formulas: set.seed(12345) y <- factor(sample(1:4,20,replace=TRUE)) x <- rnorm(20) b <- gl(5, 4, labels=letters[1:5]) data <- data.frame(y=y, x=x, b=b) rm(x, y, b) clmm(y ~ x + (1|b), data=data) fit <- clmm(data$y ~ data$x + (1|data$b)) fit fit <- clmm(data[, 1] ~ data[, 2] + (1|data[, 3])) fit ################################# ## Evaluation within other functions: ## date: January 18th 2012. ## ## The problem was raised by Stefan Herzog (stefan.herzog@unibas.ch) ## January 12th 2012 in trying to make clmm work with glmulti. fun.clmm <- function(formula, data) ### This only works because clmm via eclmm.model.frame is careful to ### evaluate the 'formula' in the parent environment such it is not the ### character "formula" that is attempted evaluated. clmm(formula, data = data) fun2.clmm <- function(formula, data, weights, subset) { ### This should be the safe way to ensure evaluation of clmm in the ### right environment. mc <- match.call() mc[[1]] <- as.name("clmm") eval.parent(mc) } fun.clmm(rating ~ temp + contact + (1|judge), data=wine) ## works fun2.clmm(rating ~ temp + contact + (1|judge), data=wine) ## works form1 <- "rating ~ temp + contact + (1|judge)" fun.clmm(form1, data=wine) ## works fun2.clmm(form1, data=wine) ## works form2 <- formula(rating ~ temp + contact + (1|judge)) fun.clmm(form2, data=wine) ## works fun2.clmm(form2, data=wine) ## works ## Notice that clmm is not able to get the name of the data (wine) ## correct when using fun.clmm. ################################# ## ## Example 2: using clmm function ## # ## ## Now I want to consider judge as a random effect to account for ## ## grouping structure of data ## mod2 <- clmm(rating ~ temp + contact + (1|judge), data=wine) ## ## ##Again, I started by using my own code to run all potential models: ## ## put names of all your variables in this vector: ## vl2 <- c("temp", "contact") ## ## generate list of possible combinations of variables: ## combos2 <- NULL ## for(i in 1:length(vl2)) { ## combos2 <- c(combos2, combn(vl2, i, simplify = F)) ## } ## ## create formulae and run models one by one, saving them as model1, ## ## model2 etc... ## for (i in 1:length(combos2)) { ## vs2 <- paste(combos2[[i]], collapse=" + ") ## f2 <- formula(paste("rating ~ ", vs2, "+(1|judge)", sep="")) ## print(f2) ## assign(paste("model", i, sep=""), clmm(f2, data=wine)) ## } ## summary(model1) # etc ## summary(model2) # etc ## summary(model3) # etc ## ## models <- vector("list", length(combos2)) ## for(i in 1:length(combos2)) { ## vs2 <- paste(combos2[[i]], collapse=" + ") ## f2 <- formula(paste("rating ~ ", vs2, "+(1|judge)", sep="")) ## print(f2) ## models[[i]] <- clmm(f2, data=wine) ## ## assign(paste("model", i, sep=""), clmm(f2, data=wine)) ## } ## ## ## Coefficients, AIC and BIC: ## lapply(models, function(m) coef(summary(m))) ## lapply(models, AIC) ## lapply(models, BIC) ## ## ## library(MuMIn) ## ## dd2 <- dredge(mod2) ## does not work ## ## ?dredge ## ## traceback() ## ## mod2$formula ## ## terms(as.formula(formula(mod2))) ## ## ## ## library(lme4) ## ## fmm1 <- lmer(response ~ temp + contact + (1|judge), data=wine) ## ## fmm1 ## ## terms(as.formula(lme4:::formula(fmm1))) ## ## terms(as.formula(formula(fmm1))) ordinal/tests/test.clm.single.anova.R0000644000175100001440000000342213633002525017321 0ustar hornikusers# test.clm.single.anova.R library(ordinal) # WRE says "using if(requireNamespace("pkgname")) is preferred, if possible." # even in tests: assertError <- function(expr, ...) if(requireNamespace("tools")) tools::assertError(expr, ...) else invisible() assertWarning <- function(expr, ...) if(requireNamespace("tools")) tools::assertWarning(expr, ...) else invisible() fm <- clm(rating ~ temp * contact, scale=~contact, data=wine) anova(fm, type="I") anova(fm, type="II") anova(fm, type="III") anova(fm, type=1) anova(fm, type=2) anova(fm, type=3) anova(fm, type="1") anova(fm, type="2") anova(fm, type="3") anova(fm, type="marginal") # Nominal effects: fm <- clm(rating ~ temp, nominal=~contact, data=wine) anova(fm) # Flexible links: fm1 <- clm(rating ~ temp + contact, link="log-gamma", data=wine) anova(fm1, type=1) anova(fm1, type=2) anova(fm1, type=3) # Equivalence of tests irrespective of contrasts: fm1 <- clm(SURENESS ~ PRODID * SOUPFREQ, data=soup) # summary(fm1) (an1 <- anova(fm1, type=3)) fm2 <- clm(SURENESS ~ PRODID * SOUPFREQ, data=soup, contrasts = list(SOUPFREQ = "contr.sum", PRODID = "contr.SAS")) # summary(fm2) anova(fm1, fm2) (an2 <- anova(fm2, type=3)) stopifnot( isTRUE(all.equal(an1, an2, check.attributes=FALSE)) ) # Aliased coefficients: fm1 <- clm(SURENESS ~ PRODID * DAY, data=soup) anova(fm1, type=1) anova(fm1, type=2) anova(fm1, type=3) # Aliased term (due to nominal effects): fm <- clm(rating ~ temp * contact, nominal=~contact, data=wine) anova(fm, type=1) anova(fm, type=2) anova(fm, type=3) # model with all NA in vcov(object): fm <- clm(rating ~ temp * contact, nominal=~contact, scale=~contact, data=wine) assertError(anova(fm, type=1)) # error assertError(anova(fm, type=2)) # error assertError(anova(fm, type=3)) # error all(is.na(vcov(fm))) ordinal/tests/nominal.test.R0000644000175100001440000000413412175707057015635 0ustar hornikuserslibrary(ordinal) if(require(MASS)) { fm1 <- clm(Sat ~ Infl + Type + Cont, data=housing, weights=Freq) scale_test(fm1) nominal_test(fm1) fm2 <- update(fm1, scale=~Cont) scale_test(fm2) nominal_test(fm2) fm3 <- update(fm1, nominal=~ Cont) fm3$Theta anova(fm2, fm3) fm3$alpha.mat summary(fm3) } ################################# ### Testing nominal_test and scale_test: fm1 <- clm(rating ~ temp * contact, data=wine) ## names(fm1) fm2 <- clm(rating ~ temp * contact, data=wine, nominal=~contact) (an <- anova(fm1, fm2)) (nm <- nominal_test(fm1)) stopifnot(isTRUE(all.equal(an[2, 6], nm["contact", 5]))) fm2 <- clm(rating ~ temp * contact, data=wine, scale=~contact) (an <- anova(fm1, fm2)) (sc <- scale_test(fm1)) stopifnot(isTRUE(all.equal(an[2, 6], sc["contact", "Pr(>Chi)"]))) fm1 <- clm(rating ~ temp + contact, nominal=~temp + contact, data=wine) fm1 try(nominal_test(fm1), silent=TRUE)[1] ## gives error OK scale_test(fm1) fm1 <- clm(rating ~ temp + contact, scale=~temp + contact, data=wine) fm1 try(scale_test(fm1), silent=TRUE)[1] ## gives error OK nominal_test(fm1) ## Using weights: set.seed(123454321) wt <- runif(nrow(wine)) fm1 <- clm(rating ~ temp * contact, data=wine, weigths=wt) nominal_test(fm1) scale_test(fm1) ## No nominal test for judge since that model is not identifiable: fm1 <- clm(rating ~ judge + temp + contact, data=wine) nominal_test(fm1) scale_test(fm1) fm1 <- clm(rating ~ judge + temp, nominal=~contact, data=wine) nominal_test(fm1) summary(fm1) ## A continuous variable: set.seed(123454321) x <- rnorm(nrow(wine), sd=1) fm <- clm(rating ~ temp, nominal=~contact * x, data=wine) nominal_test(fm) scale_test(fm) fm <- clm(rating ~ temp + x, nominal=~contact, data=wine) nominal_test(fm) scale_test(fm) ## poly: fm <- clm(rating ~ temp + poly(x, 2), nominal=~contact, data=wine) nominal_test(fm) scale_test(fm) ## another combination: fm1 <- clm(SURENESS ~ PRODID + DAY + SOUPTYPE + SOUPFREQ, scale=~PROD, nominal=~ DAY*GENDER, data=soup) fm1 nominal_test(fm1) scale_test(fm1) ################################# ordinal/tests/test0weights.R0000644000175100001440000000431512450062502015636 0ustar hornikuserslibrary(ordinal) options(contrasts = c("contr.treatment", "contr.poly")) ## library(devtools) ## r2path <- "/Users/rhbc/Documents/Rpackages/ordinal/pkg/ordinal" ## clean_dll(pkg = r2path) ## load_all(r2path) ## one zero weight: data(wine, package="ordinal") wts <- rep(1, nrow(wine)) wine$rating wts[1] <- 0 fm1 <- clm(rating ~ contact + temp, data=wine, weights=wts) fm1 fm1$n ## 72 fm1$nobs ## 71 confint(fm1) plot(profile(fm1)) plot(slice(fm1), 5) convergence(fm1) drop1(fm1, test="Chi") add1(fm1, scope=~.^2, test="Chi") ## clm_anova(fm1) pred <- predict(fm1, newdata=wine) ## OK step.fm1 <- step(fm1, trace=0) fitted(fm1) dim(model.matrix(fm1)$X) dim(model.matrix(fm1, "B")$B1) mf <- update(fm1, method="model.frame") str(mf) wts <- mf$wts dim(model.matrix(fm1)$X[wts > 0, , drop=FALSE]) fm1b <- clm(rating ~ temp, scale=~contact, data=wine, weights=wts) summary(fm1b) pr <- profile(fm1b) confint(pr) plot(pr, 1) fm1c <- clm(rating ~ temp, nominal=~contact, data=wine, weights=wts) summary(fm1c) pr <- profile(fm1c) confint(pr) plot(pr, 1) ## nominal.test(fm1) ## scale.test(fm1) ## zero out an entire response category: wts2 <- 1 * with(wine, rating != "2") fm2 <- clm(rating ~ contact + temp, data=wine, weights=wts2) fm2 fm2$n ## 72 fm2$nobs ## 50 ## Dimension of X and B1, B2 differ: dim(model.matrix(fm2)$X) dim(model.matrix(fm2, "B")$B1) ## Cannot directly evaluate predictions on the original data: try(predict(fm2, newdata=wine), silent=TRUE)[1] confint(fm2) profile(fm2) plot(slice(fm2), 5) step.fm2 <- step(fm2, trace=0) fitted(fm2) ## Scale and nominal effects: fm2b <- clm(rating ~ temp, scale=~contact, data=wine, weights=wts2) summary(fm2b) pr <- profile(fm2b) confint(pr) plot(pr, 1) fm2c <- clm(rating ~ temp, nominal=~contact, data=wine, weights=wts2) summary(fm2c) pr <- profile(fm2c) confint(pr) plot(pr, 1) pred <- predict(fm2c, newdata=wine[!names(wine) %in% "rating"]) pred <- predict(fm2b, newdata=wine[!names(wine) %in% "rating"]) ## nominal.test(fm2) ## scale.test(fm2) ## Different data sets (error): try(anova(fm1, fm2), silent=TRUE)[1] ## OK ## Test clm.fit: wts2 <- 1 * with(wine, rating != "2") mf2 <- update(fm2, method="design") fm3 <- with(mf2, clm.fit(y, X, weights=wts)) ################################# ordinal/tests/testAnova.clm2.R0000644000175100001440000000272412176227351016020 0ustar hornikuserslibrary(ordinal) options(contrasts = c("contr.treatment", "contr.poly")) ## More manageable data set: (tab26 <- with(soup, table("Product" = PROD, "Response" = SURENESS))) dimnames(tab26)[[2]] <- c("Sure", "Not Sure", "Guess", "Guess", "Not Sure", "Sure") dat26 <- expand.grid(sureness = as.factor(1:6), prod = c("Ref", "Test")) dat26$wghts <- c(t(tab26)) m1 <- clm(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logit") ## anova m2 <- update(m1, scale = ~1) anova(m1, m2) mN1 <- clm(sureness ~ 1, nominal = ~prod, data = dat26, link = "logit") anova(m1, mN1) anova(m1, m2, mN1) ## dropterm if(require(MASS)) { dropterm(m1, test = "Chi") mB1 <- clm(SURENESS ~ PROD + GENDER + SOUPTYPE, scale = ~ COLD, data = soup, link = "probit") dropterm(mB1, test = "Chi") # or ## addterm addterm(mB1, scope = ~.^2, test = "Chi") ## addterm(mB1, scope = ~ . + AGEGROUP + SOUPFREQ, ## test = "Chi", which = "location") ## addterm(mB1, scope = ~ . + GENDER + SOUPTYPE, ## test = "Chi", which = "scale") ## Fit model from polr example: ## data(housing, package = "MASS") fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) ## addterm(fm1, ~ Infl + Type + Cont, test= "Chisq", which = "scale") dropterm(fm1, test = "Chisq") fm2 <- update(fm1, scale =~ Cont) fm3 <- update(fm1, formula =~.-Cont, nominal =~ Cont) anova(fm1, fm2, fm3) } ordinal/tests/clmm.methods.R0000644000175100001440000000204514335121500015572 0ustar hornikuserslibrary(ordinal) data(wine) ################################# ## model.matrix method for clmm-objects: fmm1 <- clmm(rating ~ contact + temp + (1|judge), data=wine) mm <- model.matrix(fmm1) stopifnot(inherits(mm, "matrix"), dim(mm) == c(72, 3)) ################################# ## anova.clmm works even if formula does not have an environment: fmm1 <- clmm(rating ~ temp * contact + (1|judge), data = wine) fmm2 <- clmm(rating ~ temp + contact + (1|judge), data = wine) environment(fmm1$formula) <- NULL environment(fmm2$formula) <- NULL anova(fmm1, fmm2) ################################# ## Test that ranef, condVar and VarCorr work as they are supposed to whether or ## not nlme and lme4 are loaded: fm <- clmm(rating ~ temp + contact + (1|judge), data = wine) fm ranef(fm) VarCorr(fm) condVar(fm) summary(fm) library(nlme) ranef(fm) VarCorr(fm) condVar(fm) library(lme4) ranef(fm) VarCorr(fm) condVar(fm) fm1 <- lmer(Reaction ~ Days + (Days | Subject), data=sleepstudy) ranef(fm1) VarCorr(fm1) ranef(fm) VarCorr(fm) condVar(fm) summary(fm) ordinal/tests/test.general.R0000644000175100001440000000010512446243451015601 0ustar hornikusers txt <- citation("ordinal") stopifnot(as.logical(grep("year", txt))) ordinal/tests/clmm.control.R0000755000175100001440000000227111761151324015622 0ustar hornikuserslibrary(ordinal) data(wine) ### 3 options for specifying control arguments: ## 1) control is a simple list, e.g. list(trace=-1) ## 2) control is a call to clmm.control ## 3) control is an empty list; list() ## all in combination with extra control arguments. ordinal:::getCtrlArgs(clmm.control(), list(maxIter=200)) ordinal:::getCtrlArgs(list(), list(maxIter=200)) ordinal:::getCtrlArgs(list(), list(trace=-1)) ordinal:::getCtrlArgs(list(), list(trace=1)) ordinal:::getCtrlArgs(list(), list()) ordinal:::getCtrlArgs(list(maxIter=2), list()) ordinal:::getCtrlArgs(clmm.control(), list()) ordinal:::getCtrlArgs(clmm.control(maxIter=100), list(maxIter=200)) ordinal:::getCtrlArgs(clmm.control(maxIter=100), list(maxIter=200)) ordinal:::getCtrlArgs(clmm.control(), list(trace=1)) ordinal:::getCtrlArgs(clmm.control(), list(trace=-1)) ordinal:::getCtrlArgs(clmm.control(trace=1), list()) ordinal:::getCtrlArgs(clmm.control(trace=-1), list()) ordinal:::getCtrlArgs(clmm.control(trace=0), list()) ## Don't specify trace twice - surprising behavior might occur: ordinal:::getCtrlArgs(clmm.control(trace=1), list(trace=-1)) ordinal:::getCtrlArgs(clmm.control(trace=-1), list(trace=1)) ordinal/tests/test.clm.convergence.R0000644000175100001440000000343312431426564017245 0ustar hornikuserslibrary(ordinal) ## Testing that errors in chol() are caught soon enough: cy <- with(wine, which(temp == "cold" & contact == "yes")) wine2 <- subset(wine, subset=(!1:nrow(wine) %in% cy)) wine2[c(9, 15, 46), "rating"] <- NA fm1 <- clm(rating ~ temp, scale=~contact, nominal=~contact, data=wine2) fm1 <- try(clm(rating ~ temp, scale=~contact, nominal=~contact, data=wine2, control=list(gradTol=1e-12)), silent=TRUE) fm2 <- try(clm(rating ~ temp, scale=~contact, nominal=~contact, data=wine2, control=list(gradTol=1e-15)), silent=TRUE) ## These gave errors in version 2014.11-12. stopifnot(!inherits(fm1, "try-error")) stopifnot(!inherits(fm2, "try-error")) summary(fm1) summary(fm2) ## Error in convergence.clm() due to bad evaluation of model ## environment with update(object, doFit=FALSE): wine3 <- wine set.seed(1234) wts <- runif(nrow(wine3), 0, 2) fm3 <- clm(rating ~ temp + contact, data=wine3, weights=wts) c0 <- convergence(fm3) set.seed(1234) fm3 <- clm(rating ~ temp + contact, data=wine3, weights=runif(nrow(wine3), 0, 2)) c1 <- convergence(fm3) c0$info$logLik.Error c1$info$logLik.Error all.equal(c0$info$logLik.Error, c1$info$logLik.Error) ## In version 2014.11-14: ## > wine3 <- wine ## > set.seed(1234) ## > wts <- runif(nrow(wine3), 0, 2) ## > fm3 <- clm(rating ~ temp + contact, data=wine3, ## + weights=wts) ## > c0 <- convergence(fm3) ## > set.seed(1234) ## > fm3 <- clm(rating ~ temp + contact, data=wine3, ## + weights=runif(nrow(wine3), 0, 2)) ## > c1 <- convergence(fm3) ## > c0$info$logLik.Error ## [1] "<1e-10" ## > c1$info$logLik.Error ## [1] "4.80e+00" ## > all.equal(c0$info$logLik.Error, c1$info$logLik.Error) ## [1] "1 string mismatch" stopifnot(c0$info$logLik.Error == c1$info$logLik.Error) ordinal/tests/clm.fit.R0000644000175100001440000000223613331062435014544 0ustar hornikuserslibrary(ordinal) data(wine) ## clm.fit with nominal and scale effects: ## get simple model: fm1 <- clm(rating ~ temp, scale=~temp, nominal=~ contact, data=wine, method="design") str(fm1, give.attr=FALSE) fm1$control$method <- "Newton" res <- clm.fit(fm1) names(res) res$Theta ## construct some weights and offsets: set.seed(1) off1 <- runif(length(fm1$y)) set.seed(1) off2 <- rnorm(length(fm1$y)) set.seed(1) wet <- runif(length(fm1$y)) ## Fit various models: fit <- clm.fit(fm1$y, fm1$X, fm1$S, fm1$NOM, weights=wet) Coef <- c(-0.905224120279548, 1.31043498891987, 3.34235590523008, 4.52389661722693, -3.03954652971192, -1.56922389038976, -1.75662549320839, -1.16845464236365, 2.52988580848393, -0.0261457032829033) stopifnot(all.equal(coef(fit), Coef, check.attributes=FALSE, tol=1e-6)) str(fit) fit <- clm.fit(fm1$y, fm1$X, fm1$S, fm1$NOM, offset=off1) str(fit) fit <- clm.fit(fm1$y, fm1$X, fm1$S, fm1$NOM, offset=off1, S.offset=off2) str(fit) fit <- clm.fit(fm1$y, fm1$X, fm1$S) str(fit) fit <- clm.fit(fm1$y, fm1$X) str(fit) fit <- clm.fit(fm1$y) coef(fit) str(fit) ## Remember: compare with corresponding .Rout file ordinal/tests/test.makeThresholds.R0000644000175100001440000000115113633002525017135 0ustar hornikusers# test.makeThresholds.R library(ordinal) # Prvious bug which is now fixed: res <- ordinal:::makeThresholds(letters[1:3], "symmetric") stopifnot(length(res$alpha.names) == res$nalpha) # length(res$alpha.names) used to be 4 # Real data example: wine <- within(wine, { rating_comb3b <- rating levels(rating_comb3b) <- c("1-2", "1-2", "3", "4-5", "4-5") }) wine$rating_comb3b[1] <- "4-5" # Need to remove the zero here to avoid inf MLE ftable(rating_comb3b ~ temp + contact, data=wine) fm.comb3_c <- clm(rating_comb3b ~ contact, #scale=~contact, threshold = "symmetric", data=wine) # no error ordinal/tests/testthat/0000755000175100001440000000000014533322576014734 5ustar hornikusersordinal/tests/testthat/test-utils.R0000644000175100001440000000105312450062502017155 0ustar hornikusers context("testing namedList") a <- 1 b <- 2 c <- 3 d <- list(e=2, f=factor(letters[rep(1:2, 2)])) g <- matrix(runif(9), 3) h <- NULL test_that("namedList returns a named list", { res <- namedList(a, b, c) expect_equal(names(res), c("a", "b", "c")) expect_equivalent(res, list(a, b, c)) res <- namedList(a, b, c, d, g) expect_equal(names(res), c("a", "b", "c", "d", "g")) expect_equivalent(res, list(a, b, c, d, g)) res <- namedList(a, h) expect_equal(names(res), c("a", "h")) expect_equivalent(res, list(a, h)) }) ordinal/tests/testthat/test-clm.R0000644000175100001440000000537212447563614016620 0ustar hornikusers context("Appropriate error and warning messages from clm()") test_that("formula is specified in clm", { expect_error(clm(nominal=~contact, data=wine), "Model needs a formula") expect_error(clm(scale=~contact, data=wine), "Model needs a formula") expect_error(clm(), "Model needs a formula") }) test_that("response is not in scale or nominal", { ## No response in formula: expect_error( fm <- clm(~ temp + contact, data=wine) , "'formula' needs a response") ## response in scale: expect_error( fm <- clm(rating ~ temp, scale=rating ~ contact, data=wine) , "response not allowed in 'scale'") expect_error( fm <- clm(rating ~ temp, nominal=rating ~ contact, data=wine) , "response not allowed in 'nominal'") wine2 <- wine wine2$rate <- as.numeric(as.character(wine2$rating)) expect_error( fm <- clm(rate ~ temp + contact, data=wine2) , "response in 'formula' needs to be a factor") }) test_that("offset is allowed in formula, but not in scale and nominal", { wine2 <- wine set.seed(1) wine2$off <- runif(nrow(wine)) ## offset in formula is fine: expect_is( clm(rating ~ temp + contact + offset(off), data=wine2) , "clm") expect_is( clm(rating ~ offset(off), nominal=~contact, data=wine2) , "clm") ## no other terms in formula. ## offset in scale is also fine: expect_is( clm(rating ~ temp, scale=~contact + offset(off), data=wine2) , "clm") expect_is( clm(rating ~ contact + temp, scale=~offset(off), data=wine2) , "clm") ## no other terms in scale. ## offset as argument is not allowed: expect_error( clm(rating ~ temp + contact, offset=off, data=wine2) , "offset argument not allowed: specify 'offset' in formula or scale arguments instead") ## offset in nominal is not allowed: expect_error( clm(rating ~ temp, nominal=~contact + offset(off), data=wine2) , "offset not allowed in 'nominal'") expect_error( clm(rating ~ temp, nominal=~1 + offset(off), data=wine2) , "offset not allowed in 'nominal'") }) test_that("Intercept is needed and assumed", { expect_is( fm <- clm(rating ~ 1, data=wine) , "clm") expect_warning( fm <- clm(rating ~ -1 + temp, data=wine) , "an intercept is needed and assumed in 'formula'") expect_warning( fm <- clm(rating ~ 0 + temp, data=wine) , "an intercept is needed and assumed in 'formula'") expect_warning( fm <- clm(rating ~ 0, data=wine) , "an intercept is needed and assumed in 'formula'") ## and similar with scale (+nominal) }) ## test_that("", { ## ## }) ordinal/tests/testthat/test-contrasts.R0000644000175100001440000000504113633002525020041 0ustar hornikuserscontext("Contrast specification") test_that("clm gives contrast warnings when it should", { ## No warnings: ## Different combinations of terms i various formulae. Note that the ## contrasts apply to e.g. 'contact' in both 'formula' and 'scale': contr <- c(temp="contr.sum", contact="contr.sum") expect_false(givesWarnings( fm1 <- clm(rating ~ temp + contact, scale=~contact, data=wine) ## OK )) # expect_false(givesWarnings( # fm1 <- clm(rating ~ temp + contact, scale=~contact, data=wine, # contrasts=contr) ## OK # )) # expect_false(givesWarnings( # fm1 <- clm(rating ~ temp, scale=~contact, data=wine, # contrasts=contr) ## OK # )) # expect_false(givesWarnings( # fm1 <- clm(rating ~ temp, nominal=~contact, data=wine, # contrasts=contr) ## OK # )) # expect_false(givesWarnings( # fm1 <- clm(rating~1, scale=~temp, nominal=~contact, data=wine, # contrasts=contr) ## OK # )) ## These should give warnings: ## A warning is given if a variable is not present in any of the ## formulae: expect_warning( fm <- clm(rating ~ temp, contrasts=c(contact="contr.sum"), data=wine) , "variable 'contact' is absent: its contrasts will be ignored") expect_warning( fm <- clm(rating ~ temp, contrasts=contr, data=wine) , "variable 'contact' is absent: its contrasts will be ignored") expect_warning( fm <- clm(rating ~ 1, scale=~contact, contrasts=c(temp="contr.sum"), data=wine) , "variable 'temp' is absent: its contrasts will be ignored") expect_warning( fm <- clm(rating ~ 1, scale=~contact, contrasts=list(temp="contr.sum"), data=wine) , "variable 'temp' is absent: its contrasts will be ignored") }) test_that("checkContrasts gives when it should", { ## No warnings: fm0 <- clm(rating ~ temp + contact, scale=~contact, data=wine) expect_false( givesWarnings(checkContrasts(fm0$S.terms, fm0$S.contrasts)) ) expect_false( givesWarnings(checkContrasts(fm0$terms, fm0$contrasts)) ) expect_false( givesWarnings(checkContrasts(fm0$terms, fm0$S.contrasts)) ) expect_false( givesWarnings(checkContrasts(fm0$terms, fm0$S.contrasts)) ) ## Warning: expect_warning( checkContrasts(fm0$S.terms, fm0$contrasts) , "variable 'temp' is absent: its contrasts will be ignored") }) ordinal/tests/testthat/test-misc.R0000644000175100001440000000024112457750665016773 0ustar hornikuserscontext("Test of general functionality") test_that("citation reports year", { txt <- citation("ordinal") expect_true(as.logical(grep("year", txt))) }) ordinal/tests/testthat/test-clm-formula.R0000644000175100001440000001557613724062771020267 0ustar hornikuserscontext("Appropriate evaluation of formulae in clm()") ## These fail and give appropriate error messages: test_that("standard formulae are interpreted correctly/give right error messages", { expect_error( fm1 <- clm(rating ~ contact, scale=temp, data=wine) , "object 'temp' not found") expect_error( fm1 <- clm(rating ~ contact, scale=~Temp, data=wine) , "object 'Temp' not found") expect_error( fm1 <- clm(rating ~ contact, scale="temp", data=wine) , "unable to interpret 'formula', 'scale' or 'nominal'") sca <- "temp" expect_error( fm1 <- clm(rating ~ contact, scale=sca, data=wine) , "unable to interpret 'formula', 'scale' or 'nominal'") ## sca <- as.formula(sca) ## sca <- as.formula(temp) ## sca <- with(wine, as.formula(temp)) ## These all work as intended with no warnings or errors: fm1 <- clm(rating ~ contact, scale="~temp", data=wine) fm2 <- clm(rating ~ contact, scale=~temp, data=wine) sca <- "~temp" fm3 <- clm(rating ~ contact, scale=sca, data=wine) sca <- as.formula("~temp") fm4 <- clm(rating ~ contact, scale=sca, data=wine) fm5 <- clm(rating ~ contact, scale=as.formula(~temp), data=wine) fm6 <- clm(rating ~ contact, scale=as.formula("~temp"), data=wine) ## Test that they are all clm objects: for(txt in paste0("fm", 1:6)) expect_is(eval(parse(text=txt)), "clm") ################################# ## can evaluate if 'formula' is a character: f <- "rating ~ contact + temp" expect_is(clm(f, data=wine), "clm") expect_is(clm(as.formula(f), data=wine), "clm") ################################# }) test_that("variables are found in the right environments", { ## finding variables in the environment of the formula: makeform <- function() { f1 <- as.formula(rating ~ temp + contact) rating <- wine$rating temp <- wine$temp contact <- wine$contact f1 } ## 'makeform' makes are formula object in the environment of the ## function makeform: f1 <- makeform() f1 # print expect_is(f1, "formula") ## If we give the data, we can evaluate the model: expect_is(fm1 <- clm(f1, data=wine), "clm") ## We can also evaluate the model because the data are available in ## the environment associated with the formula: expect_is(fm1 <- clm(f1), "clm") ## For instance, the 'rating' variable is not found in the Global ## environment; we have to evaluate the 'name' of 'rating' in the ## appropriate environment: (try(rating, silent=TRUE)) expect_error( rating , "'rating' not found") expect_is( eval(as.name("rating"), envir=environment(f1)) , "factor") ## If instead we generate the formula in the Global environment where ## the variables are not found, we cannot evaluate the model: f2 <- as.formula(rating ~ temp + contact) expect_error( fm2 <- clm(f2) ) ## Setting the appropriate environment of the formula restores the ## ability to evaluate the model: environment(f2) <- environment(f1) expect_is( fm2 <- clm(f2) , "clm") ################################# ## Use of formula-objects in location, scale and nominal: ## Bug-report from LluĂ­s Marco Almagro ## 5 May 2010 17:58 f <- formula(rating ~ temp) fs <- formula( ~ contact) expect_is( m2 <- clm(f, scale = fs, data = wine) , "clm") }) test_that("data indexing works in formulae", { ################################# ## Other ways to construct formulas: set.seed(12345) y <- factor(sample(1:4,20,replace=TRUE)) x <- rnorm(20) data <- data.frame(y=y,x=x) rm(x, y) expect_is( fit <- clm(data$y ~ data$x) , "clm") expect_is( fit <- clm(data[,1] ~ data[,2]) , "clm") ## This previously failed, but now works: expect_is( fit <- clm(data$y ~ data$x, ~data$x) , "clm") }) test_that("clm may be invoked within functions", { ################################# ## Evaluation within other functions: ## date: January 18th 2012. ## ## The problem was raised by Stefan Herzog (stefan.herzog@unibas.ch) ## January 12th 2012 in trying to make clm work with glmulti. fun.clm <- function(formula, data) ### This only works because clm via eclm.model.frame is careful to ### evaluate the 'formula' in the parent environment such it is not the ### character "formula" that is attempted evaluated. clm(formula, data = data) fun2.clm <- function(formula, data, weights, subset) { ### This should be the safe way to ensure evaluation of clm in the ### right environment. mc <- match.call() mc[[1]] <- as.name("clm") eval.parent(mc) } expect_is( fun.clm(rating ~ temp + contact, data=wine) ## works , "clm") expect_is( fun2.clm(rating ~ temp + contact, data=wine) ## works , "clm") form1 <- "rating ~ temp + contact" expect_is( fun.clm(form1, data=wine) ## works , "clm") expect_is( fun2.clm(form1, data=wine) ## works , "clm") form2 <- formula(rating ~ temp + contact) expect_is( fm1 <- fun.clm(form2, data=wine) ## works , "clm") expect_is( fm2 <- fun2.clm(form2, data=wine) ## works , "clm") ## Notice that clm is not able to get the name of the data (wine) ## correct when using fun.clm: expect_true(deparse(fm1$call$data) == "data") expect_true(deparse(fm2$call$data) == "wine") }) test_that("no line breacking in long formulae", { ################################# ## Evaluation of long formulas: no line breaking in getFullForm: rhs <- paste(names(soup)[c(3, 5:12)], collapse=" + ") Location <- as.formula(paste("SURENESS ~ ", rhs, sep=" ")) Scale <- as.formula("~ PROD") expect_is( fm5 <- clm(Location, scale=Scale, data=soup) , "clm") }) test_that("'.'-notation works in formula", { ################################# ## Check that "."-notation works in formula: ## December 25th 2014, RHBC data(wine) wine2 <- wine[c("rating", "contact", "temp")] ## str(wine2) fm0 <- clm(rating ~ ., data=wine2) fm1 <- clm(rating ~ contact + temp, data=wine2) keep <- c("coefficients", "logLik", "info") fun <- function(x, y) stopifnot(isTRUE(all.equal(x, y))) mapply(fun, fm0[keep], fm1[keep]) fun <- function(x, y) {expect_equal(x, y); invisible()} mapply(fun, fm0[keep], fm1[keep]) ################################# }) test_that("long formulae work in clmm", { # Long formulae also work: wine2 <- wine names(wine2) <- lapply(names(wine), paste0, "_quite_long") expect_warning( mm <- clmm(rating_quite_long ~ temp_quite_long + contact_quite_long + (1|judge_quite_long), data = wine2) , regexp = NA) }) ordinal/tests/testthat/test-clm-profile.R0000644000175100001440000000046512450322423020235 0ustar hornikuserscontext("Testing error message from profile.clm") expect_warning( fm2 <- clm(rating ~ contact, scale=~contact, nominal=~contact, data=wine) , "\\(1\\) Hessian is numerically singular") expect_error(profile(fm2) , "Cannot get profile when vcov\\(fitted\\) contains NAs") ordinal/tests/testthat/test-clm-predict.R0000644000175100001440000000065612450062502020230 0ustar hornikuserscontext("Test that clm.predict gives warnings if prevars is absent") fm1 <- clm(rating ~ temp + contact, data=wine) newData <- expand.grid(temp=levels(wine$temp), contact=levels(wine$contact)) expect_false(givesWarnings( predict(fm1, newdata=newData) )) attr(fm1$terms, "predvars") <- NULL expect_warning( predict(fm1, newdata=newData) , "terms object does not have a predvars attribute") ordinal/tests/testthat/test-clmm-checkRanef.R0000644000175100001440000000214713277541507021020 0ustar hornikuserscontext("Testing error-warning-message from clmm via checkRanef") ## Make example with more random effects than observations: wine$fake <- factor(c(1:65, 1:65)[1:nrow(wine)]) wine$fakeToo <- factor(1:nrow(wine)) ## Check warning, error and 'message' messages: expect_warning( fmm2 <- clmm(rating ~ temp + contact + (1|judge) + (1|fake), data=wine) , "no. random effects") expect_warning( fmm2 <- clmm(rating ~ temp + contact + (1|judge) + (1|fake), data=wine, checkRanef="warn") , "no. random effects") expect_error( fmm2 <- clmm(rating ~ temp + contact + (1|judge) + (1|fake), data=wine, checkRanef="error") , "no. random effects") expect_message( fmm2 <- clmm(rating ~ temp + contact + (1|judge) + (1|fake), data=wine, checkRanef="message") , "no. random effects") expect_error( fmm2 <- clmm(rating ~ temp + contact + (1|fakeToo), data=wine, checkRanef="error") , "no. random effects") expect_error( fmm2 <- clmm(rating ~ temp + contact + (1|judge) + (1|fakeToo), data=wine, checkRanef="error") , "no. random effects") ordinal/tests/ranef.loading.R0000644000175100001440000000032114334204201015701 0ustar hornikusers# check that ranef and VarCorr work even after loading ordinal: library(lme4) fm1 <- lmer(Reaction ~ Days + (Days | Subject), data=sleepstudy) ranef(fm1) VarCorr(fm1) library(ordinal) ranef(fm1) VarCorr(fm1) ordinal/tests/test-all.R0000644000175100001440000000011112447563614014737 0ustar hornikusers if(require(testthat) && require(ordinal)) { test_check("ordinal") } ordinal/tests/test.clm.profile.R0000644000175100001440000000264512431442003016375 0ustar hornikuserslibrary(ordinal) ## Testing that the profile remains the same - that the model object ## is not 'distorted' by update(object/fitted, doFit=FALSE) set.seed(1234) wts <- runif(nrow(wine), 0, 2) fm3 <- clm(rating ~ temp + contact, data=wine, weights=wts) pr <- profile(fm3) set.seed(1234) fm3 <- clm(rating ~ temp + contact, data=wine, weights=runif(nrow(wine), 0, 2)) pr3 <- profile(fm3) ## > set.seed(1234) ## > fm3 <- clm(rating ~ temp + contact, data=wine, ## + weights=runif(nrow(wine), 0, 2)) ## > pr3 <- profile(fm3) ## Warning messages: ## 1: In profile.clm.beta(fitted, which.beta, alpha, max.steps, nsteps, : ## profile may be unreliable for tempwarm because only 1 ## steps were taken down ## 2: In profile.clm.beta(fitted, which.beta, alpha, max.steps, nsteps, : ## profile may be unreliable for tempwarm because only 1 ## steps were taken up ## 3: In profile.clm.beta(fitted, which.beta, alpha, max.steps, nsteps, : ## profile may be unreliable for contactyes because only 1 ## steps were taken down ## 4: In profile.clm.beta(fitted, which.beta, alpha, max.steps, nsteps, : ## profile may be unreliable for contactyes because only 1 ## steps were taken up ## stopifnot(isTRUE(all.equal(pr, pr3, check.attributes=FALSE))) stopifnot( isTRUE(all.equal(pr$tempwarm[, "lroot"], pr3$tempwarm[, "lroot"])), isTRUE(all.equal(pr$contactyes[, "lroot"], pr3$contactyes[, "lroot"]))) ordinal/tests/clmm.R0000755000175100001440000000230014334175405014141 0ustar hornikuserslibrary(ordinal) data(wine) ################################# ## Estimation with a single simple RE term: ## Laplace: fmm1 <- clmm(rating ~ contact + temp + (1|judge), data=wine) summary(fmm1) ## GHQ: fmm.ghq <- clmm(rating ~ contact + temp + (1|judge), data=wine, nAGQ=-10) summary(fmm.ghq) ## AGQ: fmm.agq <- clmm(rating ~ contact + temp + (1|judge), data=wine, nAGQ=10) summary(fmm.agq) ## tests: ## Notice warning about Laplace with multiple REs when nAGQ != 1: fmm1 <- try(clmm(rating ~ contact + temp + (1|judge) + (1|bottle), data=wine, nAGQ=10)) stopifnot(inherits(fmm1, "try-error")) ################################# ## Estimation with several RE terms: data(soup, package="ordinal") fmm <- clmm(SURENESS ~ PROD + (1|RESP) + (1|PROD:RESP), data=soup, threshold="equidistant") summary(fmm) ################################# ## Estimation with implicit intercept: fm1 <- clmm(rating ~ 1 + (1|judge), data = wine) fm2 <- clmm(rating ~ (1|judge), data = wine) fm3 <- clmm(rating ~ 0 + (1|judge), data = wine) stopifnot(isTRUE(all.equal(coef(fm1), coef(fm2), tolerance=1e-5)), isTRUE(all.equal(coef(fm1), coef(fm3), tolerance=1e-5))) ordinal/MD50000644000175100001440000001512014660604713012236 0ustar hornikusers6e462ee95f03b7f43fbd18b92504cfff *DESCRIPTION 9023f060a8aa0d9f16566887e1f561e7 *LICENCE.note a2437fe61640a0e31060e6a16a28d50e *NAMESPACE 2a8d4f3e4ad336e60b5d11b95b8d4b7a *NEWS 869e905a54815e650868264a2bee1264 *R/AO.R b5172dd6e7b5f7f23e133cd279cbb15b *R/clm.R 8f0c1d0af7f7f68728acced4e978c364 *R/clm.Thetamat.R b1b280d156278f991729d0e9d39d70ff *R/clm.anova.R b90d5a1c5abb244750e275a4d0ffec92 *R/clm.fit.R cb4448c0e954f202b681a4665f9b1c38 *R/clm.fitter.R 70fc4552bed2aa792527407004c537d5 *R/clm.frames.R 4e2e7da3c00311fdc12b7d4e84d76917 *R/clm.methods.R c38157d19765d99728b11d20dba4eb3c *R/clm.nominal_test.R 28268872112a7ef9d93f81399e7d8d07 *R/clm.predict.R fb19cbdce82cbdfc755dc7df56a78b7a *R/clm.profile.R f8e467dda373e544c79f853bcccf5db8 *R/clm.simple.R 27531994978ef842f9225558d98f5e8a *R/clm.slice.R c2d95a71c7b8f8a2bfbadd9655dbfdba *R/clm.slice2D.R 3dbf13015e277e7e1c5442491a8899fe *R/clm.start.R c86d631d774ae572238027cb380e7e8d *R/clm2.R bbfecf069481a5a27609b7102f6a7cb8 *R/clmm.R a4cfd611edfc0ef2ec7c84557d20bd09 *R/clmm.formula.R a242d8385d958d9ad27c84fccd868ff7 *R/clmm.methods.R d35ded8d8e8111cbc8a4e4a6debe76c0 *R/clmm.ranef.R 63ca18ecb9e0d7ffb8eed7bb247737ad *R/clmm.ssr.R ef3d4639d726be5e417a7558e431ce53 *R/clmm.start.R 10d62d2cb10d2269d7e3669db3f757dd *R/clmm2.R 5559c014ae600a2f031e897edbbda6a2 *R/clmm2.utils.R 6cfb772181a1ee478b22fdc694c6f0ec *R/contrast_utils.R b52732b2ab5c0113c320df484faec3f9 *R/control.R 06b4ec45624a187e02c9b127239f4156 *R/convergence.R fa85118c3a5612847e6e2e8a62055191 *R/derivatives.R 7d6871b41f4736f496326c81873124a8 *R/drop.coef.R 8d4f671d30b5f7c22395b50297aeadcf *R/gdist.R 651a98b5b14214833f69063bdacaaa62 *R/gumbel.R ffd316f2d6501837566bd3c182213dd9 *R/lgamma.R 274843603afe2a4e57d9117dbcf9f73b *R/terms_utils.R 7dd6b54f58ac7846a3afb3006f55e6a5 *R/utils.R e464fea09b4a6386417c6e5f382bd529 *R/warning_functions.R af7fd248e5f82935b7a091f741b75244 *build/vignette.rds cfdcc7be764e288d7aaacd21ba6ec07f *data/income.rda bae8336d8d47ed6235bae75a36653da9 *data/soup.rda 64e6621941905fa8d8e7530bb5eb0ffb *data/wine.rda 1be7339c91cffb680625234dd051b237 *inst/CITATION ae3b9374f095160fe80630038bbaf34e *inst/doc/clm_article.R 26c233139e172037013c4e8f138118eb *inst/doc/clm_article.Rnw 36d8aebc0ec562c61a427614505b7e7e *inst/doc/clm_article.pdf 64aaa511c3b4dc72b6c004106553bf97 *inst/doc/clmm2_tutorial.R ddde6e9af6699c2d9c11002d12e3049e *inst/doc/clmm2_tutorial.Rnw 255ae37639a7e8fa81d928621d5fbb63 *inst/doc/clmm2_tutorial.pdf bd8055e0c9cc16fdf95f9caebc942c53 *man/VarCorr.Rd a0edf4b1d55157b597efc9c7f7a06f2e *man/addtermOld.Rd fbbfa8a549ecc09ad66aa0e00d1f6d1b *man/anovaOld.Rd 3164cecae2b46ea51b10c5e4c086a9f2 *man/clm.Rd eef6dbcf3a110b0221075d694991a70d *man/clm.anova.Rd e9ab135b857095344d63f5b3695dac45 *man/clm.control.Rd aeedb960b5d0cd91648b2f43261c0010 *man/clm.controlOld.Rd 6b5c14c006fbfe9634616757bf287b9f *man/clm.fit.Rd 02cc7944a1cc6a14870e5c1ba33bd0ae *man/clmOld.Rd 5529ca85369ae94713f65470336e6e20 *man/clmm.Rd 861db001a071e534dc5021120bb62124 *man/clmm.control.Rd 3095fd227ece61f6b6a099d5de003313 *man/clmm.controlOld.Rd d8b5a448143a0da1495756ea2c48ab44 *man/clmmOld.Rd a03c75733972348ddd5f505dc472c26b *man/confint.clm.Rd 50c7e6ec194e8af3bfccca5e3e4e61fb *man/confint.clmmOld.Rd 3d881bc96a9fd9a56c4cd1451c708a7f *man/confintOld.Rd 8e1dcaa797916a35a9de4f1413dee029 *man/convergence.clm.Rd cb5e6dd9111063de64f3643568674fc4 *man/dropCoef.Rd 650996c7b48d859ae5e5ac751dfeaca2 *man/gfun.Rd 4d87ff9fa6c1729a7ad52be5c3f7a16f *man/gumbel.Rd 7f719c8b1d0ede27f15c1fa9cd3aedea *man/income.Rd 5ebc7da192ca06d173b2694853352e9e *man/lgamma.Rd 51b4cdc005b1c26b5d23d04197965c8f *man/nominal.test.Rd 3875373537f4f0d974091bb9a58fff40 *man/ordinal-package.Rd 1f050e8e469290a5c6c9c07e3ae08a29 *man/predict.Rd 731499033e04d0f739cad2d0ad13b9c1 *man/predictOld.Rd 37b2ed10c518b0e95c9b64e211929bab *man/ranef.Rd ffeacc4ef5eb2b97d794c89afdb5c59c *man/slice.clm.Rd 2c66bfbfde8422891b1ca4359c858dc6 *man/soup.Rd 41562a0c8389e5fe01af70802a3e995f *man/updateOld.Rd 079335e2cb6d006b7040c330f4aabd59 *man/wine.Rd a4c8272ba330e14dfb8fff85c1184bca *src/get_fitted.c b774245a99c4226f32d467e15d9c4cf3 *src/init.c 5b028613e6e3b236f905adee877601d8 *src/links.c 7920d50fb3efca7a9ec8a37fab7ccd94 *src/links.h 4ebce05763db1904a275166d250410f0 *src/utilityFuns.c 735d1e1f085ffaaacf1a7628930adc64 *tests/anova.R 89bb425a86eefa6d518534ba2bebffe9 *tests/clm.fit.R 7cf9e5abc7360d67304ac97cb1f4bbad *tests/clm.formula.R ae0d8a60e17d3ebb5a6863f5f1d13dd7 *tests/clmm.R 9ed01ea5d1feb4f302de5a957e195a3b *tests/clmm.control.R cadfa40f297ae2ad3013b99470d73116 *tests/clmm.formula.R f72fcd80cfeff92cb86b987d4a829c9d *tests/clmm.methods.R bb53b627bd127be25140ca9b18cd7570 *tests/confint.R d8267669e5b9c3ab305c6036f1c8d623 *tests/nominal.test.R c0a7ea9adb79f1a72f794d68c0b2a8e3 *tests/ranef.loading.R d1a9b3c673dfe17f1579cb8527af60d3 *tests/test-all.R 16a2a63ab5214f0a105692aedc0c8fc6 *tests/test.clm.Theta.R d4e39c9cbf18fb828ee6abde86063820 *tests/test.clm.convergence.R bbb3efe198444977cfe15200a2f73aa2 *tests/test.clm.flex.link.R 972645dadf3c58dda8dfba40191406f0 *tests/test.clm.model.matrix.R 65465ddc9177b9ef5e0c1eb7ed83bb39 *tests/test.clm.predict.R b237b3a6173025bf72810002e9e0b195 *tests/test.clm.profile.R e91f920a51deaa7c84a7d75f9220486a *tests/test.clm.single.anova.R b666a698afa2ebefbc12b52358969a05 *tests/test.general.R 6faea911a5b2575b5acb57087c697201 *tests/test.makeThresholds.R 434ae1cd4de96ac0d2ac54db684ac7d5 *tests/test.sign.R 0452a68e5a919248553360c9622eb926 *tests/test0weights.R dd771457105e82780b335f6ced52e736 *tests/testAnova.clm2.R ca67691eee70bdd41b3ae5c71f5b61e6 *tests/testCLM.R d1d0e84d5901ddf008e6cbb22e2ce003 *tests/testthat/test-clm-formula.R 5a26fb2b90f90bd574da4ed0758abfe4 *tests/testthat/test-clm-predict.R ff1d040fe6da8b6ffe3e26b2546aa27d *tests/testthat/test-clm-profile.R bfa792df07f282e896fb427ed763abb4 *tests/testthat/test-clm.R 0263b906dbd4420343b72f0b9316ea73 *tests/testthat/test-clmm-checkRanef.R a9c6572a4ca505408b5ee7204021b905 *tests/testthat/test-contrasts.R 49fd8f2e430e2be16217acbc1008a209 *tests/testthat/test-misc.R 234b3c903ae3e070034dff21ff97de82 *tests/testthat/test-utils.R 26c233139e172037013c4e8f138118eb *vignettes/clm_article.Rnw 93f4376771c255464971866bb5220156 *vignettes/clm_article_refs.bib ddde6e9af6699c2d9c11002d12e3049e *vignettes/clmm2_tutorial.Rnw b79878774fe08d5c9e41784df0e084fb *vignettes/ordinal.bib 611a9529149925e573c10c3e44e35f65 *vignettes/static_figs/fig-fig2.pdf bfd5f3a90bf5e07ea91dbe7989988e73 *vignettes/static_figs/fig-figEqui.pdf 4ef0c7b6ada9dbe4f654e78f23c09f00 *vignettes/static_figs/fig-figFlex.pdf 3c8fe3fcbc9df098a95ded136c94b2c5 *vignettes/static_figs/fig-figNom2.pdf 606db1c50178c05344e9f26b31c45375 *vignettes/static_figs/fig-figSca.pdf ordinal/R/0000755000175100001440000000000014533322576012133 5ustar hornikusersordinal/R/terms_utils.R0000644000175100001440000001771014533321514014625 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# # terms_utils.R - utilities for computing on terms objects and friends # ------- Contents: -------- # # --- utility functions: --- # # term2colX # need_yates # no_yates # numeric_terms # get_model_matrix # get_contrast_coding # get_min_data # get_var_list # get_fac_list # get_num_list # get_pairs # get_trts # ############################################## ######## term2colX() ############################################## term2colX <- function(terms, X) { # Compute map from terms to columns in X using the assign attribute of X. # Returns a list with one element for each term containing indices of columns # in X belonging to that term. if(is.null(asgn <- attr(X, "assign"))) stop("Invalid design matrix:", "design matrix 'X' should have a non-null 'assign' attribute", call. = FALSE) term_names <- attr(terms, "term.labels") has_intercept <- attr(terms, "intercept") > 0 col_terms <- if(has_intercept) c("(Intercept)", term_names)[asgn + 1] else term_names[asgn[asgn > 0]] if(!length(col_terms) == ncol(X)) # should never happen. stop("An error happended when mapping terms to columns of X") # get names of terms (including aliased terms) nm <- union(unique(col_terms), term_names) res <- lapply(setNames(as.list(nm), nm), function(x) numeric(0L)) map <- split(seq_along(col_terms), col_terms) res[names(map)] <- map res[nm] # order appropriately } ############################################## ######## need_yates() ############################################## need_yates <- function(model) { ## Do not need yates for: ## - continuous variables ## - factors that are not contained in other factors ## Need yates for all other terms, i.e. terms which are: ## - contained in other terms, AND ## - which are not numeric/continuous term_names <- attr(terms(model), "term.labels") cont <- containment(model) is_contained <- names(cont[sapply(cont, function(x) length(x) > 0)]) nmt <- numeric_terms(model) num_terms <- names(nmt[nmt]) term_names[!term_names %in% num_terms & term_names %in% is_contained] } ############################################## ######## no_yates() ############################################## no_yates <- function(model) { setdiff(attr(terms(model), "term.labels"), need_yates(model)) } ############################################## ######## numeric_terms() ############################################## #' @importFrom stats delete.response terms numeric_terms <- function(model) { ## Determines for all terms (not just all variables) if the 'dataClass' ## is numeric ## (interactions involving one or more numerics variables are numeric). Terms <- delete.response(terms(model)) all_vars <- all.vars(attr(Terms, "variables")) data_classes <- attr(terms(model, fixed.only=FALSE), "dataClasses") var_class <- data_classes[names(data_classes) %in% all_vars] factor_vars <- names(var_class[var_class %in% c("factor", "ordered")]) num_vars <- setdiff(all_vars, factor_vars) term_names <- attr(terms(model), "term.labels") # term_names <- setNames(as.list(term_names), term_names) sapply(term_names, function(term) { vars <- unlist(strsplit(term, ":")) any(vars %in% num_vars) }) } ############################################## ######## get_model_matrix() ############################################## #' Extract or remake model matrix from model #' #' Extract or remake model matrix from model and potentially change the #' contrast coding #' #' @param model an \code{lm} or \code{lmerMod} model object. #' @param type extract or remake model matrix? #' @param contrasts contrasts settings. These may be restored to those in the #' model or they may be changed. If a length one character vector (e.g. #' \code{"contr.SAS"}) this is applied to all factors in the model, but it can #' also be a list naming factors for which the contrasts should be set as specified. #' #' @return the model (or 'design') matrix. #' @keywords internal #' @author Rune Haubo B Christensen get_model_matrix <- function(model, type=c("extract", "remake"), contrasts="restore") { type <- match.arg(type) # stopifnot(inherits(model, "lm") || inherits(model, "lmerMod")) if(type == "extract") return(model_matrix(model)) # Set appropriate contrasts: Contrasts <- get_contrast_coding(model, contrasts=contrasts) model.matrix(terms(model), data=model.frame(model), contrasts.arg = Contrasts) } ############################################## ######## get_contrast_coding() ############################################## get_contrast_coding <- function(model, contrasts="restore") { # Compute a list of contrasts for all factors in model Contrasts <- contrasts if(length(contrasts) == 1 && is.character(contrasts) && contrasts == "restore") { Contrasts <- attr(model_matrix(model), "contrasts") } else if(length(contrasts) == 1 && is.character(contrasts) && contrasts != "restore") { Contrasts <- .getXlevels(terms(model), model.frame(model)) Contrasts[] <- contrasts Contrasts } Contrasts } #' # #' get_min_data <- function(model, FUN=mean) #' # Get a minimum complete model.frame based on the variables in the model #' do.call(expand.grid, get_var_list(model, FUN=FUN)) #' #' get_var_list <- function(model, FUN=mean) #' # Extract a named list of variables in the model containing the levels of #' # factors and the mean value of numeric variables #' c(get_fac_list(model), get_num_list(model, FUN=FUN)) #' #' #' @importFrom stats .getXlevels #' get_fac_list <- function(model) { #' # Extract a named list of factor levels for each factor in the model #' res <- .getXlevels(Terms=terms(model), m=model.frame(model)) #' if(is.null(res)) list() else res #' } #' #' get_num_list <- function(model, FUN=mean) { # FUN=function(x) mean(x, na.rm=TRUE)) { #' # Extract named list of mean/FUN values of numeric variables in model #' deparse2 <- function(x) paste(safeDeparse(x), collapse = " ") #' Terms <- terms(model) #' mf <- model.frame(model) #' xvars <- sapply(attr(Terms, "variables"), deparse2)[-1L] #' if((yvar <- attr(Terms, "response")) > 0) #' xvars <- xvars[-yvar] #' if(!length(xvars)) return(list()) #' xlev <- lapply(mf[xvars], function(x) { #' if (is.numeric(x)) FUN(x) else NULL #' }) #' res <- xlev[!vapply(xlev, is.null, NA)] #' if(is.null(res)) list() else res #' } #' #' #' @importFrom utils combn #' get_pairs <- function(levs) { #' stopifnot(is.character(levs), length(levs) > 1) #' combs <- combn(seq_along(levs), 2) #' ind <- seq_len(ncombs <- ncol(combs)) #' A <- as.data.frame(array(0, dim=c(length(levs), ncombs))) #' dimnames(A) <- list(levs, paste(levs[combs[1, ]], levs[combs[2, ]], sep=" - ")) #' A[cbind(combs[1, ], ind)] <- 1 #' A[cbind(combs[2, ], ind)] <- -1 #' A #' } #' #' get_trts <- function(levs) { #' nlevs <- length(levs) #' ans <- t(cbind(-1, diag(nlevs - 1))) #' rownames(ans) <- levs #' colnames(ans) <- paste(levs[-1], levs[1], sep=" - ") #' ans #' } # get_trts(letters[1:5]) # get_pairs(letters[1:5]) ordinal/R/clmm.ssr.R0000644000175100001440000002421514533321514014007 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions for fitting CLMMs with a single simple random-effects ## term (ssr). rho.clm2clmm.ssr <- function(rho, retrms, ctrl) ### Version of rho.clm2clmm that is set up to use the C ### implementations of Laplace, AGQ and GHQ for a single random ### effect. { gfList <- retrms$gfList rho$grFac <- gfList[[1]] rho$ctrl <- ctrl rho$sigma <- rep(1, nrow(rho$B1)) rho$lambda <- 0 rho$nlev <- as.vector(sapply(gfList, nlevels)) rho$random.names <- sapply(gfList, levels) rho$tau.names <- names(gfList) rho$nrandom <- sum(rho$nlev) ## no. random effects rho$Niter <- 0L rho$neval <- 0L rho$u <- rho$uStart <- rep(0, rho$nrandom) rho$linkInt <- switch(rho$link, logit = 1L, probit = 2L, cloglog = 3L, loglog = 4L, cauchit = 5L) rho$ST <- lapply(retrms$retrms, `[[`, "ST") } ## set.AGQ <- function(rho, nAGQ) { ## rho$nAGQ <- nAGQ ## if(nAGQ %in% c(0L, 1L)) return(invisible()) ## ghq <- gauss.hermite(abs(nAGQ)) ## rho$ghqns <- ghq$nodes ## rho$ghqws <- ## if(nAGQ > 0) ghq$weights ## AGQ ## else log(ghq$weights) + (ghq$nodes^2)/2 ## GHQ ## } clmm.fit.ssr <- function(rho, control = list(), method=c("nlminb", "ucminf"), Hess = FALSE) ### Fit a clmm with a single simple random effects term using AGQ, GHQ ### or Laplace. { optim.error <- function(fit, method) if(inherits(fit, "try-error")) stop("optimizer ", method, " terminated with an error", call.=FALSE) ### OPTION: Could have an argument c(warn, fail, ignore) to optionally ### return the fitted model despite the optimizer failing. method <- match.arg(method) ## Set appropriate objective function: obj.fun <- if(rho$nAGQ < 0) getNGHQ.ssr else if(rho$nAGQ > 1) getNAGQ.ssr else getNLA.ssr ## nAGQ %in% c(0, 1) init.val <- obj.fun(rho, rho$par) if(!is.finite(init.val)) stop(gettextf("non-finite likelihood at starting value (%g)", init.val), call.=FALSE) ## Fit the model: if(method == "ucminf") { fit <- try(ucminf(rho$par, function(par) obj.fun(rho, par), control = control), silent=TRUE) ## Check if optimizer converged without error: optim.error(fit, method) ## Save return value: value <- fit$value } else if(method == "nlminb") { ## hack to remove ucminf control settings: keep <- !names(control) %in% c("grad", "grtol") control <- if(length(keep)) control[keep] else list() fit <- try(nlminb(rho$par, function(par) obj.fun(rho, par), control = control), silent=TRUE) ## Check if optimizer converged without error: optim.error(fit, method) ## Save return value: value <- fit$objective } else stop("unkown optimization method: ", method) ## Extract parameters from optimizer results: rho$par <- fit$par ## Ensure random mode estimation at optimum: nllBase.uC(rho) update.uC(rho) rho$ST <- par2ST(rho$tau, rho$ST) names(rho$ST) <- names(rho$dims$nlev.re) ## Format ranef modes and condVar: ranef <- rho$u * rho$tau condVar <- 1/rho$D * rho$tau^2 ## names(ranef) <- names(condVar) <- rho$random.names ## ranef <- list(ranef) ## condVar <- list(condVar) ## names(ranef) <- names(condVar) <- rho$tau.names ## Prepare list of results: res <- list(coefficients = fit$par[1:rho$dims$nfepar], ST = rho$ST, optRes = fit, logLik = -value, fitted.values = rho$fitted, ranef = ranef, condVar = condVar, dims = rho$dims, u = rho$u) ## Add gradient vector and optionally Hessian matrix: ## bound <- as.logical(paratBoundary2(rho)) ## optpar <- fit$par[!bound] if(Hess) { ## gH <- deriv12(function(par) obj.fun(rho, par, which=!bound), gH <- deriv12(function(par) obj.fun(rho, par), x=fit$par) res$gradient <- gH$gradient res$Hessian <- gH$Hessian } else { ## res$gradient <- grad.ctr(function(par) getNLA(rho, par, which=!bound), res$gradient <- grad.ctr(function(par) obj.fun(rho, par), x=fit$par) } ## Setting Niter and neval after gradient and Hessian evaluations: res$Niter <- rho$Niter res$neval <- rho$neval return(res) } getNGHQ.ssr <- function(rho, par) { ### negative log-likelihood by standard Gauss-Hermite quadrature ### implemented in C: if(!missing(par)) { rho$par <- par if(any(!is.finite(par))) stop(gettextf(paste(c("Non-finite parameters occured:", formatC(par, format="g")), collapse=" "))) } rho$neval <- rho$neval + 1L nllBase.uC(rho) ## Update tau, eta1Fix and eta2Fix with(rho, { .C("getNGHQ_C", nll = double(1), as.integer(grFac), as.double(tau), as.double(eta1Fix), as.double(eta2Fix), as.double(o1), as.double(o2), as.double(sigma), as.double(wts), length(sigma), length(uStart), as.double(ghqns), as.double(ghqws), as.integer(abs(nAGQ)), as.integer(linkInt), as.double(ghqns * tau), as.double(lambda))$nll }) } getNAGQ.ssr <- function(rho, par) { ### negative log-likelihood by adaptive Gauss-Hermite quadrature ### implemented in C: if(!missing(par)) { rho$par <- par if(any(!is.finite(par))) stop(gettextf(paste(c("Non-finite parameters occured:", formatC(par, format="g")), collapse=" "))) } rho$neval <- rho$neval + 1L if(!update.uC(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) with(rho, { .C("getNAGQ", nll = double(1), as.integer(grFac), as.double(tau), as.double(eta1Fix), as.double(eta2Fix), as.double(o1), as.double(o2), as.double(sigma), as.double(wts), length(sigma), length(uStart), as.double(ghqns), as.double(log(ghqws)), as.double(ghqns^2), as.double(u), as.double(D), as.integer(abs(nAGQ)), as.integer(linkInt), as.double(lambda))$nll }) } getNLA.ssr <- function(rho, par) { ### negative log-likelihood by the Laplace approximation ### (with update.u2 in C or R): if(!missing(par)) { rho$par <- par if(any(!is.finite(par))) stop(gettextf(paste(c("Non-finite parameters occured:", formatC(par, format="g")), collapse=" "))) } rho$neval <- rho$neval + 1L if(!update.uC(rho)) return(Inf) if(any(rho$D <= 0)) return(Inf) logDetD <- sum(log(rho$D)) rho$negLogLik - rho$nrandom*log(2*pi)/2 + logDetD/2 } nllBase.uC <- function(rho) { ### updates tau, eta1Fix and eta2Fix given new parameter values with(rho, { tau <- exp(par[nalpha + nbeta + 1:ntau]) eta1Fix <- drop(B1 %*% par[1:(nalpha + nbeta)]) eta2Fix <- drop(B2 %*% par[1:(nalpha + nbeta)]) }) return(invisible()) } update.uC <- function(rho) { ### C-implementation of NR-algorithm. nllBase.uC(rho) ## update: tau, eta1Fix, eta2Fix fit <- with(rho, { .C("NRalgv3", as.integer(ctrl$trace), as.integer(ctrl$maxIter), as.double(ctrl$gradTol), as.integer(ctrl$maxLineIter), as.integer(grFac), ## OBS as.double(tau), # stDev as.double(o1), as.double(o2), as.double(eta1Fix), as.double(eta2Fix), as.double(sigma), ## rep(1, n) as.integer(linkInt), ## as.double(wts), ## pre. weights u = as.double(uStart), fitted = as.double(fitted), ## pre. pr funValue = double(1), gradValues = as.double(uStart), hessValues = as.double(rep(1, length(uStart))), length(fitted), length(uStart), maxGrad = double(1), conv = 0L, as.double(lambda), ## Niter = as.integer(Niter) ## OBS )[c("u", "fitted", "funValue", "gradValues", "hessValues", "maxGrad", "conv", "Niter")] }) ## Get message: message <- switch(as.character(fit$conv), "1" = "max|gradient| < tol, so current iterate is probably solution", "0" = "Non finite negative log-likelihood", "-1" = "iteration limit reached when updating the random effects", "-2" = "step factor reduced below minimum when updating the random effects") ## Check for convergence and report warning/error: if(rho$ctrl$trace > 0 && fit$conv == 1) cat("\nOptimizer converged! ", "max|grad|:", fit$maxGrad, message, fill = TRUE) if(fit$conv != 1 && rho$ctrl$innerCtrl == "warnOnly") warning(message, "\n at iteration ", rho$Niter) else if(fit$conv != 1 && rho$ctrl$innerCtrl == "giveError") stop(message, "\n at iteration ", rho$Niter) ## Store values and return: rho$Niter <- fit$Niter rho$fitted <- fit$fitted rho$u <- fit$u rho$D <- fit$hessValues rho$gradient <- fit$gradValues if(!is.finite(rho$negLogLik <- fit$funValue)) return(FALSE) return(TRUE) } ordinal/R/clm.Thetamat.R0000644000175100001440000001223514533321514014571 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions (getThetamat) to compute a table of threshold ## coefficients from model fits (clm()s) with nominal effects. getThetamat <- function(terms, alpha, assign, contrasts, tJac, xlevels, sign.nominal) ### Compute matrix of thresholds for all combinations of levels of ### factors in the nominal formula. ### ### Input: ### terms: nominal terms object ### alpha: vector of threshold parameters ### assign: attr(NOM, "assign"), where NOM is the design matrix for ### the nominal effects ### contrasts: list of contrasts for the nominal effects ### tJac: threshold Jacobian with appropriate dimnames. ### xlevels: names of levels of factors among the nominal effects. ### sign.nominal: "positive" or "negative" ### ### Output: ### Theta: data.frame of thresholds ### mf.basic: if nrow(Theta) > 1 a data.frame with factors in columns ### and all combinations of the factor levels in rows. { ## Make matrix of thresholds; Theta: Theta <- matrix(alpha, ncol=ncol(tJac), byrow=TRUE) ## Matrix with variables-by-terms: factor.table <- attr(terms, "factors") all.varnm <- rownames(factor.table) ### NOTE: need to index with all.varnm not to include (weights) and ### possibly other stuff. var.classes <- attr(terms, "dataClasses")[all.varnm] numeric.var <- which(var.classes != "factor") ### NOTE: Logical variables are treated as numeric variables. numeric.terms <- factor.terms <- numeric(0) if(length(factor.table)) { ## Terms associated with numerical variables: numeric.terms <- which(colSums(factor.table[numeric.var, , drop=FALSE]) > 0) ## Terms only involving factor variables: factor.terms <- which(colSums(factor.table[numeric.var, , drop=FALSE]) == 0) } ## Remove rows in Theta for numeric variables: if(length(numeric.terms)) { ### NOTE: ncol(NOM) == length(asgn) == nrow(Theta) ### length(attr(terms, "term.labels")) == ncol(factor.table) ### NOTE: length(var.classes) == nrow(factor.table) numeric.rows <- which(assign %in% numeric.terms) Theta <- Theta[-numeric.rows, , drop=FALSE] ## Drop terms so the design matrix, X for the factors does not ## include numeric variables: if(length(factor.terms)) terms <- drop.terms(terms, dropx=numeric.terms, keep.response=FALSE) } ## if some nominal effects are factors: if(length(factor.terms)) { ## get xlevels for factors, not ordered (factors) factor.var <- which(var.classes == "factor") factor.varnm <- names(var.classes)[factor.var] xlev <- xlevels[factor.varnm] ## minimal complete model frame: mf.basic <- do.call(expand.grid, xlev) ## minimal complete design matrix: X <- model.matrix(terms, data=mf.basic, contrasts=contrasts[factor.varnm]) ### NOTE: get_clmDesign adds an intercept if its not there, so we need ### to do that as well here. Otherwise 'X[, keep, drop=FALSE]' will ### fail: if(!"(Intercept)" %in% colnames(X)) X <- cbind("(Intercept)" = rep(1, nrow(X)), X) if(sign.nominal == "negative") X[, -1] <- -X[, -1] ### NOTE: There are no contrasts for numerical variables, but there ### may be for ordered factors. ## From threshold parameters to thresholds: ### NOTE: some rows of Theta may contain NAs due to rank deficiency of ### the NOM design matrix. keep <- apply(Theta, 1, function(x) sum(is.na(x)) == 0) ## Theta <- apply(Theta, 2, function(th) X %*% th) tmp <- lapply(1:ncol(Theta), function(i) { X[, keep, drop=FALSE] %*% Theta[keep, i] }) Theta <- do.call(cbind, tmp) } ## Adjust each row in Theta for threshold functions: tmp <- lapply(seq_len(nrow(Theta)), function(i) c(tJac %*% Theta[i, ])) Theta <- do.call(rbind, tmp) ### NOTE: apply returns a vector and not a matrix when ncol(Theta) == ### 1, so we need to avoid it here. ## Theta <- t(apply(Theta, 1, function(th) tJac %*% th)) colnames(Theta) <- rownames(tJac) res <- list(Theta = as.data.frame(Theta)) ## add factor information if any: if(NROW(Theta) > 1) res$mf.basic <- mf.basic ## return: res } ordinal/R/contrast_utils.R0000644000175100001440000002573714533321514015340 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# # contrast-utils.R - utility functions for contrasts, terms and anova # -------- Contents: -------- # # containment # term_contain # relatives # doolittle # ensure_full_rank # get_rdX # extract_contrasts_type3 ############################################## ######## containment() ############################################## containment <- function(object) { # lm or merMod # For all terms 'T' in object compute the terms # Return a list: # for each term 'T' a vector of terms that contain 'T'. terms <- terms(object) data_classes <- attr(terms(object), "dataClasses") # Note: need fixed.only for merMod objects to get dataClasses term_names <- attr(terms, "term.labels") factor_mat <- attr(terms, "factors") lapply(setNames(term_names, term_names), function(term) { term_names[term_contain(term, factor_mat, data_classes, term_names)] }) } ############################################## ######## term_contain() ############################################## #' Determine which Terms Contain a Term #' #' The definition of \emph{containment} follows from the SAS documentation on #' "The Four Types of Estimable Functions". #' #' Containment is defined for two model terms, say, F1 and F2 as: #' F1 is contained in F2 (F2 contains F1) if #' \enumerate{ #' \item F1 and F2 involve the same continuous variables (if any) #' \item F2 involve more factors than F1 #' \item All factors in F1 (if any) are part of F2 #' } #' The intercept, though not really a model term, is defined by SAS to be #' contained in all factor terms, but it is not contained in any #' effect involving a continuous variable. #' #' @param term character; name of a model term and one of \code{term_names}. #' @param factors the result of \code{attr(terms_object, "factors")}. #' @param dataClasses the result of #' \code{attr(terms(model, fixed.only=FALSE), "dataClasses")}. Note that #' \code{fixed.only=FALSE} is only needed for \code{merMod} objects, but does #' no harm for \code{lm} objects. #' @param term_names the result of \code{attr(terms_object, "term.labels")}. #' #' @return a logical vector indicating for each term in \code{term_names} if #' it contains \code{term}. #' @importFrom stats setNames #' @keywords internal term_contain <- function(term, factors, dataClasses, term_names) { get_vars <- function(term) # Extract vector of names of all variables in a term rownames(factors)[factors[, term] == 1] contain <- function(F1, F2) { # Returns TRUE if F1 is contained in F2 (i.e. if F2 contains F1) # F1, F2: Names of terms, i.e. attr(terms_object, "term.labels") all(vars[[F1]] %in% vars[[F2]]) && # all variables in F1 are also in F2 length(setdiff(vars[[F2]], vars[[F1]])) > 0L && # F2 involve more variables than F1 setequal(numerics[[F1]], numerics[[F2]]) # F1 and F2 involve the same covariates (if any) } # Get (named) list of all variables in terms: vars <- lapply(setNames(term_names, term_names), get_vars) # Get (named) list of all _numeric_ variables in all terms: numerics <- lapply(vars, function(varnms) varnms[which(dataClasses[varnms] == "numeric")]) # Check if 'term' is contained in each model term: sapply(term_names, function(term_nm) contain(term, term_nm)) } ############################################## ######## doolittle() ############################################## #' Doolittle Decomposition #' #' @param x a numeric square matrix with at least 2 columns/rows. #' @param eps numerical tolerance on the whether to normalize with components #' in \code{L} with the diagonal elements of \code{U}. #' #' @return a list with two matrices of the same dimension as \code{x}: #' \item{L}{lower-left unit-triangular matrix} #' \item{U}{upper-right triangular matrix (\emph{not} unit-triangular)} #' #' @keywords internal doolittle <- function(x, eps = 1e-6) { if(!is.matrix(x) || ncol(x) != nrow(x) || !is.numeric(x)) stop("argument 'x' should be a numeric square matrix") stopifnot(ncol(x) > 1L) n <- nrow(x) L <- U <- matrix(0, nrow=n, ncol=n) diag(L) <- rep(1, n) for(i in 1:n) { ip1 <- i + 1 im1 <- i - 1 for(j in 1:n) { U[i,j] <- x[i,j] if (im1 > 0) { for(k in 1:im1) { U[i,j] <- U[i,j] - L[i,k] * U[k,j] } } } if ( ip1 <= n ) { for ( j in ip1:n ) { L[j,i] <- x[j,i] if ( im1 > 0 ) { for ( k in 1:im1 ) { L[j,i] <- L[j,i] - L[j,k] * U[k,i] } } L[j, i] <- if(abs(U[i, i]) < eps) 0 else L[j,i] / U[i,i] } } } L[abs(L) < eps] <- 0 U[abs(U) < eps] <- 0 list( L=L, U=U ) } ############################################## ######## ensure_full_rank() ############################################## #' Ensure a Design Matrix has Full (Column) Rank #' #' Determine and drop redundant columns using the \code{\link{qr}} #' decomposition. #' #' @param X a design matrix as produced by \code{model.matrix}. #' @param tol \code{qr} tolerance. #' @param silent throw message if columns are dropped from \code{X}? Default #' is \code{FALSE}. #' @param test.ans Test if the resulting/returned matrix has full rank? Default #' is \code{FALSE}. #' #' @return A design matrix in which redundant columns are dropped #' @keywords internal ensure_full_rank <- function(X, tol = 1e-7, silent = FALSE, test.ans = FALSE) { ### works if ncol(X) >= 0 and nrow(X) >= 0 ## test and match arguments: stopifnot(is.matrix(X)) silent <- as.logical(silent)[1] ## perform the qr-decomposition of X using LINPACK methods: qr.X <- qr(X, tol = tol, LAPACK = FALSE) if(qr.X$rank == ncol(X)) { ## return X if X has full column rank return(X) } if(!silent) ## message the no. dropped columns: message(gettextf("Design is column rank deficient so dropping %d coef", ncol(X) - qr.X$rank)) ## return the columns correponding to the first qr.x$rank pivot ## elements of X: keep <- with(qr.X, pivot[seq_len(rank)]) newX <- X[, keep, drop = FALSE] sel <- with(qr.X, pivot[-seq_len(rank)]) ## Copy old attributes: if(!is.null(contr <- attr(X, "contrasts"))) attr(newX, "contrasts") <- contr if(!is.null(asgn <- attr(X, "assign"))) attr(newX, "assign") <- asgn[-sel] ## did we succeed? stop-if-not: if(test.ans && qr.X$rank != qr(newX)$rank) stop(gettextf("Determination of full column rank design matrix failed"), call. = FALSE) return(newX) } ############################################## ######## get_rdX() ############################################## #' Compute the 'Full' Rank-Deficient Design Matrix #' #' #' @param model a model object; lmerMod or lmerModLmerTest. #' @param do.warn throw a message if there is no data for some factor #' combinations. #' #' @return the rank-deficien design matrix #' @author Rune Haubo B. Christensen #' @keywords internal #' #' @importFrom stats as.formula model.frame terms model.matrix get_rdX <- function(model, do.warn=TRUE) { # Compute rank-deficient design-matrix X usign contr.treatment coding. # # model: terms(model), model.frame(model), fixef(model) Terms <- terms(model, fixed.only=TRUE) term_names <- attr(Terms, "term.labels") df <- model.frame(model) # Compute rank-deficient (full) design-matrix, X: rdXi <- if(length(term_names)) lapply(term_names, function(trm) { form <- as.formula(paste0("~ 0 + ", trm)) model.matrix(form, data=df) # no contrast arg }) else list(model.matrix(~ 1, data=df)[, -1, drop=FALSE]) rdX <- do.call(cbind, rdXi) param_names <- unlist(lapply(rdXi, colnames)) # Potentially add intercept: has_intercept <- attr(Terms, "intercept") != 0 if(has_intercept) { rdX <- cbind('(Intercept)'=rep(1, nrow(rdX)), rdX) param_names <- c("(Intercept)", param_names) } colnames(rdX) <- param_names # Warn/message if there are cells without data: is_zero <- which(colSums(rdX) == 0) if(do.warn && length(is_zero)) { txt <- sprintf("Missing cells for: %s. ", paste(param_names[is_zero], collapse = ", ")) # warning(paste(txt, "\nInterpret type III hypotheses with care."), call.=FALSE) message(paste(txt, "\nInterpret type III hypotheses with care.")) } rdX } ############################################## ######## extract_contrasts_type3 ############################################## #' @importFrom MASS ginv #' @importFrom stats terms resid lm.fit extract_contrasts_type3 <- function(model, X=NULL) { # Computes contrasts for type III tests with reference to treatment contrast coding # X: Optional full rank design matrix in contr.treatment coding Terms <- terms(model) term_names <- attr(Terms, "term.labels") if(is.null(X)) { X <- get_model_matrix(model, type="remake", contrasts="contr.treatment") X <- ensure_full_rank(X) } # Get 'complete' design matrix: rdX <- get_rdX(model, do.warn = TRUE) # treatment contrasts # cols for aliased coefs should be removed in X; not in rdX. # This makes ginv(X) unique! L <- zapsmall(t(MASS::ginv(X) %*% rdX)) # basic contrast matrix dimnames(L) <- list(colnames(rdX), colnames(X)) # Orthogonalize contrasts for terms which are contained in other terms: map <- term2colX(Terms, X) is_contained <- containment(model) # Orthogonalize higher order terms before lower order terms: terms_order <- attr(Terms, "order") orthog_order <- term_names[order(terms_order, decreasing = TRUE)] # Only orthogonalize terms with columns in X: keep <- names(which(sapply(map[orthog_order], length) > 0)) for(term in orthog_order[keep]) { # if term is contained in other terms: if(length(contains <- is_contained[[term]]) > 0) { # orthogonalize cols in L for 'term' wrt. cols that contain 'term': L[, map[[term]]] <- zapsmall(resid(lm.fit(x=L[, unlist(map[contains]), drop=FALSE], y=L[, map[[term]], drop=FALSE]))) } } # Keep rows in L corresponding to model coefficients: L <- L[colnames(X), , drop=FALSE] # Extract list of contrast matrices from L - one for each term: Llist <- lapply(map[term_names], function(term) t(L[, term, drop=FALSE])) # Keep all non-zero rows: lapply(Llist, function(L) L[rowSums(abs(L)) > 1e-8, , drop=FALSE]) } ordinal/R/clm.slice2D.R0000644000175100001440000002060214533321514014304 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# slice2D <- function(object, ...) { UseMethod("slice2D") } slice2D.clm <- function(object, parm=seq_along(par), lambda=3, grid=20, ...) { ## argument matching and testing: stopifnot(is.numeric(lambda) && lambda > 0) stopifnot(is.numeric(grid) && grid >= 1) grid <- as.integer(round(grid)) par <- coef(object, na.rm=TRUE) par.names <- names(par) stopifnot(length(parm) == length(unique(parm))) if(is.character(parm)) parm <- match(parm, par.names, nomatch = 0) if(!all(parm %in% seq_along(par))) stop("invalid 'parm' argument") stopifnot(length(parm) >= 2L) parm <- as.integer(parm) nparm <- length(parm) ## parm is an integer vector indexing non-aliased coef. ml <- object$logLik parm.names <- par.names[parm] mle <- par[parm] ## get environment corresponding to object: env <- get_clmRho(object) ## env <- update(object, doFit=FALSE) names(par) <- NULL env$par <- as.vector(par) ## set env$par to mle stopifnot(isTRUE(all.equal(env$clm.nll(env), -object$logLik))) ## generate sequence of parameters at which to compute the ## log-likelihood: curv <- sqrt(1/diag(object$Hessian)) ## curvature in nll wrt. par par.range <- par + curv %o% (c(-1, 1) * lambda) ## All pairwise combinations: pairs <- t(combn(seq_len(nparm), 2)) ncombn <- nrow(pairs) ### Allow for sequential paired comparisons? par.seq <- lapply(parm, function(ind) { seq(par.range[ind, 1], par.range[ind, 2], length = grid) }) names(par.seq) <- par.names zlist <- vector(mode="list", length=ncombn) names(zlist) <- paste(par.names[pairs[, 1]], par.names[pairs[, 2]], sep=".") for(k in 1:ncombn) { i <- pairs[k, 1] j <- pairs[k, 2] xx <- expand.grid(x=par.seq[[i]], y=par.seq[[j]]) ## Set parameter values to MLEs: env$par <- par ## Compute log-likelihood over entire grid: z <- apply(xx, 1, function(x) { env$par[c(i, j)] <- as.vector(x); env$clm.nll(env) }) ## Store log-likelihood values in a matrix: zlist[[k]] <- matrix(z, ncol=grid) } res <- list(zlist=zlist, par.seq=par.seq, par.range=par.range, pairs=pairs, original.fit=object, mle=mle) class(res) <- c("slice2D.clm") res } safe.as.int <- function(x) as.integer(round(x)) plot.slice2D.clm <- function(x, parm = seq_along(orig.par), ## How to specify default values ## of parm? plot.mle = TRUE, ask = prod(par("mfcol")) < nrow(pairs) && dev.interactive(), ...) ### parm: a character vector or integer vector of length >= 2 with ### those par-combinations to make contour plots. { ## stopifnot(all parm in names(par.seq)) orig.par <- coef(x$original.fit, na.rm=TRUE) ### More parm stuff here... stopifnot(is.numeric(parm) && length(parm) >= 2L) parm <- as.integer(round(parm)) par.names <- names(orig.par) ## of <- attr(x, "original.fit") ## par <- coef(of) ## ml <- of$logLik keep <- (x$pairs[, 1] %in% parm) & (x$pairs[, 2] %in% parm) pairs <- x$pairs[keep, , drop=FALSE] stopifnot(length(pairs) >= 2) if(ask) { oask <- devAskNewPage(TRUE) on.exit(devAskNewPage(oask)) } ## Plotting the contours: for(k in seq_len(nrow(pairs))) { i <- pairs[k, 1] j <- pairs[k, 2] contour(x$par.seq[[i]], x$par.seq[[j]], x$zlist[[k]], xlab = par.names[i], ylab = par.names[j]) points(orig.par[i], orig.par[j], pch = 4, col = "red", lwd = 2) } return(invisible()) } sliceg.clm <- function(object, parm = seq_along(par), lambda = 3, grid = 1e2, quad.approx = TRUE, ...) { ## argument matching and testing: stopifnot(is.numeric(lambda) && lambda > 0) stopifnot(is.numeric(grid) && grid >= 1) grid <- as.integer(round(grid)) par <- coef(object, na.rm=TRUE) par.names <- names(par) npar <- length(par) stopifnot(length(parm) == length(unique(parm))) if(is.character(parm)) parm <- match(parm, par.names, nomatch = 0) ### disallow character argument due to ambiguity? if(!all(parm %in% seq_along(par))) stop("invalid 'parm' argument") stopifnot(length(parm) > 0) parm <- as.integer(round(parm)) ## parm is an integer vector indexing non-aliased coef. ml <- object$logLik parm.names <- par.names[parm] ## get environment corresponding to object: rho <- get_clmRho(object) ## rho <- update(object, doFit = FALSE) names(par) <- NULL rho$par <- par ## set rho$par to mle stopifnot(isTRUE(all.equal(rho$clm.nll(rho), -object$logLik))) ## generate sequence of parameters at which to compute the ## log-likelihood: curv <- sqrt(1/diag(object$Hessian)) ## curvature in nll wrt. par par.range <- par + curv %o% c(-lambda, lambda) ## par.seq - list of length npar with a sequence of values for each ## parameter : par.seq <- lapply(parm, function(ind) { seq(par.range[ind, 1], par.range[ind, 2], length = grid) }) ## compute relative logLik for all par.seq for each par: logLik <- lapply(seq_along(parm), function(i) { # for each par rho$par <- par ## reset par values to MLE sapply(par.seq[[ i ]], function(par.val) { # for each par.seq value rho$par[ parm[i] ] <- par.val rho$clm.nll(rho) rho$clm.grad(rho)[ parm[i] ] }) }) ## collect parameter sequences and relative logLik in a list of ## data.frames: res <- lapply(seq_along(parm), function(i) { structure(data.frame(par.seq[[ i ]], logLik[[ i ]]), ## names = c(parm.names[i], "logLik")) names = c(parm.names[i], "gradient")) }) ## set attributes: names(res) <- parm.names attr(res, "original.fit") <- object attr(res, "mle") <- par[parm] ## class(res) <- "slice.clm" class(res) <- "sliceg.clm" ## if(!quad.approx) return(res) ## ## compute quadratic approx to *positive* logLik: ## Quad <- function(par, mle, curv) ## -((mle - par)^2 / curv^2 / 2) ## for(i in seq_along(parm)) ## res[[ i ]]$quad <- ## Quad(par.seq[[ i ]], par[ parm[i] ], curv[ parm[i] ]) return(res) } plot.sliceg.clm <- function(x, parm = seq_along(x), type = c("quadratic", "linear"), plot.mle = TRUE, ask = prod(par("mfcol")) < length(parm) && dev.interactive(), ...) { ## Initiala argument matching and testing: type <- match.arg(type) stopifnot(is.numeric(parm)) parm <- as.integer(round(parm)) of <- attr(x, "original.fit") par <- coef(of) ml <- of$logLik ## take the signed sqrt of nll and quad: ## if(type == "linear") { ## sgn.sqrt <- function(par, mle, logLik) ## (2 * (par > mle) - 1) * sqrt(-logLik) ## mle <- coef(attr(x, "original.fit")) ## for(i in parm) { ## x[[i]]$logLik <- sgn.sqrt(x[[i]][1], mle[i], x[[i]]$logLik) ## if(!is.null(x[[i]]$quad)) ## x[[i]]$quad <- sgn.sqrt(x[[i]][1], mle[i], x[[i]]$quad) ## } ## ylab <- "Signed log-likelihood root" ## } ## else ## ylab <- "Relative log-likelihood" ylab <- "Gradient" if(ask) { oask <- devAskNewPage(TRUE) on.exit(devAskNewPage(oask)) } ## actual plotting: for(i in parm) { z <- x[[i]] plot(z[1:2], type = "l", ylab=ylab, ...) if(!is.null(z$quad)) lines(z[[1]], z[[3]], lty = 2) if(plot.mle && type == "quadratic") ## abline(v = par[i]) abline(v = attr(x, "mle")[i]) ## abline(v = par[names(x)[i]]) } return(invisible()) } ordinal/R/derivatives.R0000644000175100001440000001312614533321514014575 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions for finite difference computations of derivatives ## (gradient and Hessian) of user-specified functions. deriv12 <- function(fun, x, delta=1e-4, fx=NULL, ...) { ### Compute gradient and Hessian at the same time (to save computing ### time) nx <- length(x) fx <- if(!is.null(fx)) fx else fun(x, ...) stopifnot(length(fx) == 1) H <- array(NA, dim=c(nx, nx)) g <- numeric(nx) for(j in 1:nx) { ## Diagonal elements: xadd <- xsub <- x xadd[j] <- x[j] + delta xsub[j] <- x[j] - delta fadd <- fun(xadd, ...) fsub <- fun(xsub, ...) H[j, j] <- (fadd - 2 * fx + fsub) / delta^2 g[j] <- (fadd - fsub) / (2 * delta) ## Off diagonal elements: for(i in 1:nx) { if(i >= j) break ## Compute upper triangular elements: xaa <- xas <- xsa <- xss <- x xaa[c(i, j)] <- x[c(i, j)] + c(delta, delta) xas[c(i, j)] <- x[c(i, j)] + c(delta, -delta) xsa[c(i, j)] <- x[c(i, j)] + c(-delta, delta) xss[c(i, j)] <- x[c(i, j)] - c(delta, delta) H[i, j] <- H[j, i] <- (fun(xaa, ...) - fun(xas, ...) - fun(xsa, ...) + fun(xss, ...)) / (4 * delta^2) } } list(gradient = g, Hessian = H) } myhess <- function(fun, x, fx=NULL, delta=1e-4, ...) { nx <- length(x) fx <- if(!is.null(fx)) fx else fun(x, ...) stopifnot(length(fx) == 1) H <- array(NA, dim=c(nx, nx)) for(j in 1:nx) { ## Diagonal elements: xadd <- xsub <- x xadd[j] <- x[j] + delta xsub[j] <- x[j] - delta H[j, j] <- (fun(xadd, ...) - 2 * fx + fun(xsub, ...)) / delta^2 ## Upper triangular (off diagonal) elements: for(i in 1:nx) { if(i >= j) break xaa <- xas <- xsa <- xss <- x xaa[c(i, j)] <- x[c(i, j)] + c(delta, delta) xas[c(i, j)] <- x[c(i, j)] + c(delta, -delta) xsa[c(i, j)] <- x[c(i, j)] + c(-delta, delta) xss[c(i, j)] <- x[c(i, j)] - c(delta, delta) H[j, i] <- H[i, j] <- (fun(xaa, ...) - fun(xas, ...) - fun(xsa, ...) + fun(xss, ...)) / (4 * delta^2) } } H } mygrad <- function(fun, x, delta = 1e-4, method = c("central", "forward", "backward"), ...) { method <- match.arg(method) nx <- length(x) if(method %in% c("central", "forward")) { Xadd <- matrix(rep(x, nx), nrow=nx, byrow=TRUE) + diag(delta, nx) fadd <- apply(Xadd, 1, fun, ...) } if(method %in% c("central", "backward")) { Xsub <- matrix(rep(x, nx), nrow=nx, byrow=TRUE) - diag(delta, nx) fsub <- apply(Xsub, 1, fun, ...) ## eval.parent perhaps? } res <- switch(method, "forward" = (fadd - fun(x, ...)) / delta, "backward" = (fun(x, ...) - fsub) / delta, "central" = (fadd - fsub) / (2 * delta) ) res } grad.ctr3 <- function(fun, x, delta=1e-4, ...) { nx <- length(x) Xadd <- matrix(rep(x, nx), nrow=nx, byrow=TRUE) + diag(delta, nx) Xsub <- matrix(rep(x, nx), nrow=nx, byrow=TRUE) - diag(delta, nx) fadd <- apply(Xadd, 1, fun, ...) fsub <- apply(Xsub, 1, fun, ...) ## eval.parent perhaps? (fadd - fsub) / (2 * delta) } grad.ctr2 <- function(fun, x, delta=1e-4, ...) { ans <- x for(i in seq_along(x)) { xadd <- xsub <- x xadd[i] <- x[i] + delta xsub[i] <- x[i] - delta ans[i] <- (fun(xadd, ...) - fun(xsub, ...)) / (2 * delta) } ans } grad.ctr <- function(fun, x, delta=1e-4, ...) { sapply(seq_along(x), function(i) { xadd <- xsub <- x xadd[i] <- x[i] + delta xsub[i] <- x[i] - delta (fun(xadd, ...) - fun(xsub, ...)) / (2 * delta) }) } grad <- grad.ctr grad.ctr4 <- function(fun, x, delta=1e-4, ...) { ### - checking finiteness of x and fun-values ### - taking care to avoid floating point errors ### - not using h=x*delta rather than h=delta (important for small or ### large x?) if(!all(is.finite(x))) stop("Cannot compute gradient: non-finite argument") ans <- x ## return values for(i in seq_along(x)) { xadd <- xsub <- x ## reset fun arguments xadd[i] <- x[i] + delta xsub[i] <- x[i] - delta ans[i] <- (fun(xadd, ...) - fun(xsub, ...)) / (xadd[i] - xsub[i]) ### NOTE: xadd[i] - xsub[i] != 2*delta with floating point arithmetic. } if(!all(is.finite(ans))) { warning("cannot compute gradient: non-finite function values occured") ans[!is.finite(ans)] <- Inf } ans } ordinal/R/clm.anova.R0000644000175100001440000002723114533321514014130 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# # clm.anova.R single_anova <- function(object, type = c("III", "II", "I", "3", "2", "1", "marginal", "2b")) { type <- type[1L] if(!is.character(type)) type <- as.character(type) type <- match.arg(type) if(type %in% c("I", "II", "III")) type <- as.character(as.integer(as.roman(type))) if(any(is.na(vcov(object)))) stop("anova table not available with non-finite values in vcov(object)") # Get list of contrast matrices (L) - one for each model term: L_list <- if(type == "1") { get_contrasts_type1(object) } else if(type == "2") { get_contrasts_type2_unfolded(object) } else if(type == "2b") { get_contrasts_type2(object) } else if(type == "3") { get_contrasts_type3(object) } else if(type == "marginal") { get_contrasts_marginal(object) } else { stop("'type' not recognized") } # Add cols to L for alpha, zeta and lambda params: L_list <- adjust_contrast_for_param(object, L_list) # Get F-test for each term and collect in table: table <- rbindall(lapply(L_list, function(L) contestMD(object, L))) # Format ANOVA table and return: if(length(nm <- setdiff(names(L_list), rownames(table)))) { tab <- array(NA_real_, dim=c(length(nm), ncol(table)), dimnames = list(nm, colnames(table))) table <- rbind(table, tab)[names(L_list), ] } # Format 'type': type <- if(type == "marginal") { "Marginal" } else if(grepl("b|c", type)) { alph <- gsub("[0-9]", "", type) paste0("Type ", as.roman(as.integer(gsub("b|c", "", type))), alph) } else paste("Type", as.roman(as.integer(type))) attr(table, "heading") <- paste(type, "Analysis of Deviance Table with Wald chi-square tests\n") attr(table, "hypotheses") <- L_list class(table) <- c("anova", "data.frame") table } adjust_contrast_for_param <- function(model, L) { nalpha <- length(model$alpha) nzeta <- if(is.null(model$zeta)) 0L else length(model$zeta) nlambda <- if(is.null(model$lambda)) 0L else length(model$lambda) nextra <- nzeta + nlambda # pre and post add extra cols to L: add <- function(L) { pre <- array(0, dim=c(nrow(L), nalpha)) post <- array(0, dim=c(nrow(L), nextra)) cbind(pre, L[, -1L, drop=FALSE], post) } if(!is.list(L)) add(L) else lapply(L, add) } model_matrix <- function(object, ...) { if(!inherits(object, "clm")) return(model.matrix(object, ...)) X <- model.matrix(object)$X if(!any(object$aliased$beta)) return(X) remove <- c(FALSE, object$aliased$beta) newX <- X[, !remove, drop=FALSE] attr(newX, "assign") <- attr(X, "assign")[!remove] contr <- attr(X, "contrasts") if(!is.null(contr)) attr(newX, "contrasts") <- contr newX } contestMD <- function(model, L, rhs=0, eps=sqrt(.Machine$double.eps), ...) { mk_Qtable <- function(Qvalue, df) { pvalue <- pchisq(q=Qvalue, df=df, lower.tail=FALSE) data.frame("Df"=df, "Chisq"=Qvalue, "Pr(>Chisq)"=pvalue, check.names = FALSE) } if(!is.matrix(L)) L <- matrix(L, ncol=length(L)) stopifnot(is.matrix(L), is.numeric(L), ncol(L) == length(coef(model, na.rm=TRUE))) if(length(rhs) == 1L) rhs <- rep(rhs, nrow(L)) stopifnot(is.numeric(rhs), length(rhs) == nrow(L)) if(nrow(L) == 0L) { # May happen if there are no fixed effects x <- numeric(0L) return(mk_Qtable(x, x)) } if(any(is.na(L))) return(mk_Qtable(NA_real_, NA_real_)) beta <- coef(model, na.rm=TRUE) vcov_beta <- vcov(model) # Adjust beta for rhs: if(!all(rhs == 0)) beta <- beta - drop(MASS::ginv(L) %*% rhs) # Compute Var(L beta) and eigen-decompose: VLbeta <- L %*% vcov_beta %*% t(L) # Var(contrast) = Var(Lbeta) eig_VLbeta <- eigen(VLbeta) P <- eig_VLbeta$vectors d <- eig_VLbeta$values tol <- max(eps * d[1], 0) pos <- d > tol q <- sum(pos) # rank(VLbeta) if(q < nrow(L) && !all(rhs == 0)) warning("Contrast is rank deficient and test may be affected") if(q <= 0) { # shouldn't happen if L is a proper contrast x <- numeric(0L) return(mk_Qtable(x, x)) } PtL <- crossprod(P, L)[1:q, ] # Compute t-squared values and Q-value: t2 <- drop(PtL %*% beta)^2 / d[1:q] Qvalue <- sum(t2) mk_Qtable(Qvalue, df=q) } ############################################## ######## get_contrasts_type3 ############################################## get_contrasts_type3 <- function(model, which=NULL) { term_names <- attr(terms(model), "term.labels") # Extract original design matrix: Xorig <- model_matrix(model) # Assumes Xorig is full (column) rank if(is.null(which)) { which <- term_names # If model has at most one term return Type I contrasts: if(ncol(Xorig) <= 1L || length(term_names) <= 1L) return(get_contrasts_type1(model)) } else stopifnot(is.character(which), all(which %in% term_names)) # Extract contrast coding in Xorig: codings <- unlist(attr(Xorig, "contrast")) # If only treatment contrasts are used we can just return the type 3 # contrasts for contr.treatment coding: if(length(codings) > 0 && all(is.character(codings)) && all(codings %in% c("contr.treatment"))) return(extract_contrasts_type3(model, X=Xorig)) # otherwise we need to map the type III contrasts to whatever contrast # coding was used: X <- get_model_matrix(model, type="remake", contrasts="contr.treatment") # Ensure that X is full (column) rank: X <- ensure_full_rank(X, silent=TRUE, test.ans=FALSE) # Extract contrasts assuming contr.treatment coding: type3ctr <- extract_contrasts_type3(model, X=X) map <- zapsmall(ginv(X) %*% Xorig) # Maps between contrast codings rownames(map) <- colnames(X) lapply(type3ctr[which], function(L) L %*% map) } ############################################## ######## get_contrasts_type1 ############################################## get_contrasts_type1 <- function(model) { terms <- terms(model) X <- model_matrix(model) nalpha <- length(model$alpha) p <- ncol(X) if(p == 0L) return(list(matrix(numeric(0L), nrow=0L))) # no fixef if(p == 1L && attr(terms, "intercept")) # intercept-only model return(list(matrix(numeric(0L), ncol=nalpha))) # Compute 'normalized' doolittle factorization of XtX: L <- if(p == 1L) matrix(1L) else t(doolittle(crossprod(X))$L) dimnames(L) <- list(colnames(X), colnames(X)) # Determine which rows of L belong to which term: ind.list <- term2colX(terms, X)[attr(terms, "term.labels")] lapply(ind.list, function(rows) L[rows, , drop=FALSE]) } ############################################## ######## get_contrasts_type2_unfolded ############################################## get_contrasts_type2_unfolded <- function(model, which=NULL) { # Computes the 'genuine type II contrast' for all terms that are # contained in other terms. For all terms which are not contained in other # terms, the simple marginal contrast is computed. X <- model_matrix(model) Terms <- terms(model) term_names <- attr(Terms, "term.labels") if(is.null(which)) { which <- term_names # If model has at most one term return Type I contrasts: if(ncol(X) <= 1L || length(term_names) <= 1L) return(get_contrasts_type1(model)) } else stopifnot(is.character(which), all(which %in% term_names)) is_contained <- containment(model) do_marginal <- names(is_contained)[sapply(is_contained, length) == 0L] do_type2 <- setdiff(term_names, do_marginal) if(!length(do_marginal)) list() else Llist <- get_contrasts_marginal(model, which=do_marginal) if(length(do_type2)) Llist <- c(Llist, get_contrasts_type2(model, which=do_type2)) Llist[term_names] } ############################################## ######## get_contrasts_type2 ############################################## get_contrasts_type2 <- function(model, which=NULL) { # Computes the type 2 contrasts - either for all terms or for those # included in 'which' (a chr vector naming model terms). # returns a list X <- model_matrix(model) nalpha <- length(model$alpha) terms <- terms(model) data_classes <- attr(terms(model), "dataClasses") if(is.null(asgn <- attr(X, "assign"))) stop("design matrix 'X' should have a non-null 'assign' attribute") term_names <- attr(terms, "term.labels") if(is.null(which)) { which <- term_names # If model has at most one term return Type I contrasts: if(ncol(X) <= 1L || length(term_names) <= 1L) return(get_contrasts_type1(model)) } else stopifnot(is.character(which), all(which %in% term_names)) which <- setNames(as.list(which), which) # Compute containment: is_contained <- containment(model) # Compute term asignment list: map from terms to columns in X has_intercept <- attr(terms, "intercept") > 0 col_terms <- if(has_intercept) c("(Intercept)", term_names)[asgn + 1] else term_names[asgn[asgn > 0]] if(!length(col_terms) == ncol(X)) # should never happen. stop("An error happended when computing Type II contrasts") term2colX <- split(seq_along(col_terms), col_terms)[unique(col_terms)] # Compute contrast for each term - return as named list: lapply(which, function(term) { # Reorder the cols in X to [, unrelated_to_term, term, contained_in_term] cols_term <- unlist(term2colX[c(term, is_contained[[term]])]) Xnew <- cbind(X[, -cols_term, drop=FALSE], X[, cols_term, drop=FALSE]) # Compute order of terms in Xnew: newXcol_terms <- c(col_terms[-cols_term], col_terms[cols_term]) # Compute Type I contrasts for the reordered X: Lc <- t(doolittle(crossprod(Xnew))$L) dimnames(Lc) <- list(colnames(Xnew), colnames(Xnew)) # Extract rows for term and get original order of columns: Lc[newXcol_terms == term, colnames(X), drop=FALSE] }) } ############################################## ######## get_contrasts_marginal ############################################## #' @importFrom stats model.matrix terms get_contrasts_marginal <- function(model, which=NULL) { # Computes marginal contrasts. # # No tests of conformity with coefficients are implemented # # returns a list X <- model_matrix(model) terms <- terms(model) term_names <- attr(terms, "term.labels") if(is.null(which)) { which <- term_names # If model has at most one term return Type I contrasts: if(ncol(X) <= 1L || length(term_names) <= 1L) return(get_contrasts_type1(model)) } else stopifnot(is.character(which), all(which %in% term_names)) # Compute map from terms to columns in X and contrasts matrix term2colX <- term2colX(terms, X) L <- structure(diag(ncol(X)), dimnames = list(colnames(X), colnames(X))) # Extract contrast for each term - return as named list: which <- setNames(as.list(which), which) lapply(which, function(term) { L[term2colX[[term]], , drop=FALSE] }) } ############################################## ######## rbindall ############################################## rbindall <- function(...) do.call(rbind, ...) cbindall <- function(...) do.call(cbind, ...) ordinal/R/convergence.R0000644000175100001440000002562514533321514014555 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions to assess and check convergence of CLMs. Some ## functions/methods are exported and some are used internally in ## clm(). convergence <- function(object, ...) { UseMethod("convergence") } convergence.clm <- function(object, digits = max(3, getOption("digits") - 3), tol = sqrt(.Machine$double.eps), ...) ### Results: data.frame with columns: ### Estimate ### Std. Error ### Gradient - gradient of the coefficients at optimizer termination ### Error - the signed error in the coefficients at termination ### Rel. Error - the relative error in the coefficeints at termination ### ### The (signed) Error is determined as the Newton step, so this is ### only valid close to the optimum where the likelihood function is ### quadratic. ### ### The relative error equals step/Estimate. { ## get info table and coef-table: info <- object$info[c("nobs", "logLik", "niter", "max.grad", "cond.H")] ## Initialize coef-table with NAs: coefs <- coef(object, na.rm=TRUE) g <- object$gradient H <- object$Hessian tab <- matrix(NA_real_, nrow=length(coefs), ncol=6L, dimnames=list(names(coef(object, na.rm=TRUE)), c("Estimate", "Std.Err", "Gradient", "Error", "Cor.Dec", "Sig.Dig"))) tab[, c(1L, 3L)] <- cbind(coefs, g) res <- list(info=info, coefficients=tab, original.fit=object) class(res) <- "convergence.clm" if(!all(is.finite(H))) { warning("non-finite values in Hessian: illegitimate model fit") return(res) } ## Get eigen values of Hessian: res$eigen.values <- e.val <- eigen(H, symmetric=TRUE, only.values=TRUE)$values ## Compute Cholesky factor of Hessian: ch <- try(chol(H), silent=TRUE) if(any(abs(e.val) <= tol) || inherits(ch, "try-error")) { return(res) } ## Hessian is positive definite: ## Compute approximate error in the coefficients: step <- c(backsolve(ch, backsolve(ch, g, transpose=TRUE))) if(max(abs(step)) > 1e-2) warning("convergence assessment may be unreliable ", "due to large numerical error") ## Compute approximate error in the log-likelihood function: env <- get_clmRho(object) ## Note: safer to get env this way. ## env <- update(object, doFit=FALSE) env$par <- coef(object, na.rm=TRUE) - step new.logLik <- -env$clm.nll(env) new.max.grad <- max(abs(env$clm.grad(env))) if(new.max.grad > max(abs(g)) && max(abs(step)) > tol) warning("Convergence assessment may be unreliable: ", "please assess the likelihood with slice()") ### NOTE: we only warn if step is larger than a tolerance, since if ### step \sim 1e-16, the max(abs(grad)) may increase though stay ### essentially zero. logLik.err <- object$logLik - new.logLik err <- format.pval(logLik.err, digits=2, eps=1e-10) if(!length(grep("<", err))) err <- formatC(as.numeric(err), digits=2, format="e") res$info$logLik.Error <- err ## Fill in the coef-table: se <- sqrt(diag(chol2inv(ch))) res$coefficients[, c(2, 4:6)] <- cbind(se, step, cor.dec(step), signif.digits(coefs, step)) res } print.convergence.clm <- function(x, digits = max(3, getOption("digits") - 3), ...) { ## Prepare for printing: print(x$info, row.names=FALSE, right=FALSE) cat("\n") tab.print <- coef(x) for(i in 1:2) tab.print[,i] <- format(c(coef(x)[,i]), digits=digits) for(i in 3:4) tab.print[,i] <- format(c(coef(x)[,i]), digits=max(1, digits - 1)) print(tab.print, quote=FALSE, right=TRUE, ...) ## Print eigen values: cat("\nEigen values of Hessian:\n") cat(format(x$eigen.values, digits=digits), "\n") conv <- x$original.fit$convergence cat("\nConvergence message from clm:\n") for(i in seq_along(conv$code)) { Text <- paste("(", conv$code[i], ") ", conv$messages[i], sep="") cat(Text, "\n") } if(!is.null(alg.text <- conv$alg.message)) cat(paste("In addition:", alg.text), "\n") cat("\n") ## for(i in seq_along(conv$code)) { ## cat("Code: Message:\n", fill=TRUE) ## cat(conv$code[i], " ", conv$message[i], "\n", fill=TRUE) ## } ## if(!is.null(alg.text <- conv$alg.message)) { ## cat("\nIn addition: ", alg.text, "\n\n", fill=TRUE) ## } return(invisible(x)) } cor.dec <- function(error) { ### computes the no. correct decimals in a number if 'error' is the ### error in the number. ### The function is vectorized. xx <- -log10(abs(error)) lead <- floor(xx) res <- ifelse(xx < lead - log10(.5), lead-1, lead) res[abs(error) >= .05] <- 0 as.integer(round(res)) } signif.digits <- function(value, error) { ### Determines the number of significant digits in 'value' if the ### absolute error in 'value' is 'error'. ### The function is vectorized. res <- cor.dec(error) + ceiling(log10(abs(value))) res[res < 0] <- 0 as.integer(round(res)) } conv.check <- function(fit, control=NULL, Theta.ok=NULL, tol=sqrt(.Machine$double.eps), ...) ## function(gr, Hess, conv, method, gradTol, relTol, ## tol=sqrt(.Machine$double.eps), ...) ### Compute variance-covariance matrix and check convergence along the ### way. ### fit: clm-object or the result of clm_fit_NR() | gradient, Hessian, ### (control), convergence ### control: (tol), (method), gradTol, relTol ### ### Return: list with elements ### vcov, conv, cond.H, messages and { if(missing(control)) control <- fit$control if(is.null(control)) stop("'control' not supplied - cannot check convergence") if(!is.null(control$tol)) tol <- control$tol if(tol < 0) stop(gettextf("numerical tolerance is %g, expecting non-negative value", tol), call.=FALSE) ### OPTION: test this. H <- fit$Hessian g <- fit$gradient max.grad <- max(abs(g)) cov <- array(NA_real_, dim=dim(H), dimnames=dimnames(H)) cond.H <- NA_real_ res <- list(vcov=cov, code=integer(0L), cond.H=cond.H, messages=character(0L)) class(res) <- "conv.check" if(is.list(code <- fit$convergence)) code <- code[[1L]] mess <- switch(as.character(code), "0" = "Absolute and relative convergence criteria were met", "1" = "Absolute convergence criterion was met, but relative criterion was not met", "2" = "iteration limit reached", "3" = "step factor reduced below minimum", "4" = "maximum number of consecutive Newton modifications reached") if(control$method != "Newton") mess <- NULL ### OPTION: get proper convergence message from optim, nlminb, ucminf etc. res <- c(res, alg.message=mess) ## } evd <- eigen(H, symmetric=TRUE, only.values=TRUE)$values negative <- sum(evd < -tol) if(negative) { res$code <- -2L res$messages <- gettextf(paste("Model failed to converge:", "degenerate Hessian with %d negative eigenvalues"), negative) return(res) } ## Add condition number to res: res$cond.H <- max(evd) / min(evd) ## Compute Newton step: ch <- try(chol(H), silent=TRUE) if(max.grad > control$gradTol) { res$code <- -1L res$messages <- gettextf("Model failed to converge with max|grad| = %g (tol = %g)", max.grad, control$gradTol) ## Compute var-cov: vcov <- try(chol2inv(ch), silent=TRUE) if(!inherits(vcov, "try-error")) res$vcov[] <- vcov return(res) } if(!is.null(Theta.ok) && !Theta.ok) { res$code <- -3L res$messages <- "not all thresholds are increasing: fit is invalid" ## Compute var-cov: vcov <- try(chol2inv(ch), silent=TRUE) if(!inherits(vcov, "try-error")) res$vcov[] <- vcov return(res) } zero <- sum(abs(evd) < tol) if(zero || inherits(ch, "try-error")) { res$code <- 1L res$messages <- "Hessian is numerically singular: parameters are not uniquely determined" return(res) } ### NOTE: Only do the following if 'ch <- try(chol(H), silent=TRUE)' ### actually succedded: step <- c(backsolve(ch, backsolve(ch, g, transpose=TRUE))) ## Compute var-cov: res$vcov[] <- chol2inv(ch) ### NOTE: we want res$vcov to be present in all of the situations ### below. if(max(abs(step)) > control$relTol) { res$code <- c(res$code, 1L) corDec <- as.integer(min(cor.dec(step))) res$messages <- c(res$messages, gettextf("some parameters may have only %d correct decimals", corDec)) } if(max(evd) * tol > 1) { res$code <- c(res$code, 2L) res$messages <- c(res$messages, paste("Model is nearly unidentifiable: ", "very large eigenvalue", "\n - Rescale variables?", sep="")) } if((min(evd) / max(evd)) < tol) { res$code <- c(res$code, 3L) if(!5L %in% res$code) { res$messages <- c(res$messages, paste("Model is nearly unidentifiable: ", "large eigenvalue ratio", "\n - Rescale variables?", sep="")) } } if(!length(res$code)) { res$code <- 0L res$messages <- "successful convergence" } res } cov.conv <- conv.check ### OPTION: let convergence() print convergence info from clm using ### print.conv.check print.conv.check <- function(x, action=c("warn", "silent", "stop", "message"), ...) { action <- match.arg(action) if(x$code == 0L || action == "silent") return(invisible()) Text <- paste("(", x$code[1L], ") ", x$messages[1L], sep="") if(!is.null(alg.text <- x$alg.message)) Text <- paste(Text, "\nIn addition:", alg.text) switch(action, "stop" = stop(Text, call.=FALSE), "warn" = warning(Text, call.=FALSE), "message" = message(Text)) } ordinal/R/clm.R0000644000175100001440000001366514533321514013033 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## The main clm function and some auxiliary functions to generate the ## model frame and handle the model environment. checkArgs.clm <- function(mc) { nm <- names(as.list(mc)) if(!"formula" %in% nm) stop("Model needs a formula", call.=FALSE) if("offset" %in% nm) stop("offset argument not allowed: ", "specify 'offset' in formula or scale arguments instead") invisible() } clm <- function(formula, scale, nominal, data, weights, start, subset, doFit = TRUE, na.action, contrasts, model = TRUE, control = list(), link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) { mc <- match.call(expand.dots = FALSE) link <- match.arg(link) threshold <- match.arg(threshold) if(missing(contrasts)) contrasts <- NULL if(missing(start)) start <- NULL checkArgs.clm(mc=match.call()) ## set control parameters: ## getControl.clm control <- do.call(clm.control, c(control, list(...))) ## Extract and process formulas: call.envir <- parent.frame(n=1) formulas <- get_clmFormulas(mc, call.envir) ## Get full model.frame and terms.objects: fullmf <- get_clm.mf(mc, formulas$fullForm, attr(formulas, "envir"), call.envir) if(control$method == "model.frame") return(fullmf) terms.list <- if(any(c("scale", "nominal") %in% names(formulas))) get_clmTerms(mc, formulas, call.envir) else list(formula=terms(fullmf)) ## Get y, X, weights, off etc.: design <- get_clmDesign(fullmf, terms.list, contrasts) lst <- namedList(doFit, control, link, threshold, start, formulas) if(control$method == "design") return(c(design, lst)) ## Get clm.struct: design <- c(design, makeThresholds(design$y.levels, threshold)) design <- drop.cols(design, silent=TRUE, drop.scale=FALSE) clm.struct <- c(design, lst) ## Fit model, check convergence, or return a model environment: fit <- clm.fit.default(clm.struct) if(doFit == FALSE) return(fit) ## Format output, prepare result: keep <- c("terms", "contrasts", "xlevels", # formula "S.terms", "S.contrasts", "S.xlevels", # scale "nom.terms", "nom.contrasts", "nom.xlevels", # nominal "na.action", "y", "y.levels", "control", "link", "threshold", "start", "formulas") res <- c(fit, clm.struct[match(keep, names(clm.struct), 0L)], list(formula=lst$formulas$formula, call=match.call())) ## res$tJac <- format_tJac(res$tJac, res$y.levels, clm.struct$alpha.names) res$info=get_clmInfoTab(res) if(model) res$model <- fullmf res <- res[sort(names(res))] class(res) <- "clm" res } clm.newRho <- function(parent=parent.frame(), y, X, NOM=NULL, S=NULL, weights, offset, S.offset=NULL, tJac, control=clm.control(), ...) ### Setting variables in rho: B1, B2, o1, o2, weights. { ## Make B1, B2, o1, o2 based on y, X and tJac: keep <- weights > 0 y[!keep] <- NA y <- droplevels(y) ntheta <- nlevels(y) - 1 y <- c(unclass(y)) y[is.na(y)] <- 0 n <- sum(keep) B2 <- 1 * (col(matrix(0, nrow(X), ntheta + 1)) == y) o1 <- c(1e5 * B2[keep, ntheta + 1]) - offset[keep] o2 <- c(-1e5 * B2[keep, 1]) - offset[keep] B1 <- B2[keep, -(ntheta + 1), drop = FALSE] B2 <- B2[keep, -1, drop = FALSE] ## adjust B1 and B2 for structured thresholds: B1 <- B1 %*% tJac B2 <- B2 %*% tJac ## update B1 and B2 with nominal effects: if(!is.null(NOM) && ncol(NOM) > 1) { ## if !is.null(NOM) and NOM is more than an intercept: if(control$sign.nominal == "negative") NOM[, -1] <- -NOM[, -1] LL1 <- lapply(1:ncol(NOM), function(x) B1 * NOM[keep, x]) B1 <- do.call(cbind, LL1) LL2 <- lapply(1:ncol(NOM), function(x) B2 * NOM[keep, x]) B2 <- do.call(cbind, LL2) } ## update B1 and B2 with location effects (X): nbeta <- ncol(X) - 1 if(nbeta > 0) { if(control$sign.location == "negative") X <- -X B1 <- cbind(B1, X[keep, -1, drop = FALSE]) B2 <- cbind(B2, X[keep, -1, drop = FALSE]) } dimnames(B1) <- NULL dimnames(B2) <- NULL n.psi <- ncol(B1) ## no. linear model parameters ## there may be scale offset without scale predictors: sigma <- Soff <- if(is.null(S.offset)) rep(1, n) else exp(S.offset[keep]) ## save scale model matrix: k <- 0 if(!is.null(S)) { S <- S[keep, -1, drop=FALSE] dimnames(S) <- NULL k <- ncol(S) ## no. scale parameters } has.scale <- ## TRUE if scale has to be considered. (!is.null(S) || any(S.offset != 0)) ## initialize fitted values and weights: fitted <- numeric(length = n) wts <- weights[keep] lst <- namedList(B1, B2, o1, o2, n.psi, S, Soff, k, sigma, has.scale, fitted, wts, clm.nll, clm.grad, clm.hess) list2env(x=lst, parent=parent) } ordinal/R/warning_functions.R0000644000175100001440000000252414533321514016005 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# givesWarnings <- function(expr) countWarnings(expr) > 0L countWarnings <- function(expr) { .number_of_warnings <- 0L frame_number <- sys.nframe() ans <- withCallingHandlers(expr, warning = function(w) { assign(".number_of_warnings", .number_of_warnings + 1L, envir = sys.frame(frame_number)) invokeRestart("muffleWarning") }) .number_of_warnings } ordinal/R/drop.coef.R0000644000175100001440000001506514533321514014133 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions that can drop columns from rank-deficient design ## matrices. One is exported and others used internally. drop.coef <- function(X, silent = FALSE) ### works if ncol(X) >= 0 and nrow(X) >= 0 { ## test and match arguments: stopifnot(is.matrix(X)) silent <- as.logical(silent)[1] ## perform the qr-decomposition of X using LINPACK methods: qr.X <- qr(X, tol = 1e-7, LAPACK = FALSE) if(qr.X$rank == ncol(X)) return(X) ## return X if X has full column rank if(!silent) ## message the no. dropped columns: message(gettextf("design is column rank deficient so dropping %d coef", ncol(X) - qr.X$rank)) ## return the columns correponding to the first qr.x$rank pivot ## elements of X: newX <- X[, qr.X$pivot[1:qr.X$rank], drop = FALSE] ## did we succeed? stop-if-not: if(qr.X$rank != qr(newX)$rank) stop(gettextf("determination of full column rank design matrix failed"), call. = FALSE) return(newX) } drop.coef2 <- function(X, tol = 1e-7, silent = FALSE, test.ans = FALSE) ### works if ncol(X) >= 0 and nrow(X) >= 0 { ## test and match arguments: stopifnot(is.matrix(X)) silent <- as.logical(silent)[1] aliased <- rep.int(0, ncol(X)) ## perform the qr-decomposition of X using LINPACK methods: qr.X <- qr(X, tol = tol, LAPACK = FALSE) if(qr.X$rank == ncol(X)) { ## return X if X has full column rank attr(X, "aliased") <- aliased attr(X, "orig.colnames") <- colnames(X) return(X) } if(!silent) ## message the no. dropped columns: message(gettextf("design is column rank deficient so dropping %d coef", ncol(X) - qr.X$rank)) ## return the columns correponding to the first qr.x$rank pivot ## elements of X: newX <- X[, qr.X$pivot[1:qr.X$rank], drop = FALSE] sel <- qr.X$pivot[-(1:qr.X$rank)] aliased[sel] <- 1 attr(newX, "aliased") <- aliased attr(newX, "orig.colnames") <- colnames(X) ## Copy old attributes: attributes(newX)$contrasts <- attributes(X)$contrasts attr(newX, "assign") <- attr(X, "assign")[-sel] ## did we succeed? stop-if-not: if(test.ans && qr.X$rank != qr(newX)$rank) stop(gettextf("determination of full column rank design matrix failed"), call. = FALSE) return(newX) } drop.cols <- function(mf, silent = FALSE, drop.scale=TRUE) ### drop columns from X and possibly NOM and S to ensure full column ### rank. ### mf - list with X and possibly NOM and S design matrices. Includes ### alpha.names ### ### returns: updated version of mf. { nalpha <- length(mf$alpha.names) ## X is assumed to contain an intercept at this point: Xint <- match("(Intercept)", colnames(mf$X), nomatch = 0) if(Xint <= 0) { mf$X <- cbind("(Intercept)" = rep(1, nrow(mf$X)), mf$X) warning("an intercept is needed and assumed") } ## intercept in X is guaranteed. if(!is.null(mf[["NOM"]])){ ## store coef names: mf$coef.names <- list() mf$coef.names$alpha <- paste(rep(mf$alpha.names, ncol(mf$NOM)), ".", rep(colnames(mf$NOM), each=nalpha), sep="") mf$coef.names$beta <- colnames(mf$X)[-1] ## drop columns from NOM: mf$NOM <- drop.coef2(mf$NOM, silent=silent) ## drop columns from X: NOMX <- drop.coef2(cbind(mf$NOM, mf$X[,-1, drop=FALSE]), silent=silent) ## extract and store X: mf$X <- cbind("(Intercept)" = rep(1, nrow(mf$X)), NOMX[,-seq_len(ncol(mf$NOM)), drop=FALSE]) ## store alias information: mf$aliased <- list(alpha = rep(attr(mf$NOM, "aliased"), each=nalpha)) mf$aliased$beta <- attr(NOMX, "aliased")[-seq_len(ncol(mf$NOM))] if(drop.scale && !is.null(mf[["S"]])) { mf$coef.names$zeta <- colnames(mf$S)[-1] ## drop columns from S: NOMS <- drop.coef2(cbind(mf$NOM, mf$S[,-1, drop=FALSE]), silent=silent) ## extract and store S: mf$S <- cbind("(Intercept)" = rep(1, nrow(mf$S)), NOMS[,-seq_len(ncol(mf$NOM)), drop=FALSE]) mf$aliased$zeta <- attr(NOMS, "aliased")[-seq_len(ncol(mf$NOM))] } else if(!is.null(mf[["S"]])) { Sint <- match("(Intercept)", colnames(mf$S), nomatch = 0) if(Sint <= 0) { mf$S <- cbind("(Intercept)" = rep(1, nrow(mf$S)), mf$S) warning("an intercept is needed and assumed in 'scale'", call.=FALSE) } ## intercept in S is guaranteed. mf$coef.names$zeta <- colnames(mf$S)[-1] mf$S <- drop.coef2(mf$S, silent=silent) mf$aliased$zeta <- attr(mf$S, "aliased")[-1] } return(mf) } ## end !is.null(mf[["NOM"]]) ## drop columns from X assuming an intercept: mf$coef.names <- list(alpha = mf$alpha.names, beta = colnames(mf$X)[-1]) mf$X <- drop.coef2(mf$X, silent=silent) mf$aliased <- list(alpha = rep(0, nalpha), beta = attr(mf$X, "aliased")[-1]) ## drop columns from S if relevant: if(!is.null(mf[["S"]])) { Sint <- match("(Intercept)", colnames(mf$S), nomatch = 0) if(Sint <= 0) { mf$S <- cbind("(Intercept)" = rep(1, nrow(mf$S)), mf$S) warning("an intercept is needed and assumed in 'scale'", call.=FALSE) } ## intercept in S is guaranteed. mf$coef.names$zeta <- colnames(mf$S)[-1] mf$S <- drop.coef2(mf$S, silent=silent) mf$aliased$zeta <- attr(mf$S, "aliased")[-1] } return(mf) } ordinal/R/clmm.formula.R0000644000175100001440000001012014533321514014633 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions to process lmer-style mixed-model formulae. These ## functions are borrowed from the lme4 package but have later been ## modified. findbars <- function(term) ### Return the pairs of expressions that separated by vertical bars { if (is.name(term) || !is.language(term)) return(NULL) if (term[[1]] == as.name("(")) return(findbars(term[[2]])) if (!is.call(term)) stop("term must be of class call") if (term[[1]] == as.name('|')) return(term) if (length(term) == 2) return(findbars(term[[2]])) c(findbars(term[[2]]), findbars(term[[3]])) } nobars <- function(term) ### term - usually the third element of a formula object: formula[[3]] ### returns a list of terms ### Return the formula omitting the pairs of expressions that are ### separated by vertical bars { if (!('|' %in% all.names(term))) return(term) if (is.call(term) && term[[1]] == as.name('|')) return(NULL) if (length(term) == 2) { nb <- nobars(term[[2]]) if (is.null(nb)) return(NULL) term[[2]] <- nb return(term) } nb2 <- nobars(term[[2]]) nb3 <- nobars(term[[3]]) if (is.null(nb2)) return(nb3) if (is.null(nb3)) return(nb2) term[[2]] <- nb2 term[[3]] <- nb3 term } subbars <- function(term) ### Substitute the '+' function for the '|' function { if (is.name(term) || !is.language(term)) return(term) if (length(term) == 2) { term[[2]] <- subbars(term[[2]]) return(term) } stopifnot(length(term) >= 3) if (is.call(term) && term[[1]] == as.name('|')) term[[1]] <- as.name('+') for (j in 2:length(term)) term[[j]] <- subbars(term[[j]]) term } subnms <- function(term, nlist) ### Substitute any names from nlist in term with 1 { if (!is.language(term)) return(term) if (is.name(term)) { if (any(unlist(lapply(nlist, get("=="), term)))) return(1) return(term) } stopifnot(length(term) >= 2) for (j in 2:length(term)) term[[j]] <- subnms(term[[j]], nlist) term } slashTerms <- function(x) ### Return the list of '/'-separated terms in an expression that ### contains slashes { if (!("/" %in% all.names(x))) return(x) if (x[[1]] != as.name("/")) stop("unparseable formula for grouping factor") list(slashTerms(x[[2]]), slashTerms(x[[3]])) } makeInteraction <- function(x) ### from a list of length 2 return recursive interaction terms { if (length(x) < 2) return(x) trm1 <- makeInteraction(x[[1]]) trm11 <- if(is.list(trm1)) trm1[[1]] else trm1 list(substitute(foo:bar, list(foo=x[[2]], bar = trm11)), trm1) } expandSlash <- function(bb) ### expand any slashes in the grouping factors returned by findbars { if (!is.list(bb)) return(expandSlash(list(bb))) ## I really do mean lapply(unlist(... - unlist returns a ## flattened list in this case unlist(lapply(bb, function(x) { if (length(x) > 2 && is.list(trms <- slashTerms(x[[3]]))) return(lapply(unlist(makeInteraction(trms)), function(trm) substitute(foo|bar, list(foo = x[[2]], bar = trm)))) x })) } ordinal/R/lgamma.R0000644000175100001440000000515714533321514013513 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## [pdg]lgamma functions for the log-gamma distribution [lgamma]. ## Here glgamma is the gradient of the density function, dlgamma. ## The log-gamma distribution is ## used as a flexible link function in clm2() and clmm2(). plgamma <- function(q, lambda, lower.tail = TRUE) .C("plgamma_C", q = as.double(q), length(q), as.double(lambda[1]), as.integer(lower.tail[1]), NAOK = TRUE)$q plgammaR <- function(eta, lambda, lower.tail = TRUE) { q <- lambda v <- q^(-2) * exp(q * eta) if(q < 0) p <- 1 - pgamma(v, q^(-2)) if(q > 0) p <- pgamma(v, q^(-2)) if(isTRUE(all.equal(0, q, tolerance = 1e-6))) p <- pnorm(eta) if(!lower.tail) 1 - p else p } dlgamma <- function(x, lambda, log = FALSE) { stopifnot(length(lambda) == 1 && length(log) == 1) .C("dlgamma_C", x = as.double(x), length(x), as.double(lambda), as.integer(log), NAOK = TRUE)$x } dlgammaR <- function(x, lambda, log = FALSE) { q <- lambda q.2 <- q^(-2) qx <- q * x log.d <- log(abs(q)) + q.2 * log(q.2) - lgamma(q.2) + q.2 * (qx - exp(qx)) if (!log) exp(log.d) else log.d } glgamma <- function(x, lambda) { stopifnot(length(lambda) == 1) .C("glgamma_C", x = as.double(x), length(x), as.double(lambda[1]), NAOK = TRUE)$x } glgammaR <- function(x, lambda) { stopifnot(length(lambda) == 1) (1 - exp(lambda * x))/lambda * dlgamma(x, lambda) } glgammaR2 <- function(x, lambda) { stopifnot(length(lambda == 1)) if(lambda == 0) return(gnorm(x)) y <- dlgamma(x, lambda) y[!is.na(y) && y > 0] <- y * (1 - exp(lambda * x)) return(y) } ordinal/R/AO.R0000644000175100001440000000475014533321514012552 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## [pdg]AO functions for the Aranda-Ordaz distribution. Here gAO is ## the gradient of the density function, dAO. The AO distribution is ## used as a flexible link function in clm2() and clmm2(). pAOR <- function(q, lambda, lower.tail = TRUE) { if(lambda < 1e-6) stop("'lambda' has to be positive. lambda = ", lambda, " was supplied") p <- 1 - (lambda * exp(q) + 1)^(-1/lambda) if(!lower.tail) 1 - p else p } pAO <- function(q, lambda, lower.tail = TRUE) .C("pAO_C", q = as.double(q), length(q), as.double(lambda[1]), as.integer(lower.tail), NAOK = TRUE)$q dAOR <- function(eta, lambda, log = FALSE) { ### exp(eta) * (lambda * exp(eta) + 1)^(-1-1/lambda) stopifnot(length(lambda) == 1 && length(log) == 1) if(lambda < 1e-6) stop("'lambda' has to be positive. lambda = ", lambda, " was supplied") log.d <- eta - (1 + 1/lambda) * log(lambda * exp(eta) + 1) if(!log) exp(log.d) else log.d } dAO <- function(eta, lambda, log = FALSE) { stopifnot(length(lambda) == 1 && length(log) == 1) .C("dAO_C", eta = as.double(eta), length(eta), as.double(lambda), as.integer(log), NAOK = TRUE)$eta } gAOR <- function(eta, lambda) { stopifnot(length(lambda) == 1) lex <- lambda * exp(eta) dAO(eta, lambda) * (1 - (1 + 1/lambda) * lex/(1 + lex)) } gAO <- function(eta, lambda) { stopifnot(length(lambda) == 1) .C("gAO_C", eta = as.double(eta), length(eta), as.double(lambda[1]), NAOK = TRUE)$eta } ordinal/R/clmm.start.R0000644000175100001440000000254014533321514014332 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions to compute starting values for clmm()s. clmm.start <- function(frames, link, threshold) { ## get starting values from clm: fit <- with(frames, clm.fit(y=y, X=X, weights=wts, offset=off, link=link, threshold=threshold)) ## initialize variance parameters to zero: start <- c(fit$par, rep(0, length(frames$grList))) return(start) } ordinal/R/clmm2.utils.R0000755000175100001440000003276414533321514014435 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Utility functions for fitting CLMMs with clmm2(). ### OPTION: Could make use of getFittedC throughout this file... .negLogLikMfastR <- function(rho) { ## negative log-likelihood ### .negLogLikMfast in R with(rho, { o21 <- u[grFac] * stDev o11 <- o1 - o21 o21 <- o2 - o21 eta1 <- (eta1Fix + o11)/sigma eta2 <- (eta2Fix + o21)/sigma pr <- if(nlambda) pfun(eta1, lambda) - pfun(eta2, lambda) else pfun(eta1) - pfun(eta2) if(any(is.na(pr)) || any(pr <= 0)) nll <- Inf else nll <- -sum(weights * log(pr)) - sum(dnorm(x=u, mean=0, sd=1, log=TRUE)) nll }) } .negLogLikM <- function(rho) { ## negative log-likelihood with(rho, { if(estimStDev) stDev <- exp(par[p+nxi+k+estimLambda+ 1:s]) o21 <- u[grFac] * stDev o11 <- o1 - o21 o21 <- o2 - o21 if(estimLambda > 0) lambda <- par[nxi + p + k + 1:estimLambda] sigma <- if(k > 0) expSoffset * exp(drop(Z %*% par[nxi+p + 1:k])) else expSoffset eta1Fix <- drop(B1 %*% par[1:(nxi + p)]) eta2Fix <- drop(B2 %*% par[1:(nxi + p)]) eta1 <- (eta1Fix + o11)/sigma eta2 <- (eta2Fix + o21)/sigma pr <- if(nlambda) pfun(eta1, lambda) - pfun(eta2, lambda) else pfun(eta1) - pfun(eta2) if(any(is.na(pr)) || any(pr <= 0)) nll <- Inf else nll <- -sum(weights * log(pr)) - sum(dnorm(x=u, mean=0, sd=1, log=TRUE)) nll }) } .gradM <- function(rho) { ## gradient of the negative log-likelihood with(rho, { if(nlambda) { p1 <- dfun(eta1, lambda) p2 <- dfun(eta2, lambda) } else { p1 <- dfun(eta1) p2 <- dfun(eta2) } wtprSig <- weights/pr/sigma .C("gradC", as.double(stDev), as.double(p1), as.double(p2), as.double(wtprSig), as.integer(grFac), length(wtprSig), u = as.double(u), length(u))$u ## tapply(stDev * wtprSig * (p1 - p2), grFac, sum) + u }) } .gradC <- function(rho) { tmp <- with(rho, { .C("grad_C", as.double(stDev), p1 = double(length(pr)), p2 = double(length(pr)), as.double(pr), as.double(weights), as.double(sigma), wtprSig = double(length(pr)), as.double(eta1), as.double(eta2), gradValues = double(length(u)), as.double(u), as.integer(grFac), length(pr), length(u), as.double(lambda), as.integer(linkInt))[c("p1", "p2", "wtprSig", "gradValues")] }) rho$wtprSig <- tmp$wtprSig rho$p1 <- tmp$p1 rho$p2 <- tmp$p2 tmp$gradValues } .hessC <- function(rho) { with(rho, { .C("hess", as.double(stDev), as.double(p1), as.double(p2), as.double(pr), as.double(wtprSig), as.double(eta1), as.double(eta2), as.integer(linkInt), as.integer(grFac), length(pr), hessValues = double(length(u)), as.double(lambda), length(u))$hessValues }) } .hessianM <- function(rho) ## hessian of the negative log-likelihood with(rho,{ if(nlambda) { g1 <- gfun(eta1, lambda) g2 <- gfun(eta2, lambda) } else { g1 <- gfun(eta1) g2 <- gfun(eta2) } .C("hessC", as.double(stDev), as.double(p1), as.double(p2), as.double(pr), as.double(g1), as.double(g2), as.double(wtprSig), as.integer(grFac), length(pr), z = double(length(u)), length(u))$z ## tapply(((p1 - p2)^2 / pr - g1 + g2) * wtprSig, grFac, sum) * ## stDev^2 + 1 }) update.u2.v2 <- function(rho) { ### second version: C-implementation of NR-algorithm. .negLogLikBase(rho) ## update: par, stDev, eta1Fix, eta2Fix eta2Fix, sigma fit <- with(rho, .C("NRalg", as.integer(ctrl$trace), as.integer(ctrl$maxIter), as.double(ctrl$gradTol), as.integer(ctrl$maxLineIter), as.integer(grFac), as.double(stDev), as.double(o1), as.double(o2), as.double(eta1Fix), as.double(eta2Fix), as.double(eta1), as.double(eta2), as.double(sigma), as.integer(linkInt), as.double(weights), u = as.double(uStart), pr = as.double(pr), funValue = as.double(nll), gradValues = as.double(uStart), hessValues = as.double(uStart), length(pr), length(uStart), maxGrad = double(1), conv = 0L, double(length(pr)), # p1 double(length(pr)), # p2 double(length(pr)), # wtprSig as.double(lambda), Niter = as.integer(Niter) )[c("u", "pr", "funValue", "gradValues", "hessValues", "maxGrad", "conv", "Niter")] ) ## Get message: message <- switch(as.character(fit$conv), "1" = "max|gradient| < tol, so current iterate is probably solution", "0" = "Non finite negative log-likelihood", "-1" = "iteration limit reached when updating the random effects", "-2" = "step factor reduced below minimum when updating the random effects") ## check for convergence and report warning/error: if(rho$ctrl$trace > 0 && fit$conv == 1) cat("\nOptimizer converged! ", "max|grad|:", fit$maxGrad, message, fill = TRUE) if(fit$conv != 1 && rho$ctrl$innerCtrl == "warnOnly") warning(message, "\n at iteration ", rho$Niter) else if(fit$conv != 1 && rho$ctrl$innerCtrl == "giveError") stop(message, "\n at iteration ", rho$Niter) ## Store values and return: rho$Niter <- fit$Niter rho$u <- fit$u rho$D <- fit$hessValue rho$gradient <- fit$gradValue if(!is.finite(rho$negLogLik <- fit$funValue)) return(FALSE) return(TRUE) } update.u2 <- function(rho) { stepFactor <- 1 innerIter <- 0 rho$u <- rho$uStart rho$negLogLik <- .negLogLikM(rho) if(!is.finite(rho$negLogLik)) return(FALSE) rho$gradient <- .gradC(rho) maxGrad <- max(abs(rho$gradient)) conv <- -1 ## Convergence flag message <- "iteration limit reached when updating the random effects" if(rho$ctrl$trace > 0) Trace(iter=0, stepFactor, rho$negLogLik, maxGrad, rho$u, first=TRUE) ## Newton-Raphson algorithm: for(i in 1:rho$ctrl$maxIter) { if(maxGrad < rho$ctrl$gradTol) { message <- "max|gradient| < tol, so current iterate is probably solution" if(rho$ctrl$trace > 0) cat("\nOptimizer converged! ", "max|grad|:", maxGrad, message, fill = TRUE) conv <- 0 break } rho$D <- .hessC(rho) ## rho$D <- .hessianM(rho) step <- rho$gradient / rho$D rho$u <- rho$u - stepFactor * step negLogLikTry <- .negLogLikMfast(rho) lineIter <- 0 ## simple line search, i.e. step halfing: while(negLogLikTry > rho$negLogLik) { stepFactor <- stepFactor/2 rho$u <- rho$u + stepFactor * step negLogLikTry <- .negLogLikMfast(rho) lineIter <- lineIter + 1 if(rho$ctrl$trace > 0) Trace(i+innerIter, stepFactor, rho$negLogLik, maxGrad, rho$u, first=FALSE) if(lineIter > rho$ctrl$maxLineIter){ message <- "step factor reduced below minimum when updating the random effects" conv <- 1 break } innerIter <- innerIter + 1 } rho$negLogLik <- negLogLikTry rho$gradient <- .gradC(rho) maxGrad <- max(abs(rho$gradient)) if(rho$ctrl$trace > 0) Trace(i+innerIter, stepFactor, rho$negLogLik, maxGrad, rho$u, first=FALSE) stepFactor <- min(1, 2 * stepFactor) } if(conv != 0 && rho$ctrl$innerCtrl == "warnOnly") { warning(message, "\n at iteration ", rho$Niter) utils::flush.console() } else if(conv != 0 && rho$ctrl$innerCtrl == "giveError") stop(message, "\n at iteration ", rho$Niter) rho$Niter <- rho$Niter + i rho$D <- .hessC(rho) if(!is.finite(rho$negLogLik)) return(FALSE) else return(TRUE) } .hessMinC <- function(rho) { with(rho,{ if(nlambda) { g1 <- gfun(eta1, lambda) g2 <- gfun(eta2, lambda) } else { g1 <- gfun(eta1) g2 <- gfun(eta2) } .C("hessC", as.double(stDev), as.double(p1), as.double(p2), as.double(pr), as.double(g1), as.double(g2), as.double(wtprSig), as.integer(grFac), length(pr), z = double(length(u)), length(u))$z }) } .gradMinC <- function(stDev, p1, p2, wtprSig, grFac, u) .C("gradC", as.double(stDev), as.double(p1), as.double(p2), as.double(wtprSig), as.integer(unclass(grFac)), as.integer(length(wtprSig)), u = as.double(u), as.integer(length(u)))$u .gradMinC <- function(rho) { with(rho, { if(nlambda) { p1 <- dfun(eta1, lambda) p2 <- dfun(eta2, lambda) } else { p1 <- dfun(eta1) p2 <- dfun(eta2) } wtprSig <- weights/pr/sigma .C("gradC", as.double(stDev), as.double(p1), as.double(p2), as.double(wtprSig), as.integer(grFac), length(wtprSig), u = as.double(u), length(u))$u }) } grFacSumC <- function(x, grFac, u) .C("grFacSum_C", as.double(x), as.integer(grFac), as.integer(length(x)), u = as.double(u), as.integer(length(u)))$u grFacSum <- function(x, grFac, n.x, u, n.u) { ## i, j, z z <- 0 for (i in 1:n.u) { for (j in 1:n.x) if(grFac[j] == i) z <- z + x[j] u[i] <- z + u[i] z <- 0 } u } getNAGQ2 <- function(rho, par) { ### Not in use if(!missing(par)) rho$par <- par if(!update.u2(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) with(rho, { K <- sqrt(2/D) agqws <- K %*% t(ghqws) agqns <- apply(K %*% t(ghqns), 2, function(x) x + u) ranNew <- apply(agqns, 2, function(x) x[grFac] * stDev) eta1Tmp <- (eta1Fix + o1 - ranNew) / sigma eta2Tmp <- (eta2Fix + o2 - ranNew) / sigma if(nlambda) ## PRnn <- (pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))^weights ## This is likely a computationally more safe solution: PRnn <- exp(weights * log(pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))) else ## PRnn <- (pfun(eta1Tmp) - pfun(eta2Tmp))^weights PRnn <- exp(weights * log(pfun(eta1Tmp) - pfun(eta2Tmp))) for(i in 1:r) ## PRrn[i,] <- apply(PRnn[grFac == i, ], 2, prod) PRrn[i,] <- apply(PRnn[grFac == i, ,drop = FALSE], 2, prod) PRrn <- PRrn * agqws * dnorm(x=agqns, mean=0, sd=1) ### OPTION: Could this be optimized by essentially computing dnorm 'by hand'? }) -sum(log(rowSums(rho$PRrn))) } getNGHQ <- function(rho, par) { ### Not in use if(!missing(par)) rho$par <- par .negLogLikM(rho) ## Update lambda, stDev, sigma and eta*Fix with(rho, { eta1Tmp <- (eta1Fix + o1 - ranNew * stDev) / sigma eta2Tmp <- (eta2Fix + o2 - ranNew * stDev) / sigma if(nlambda) PRnn <- exp(weights * log(pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))) else PRnn <- exp(weights * log(pfun(eta1Tmp) - pfun(eta2Tmp))) for(i in 1:r) PRrn[i,] <- apply(PRnn[grFac == i, ,drop = FALSE], 2, prod) PRrn <- PRrn * agqws * dnorm(x=agqns, mean=0, sd=1) }) -sum(log(rowSums(rho$PRrn))) } ordinal/R/clm.start.R0000644000175100001440000001175714533321514014167 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions to compute starting values for CLMs in clm(). set.start <- function(rho, start=NULL, get.start=TRUE, threshold, link, frames) { ## set starting values for the parameters: nScol <- if(is.null(frames[["S"]])) 0 else ncol(frames[["S"]]) # no cols in S nSpar <- pmax(0, nScol - 1) # no Scale parameters if(get.start) { start <- ## not 'starting' scale effects: clm.start(y.levels=frames$y.levels, threshold=threshold, X=frames$X, NOM=frames$NOM, has.intercept=TRUE) if(nSpar > 0 || # NCOL(frames[["S"]]) > 1 link == "cauchit" || length(rho$lambda)) { ### NOTE: only special start if nSpar > 0 (no reason for ### special start if scale is only offset and no predictors). ### NOTE: start cauchit models at the probit estimates if start is not ### supplied: ### NOTE: start models with lambda at model with probit link rho$par <- start if(link %in% c("Aranda-Ordaz", "log-gamma", "cauchit")) { setLinks(rho, link="probit") } else { setLinks(rho, link) } tempk <- rho$k rho$k <- 0 ## increased gradTol and relTol: fit <- try(clm_fit_NR(rho, control=list(gradTol=1e-3, relTol=1e-3)), silent=TRUE) if(inherits(fit, "try-error")) stop("Failed to find suitable starting values: please supply some", call.=FALSE) start <- c(fit$par, rep(0, nSpar)) if(length(rho$lambda) > 0) start <- c(start, rho$lambda) attr(start, "start.iter") <- fit$niter rho$k <- tempk setLinks(rho, link) # reset link in rho } } ## test start: stopifnot(is.numeric(start)) length.start <- ncol(rho$B1) + nSpar + length(rho$lambda) if(length(start) != length.start) stop(gettextf("length of start is %d should equal %d", length(start), length.start), call.=FALSE) return(start) } start.threshold <- function(y.levels, threshold = c("flexible", "symmetric", "symmetric2", "equidistant")) ### args: ### y.levels - levels of the model response, at least of length two ### threshold - threshold structure, character. { ## match and test arguments: threshold <- match.arg(threshold) ny.levels <- length(y.levels) ntheta <- ny.levels - 1L if(threshold %in% c("symmetric", "symmetric2", "equidistant") && ny.levels < 3) stop(gettextf("symmetric and equidistant thresholds are only meaningful for responses with 3 or more levels")) ## default starting values: start <- qlogis((1:ntheta) / (ntheta + 1) ) # just a guess ## adjusting for threshold functions: if(threshold == "symmetric" && ntheta %% 2) { ## ntheta odd >= 3 nalpha <- (ntheta + 1) / 2 start <- c(start[nalpha], diff(start[nalpha:ntheta])) ## works for ## ntheta >= 1 } if(threshold == "symmetric" && !ntheta %% 2) {## ntheta even >= 4 nalpha <- (ntheta + 2) / 2 start <- c(start[c(nalpha - 1, nalpha)], diff(start[nalpha:ntheta])) ## works for ntheta >= 2 } if(threshold == "symmetric2" && ntheta %% 2) { ## ntheta odd >= 3 nalpha <- (ntheta + 3) / 2 start <- start[nalpha:ntheta] ## works for ntheta >= 3 } if(threshold == "symmetric2" && !ntheta %% 2) {## ntheta even >= 4 nalpha <- (ntheta + 2) / 2 start <- start[nalpha:ntheta] ## works for ntheta >= 2 } if(threshold == "equidistant") start <- c(start[1], mean(diff(start))) ## return starting values for the threshold parameters: return(as.vector(start)) } start.beta <- function(X, has.intercept = TRUE) return(rep(0, ncol(X) - has.intercept)) ## clm.start <- function(y.levels, threshold, X, has.intercept = TRUE) ## return(c(start.threshold(y.levels, threshold), ## start.beta(X, has.intercept))) clm.start <- function(y.levels, threshold, X, NOM=NULL, S=NULL, has.intercept=TRUE) { st <- start.threshold(y.levels, threshold) if(!is.null(NOM) && ncol(NOM) > 1) st <- c(st, rep(rep(0, length(st)), ncol(NOM)-1)) start <- c(st, start.beta(X, has.intercept)) if(!is.null(S) && ncol(S) > 1) start <- c(start, rep(0, ncol(S) - 1)) start } ordinal/R/clmm.methods.R0000644000175100001440000002434314533321514014645 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Implementation of various methods for clmm objects. formatVC <- function(varc, digits = max(3, getOption("digits") - 2)) ### "format()" the 'VarCorr' matrix of the random effects -- for ### show()ing ### Borrowed from lme4/R/lmer.R with minor modifications. { recorr <- lapply(varc, attr, "correlation") reStdDev <- lapply(varc, attr, "stddev") reLens <- unlist(lapply(reStdDev, length)) nr <- sum(reLens) reMat <- array('', c(nr, 4), list(rep.int('', nr), c("Groups", "Name", "Variance", "Std.Dev."))) reMat[1+cumsum(reLens)-reLens, 1] <- names(reLens) reMat[,2] <- unlist(lapply(varc, colnames)) reMat[,3] <- format(unlist(reStdDev)^2, digits = digits) reMat[,4] <- format(unlist(reStdDev), digits = digits) if(any(reLens > 1)) { maxlen <- max(reLens) corr <- do.call("rbind", lapply(recorr, function(x, maxlen) { if(is.null(x)) return("") x <- as(x, "matrix") cc <- format(round(x, 3), nsmall = 3) cc[!lower.tri(cc)] <- "" nr <- dim(cc)[1] if (nr >= maxlen) return(cc) cbind(cc, matrix("", nr, maxlen-nr)) }, maxlen)) colnames(corr) <- c("Corr", rep.int("", maxlen - 1)) cbind(reMat, corr) } else reMat } varcov <- function(object, format=FALSE, digits=max(3, getOption("digits") - 2), ...) ### VarCorr method for model environments - should be the same for ### fitted model objects. { ## Compute variance-covariance matrices of the random effects. res <- lapply(object$ST, function(st) { ## Variance-covariance matrix for the random effects: VC <- tcrossprod(st) ## Standard deviations: stddev <- sqrt(diag(VC)) corr <- t(VC / stddev)/stddev attr(VC, "stddev") <- stddev ## correlation: if(NCOL(st) > 1) { diag(corr) <- 1 attr(VC, "correlation") <- corr } VC }) names(res) <- names(object$dims$nlev.re) if(format) noquote(formatVC(res, digits=digits)) else res } # VarCorr <- function(x, ...) UseMethod("VarCorr") VarCorr.clmm <- function(x, ...) varcov(x, ...) print.clmm <- function(x, digits = max(3, getOption("digits") - 3), ...) { if(x$nAGQ >= 2) cat(paste("Cumulative Link Mixed Model fitted with the adaptive", "Gauss-Hermite \nquadrature approximation with", x$nAGQ ,"quadrature points"), "\n\n") else if(x$nAGQ <= -1) cat(paste("Cumulative Link Mixed Model fitted with the", "Gauss-Hermite \nquadrature approximation with", abs(x$nAGQ) ,"quadrature points"), "\n\n") else cat("Cumulative Link Mixed Model fitted with the Laplace approximation\n", fill=TRUE) cat("formula:", deparse(x$formula), fill=TRUE) if(!is.null(data.name <- x$call$data)) cat("data: ", deparse(data.name), fill=TRUE) if(!is.null(x$call$subset)) cat("subset: ", deparse(x$call$subset), fill=TRUE) cat("\n") print(x$info, row.names=FALSE, right=FALSE) cat("\nRandom effects:\n") print(formatVC(varcov(x), digits=digits), quote=FALSE, ...) nlev.char <- paste(names(x$dims$nlev.gf), " ", x$dims$nlev.gf, sep="", collapse=", ") cat("Number of groups: ", nlev.char, "\n") if(length(x$beta)) { cat("\nCoefficients:\n") print(x$beta, digits=digits, ...) } else { cat("\nNo Coefficients\n") } if(length(x$alpha) > 0) { cat("\nThresholds:\n") print(x$alpha, digits=digits, ...) } if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") return(invisible(x)) } vcov.clmm <- function(object, ...) vcov.clm(object, method="Cholesky") summary.clmm <- function(object, correlation = FALSE, ...) { if(is.null(object$Hessian)) stop("Model needs to be fitted with Hess = TRUE") nfepar <- object$dims$nfepar coef <- matrix(0, nfepar, 4, dimnames = list(names(object$coefficients[1:nfepar]), c("Estimate", "Std. Error", "z value", "Pr(>|z|)"))) coef[, 1] <- object$coefficients[1:nfepar] vc <- try(vcov(object), silent = TRUE) if(inherits(vc, "try-error")) { warning("Variance-covariance matrix of the parameters is not defined") coef[, 2:4] <- NaN if(correlation) warning("Correlation matrix is unavailable") object$condHess <- NaN } else { coef[, 2] <- sd <- sqrt(diag(vc)[1:nfepar]) ## Cond is Inf if Hessian contains NaNs: object$condHess <- if(any(is.na(object$Hessian))) Inf else with(eigen(object$Hessian, only.values = TRUE), abs(max(values) / min(values))) coef[, 3] <- coef[, 1]/coef[, 2] coef[, 4] <- 2 * pnorm(abs(coef[, 3]), lower.tail=FALSE) if(correlation) ## { ## sd <- sqrt(diag(vc)) object$correlation <- cov2cor(vc) ## (vc / sd) / rep(sd, rep(object$edf, object$edf)) } object$info$cond.H <- formatC(object$condHess, digits=1, format="e") object$coefficients <- coef class(object) <- "summary.clmm" return(object) } print.summary.clmm <- function(x, digits = max(3, getOption("digits") - 3), signif.stars = getOption("show.signif.stars"), ...) { if(x$nAGQ >= 2) cat(paste("Cumulative Link Mixed Model fitted with the adaptive", "Gauss-Hermite \nquadrature approximation with", x$nAGQ ,"quadrature points"), "\n\n") else if(x$nAGQ <= -1) cat(paste("Cumulative Link Mixed Model fitted with the", "Gauss-Hermite \nquadrature approximation with", abs(x$nAGQ) ,"quadrature points"), "\n\n") else cat("Cumulative Link Mixed Model fitted with the Laplace approximation\n", fill=TRUE) cat("formula:", deparse(x$formula), fill=TRUE) if(!is.null(data.name <- x$call$data)) cat("data: ", deparse(data.name), fill=TRUE) if(!is.null(x$call$subset)) cat("subset: ", deparse(x$call$subset), fill=TRUE) cat("\n") print(x$info, row.names=FALSE, right=FALSE) cat("\nRandom effects:\n") print(formatVC(varcov(x), digits=digits), quote=FALSE, ...) nlev.char <- paste(names(x$dims$nlev.gf), " ", x$dims$nlev.gf, sep="", collapse=", ") cat("Number of groups: ", nlev.char, "\n") nbeta <- length(x$beta) nalpha <- length(x$alpha) if(nbeta > 0) { cat("\nCoefficients:\n") printCoefmat(x$coefficients[nalpha + 1:nbeta, , drop=FALSE], digits=digits, signif.stars=signif.stars, has.Pvalue=TRUE, ...) } else { cat("\nNo Coefficients\n") } if(nalpha > 0) { ## always true cat("\nThreshold coefficients:\n") printCoefmat(x$coefficients[seq_len(nalpha), -4, drop=FALSE], digits=digits, has.Pvalue=FALSE, signif.stars=FALSE, ...) } if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") if(!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } return(invisible(x)) } logLik.clmm <- function(object, ...) structure(object$logLik, df = object$edf, class = "logLik") extractAIC.clmm <- function(fit, scale = 0, k = 2, ...) { edf <- fit$edf c(edf, -2*fit$logLik + k * edf) } nobs.clmm <- function(object, ...) object$dims$nobs edf.clmm <- function(object, ...) object$dims$edf ## anova.clmm <- function(object, ...) ## anova.clm(object, ...) anova.clmm <- function(object, ...) { ### This essentially calls anova.clm(object, ...), but the names of ### the models were not displayed correctly in the printed output ### unless the following dodge is enforced. mc <- match.call() args <- as.list(mc) Call <- as.call(c(list(quote(anova.clm)), args[-1])) ff <- environment(formula(object)) pf <- parent.frame() ## save parent frame in case we need it sf <- sys.frames()[[1]] ff2 <- environment(object) res <- tryCatch(eval(Call, envir=pf), error=function(e) { tryCatch(eval(Call, envir=ff), error=function(e) { tryCatch(eval(Call, envir=ff2), error=function(e) { tryCatch(eval(Call, envir=sf), error=function(e) { "error" })})})}) if((is.character(res) && res == "error")) stop("Unable to evaluate models.") res } logLik.clmm <- function(object, ...) structure(object$logLik, df = object$edf, class = "logLik") extractAIC.clmm <- function(fit, scale = 0, k = 2, ...) { edf <- fit$edf c(edf, -2*fit$logLik + k * edf) } model.matrix.clmm <- function(object, type = c("design", "B"), ...) { type <- match.arg(type) mf <- try(model.frame(object), silent=TRUE) if(inherits(mf, "try-error")) stop("Cannot extract model.matrix: refit model with 'model=TRUE'?") if(type == "design") { Terms <- terms(object) ans <- model.matrix(Terms, mf) } else { ## if type == "B": stop("type = 'B' not yet implemented") } return(ans) } ordinal/R/clm.slice.R0000644000175100001440000001603014533321514014116 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Methods to compute and plot likelihood-slices for clm objects. slice <- function(object, ...) { UseMethod("slice") } slice.clm <- function(object, parm = seq_along(par), lambda = 3, grid = 1e2, quad.approx = TRUE, ...) { ## argument matching and testing: stopifnot(is.numeric(lambda) && lambda > 0) stopifnot(is.numeric(grid) && grid >= 1) grid <- as.integer(round(grid)) par <- coef(object, na.rm=TRUE) par.names <- names(par) npar <- length(par) stopifnot(length(parm) == length(unique(parm))) if(is.character(parm)) parm <- match(parm, par.names, nomatch = 0) ### disallow character argument due to ambiguity? if(!all(parm %in% seq_along(par))) stop("invalid 'parm' argument") stopifnot(length(parm) > 0) parm <- as.integer(round(parm)) ## parm is an integer vector indexing non-aliased coef. ml <- object$logLik parm.names <- par.names[parm] ## get environment corresponding to object: rho <- get_clmRho(object) ## rho <- update(object, doFit = FALSE) names(par) <- NULL rho$par <- par ## set rho$par to mle stopifnot(isTRUE(all.equal(rho$clm.nll(rho), -object$logLik))) ## generate sequence of parameters at which to compute the ## log-likelihood: curv <- sqrt(1/diag(object$Hessian)) ## curvature in nll wrt. par par.range <- par + curv %o% c(-lambda, lambda) ## par.seq - list of length npar with a sequence of values for each ## parameter : par.seq <- lapply(parm, function(ind) { seq(par.range[ind, 1], par.range[ind, 2], length = grid) }) ## compute relative logLik for all par.seq for each par: logLik <- lapply(seq_along(parm), function(i) { # for each par rho$par <- par ## reset par values to MLE sapply(par.seq[[ i ]], function(par.val) { # for each par.seq value rho$par[ parm[i] ] <- par.val -rho$clm.nll(rho) - ml ## relative logLik }) }) ## collect parameter sequences and relative logLik in a list of ## data.frames: res <- lapply(seq_along(parm), function(i) { structure(data.frame(par.seq[[ i ]], logLik[[ i ]]), names = c(parm.names[i], "logLik")) }) ## set attributes: names(res) <- parm.names attr(res, "original.fit") <- object attr(res, "mle") <- par[parm] class(res) <- "slice.clm" if(!quad.approx) return(res) ## compute quadratic approx to *positive* logLik: Quad <- function(par, mle, curv) -((mle - par)^2 / curv^2 / 2) for(i in seq_along(parm)) res[[ i ]]$quad <- Quad(par.seq[[ i ]], par[ parm[i] ], curv[ parm[i] ]) return(res) } plot.slice.clm <- function(x, parm = seq_along(x), type = c("quadratic", "linear"), plot.mle = TRUE, ask = prod(par("mfcol")) < length(parm) && dev.interactive(), ...) { ## Initiala argument matching and testing: type <- match.arg(type) stopifnot(is.numeric(parm)) parm <- as.integer(round(parm)) of <- attr(x, "original.fit") par <- coef(of) ml <- of$logLik ## take the signed sqrt of nll and quad: if(type == "linear") { sgn.sqrt <- function(par, mle, logLik) (2 * (par > mle) - 1) * sqrt(-logLik) mle <- coef(attr(x, "original.fit")) for(i in parm) { x[[i]]$logLik <- sgn.sqrt(x[[i]][1], mle[i], x[[i]]$logLik) if(!is.null(x[[i]]$quad)) x[[i]]$quad <- sgn.sqrt(x[[i]][1], mle[i], x[[i]]$quad) } ylab <- "Signed log-likelihood root" } else ylab <- "Relative log-likelihood" if(ask) { oask <- devAskNewPage(TRUE) on.exit(devAskNewPage(oask)) } ## actual plotting: for(i in parm) { z <- x[[i]] plot(z[1:2], type = "l", ylab=ylab, ...) if(!is.null(z$quad)) lines(z[[1]], z[[3]], lty = 2) if(plot.mle && type == "quadratic") ## abline(v = par[i]) abline(v = attr(x, "mle")[i]) ## abline(v = par[names(x)[i]]) } return(invisible()) } ## slice.clm <- ## function(object, parm = seq_along(par), lambda = 3, grid = 1e2, ## quad.approx = TRUE, ...) ## { ## ## argument matching and testing: ## stopifnot(is.numeric(lambda) && lambda > 0) ## stopifnot(is.numeric(grid) && grid >= 1) ## grid <- as.integer(grid) ## par <- coef(object) ## par.names <- names(par) ## npar <- length(par) ## stopifnot(length(parm) == length(unique(parm))) ## if(is.character(parm)) ## parm <- match(parm, par.names, nomatch = 0) ## if(!all(parm %in% seq_along(par))) ## stop("invalid 'parm' argument") ## stopifnot(length(parm) > 0) ## parm <- as.integer(parm) ## ml <- object$logLik ## parm.names <- par.names[parm] ## ## ## get environment corresponding to object: ## rho <- update(object, doFit = FALSE) ## names(par) <- NULL ## rho$par <- par ## set rho$par to mle ## stopifnot(isTRUE(all.equal(rho$clm.nll(rho), -object$logLik))) ## ## ## generate sequence of parameters at which to compute the ## ## log-likelihood: ## curv <- sqrt(1/diag(object$Hess)) ## curvature in nll wrt. par ## par.range <- par + curv %o% c(-lambda, lambda) ## ## par.seq - list of length npar: ## par.seq <- sapply(parm, function(ind) { ## seq(par.range[ind, 1], par.range[ind, 2], length = grid) }, ## simplify = FALSE) ## ## compute relative logLik for all par.seq for each par: ## logLik <- lapply(seq_along(parm), function(i) { # for each par ## rho$par <- par ## reset par values to MLE ## sapply(par.seq[[ i ]], function(par.val) { # for each val ## rho$par[ parm[i] ] <- par.val ## -rho$clm.nll(rho) - ml ## relative logLik ## }) ## }) ## ## ## collect results in a list of data.frames: ## res <- lapply(seq_along(parm), function(i) { ## structure(data.frame(par.seq[[ i ]], logLik[[ i ]]), ## names = c(parm.names[i], "logLik")) ## }) ## ## ## set attributes: ## names(res) <- parm.names ## attr(res, "original.fit") <- object ## class(res) <- "slice.clm" ## ## if(!quad.approx) return(res) ## ## compute quadratic approx to *positive* logLik: ## Quad <- function(par, mle, curv) ## -((mle - par)^2 / curv^2 / 2) ## for(i in seq_along(parm)) ## res[[ i ]]$quad <- ## Quad(par.seq[[ i ]], par[ parm[i] ], curv[ parm[i] ]) ## ## return(res) ## } ordinal/R/gdist.R0000644000175100001440000000414414533321514013362 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Gradients of densities of common distribution functions on the form ## g[dist], where "dist" can be one of "logis", "norm", and ## "cauchy". These functions are used in Newton-Raphson algorithms ## when fitting CLMs and CLMMs in clm(), clm2(), clmm() and ## clmm2(). Similar gradients are implemented for the gumbel, ## log-gamma, and Aranda-Ordaz distributions. glogis <- function(x) ### gradient of dlogis .C("glogis_C", x = as.double(x), length(x), NAOK = TRUE)$x gnorm <- function(x) ### gradient of dnorm(x) wrt. x .C("gnorm_C", x = as.double(x), length(x), NAOK = TRUE)$x gcauchy <- function(x) ### gradient of dcauchy(x) wrt. x .C("gcauchy_C", x = as.double(x), length(x), NAOK = TRUE)$x glogisR <- function(x) { ### glogis in R res <- rep(0, length(x)) isFinite <- !is.infinite(x) x <- x[isFinite] isNegative <- x < 0 q <- exp(-abs(x)) q <- 2*q^2*(1 + q)^-3 - q*(1 + q)^-2 q[isNegative] <- -q[isNegative] res[isFinite] <- q res } gnormR <- function(x) ### gnorm in R -x * dnorm(x) gcauchyR <- function(x) ### gcauchy(x) in R -2*x/pi*(1+x^2)^-2 ordinal/R/clm.simple.R0000644000175100001440000001323414533321514014313 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## A implementation of simple CLMs (simple_clm), i.e., CLMs without ## scale and nominal effects. simple_clm <- function(formula, data, weights, start, subset, offset, doFit = TRUE, na.action, contrasts, model = TRUE, control = list(), link = c("logit", "probit", "cloglog", "loglog"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) { ## Initial argument matching and testing: mc <- match.call(expand.dots = FALSE) link <- match.arg(link) threshold <- match.arg(threshold) ## check for presence of formula: if(missing(formula)) stop("Model needs a formula") if(missing(contrasts)) contrasts <- NULL ## set control parameters: control <- do.call(clm.control, c(control, list(...))) ## Compute: y, X, wts, off, mf: if (missing(data)) data <- environment(formula) mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "weights", "na.action", "offset"), names(mf), 0L) mf <- mf[c(1L, m)] mf$drop.unused.levels <- TRUE mf[[1L]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) ## Return model.frame? if(control$method == "model.frame") return(mf) y <- model.response(mf, "any") ## any storage mode if(!is.factor(y)) stop("response needs to be a factor", call.=FALSE) ## design matrix: mt <- attr(mf, "terms") X <- if (!is.empty.model(mt)) model.matrix(mt, mf, contrasts) else cbind("(Intercept)" = rep(1, NROW(y))) ## Test for intercept in X: Xint <- match("(Intercept)", colnames(X), nomatch = 0) if(Xint <= 0) { X <- cbind("(Intercept)" = rep(1, NROW(y)), X) warning("an intercept is needed and assumed in 'formula'", call.=FALSE) } ## intercept in X is guaranteed. wts <- getWeights(mf) off <- getOffsetStd(mf) ylevels <- levels(droplevels(y[wts > 0])) frames <- list(y=y, ylevels=ylevels, X=X) ## Compute the transpose of the Jacobian for the threshold function, ## tJac and the names of the threshold parameters, alpha.names: frames <- c(frames, makeThresholds(ylevels, threshold)) ## test for column rank deficiency in design matrices: frames <- drop.cols(frames, silent=TRUE) ## Set envir rho with variables: B1, B2, o1, o2, wts, fitted: rho <- clm.newRho(parent.frame(), y=frames$y, X=frames$X, NOM=NULL, S=NULL, weights=wts, offset=off, S.offset=NULL, tJac=frames$tJac, control=control) ## Set starting values for the parameters: start <- set.start(rho, start=start, get.start=missing(start), threshold=threshold, link=link, frames=frames) rho$par <- as.vector(start) ## remove attributes ## Set pfun, dfun and gfun in rho: setLinks(rho, link) ## Possibly return the environment rho without fitting: if(!doFit) return(rho) ## Fit the clm: if(control$method == "Newton") fit <- clm_fit_NR(rho, control) else fit <- clm_fit_optim(rho, control$method, control$ctrl) ### NOTE: we could add arg non.conv = c("error", "warn", "message") to ### allow non-converged fits to be returned. ## Modify and return results: res <- clm.finalize(fit, weights=wts, coef.names=frames$coef.names, aliased=frames$aliased) res$control <- control res$link <- link res$start <- start if(control$method == "Newton" && !is.null(start.iter <- attr(start, "start.iter"))) res$niter <- res$niter + start.iter res$threshold <- threshold res$call <- match.call() res$contrasts <- attr(frames$X, "contrasts") res$na.action <- attr(mf, "na.action") res$terms <- mt res$xlevels <- .getXlevels(mt, mf) res$tJac <- frames$tJac res$y.levels <- frames$ylevels ## Check convergence: conv <- conv.check(res, Theta.ok=TRUE, tol=control$tol) print.conv.check(conv, action=control$convergence) ## print convergence message res$vcov <- conv$vcov res$cond.H <- conv$cond.H res$convergence <- conv[!names(conv) %in% c("vcov", "cond.H")] res$info <- with(res, { data.frame("link" = link, "threshold" = threshold, "nobs" = nobs, "logLik" = formatC(logLik, digits=2, format="f"), "AIC" = formatC(-2*logLik + 2*edf, digits=2, format="f"), "niter" = paste(niter[1], "(", niter[2], ")", sep=""), ### NOTE: iterations to get starting values for scale models *are* ### included here. "max.grad" = formatC(maxGradient, digits=2, format="e") ## BIC is not part of output since it is not clear what ## the no. observations are. ) }) class(res) <- "clm" ## add model.frame to results list? if(model) res$model <- mf return(res) } ordinal/R/control.R0000644000175100001440000000703014533321514013725 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions that set control parameters for clm() and clmm(). clm.control <- function(method = c("Newton", "model.frame", "design", "ucminf", "nlminb", "optim"), sign.location = c("negative", "positive"), sign.nominal = c("positive", "negative"), ..., trace = 0L, maxIter = 100L, gradTol = 1e-6, maxLineIter = 15L, relTol = 1e-6, tol = sqrt(.Machine$double.eps), maxModIter = 5L, convergence=c("warn", "silent", "stop", "message")) { method <- match.arg(method) convergence <- match.arg(convergence) sign.location <- match.arg(sign.location) sign.nominal <- match.arg(sign.nominal) if(!all(is.numeric(c(maxIter, gradTol, maxLineIter, relTol, tol, maxModIter)))) stop("maxIter, gradTol, relTol, tol, maxModIter and maxLineIter should all be numeric") ctrl <- list(method = method, sign.location = sign.location, sign.nominal = sign.nominal, convergence = convergence, trace = as.integer(trace), maxIter = as.integer(maxIter), gradTol = as.numeric(gradTol), relTol = as.numeric(relTol), tol = as.numeric(tol), maxLineIter = as.integer(maxLineIter), maxModIter = as.integer(maxModIter)) if(method %in% c("ucminf", "nlminb", "optim")) ctrl$ctrl <- list(trace = as.integer(abs(trace)), ...) return(ctrl) } clmm.control <- function(method = c("nlminb", "ucminf", "model.frame"), ..., trace = 0, maxIter = 50, gradTol = 1e-4, maxLineIter = 50, useMatrix = FALSE, innerCtrl = c("warnOnly", "noWarn", "giveError"), checkRanef = c("warn", "error", "message")) { method <- match.arg(method) innerCtrl <- match.arg(innerCtrl) checkRanef <- match.arg(checkRanef) useMatrix <- as.logical(useMatrix) stopifnot(is.logical(useMatrix)) ctrl <- list(trace=if(trace < 0) 1 else 0, maxIter=maxIter, gradTol=gradTol, maxLineIter=maxLineIter, innerCtrl=innerCtrl) optCtrl <- list(trace = abs(trace), ...) if(!is.numeric(unlist(ctrl[-5]))) stop("maxIter, gradTol, maxLineIter and trace should all be numeric") if(any(ctrl[-c(1, 5)] <= 0)) stop("maxIter, gradTol and maxLineIter have to be > 0") if(method == "ucminf" && !"grtol" %in% names(optCtrl)) optCtrl$grtol <- 1e-5 if(method == "ucminf" && !"grad" %in% names(optCtrl)) optCtrl$grad <- "central" namedList(method, useMatrix, ctrl, optCtrl, checkRanef) } ordinal/R/clm.profile.R0000644000175100001440000007336714533321514014477 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## profile and confint methods for clm objects. profile.clm <- function(fitted, which.beta = seq_len(nbeta), which.zeta = seq_len(nzeta), alpha = 0.001, max.steps = 50, nsteps = 8, trace = FALSE, step.warn = 5, control = list(), ...) { ### match and tests arguments and dispatch to .zeta and .beta ### functions for the actual profiling. ### which.[beta, zeta] - numeric or character vectors. ### Works for models with nominal and scale effects and for any number ### of aliased coefs. ## match and test arguments: if(fitted$link %in% c("Aranda-Ordaz", "log-gamma")) stop("Profiling not implemented for models with flexible link function") if(any(is.na(diag(vcov(fitted))))) stop("Cannot get profile when vcov(fitted) contains NAs", call.=FALSE) stopifnot(is.numeric(alpha) && length(alpha) == 1 && alpha > 0 && alpha < 1) stopifnot(round(max.steps) > round(nsteps)) stopifnot(round(nsteps) > round(step.warn)) stopifnot(round(nsteps) > 0 && round(step.warn) >= 0) max.steps <- round(max.steps) nsteps <- round(nsteps) step.warn <- round(step.warn) trace <- as.logical(trace)[1] ### BETA: beta.names <- names(fitted$beta) ## possible beta nbeta <- length(fitted$beta) if(is.character(which.beta)) which.beta <- match(which.beta, beta.names, nomatch = 0) ## which.beta is a numeric vector if(!all(which.beta %in% seq_len(nbeta))) stop("invalid 'parm' argument") ### ZETA: zeta.names <- names(fitted$zeta) ## possible zeta nzeta <- length(fitted$zeta) if(is.character(which.zeta)) which.zeta <- match(which.zeta, zeta.names, nomatch = 0) ## which.zeta is a numeric vector if(!all(which.zeta %in% seq_len(nzeta))) stop("invalid 'parm' argument") ## the actual profiling for beta and zeta par: prof.beta <- if(nbeta) profile.clm.beta(fitted, which.beta, alpha, max.steps, nsteps, trace, step.warn, control, ...) else NULL prof.zeta <- if(nzeta) profile.clm.zeta(fitted, which.zeta, alpha, max.steps, nsteps, trace, step.warn, control, ...) else NULL ## collect and return results: val <- structure(c(prof.beta, prof.zeta), original.fit = fitted) class(val) <- c("profile.clm") return(val) } profile.clm.beta <- function(fitted, which.beta, alpha = 0.001, max.steps = 50, nsteps = 8, trace = FALSE, step.warn = 5, control = list(), ...) ### which.beta is assumed to be a numeric vector { lroot.max <- qnorm(1 - alpha/2) delta = lroot.max/nsteps nbeta <- length(fitted$beta) beta.names <- names(fitted$beta) nalpha <- length(fitted$alpha) orig.par <- c(fitted$alpha, fitted$beta) if(!is.null(zeta <- fitted$zeta)) { names(zeta) <- paste("sca", names(fitted$zeta), sep=".") orig.par <- c(orig.par, zeta) } if(!is.null(lambda <- fitted$lambda)) { orig.par <- c(orig.par, lambda) } ### NOTE: we need to update zeta.names to make names(orig.par) ### unique. This is needed to correctly construct the resulting ### par.vals matrix and to extract from it again. std.err <- coef(summary(fitted))[nalpha + 1:nbeta, "Std. Error"] if(any(is.na(std.err))) stop("Cannot profile model where standard errors are NA", call.=FALSE) ## results list: prof.list <- vector("list", length = length(which.beta)) names(prof.list) <- beta.names[which.beta] ## get model matrices and model environment: ### NOTE: Fixing the fragile update approach: ## mf <- update(fitted, method = "model.frame") ## Need to subset by wts to make nrow(X) == nrow(B1) ## X <- with(mf, X[wts > 0, , drop=FALSE]) ## containing alias cols wts <- getWeights(model.frame(fitted)) X <- model.matrix(fitted)$X[wts > 0, , drop=FALSE] if(fitted$control$sign.location == "positive") X <- -X rho <- get_clmRho(fitted) ## rho <- update(fitted, doFit = FALSE) orig <- as.list(rho)[c("B1", "B2", "o1", "o2")] rho$n.psi <- rho$n.psi - 1 ## needed for models with scale nalpha.clean <- sum(!fitted$aliased$alpha) par.clean <- orig.par[!is.na(orig.par)] ## which of which.beta are NA: alias.wb <- fitted$aliased$beta[which.beta] ## For each which.beta move up or down, fit the model and store the ## signed likelihood root statistic and parameter values: for(wb in which.beta) { if(alias.wb[wb == which.beta]) next ## ignore aliased coef rem <- nalpha.clean + (which.beta - cumsum(alias.wb))[wb == which.beta] par.wb <- matrix(coef(fitted), nrow = 1) ## MLE wb.name <- beta.names[wb] lroot.wb <- 0 ## lroot at MLE ## set variables in fitting environment: rho$B1 <- orig$B1[, -rem, drop=FALSE] rho$B2 <- orig$B2[, -rem, drop=FALSE] for(direction in c(-1, 1)) { ## move down or up if(trace) { message("\nParameter: ", wb.name, c(" down", " up")[(direction + 1)/2 + 1]) utils::flush.console() } ## reset starting values: rho$par <- par.clean[-rem] for(step in seq_len(max.steps)) { ## increment beta.i, offset and refit model without wb parameter: beta.i <- fitted$beta[wb] + direction * step * delta * std.err[wb] new.off <- X[, 1+wb, drop=TRUE] * beta.i rho$o1 <- orig$o1 - new.off rho$o2 <- orig$o2 - new.off fit <- clm_fit_NR(rho, control) ## save likelihood root statistic: lroot <- -direction * sqrt(2*(fitted$logLik - fit$logLik)) ## save lroot and pararameter values: lroot.wb <- c(lroot.wb, lroot) temp.par <- orig.par temp.par[names(fit$par)] <- fit$par temp.par[wb.name] <- beta.i par.wb <- rbind(par.wb, temp.par) ## break for loop if profile is far enough: if(abs(lroot) > lroot.max) break } ## end 'step in seq_len(max.steps)' ## test that lroot.max is reached and enough steps are taken: if(abs(lroot) < lroot.max) warning("profile may be unreliable for ", wb.name, " because lroot.max was not reached for ", wb, c(" down", " up")[(direction + 1)/2 + 1]) if(step <= step.warn) warning("profile may be unreliable for ", wb.name, " because only ", step, "\n steps were taken ", c("down", "up")[(direction + 1)/2 + 1]) } ## end 'direction in c(-1, 1)' ## order lroot and par values and collect in a data.frame: lroot.order <- order(lroot.wb, decreasing = TRUE) prof.list[[wb.name]] <- structure(data.frame(lroot.wb[lroot.order]), names = "lroot") prof.list[[wb.name]]$par.vals <- par.wb[lroot.order, ] if(!all(diff(par.wb[lroot.order, wb.name]) > 0)) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for ", wb.name) } ## end 'wb in which.beta' prof.list } profile.clm.zeta <- function(fitted, which.zeta, alpha = 0.001, max.steps = 50, nsteps = 8, trace = FALSE, step.warn = 5, control = list(), ...) ### which.zeta is assumed to be a numeric vector { lroot.max <- qnorm(1 - alpha/2) delta = lroot.max/nsteps nzeta <- length(fitted$zeta) nbeta <- length(fitted$beta) zeta <- fitted$zeta names(zeta) <- zeta.names <- paste("sca", names(fitted$zeta), sep=".") ### NOTE: we need to update zeta.names to make names(orig.par) ### unique. This is needed to correctly construct the resulting ### par.vals matrix and to extract from it again. orig.par <- c(fitted$alpha, fitted$beta, zeta) nalpha <- length(fitted$alpha) std.err <- coef(summary(fitted))[nalpha+nbeta+1:nzeta, "Std. Error"] if(any(is.na(std.err))) stop("Cannot profile model where standard errors are NA", call.=FALSE) ## results list: prof.list <- vector("list", length = length(which.zeta)) names(prof.list) <- names(zeta)[which.zeta] ## get model environment: rho <- get_clmRho(fitted) ## rho <- update(fitted, doFit = FALSE) S <- rho$S ## S without intercept Soff <- rho$Soff rho$k <- max(0, rho$k - 1) ab <- c(fitted$alpha, fitted$beta) ab.clean <- ab[!is.na(ab)] zeta.clean <- zeta[!fitted$aliased$zeta] ## which of which.zeta are NA: alias.wz <- fitted$aliased$zeta[which.zeta] ## For each which.zeta move up or down, fit the model and store the ## signed likelihood root statistic and parameter values: for(wz in which.zeta) { if(alias.wz[wz]) next ## ignore aliased coef ## rem: which columns of S to remove rem <- (which.zeta - cumsum(alias.wz))[wz] par.wz <- matrix(coef(fitted), nrow = 1) ## MLE wz.name <- zeta.names[wz] lroot.wz <- 0 ## lroot at MLE ## set variables in fitting environment: rho$S <- S[, -rem, drop=FALSE] for(direction in c(-1, 1)) { ## move down or up if(trace) { message("\nParameter: ", wz.name, c(" down", " up")[(direction + 1)/2 + 1]) utils::flush.console() } ## reset starting values: rho$par <- c(ab.clean, zeta.clean[-rem]) ## rho$par <- coef(fitted, na.rm = TRUE)[-rem] for(step in seq_len(max.steps)) { ## increment zeta.i, offset and refit model without wz parameter: zeta.i <- zeta[wz] + direction * step * delta * std.err[wz] rho$Soff <- rho$sigma <- Soff * exp(S[, wz, drop=TRUE] * zeta.i) ### NOTE: Need to update sigma in addition to Soff since otherwise ### sigma isn't updated when k=0 (single scale par) fit <- clm_fit_NR(rho, control) ## save likelihood root statistic: lroot <- -direction * sqrt(2*(fitted$logLik - fit$logLik)) ## save lroot and pararameter values: lroot.wz <- c(lroot.wz, lroot) temp.par <- orig.par temp.par[names(fit$par)] <- fit$par temp.par[wz.name] <- zeta.i par.wz <- rbind(par.wz, temp.par) ## break for loop if profile is far enough: if(abs(lroot) > lroot.max) break } ## end 'step in seq_len(max.steps)' ## test that lroot.max is reached and enough steps are taken: if(abs(lroot) < lroot.max) warning("profile may be unreliable for ", wz.name, " because qnorm(1 - alpha/2) was not reached when profiling ", c(" down", " up")[(direction + 1)/2 + 1]) if(step <= step.warn) warning("profile may be unreliable for ", wz.name, " because only ", step, "\n steps were taken ", c("down", "up")[(direction + 1)/2 + 1]) } ## end 'direction in c(-1, 1)' ## order lroot and par values and collect in a data.frame: ## lroot.order <- order(lroot.wz, decreasing = TRUE) lroot.order <- order(par.wz[, wz.name], decreasing = FALSE) ### NOTE: Need to change how values are ordered here. We should order ### with par.wz[, wz.name] instead of lroot.wz since if lroot.wz is ### flat, the order may be incorrect. prof.list[[wz.name]] <- structure(data.frame(lroot.wz[lroot.order]), names = "lroot") prof.list[[wz.name]]$par.vals <- par.wz[lroot.order, ] if(!all(diff(lroot.wz[lroot.order]) <= sqrt(.Machine$double.eps))) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for ", wz.name) } ## end 'wz in which.zeta' prof.list } ## profile.sclm <- ## using clm.fit.env() ## function(fitted, which.beta = seq_len(nbeta), alpha = 0.001, ## max.steps = 50, nsteps = 8, trace = FALSE, ## step.warn = 5, control = list(), ...) ## ### NOTE: seq_len(nbeta) works for nbeta = 0: numeric(0), while ## ### 1:nbeta gives c(1, 0). ## ## ### This is almost a copy of profile.clm2, which use clm.fit rather ## ### than clm.fit.env. The current implementation is the fastest, but ## ### possibly less readable. ## { ## ## match and test arguments: ## stopifnot(is.numeric(alpha) && length(alpha) == 1 && ## alpha > 0 && alpha < 1) ## stopifnot(round(max.steps) > round(nsteps)) ## stopifnot(round(nsteps) > round(step.warn)) ## stopifnot(round(nsteps) > 0 && round(step.warn) >= 0) ## max.steps <- round(max.steps) ## nsteps <- round(nsteps) ## step.warn <- round(step.warn) ## trace <- as.logical(trace)[1] ## ## possible parameters on which to profile (including aliased coef): ## beta.names <- names(fitted$beta) ## nbeta <- length(fitted$beta) ## if(is.character(which.beta)) ## which.beta <- match(which.beta, beta.names, nomatch = 0) ## ## which.beta is a numeric vector ## if(!all(which.beta %in% seq_len(nbeta))) ## stop("invalid 'parm' argument") ## stopifnot(length(which.beta) > 0) ## std.err <- coef(summary(fitted))[-(1:length(fitted$alpha)), ## "Std. Error"] ## ## profile limit: ## lroot.max <- qnorm(1 - alpha/2) ## ## profile step length: ## delta <- lroot.max / nsteps ## ## results list: ## prof.list <- vector("list", length = length(which.beta)) ## names(prof.list) <- beta.names[which.beta] ## ## get model.frame: ## X <- update(fitted, method = "model.frame")$X ## containing alias cols ## rho <- update(fitted, doFit = FALSE) ## orig <- as.list(rho)[c("B1", "B2", "o1", "o2")] ## rho$n.psi <- rho$n.psi - 1 ## nalpha.clean <- sum(!fitted$aliased$alpha) ## ## which of which.beta are NA: ## alias.wb <- fitted$aliased$beta[which.beta] ## ## For each which.beta move up or down, fit the model and store the ## ## signed likelihood root statistic and parameter values: ## for(wb in which.beta) { ## if(alias.wb[wb]) next ## ignore aliased coef ## rem <- nalpha.clean + (which.beta - cumsum(alias.wb))[wb] ## par.wb <- matrix(coef(fitted), nrow = 1) ## MLE ## wb.name <- beta.names[wb] ## lroot.wb <- 0 ## lroot at MLE ## ## set variables in fitting environment: ## rho$B1 <- orig$B1[, -rem, drop=FALSE] ## rho$B2 <- orig$B2[, -rem, drop=FALSE] ## for(direction in c(-1, 1)) { ## move down or up ## if(trace) { ## message("\nParameter: ", wb.name, ## c(" down", " up")[(direction + 1)/2 + 1]) ## utils::flush.console() ## } ## ## reset starting values: ## rho$par <- coef(fitted, na.rm = TRUE)[-rem] ## ## rho$par <- orig.par[-wb.name] ## for(step in seq_len(max.steps)) { ## ## increment beta.i, offset and refit model without wb parameter: ## beta.i <- fitted$beta[wb] + ## direction * step * delta * std.err[wb] ## new.off <- X[, 1+wb, drop=TRUE] * beta.i ## rho$o1 <- orig$o1 - new.off ## rho$o2 <- orig$o2 - new.off ## fit <- clm.fit.env(rho, control) ## ## save likelihood root statistic: ## lroot <- -direction * sqrt(2*(fitted$logLik - fit$logLik)) ## ## save lroot and pararameter values: ## lroot.wb <- c(lroot.wb, lroot) ## temp.par <- coef(fitted) ## temp.par[names(fit$par)] <- fit$par ## temp.par[wb.name] <- beta.i ## par.wb <- rbind(par.wb, temp.par) ## ## break for loop if profile is far enough: ## if(abs(lroot) > lroot.max) break ## } ## end 'step in seq_len(max.steps)' ## ## test that lroot.max is reached and enough steps are taken: ## if(abs(lroot) < lroot.max) ## warning("profile may be unreliable for ", wb.name, ## " because lroot.max was not reached for ", ## wb, c(" down", " up")[(direction + 1)/2 + 1]) ## if(step <= step.warn) ## warning("profile may be unreliable for ", wb.name, ## " because only ", step, "\n steps were taken ", ## c("down", "up")[(direction + 1)/2 + 1]) ## } ## end 'direction in c(-1, 1)' ## ## order lroot and par. values and collect in a data.frame: ## lroot.order <- order(lroot.wb, decreasing = TRUE) ## prof.list[[wb.name]] <- ## structure(data.frame(lroot.wb[lroot.order]), names = "lroot") ## prof.list[[wb.name]]$par.vals <- par.wb[lroot.order, ] ## ## if(!all(diff(par.wb[lroot.order, wb.name]) > 0)) ## warning("likelihood is not monotonically decreasing from maximum,\n", ## " so profile may be unreliable for ", wb.name) ## } ## end 'wb in which.beta' ## val <- structure(prof.list, original.fit = fitted) ## class(val) <- c("profile.clm") ## return(val) ## } format.perc <- function(probs, digits) ### function lifted from stats:::format.perc to avoid using ':::' paste(format(100 * probs, trim = TRUE, scientific = FALSE, digits = digits), "%") confint.clm <- function(object, parm, level = 0.95, type = c("profile", "Wald"), trace = FALSE, ...) ### parm argument is ignored - use confint.profile for finer control. { ## match and test arguments type <- match.arg(type) if(object$link %in% c("Aranda-Ordaz", "log-gamma") && type == "profile") { message(paste("Profile intervals not available for models with flexible", "link function:\n reporting Wald intervals instead")) type <- "Wald" } stopifnot(is.numeric(level) && length(level) == 1 && level > 0 && level < 1) trace <- as.logical(trace)[1] if(!(missing(parm) || is.null(parm))) message("argument 'parm' ignored") ## Wald CI: if(type == "Wald") { a <- (1 - level)/2 a <- c(a, 1 - a) pct <- format.perc(a, 3) fac <- qnorm(a) coefs <- coef(object) ses <- coef(summary(object))[, 2] ci <- array(NA, dim = c(length(coefs), 2L), dimnames = list(names(coefs), pct)) ci[] <- coefs + ses %o% fac return(ci) } ## profile likelhood CI: if(trace) { message("Wait for profiling to be done...") utils::flush.console() } ## get profile: object <- profile(object, alpha = (1 - level)/4, trace = trace, ...) ## get and return CIs: confint(object, level = level, ...) } ## confint.clm <- ## function(object, parm = seq_len(npar), level = 0.95, ## type = c("profile", "Wald"), trace = FALSE, ...) ## ### parm: a 2-list with beta and zeta? ## ### or args which.beta, which.zeta while parm is redundant? ## ## ### make waldci.clm(object, which.alpha, which.beta, which.zeta, level ## ### = 0.95) ?? ## { ## ## match and test arguments ## type <- match.arg(type) ## stopifnot(is.numeric(level) && length(level) == 1 && ## level > 0 && level < 1) ## trace <- as.logical(trace)[1] ## mle <- object$beta ## if(!is.null(zeta <- object$zeta)) { ## names(zeta) <- paste("sca", names(zeta), sep=".") ## mle <- c(mle, zeta) ## } ## npar <- length(mle) ## beta.names <- names(mle) ## if(is.character(parm)) stop("parm should be numeric") ## ## parm <- match(parm, names(c(object$beta, object$zeta))), nomatch = 0) ## if(!all(parm %in% seq_len(npar))) stop("invalid 'parm' argument") ## stopifnot(length(parm) > 0) ## ## Wald CI: ## if(type == "Wald") ## return(waldci.clm(object, parm, level)) ## ## return(confint.default(object = object, parm = beta.names[parm], ## ## level = level)) ## ## profile likelhood CI: ## if(trace) { ## message("Waiting for profiling to be done...") ## utils::flush.console() ## } ## ## get profile: ## ### Edit these calls: ## object <- profile(object, which.beta = beta.names[parm], ## alpha = (1 - level)/4, trace = trace, ...) ## ## get and return CIs: ## confint(object, parm = beta.names[parm], level = level, ...) ## } confint.profile.clm <- function(object, parm = seq_len(nprofiles), level = 0.95, ...) ### parm index elements of object (the list of profiles) ### each par.vals matrix of each profile will have ### sum(!unlist(of$aliased)) columns. { ## match and test arguments: stopifnot(is.numeric(level) && length(level) == 1 && level > 0 && level < 1) of <- attr(object, "original.fit") prof.names <- names(object) nprofiles <- length(prof.names) if(is.character(parm)) ### Allow character here? parm <- match(parm, prof.names, nomatch = 0) if(!all(parm %in% seq_len(nprofiles))) stop("invalid 'parm' argument") stopifnot(length(parm) > 0) ## prepare CI: a <- (1-level)/2 a <- c(a, 1-a) pct <- paste(round(100*a, 1), "%") ci <- array(NA, dim = c(length(parm), 2), dimnames = list(prof.names[parm], pct)) cutoff <- qnorm(a) ## compute CI from spline interpolation of the likelihood profile: for(pr.name in prof.names[parm]) { if(is.null(pro <- object[[ pr.name ]])) next sp <- spline(x = pro[, "par.vals"][, pr.name], y = pro[, 1]) ## OBS ci[pr.name, ] <- approx(sp$y, sp$x, xout = rev(cutoff))$y } ## do not drop(ci) because rownames are lost for single coef cases: return(ci) } plot.profile.clm <- function(x, which.par = seq_len(nprofiles), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, root = FALSE, fig = TRUE, approx = root, n = 1e3, ask = prod(par("mfcol")) < length(which.par) && dev.interactive(), ..., ylim = NULL) { ## match and test arguments: stopifnot(is.numeric(level) && all(level > 0) && all(level < 1)) stopifnot(n == round(n) && n > 0) Log <- as.logical(Log)[1] relative <- as.logical(relative)[1] root <- as.logical(root)[1] fig <- as.logical(fig)[1] approx <- as.logical(approx)[1] of <- attr(x, "original.fit") mle <- of$beta if(!is.null(zeta <- of$zeta)) { names(zeta) <- paste("sca", names(zeta), sep=".") mle <- c(mle, zeta) } prof.names <- names(x) nprofiles <- length(prof.names) if(is.character(which.par)) which.par <- match(which.par, prof.names, nomatch = 0) if(!all(which.par %in% seq_len(nprofiles))) stop("invalid 'which.par' argument") stopifnot(length(which.par) > 0) ML <- of$logLik ## prepare return value: which.names <- prof.names[which.par] spline.list <- vector("list", length(which.par)) names(spline.list) <- which.names if(approx) { std.err <- coef(summary(of))[-(1:length(of$alpha)), 2] names(std.err) <- names(mle) } ## aks before "over writing" the plot? if(ask) { oask <- devAskNewPage(TRUE) on.exit(devAskNewPage(oask)) } ## for each pm make the appropriate plot: for(pr.name in prof.names[which.par]) { ## confidence limits: lim <- sapply(level, function(x) exp(-qchisq(x, df=1)/2) ) if(is.null(pro <- x[[ pr.name ]])) next sp <- spline(x=pro[, "par.vals"][, pr.name], y=pro[, 1], n=n) if(approx) y.approx <- (mle[pr.name] - sp$x) / std.err[pr.name] if(root) { ylab <- "profile trace" lim <- c(-1, 1) %o% sqrt(-2 * log(lim)) sp$y <- -sp$y if(approx) y.approx <- -y.approx } else { ## !root: sp$y <- -sp$y^2/2 if(approx) y.approx <- -y.approx^2/2 if(relative && !Log) { sp$y <- exp(sp$y) if(approx) y.approx <- exp(y.approx) ylab <- "Relative profile likelihood" if(missing(ylim)) ylim <- c(0, 1) } if(relative && Log) { ylab <- "Relative profile log-likelihood" lim <- log(lim) } if(!relative && Log) { sp$y <- sp$y + ML if(approx) y.approx <- y.approx + ML ylab <- "Profile log-likelihood" lim <- ML + log(lim) } if(!relative && !Log) { sp$y <- exp(sp$y + ML) if(approx) y.approx <- exp(y.approx + ML) ylab <- "Profile likelihood" lim <- exp(ML + log(lim)) } } spline.list[[ pr.name ]] <- sp if(fig) { ## do the plotting: plot(sp$x, sp$y, type = "l", ylim = ylim, xlab = pr.name, ylab = ylab, ...) abline(h = lim) if(approx) lines(sp$x, y.approx, lty = 2) if(root) points(mle[pr.name], 0, pch = 3) } } attr(spline.list, "limits") <- lim invisible(spline.list) } profileAlt.clm <- ## using clm.fit() function(fitted, which.beta = seq_len(nbeta), alpha = 0.01, max.steps = 50, nsteps = 8, trace = FALSE, step.warn = 5, control = list(), ...) ### NOTE: seq_len(nbeta) works for nbeta = 0: numeric(0), while ### 1:nbeta gives c(1, 0). ### args: ### alpha - The likelihood is profiled in the 100*(1-alpha)% ### confidence region as determined by the profile likelihood ### max.steps - the maximum number of profile steps in each direction ### nsteps - the approximate no. steps determined by the quadratic ### approximation to the log-likelihood function ### trace - if trace > 0 information of progress is printed ### step.warn - a warning is issued if the profile in each direction ### contains less than step.warn steps (due to lack of precision). { ## match and test arguments: stopifnot(is.numeric(alpha) && length(alpha) == 1 && alpha > 0 && alpha < 1) stopifnot(round(max.steps) > round(nsteps)) stopifnot(round(nsteps) > round(step.warn)) stopifnot(round(nsteps) > 0 && round(step.warn) >= 0) max.steps <- round(max.steps) nsteps <- round(nsteps) step.warn <- round(step.warn) trace <- as.logical(trace)[1] beta.names <- names(fitted$beta) nbeta <- length(fitted$beta) if(is.character(which.beta)) which.beta <- match(which.beta, beta.names, nomatch = 0) if(!all(which.beta %in% seq_len(nbeta))) stop("invalid 'parm' argument") stopifnot(length(which.beta) > 0) ## Extract various things from the original fit: orig.par <- coef(fitted) ## c(alpha, beta) beta0 <- fitted$beta ## regression coef. nalpha <- length(fitted$alpha) ## no. threshold coef. nbeta <- length(beta0) beta.names <- names(beta0) orig.logLik <- fitted$logLik std.err <- coef(summary(fitted))[-(1:nalpha), "Std. Error"] link <- fitted$link threshold <- fitted$threshold ## profile limit: lroot.max <- qnorm(1 - alpha/2) ## profile step length: delta <- lroot.max / nsteps ## results list: prof.list <- vector("list", length = length(which.beta)) names(prof.list) <- beta.names[which.beta] ## get model.frame: ### NOTE: Attempting the following fix for a safer extraction of ### model-design-objects: ## mf <- update(fitted, method = "model.frame") contr <- c(fitted$contrasts, fitted$S.contrasts, fitted$nom.contrasts) mf <- get_clmDesign(fitted$model, fitted$terms.list, contr) y <- mf$y X <- mf$X wts <- mf$wts orig.off <- mf$off ## For each which.beta move up or down, fit the model and store the ## signed likelihood root statistic and parameter values: for(wb in which.beta) { par.wb <- matrix(orig.par, nrow = 1) ## MLE wb.name <- beta.names[wb] lroot.wb <- 0 ## lroot at MLE X.wb <- X[, -(1+wb), drop=FALSE] for(direction in c(-1, 1)) { ## move down or up if(trace) { message("\nParameter: ", wb.name, c(" down", " up")[(direction + 1)/2 + 1]) utils::flush.console() } ## (re)set starting values: start <- orig.par[-(nalpha + wb)] for(step in seq_len(max.steps)) { ## increment offset and refit model without wb parameter: beta.i <- beta0[wb] + direction * step * delta * std.err[wb] new.off <- orig.off + X[, 1+wb, drop=TRUE] * beta.i fit <- clm.fit(y=y, X=X.wb, weights=wts, offset=new.off, control=control, start=start, link=link, threshold=threshold) ## save likelihood root statistic: lroot <- -direction * sqrt(2*(fitted$logLik - fit$logLik)) ## save lroot and pararameter values: lroot.wb <- c(lroot.wb, lroot) temp.par <- orig.par temp.par[names(fit$par)] <- fit$par temp.par[wb.name] <- beta.i par.wb <- rbind(par.wb, temp.par) ## update starting values: start <- fit$par ## break for loop if profile is far enough: if(abs(lroot) > lroot.max) break } ## end 'step in seq_len(max.steps)' ## test that lroot.max is reached and enough steps are taken: if(abs(lroot) < lroot.max) warning("profile may be unreliable for ", wb.name, " because lroot.max was not reached for ", wb, c(" down", " up")[(direction + 1)/2 + 1]) if(step <= step.warn) warning("profile may be unreliable for ", wb.name, " because only ", step, "\n steps were taken ", c("down", "up")[(direction + 1)/2 + 1]) } ## end 'direction in c(-1, 1)' ## order lroot and par. values and collect in a data.frame: lroot.order <- order(lroot.wb, decreasing = TRUE) prof.list[[wb.name]] <- structure(data.frame(lroot.wb[lroot.order]), names = "lroot") prof.list[[wb.name]]$par.vals <- par.wb[lroot.order, ] if(!all(diff(par.wb[lroot.order, wb.name]) > 0)) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for ", wb.name) } ## end 'wb in which.beta' val <- structure(prof.list, original.fit = fitted) class(val) <- c("profile.clm") return(val) } ordinal/R/clm.fitter.R0000644000175100001440000003746014533321514014326 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Functions to fit/estimate CLMs (clm_fit_NR, clm_fit_optim) and ## functions implementing the negative log-likelihood, its gradient ## and hessian (.nll, .grad, .hess). These functions are rarely to be ## called directly from outside the package. clm_fit_NR <- function(rho, control = list()) ### The main work horse: Where the actual fitting of the clm goes on. ### Fitting the clm via modified Newton-Raphson with step halving. ### -------- Assumes the existence of the following functions: ### clm.nll - negative log-likelihood ### clm.grad - gradient of nll wrt. par ### clm.hess - hessian of nll wrt. par ### Trace - for trace information { control <- do.call(clm.control, control) stepFactor <- 1 innerIter <- modif.iter <- abs.iter <- 0L conv <- 2L ## Convergence flag (iteration limit reached) nll <- rho$clm.nll(rho) if(!is.finite(nll)) stop("Non-finite log-likelihood at starting value") ## do.newton <- ## rel.conv <- FALSE ## stephalf <- TRUE ## Newton-Raphson algorithm: for(i in 1:(control$maxIter + 1L)) { gradient <- rho$clm.grad(rho) maxGrad <- max(abs(gradient)) if(control$trace > 0) { Trace(iter=i+innerIter-1, stepFactor, nll, maxGrad, rho$par, first=(i==1)) if(control$trace > 1 && i > 1) { cat("\tgrad: ") cat(paste(formatC(gradient, digits=3, format="e"))) cat("\n\tstep: ") cat(paste(formatC(-step, digits=3, format="e"))) cat("\n\teigen: ") cat(paste(formatC(eigen(hessian, symmetric=TRUE, only.values=TRUE)$values, digits=3, format="e"))) cat("\n") } } abs.conv <- (maxGrad < control$gradTol) if(abs.conv) abs.iter <- abs.iter + 1L hessian <- rho$clm.hess(rho) ## Compute cholesky factor of Hessian: ch = Ut U ch <- try(chol(hessian), silent=TRUE) ### NOTE: solve(hessian, gradient) is not good enough because it will ### compute step for negative-definite Hessians and we don't want ### that. ### OPTION: What if Hessian is closely singular but slightly positive? ### Could we do something better in that case? if(inherits(ch, "try-error")) { if(abs.conv) { ## step.ok not true. conv <- 1L break ## cannot meet relative criterion. } ## If Hessian is non-positive definite: min.ev <- min(eigen(hessian, symmetric=TRUE, only.values=TRUE)$values) inflation.factor <- 1 ## Inflate diagonal of Hessian to make it positive definite: inflate <- abs(min.ev) + inflation.factor hessian <- hessian + diag(inflate, nrow(hessian)) if(control$trace > 0) cat(paste("Hessian is singular at iteration", i-1, "inflating diagonal with", formatC(inflate, digits=5, format="f"), "\n")) ch <- try(chol(hessian), silent=TRUE) if(inherits(ch, "try-error")) stop(gettextf("Cannot compute Newton step at iteration %d", i-1), call.=FALSE) modif.iter <- modif.iter + 1L ## do.newton <- FALSE } else modif.iter <- 0L if(modif.iter >= control$maxModIter) { conv <- 4L break } ## solve U'y = g for y, then ## solve U step = y for step: step <- c(backsolve(ch, backsolve(ch, gradient, transpose=TRUE))) rel.conv <- (max(abs(step)) < control$relTol) ## Test if step is in a descent direction - ## otherwise use step <- grad / max|grad|: ## if(crossprod(gradient, step) < 0) { ## if(control$trace > 0) ## cat("Newton step is not in descent direction; using gradient instead\n") ## step <- c(gradient / max(abs(gradient))) ## } else if(abs.conv && rel.conv) { conv <- 0L ## no need to step back as stephalf was false so the new ## par are just better. break } ## update parameters: rho$par <- rho$par - stepFactor * step nllTry <- rho$clm.nll(rho) lineIter <- 0 stephalf <- (nllTry > nll) ### NOTE: sometimes nllTry > nll just due to noise, so we also check ### reduction in gradient for small diffs: if(stephalf && abs(nll - nllTry) < 1e-10) stephalf <- maxGrad < max(abs(rho$clm.grad(rho))) ## Assess convergence: ## (only attempt to sattisfy rel.conv if abs.conv is true and ## it is possible to take the full newton step) ### OPTION: And if 'step' is not close to 1 or 1/2, but ### small. Otherwise this just indicates that the parameter is ### infinite. ## if(abs.conv && !step.ok) { if(abs.conv && stephalf) { conv <- 1L ## we need to step back to the par for which abs.conv ## was true: rho$par <- rho$par + stepFactor * step rho$clm.nll(rho) break } ## if(abs.conv && rel.conv) { ## conv <- 0L ## rho$par <- rho$par + stepFactor * step ## rho$clm.nll(rho) ## ## no need to step back as stephalf was false so the new ## ## par are just better. ## break ## } if(abs.conv && abs.iter >= 5L) { ## Cannot satisy rel.conv in 5 iterations after satisfying ## abs.conv. Probably some parameters are unbounded. conv <- 1L break } ## Step halving if nll increases: while(stephalf) { stepFactor <- stepFactor/2 rho$par <- rho$par + stepFactor * step nllTry <- rho$clm.nll(rho) lineIter <- lineIter + 1 if(control$trace > 0) { cat("step halving:\n") cat("nll reduction: ", formatC(nll - nllTry, digits=5, format="e"), "\n") Trace(i+innerIter-1, stepFactor, nll, maxGrad, rho$par, first = FALSE) } if(lineIter > control$maxLineIter){ conv <- 3L break } innerIter <- innerIter + 1 stephalf <- (nllTry > nll) if(stephalf && abs(nll - nllTry) < 1e-10) stephalf <- (maxGrad < max(abs(rho$clm.grad(rho)))) } ## end step halving if(conv == 3L) break if(control$trace > 0) cat("nll reduction: ", formatC(nll - nllTry, digits=5, format="e"), "\n") nll <- nllTry ## Double stepFactor if needed: stepFactor <- min(1, 2 * stepFactor) } ## end Newton iterations message <- switch(as.character(conv), "0" = "Absolute and relative convergence criteria were met", "1" = "Absolute convergence criterion was met, but relative criterion was not met", "2" = "iteration limit reached", "3" = "step factor reduced below minimum", "4" = "maximum number of consecutive Newton modifications reached") if(conv <= 1L && control$trace > 0) { cat("\nOptimizer converged! ", message, fill = TRUE) } if(conv > 1 && control$trace > 0) { cat("\nOptimization failed ", message, fill = TRUE) } ## return results: gradient <- c(rho$clm.grad(rho)) res <- list(par = rho$par, gradient = gradient, ##as.vector(gradient), ## Hessian = hessian, Hessian = rho$clm.hess(rho), ## ensure hessian is evaluated ## at optimum logLik = -nll, convergence = conv, ## 0: abs and rel criteria meet ## 1: abs criteria meet, rel criteria not meet ## 2: iteration limit reached ## 3: step factor reduced below minium message = message, maxGradient = max(abs(gradient)), niter = c(outer = i-1, inner = innerIter), fitted = rho$fitted) return(res) } clm_fit_optim <- function(rho, method = c("ucminf", "nlminb", "optim"), control=list()) { method <- match.arg(method) ## optimize the likelihood: optRes <- switch(method, "nlminb" = nlminb(rho$par, function(par) clm.nll(rho, par), function(par) clm.grad_direct(rho, par), control=control), "ucminf" = ucminf(rho$par, function(par) clm.nll(rho, par), function(par) clm.grad_direct(rho, par), control=control), "optim" = optim(rho$par, function(par) clm.nll(rho, par), function(par) clm.grad_direct(rho, par), method="BFGS", control=control) ) ## save results: rho$par <- optRes[[1]] res <- list(par = rho$par, logLik = -clm.nll(rho), gradient = clm.grad(rho), Hessian = clm.hess(rho), fitted = rho$fitted) res$maxGradient = max(abs(res$gradient)) res$optRes <- optRes res$niter <- switch(method, "nlminb" = optRes$evaluations, "ucminf" = c(optRes$info["neval"], 0), "optim" = optRes$counts) res$convergence <- switch(method, "nlminb" = optRes$convergence, "ucminf" = optRes$convergence, "optim" = optRes$convergence) return(res) } clm_fit_flex <- function(rho, control=list()) { lwr <- if(rho$link == "Aranda-Ordaz") c(rep(-Inf, length(rho$par) - 1), 1e-5) else rep(-Inf, length(rho$par)) ## optimize the likelihood: optRes <- nlminb(rho$par, function(par, rho) clm.nll.flex(rho, par), lower=lwr, rho=rho) ## save results: rho$par <- optRes$par res <- list(par = rho$par, lambda = setNames(rho$par[length(rho$par)], "lambda"), logLik = -clm.nll.flex(rho), gradient = numDeriv::grad(func=function(par, rho) clm.nll.flex(rho, par), x = rho$par, rho=rho), Hessian = numDeriv::hessian(func=function(par, rho) clm.nll.flex(rho, par), x = rho$par, rho=rho), fitted = rho$fitted) res$maxGradient = max(abs(res$gradient)) res$optRes <- optRes res$niter <- optRes$evaluations res$convergence <- optRes$convergence return(res) } clm.nll.flex <- function(rho, par) { if(!missing(par)) rho$par <- par with(rho, { if(k > 0) sigma <- Soff * exp(drop(S %*% par[n.psi + 1:k])) ### NOTE: we have to divide by sigma even if k=0 since there may be an ### offset but no predictors in the scale model: eta1 <- (drop(B1 %*% par[1:n.psi]) + o1)/sigma eta2 <- (drop(B2 %*% par[1:n.psi]) + o2)/sigma fitted <- pfun(eta1, par[length(par)]) - pfun(eta2, par[length(par)]) }) if(all(is.finite(rho$fitted)) && all(rho$fitted > 0)) ### NOTE: Need test here because some fitted <= 0 if thresholds are ### not ordered increasingly. -sum(rho$wts * log(rho$fitted)) else Inf } clm.nll <- function(rho, par) { if(!missing(par)) rho$par <- par with(rho, { if(k > 0) sigma <- Soff * exp(drop(S %*% par[n.psi + 1:k])) ### NOTE: we have to divide by sigma even if k=0 since there may be an ### offset but no predictors in the scale model: eta1 <- (drop(B1 %*% par[1:n.psi]) + o1)/sigma eta2 <- (drop(B2 %*% par[1:n.psi]) + o2)/sigma }) ### NOTE: getFitted is not found from within rho, so we have to ### evalueate it outside of rho rho$fitted <- getFittedC(rho$eta1, rho$eta2, rho$link, rho$par[length(rho$par)]) if(all(is.finite(rho$fitted)) && all(rho$fitted > 0)) ### NOTE: Need test here because some fitted <= 0 if thresholds are ### not ordered increasingly. -sum(rho$wts * log(rho$fitted)) else Inf } ## clm.nll <- function(rho) { ## negative log-likelihood ## ### For linear models ## with(rho, { ## eta1 <- drop(B1 %*% par) + o1 ## eta2 <- drop(B2 %*% par) + o2 ## }) ## ### NOTE: getFitted is not found from within rho, so we have to ## ### evalueate it outside of rho ## rho$fitted <- getFittedC(rho$eta1, rho$eta2, rho$link) ## if(all(rho$fitted > 0)) ## ### NOTE: Need test here because some fitted <= 0 if thresholds are ## ### not ordered increasingly. ## ### It is assumed that 'all(is.finite(pr)) == TRUE' ## -sum(rho$wts * log(rho$fitted)) ## else Inf ## } ## clm.grad <- function(rho) { ## gradient of the negative log-likelihood ## ### return: vector of gradients ## ### For linear models ## with(rho, { ## p1 <- dfun(eta1) ## p2 <- dfun(eta2) ## wtpr <- wts/fitted ## dpi.psi <- B1 * p1 - B2 * p2 ## -crossprod(dpi.psi, wtpr) ## ### NOTE: It is assumed that all(fitted > 0) == TRUE and that ## ### all(is.finite(c(p1, p2))) == TRUE ## }) ## } clm.grad <- function(rho) { ### requires that clm.nll has been called prior to ### clm.grad. with(rho, { p1 <- if(!nlambda) dfun(eta1) else dfun(eta1, lambda) p2 <- if(!nlambda) dfun(eta2) else dfun(eta2, lambda) wtpr <- wts/fitted C2 <- B1*p1/sigma - B2*p2/sigma if(k <= 0) return(-crossprod(C2, wtpr)) C3 <- -(eta1 * p1 - eta2 * p2) * S return(-crossprod(cbind(C2, C3), wtpr)) ### NOTE: C2 and C3 are used by clm.hess }) } clm.grad_direct <- function(rho, par) { ### does not require that clm.nll has been called prior to ### clm.grad. clm.nll(rho, par) clm.grad(rho) } ## clm.hess <- function(rho) { ## hessian of the negative log-likelihood ## ### return Hessian matrix ## ### For linear models ## with(rho, { ## dg.psi <- crossprod(B1 * gfun(eta1) * wtpr, B1) - ## crossprod(B2 * gfun(eta2) * wtpr, B2) ## -dg.psi + crossprod(dpi.psi, (dpi.psi * wtpr / fitted)) ## ### NOTE: It is assumed that all(fitted > 0) == TRUE and that ## ### all(is.finite(c(g1, g2))) == TRUE ## }) ## } clm.hess <- function(rho) { ### requires that clm.grad has been called prior to this. with(rho, { g1 <- if(!nlambda) gfun(eta1) else gfun(eta1, lambda) g2 <- if(!nlambda) gfun(eta2) else gfun(eta2, lambda) wtprpr <- wtpr/fitted ## Phi3 dg.psi <- crossprod(B1 * g1 * wtpr / sigma^2, B1) - crossprod(B2 * g2 * wtpr / sigma^2, B2) ## upper left: D <- dg.psi - crossprod(C2, (C2 * wtprpr)) if(k <= 0) return(-D) ## no scale predictors ## upper right (lower left transpose): wtprsig <- wtpr/sigma epg1 <- p1 + g1*eta1 epg2 <- p2 + g2*eta2 Et <- crossprod(B1, -wtprsig * epg1 * S) - crossprod(B2, -wtprsig * epg2 * S) - crossprod(C2, wtprpr * C3) ## lower right: F <- -crossprod(S, wtpr * ((eta1*p1 - eta2*p2)^2 / fitted - (eta1*epg1 - eta2*epg2)) * S) ## combine and return hessian: H <- rbind(cbind(D , Et), cbind(t(Et), F)) return(-H) }) } ordinal/R/utils.R0000644000175100001440000004475514533321514013424 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Various utility functions. setLinks <- function(rho, link) { ### The Aranda-Ordaz and log-gamma links are not supported in this ### version of clm. rho$pfun <- switch(link, logit = plogis, probit = pnorm, cloglog = function(x, lower.tail=TRUE) pgumbel(x, lower.tail=lower.tail, max=FALSE), cauchit = pcauchy, loglog = pgumbel, "Aranda-Ordaz" = function(x, lambda) pAO(x, lambda), "log-gamma" = function(x, lambda) plgamma(x, lambda)) rho$dfun <- switch(link, logit = dlogis, probit = dnorm, cloglog = function(x) dgumbel(x, max=FALSE), cauchit = dcauchy, loglog = dgumbel, "Aranda-Ordaz" = function(x, lambda) dAO(x, lambda), "log-gamma" = function(x, lambda) dlgamma(x, lambda)) rho$gfun <- switch(link, logit = glogis, probit = gnorm, cloglog = function(x) ggumbel(x, max=FALSE), loglog = ggumbel, cauchit = gcauchy, "Aranda-Ordaz" = function(x, lambda) gAO(x, lambda), ## shouldn't happen "log-gamma" = function(x, lambda) glgamma(x, lambda) ) rho$link <- link rho$nlambda <- if(rho$link %in% c("Aranda-Ordaz", "log-gamma")) 1 else 0 if(rho$link == "Aranda-Ordaz") rho$lambda <- 1 if(rho$link == "log-gamma") rho$lambda <- 0.1 } makeThresholds <- function(y.levels, threshold) { ## , tJac) { ### Generate the threshold structure summarized in the transpose of ### the Jacobian matrix, tJac. Also generating nalpha and alpha.names. ### args: ### y - response variable, a factor ### threshold - one of "flexible", "symmetric" or "equidistant" ## stopifnot(is.factor(y)) lev <- y.levels ntheta <- length(lev) - 1 ## if(!is.null(tJac)) { ## stopifnot(nrow(tJac) == ntheta) ## nalpha <- ncol(tJac) ## alpha.names <- colnames(tJac) ## if(is.null(alpha.names) || anyDuplicated(alpha.names)) ## alpha.names <- as.character(1:nalpha) ## dimnames(tJac) <- NULL ## } ## else { ## threshold structure identified by threshold argument: if(threshold == "flexible") { tJac <- diag(ntheta) nalpha <- ntheta alpha.names <- paste(lev[-length(lev)], lev[-1], sep="|") } if(threshold == "symmetric") { if(!ntheta >=2) stop("symmetric thresholds are only meaningful for responses with 3 or more levels", call.=FALSE) if(ntheta %% 2) { ## ntheta is odd nalpha <- (ntheta + 1)/2 ## No. threshold parameters tJac <- t(cbind(diag(-1, nalpha)[nalpha:1, 1:(nalpha-1)], diag(nalpha))) tJac[,1] <- 1 alpha.names <- c("central", paste("spacing.", 1:(nalpha-1), sep="")) } else { ## ntheta is even nalpha <- (ntheta + 2)/2 tJac <- cbind(rep(1:0, each = ntheta / 2), rbind(diag(-1, ntheta / 2)[(ntheta / 2):1,], diag(ntheta / 2))) tJac[,2] <- rep(0:1, each = ntheta / 2) alpha.names <- c("central.1", "central.2") if(nalpha > 2) alpha.names <- c(alpha.names, paste("spacing.", 1:(nalpha-2), sep="")) } } ## Assumes latent mean is zero: if(threshold == "symmetric2") { if(!ntheta >=2) stop("symmetric thresholds are only meaningful for responses with 3 or more levels", call.=FALSE) if(ntheta %% 2) { ## ntheta is odd nalpha <- (ntheta - 1)/2 ## No. threshold parameters tJac <- rbind(apply(-diag(nalpha), 1, rev), rep(0, nalpha), diag(nalpha)) } else { ## ntheta is even nalpha <- ntheta/2 tJac <- rbind(apply(-diag(nalpha), 1, rev), diag(nalpha)) } alpha.names <- paste("spacing.", 1:nalpha, sep="") } if(threshold == "equidistant") { if(!ntheta >=2) stop("equidistant thresholds are only meaningful for responses with 3 or more levels", call.=FALSE) tJac <- cbind(1, 0:(ntheta-1)) nalpha <- 2 alpha.names <- c("threshold.1", "spacing") } ## } return(list(tJac = tJac, nalpha = nalpha, alpha.names = alpha.names)) } getFitted <- function(eta1, eta2, pfun, ...) { ## eta1, eta2: linear predictors ## pfun: cumulative distribution function ## ## Compute fitted values while maintaining high precision in the ## result - if eta1 and eta2 are both large, fitted is the ## difference between two numbers very close to 1, which leads to ## imprecision and potentially errors. ## ## Note that (eta1 > eta2) always holds, hence (eta2 > 0) happens ## relatively rarely. k2 <- eta2 > 0 fitted <- pfun(eta1) - pfun(eta2) fitted[k2] <- pfun(eta2[k2], lower.tail=FALSE) - pfun(eta1[k2], lower.tail=FALSE) fitted } getFittedC <- function(eta1, eta2, link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), lambda=1) ### Same as getFitted only this is implemented in C and handles all ### link functions including the flexible ones. { link <- match.arg(link) .Call("get_fitted", eta1, eta2, link, lambda) } getWeights <- function(mf) { ### mf - model.frame n <- nrow(mf) if(is.null(wts <- model.weights(mf))) wts <- rep(1, n) ## if (any(wts <= 0)) ## stop(gettextf("non-positive weights are not allowed"), ## call.=FALSE) ### NOTE: We do not remove observations where weights == 0, because ### that could be a somewhat surprising behaviour. It would also ### require that the model.frame be evaluated all over again to get ### the right response vector with the right number of levels. if(length(wts) && length(wts) != n) stop(gettextf("number of weights is %d should equal %d (number of observations)", length(wts), n), call.=FALSE) if(any(wts < 0)) stop(gettextf("negative weights are not allowed"), call.=FALSE) ## if(any(wts == 0)) { ## y <- model.response(mf, "any") ## if(any(table(y[wts > 0]) == 0)) ## stop(gettextf("zero positive weights for one or more response categories"), ## call.=FALSE) ## } return(as.double(wts)) } getOffset <- function(mf, terms) { ### mf - model.frame n <- nrow(mf) off <- rep(0, n) if(!is.null(o <- attr(terms, "offset"))) { if(length(o) > 1) stop("only one offset term allowed in each formula", call.=FALSE) varnm <- attr(terms, "variables") ## deparse all variable names - character vector: varnm <- unlist(lapply(as.list(varnm), deparse)[-1]) off <- mf[, varnm[o]] } ## off <- as.vector(mf[, o]) if(length(off) && length(off) != n) stop(gettextf("number of offsets is %d should equal %d (number of observations)", length(off), n), call.=FALSE) return(as.double(off)) } getOffsetStd <- function(mf) { n <- nrow(mf) if(is.null(off <- model.offset(mf))) off <- rep(0, n) if(length(off) && length(off) != n) stop(gettextf("number of offsets is %d should equal %d (number of observations)", length(off), n), call.=FALSE) return(as.double(off)) } getFullForm <- function(form, ..., envir=parent.frame()) { ### collect terms in several formulas in a single formula ### sets the environment of the resulting formula to envir. forms <- list(...) if(lf <- length(forms)) { rhs <- character(0) ## Collect rhs terms in a single vector of rh-sides: for(i in 1:lf) { rhs <- c(rhs, Deparse(forms[[i]][[2]])) if(length(forms[[i]]) >= 3) rhs <- c(rhs, Deparse(forms[[i]][[3]])) } ## add '+' inbetween terms: rhs <- paste(rhs, collapse=" + ") ## combine if 'deparse(form)' is a (long) vector: form2 <- paste(deparse(form, width.cutoff=500L), collapse=" ") ## combine form2 and rhs into a single string: form <- paste(form2, rhs, sep=" + ") } return(as.formula(form, env=envir)) } ## getFullForm <- function(form, ..., envir=parent.frame()) { ## ### collect terms in several formulas in a single formula (on the rhs) ## ### sets the environment of the resulting formula to envir. ## forms <- list(form, ...) ## allVars <- unlist(sapply(forms, all.vars)) ## rhs <- paste(allVars, collapse=" + ") ## form <- paste("~", rhs) ## return(as.formula(form, env=envir)) ## } ## getCtrlArgs <- function(control, extras) { ## ### Recover control arguments from clmm.control and extras (...): ## ### ## ## Collect control arguments in list: ## ctrl.args <- c(extras, control$method, control$useMatrix, ## control$ctrl, control$optCtrl) ## ## Identify the two occurences "trace", delete them, and add trace=1 ## ## or trace=-1 to the list of arguments: ## which.trace <- which(names(ctrl.args) == "trace") ## trace.sum <- sum(unlist(ctrl.args[which.trace])) ## ctrl.args <- ctrl.args[-which.trace] ## ## remove duplicated arguments: ## ctrl.args <- ctrl.args[!duplicated(names(ctrl.args))] ## if(trace.sum >= 1) ctrl.args$trace <- 1 ## if(trace.sum >= 2 || trace.sum <= -1) ctrl.args$trace <- -1 ## ## return the updated list of control parameters: ## do.call("clmm.control", ctrl.args) ## } getCtrlArgs <- function(control, extras) { ### Recover control arguments from clmm.control and extras (...): ### if(!is.list(control)) stop("'control' should be a list") ## Collect control arguments in list: ## 1) assuming 'control' is a call to clmm.control: ctrl.args <- if(setequal(names(control), names(clmm.control()))) c(extras, control["method"], control["useMatrix"], control$ctrl, control$optCtrl) ## assuming 'control' is specified with control=list( 'args'): else c(extras, control) ### NOTE: having c(extras, control) rather than c(control, extras) ### means that extras have precedence over control. ## Identify the two occurences "trace", delete them, and add trace=1 ## or trace=-1 to the list of arguments: which.trace <- which(names(ctrl.args) == "trace") trace.sum <- sum(unlist(ctrl.args[which.trace])) if(trace.sum) ctrl.args <- ctrl.args[-which.trace] ## remove duplicated arguments: ctrl.args <- ctrl.args[!duplicated(names(ctrl.args))] if(trace.sum >= 1) ctrl.args$trace <- 1 if(trace.sum >= 2 || trace.sum <= -1) ctrl.args$trace <- -1 ## return the updated list of control parameters: do.call("clmm.control", ctrl.args) } Trace <- function(iter, stepFactor, val, maxGrad, par, first=FALSE) { t1 <- sprintf(" %3d: %-5e: %.3f: %1.3e: ", iter, stepFactor, val, maxGrad) t2 <- formatC(par) if(first) cat("iter: step factor: Value: max|grad|: Parameters:\n") cat(t1, t2, "\n") } response.name <- function(terms) { vars <- as.character(attr(terms, "variables")) vars[1 + attr(terms, "response")] } getB <- function(y, NOM=NULL, X=NULL, offset=NULL, tJac=NULL) { ### NOTE: Is this function ever used? ### NOTE: no tests that arguments conform. nlev <- nlevels(y) n <- length(y) B2 <- 1 * (col(matrix(0, n, nlev)) == c(unclass(y))) o1 <- c(1e5 * B2[, nlev]) - offset o2 <- c(-1e5 * B2[,1]) - offset B1 <- B2[, -(nlev), drop = FALSE] B2 <- B2[, -1, drop = FALSE] ## adjust B1 and B2 for structured thresholds: if(!is.null(tJac)) { B1 <- B1 %*% tJac B2 <- B2 %*% tJac } ## update B1 and B2 with nominal effects: if(!is.null(NOM) && ncol(NOM) > 1) { ## if !is.null(NOM) and NOM is more than an intercept: LL1 <- lapply(1:ncol(NOM), function(x) B1 * NOM[,x]) B1 <- do.call(cbind, LL1) LL2 <- lapply(1:ncol(NOM), function(x) B2 * NOM[,x]) B2 <- do.call(cbind, LL2) } ## update B1 and B2 with location effects (X): nbeta <- ncol(X) - 1 if(ncol(X) > 1) { B1 <- cbind(B1, -X[, -1, drop = FALSE]) B2 <- cbind(B2, -X[, -1, drop = FALSE]) } dimnames(B1) <- NULL dimnames(B2) <- NULL namedList(B1, B2, o1, o2) } Deparse <- function(expr, width.cutoff = 500L, backtick = mode(expr) %in% c("call", "expression", "(", "function"), control = c("keepInteger", "showAttributes", "keepNA"), nlines = -1L) paste(deparse(expr=expr, width.cutoff= width.cutoff, backtick=backtick, control=control, nlines=nlines), collapse = " ") getContrasts <- function(terms, contrasts) { if(is.null(contrasts)) return(NULL) term.labels <- attr(terms, "term.labels") contrasts[names(contrasts) %in% term.labels] } checkContrasts <- function(terms, contrasts) { ### Check that contrasts are not specified for absent factors and warn ### about them term.labels <- attr(terms, "term.labels") nm.contr <- names(contrasts) notkeep <- nm.contr[!nm.contr %in% term.labels] msg <- if(length(notkeep) > 2) "variables '%s' are absent: their contrasts will be ignored" else "variable '%s' is absent: its contrasts will be ignored" if(length(notkeep)) warning(gettextf(msg, paste(notkeep, collapse=", ")), call.=FALSE) invisible() } get_clmInfoTab <- function(object, ...) { names <- c("link", "threshold", "nobs", "logLik", "edf", "niter", "maxGradient", "cond.H") stopifnot(all(names %in% names(object))) info <- with(object, { data.frame("link" = link, "threshold" = threshold, "nobs" = nobs, "logLik" = formatC(logLik, digits=2, format="f"), "AIC" = formatC(-2*logLik + 2*edf, digits=2, format="f"), "niter" = paste(niter[1], "(", niter[2], ")", sep=""), ### NOTE: iterations to get starting values for scale models *are* ### included here. "max.grad" = formatC(maxGradient, digits=2, format="e"), "cond.H" = formatC(cond.H, digits=1, format="e") ## BIC is not part of output since it is not clear what ## the no. observations are. ) }) info } format_tJac <- function(tJac, y.levels, alpha.names) { lev <- y.levels rownames(tJac) <- paste(lev[-length(lev)], lev[-1], sep="|") colnames(tJac) <- alpha.names tJac } extractFromFrames <- function(frames, fullmf) { lst <- list(y.levels=frames$y.levels, na.action=attr(fullmf, "na.action"), tJac=format_tJac(frames)) lstX <- list(contrasts=attr(frames$X, "contrasts"), terms=frames$terms, xlevels=.getXlevels(frames$terms, fullmf)) lst <- c(lst, lstX) if(!is.null(frames[["S"]])) lst <- c(lst, list(S.contrasts=attr(frames$S, "contrasts"), S.terms=frames$S.terms, S.xlevels=.getXlevels(frames$S.terms, fullmf))) if(!is.null(frames[["NOM"]])) lst <- c(lst, list(nom.contrasts=attr(frames$NOM, "contrasts"), nom.terms=frames$nom.terms, nom.xlevels=.getXlevels(frames$nom.terms, fullmf))) lst } formatTheta <- function(alpha, tJac, x, sign.nominal) { ## x: alpha, tJac, nom.terms, NOM, nom.contrasts, nom.xlevels, Theta.ok <- TRUE if(is.null(x[["NOM"]])) { ## no nominal effects Theta <- alpha %*% t(tJac) colnames(Theta) <- rownames(tJac) return(namedList(Theta, Theta.ok)) } x$nom.assign <- attr(x$NOM, "assign") args <- c("nom.terms", "nom.assign") args <- c("nom.terms") if(any(sapply(args, function(txt) is.null(x[[txt]])))) { ## Nominal effects, but we cannot compute Theta warning("Cannot assess if all thresholds are increasing", call.=FALSE) return(namedList(Theta.ok)) } ## Get matrix of thresholds; Theta: Theta.list <- getThetamat(terms=x$nom.terms, alpha=alpha, assign=attr(x$NOM, "assign"), contrasts=x$nom.contrasts, tJac=tJac, xlevels=x$nom.xlevels, sign.nominal=sign.nominal) ## Test that (finite) thresholds are increasing: if(all(is.finite(unlist(Theta.list$Theta)))) { th.increasing <- apply(Theta.list$Theta, 1, function(th) all(diff(th) >= 0)) if(!all(th.increasing)) Theta.ok <- FALSE } Theta <- if(length(Theta.list) == 2) with(Theta.list, cbind(mf.basic, Theta)) else Theta.list$Theta alpha.mat <- matrix(alpha, ncol=ncol(tJac), byrow=TRUE) colnames(alpha.mat) <- colnames(tJac) rownames(alpha.mat) <- attr(x$NOM, "orig.colnames") ## Return namedList(Theta, alpha.mat, Theta.ok) } ## We don't need this function anymore since the terms objects now ## always contain dataClasses and predvars attributes. ## get_dataClasses <- function(mf) { ## if(!is.null(Terms <- attr(mf, "terms")) && ## !is.null(dataCl <- attr(Terms, "dataClasses"))) ## return(dataCl) ## sapply(mf, .MFclass) ## } ## Returns a named list, where the names are the deparsed actual ## arguments: namedList <- function(...) { setNames(list(...), nm=sapply(as.list(match.call()), deparse)[-1]) } ## a <- 1 ## b <- 2 ## c <- 3 ## d <- list(e=2, f=factor(letters[rep(1:2, 2)])) ## g <- matrix(runif(9), 3) ## ## namedList(a, b, c) ## namedList(a, b, c, d, g) ## ## res <- namedList(d, g) ## names(res) ordinal/R/clm.predict.R0000644000175100001440000003402514533321514014455 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## The predict method for clm objects. predict.clm <- function(object, newdata, se.fit = FALSE, interval = FALSE, level = 0.95, type = c("prob", "class", "cum.prob", "linear.predictor"), na.action = na.pass, ...) ### result - a list of predictions (fit) ### OPTION: restore names of the fitted values ### ### Assumes object has terms, xlevels, contrasts, tJac { ## match and test arguments: type <- match.arg(type) se.fit <- as.logical(se.fit)[1] interval <- as.logical(interval)[1] stopifnot(length(level) == 1 && is.numeric(level) && level < 1 && level > 0) if(type == "class" && (se.fit || interval)) { warning("se.fit and interval set to FALSE for type = 'class'") se.fit <- interval <- FALSE } cov <- if(se.fit || interval) vcov(object) else NULL ### Get newdata object; fill in response if missing and always for ### type=="class": has.response <- TRUE if(type == "class" && missing(newdata)) ## newdata <- update(object, method="model.frame")$mf newdata <- model.frame(object) ## newdata supplied or type=="class": has.newdata <- !(missing(newdata) || is.null(newdata)) if(has.newdata || type=="class") { if(has.newdata && sum(unlist(object$aliased)) > 0) warning("predictions from column rank-deficient fit may be misleading") newdata <- as.data.frame(newdata) ## Test if response is in newdata: resp <- response.name(object$terms) ## remove response from newdata if type == "class" if(type == "class") newdata <- newdata[!names(newdata) %in% resp] has.response <- resp %in% names(newdata) ## FALSE for type == "class" if(!has.response) { ## fill in response variable in newdata if missing: ylev <- object$y.levels nlev <- length(ylev) nnd <- nrow(newdata) newdata <- cbind(newdata[rep(1:nnd, each=nlev) , , drop=FALSE], factor(rep(ylev, nnd), levels=ylev, ordered=TRUE)) names(newdata)[ncol(newdata)] <- resp } ### Set model matrices: if(is.null(attr(object$terms, "predvars"))) warning(paste0("terms object does not have a predvars attribute: ", "predictions may be misleading")) mf <- model.frame(object$terms, newdata, na.action=na.action, xlev=object$xlevels) ## model.frame will warn, but here we also throw an error: if(nrow(mf) != nrow(newdata)) stop("length of variable(s) found do not match nrow(newdata)") ## check that variables are of the right type: if (!is.null(cl <- attr(object$terms, "dataClasses"))) .checkMFClasses(cl, mf) ## make model.matrix: X <- model.matrix(object$terms, mf, contrasts = object$contrasts) Xint <- match("(Intercept)", colnames(X), nomatch = 0L) n <- nrow(X) if(Xint <= 0) X <- cbind("(Intercept)" = rep(1, n), X) # if(object$control$sign.location == "negative") NOM[, -1] <- -NOM[, -1] ## drop aliased columns: if(sum(object$aliased$beta) > 0) X <- X[, !c(FALSE, object$aliased$beta), drop=FALSE] ## handle offset (from predict.lm): ### NOTE: Could factor the offset handling out in its own function for ### code clarity: offset <- rep(0, nrow(X)) if(!is.null(off.num <- attr(object$terms, "offset"))) for(i in off.num) offset <- offset + eval(attr(object$terms, "variables")[[i + 1]], newdata) y <- model.response(mf) if(any(!levels(y) %in% object$y.levels)) stop(gettextf("response factor '%s' has new levels", response.name(object$terms))) ### make NOMINAL model.matrix: if(is.nom <- !is.null(object$nom.terms)) { ## allows NAs to pass through to fit, se.fit, lwr and upr: nom.mf <- model.frame(object$nom.terms, newdata, na.action=na.action, xlev=object$nom.xlevels) ## model.frame will warn, but here we also throw an error: if(nrow(nom.mf) != nrow(newdata)) stop("length of variable(s) found do not match nrow(newdata)") if (!is.null(cl <- attr(object$nom.terms, "dataClasses"))) .checkMFClasses(cl, nom.mf) NOM <- model.matrix(object$nom.terms, nom.mf, contrasts=object$nom.contrasts) NOMint <- match("(Intercept)", colnames(NOM), nomatch = 0L) if(NOMint <= 0) NOM <- cbind("(Intercept)" = rep(1, n), NOM) # if(object$control$sign.nominal == "negative") NOM[, -1] <- -NOM[, -1] alias <- t(matrix(object$aliased$alpha, nrow=length(object$y.levels) - 1))[,1] if(sum(alias) > 0) NOM <- NOM[, !c(FALSE, alias), drop=FALSE] } ### make SCALE model.matrix: if(is.scale <- !is.null(object$S.terms)) { ## allows NAs to pass through to fit, se.fit, lwr and upr: S.mf <- model.frame(object$S.terms, newdata, na.action=na.action, xlev=object$S.xlevels) ## model.frame will warn, but here we also throw an error: if(nrow(S.mf) != nrow(newdata)) stop("length of variable(s) found do not match nrow(newdata)") if (!is.null(cl <- attr(object$S.terms, "dataClasses"))) .checkMFClasses(cl, S.mf) S <- model.matrix(object$S.terms, S.mf, contrasts=object$S.contrasts) Sint <- match("(Intercept)", colnames(S), nomatch = 0L) if(Sint <= 0) S <- cbind("(Intercept)" = rep(1, n), S) if(sum(object$aliased$zeta) > 0) S <- S[, !c(FALSE, object$aliased$zeta), drop=FALSE] Soff <- rep(0, nrow(S)) if(!is.null(off.num <- attr(object$S.terms, "offset"))) for(i in off.num) Soff <- Soff + eval(attr(object$S.terms, "variables")[[i + 1]], newdata) } ### Construct model environment: tJac <- object$tJac dimnames(tJac) <- NULL env <- clm.newRho(parent.frame(), y=y, X=X, NOM=if(is.nom) NOM else NULL, S=if(is.scale) S else NULL, weights=rep(1, n), offset=offset, S.offset=if(is.scale) Soff else rep(0, n), tJac=tJac, control=object$control) setLinks(env, link=object$link) } ## end !missing(newdata) or type == "class" else { env <- get_clmRho.clm(object) ## env <- update(object, doFit=FALSE) } env$par <- as.vector(coef(object)) env$par <- env$par[!is.na(env$par)] ### OPTION: Are there better ways to handle NAs in coef? ## if(length(env$par) != ncol(env$B1)) ## stop(gettextf("design matrix has %d columns, but expecting %d (number of parameters)", ## ncol(env$B1), length(env$par))) ## Get predictions: pred <- switch(type, "prob" = prob.predict.clm(env=env, cov=cov, se.fit=se.fit, interval=interval, level=level), "class" = prob.predict.clm(env=env, cov=cov, se.fit=se.fit, interval=interval, level=level), "cum.prob" = cum.prob.predict.clm(env=env, cov=cov, se.fit=se.fit, interval=interval, level=level), "linear.predictor" = lin.pred.predict.clm(env=env, cov=cov, se.fit=se.fit, interval=interval, level=level) ##, ## "eta" = eta.pred.predict.clm(env=env, cov=cov, ## se.fit=se.fit, interval=interval, level=level) ) ### Arrange predictions in matrices if response is missing from ### newdata arg or type=="class": if(!has.response || type == "class") { pred <- lapply(pred, function(x) { x <- matrix(unlist(x), ncol=nlev, byrow=TRUE) dimnames(x) <- list(1:nrow(x), ylev) x }) ## if(type == "eta") ## pred <- lapply(pred, function(x) { ## x <- x[, -nlev, drop=FALSE] ## colnames(x) <- names(object$alpha) ## }) if(type == "class") pred <- lapply(pred, function(x) { factor(max.col(x), levels=seq_along(ylev), labels=ylev) }) } ### Filter missing values (if relevant): if(missing(newdata) && !is.null(object$na.action)) pred <- lapply(pred, function(x) napredict(object$na.action, x)) return(pred) } prob.predict.clm <- function(env, cov, se.fit=FALSE, interval=FALSE, level=0.95) ### Works for linear and scale models: ### env - model environment with par set. ### cov - vcov for the parameters { ## evaluate nll and grad to set dpi.psi in env: clm.nll(env) pred <- list(fit = as.vector(env$fitted)) if(se.fit || interval) { se.pr <- get.se(env, cov, type="prob") if(se.fit) pred$se.fit <- se.pr if(interval) { pred.logit <- qlogis(pred$fit) ## se.logit <- dlogis(pred$fit) * se.pr se.logit <- se.pr / (pred$fit * (1 - pred$fit)) a <- (1 - level)/2 pred$lwr <- plogis(pred.logit + qnorm(a) * se.logit) pred$upr <- plogis(pred.logit - qnorm(a) * se.logit) } } return(pred) } eta.pred.predict.clm <- function(env, cov, se.fit=FALSE, interval=FALSE, level=0.95) { ## clm.nll(env) pred <- list(eta = c(with(env, B1 %*% par[1:n.psi]))) if(se.fit || interval) { se <- get.se(env, cov, type="lp") if(se.fit) { pred$se.eta <- se[[1]] } if(interval) { a <- (1 - level)/2 pred$lwr1 <- env$eta1 + qnorm(a) * se[[1]] pred$upr1 <- env$eta1 - qnorm(a) * se[[1]] } } pred } lin.pred.predict.clm <- function(env, cov, se.fit=FALSE, interval=FALSE, level=0.95) ### get predictions on the scale of the linear predictor { ## evaluate nll and grad to set dpi.psi in env: clm.nll(env) pred <- list(eta1=env$eta1, eta2=env$eta2) if(se.fit || interval) { se <- get.se(env, cov, type="lp") if(se.fit) { pred$se.eta1 <- se[[1]] pred$se.eta2 <- se[[2]] } if(interval) { a <- (1 - level)/2 pred$lwr1 <- env$eta1 + qnorm(a) * se[[1]] pred$lwr2 <- env$eta2 + qnorm(a) * se[[2]] pred$upr1 <- env$eta1 - qnorm(a) * se[[1]] pred$upr2 <- env$eta2 - qnorm(a) * se[[2]] } } return(pred) ## list with predictions. } cum.prob.predict.clm <- function(env, cov, se.fit=FALSE, interval=FALSE, level=0.95) { ## evaluate nll and grad to set dpi.psi in env: clm.nll(env) pred <- list(cprob1=env$pfun(env$eta1), cprob2=env$pfun(env$eta2)) if(se.fit || interval) { se <- get.se(env, cov, type="gamma") if(se.fit) { pred$se.cprob1 <- se[[1]] pred$se.cprob2 <- se[[2]] } if(interval) { a <- (1 - level)/2 pred$lwr1 <- pred$cprob1 + qnorm(a) * se[[1]] pred$lwr2 <- pred$cprob2 + qnorm(a) * se[[2]] pred$upr1 <- pred$cprob1 - qnorm(a) * se[[1]] pred$upr2 <- pred$cprob2 - qnorm(a) * se[[2]] } } return(pred) } get.se <- function(rho, cov, type=c("lp", "gamma", "prob")) { ### Computes standard errors of predicted probabilities (prob), ### cumulative probabilities (gamma) or values of the linear ### predictor (lp) for linear (k<=0) or location-scale models ### (k>0). rho$xcovtx <- function(x, chol.cov) { ## Compute 'diag(x %*% cov %*% t(x))' diag(x %*% crossprod(chol.cov) %*% t(x)) ## colSums(tcrossprod(chol.cov, x)^2) } rho$type <- match.arg(type) ind <- seq_len(rho$n.psi + rho$k) rho$chol.cov <- try(chol(cov[ind, ind]), silent=TRUE) if(inherits(rho$chol.cov, "try-error")) stop(gettext("VarCov matrix of model parameters is not positive definite:\n cannot compute standard errors of predictions"), call.=FALSE) clm.nll(rho) ## just to be safe with(rho, { ### First compute d[eta, gamma, prob] / d par; then compute variance ### covariance matrix of the observations and extract SEs as the ### square root of the diagonal elements: if(type %in% c("lp", "gamma")) { D1 <- B1 D2 <- B2 if(k > 0) { D1 <- cbind(D1/sigma, -S*eta1) D2 <- cbind(D2/sigma, -S*eta2) } if(type == "gamma") { p1 <- if(!nlambda) dfun(eta1) else dfun(eta1, lambda) p2 <- if(!nlambda) dfun(eta2) else dfun(eta2, lambda) D1 <- D1*p1 D2 <- D2*p2 } se <- list(se1=sqrt(xcovtx(D1, chol.cov)), se2=sqrt(xcovtx(D2, chol.cov))) } if(type == "prob") { p1 <- if(!nlambda) dfun(eta1) else dfun(eta1, lambda) p2 <- if(!nlambda) dfun(eta2) else dfun(eta2, lambda) C2 <- if(k <= 0) B1*p1 - B2*p2 else cbind(B1*p1/sigma - B2*p2/sigma, -(eta1 * p1 - eta2 * p2) * S) se <- sqrt(xcovtx(C2, chol.cov)) } }) rho$se } ordinal/R/clm2.R0000644000175100001440000015523214533321514013112 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## An alternate (and older) implementation of CLMs in clm2(). The new ## and recommended implementation is available in clm(), cf. ./R/clm.R clm2.control <- function(method = c("ucminf", "Newton", "nlminb", "optim", "model.frame"), ..., convTol = 1e-4, trace = 0, maxIter = 100, gradTol = 1e-5, maxLineIter = 10) { method <- match.arg(method) ctrl <- if(method == "Newton") list(convTol=convTol, trace=trace, maxIter=maxIter, gradTol=gradTol, maxLineIter=maxLineIter) else list(trace = abs(trace), ...) if(!all(is.numeric(c(maxIter, gradTol, maxLineIter, convTol)))) stop("maxIter, gradTol, maxLineIter, convTol should all be numeric") if(convTol <= 0) stop("convTol should be > 0") if(method == "ucminf" && !"grtol" %in% names(ctrl)) ctrl$grtol <- gradTol ## if(method == "ucminf" && convTol > ctrl$grtol) ## stop("convTol should be <= grtol/gradTol") ## if(method == "Newton" && convTol > gradTol) ## stop("convTol should be <= gradTol") list(method = method, convTol = convTol, ctrl = ctrl) } newRho <- function(parent, XX, X, Z, y, weights, Loffset, Soffset, ## OK link, lambda, theta, threshold, Hess, control) ### OPTION: Could we remove the theta argument? { rho <- new.env(parent = parent) rho$X <- X rho$dnX <- dimnames(X) dimnames(rho$X) <- NULL rho$Z <- Z rho$dnZ <- dimnames(Z) dimnames(rho$Z) <- NULL rho$weights <- weights rho$Loffset <- Loffset rho$expSoffset <- rho$sigma <- exp(Soffset) rho$Hess <- ifelse(Hess, 1L, 0L) rho$method <- control$method rho$convTol <- control$convTol rho$ctrl <- control$ctrl rho$pfun <- switch(link, logistic = plogis, probit = pnorm, cloglog = function(x) pgumbel(x, max=FALSE), cauchit = pcauchy, loglog = pgumbel, "Aranda-Ordaz" = function(x, lambda) pAO(x, lambda), "log-gamma" = function(x, lambda) plgamma(x, lambda)) rho$dfun <- switch(link, logistic = dlogis, probit = dnorm, cloglog = function(x) dgumbel(x, max=FALSE), cauchit = dcauchy, loglog = dgumbel, "Aranda-Ordaz" = function(x, lambda) dAO(x, lambda), "log-gamma" = function(x, lambda) dlgamma(x, lambda)) rho$gfun <- switch(link, logistic = glogis, probit = function(x) -x * dnorm(x), cloglog = function(x) ggumbel(x, max=FALSE), cloglog = ggumbel, cauchit = gcauchy, "Aranda-Ordaz" = function(x, lambda) gAO(x, lambda), ## shouldn't happen "log-gamma" = function(x, lambda) glgamma(x, lambda) ) rho$link <- link rho$linkInt <- switch(link, logistic = 1L, probit = 2L, cloglog = 3L, loglog = 4L, cauchit = 5L, "Aranda-Ordaz" = 6L, "log-gamma" = 7L) rho$estimLambda <- ifelse(link %in% c("Aranda-Ordaz", "log-gamma") && is.null(lambda), 1L, 0L) rho$nlambda <- 0L rho$lambda <- if(!is.null(lambda)) lambda else 1 if(link %in% c("Aranda-Ordaz", "log-gamma")) rho$nlambda <- 1L if(rho$estimLambda > 0 & rho$link == "Aranda-Ordaz" & rho$method != "nlminb"){ message("Changing to nlminb optimizer to accommodate optimization with bounds") m <- match( names(rho$ctrl), "grtol", 0) rho$ctrl <- rho$ctrl[!m] rho$method <- "nlminb" } if(rho$method == "nlminb") { rho$limitUp <- Inf rho$limitLow <- -Inf } rho$n <- n <- length(y) rho$p <- ifelse(missing(X), 0, ncol(X)) rho$k <- ifelse(missing(Z), 0, ncol(Z)) rho$y <- y rho$threshold <- threshold rho$ncolXX <- ncol(XX) rho$dnXX <- dimnames(XX) rho$lev <- levels(y) rho$ntheta <- nlevels(y) - 1 rho$B2 <- 1 * (col(matrix(0, n, rho$ntheta + 1)) == c(unclass(y))) ### Setting elements of o[12] to [+-]Inf cause problems in ### getGnll and clmm-related functions because 1) 0*Inf = NaN, while ### 0*large.value = 0, so several computations have to be handled ### specially and 2) Inf-values are not by default allowed in .C calls ### and all specials would have to be handled separately. ## o1 <- B2[, rho$ntheta + 1, drop = TRUE] ## o1[o1 == 1] <- Inf ## rho$o1 <- o1 - rho$Loffset ## o2 <- B2[,1, drop = TRUE] ## o2[o2 == 1] <- -Inf ## rho$o2 <- o2 - rho$Loffset inf.value <- 1e5 rho$o1 <- c(inf.value * rho$B2[, rho$ntheta + 1]) - rho$Loffset rho$o2 <- c(-inf.value * rho$B2[,1]) - rho$Loffset rho$B1 <- rho$B2[,-(rho$ntheta + 1), drop = FALSE] rho$B2 <- rho$B2[,-1, drop = FALSE] makeThresholds2(rho, threshold) rho$B1 <- rho$B1 %*% rho$tJac rho$B2 <- rho$B2 %*% rho$tJac rho$xiNames <- rho$alphaNames rho$nxi <- rho$nalpha * rho$ncolXX if(rho$ncolXX > 1) { ## test actually not needed rho$xiNames <- paste(rep(rho$alphaNames, rho$ncolXX), ".", rep(colnames(XX), each=rho$nalpha), sep="") LL1 <- lapply(1:rho$ncolXX, function(x) rho$B1 * XX[,x]) rho$B1 <- do.call(cbind, LL1) LL2 <- lapply(1:rho$ncolXX, function(x) rho$B2 * XX[,x]) rho$B2 <- do.call(cbind, LL2) } if(rho$p > 0) { rho$B1 <- cbind(rho$B1, -X) rho$B2 <- cbind(rho$B2, -X) } dimnames(rho$B1) <- NULL dimnames(rho$B2) <- NULL return(rho) } # populates the rho environment setStart <- function(rho) ## Ok { ## set starting values in the rho environment ## try logistic/probit regression on 'middle' cut q1 <- max(1, rho$ntheta %/% 2) y1 <- (c(unclass(rho$y)) > q1) x <- cbind(Intercept = rep(1, rho$n), rho$X) fit <- switch(rho$link, "logistic"= glm.fit(x, y1, rho$weights, family = binomial(), offset = rho$Loffset), "probit" = glm.fit(x, y1, rho$weights, family = binomial("probit"), offset = rho$Loffset), ## this is deliberate, a better starting point "cloglog" = glm.fit(x, y1, rho$weights, family = binomial("probit"), offset = rho$Loffset), "loglog" = glm.fit(x, y1, rho$weights, family = binomial("probit"), offset = rho$Loffset), "cauchit" = glm.fit(x, y1, rho$weights, family = binomial("cauchit"), offset = rho$Loffset), "Aranda-Ordaz" = glm.fit(x, y1, rho$weights, family = binomial("probit"), offset = rho$Loffset), "log-gamma" = glm.fit(x, y1, rho$weights, family = binomial("probit"), offset = rho$Loffset)) if(!fit$converged) stop("attempt to find suitable starting values failed") coefs <- fit$coefficients if(any(is.na(coefs))) { warning("design appears to be rank-deficient, so dropping some coefs") keep <- !is.na(coefs) coefs <- coefs[keep] rho$X <- rho$X[, keep[-1], drop = FALSE] rho$dnX[[2]] <- rho$dnX[[2]][keep[-1]] rho$B1 <- rho$B1[, c(rep(TRUE, rho$nxi), keep[-1]), drop = FALSE] rho$B2 <- rho$B2[, c(rep(TRUE, rho$nxi), keep[-1]), drop = FALSE] rho$p <- ncol(rho$X) } ## Intercepts: spacing <- qlogis((1:rho$ntheta)/(rho$ntheta+1)) # just a guess if(rho$link != "logit") spacing <- spacing/1.7 ## if(rho$threshold == "flexible") # default alphas <- -coefs[1] + spacing - spacing[q1] if(rho$threshold == "symmetric" && rho$ntheta %% 2) ## ntheta odd alphas <- c(alphas[q1+1],cumsum(rep(spacing[q1+2], rho$nalpha-1))) if(rho$threshold == "symmetric" && !rho$ntheta %% 2) ## ntheta even alphas <- c(alphas[q1:(q1+1)], cumsum(rep(spacing[q1+1], rho$nalpha-2))) if(rho$threshold == "symmetric2" && rho$ntheta %% 2) ## ntheta odd alphas <- cumsum(rep(spacing[q1+2], rho$nalpha-1)) if(rho$threshold == "symmetric2" && !rho$ntheta %% 2) ## ntheta even alphas <- cumsum(rep(spacing[q1+1], rho$nalpha-2)) if(rho$threshold == "equidistant") alphas <- c(alphas[1], mean(diff(spacing))) ## initialize nominal effects to zero: if(rho$ncolXX > 1) { xi <- c(alphas, rep(rep(0, rho$nalpha), rho$ncolXX-1)) stopifnot(length(xi) == rho$nalpha * rho$ncolXX)} else xi <- alphas if(rho$estimLambda > 0){ rho$lambda <- 1 names(rho$lambda) <- "lambda" } start <- c(xi, coefs[-1], rep(0, rho$k), rep(1, rho$estimLambda)) names(start) <- NULL rho$start <- rho$par <- start } getPar <- function(rho) rho$par ## OK getNll <- function(rho, par) { ## ok if(!missing(par)) rho$par <- par with(rho, { if(estimLambda > 0) lambda <- par[nxi + p + k + 1:estimLambda] sigma <- if(k > 0) expSoffset * exp(drop(Z %*% par[nxi+p + 1:k])) else expSoffset eta1 <- (drop(B1 %*% par[1:(nxi + p)]) + o1)/sigma eta2 <- (drop(B2 %*% par[1:(nxi + p)]) + o2)/sigma pr <- if(nlambda) pfun(eta1, lambda) - pfun(eta2, lambda) else pfun(eta1) - pfun(eta2) if(all(is.finite(pr)) && all(pr > 0)) -sum(weights * log(pr)) else Inf }) } getGnll <- function(rho, par) { ## ok if(!missing(par)) rho$par <- par with(rho, { if(estimLambda > 0) lambda <- par[nxi + p + k + 1:estimLambda] sigma <- if(k > 0) expSoffset * exp(drop(Z %*% par[nxi+p + 1:k])) else expSoffset eta1 <- (drop(B1 %*% par[1:(nxi + p)]) + o1)/sigma eta2 <- (drop(B2 %*% par[1:(nxi + p)]) + o2)/sigma if(nlambda) { pr <- pfun(eta1, lambda) - pfun(eta2, lambda) p1 <- dfun(eta1, lambda) p2 <- dfun(eta2, lambda) } else { pr <- pfun(eta1) - pfun(eta2) p1 <- dfun(eta1) p2 <- dfun(eta2) } prSig <- pr * sigma ## eta1 * p1 is complicated because in theory eta1 contains ## Inf(-Inf) where p1 contains 0 and 0 * Inf = NaN... ## eta.p1 <- ifelse(p1 == 0, 0, eta1 * p1) ## eta.p2 <- ifelse(p2 == 0, 0, eta2 * p2) gradSigma <- ## if(k > 0) crossprod(Z, weights * (eta.p1 - eta.p2)/pr) if(k > 0) crossprod(Z, weights * (eta1 * p1 - eta2 * p2)/pr) else numeric(0) gradThetaBeta <- if(nxi > 0) -crossprod((B1*p1 - B2*p2), weights/prSig) else -crossprod((X * (p2 - p1)), weights/prSig) grad <- ## if (all(is.finite(pr)) && all(pr > 0)) ## c(gradThetaBeta, gradSigma) ## else rep(Inf, nxi + p + k) c(gradThetaBeta, gradSigma) }) if(rho$estimLambda > 0) c(rho$grad, grad.lambda(rho, rho$lambda, rho$link)) else rho$grad } getHnll <- function(rho, par) { ## ok if(!missing(par)) rho$par <- par with(rho, { eta1 <- drop(B1 %*% par[1:(nxi + p)]) + o1 eta2 <- drop(B2 %*% par[1:(nxi + p)]) + o2 pr <- pfun(eta1) - pfun(eta2) p1 <- dfun(eta1) p2 <- dfun(eta2) g1 <- gfun(eta1) g2 <- gfun(eta2) wtpr <- weights/pr dS.psi <- -crossprod(B1 * g1*wtpr, B1) + crossprod(B2 * g2*wtpr, B2) dpi.psi <- B1 * p1 - B2 * p2 ### dS.pi <- dpi.psi * wtpr/pr if (all(pr > 0)) dS.psi + crossprod(dpi.psi, (dpi.psi * wtpr/pr)) else array(NA, dim = c(nxi + p, nxi + p)) }) } .negLogLik <- function(rho) { ## negative log-likelihood ## OK with(rho, { eta1 <- drop(B1 %*% par[1:(nxi + p)]) + o1 eta2 <- drop(B2 %*% par[1:(nxi + p)]) + o2 pr <- pfun(eta1) - pfun(eta2) if (all(pr > 0)) -sum(weights * log(pr)) else Inf }) } .grad <- function(rho) { ## gradient of the negative log-likelihood ## OK with(rho, { p1 <- dfun(eta1) p2 <- dfun(eta2) wtpr <- weights/pr if (all(pr > 0)) -crossprod((B1 * p1 - B2 * p2), wtpr) else rep(NA, nalpha + p) }) } .hessian <- function(rho) { ## hessian of the negative log-likelihood ## OK with(rho, { dS.psi <- crossprod(B1 * gfun(eta1)*wtpr, B1) - crossprod(B2 * gfun(eta2)*wtpr, B2) dpi.psi <- B1 * p1 - B2 * p2 if (all(pr > 0)) -dS.psi + crossprod(dpi.psi, (dpi.psi * wtpr/pr)) else array(NA, dim = c(nxi+p, nxi+p)) }) } fitNR <- function(rho) ## OK { ctrl <- rho$ctrl stepFactor <- 1 innerIter <- 0 conv <- 1 ## Convergence flag message <- "iteration limit reached" rho$negLogLik <- .negLogLik(rho) if(rho$negLogLik == Inf) stop("Non-finite log-likelihood at starting value") rho$gradient <- .grad(rho) maxGrad <- max(abs(rho$gradient)) if(ctrl$trace > 0) Trace(iter=0, stepFactor, rho$negLogLik, maxGrad, rho$par, first=TRUE) ## Newton-Raphson algorithm: for(i in 1:ctrl$maxIter) { if(maxGrad < ctrl$gradTol) { message <- "max|gradient| < tol, so current iterate is probably solution" if(ctrl$trace > 0) cat("\nOptimizer converged! ", "max|grad|:", maxGrad, message, fill = TRUE) conv <- 0 break } rho$Hessian <- .hessian(rho) ## step <- .Call("La_dgesv", rho$Hessian, rho$gradient, .Machine$double.eps, ## PACKAGE = "base") ## solve H*step = g for 'step' step <- as.vector(solve(rho$Hessian, rho$gradient)) rho$par <- rho$par - stepFactor * step negLogLikTry <- .negLogLik(rho) lineIter <- 0 ## simple line search, i.e. step halfing: while(negLogLikTry > rho$negLogLik) { stepFactor <- stepFactor/2 rho$par <- rho$par + stepFactor * step negLogLikTry <- .negLogLik(rho) lineIter <- lineIter + 1 if(ctrl$trace > 0) Trace(i+innerIter, stepFactor, rho$negLogLik, maxGrad, rho$par, first=FALSE) if(lineIter > ctrl$maxLineIter){ message <- "step factor reduced below minimum" conv <- 2 break } innerIter <- innerIter + 1 } rho$negLogLik <- negLogLikTry rho$gradient <- .grad(rho) maxGrad <- max(abs(rho$gradient)) if(ctrl$trace > 0) Trace(iter=i+innerIter, stepFactor, rho$negLogLik, maxGrad, rho$par, first=FALSE) stepFactor <- min(1, 2 * stepFactor) } if(conv > 0) if(ctrl$trace > 0) cat(message, fill = TRUE) ## Save info rho$optRes$niter <- c(outer = i, inner = innerIter) rho$logLik <- -rho$negLogLik rho$maxGradient <- maxGrad rho$gradient <- as.vector(rho$gradient) rho$Hessian <- .hessian(rho) rho$optRes$message <- message rho$optRes$convergence <- conv } fitCLM <- function(rho) { ## OK if(rho$method == "Newton") { if(rho$k != 0) stop("Newton scheme not implemented for models with scale") if(rho$ncolXX > 1) stop("Newton scheme not implemented for models with nominal effects") if(rho$link %in% c("Aranda-Ordaz", "log-gamma")) stop("Newton scheme not implemented for models with", rho$link, "link function") fitNR(rho) return(invisible()) } optRes <- switch(rho$method, "nlminb" = nlminb(getPar(rho), function(par) getNll(rho, par), function(par) getGnll(rho, par), control=rho$ctrl, lower = rho$limitLow, upper = rho$limitUp), "ucminf" = ucminf(getPar(rho), function(par) getNll(rho, par), function(par) getGnll(rho, par), control=rho$ctrl), "optim" = optim(getPar(rho), function(par) getNll(rho, par), function(par) getGnll(rho, par), method="BFGS", control=rho$ctrl), ) rho$par <- optRes[[1]] rho$logLik <- - getNll(rho, optRes[[1]]) rho$optRes <- optRes rho$gradient <- c(getGnll(rho)) rho$maxGradient <- max(abs(rho$gradient)) if(rho$maxGradient > rho$convTol) warning("clm2 may not have converged:\n optimizer ", rho$method, " terminated with max|gradient|: ", rho$maxGradient, call.=FALSE) return(invisible()) } finalizeRho <- function(rho) { ## OK if(rho$method != "Newton") { rho$gradient <- c(getGnll(rho)) rho$maxGradient <- max(abs(rho$gradient)) rho$par <- rho$optRes[[1]] if(rho$Hess) { if(rho$k > 0 || rho$threshold != "flexible" || rho$ncolXX > 1 || rho$nlambda > 0) { if(rho$link == "Aranda-Ordaz" && rho$estimLambda > 0 && rho$lambda < 1e-3) message("Cannot get Hessian because lambda = ",rho$lambda ," is too close to boundary.\n", " Fit model with link == 'logistic' to get Hessian") else { rho$Hessian <- myhess(function(par) getNll(rho, par), rho$par) getNll(rho, rho$optRes[[1]]) # to reset the variables: # (par, pr) } } else rho$Hessian <- getHnll(rho, rho$optRes[[1]]) } } rho$convergence <- ifelse(rho$maxGradient > rho$convTol, FALSE, TRUE) with(rho, { if(nxi > 0) { xi <- par[seq_len(nxi)] names(xi) <- xiNames thetaNames <- paste(lev[-length(lev)], lev[-1], sep="|") Alpha <- Theta <- matrix(par[1:nxi], nrow=ncolXX, byrow=TRUE) Theta <- t(apply(Theta, 1, function(x) c(tJac %*% x))) if(ncolXX > 1){ dimnames(Theta) <- list(dnXX[[2]], thetaNames) dimnames(Alpha) <- list(dnXX[[2]], alphaNames) } else { Theta <- c(Theta) Alpha <- c(Alpha) names(Theta) <- thetaNames names(Alpha) <- alphaNames } coefficients <- xi } else coefficients <- numeric(0) if(p > 0) { beta <- par[nxi + 1:p] names(beta) <- dnX[[2]] coefficients <- c(coefficients, beta) } if(k > 0) { zeta <- par[nxi+p + 1:k] names(zeta) <- dnZ[[2]] coefficients <- c(coefficients, zeta) } if(estimLambda > 0) { names(lambda) <- "lambda" coefficients <- c(coefficients, lambda) } names(gradient) <- names(coefficients) edf <- p + nxi + k + estimLambda nobs <- sum(weights) fitted.values <- pr df.residual <- nobs - edf if(exists("Hessian", inherits=FALSE)) { dimnames(Hessian) <- list(names(coefficients), names(coefficients)) } }) res <- as.list(rho) keepNames <- c("df.residual", "fitted.values", "edf", "start", "beta", "coefficients", "zeta", "Alpha", "Theta", "xi", "lambda", "convergence", "Hessian", "convTol", "gradient", "optRes", "logLik", "call", "scale", "location", "nominal", "method", "y", "lev", "nobs", "threshold", "estimLambda", "link", "contrasts", "na.action") m <- match(keepNames, names(res), 0) res <- res[m] res } clm2 <- ## OK function(location, scale, nominal, data, weights, start, subset, na.action, contrasts, Hess = TRUE, model = TRUE, link = c("logistic", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), lambda, doFit = TRUE, control, threshold = c("flexible", "symmetric", "equidistant"), ...) { L <- match.call(expand.dots = FALSE) if(missing(location)) stop("Model needs a specification of the location") if(missing(lambda)) lambda <- NULL if(missing(contrasts)) contrasts <- NULL link <- match.arg(link) if(!(link %in% c("Aranda-Ordaz", "log-gamma")) & !is.null(lambda)){ warning("lambda ignored with link ", link) lambda <- NULL } if(!is.null(lambda) & length(lambda) > 1) { lambda <- lambda[1] warning("lambda is ", length(lambda), " long. Only the first element ", lambda[1], " is used") } if(!is.null(lambda) & link == "Aranda-Ordaz") if(lambda < 1e-6) stop("lambda has to be positive and lambda < 1e-6 not allowed for numerical reasons. lambda = ", lambda, " was supplied.") if (missing(control)) control <- clm2.control(...) if(!setequal(names(control), c("method", "convTol", "ctrl"))) stop("specify 'control' via clm2.control()") if (missing(data)) L$data <- environment(location) if (is.matrix(eval.parent(L$data))) L$data <- as.data.frame(L$data) ### Collect variables in location, scale and nominal formulae in a ### single formula, evaluate the model.frame and get index of row ### names for the rows to keep in the individual model.frames: m <- match(c("location", "scale", "nominal"), names(L), 0) F <- lapply(as.list(L[m]), eval.parent) ## evaluate in parent ## frame to allow 'f <- formula(sureness ~ prod); clm2(f, ...)' varNames <- unique(unlist(lapply(F, all.vars))) longFormula <- eval(parse(text = paste("~", paste(varNames, collapse = "+")))[1]) m <- match(c("location", "data", "subset", "weights", "na.action"), names(L), 0) L0 <- L[c(1, m)] if(!missing(scale) || !missing(nominal)) L0$location <- longFormula L0$drop.unused.levels <- TRUE L0[[1]] <- as.name("model.frame") names(L0)[names(L0) == "location"] <- "formula" L0 <- eval.parent(L0) m <- match(c("location", "scale", "nominal", "data", "subset", "weights", "na.action"), names(L), 0) L <- L[c(1, m)] L$drop.unused.levels <- TRUE L[[1]] <- as.name("model.frame") S <- L ## L: Location, S: Scale L$scale <- L$nominal <- NULL names(L)[names(L) == "location"] <- "formula" L <- eval.parent(L) keep <- match(rownames(L0), rownames(L)) L <- L[keep, , drop = FALSE] TermsL <- attr(L, "terms") ### format response: y <- model.response(L) if(!is.factor(y)) stop("response needs to be a factor") ### format thresholds: threshold <- match.arg(threshold) ### format location: X <- model.matrix(TermsL, L, contrasts) Xint <- match("(Intercept)", colnames(X), nomatch = 0) if (Xint > 0) X <- X[, -Xint, drop = FALSE] else warning("an intercept is needed and assumed in the location") n <- nrow(X) if(is.null(wt <- model.weights(L))) wt <- rep(1, n) if(is.null(Loffset <- model.offset(L))) Loffset <- rep(0, n) ### Format nominal: if(!missing(nominal)) { Nom <- S Nom$location <- Nom$scale <- NULL names(Nom)[names(Nom) == "nominal"] <- "formula" Nom <- eval.parent(Nom) Nom <- Nom[match(rownames(L0), rownames(Nom)), ,drop=FALSE] TermsNom <- attr(Nom, "terms") XX <- model.matrix(TermsNom, Nom)## , contrasts) ### Not allowing other than treatment contrasts in nominal if(is.null(Noffset <- model.offset(Nom))) Noffset <- rep(0, n) Nint <- match("(Intercept)", colnames(XX), nomatch = 0) if(Nint != 1) stop("An intercept is needed in the nominal formula") ### Are there any requirements about the presence of an ### intercept in the nominal formula? } else XX <- array(1, dim=c(n, 1)) ### format scale: if(!missing(scale)) { S$location <- S$nominal <- NULL names(S)[names(S) == "scale"] <- "formula" S <- eval.parent(S) S <- S[match(rownames(L0), rownames(S)), ,drop=FALSE] TermsS <- attr(S, "terms") ### Should contrasts be allowed for the scale? Z <- model.matrix(TermsS, S, contrasts) Zint <- match("(Intercept)", colnames(Z), nomatch = 0) if(Zint > 0) Z <- Z[, -Zint, drop = FALSE] else warning("an intercept is needed and assumed in the scale") if(is.null(Soffset <- model.offset(S))) Soffset <- rep(0, n) if(ncol(Z) > 0 && n != nrow(Z)) # This shouldn't happen stop("Model needs same dataset in location and scale") } else if(missing(scale) && !is.factor(y)){ Z <- array(1, dim = c(n, 1)) Soffset <- rep(0, n) } else { Z <- array(dim = c(n, 0)) Soffset <- rep(0, n) } ### return model.frame? if(control$method == "model.frame") { mf <- list(location = L) if(!missing(scale)) mf$scale <- S if(!missing(nominal)) mf$nominal <- Nom return(mf) } ### initialize and populate rho environment: rho <- newRho(parent.frame(), XX = XX, X=X, Z=Z, y=y, weights=wt, Loffset=Loffset, Soffset=Soffset, link=link, lambda = lambda, threshold=threshold, Hess = Hess, control = control) ### get starting values: if(missing(start)) setStart(rho) else rho$start <- rho$par <- start if(rho$estimLambda > 0 & rho$link == "Aranda-Ordaz") rho$limitLow <- c(rep(-Inf, length(rho$par)-1), 1e-5) if(length(rho$start) != with(rho, nxi + p + k + estimLambda)) stop("'start' is not of the correct length") ### OPTION: Could consider better check of increasing thresholds when ### ncol(XX) > 0 if(ncol(XX) == 0) { if(!all(diff(c(rho$tJac %*% rho$start[1:rho$nalpha])) > 0)) stop("Threshold starting values are not of increasing size") } if(!getNll(rho) < Inf) stop("Non-finite log-likelihood at starting values") if(model) { rho$location <- L if(!missing(scale)) rho$scale <- S if(!missing(nominal)) rho$nominal <- Nom } ### fit the model: if(!doFit) return(rho) fitCLM(rho) res <- finalizeRho(rho) ### add to output: res$call <- match.call() res$na.action <- attr(L0, "na.action") res$contrasts <- contrasts class(res) <- "clm2" res } print.clm2 <- function(x, ...) { if(!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control=NULL) } if(length(x$beta)) { cat("\nLocation coefficients:\n") print(x$beta, ...) } else { cat("\nNo location coefficients\n") } if(length(x$zeta)) { cat("\nScale coefficients:\n") print(x$zeta, ...) } else { cat("\nNo Scale coefficients\n") } if(x$estimLambda > 0) { cat("\nLink coefficient:\n") print(x$lambda) } if(length(x$xi) > 0) { cat("\nThreshold coefficients:\n") print(x$Alpha, ...) if(x$threshold != "flexible") { cat("\nThresholds:\n") print(x$Theta, ...) } } cat("\nlog-likelihood:", format(x$logLik, nsmall=2), "\n") cat("AIC:", format(-2*x$logLik + 2*x$edf, nsmall=2), "\n") if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") invisible(x) } vcov.clm2 <- function(object, ...) { if(is.null(object$Hessian)) { message("\nRe-fitting to get Hessian\n") utils::flush.console() object <- update(object, Hess=TRUE, start=object$coefficients) } dn <- names(object$coefficients) H <- object$Hessian ## To handle NaNs in the Hessian resulting from parameter ## unidentifiability: if(any(His.na <- !is.finite(H))) { H[His.na] <- 0 VCOV <- ginv(H) VCOV[His.na] <- NaN } else VCOV <- ginv(H) structure(VCOV, dimnames = list(dn, dn)) } summary.clm2 <- function(object, digits = max(3, .Options$digits - 3), correlation = FALSE, ...) { if(is.null(object$Hessian)) stop("Model needs to be fitted with Hess = TRUE") coef <- matrix(0, object$edf, 4, dimnames = list(names(object$coefficients), c("Estimate", "Std. Error", "z value", "Pr(>|z|)"))) coef[, 1] <- object$coefficients vc <- try(vcov(object), silent = TRUE) if(inherits(vc, "try-error")) { warning("Variance-covariance matrix of the parameters is not defined") coef[, 2:4] <- NaN if(correlation) warning("Correlation matrix is unavailable") object$condHess <- NaN } else { coef[, 2] <- sd <- sqrt(diag(vc)) ## Cond is Inf if Hessian contains NaNs: object$condHess <- if(any(is.na(object$Hessian))) Inf else with(eigen(object$Hessian, only.values = TRUE), abs(max(values) / min(values))) coef[, 3] <- coef[, 1]/coef[, 2] coef[, 4] <- 2*pnorm(abs(coef[, 3]), lower.tail=FALSE) if(correlation) object$correlation <- (vc/sd)/rep(sd, rep(object$edf, object$edf)) } object$coefficients <- coef object$digits <- digits class(object) <- "summary.clm2" object } print.summary.clm2 <- function(x, digits = x$digits, signif.stars = getOption("show.signif.stars"), ...) { if(!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control=NULL) } coef <- format(round(x$coefficients, digits=digits)) coef[,4] <- format.pval(x$coefficients[, 4]) p <- length(x$beta); nxi <- length(x$xi) k <- length(x$zeta); u <- x$estimLambda if(p > 0) { cat("\nLocation coefficients:\n") print(coef[nxi + 1:p, , drop=FALSE], quote = FALSE, ...) } else { cat("\nNo location coefficients\n") } if(k > 0) { cat("\nScale coefficients:\n") print(coef[(nxi+p+1):(nxi+p+k), , drop=FALSE], quote = FALSE, ...) } else { cat("\nNo scale coefficients\n") } if(x$estimLambda > 0) { cat("\nLink coefficients:\n") print(coef[(nxi+p+k+1):(nxi+p+k+u), , drop=FALSE], quote = FALSE, ...) } if(nxi > 0) { cat("\nThreshold coefficients:\n") print(coef[seq_len(nxi), -4, drop=FALSE], quote = FALSE, ...) } cat("\nlog-likelihood:", format(x$logLik, nsmall=2), "\n") cat("AIC:", format(-2*x$logLik + 2*x$edf, nsmall=2), "\n") cat("Condition number of Hessian:", format(x$condHess, nsmall=2), "\n") if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") if(!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } invisible(x) } anova.clm2 <- function (object, ..., test = c("Chisq", "none")) { test <- match.arg(test) dots <- list(...) if (length(dots) == 0) stop('anova is not implemented for a single "clm2" object') mlist <- list(object, ...) nt <- length(mlist) dflis <- sapply(mlist, function(x) x$df.residual) s <- order(dflis, decreasing = TRUE) mlist <- mlist[s] if (any(!sapply(mlist, inherits, "clm2"))) stop('not all objects are of class "clm2"') ns <- sapply(mlist, function(x) length(x$fitted.values)) if(any(ns != ns[1])) stop("models were not all fitted to the same size of dataset") rsp <- unique(sapply(mlist, function(x) { tmp <- attr(x$location, "terms") class(tmp) <- "formula" paste(tmp[2]) } )) mds <- sapply(mlist, function(x) { tmp1 <- attr(x$location, "terms") class(tmp1) <- "formula" if(!is.null(x$scale)) { tmp2 <- attr(x$scale, "terms") class(tmp2) <- "formula" tmp2 <- tmp2[2] } else tmp2 <- "" if(!is.null(x$nominal)) { tmp3 <- attr(x$nominal, "terms") class(tmp3) <- "formula" tmp3 <- tmp3[2] } else tmp3 <- "" paste(tmp1[3], "|", tmp2, "|", tmp3) } ) dfs <- dflis[s] lls <- sapply(mlist, function(x) -2*x$logLik) tss <- c("", paste(1:(nt - 1), 2:nt, sep = " vs ")) df <- c(NA, -diff(dfs)) x2 <- c(NA, -diff(lls)) pr <- c(NA, 1 - pchisq(x2[-1], df[-1])) out <- data.frame(Model = mds, Resid.df = dfs, '-2logLik' = lls, Test = tss, Df = df, LRtest = x2, Prob = pr) names(out) <- c("Model", "Resid. df", "-2logLik", "Test", " Df", "LR stat.", "Pr(Chi)") if (test == "none") out <- out[, 1:6] class(out) <- c("Anova", "data.frame") attr(out, "heading") <- c("Likelihood ratio tests of cumulative link models\n", paste("Response:", rsp)) out } predict.clm2 <- function(object, newdata, ...) { if(!inherits(object, "clm2")) stop("not a \"clm2\" object") if(missing(newdata)) pr <- object$fitted else { newdata <- as.data.frame(newdata) Terms <- attr(object$location, "terms") m <- model.frame(Terms, newdata, na.action = function(x) x)#, if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) X <- model.matrix(Terms, m, contrasts = object$contrasts) xint <- match("(Intercept)", colnames(X), nomatch=0) if(xint > 0) X <- X[, -xint, drop=FALSE] n <- nrow(X) y <- m[,names(cl)[attr(Terms, "response")]] if(length(object$zeta) > 0) { Terms <- attr(object$scale, "terms") m <- model.frame(Terms, newdata, na.action = function(x) x)#, if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) Z <- model.matrix(Terms, m, contrasts = object$contrasts) zint <- match("(Intercept)", colnames(Z), nomatch=0) if(zint > 0) Z <- Z[, -zint, drop=FALSE] } if(!is.null(object$nominal)) { Terms <- attr(object$nominal, "terms") m <- model.frame(Terms, newdata, na.action = function(x) x)#, if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) XX <- model.matrix(Terms, m, contrasts = object$contrasts) namC <- colnames(XX) } B2 <- 1 * (col(matrix(0, n, nlevels(y))) == unclass(y)) o1 <- c(100 * B2[, nlevels(y)]) o2 <- c(-100 * B2[,1]) B1 <- B2[,-nlevels(y), drop=FALSE] B2 <- B2[,-1, drop=FALSE] locationPar <- c(t(object$Theta)) if(!is.null(object$nominal)) { ncolXX <- ncol(XX) LL1 <- lapply(1:ncolXX, function(x) B1 * XX[,x]) B1 <- do.call(cbind, LL1) LL2 <- lapply(1:ncolXX, function(x) B2 * XX[,x]) B2 <- do.call(cbind, LL2) } if(ncol(X) > 0) { B1 <- cbind(B1, -X) B2 <- cbind(B2, -X) locationPar <- c(locationPar, object$beta) } pfun <- switch(object$link, logistic = plogis, probit = pnorm, cloglog = function(x) pgumbel(x, max=FALSE), ## cloglog = pgumbel, cauchit = pcauchy, loglog = pgumbel, "Aranda-Ordaz" = function(x, lambda) pAO(x, lambda), "log-gamma" = function(x, lambda) plgamma(x, lambda)) sigma <- 1 if(length(object$zeta) > 0) sigma <- sigma * exp(drop(Z %*% object$zeta)) eta1 <- (drop(B1 %*% locationPar) + o1) / sigma eta2 <- (drop(B2 %*% locationPar) + o2) / sigma if(object$link %in% c("Aranda-Ordaz", "log-gamma")) pr <- pfun(eta1, object$lambda) - pfun(eta2, object$lambda) else pr <- pfun(eta1) - pfun(eta2) } if(missing(newdata) && !is.null(object$na.action)) pr <- napredict(object$na.action, pr) as.vector(pr) } profile.clm2 <- function(fitted, whichL = seq_len(p), whichS = seq_len(k), lambda = TRUE, alpha = 0.01, maxSteps = 50, delta = LrootMax/10, trace = 0, stepWarn = 8, ...) { rho <- update(fitted, doFit=FALSE) if(rho$estimLambda > 0 & rho$link == "Aranda-Ordaz") rho$limitLow <- c(rep(-Inf, length(rho$par)-2), 1e-5) nxi <- rho$nxi; k <- rho$k; p <- rho$p; X <- rho$X; Z <- rho$Z B1 <- rho$B1; B2 <- rho$B2 sO <- rho$expSoffset; O1 <- rho$o1; O2 <- rho$o2 beta0 <- with(fitted, coefficients[nxi + seq_len(p+k)]) Lnames <- names(beta0[seq_len(p)]) Snames <- names(beta0[p + seq_len(k)]) Pnames <- c(Lnames, Snames) if(is.character(whichL)) whichL <- match(whichL, Lnames) if(is.character(whichS)) whichS <- match(whichS, Snames) nL <- length(whichL); nS <- length(whichS) summ <- summary(fitted) std.err <- summ$coefficients[nxi + seq_len(p+k), "Std. Error"] if(trace < 0) rho$ctrl$trace <- trace <- 1 origLogLik <- fitted$logLik LrootMax <- qnorm(1 - alpha/2) prof <- vector("list", length = nL + nS) names(prof) <- c(paste("loc", Lnames[whichL], sep=".")[seq_len(nL)], paste("scale", Snames[whichS], sep=".")[seq_len(nS)]) for(where in c("loc", "scale")[c(nL>0, nS>0)]) { if(where == "loc") { rho$p <- max(0, p - 1) which <- whichL } if(where == "scale") { which <- whichS rho$o1 <- O1 rho$o2 <- O2 rho$p <- p rho$k <- max(0, k - 1) rho$X <- X if(rho$nxi > 0) { rho$B1 <- B1 rho$B2 <- B2 } } for(i in which) { if(where == "loc") { rho$X <- X[, -i, drop=FALSE] if(nxi > 0) { rho$B1 <- B1[, -(nxi+i), drop=FALSE] rho$B2 <- B2[, -(nxi+i), drop=FALSE] } } else { rho$Z <- Z[, -i, drop=FALSE] i <- i + p } res.i <- c(0, beta0[i]) for(sgn in c(-1, 1)) { if(trace) { message("\nParameter: ", where, ".", c(Lnames, Snames)[i], c(" down", " up")[(sgn + 1)/2 + 1]) utils::flush.console() } rho$par <- fitted$coefficients[-(nxi+i)] step <- 0; Lroot <- 0 while((step <- step + 1) < maxSteps && abs(Lroot) < LrootMax) { beta.i <- beta0[i] + sgn * step * delta * std.err[i] if(where=="loc") { rho$o1 <- O1 - X[, i] * beta.i rho$o2 <- O2 - X[, i] * beta.i } else rho$expSoffset <- exp(sO + Z[, (i - p)] * beta.i) fitCLM(rho) Lroot <- sgn * sqrt(2*(-rho$logLik + origLogLik)) res.i <- rbind(res.i, c(Lroot, beta.i)) } if(step - 1 < stepWarn) warning("profile may be unreliable for ", where, ".", c(Lnames, Snames)[i], " because only ", step - 1, "\n steps were taken ", c("downwards", "upwards")[(sgn + 1)/2 + 1]) } rownames(res.i) <- NULL prof[[paste(where, c(Lnames, Snames)[i], sep=".")]] <- # -p+nL structure(data.frame(res.i[order(res.i[,1]),]), names = c("Lroot", c(Lnames, Snames)[i])) if(!all(diff(prof[[length(prof)]][,2]) > 0)) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for ", names(prof)[length(prof)]) } } if(lambda & rho$nlambda) prof$lambda <- profileLambda(fitted, trace = trace, ...) val <- structure(prof, original.fit = fitted, summary = summ) class(val) <- c("profile.clm2", "profile") val } profileLambda <- function(fitted, link = fitted$link, range, nSteps = 20, trace = 0, ...) { if(link == "log-gamma" & missing(range)) range <- c(-4, 4) if(link == "Aranda-Ordaz" & missing(range)) range <- c(1e-4, 4) if(!link %in% c("log-gamma", "Aranda-Ordaz")) stop("link needs to be 'log-gamma' or 'Aranda-Ordaz';", link, "not recognized") if(link == "Aranda-Ordaz" & min(range) <= 0) stop("range should be > 0 for the 'Aranda-Ordaz' link") if(fitted$estimLambda == 0) fitted <- update(fitted, Hess = FALSE, link = link, lambda = NULL) MLogLik <- fitted$logLik MLlambda <- fitted$lambda logLik <- numeric(nSteps) rho <- update(fitted, Hess = FALSE, link = link, lambda = min(range)) logLik[1] <- rho$logLik rho <- update(rho, doFit = FALSE) lambdaSeq <- seq(min(range), max(range), length.out = nSteps) if(trace) message("\nNow profiling lambda with ", nSteps - 1, " steps: i =") for(i in 2:nSteps){ if(trace) cat(i-1, " ") rho$lambda <- lambdaSeq[i] fitCLM(rho) logLik[i] <- rho$logLik } if(trace) cat("\n\n") if(any(logLik > fitted$logLik)) warning("Profiling found a better optimum,", " so original fit had not converged") sgn <- 2*(lambdaSeq > MLlambda) -1 Lroot <- sgn * sqrt(2) * sqrt(-logLik + MLogLik) res <- data.frame("Lroot" = c(0, Lroot), "lambda" = c(MLlambda, lambdaSeq)) res <- res[order(res[,1]),] if(!all(diff(res[,2]) > 0)) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for lambda") res } confint.clm2 <- function(object, parm, level = 0.95, whichL = seq_len(p), whichS = seq_len(k), lambda = TRUE, trace = 0, ...) { p <- length(object$beta); k <- length(object$zeta) if(trace) { message("Waiting for profiling to be done...") utils::flush.console() } object <- profile(object, whichL = whichL, whichS = whichS, alpha = (1. - level)/4., lambda = lambda, trace = trace) confint(object, level=level, ...) } confint.profile.clm2 <- function(object, parm = seq_along(Pnames), level = 0.95, ...) { of <- attr(object, "original.fit") Pnames <- names(object) if(is.character(parm)) parm <- match(parm, Pnames, nomatch = 0) a <- (1-level)/2 a <- c(a, 1-a) pct <- paste(round(100*a, 1), "%") ci <- array(NA, dim = c(length(parm), 2), dimnames = list(Pnames[parm], pct)) cutoff <- qnorm(a) for(pm in parm) { pro <- object[[ Pnames[pm] ]] sp <- spline(x = pro[, 2], y = pro[, 1]) ci[Pnames[pm], ] <- approx(sp$y, sp$x, xout = cutoff)$y } ci } plot.profile.clm2 <- function(x, parm = seq_along(Pnames), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, fig = TRUE, n = 1e3, ..., ylim = NULL) ### Should this function have a 'root' argument to display the ### likelihood root statistic (approximate straight line)? { Pnames <- names(x) ML <- attr(x, "original.fit")$logLik for(pm in parm) { lim <- sapply(level, function(x) exp(-qchisq(x, df=1)/2) ) pro <- x[[ Pnames[pm] ]] sp <- spline(x = pro[, 2], y = pro[, 1], n=n) sp$y <- -sp$y^2/2 if(relative & !Log) { sp$y <- exp(sp$y) ylab <- "Relative likelihood" dots <- list(...) if(missing(ylim)) ylim <- c(0, 1) } if(relative & Log) { ylab <- "Relative log-likelihood" lim <- log(lim) } if(!relative & Log) { sp$y <- sp$y + ML ylab <- "Log-likelihood" lim <- ML + log(lim) } if(!relative & !Log) { stop("Not supported: at least one of 'Log' and 'relative' ", "have to be TRUE") sp$y <- exp(sp$y + ML) ylab <- "Likelihood" lim <- exp(ML + log(lim)) } x[[ Pnames[pm] ]] <- sp if(fig) { plot(sp$x, sp$y, type = "l", ylim = ylim, xlab = Pnames[pm], ylab = ylab, ...) abline(h = lim) } } attr(x, "limits") <- lim invisible(x) } logLik.clm2 <- function(object, ...) structure(object$logLik, df = object$edf, class = "logLik") extractAIC.clm2 <- function(fit, scale = 0, k = 2, ...) { edf <- fit$edf c(edf, -2*fit$logLik + k * edf) } update.clm2 <- function(object, formula., location, scale, nominal, ..., evaluate = TRUE) ### This method makes it possible to use the update.formula features ### for location and scale formulas in clm2 objects. This includes the ### possibility of using e.g. ### update(obj, loc = ~ . - var1, sca = ~ . + var2) { call <- object$call if (is.null(call)) stop("need an object with call component") extras <- match.call(expand.dots = FALSE)$... if (!missing(location)) call$location <- update.formula(formula(attr(object$location, "terms")), location) if (!missing(scale)) call$scale <- if(!is.null(object$scale)) update.formula(formula(attr(object$scale, "terms")), scale) else scale if (!missing(nominal)) call$nominal <- if(!is.null(object$nominal)) update.formula(formula(attr(object$nominal, "terms")), nominal) else nominal if (length(extras)) { existing <- !is.na(match(names(extras), names(call))) for (a in names(extras)[existing]) call[[a]] <- extras[[a]] if (any(!existing)) { call <- c(as.list(call), extras[!existing]) call <- as.call(call) } } if (evaluate) eval(call, parent.frame()) else call } dropterm.clm2 <- function(object, scope, scale = 0, test = c("none", "Chisq"), k = 2, sorted = FALSE, trace = FALSE, which = c("location", "scale"), ...) ### Most of this is lifted from MASS::dropterm.default, but adapted to ### the two formulas (location and scale) in the model. { which <- match.arg(which) Terms <- if(which == "location") attr(object$location, "terms") else attr(object$scale, "terms") tl <- attr(Terms, "term.labels") if(missing(scope)) scope <- drop.scope(Terms) else { if(!is.character(scope)) scope <- attr(terms(update.formula(Terms, scope)), "term.labels") if(!all(match(scope, tl, FALSE))) stop("scope is not a subset of term labels") } ns <- length(scope) ans <- matrix(nrow = ns + 1, ncol = 2, dimnames = list(c("", scope), c("df", "AIC"))) ans[1, ] <- extractAIC(object, scale, k = k, ...) n0 <- length(object$fitted) for(i in seq(ns)) { tt <- scope[i] if(trace) { message("trying -", tt) utils::flush.console() } Call <- as.list(object$call) Call[[which]] <- update.formula(Terms, as.formula(paste("~ . -", tt))) nfit <- eval.parent(as.call(Call)) ans[i+1, ] <- extractAIC(nfit, scale, k = k, ...) if(length(nfit$fitted) != n0) stop("number of rows in use has changed: remove missing values?") } dfs <- ans[1,1] - ans[,1] dfs[1] <- NA aod <- data.frame(Df = dfs, AIC = ans[,2]) o <- if(sorted) order(aod$AIC) else seq_along(aod$AIC) test <- match.arg(test) if(test == "Chisq") { dev <- ans[, 2] - k*ans[, 1] dev <- dev - dev[1] ; dev[1] <- NA nas <- !is.na(dev) P <- dev P[nas] <- pchisq(dev[nas], dfs[nas], lower.tail = FALSE) aod[, c("LRT", "Pr(Chi)")] <- list(dev, P) } aod <- aod[o, ] Call <- as.list(object$call) Call <- Call[names(Call) %in% c("location", "scale")] head <- c("Single term deletions", "\nModel:", paste(names(Call), ":", Call)) if(scale > 0) head <- c(head, paste("\nscale: ", format(scale), "\n")) class(aod) <- c("anova", "data.frame") attr(aod, "heading") <- head aod } addterm.clm2 <- function(object, scope, scale = 0, test = c("none", "Chisq"), k = 2, sorted = FALSE, trace = FALSE, which = c("location", "scale"), ...) ### Most of this is lifted from MASS::addterm.default, but adapted to ### the two formulas (location and scale) in the model. { which <- match.arg(which) if (which == "location") Terms <- attr(object$location, "terms") else if(!is.null(object$scale)) Terms <- attr(object$scale, "terms") else Terms <- as.formula(" ~ 1") if(missing(scope) || is.null(scope)) stop("no terms in scope") if(!is.character(scope)) scope <- add.scope(Terms, update.formula(Terms, scope)) if(!length(scope)) stop("no terms in scope for adding to object") ns <- length(scope) ans <- matrix(nrow = ns + 1, ncol = 2, dimnames = list(c("", scope), c("df", "AIC"))) ans[1, ] <- extractAIC(object, scale, k = k, ...) n0 <- length(object$fitted) for(i in seq(ns)) { tt <- scope[i] if(trace) { message("trying +", tt) utils::flush.console() } Call <- as.list(object$call) Call[[which]] <- update.formula(Terms, as.formula(paste("~ . +", tt))) nfit <- eval.parent(as.call(Call)) ans[i+1, ] <- extractAIC(nfit, scale, k = k, ...) if(length(nfit$fitted) != n0) stop("number of rows in use has changed: remove missing values?") } dfs <- ans[,1] - ans[1,1] dfs[1] <- NA aod <- data.frame(Df = dfs, AIC = ans[,2]) o <- if(sorted) order(aod$AIC) else seq_along(aod$AIC) test <- match.arg(test) if(test == "Chisq") { dev <- ans[,2] - k*ans[, 1] dev <- dev[1] - dev; dev[1] <- NA nas <- !is.na(dev) P <- dev P[nas] <- pchisq(dev[nas], dfs[nas], lower.tail=FALSE) aod[, c("LRT", "Pr(Chi)")] <- list(dev, P) } aod <- aod[o, ] Call <- as.list(object$call) Call <- Call[names(Call) %in% c("location", "scale")] head <- c("Single term additions", "\nModel:", paste(names(Call), ":", Call)) if(scale > 0) head <- c(head, paste("\nscale: ", format(scale), "\n")) class(aod) <- c("anova", "data.frame") attr(aod, "heading") <- head aod } ## addterm <- function(object, ...) UseMethod("addterm") ## dropterm <- function(object, ...) UseMethod("dropterm") ################################################################## ## Additional utility functions: grad.lambda <- function(rho, lambda, link, delta = 1e-6) { ll <- lambda + c(-delta, delta) if(link == "Aranda-Ordaz") ll[ll < 0] <- 0 par <- rho$par f <- sapply(ll, function(x) getNll(rho, c(par[-length(par)], x))) rho$lambda <- lambda rho$par <- par diff(f) / diff(ll) } TraceR <- function(iter, stepFactor, val, maxGrad, par, first=FALSE) { t1 <- sprintf(" %3d: %.2e: %.3f: %1.3e: ", iter, stepFactor, val, maxGrad) t2 <- formatC(par) if(first) cat("iter: step factor: Value: max|grad|: Parameters:\n") cat(t1, t2, "\n") } print.Anova <- function (x, ...) ## Lifted from package MASS: { heading <- attr(x, "heading") if (!is.null(heading)) cat(heading, sep = "\n") attr(x, "heading") <- NULL res <- format.data.frame(x, ...) nas <- is.na(x) res[] <- sapply(seq_len(ncol(res)), function(i) { x <- as.character(res[[i]]) x[nas[, i]] <- "" x }) print.data.frame(res) invisible(x) } fixed <- function(theta, eps = 1e-3) { res <- vector("list") res$name <- "fixed" if(!missing(theta) && length(theta) > 1) { if(length(theta) < 3) stop("'length(theta) = ", length(theta), ", but has to be 1 or >= 3") res$eps <- NULL res$theta <- theta res$getTheta <- function(y, theta, eps) theta } else if(!missing(theta) && length(theta) == 1) { if(as.integer(theta) < 3) stop("'as.integer(theta)' was ", as.integer(theta), ", but has to be > 2") res$eps <- NULL res$theta <- theta res$getTheta <- function(y, theta, eps) { eps <- diff(range(y)) / (theta - 1) seq(min(y) - eps/2, max(y) + eps/2, len = theta + 1) } } else if(missing(theta) && length(eps) == 1) { res$eps <- eps res$theta <- NULL res$getTheta <- function(y, theta, eps) { J <- diff(range(y))/eps + 1 seq(min(y) - eps/2, max(y) + eps/2, len = J) } } else stop("inappropriate arguments") class(res) <- "threshold" res } makeThresholds2 <- function(rho, threshold, ...) { if(threshold == "flexible") { rho$tJac <- diag(rho$ntheta) rho$nalpha <- rho$ntheta rho$alphaNames <- paste(rho$lev[-length(rho$lev)], rho$lev[-1], sep="|") } if(threshold == "symmetric") { if(!rho$ntheta >=2) stop("symmetric thresholds are only meaningful for responses with 3 or more levels") if(rho$ntheta %% 2) { ## ntheta is odd rho$nalpha <- (rho$ntheta + 1)/2 ## No. threshold parameters rho$tJac <- t(cbind(diag(-1, rho$nalpha)[rho$nalpha:1, 1:(rho$nalpha-1)], diag(rho$nalpha))) rho$tJac[,1] <- 1 rho$alphaNames <- c("central", paste("spacing.", 1:(rho$nalpha-1), sep="")) } else { ## ntheta is even rho$nalpha <- (rho$ntheta + 2)/2 rho$tJac <- cbind(rep(1:0, each=rho$ntheta/2), rbind(diag(-1, rho$ntheta/2)[(rho$ntheta/2):1,], diag(rho$ntheta/2))) rho$tJac[,2] <- rep(0:1, each=rho$ntheta/2) rho$alphaNames <- c("central.1", "central.2", paste("spacing.", 1:(rho$nalpha-2), sep="")) } } if(threshold == "equidistant") { if(!rho$ntheta >=2) stop("symmetric thresholds are only meaningful for responses with 3 or more levels") rho$tJac <- cbind(1, 0:(rho$ntheta-1)) rho$nalpha <- 2 rho$alphaNames <- c("threshold.1", "spacing") } } ordinal/R/clm.fit.R0000644000175100001440000001607614533321514013613 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## The function clm.fit() - an lm.fit or glm.fit equivalent for CLMs. clm.fit <- function(y, ...) { UseMethod("clm.fit") } clm.fit.factor <- function(y, X, S, N, weights = rep(1, nrow(X)), offset = rep(0, nrow(X)), S.offset = rep(0, nrow(X)), control = list(), start, doFit=TRUE, link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) ### This function basically does the same as clm, but without setting ### up the model matrices from formulae, and with minimal post ### processing after parameter estimation. { ## Initial argument matching and testing: threshold <- match.arg(threshold) link <- match.arg(link) control <- do.call(clm.control, control) if(missing(y)) stop("please specify y") if(missing(X)) X <- cbind("(Intercept)" = rep(1, length(y))) stopifnot(is.factor(y), is.matrix(X)) if(missing(weights) || is.null(weights)) weights <- rep(1, length(y)) if(missing(offset) || is.null(offset)) offset <- rep(0, length(y)) if(missing(S.offset) || is.null(S.offset)) S.offset <- rep(0, length(y)) stopifnot(length(y) == nrow(X) && length(y) == length(weights) && length(y) == length(offset) && length(y) == length(S.offset)) frames <- list(y=y, X=X) y[weights <= 0] <- NA y.levels <- levels(droplevels(y)) struct <- namedList(y, X, weights, offset, S.offset, y.levels, threshold, link, control, doFit) ## S and N are optional: if(!missing(S) && !is.null(S)) { struct$S <- S stopifnot(is.matrix(S), length(y) == nrow(S)) } if(!missing(N) && !is.null(N)) { struct$NOM <- N stopifnot(is.matrix(N), length(y) == nrow(N)) } clm.fit.default(struct) } clm.fit.default <- function(y, ...) ### y: design object with the following components: ... ### (tJac=NULL), (y.levels=NULL), threshold, (aliased=NULL), ### (start=NULL), link, control, weights, (coef.names=NULL), y, X, ### (S=NULL), (NOM=NULL), doFit=TRUE, S.offset=NULL { ## check args: stopifnot(is.list(y)) y <- c(y, list(...)) stopifnot(all( c("y", "X", "offset", "weights", "link", "threshold", "control", "doFit") %in% names(y) )) ## preprocess design objects if needed: if(is.null(y$y.levels)) y$y.levels <- levels(y$y) if(is.null(y$tJac)) { y <- c(y, makeThresholds(y$y.levels, y$threshold)) } if(is.null(y$aliased)) y <- drop.cols(y, silent=TRUE, drop.scale=FALSE) ## Make model environment: rho <- do.call(clm.newRho, y) setLinks(rho, y$link) start <- set.start(rho, start=y$start, get.start=is.null(y$start), threshold=y$threshold, link=y$link, frames=y) rho$par <- as.vector(start) ## remove attributes if(y$doFit == FALSE) return(rho) if(length(rho$lambda) > 0 && y$control$method != "nlminb") { message("Changing to 'nlminb' optimizer for flexible link function") y$control$method <- "nlminb" } ## Fit the model: fit <- if(length(rho$lambda) > 0) { clm_fit_flex(rho, control=y$control$ctrl) } else if(y$control$method == "Newton") { clm_fit_NR(rho, y$control) } else { clm_fit_optim(rho, y$control$method, y$control$ctrl) } ## Adjust iteration count: if(y$control$method == "Newton" && !is.null(start.iter <- attr(start, "start.iter"))) fit$niter <- fit$niter + start.iter ## Update coefficients, gradient, Hessian, edf, nobs, n, ## fitted.values, df.residual: fit <- clm.finalize(fit, y$weights, y$coef.names, y$aliased) fit$tJac <- format_tJac(y$tJac, y$y.levels, y$alpha.names) th.res <- formatTheta(fit$alpha, fit$tJac, y, y$control$sign.nominal) ## Check convergence: conv <- conv.check(fit, control=y$control, Theta.ok=th.res$Theta.ok, tol=y$control$tol) print.conv.check(conv, action=y$control$convergence) ## print convergence message th.res$Theta.ok <- NULL fit <- c(fit, conv[c("vcov", "cond.H")], th.res) fit$convergence <- conv[!names(conv) %in% c("vcov", "cond.H")] fit <- fit[sort(names(fit))] class(fit) <- "clm.fit" fit } clm.finalize <- function(fit, weights, coef.names, aliased) ### extracFromFit ### ### distinguishing between par and coef where the former does not ### contain aliased coefficients. { nalpha <- length(aliased$alpha) nbeta <- length(aliased$beta) nzeta <- length(aliased$zeta) nlambda <- length(fit$lambda) ncoef <- nalpha + nbeta + nzeta + nlambda ## including aliased coef npar <- sum(!unlist(aliased)) + nlambda ## excluding aliased coef stopifnot(length(fit$par) == npar) if(nlambda) aliased <- c(aliased, list(lambda = FALSE)) if(nlambda) coef.names <- c(coef.names, list(lambda="lambda")) fit <- within(fit, { coefficients <- rep(NA, ncoef) ## ensure correct order of alpha, beta and zeta: keep <- match(c("alpha", "beta", "zeta", "lambda"), names(aliased), nomatch=0) aliased <- lapply(aliased[keep], as.logical) for(i in names(aliased)) names(aliased[[i]]) <- coef.names[keep][[i]] names(coefficients) <- unlist(coef.names[keep]) par.names <- names(coefficients)[!unlist(aliased)] coefficients[!unlist(aliased)] <- par alpha <- coefficients[1:nalpha] if(nbeta) beta <- coefficients[nalpha + 1:nbeta] if(nzeta) zeta <- coefficients[nalpha + nbeta + 1:nzeta] names(gradient) <- par.names dimnames(Hessian) <- list(par.names, par.names) edf <- npar ## estimated degrees of freedom nobs <- sum(weights) n <- length(weights) fitted.values <- fitted df.residual = nobs - edf ## keep <- i <- fitted <- par.names <- par <- coef.names <- NULL }) notkeep <- c("keep", "i", "fitted", "par.names", "par", "coef.names") fit[!names(fit) %in% notkeep] } ordinal/R/clmm.ranef.R0000644000175100001440000000675314533321514014302 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Implementation of ranef and condVar methods for clmm objects to ## extract the conditional model of the random-effects and their ## conditional variances. ## fixef.clmm <- function(object, ...) coef(object, ...) ## object$coefficients ### NOTE: Should return a *named* vector # ranef <- function(object, ...) UseMethod("ranef") ## fixef <- function(object, ...) UseMethod("fixef") ranef.clmm <- function(object, condVar=FALSE, ...) ### This function... ### args... ### Returns.... { formatRanef <- function(relist, ST, gf.levels, assign, qi) { asgn <- split(seq_along(assign), assign) ## colnames of random effects: cn <- lapply(ST, colnames) cn <- lapply(asgn, function(ii) unlist(cn[ii])) ranefList <- lapply(seq_along(relist), function(i) { matrix(relist[[i]], ncol=qi[i]) }) ## Combine r.e. terms associated with the same grouping factors, ## set dimnames and coerce to data.frame: ranefList <- lapply(seq_along(asgn), function(i) { mat <- do.call(cbind, ranefList[ asgn[[i]] ]) dimnames(mat) <- list(gf.levels[[i]], cn[[i]]) as.data.frame(mat) }) ## list of r.e. by grouping factors: names(ranefList) <- names(gflevs) ranefList } ## which r.e. terms are associated with which grouping factors: asgn <- attributes(object$gfList)$assign ## names of levels of grouping factors: gflevs <- lapply(object$gfList, levels) ## random effects indicator factor: reind <- with(object$dims, factor(rep.int(seq_len(nretrms), nlev.re * qi))) ## list of random effects by r.e. term: relist <- split(object$ranef, reind) ranefList <- formatRanef(relist, object$ST, gflevs, asgn, object$dims$qi) if(condVar) { ### OPTION: Should we return matrices for vector-valued random effects ### as lmer does? ## Add conditional variances of the random effects: cond.var <- object$condVar if(NCOL(cond.var) > 1) cond.var <- diag(cond.var) cvlist <- split(cond.var, reind) cond.var <- formatRanef(cvlist, object$ST, gflevs, asgn, object$dims$qi) for(i in seq_along(ranefList)) attr(ranefList[[i]], "condVar") <- cond.var[[i]] } ranefList } condVar <- function(object, ...) UseMethod("condVar") condVar.clmm <- function(object, ...) lapply(ranef.clmm(object, condVar=TRUE), function(y) attr(y, "condVar")) ordinal/R/clmm2.R0000644000175100001440000010215214533321514013260 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## The main clmm2 function and some related auxiliary functions. clmm2.control <- function(method = c("ucminf", "nlminb", "model.frame"), ..., trace = 0, maxIter = 50, gradTol = 1e-4, maxLineIter = 50, innerCtrl = c("warnOnly", "noWarn", "giveError")) { method <- match.arg(method) innerCtrl <- match.arg(innerCtrl) ctrl <- list(trace=ifelse(trace < 0, 1, 0), maxIter=maxIter, gradTol=gradTol, maxLineIter=maxLineIter, innerCtrl=innerCtrl) optCtrl <- list(trace = abs(trace), ...) if(!is.numeric(unlist(ctrl[-5]))) stop("maxIter, gradTol, maxLineIter and trace should all be numeric") if(any(ctrl[-c(1, 5)] <= 0)) stop("maxIter, gradTol and maxLineIter have to be > 0") if(method == "ucminf" && !"grtol" %in% names(optCtrl)) optCtrl$grtol <- 1e-5 if(method == "ucminf" && !"grad" %in% names(optCtrl)) optCtrl$grad <- "central" list(method = method, ctrl = ctrl, optCtrl = optCtrl) } .negLogLikBase <- function(rho) { ### Update stDev, sigma, eta1Fix, and eta2Fix given new par: with(rho, { if(estimLambda > 0) lambda <- par[nxi + p + k + 1:estimLambda] if(estimStDev) stDev <- exp(par[p+nxi+k+estimLambda+ 1:s]) sigma <- if(k > 0) expSoffset * exp(drop(Z %*% par[nxi+p + 1:k])) else expSoffset eta1Fix <- drop(B1 %*% par[1:(nxi + p)]) eta2Fix <- drop(B2 %*% par[1:(nxi + p)]) }) return(invisible()) } .negLogLikMfast <- function(rho) { ## negative log-likelihood fit <- with(rho, { .C("nll", as.double(u), length(u), as.integer(grFac), as.double(stDev), as.double(o1), as.double(o2), length(o1), eta1 = as.double(eta1), eta2 = as.double(eta2), as.double(eta1Fix), as.double(eta2Fix), as.double(sigma), pr = as.double(pr), as.double(weights), as.double(lambda), as.integer(linkInt), nll = double(1) )[c("eta1", "eta2", "pr", "nll")] }) rho$eta1 <- fit$eta1 rho$eta2 <- fit$eta2 rho$pr <- fit$pr fit$nll } update.u2.v3 <- function(rho) { ### third version: C-implementation of NR-algorithm. .negLogLikBase(rho) ## update: par, stDev, eta1Fix, eta2Fix eta2Fix, sigma fit <- with(rho, .C("NRalgv3", as.integer(ctrl$trace), as.integer(ctrl$maxIter), as.double(ctrl$gradTol), as.integer(ctrl$maxLineIter), as.integer(grFac), as.double(stDev), as.double(o1), as.double(o2), as.double(eta1Fix), as.double(eta2Fix), as.double(sigma), as.integer(linkInt), as.double(weights), u = as.double(uStart), pr = as.double(pr), funValue = double(1), gradValues = as.double(uStart), hessValues = as.double(rep(1, length(uStart))), length(pr), length(uStart), maxGrad = double(1), conv = 0L, as.double(lambda), Niter = as.integer(Niter) )[c("u", "funValue", "gradValues", "hessValues", "maxGrad", "conv", "Niter")] ) ## Get message: message <- switch(as.character(fit$conv), "1" = "max|gradient| < tol, so current iterate is probably solution", "0" = "Non finite negative log-likelihood", "-1" = "iteration limit reached when updating the random effects", "-2" = "step factor reduced below minimum when updating the random effects") ## Check for convergence and report warning/error: if(rho$ctrl$trace > 0 && fit$conv == 1) cat("\nOptimizer converged! ", "max|grad|:", fit$maxGrad, message, fill = TRUE) if(fit$conv != 1 && rho$ctrl$innerCtrl == "warnOnly") warning(message, "\n at iteration ", rho$Niter) else if(fit$conv != 1 && rho$ctrl$innerCtrl == "giveError") stop(message, "\n at iteration ", rho$Niter) ## Store values and return: rho$Niter <- fit$Niter rho$u <- fit$u rho$D <- fit$hessValue rho$gradient <- fit$gradValue if(!is.finite(rho$negLogLik <- fit$funValue)) return(FALSE) return(TRUE) } clmm2 <- function(location, scale, nominal, random, data, weights, start, subset, na.action, contrasts, Hess = FALSE, model = TRUE, sdFixed, link = c("logistic", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), lambda, doFit = TRUE, control, nAGQ = 1, threshold = c("flexible", "symmetric", "equidistant"), ...) ## Handle if model = FALSE ### Marginal fitted values? (pr | u = 0) or (pr | u = u.tilde) ? ### How can we (should we?) get u.tilde and var(u.tilde) with GHQ? ### Make safeStart function if !is.finite(negLogLik) ### Write test suite for doFit argument { R <- match.call(expand.dots = FALSE) Call <- match.call() if(missing(random)) { Call[[1]] <- as.name("clm2") return(eval.parent(Call)) } if(missing(lambda)) lambda <- NULL if(missing(contrasts)) contrasts <- NULL if(missing(control)) control <- clmm2.control(...) if(!setequal(names(control), c("method", "ctrl", "optCtrl"))) stop("specify 'control' via clmm2.control()") if (missing(data)) data <- environment(location) if (is.matrix(eval.parent(R$data))) R$data <- as.data.frame(data) ### Collect all variables in a single formula and evaluate to handle ### missing values correctly: m <- match(c("location", "scale", "nominal"), names(R), 0) F <- lapply(as.list(R[m]), eval.parent) ## evaluate in parent varNames <- unique(unlist(lapply(F, all.vars))) longFormula <- eval(parse(text = paste("~", paste(varNames, collapse = "+")))[1]) m <- match(c("location", "data", "subset", "weights", "random", "na.action"), names(R), 0) R <- R[c(1, m)] R$location <- longFormula R$drop.unused.levels <- TRUE R[[1]] <- as.name("model.frame") names(R)[names(R) == "location"] <- "formula" R <- eval.parent(R) nonNA <- rownames(R) ### Append nonNA index to Call$subset to get the right design matrices ### from clm2: Call$subset <- if(is.null(Call$subset)) nonNA else c(paste(deparse(Call$subset), "&"), nonNA) Call$start <- if(is.null(Call$start) || !is.null(Call$sdFixed)) Call$start else start[-length(start)] Call$random <- Call$control <- Call$nAGQ <- Call$sdFixed <- Call$innerCtrl <- NULL Call$method <- control$method Call$doFit <- Call$Hess <- FALSE Call[[1]] <- as.name("clm2") rhoM <- eval.parent(Call) if(control$method == "model.frame") return(rhoM) rhoM$call <- match.call() rhoM$randomName <- deparse(rhoM$call$random) ### Set grouping factor and stDev parameter: rhoM$grFac <- R[,"(random)"] if(!missing(sdFixed) && !is.null(sdFixed)) { stopifnot(length(sdFixed) == 1 && sdFixed > 0) rhoM$estimStDev <- FALSE rhoM$stDev <- sdFixed } else rhoM$estimStDev <- TRUE with(rhoM, { r <- nlevels(grFac) ## no. random effects grFac <- as.integer(unclass(grFac)) if(r <= 2) stop("Grouping factor must have 3 or more levels") s <- ifelse(estimStDev, 1L, 0L) ## no. variance parameters Niter <- 0L }) ### set starting values: if(missing(start)) { suppressWarnings(fitCLM(rhoM)) if(rhoM$estimStDev) rhoM$start <- rhoM$par <- c(rhoM$par, log(1)) else rhoM$start <- rhoM$par } else rhoM$start <- rhoM$par <- start rhoM$uStart <- rhoM$u <- rep(0, rhoM$r) ### Test starting values: if(length(rhoM$start) != with(rhoM, nxi + p + k + estimLambda + estimStDev)) stop("'start' is ", length(rhoM$start), " long, but should be ", with(rhoM, nxi + p + k + estimLambda + estimStDev), " long") if(rhoM$ncolXX == 0) { if(!all(diff(c(rhoM$tJac %*% rhoM$start[1:rhoM$nalpha])) > 0)) stop("Threshold starting values are not of increasing size") } ### Change the lower limit if lambda is estimated with the ### Aranda-Ordaz link and sdFixed is not supplied: if(rhoM$estimLambda > 0 && rhoM$link == "Aranda-Ordaz" && is.null(rhoM$call$sdFixed)) rhoM$limitLow <- c(rep(-Inf, length(rhoM$par)-2), 1e-5, -Inf) ### This should hardly ever be the case: .negLogLikBase(rhoM) ## set lambda, stDev, sigma, eta1Fix and eta2Fix if(!is.finite(.negLogLikMfast(rhoM))) stop("Non-finite integrand at starting values") rhoM$ctrl <- control$ctrl rhoM$optCtrl <- control$optCtrl if(rhoM$method == "nlminb") { m <- match(names(rhoM$optCtrl), c("grad","grtol"), 0) rhoM$optCtrl <- rhoM$optCtrl[!m] } ### Match doFit: if(is.logical(doFit) || is.numeric(doFit)) { if(doFit) doFit <- "C" else doFit <- "no" } else if(!is.character(doFit) || !doFit %in% c("no", "R", "C")) stop("argument 'doFit' not recognized. 'doFit' should be\n numeric, logical or one of c('no', 'R', 'C')") ### Set ObjFun parameters: ObjFun <- getNLA2 ## same for "R" and "C" rhoM$updateU <- if(doFit == "R") update.u2 else update.u2.v3 rhoM$nAGQ <- as.integer(nAGQ) if(rhoM$nAGQ >= 2) { ghq <- gauss.hermite(rhoM$nAGQ) rhoM$ghqns <- ghq$nodes rhoM$ghqws <- ghq$weights if(doFit == "R") { ObjFun <- getNAGQinR rhoM$PRnn <- array(0, dim=c(rhoM$n, rhoM$nAGQ)) rhoM$PRrn <- array(0, dim=c(rhoM$r, rhoM$nAGQ)) rhoM$ghqws <- ghq$weights * exp(rhoM$ghqns^2) } else ObjFun <- getNAGQinC } if(rhoM$nAGQ <= -1) { ghq <- gauss.hermite(abs(rhoM$nAGQ)) rhoM$ghqns <- ghq$nodes rhoM$ghqws <- ghq$weights * exp((ghq$nodes^2)/2) if(doFit == "R"){ ObjFun <- getNGHQinR } else { ObjFun <- getNGHQinC rhoM$ghqws <- log(ghq$weights) + (ghq$nodes^2)/2 } } stopifnot(rhoM$nAGQ != 0) ## test needed? ### Fit the model: if(!doFit %in% c("C", "R")) return(rhoM) if(rhoM$nAGQ > -1) rhoM$updateU(rhoM) # Try updating the random effects rhoM$optRes <- switch(rhoM$method, "ucminf" = ucminf(rhoM$start, function(x) ObjFun(rhoM, x), control=rhoM$optCtrl), "nlminb" = nlminb(rhoM$start, function(x) ObjFun(rhoM, x), control=rhoM$optCtrl, lower = rhoM$limitLow, upper = rhoM$limitUp)) rhoM$par <- rhoM$optRes[[1]] if(Hess) { if(rhoM$link == "Aranda-Ordaz" && rhoM$estimLambda > 0 && rhoM$lambda < 1e-3) message("Cannot get Hessian because lambda = ",rhoM$lambda ," is too close to boundary.\n", " Fit model with link == 'logistic' to get Hessian") else { rhoM$Hessian <- myhess(function(x) ObjFun(rhoM, x), rhoM$par) rhoM$par <- rhoM$optRes[[1]] } } .negLogLikMfast(rhoM) ## update pr ## if(rhoM$nAGQ > -1) rhoM$updateU(rhoM) # Makes sure ranef's are evaluated at the optimum ### Post processing: res <- finalizeRhoM(rhoM) res$call <- match.call() res$na.action <- attr(R, "na.action") res$contrasts <- contrasts class(res) <- c("clmm2", "clm2") res } getNLA2 <- function(rho, par) { ### negative log-likelihood by the Laplace approximation ### (with update.u2 in C or R): if(!missing(par)) rho$par <- par if(!rho$updateU(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) ## logDetD <- sum(log(rho$D/(2*pi))) logDetD <- sum(log(rho$D)) - rho$r * log(2*pi) rho$negLogLik + logDetD / 2 } getNAGQinR <- function(rho, par) { ### negative log-likelihood by adaptive Gauss-Hermite quadrature ### implemented in R: if(!missing(par)) rho$par <- par if(!rho$updateU(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) with(rho, { K <- sqrt(2/D) agqws <- K %*% t(ghqws) agqns <- apply(K %*% t(ghqns), 2, function(x) x + u) ranNew <- apply(agqns, 2, function(x) x[grFac] * stDev) eta1Tmp <- (eta1Fix + o1 - ranNew) / sigma eta2Tmp <- (eta2Fix + o2 - ranNew) / sigma if(nlambda) ## PRnn <- (pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))^weights ## This is likely a computationally more safe solution: PRnn <- exp(weights * log(pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))) else ## PRnn <- (pfun(eta1Tmp) - pfun(eta2Tmp))^weights PRnn <- exp(weights * log(pfun(eta1Tmp) - pfun(eta2Tmp))) ### OPTION: The fitted values could be evaluated with getFittedC for ### better precision. for(i in 1:r) ## PRrn[i,] <- apply(PRnn[grFac == i, ], 2, prod) PRrn[i,] <- apply(PRnn[grFac == i, ,drop = FALSE], 2, prod) PRrn <- PRrn * agqws * dnorm(x=agqns, mean=0, sd=1) ### OPTION: Could this be optimized by essentially computing dnorm 'by hand'? }) -sum(log(rowSums(rho$PRrn))) } ## tmpAGQ(rho) tmpAGQ <- function(rho, par) { if(!missing(par)) rho$par <- par with(rho, { ls() stDev <- exp(ST[[1]][1, 1]) nlambda <- 0 K <- sqrt(2/D) agqws <- K %*% t(ghqws) agqns <- apply(K %*% t(ghqns), 2, function(x) x + u) grFac <- unclass(grFac) ranNew <- apply(agqns, 2, function(x) x[grFac] * stDev) eta1Tmp <- (eta1Fix + o1 - ranNew) / sigma eta2Tmp <- (eta2Fix + o2 - ranNew) / sigma if(nlambda) PRnn <- exp(weights * log(pfun(eta1Tmp, lambda) - pfun(eta2Tmp, lambda))) else PRnn <- exp(wts * log(pfun(eta1Tmp) - pfun(eta2Tmp))) dim(eta1Tmp) exp(wts[IND] * log(pfun(eta1Tmp[IND, ]) - pfun(eta2Tmp[IND, ]))) PRrn <- do.call(rbind, lapply(1:dims$q, function(i) { apply(PRnn[grFac == i, ,drop = FALSE], 2, prod) })) head(PRrn) PRrn <- do.call(rbind, lapply(1:dims$q, function(i) { apply(PRnn[grFac == i, ,drop = FALSE], 2, function(x) sum(log(x))) })) head(PRrn) ## Could we do something like PRnn <- wts * log(pfun(eta1Tmp) - pfun(eta2Tmp)) PRrn <- do.call(rbind, lapply(1:dims$q, function(i) { apply(PRnn[grFac == i, ,drop = FALSE], 2, function(x) sum(x)) })) head(PRrn, 20) ## to avoid first exp()ing and then log()ing? head(exp(PRrn), 20) range(PRrn) exp(range(PRrn)) out <- PRrn + log(agqws) + log(dnorm(x=agqns, mean=0, sd=1)) log(2 * 3) log(2) + log(3) PRnn[grFac == 12, , drop=FALSE] IND <- which(grFac == 12) cbind(IND, wts[IND], PRnn[IND, ]) dim(PRrn) ## There seems to be underfloow allready in the computations ## in PRnn, which propagates to PRrn PRrn <- PRrn * agqws * dnorm(x=agqns, mean=0, sd=1) }) -sum(log(rowSums(rho$PRrn))) } getNAGQinC <- function(rho, par) { ### negative log-likelihood by adaptive Gauss-Hermite quadrature ### implemented in C: if(!missing(par)) rho$par <- par if(!rho$updateU(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) with(rho, { .C("getNAGQ", nll = double(1), ## nll as.integer(grFac), ## grFac as.double(stDev), ## stDev as.double(eta1Fix), as.double(eta2Fix), as.double(o1), as.double(o2), as.double(sigma), ## Sigma as.double(weights), length(sigma), ## nx - no. obs length(uStart), ## nu - no. re as.double(ghqns), as.double(log(ghqws)), ## lghqws as.double(ghqns^2), ## ghqns2 as.double(u), as.double(D), as.integer(abs(nAGQ)), as.integer(linkInt), as.double(lambda))$nll }) } getNGHQinR <- function(rho, par) { ### negative log-likelihood by standard Gauss-Hermite quadrature ### implemented in R: if(!missing(par)) rho$par <- par .negLogLikBase(rho) ## Update lambda, stDev, sigma and eta*Fix with(rho, { ns <- ghqns * stDev SS <- numeric(r) ## summed likelihood for(i in 1:r) { ind <- grFac == i eta1Fi <- eta1Fix[ind] eta2Fi <- eta2Fix[ind] o1i <- o1[ind] o2i <- o2[ind] si <- sigma[ind] wt <- weights[ind] for(h in 1:abs(nAGQ)) { eta1s <- (eta1Fi + o1i - ns[h]) / si eta2s <- (eta2Fi + o2i - ns[h]) / si ## SS[i] <- exp(sum(wt * log(pfun(eta1s) - pfun(eta2s)))) * ## ghqws[h] * exp(ghqns[h]^2) * dnorm(x=ghqns[h]) + SS[i] SS[i] <- exp(sum(wt * log(pfun(eta1s) - pfun(eta2s)))) * ghqws[h] + SS[i] ### OPTION: The fitted values could be evaluated with getFittedC for ### better precision. } } -sum(log(SS)) + r * log(2*pi)/2 }) } getNGHQinC <- function(rho, par) { ### negative log-likelihood by standard Gauss-Hermite quadrature ### implemented in C: if(!missing(par)) rho$par <- par .negLogLikBase(rho) ## Update lambda, stDev, sigma and eta*Fix with(rho, { .C("getNGHQ_C", nll = double(1), as.integer(grFac), as.double(stDev), as.double(eta1Fix), as.double(eta2Fix), as.double(o1), as.double(o2), as.double(sigma), as.double(weights), length(sigma), length(uStart), as.double(ghqns), as.double(ghqws), as.integer(abs(nAGQ)), as.integer(linkInt), as.double(ghqns * stDev), as.double(lambda))$nll }) } finalizeRhoM <- function(rhoM) { if(rhoM$method == "ucminf") { if(rhoM$optRes$info[1] > rhoM$optCtrl[["grtol"]]) warning("clmm2 may not have converged:\n optimizer 'ucminf' terminated with max|gradient|: ", rhoM$optRes$info[1], call.=FALSE) rhoM$convergence <- ifelse(rhoM$optRes$info[1] > rhoM$optCtrl[["grtol"]], FALSE, TRUE) } if(rhoM$method == "nlminb") { rhoM$convergence <- ifelse(rhoM$optRes$convergence == 0, TRUE, FALSE) if(!rhoM$convergence) warning("clmm2 may not have converged:\n optimizer 'nlminb' terminated with message: ", rhoM$optRes$message, call.=FALSE) } if(rhoM$ctrl$gradTol < max(abs(rhoM$gradient))) warning("Inner loop did not converge at termination:\n max|gradient| = ", max(abs(rhoM$gradient))) with(rhoM, { if(nxi > 0) { xi <- par[1:nxi] names(xi) <- xiNames thetaNames <- paste(lev[-length(lev)], lev[-1], sep="|") Alpha <- Theta <- matrix(par[1:nxi], nrow=ncolXX, byrow=TRUE) Theta <- t(apply(Theta, 1, function(x) c(tJac %*% x))) if(ncolXX > 1){ dimnames(Theta) <- list(dnXX[[2]], thetaNames) dimnames(Alpha) <- list(dnXX[[2]], alphaNames) } else { Theta <- c(Theta) Alpha <- c(Alpha) names(Theta) <- thetaNames names(Alpha) <- alphaNames } coefficients <- xi } else coefficients <- numeric(0) if(p > 0) { beta <- par[nxi + 1:p] names(beta) <- dnX[[2]] coefficients <- c(coefficients, beta) } if(k > 0) { zeta <- par[nxi+p + 1:k] names(zeta) <- dnZ[[2]] coefficients <- c(coefficients, zeta) } if(estimLambda > 0) { names(lambda) <- "lambda" coefficients <- c(coefficients, lambda) } if(s > 0) { stDev <- exp(par[nxi+p+k + estimLambda + 1:s]) coefficients <- c(coefficients, stDev) } names(stDev) <- randomName if(exists("Hessian", inherits=FALSE)) dimnames(Hessian) <- list(names(coefficients), names(coefficients)) edf <- p + nxi + k + estimLambda + s nobs <- sum(weights) fitted.values <- pr df.residual = nobs - edf ranef <- u * stDev condVar <- 1/D * stDev^2 logLik <- -optRes[[2]] }) res <- as.list(rhoM) keepNames <- c("ranef", "df.residual", "fitted.values", "edf", "start", "stDev", "beta", "coefficients", "zeta", "Alpha", "Theta", "xi", "lambda", "convergence", "Hessian", "gradient", "optRes", "logLik", "Niter", "grFac", "call", "scale", "location", "nominal", "method", "y", "lev", "nobs", "threshold", "estimLambda", "link", "nAGQ", "condVar", "contrasts", "na.action") m <- match(keepNames, names(res), 0) res <- res[m] res } anova.clmm2 <- function (object, ..., test = c("Chisq", "none")) { anova.clm2(object, ..., test = c("Chisq", "none")) } print.clmm2 <- function(x, ...) { if(x$nAGQ >= 2) cat(paste("Cumulative Link Mixed Model fitted with the adaptive", "Gauss-Hermite \nquadrature approximation with", x$nAGQ ,"quadrature points"), "\n\n") else if(x$nAGQ <= -1) cat(paste("Cumulative Link Mixed Model fitted with the", "Gauss-Hermite \nquadrature approximation with", abs(x$nAGQ) ,"quadrature points"), "\n\n") else cat("Cumulative Link Mixed Model fitted with the Laplace approximation\n", fill=TRUE) if(!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control=NULL) } if(length(x$stDev)) { cat("\nRandom effects:\n") varMat <- matrix(c(x$stDev^2, x$stDev), nrow = length(x$stDev), ncol=2) rownames(varMat) <- names(x$stDev) colnames(varMat) <- c("Var", "Std.Dev") print(varMat, ...) } else { cat("\nNo random effects\n") } if(length(x$beta)) { cat("\nLocation coefficients:\n") print(x$beta, ...) } else { cat("\nNo location coefficients\n") } if(length(x$zeta)) { cat("\nScale coefficients:\n") print(x$zeta, ...) } else { cat("\nNo Scale coefficients\n") } if(x$estimLambda > 0) { cat("\nLink coefficient:\n") print(x$lambda) } if(length(x$xi) > 0) { cat("\nThreshold coefficients:\n") print(x$Alpha, ...) if(x$threshold != "flexible") { cat("\nThresholds:\n") print(x$Theta, ...) } } cat("\nlog-likelihood:", format(x$logLik, nsmall=2), "\n") cat("AIC:", format(-2*x$logLik + 2*x$edf, nsmall=2), "\n") if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") invisible(x) } vcov.clmm2 <- function(object, ...) { if(is.null(object$Hessian)) { stop("Model needs to be fitted with Hess = TRUE") } dn <- names(object$coefficients) structure(solve(object$Hessian), dimnames = list(dn, dn)) } summary.clmm2 <- function(object, digits = max(3, .Options$digits - 3), correlation = FALSE, ...) { estimStDev <- !("sdFixed" %in% names(as.list(object$call))) edf <- object$edf coef <- with(object, matrix(0, edf-estimStDev, 4, dimnames = list(names(coefficients[seq_len(edf-estimStDev)]), c("Estimate", "Std. Error", "z value", "Pr(>|z|)")))) coef[, 1] <- object$coefficients[seq_len(edf-estimStDev)] if(is.null(object$Hessian)) { stop("Model needs to be fitted with Hess = TRUE") } vc <- try(vcov(object), silent = TRUE) if(inherits(vc, "try-error")) { warning("Variance-covariance matrix of the parameters is not defined") coef[, 2:4] <- NaN if(correlation) warning("Correlation matrix is unavailable") object$condHess <- NaN } else { sd <- sqrt(diag(vc)) coef[, 2] <- sd[seq_len(edf - estimStDev)] object$condHess <- with(eigen(object$Hessian, only.values = TRUE), abs(max(values) / min(values))) coef[, 3] <- coef[, 1]/coef[, 2] coef[, 4] <- 2*pnorm(abs(coef[, 3]), lower.tail=FALSE) if(correlation) object$correlation <- (vc/sd)/rep(sd, rep(object$edf, object$edf)) } object$coefficients <- coef object$digits <- digits varMat <- matrix(c(object$stDev^2, object$stDev), nrow = length(object$stDev), ncol=2) rownames(varMat) <- names(object$stDev) colnames(varMat) <- c("Var", "Std.Dev") object$varMat <- varMat class(object) <- "summary.clmm2" object } print.summary.clmm2 <- function(x, digits = x$digits, signif.stars = getOption("show.signif.stars"), ...) { if(x$nAGQ >=2) cat(paste("Cumulative Link Mixed Model fitted with the adaptive", "Gauss-Hermite \nquadrature approximation with", x$nAGQ ,"quadrature points\n\n")) else if(x$nAGQ <= -1) cat(paste("Cumulative Link Mixed Model fitted with the", "Gauss-Hermite \nquadrature approximation with", abs(x$nAGQ) ,"quadrature points"), "\n\n") else cat("Cumulative Link Mixed Model fitted with the Laplace approximation\n", fill=TRUE) if(!is.null(cl <- x$call)) { cat("Call:\n") dput(cl, control=NULL) } if(length(x$stDev)) { cat("\nRandom effects:\n") print(x$varMat, ...) } else { cat("\nNo random effects\n") } ### OPTION: Should the number of obs. and the number of groups be ### displayed as in clmm? coef <- format(round(x$coefficients, digits=digits)) coef[,4] <- format.pval(x$coefficients[, 4]) p <- length(x$beta); nxi <- length(x$xi) k <- length(x$zeta); u <- x$estimLambda if(p > 0) { cat("\nLocation coefficients:\n") print(coef[nxi + 1:p, , drop=FALSE], quote = FALSE, ...) } else { cat("\nNo location coefficients\n") } if(k > 0) { cat("\nScale coefficients:\n") print(coef[(nxi+p+1):(nxi+p+k), , drop=FALSE], quote = FALSE, ...) } else { cat("\nNo scale coefficients\n") } if(x$estimLambda > 0) { cat("\nLink coefficients:\n") print(coef[(nxi+p+k+1):(nxi+p+k+u), , drop=FALSE], quote = FALSE, ...) } if(nxi > 0) { cat("\nThreshold coefficients:\n") print(coef[1:nxi, -4, drop=FALSE], quote = FALSE, ...) } cat("\nlog-likelihood:", format(x$logLik, nsmall=2), "\n") cat("AIC:", format(-2*x$logLik + 2*x$edf, nsmall=2), "\n") cat("Condition number of Hessian:", format(x$condHess, nsmall=2), "\n") if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") if(!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } invisible(x) } ## ranef.clmm2 <- function(x) { ## x$ranef ## } ## Trace <- function(iter, stepFactor, val, maxGrad, par, first=FALSE) { ## t1 <- sprintf(" %3d: %-5e: %.3f: %1.3e: ", ## iter, stepFactor, val, maxGrad) ## t2 <- formatC(par) ## if(first) ## cat("iter: step factor: Value: max|grad|: Parameters:\n") ## cat(t1, t2, "\n") ## } gauss.hermite <- function (n) { n <- as.integer(n) if (n < 0) stop("need non-negative number of nodes") if (n == 0) return(list(nodes = numeric(0), weights = numeric(0))) i <- 1:n i1 <- i[-n] muzero <- sqrt(pi) a <- rep(0, n) b <- sqrt(i1/2) A <- rep(0, n * n) A[(n + 1) * (i1 - 1) + 2] <- b A[(n + 1) * i1] <- b dim(A) <- c(n, n) vd <- eigen(A, symmetric = TRUE) w <- rev(as.vector(vd$vectors[1, ])) w <- muzero * w^2 x <- rev(vd$values) list(nodes = x, weights = w) } profile.clmm2 <- function(fitted, alpha = 0.01, range, nSteps = 20, trace = 1, ...) { estimStDev <- !("sdFixed" %in% names(as.list(fitted$call))) if(!estimStDev) ## || is.null(fitted$Hessian)) fitted <- update(fitted, Hess = TRUE, sdFixed = NULL) MLogLik <- fitted$logLik MLstDev <- fitted$stDev if(missing(range) && is.null(fitted$Hessian)) stop("'range' should be specified or model fitted with 'Hess = TRUE'") if(missing(range) && !is.null(fitted$Hessian)) { range <- log(fitted$stDev) + qnorm(1 - alpha/2) * c(-1, 1) * sqrt(vcov(fitted)[fitted$edf, fitted$edf]) range <- exp(range) pct <- paste(round(100*c(alpha/2, 1-alpha/2), 1), "%") ci <- array(NA, dim = c(1, 2), dimnames = list("stDev", pct)) ci[] <- range } stopifnot(all(range > 0)) logLik <- numeric(nSteps) stDevSeq <- seq(min(range), max(range), length.out = nSteps) if(trace) message("Now profiling stDev with ", nSteps, " steps: i =") if(trace) cat(1, "") rho <- update(fitted, Hess = FALSE, sdFixed = min(range)) logLik[1] <- rho$logLik start <- as.vector(rho$coefficients) for(i in 2:nSteps){ if(trace) cat(i, "") rho <- update(rho, sdFixed = stDevSeq[i], start = start) logLik[i] <- rho$logLik start <- as.vector(rho$coefficients) } if(trace) cat("\n") if(any(logLik > fitted$logLik)) warning("Profiling found a better optimum,", " so original fit had not converged") sgn <- 2*(stDevSeq > MLstDev) -1 Lroot <- sgn * sqrt(2) * sqrt(-logLik + MLogLik) res <- data.frame("Lroot" = c(0, Lroot), "stDev" = c(MLstDev, stDevSeq)) res <- res[order(res[,1]),] if(!all(diff(res[,2]) > 0)) warning("likelihood is not monotonically decreasing from maximum,\n", " so profile may be unreliable for stDev") val <- structure(list(stDev = res), original.fit = fitted) if(exists("ci", inherits=FALSE)) attr(val, "WaldCI") <- ci class(val) <- c("profile.clmm2", "profile") val } confint.profile.clmm2 <- function(object, parm = seq_along(Pnames), level = 0.95, ...) { Pnames <- names(object) confint.profile.clm2(object, parm = parm, level = level, ...) } plot.profile.clmm2 <- function(x, parm = seq_along(Pnames), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, fig = TRUE, n = 1e3, ..., ylim = NULL) { Pnames <- names(x) plot.profile.clm2(x, parm = parm, level = level, Log = Log, relative = relative, fig = fig, n = n, ..., ylim = ylim) } update.clmm2 <- function(object, formula., location, scale, nominal, ..., evaluate = TRUE) { call <- object$call if (is.null(call)) stop("need an object with call component") extras <- match.call(expand.dots = FALSE)$... if (!missing(location)) call$location <- update.formula(formula(attr(object$location, "terms")), location) if (!missing(scale)) call$scale <- if(!is.null(object$scale)) update.formula(formula(attr(object$scale, "terms")), scale) else scale if (!missing(nominal)) call$nominal <- if(!is.null(object$nominal)) update.formula(formula(attr(object$nominal, "terms")), nominal) else nominal if (length(extras)) { existing <- !is.na(match(names(extras), names(call))) for (a in names(extras)[existing]) call[[a]] <- extras[[a]] if (any(!existing)) { call <- c(as.list(call), extras[!existing]) call <- as.call(call) } } if (evaluate) eval(call, parent.frame()) else call } ordinal/R/clm.frames.R0000644000175100001440000002412214533321514014275 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## methods for computing, manipulating and extracting design matrices, ## weights, offsets, model.frames and things like that. ## ################################# ## ## call sequence ## clm() { ## get_clmFormulas() ## get_clm.mf() ## get_clmTerms() # optionally ## get_clmDesign() ## ## makeThresholds() ## drop.cols() ## ## clm.fit.default() ## get_clmInfoTab() ## } ## ## get_clmFormulas() { ## getFullForm() ## } ## ## get_clm.mf() { ## model.frame() ## } ## ## get_clmTerms() { ## get_clm.mf() ## } ## ## get_clmDesign() { ## checkContrasts() ## get_clmDM() ## for formula, scale, nominal ## getWeights() ## get_clmY() ## } ## ## get_clmDM() { ## model.matrix() ## getContrasts() ## getOffset() ## } get_clmTerms <- function(mc, formulas, call.envir=parent.frame(2L)) ### Compute terms objects for each of the formulas. { ## We need this approach in order to get the predvars and ## dataClasses attributes of the terms objects. nms <- c("formula", "scale", "nominal") keep <- match(nms, names(formulas), nomatch=0) lapply(formulas[keep], function(form) { terms(get_clm.mf(mc, form, attr(formulas, "envir"), call.envir)) }) } get_clmDesign <- function(fullmf, terms.list, contrasts) { ### Compute (y, X, weights, off, S, NOM etc.) for a clm object. ### clm-internal+external ### ### terms.list: list of terms.objects. stopifnot(all(sapply(terms.list, inherits, "terms"))) ## Check that contrasts are specified only for terms in the model: checkContrasts(terms=attr(fullmf, "terms"), contrasts=contrasts) ## Extract X (design matrix for location effects) + terms, offset: res <- get_clmDM(fullmf, terms.list[["formula"]], contrasts, type="formula") res$terms <- terms.list[["formula"]] res$contrasts <- attr(res$X, "contrasts") res$xlevels <- .getXlevels(res$terms, fullmf) res$na.action <- attr(fullmf, "na.action") ## Extract weights: res$weights <- getWeights(fullmf) ## Extract model response: res <- c(get_clmY(fullmf, res$weights), res) ## Extract S (design matrix for the scale effects): if(!is.null(terms.list$scale)) { ans <- get_clmDM(fullmf, terms.list[["scale"]], contrasts, type="scale") res$S <- ans$X res$S.terms <- terms.list[["scale"]] res$S.off <- ans$offset res$S.contrasts <- attr(res$S, "contrasts") res$S.xlevels <- .getXlevels(res$S.terms, fullmf) if(attr(res$S.terms, "response") != 0) stop("response not allowed in 'scale'", call.=FALSE) } ## Extract NOM (design matrix for the nominal effects): if(!is.null(terms.list$nominal)) { ans <- get_clmDM(fullmf, terms.list[["nominal"]], contrasts, type="nominal") res$NOM <- ans$X res$nom.terms <- terms.list[["nominal"]] res$nom.contrasts <- attr(res$NOM, "contrasts") res$nom.xlevels <- .getXlevels(res$nom.terms, fullmf) if(attr(res$nom.terms, "response") != 0) stop("response not allowed in 'nominal'", call.=FALSE) if(!is.null(attr(res$nom.terms, "offset"))) stop("offset not allowed in 'nominal'", call.=FALSE) } ## Return results (list of design matrices etc.): res ### NOTE: X, S and NOM are with dimnames and intercepts are ### guaranteed. They may be column rank deficient. } get_clmDM <- function(fullmf, terms, contrasts, check.intercept=TRUE, type="formula", get.offset=TRUE) ### Get DM (=Design Matrix): { X <- model.matrix(terms, data=fullmf, contrasts.arg=getContrasts(terms, contrasts)) ## Test for intercept in X(?): Xint <- match("(Intercept)", colnames(X), nomatch = 0) if(check.intercept && Xint <= 0) { X <- cbind("(Intercept)" = rep(1, nrow(X)), X) warning(gettextf("an intercept is needed and assumed in '%s'", type), call.=FALSE) } ## Intercept in X is guaranteed. res <- list(X=X) if(get.offset) res$offset <- getOffset(fullmf, terms) res } get_clm.mf <- function(mc, formula, form.envir, call.envir=parent.frame(2L)) ### clm-internal ### Extract the model.frame from formula ### mc - matched call containing: data, subset, weights, na.action { ## Extract the full model.frame(mf): m <- match(c("data", "subset", "weights", "na.action"), names(mc), 0) mfcall <- mc[c(1, m)] mfcall$formula <- formula mfcall$drop.unused.levels <- TRUE mfcall[[1]] <- as.name("model.frame") if(is.null(mfcall$data)) mfcall$data <- form.envir eval(mfcall, envir=call.envir) } get_clmY <- function(fullmf, weights) { y <- model.response(fullmf, "any") ## any storage mode if(is.null(y)) stop("'formula' needs a response", call.=FALSE) if(!is.factor(y)) stop("response in 'formula' needs to be a factor", call.=FALSE) ## y.levels are the levels of y with positive weights y.levels <- levels(droplevels(y[weights > 0])) ## check that y has at least two levels: if(length(y.levels) == 1L) stop(gettextf("response has only 1 level ('%s'); expecting at least two levels", y.levels), call.=FALSE) if(!length(y.levels)) stop("response should be a factor with at least two levels") ## return: list(y=y, y.levels=y.levels) } get_clmFormulas <- function(mc, envir=parent.frame(2L)) ### clm-internal ### Extracts and returns a list of formulas needed for further processing. ### mc: matched call ### envir: environment in which mc is to be evaluated { ## Collect all variables in a full formula: ## evaluate the formulae in the enviroment in which clm was called ## (parent.frame(2)) to get them evaluated properly: forms <- list(eval(mc$formula, envir=envir)) if(!is.null(mc$scale)) forms$scale <- eval(mc$scale, envir=envir) if(!is.null(mc$nominal)) forms$nominal <- eval(mc$nominal, envir=envir) ## get the environment of the formula. If this does not have an ## enviroment (it could be a character), then use the parent frame. form.envir <- if(!is.null(env <- environment(forms[[1]]))) env else envir ## ensure formula, scale and nominal are formulas: forms[] <- lapply(forms, function(x) { # 'is.character(.)' for scale = "~ ..." tryCatch(formula(if(is.character(x)) x else Deparse(x), env = form.envir), error = function(e)e) }) if(any(vapply(forms, inherits, FUN.VALUE=logical(1), what="error"))) stop("unable to interpret 'formula', 'scale' or 'nominal'") ## collect all variables in a full formula: forms$fullForm <- do.call("getFullForm", forms) ### OPTION: do we actually need to set this name? names(forms)[1] <- "formula" ## set environment of 'fullForm' to the environment of 'formula': attr(forms, "envir") <- environment(forms$fullForm) <- form.envir ## return: forms } get_clmRho <- function(object, ...) { UseMethod("get_clmRho") } get_clmRho.default <- function(object, terms.list, contrasts, link, threshold, parent=parent.frame(), start=NULL, control=clm.control(), ...) ### .default method(?) ### object: model.frame (fullmf) with all variables present ### terms.list: list of terms.objects for each of the formulas in the ### clm object. { ## Get design matrices etc: design <- get_clmDesign(fullmf=object, terms.list=terms.list, contrasts=contrasts) ## Get threshold information: design <- c(design, makeThresholds(design$y.levels, threshold)) ## Drop columns for aliased coefs: design <- drop.cols(design, drop.scale=FALSE, silent=TRUE) ## Set envir rho with variables: B1, B2, o1, o2, weights, fitted: rho <- with(design, { clm.newRho(parent.frame(), y=y, X=X, NOM=design$NOM, S=design$S, weights=weights, offset=offset, S.offset=design$S.off, tJac=tJac, control=control) }) ## Set and check starting values for the parameters: start <- set.start(rho, start=start, get.start=is.null(start), threshold=threshold, link=link, frames=design) rho$par <- as.vector(start) ## remove attributes ## Set pfun, dfun and gfun in rho: setLinks(rho, link) ## Return: rho } get_clmRho.clm <- function(object, parent=parent.frame(), ...) { ### Safely generate the model environment from a model object. o <- object get_clmRho.default(object=model.frame(o), terms.list=terms(o, "all"), contrasts=o$contrasts, start=c(o$start), link=o$link, threshold=o$threshold, parent=parent, control=o$control, ...) } ## get_mfcall <- function(mc, envir=parent.frame(2)) { ## m <- match(c("data", "subset", "weights", "na.action"), ## names(mc), 0) ## mf <- mc[c(1, m)] ## ## mf$formula <- fullForm ## mf$drop.unused.levels <- TRUE ## mf[[1]] <- as.name("model.frame") ## ## if(is.null(mf$data)) mf$data <- form.envir ## list(mfcall=mf, envir=parent.frame(2)) ## } ordinal/R/clm.methods.R0000644000175100001440000003472714533321514014477 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Implementation of various methods for clm objects. print.clm <- function(x, digits = max(3, getOption("digits") - 3), ...) { cat("formula:", Deparse(formula(x$terms)), fill=TRUE) ### NOTE: deparse(x$call$formula) will not always work since this may ### not always be appropriately evaluated. if(!is.null(x$call$scale)) cat("scale: ", Deparse(formula(x$S.terms)), fill=TRUE) if(!is.null(x$call$nominal)) cat("nominal:", Deparse(formula(x$nom.terms)), fill=TRUE) if(!is.null(data.name <- x$call$data)) cat("data: ", Deparse(data.name), fill=TRUE) if(!is.null(x$call$subset)) cat("subset: ", Deparse(x$call$subset), fill=TRUE) cat("\n") print(x$info, row.names=FALSE, right=FALSE) if(length(x$beta)) { if(sum(x$aliased$beta) > 0) { cat("\nCoefficients: (", sum(x$aliased$beta), " not defined because of singularities)\n", sep = "") } else cat("\nCoefficients:\n") print.default(format(x$beta, digits = digits), quote = FALSE) } if(length(x$zeta)) { if(sum(x$aliased$zeta) > 0) cat("\nlog-scale coefficients: (", sum(x$aliased$zeta), " not defined because of singularities)\n", sep = "") else cat("\nlog-scale coefficients:\n") print.default(format(x$zeta, digits = digits), quote = FALSE) } if(length(x$lambda)) { cat("\nLink coefficient:\n") print.default(format(x$lambda, digits = digits), quote = FALSE) } if(length(x$alpha) > 0) { if(sum(x$aliased$alpha) > 0) cat("\nThreshold coefficients: (", sum(x$aliased$alpha), " not defined because of singularities)\n", sep = "") else cat("\nThreshold coefficients:\n") if(!is.null(x$call$nominal)) print.default(format(x$alpha.mat, digits = digits), quote = FALSE) else print.default(format(x$alpha, digits = digits), quote = FALSE) } if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") return(invisible(x)) } vcov.clm <- function(object, tol = sqrt(.Machine$double.eps), method = c("clm", "Cholesky", "svd", "eigen", "qr"), ...) { method <- match.arg(method) if(method == "clm") return(object$vcov) if(is.null(object$Hessian)) stop("Model needs to be fitted with Hess = TRUE") dn <- dimnames(object$Hessian) H <- object$Hessian if(!all(is.finite(H))) stop("cannot compute vcov: non-finite values in Hessian") if(method == "svd") { Hsvd <- svd(H) ## positive <- Hsvd$d > max(tol * Hsvd$d[1L], tol) positive <- Hsvd$d > tol if(!all(positive)) stop(gettextf("Cannot compute vcov: \nHessian is numerically singular with min singular value = %g", min(Hsvd$d))) cov <- Hsvd$v %*% (1/Hsvd$d * t(Hsvd$u)) } else if(method == "eigen") { evd <- eigen(H, symmetric=TRUE) ## tol <- max(tol * evd$values[1L], tol) ## if evd$values[1L] < 0 if(any(evd$values < tol)) stop(gettextf("Cannot compute vcov: \nHessian is not positive definite with min eigenvalue = %g", min(evd$values))) cov <- with(evd, vectors %*% diag(1/values) %*% t(vectors)) } else if(method == "Cholesky") { cholH <- try(chol(H), silent=TRUE) if(inherits(cholH, "try-error")) stop("Cannot compute vcov: \nHessian is not positive definite") cov <- chol2inv(cholH) } else if(method == "qr") { qrH <- qr(H, tol=sqrt(.Machine$double.eps)) if(qrH$rank < nrow(H)) stop("Cannot compute vcov: \nHessian is numerically singular") cov <- solve.qr(qrH) } else stop("method not recognized") ## Need to test for negative variances, since some methods (svd, ## qr) may produce a vcov-matrix if the Hessian is *negative* ## definite: if(any(diag(cov) < 0)) { stop("Cannot compute vcov: \nHessian is not positive definite") } structure(cov, dimnames=dn) } summary.clm <- function(object, correlation = FALSE, ...) { vcov <- object$vcov coefs <- matrix(NA, length(object$coefficients), 4, dimnames = list(names(object$coefficients), c("Estimate", "Std. Error", "z value", "Pr(>|z|)"))) coefs[, 1] <- object$coefficients if(!all(is.finite(vcov))) { ## warning("Variance-covariance matrix of the parameters is not defined") coefs[, 2:4] <- NA if(correlation) warning("Correlation matrix is unavailable") } else { alias <- unlist(object$aliased) coefs[!alias, 2] <- sd <- sqrt(diag(vcov)) ## Cond is Inf if Hessian contains NaNs: object$cond.H <- if(any(is.na(object$Hessian))) Inf else with(eigen(object$Hessian, symmetric=TRUE, only.values = TRUE), abs(max(values) / min(values))) coefs[!alias, 3] <- coefs[!alias, 1]/coefs[!alias, 2] coefs[!alias, 4] <- 2 * pnorm(abs(coefs[!alias, 3]), lower.tail=FALSE) if(correlation) object$correlation <- cov2cor(vcov) } object$coefficients <- coefs class(object) <- "summary.clm" return(object) } print.summary.clm <- function(x, digits = max(3, getOption("digits") - 3), signif.stars = getOption("show.signif.stars"), ...) { cat("formula:", Deparse(formula(x$terms)), fill=TRUE) ### NOTE: deparse(x$call$formula) will not always work since this may ### not always be appropriately evaluated. if(!is.null(x$call$scale)) cat("scale: ", Deparse(formula(x$S.terms)), fill=TRUE) if(!is.null(x$call$nominal)) cat("nominal:", Deparse(formula(x$nom.terms)), fill=TRUE) if(!is.null(data.name <- x$call$data)) cat("data: ", Deparse(data.name), fill=TRUE) if(!is.null(x$call$subset)) cat("subset: ", Deparse(x$call$subset), fill=TRUE) cat("\n") print(x$info, row.names=FALSE, right=FALSE) nalpha <- length(x$alpha) nbeta <- length(x$beta) nzeta <- length(x$zeta) nlambda <- length(x$lambda) if(nbeta > 0) { if(sum(x$aliased$beta) > 0) cat("\nCoefficients: (", sum(x$aliased$beta), " not defined because of singularities)\n", sep = "") else cat("\nCoefficients:\n") printCoefmat(x$coefficients[nalpha + 1:nbeta, , drop=FALSE], digits=digits, signif.stars=signif.stars, has.Pvalue=TRUE, ...) } ## else cat("\nNo Coefficients\n") if(nzeta > 0) { if(sum(x$aliased$zeta) > 0) cat("\nlog-scale coefficients: (", sum(x$aliased$zeta), " not defined because of singularities)\n", sep = "") else cat("\nlog-scale coefficients:\n") printCoefmat(x$coefficients[nalpha + nbeta + 1:nzeta, , drop=FALSE], digits=digits, signif.stars=signif.stars, has.Pvalue=TRUE, ...) } if(nlambda > 0) { cat("\nLink coefficients:\n") printCoefmat(x$coefficients[nalpha + nbeta + nzeta + nlambda, , drop=FALSE], digits=digits, signif.stars=signif.stars, has.Pvalue=TRUE, ...) } if(nalpha > 0) { ## always true if(sum(x$aliased$alpha) > 0) cat("\nThreshold coefficients: (", sum(x$aliased$alpha), " not defined because of singularities)\n", sep = "") else cat("\nThreshold coefficients:\n") printCoefmat(x$coefficients[seq_len(nalpha), -4, drop=FALSE], digits=digits, has.Pvalue=FALSE, signif.stars=FALSE, ...) } if(nzchar(mess <- naprint(x$na.action))) cat("(", mess, ")\n", sep="") if(!is.null(correl <- x$correlation)) { cat("\nCorrelation of Coefficients:\n") ll <- lower.tri(correl) correl[ll] <- format(round(correl[ll], digits)) correl[!ll] <- "" print(correl[-1, -ncol(correl)], quote = FALSE, ...) } return(invisible(x)) } logLik.clm <- function(object, ...) structure(object$logLik, df = object$edf, nobs=object$nobs, class = "logLik") extractAIC.clm <- function(fit, scale = 0, k = 2, ...) { edf <- fit$edf c(edf, -2*fit$logLik + k * edf) } ### NOTE: AIC.clm implicitly defined via logLik.clm anova.clm <- function(object, ..., type = c("I", "II", "III", "1", "2", "3")) ### requires that clm objects have components: ### edf: no. parameters used ### call$formula ### link (character) ### threshold (character) ### logLik ### { mc <- match.call() dots <- list(...) ## remove 'test' and 'type' arguments from dots-list: not.keep <- which(names(dots) %in% c("test")) if(length(not.keep)) { message("'test' argument ignored in anova.clm\n") dots <- dots[-not.keep] } if(length(dots) == 0) { if(inherits(object, "clmm")) stop("anova not implemented for a single clmm fit") return(single_anova(object, type=type)) } ## Multi-model anova method proceeds: mlist <- c(list(object), dots) if(!all(sapply(mlist, function(model) inherits(model, c("clm", "clmm"))))) stop("only 'clm' and 'clmm' objects are allowed") nfitted <- sapply(mlist, function(x) length(x$fitted.values)) if(any(nfitted != nfitted[1L])) stop("models were not all fitted to the same dataset") ### OPTION: consider comparing y returned by the models for a better check? no.par <- sapply(mlist, function(x) x$edf) ## order list with increasing no. par: ord <- order(no.par, decreasing=FALSE) mlist <- mlist[ord] no.par <- no.par[ord] no.tests <- length(mlist) ## extract formulas, links, thresholds, scale formulas, nominal ## formulas: forms <- sapply(mlist, function(x) Deparse(x$call$formula)) links <- sapply(mlist, function(x) x$link) thres <- sapply(mlist, function(x) x$threshold) nominal <- sapply(mlist, function(x) Deparse(x$call$nominal)) scale <- sapply(mlist, function(x) Deparse(x$call$scale)) models <- data.frame(forms) models.names <- 'formula:' if(any(!nominal %in% c("~1", "NULL"))) { nominal[nominal == "NULL"] <- "~1" models$nominal <- nominal models.names <- c(models.names, "nominal:") } if(any(!scale %in% c("~1", "NULL"))) { scale[scale == "NULL"] <- "~1" models$scale <- scale models.names <- c(models.names, "scale:") } models.names <- c(models.names, "link:", "threshold:") models <- cbind(models, data.frame(links, thres)) ## extract AIC, logLik, statistics, df, p-values: AIC <- sapply(mlist, function(x) -2*x$logLik + 2*x$edf) logLiks <- sapply(mlist, function(x) x$logLik) statistic <- c(NA, 2*diff(sapply(mlist, function(x) x$logLik))) df <- c(NA, diff(no.par)) pval <- c(NA, pchisq(statistic[-1], df[-1], lower.tail=FALSE)) pval[!is.na(df) & df==0] <- NA ## collect results in data.frames: tab <- data.frame(no.par, AIC, logLiks, statistic, df, pval) tab.names <- c("no.par", "AIC", "logLik", "LR.stat", "df", "Pr(>Chisq)") mnames <- sapply(as.list(mc), Deparse)[-1] colnames(tab) <- tab.names rownames(tab) <- rownames(models) <- mnames[ord] colnames(models) <- models.names attr(tab, "models") <- models attr(tab, "heading") <- "Likelihood ratio tests of cumulative link models:\n" class(tab) <- c("anova.clm", "data.frame") tab } print.anova.clm <- function(x, digits=max(getOption("digits") - 2, 3), signif.stars=getOption("show.signif.stars"), ...) { if (!is.null(heading <- attr(x, "heading"))) cat(heading, "\n") models <- attr(x, "models") print(models, right=FALSE) cat("\n") printCoefmat(x, digits=digits, signif.stars=signif.stars, tst.ind=4, cs.ind=NULL, # zap.ind=2, #c(1,5), P.values=TRUE, has.Pvalue=TRUE, na.print="", ...) return(invisible(x)) } model.matrix.clm <- function(object, type = c("design", "B"), ...) { type <- match.arg(type) mf <- try(model.frame(object), silent=TRUE) if(inherits(mf, "try-error")) stop("Cannot extract model.matrix: refit model with 'model=TRUE'?") ### NOTE: we want to stop even if type="B" since the fullmf is needed ### in get_clmRho also and this way the error message is better. if(type == "design") { contr <- c(object$contrasts, object$S.contrasts, object$nom.contrasts) design <- get_clmDesign(fullmf=object$model, terms.list=terms(object, "all"), contrasts=contr) keep <- c("X", "NOM", "S") select <- match(keep, names(design), nomatch=0) ans <- design[select] } else { ## if type == "B": env <- get_clmRho.clm(object) ans <- list(B1 = env$B1, B2 = env$B2) ans$S <- env$S ## may not exist } return(ans) } model.frame.clm <- function(formula, ...) { ### returns a model frame with *all* variables used for fitting. if(is.null(mod <- formula$model)) stop("Cannot extract model.frame: refit model with 'model=TRUE'") else mod } coef.clm <- function(object, na.rm = FALSE, ...) { if(na.rm) { coefs <- object$coefficients coefs[!is.na(coefs)] } else object$coefficients } coef.summary.clm <- function(object, na.rm = FALSE, ...) { if(na.rm) { coefs <- object$coefficients coefs[!is.na(coefs[,1]), , drop=FALSE] } else object$coefficients } nobs.clm <- function(object, ...) object$nobs terms.clm <- function(x, type=c("formula", "scale", "nominal", "all"), ...) { type <- match.arg(type) term.nm <- c("terms", "S.terms", "nom.terms") Terms <- x[names(x) %in% term.nm] ind <- match(term.nm, names(Terms), 0L) Terms <- Terms[ind] names(Terms) <- c("formula", "scale", "nominal")[ind != 0] if(type == "all") return(Terms) if(!type %in% names(Terms)) stop(gettextf("no terms object for '%s'", type)) Terms[[type]] } ordinal/R/clm.nominal_test.R0000644000175100001440000001704214533321514015517 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Implementation of of nominal_test.clm() and scale_test.clm() for ## automatic testing of nominal and scale effects in clm()s. These ## functions work in a fashion similar to add1(). nominal_test <- function(object, ...) { UseMethod("nominal_test") } scale_test <- function(object, ...) { UseMethod("scale_test") } nominal_test.clm <- function(object, scope, trace=FALSE, ...) ### Test nominal effects for all (or selected) terms in location ### and scale formulas. { ## get scope: vector of terms names which to add to nominal: termsnm <- attr(object$terms, "term.labels") if(!is.null(object$S.terms)) termsnm <- union(termsnm, attr(object$S.terms, "term.labels")) if(!missing(scope) && !is.null(scope)) { if(!is.character(scope)) scope <- attr(terms(update.formula(object, scope)), "term.labels") if(!all(match(scope, termsnm, 0L) > 0L)) stop("scope is not a subset of term labels") } else { scope <- termsnm } if(!is.null(object$nom.terms)) { scope <- scope[!scope %in% attr(object$nom.terms, "term.labels")] } if(!length(scope)) message("\nno additional terms to add to nominal\n") env <- environment(formula(object)) ## get list of (updated) nominal formulas: nomforms <- if(!is.null(object$call$nominal)) lapply(scope, function(tm) { update.formula(old=formula(object$nom.terms), new=as.formula(paste("~. + ", tm))) }) else lapply(scope, function(tm) { as.formula(paste("~", tm), env=env) }) ns <- length(scope) ## results matrix: ans <- matrix(nrow = ns + 1L, ncol = 3L, dimnames = list(c("", scope), c("df", "logLik", "AIC"))) ans[1L, ] <- c(object$edf, object$logLik, AIC(object)) n0 <- nobs(object) ## for all terms in scope: i <- 1 for(i in seq(ns)) { if(trace) { cat("trying +", scope[i], "\n", sep = " ") utils::flush.console() } ## update and fit model with nominal effect added: nfit <- try(update(object, nominal=nomforms[[i]], convergence="silent"), silent=TRUE) ## model may not be identifiable or converge: if(!inherits(nfit, "try-error") && ### NOTE: non-negative convergence codes indicate that the likelihood ### is correctly determined: nfit$convergence$code >= 0) { ans[i + 1L, ] <- c(nfit$edf, nfit$logLik, AIC(nfit)) nnew <- nobs(nfit) if(all(is.finite(c(n0, nnew))) && nnew != n0) stop("number of rows in use has changed: remove missing values?") } } dfs <- ans[, 1L] - ans[1L, 1L] dfs[1L] <- NA aod <- data.frame(Df = dfs, logLik = ans[, 2L], AIC = ans[, 3L]) rownames(aod) <- rownames(ans) ## compute likelihood ratio statistic and p-values: LR <- 2*(ans[, 2L] - ans[1L, 2L]) LR[1L] <- NA nas <- !is.na(LR) P <- LR P[nas] <- pchisq(LR[nas], dfs[nas], lower.tail = FALSE) aod[, c("LRT", "Pr(>Chi)")] <- list(LR, P) head <- c("Tests of nominal effects", paste("\nformula:", Deparse(formula(object$terms)))) if(!is.null(object$call$scale)) head <- c(head, paste("scale: ", Deparse(formula(object$S.terms)))) if(!is.null(object$call$nominal)) head <- c(head, paste("nominal:", Deparse(formula(object$nom.terms)))) class(aod) <- c("anova", "data.frame") attr(aod, "heading") <- head aod } scale_test.clm <- function(object, scope, trace=FALSE, ...) ### Test scale effects for all (or selected) terms in formula { ## get scope: vector of terms names which to add to scale: termsnm <- attr(object$terms, "term.labels") if(!missing(scope) && !is.null(scope)) { if(!is.character(scope)) scope <- attr(terms(update.formula(object, scope)), "term.labels") if(!all(match(scope, termsnm, 0L) > 0L)) stop("scope is not a subset of term labels") } else { scope <- termsnm } ## if(!is.null(object$nom.terms)) { ## scope <- scope[!scope %in% attr(object$nom.terms, ## "term.labels")] ## } if(!is.null(object$S.terms)) { scope <- scope[!scope %in% attr(object$S.terms, "term.labels")] } if(!length(scope)) message("\nno relevant terms to add to scale\n") env <- environment(formula(object)) ## get list of (updated) scale formulas: scaleforms <- if(!is.null(object$call$scale)) lapply(scope, function(tm) { update.formula(old=formula(object$S.terms), new=as.formula(paste("~. + ", tm))) }) else lapply(scope, function(tm) as.formula(paste("~", tm), env=env)) ns <- length(scope) ## results matrix: ans <- matrix(nrow = ns + 1L, ncol = 3L, dimnames = list(c("", scope), c("df", "logLik", "AIC"))) ans[1L, ] <- c(object$edf, object$logLik, AIC(object)) n0 <- nobs(object) ## for all terms in scope: for(i in seq(ns)) { if(trace) { cat("trying +", scope[i], "\n", sep = " ") utils::flush.console() } ## update and fit model with scale effect added: nfit <- try(update(object, scale=scaleforms[[i]]), silent=TRUE) ## model may not be identifiable or converge: if(!inherits(nfit, "try-error") && nfit$convergence$code >= 0) { ans[i + 1L, ] <- c(nfit$edf, nfit$logLik, AIC(nfit)) nnew <- nobs(nfit) if (all(is.finite(c(n0, nnew))) && nnew != n0) stop("number of rows in use has changed: remove missing values?") } } dfs <- ans[, 1L] - ans[1L, 1L] dfs[1L] <- NA aod <- data.frame(Df = dfs, logLik = ans[, 2L], AIC = ans[, 3L]) rownames(aod) <- rownames(ans) ## compute likelihood ratio statistic and p-values: LR <- 2*(ans[, 2L] - ans[1L, 2L]) LR[1L] <- NA nas <- !is.na(LR) P <- LR P[nas] <- pchisq(LR[nas], dfs[nas], lower.tail = FALSE) aod[, c("LRT", "Pr(>Chi)")] <- list(LR, P) head <- c("Tests of scale effects", paste("\nformula:", Deparse(formula(object$terms)))) if(!is.null(object$call$scale)) head <- c(head, paste("scale: ", Deparse(formula(object$S.terms)))) if(!is.null(object$call$nominal)) head <- c(head, paste("nominal:", Deparse(formula(object$nom.terms)))) class(aod) <- c("anova", "data.frame") attr(aod, "heading") <- head aod } ordinal/R/gumbel.R0000644000175100001440000000746314533321514013532 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## [pdqrg]gumbel functions for the gumbel distribution. ## Here ggumbel is the gradient of the density function, dgumbel. pgumbel <- function(q, location = 0, scale = 1, lower.tail = TRUE, max = TRUE) ### CDF for Gumbel max and min distributions ### Currently only unit length location and scale are supported. { if(max) ## right skew, loglog link .C("pgumbel_C", q = as.double(q), length(q), as.double(location)[1], as.double(scale)[1], as.integer(lower.tail), NAOK = TRUE)$q else ## left skew, cloglog link .C("pgumbel2_C", q = as.double(q), length(q), as.double(location)[1], as.double(scale)[1], as.integer(lower.tail), NAOK = TRUE)$q } pgumbelR <- function(q, location = 0, scale = 1, lower.tail = TRUE) ### R equivalent of pgumbel() { q <- (q - location)/scale p <- exp(-exp(-q)) if (!lower.tail) 1 - p else p } pgumbel2R <- function(q, location = 0, scale = 1, lower.tail = TRUE) { q <- (-q - location)/scale p <- exp(-exp(-q)) if (!lower.tail) p else 1 - p } dgumbel <- function(x, location = 0, scale = 1, log = FALSE, max = TRUE) ### PDF for the Gumbel max and mon distributions { if(max) ## right skew, loglog link .C("dgumbel_C", x = as.double(x), length(x), as.double(location)[1], as.double(scale)[1], as.integer(log), NAOK = TRUE)$x else ## left skew, cloglog link .C("dgumbel2_C", x = as.double(x), length(x), as.double(location)[1], as.double(scale)[1], as.integer(log), NAOK = TRUE)$x } dgumbelR <- function(x, location = 0, scale = 1, log = FALSE) ### dgumbel in R { q <- (x - location)/scale log.d <- -exp(-q) - q - log(scale) if (!log) exp(log.d) else log.d } dgumbel2R <- function(x, location = 0, scale = 1, log = FALSE) { q <- (-x - location)/scale log.d <- -exp(-q) - q - log(scale) if (!log) exp(log.d) else log.d } ggumbel <- function(x, max = TRUE) { ### gradient of dgumbel(x) wrt. x if(max) ## right skew, loglog link .C("ggumbel_C", x = as.double(x), length(x), NAOK = TRUE)$x else ## left skew, cloglog link .C("ggumbel2_C", x = as.double(x), length(x), NAOK = TRUE)$x } ggumbelR <- function(x){ ### ggumbel in R q <- exp(-x) ifelse(q == Inf, 0, { eq <- exp(-q) -eq*q + eq*q*q }) } ggumbel2R <- function(x) -ggumbelR(-x) rgumbel <- function(n, location = 0, scale = 1, max = TRUE) { if(max) location - scale * log(-log(runif(n))) else location + scale * log(-log(runif(n))) } qgumbel <- function(p, location = 0, scale = 1, lower.tail = TRUE, max = TRUE) { if(!lower.tail) p <- 1 - p if(max) ## right skew, loglog link location - scale * log(-log(p)) else ## left skew, cloglog link location + scale * log(-log(1 - p)) } ordinal/R/clmm.R0000644000175100001440000007707414533321514013214 0ustar hornikusers############################################################################# ## Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen ## ## This file is part of the ordinal package for R (*ordinal*) ## ## *ordinal* is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 2 of the License, or ## (at your option) any later version. ## ## *ordinal* is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## A copy of the GNU General Public License is available at ## and/or ## . ############################################################################# ## This file contains: ## Implementation of Cumulative Link Mixed Models in clmm(). if(getRversion() >= '2.15.1') utils::globalVariables(c("ths", "link", "threshold", "optRes", "neval", "Niter", "tJac", "y.levels")) clmm <- function(formula, data, weights, start, subset, na.action, contrasts, Hess = TRUE, model = TRUE, link = c("logit", "probit", "cloglog", "loglog", "cauchit"), ##, "Aranda-Ordaz", "log-gamma"), ## lambda, doFit = TRUE, control = list(), nAGQ = 1L, threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) { ### Extract the matched call and initial testing: mc <- match.call(expand.dots = FALSE) ### OPTION: Possibly call clm() when there are no random effects? link <- match.arg(link) threshold <- match.arg(threshold) if(missing(formula)) stop("Model needs a formula") if(missing(contrasts)) contrasts <- NULL ## set control parameters: control <- getCtrlArgs(control, list(...)) nAGQ <- as.integer(round(nAGQ)) formulae <- clmm.formulae(formula=formula) ## mf, y, X, wts, off, terms: frames <- clmm.frames(modelcall=mc, formulae=formulae, contrasts) ### QUEST: What should 'method="model.frame"' return? Do we want Zt ### included here as well? if(control$method == "model.frame") return(frames) ## Test rank deficiency and possibly drop some parameters: ## X is guarantied to have an intercept at this point. frames$X <- drop.coef(frames$X, silent=FALSE) ## Compute the transpose of the Jacobian for the threshold function, ## tJac and the names of the threshold parameters, alpha.names: ths <- makeThresholds(levels(frames$y), threshold) ## Set rho environment: rho <- with(frames, { clm.newRho(parent.frame(), y=y, X=X, weights=wts, offset=off, tJac=ths$tJac) }) ## compute grouping factor list, and Zt and ST matrices: retrms <- getREterms(frames = frames, formulae$formula) ## For each r.e. term, test if Z has more columns than rows to detect ## unidentifiability: test_no_ranef(Zt_list=retrms$retrms, frames=frames, checkRanef=control$checkRanef) ### OPTION: save (the evaluated) formula in frames, so we only need the ### frames argument to getREterms() ? use.ssr <- (retrms$ssr && !control$useMatrix) ## Set inverse link function and its two first derivatives (pfun, ## dfun and gfun) in rho: setLinks(rho, link) ## Compute list of dimensions for the model fit: rho$dims <- getDims(frames=frames, ths=ths, retrms=retrms) ## Update model environment with r.e. information: if(use.ssr) { rho.clm2clmm.ssr(rho=rho, retrms = retrms, ctrl=control$ctrl) ## Set starting values for the parameters: if(missing(start)) start <- c(fe.start(frames, link, threshold), 0) rho$par <- start nbeta <- rho$nbeta <- ncol(frames$X) - 1 ## no. fixef parameters nalpha <- rho$nalpha <- ths$nalpha ## no. threshold parameters ntau <- rho$ntau <- length(retrms$gfList) ## no. variance parameters stopifnot(is.numeric(start) && length(start) == (nalpha + nbeta + ntau)) } else { rho.clm2clmm(rho=rho, retrms=retrms, ctrl=control$ctrl) if(missing(start)) { rho$fepar <- fe.start(frames, link, threshold) rho$ST <- STstart(rho$ST) start <- c(rho$fepar, ST2par(rho$ST)) } else { stopifnot(is.list(start) && length(start) == 2) stopifnot(length(start[[1]]) == rho$dims$nfepar) stopifnot(length(start[[2]]) == rho$dims$nSTpar) rho$fepar <- as.vector(start[[1]]) rho$ST <- par2ST(as.vector(start[[2]]), rho$ST) } } ### OPTION: set starting values in a more elegant way. ## Set AGQ parameters: set.AGQ(rho, nAGQ, control, use.ssr) ## Possibly return the environment, rho without fitting: if(!doFit) return(rho) ## Fit the clmm: fit <- if(use.ssr) clmm.fit.ssr(rho, control = control$optCtrl, method=control$method, Hess) else clmm.fit.env(rho, control = control$optCtrl, method=control$method, Hess) ## Modify and return results: fit$nAGQ <- nAGQ fit$link <- link fit$start <- start fit$threshold <- threshold fit$call <- match.call() fit$formula <- formulae$formula fit$gfList <- retrms$gfList fit$control <- control res <- clmm.finalize(fit=fit, frames=frames, ths=ths, use.ssr) ## add model.frame to results list? if(model) res$model <- frames$mf return(res) } clmm.formulae <- function(formula) { ## Evaluate the formula in the enviroment in which clmm was called ## (parent.frame(2)) to get it evaluated properly: form <- eval.parent(formula, 2) ## get the environment of the formula. If this does not have an ## environment (it could be a character), then use the calling environment. form.envir <- if(!is.null(env <- environment(form))) env else parent.frame(2) ## ensure 'formula' is a formula-object: form <- tryCatch(formula(if(is.character(form)) form else Deparse(form), env = form.envir), error = identity) ## report error if the formula cannot be interpreted if(inherits(form, "error")) stop("unable to interpret 'formula'") environment(form) <- form.envir ## Construct a formula with all (fixed and random) variables ## (fullForm) and a formula with only fixed-effects variables ## (fixedForm): fixedForm <- nobars(form) ## ignore terms with '|' # Handle case where formula is only response ~ RE: fixedForm <- if(length(fixedForm) == 1 || !inherits(fixedForm, "formula")) reformulate("1", response = form[[2]], env=form.envir) else fixedForm fullForm <- subbars(form) # substitute `+' for `|' ## Set the appropriate environments: environment(fullForm) <- environment(fixedForm) <- environment(form) <- form.envir list(formula = form, fullForm = fullForm, fixedForm = fixedForm) } clmm.frames <- function(modelcall, formulae, contrasts) { ## Extract full model.frame (fullmf): m <- match(c("data", "subset", "weights", "na.action", "offset"), names(modelcall), 0) mf <- modelcall[c(1, m)] mf$formula <- formulae$fullForm mf$drop.unused.levels <- TRUE mf[[1]] <- as.name("model.frame") fixedmf <- mf ## save call for later modification and evaluation fullmf <- eval(mf, envir = parent.frame(2)) ## '2' to get out of ## clmm.frames and clmm ### OPTION: Consider behavior if data is a matrix? fixedmf$formula <- formulae$fixedForm fixedmf <- eval(fixedmf, envir = parent.frame(2)) attr(fullmf, "terms") <- attr(fixedmf, "terms") ## return: list(mf = fullmf, y = getY(fullmf), X = getX(fullmf, fixedmf, contrasts), wts = getWeights(fullmf), off = getOffsetStd(fullmf), terms = attr(fixedmf, "terms") ) } getY <- function(mf) { ### Extract model response: y <- model.response(mf) if(!is.factor(y)) stop("response needs to be a factor") y } getX <- function(fullmf, fixedmf, contrasts) { fixedTerms <- attr(fixedmf, "terms") X <- model.matrix(fixedTerms, fullmf, contrasts) n <- nrow(X) ## remove intercept from X: Xint <- match("(Intercept)", colnames(X), nomatch = 0) if(Xint <= 0) { X <- cbind("(Intercept)" = rep(1, n), X) warning("an intercept is needed and assumed") } ## intercept in X is garanteed. X } getZt <- function(retrms) { ZtList <- lapply(retrms, '[[', "Zt") Zt <- do.call(rbind, ZtList) Zt@Dimnames <- vector("list", 2) Zt } getREterms <- function(frames, formula) { ### NOTE: Need to parse mf - not just fullmf because we need the model ### fits for an identifiability check below. fullmf <- droplevels(with(frames, mf[wts > 0, ])) barlist <- expandSlash(findbars(formula[[3]])) ### NOTE: make sure 'formula' is appropriately evaluated and returned ### by clmm.formulae if(!length(barlist)) stop("No random effects terms specified in formula") term.names <- unlist(lapply(barlist, function(x) Deparse(x))) names(barlist) <- unlist(lapply(barlist, function(x) Deparse(x[[3]]))) ### NOTE: Deliberately naming the barlist elements by grouping factors ### and not by r.e. terms. ## list of grouping factors for the random terms: rel <- lapply(barlist, function(x) { ff <- eval(substitute(as.factor(fac)[,drop = TRUE], list(fac = x[[3]])), fullmf) ## per random term transpose indicator matrix: Zti <- as(ff, "sparseMatrix") ## per random term model matrix: mm <- model.matrix(eval(substitute(~ expr, list(expr = x[[2]]))), fullmf) Zt = do.call(rbind, lapply(seq_len(ncol(mm)), function(j) { Zti@x <- mm[,j] Zti } )) ### QUEST: can we drop rows from Zt when g has missing values in terms ### of the form (1 + g | f)? ST <- matrix(0, ncol(mm), ncol(mm), dimnames = list(colnames(mm), colnames(mm))) list(f = ff, Zt = Zt, ST = ST) ### OPTION: return the i'th element of Lambda here. }) q <- sum(sapply(rel, function(x) nrow(x$Zt))) ### OPTION: If the model is nested (all gr.factors are nested), then ### order the columns of Zt, such that they come in blocks ### corresponding to the levels of the coarsest grouping factor. Each ### block of Zt-columns contain first the j'th level of the 1st gr.fac. ### followed by columns for the 2nd gr.fac. ### ## single simple random effect on the intercept? ssr <- (length(barlist) == 1 && as.character(barlist[[1]][[2]])[1] == "1") ## order terms by decreasing number of levels in the factor but don't ## change the order if this is already true: nlev <- sapply(rel, function(re) nlevels(re$f)) if (any(diff(nlev)) > 0) rel <- rel[rev(order(nlev))] nlev <- nlev[rev(order(nlev))] ## separate r.e. terms from the factor list: retrms <- lapply(rel, "[", -1) names(retrms) <- term.names ## list of grouping factors: gfl <- lapply(rel, "[[", "f") ## which r.e. terms are associated with which grouping factors: attr(gfl, "assign") <- seq_along(gfl) ## only save unique g.f. and update assign attribute: fnms <- names(gfl) ## check for repeated factors: if (length(fnms) > length(ufn <- unique(fnms))) { ## check that the lengths of the number of levels coincide gfl <- gfl[match(ufn, fnms)] attr(gfl, "assign") <- match(fnms, ufn) names(gfl) <- ufn } ## test that all variables for the random effects are factors and ## have at least 3 levels: stopifnot(all(sapply(gfl, is.factor))) stopifnot(all(sapply(gfl, nlevels) > 2)) ## no. r.e. per level for each of the r.e. terms qi <- unlist(lapply(rel, function(re) ncol(re$ST))) stopifnot(q == sum(nlev * qi)) dims <- list(n = nrow(fullmf), ## no. observations nlev.re = nlev, ## no. levels for each r.e. term nlev.gf = sapply(gfl, nlevels), ## no. levels for each grouping factor qi = qi, nretrms = length(rel), ## no. r.e. terms ngf = length(gfl), ## no. unique grouping factors ## total no. random effects: q = sum(nlev * qi), ## = sum(sapply(rel, function(re) nrow(re$Zt))) ## no. r.e. var-cov parameters: nSTpar = sum(sapply(qi, function(q) q * (q + 1) / 2)) ) ## c(retrms=retrms, list(gfList = gfl, dims = dims, ssr = ssr)) list(retrms=retrms, gfList = gfl, dims = dims, ssr = ssr) } test_no_ranef <- function(Zt_list, frames, checkRanef=c("warn", "error", "message")) { ## For each r.e. term, test if Z has more columns than rows to detect ## unidentifiability: checkfun <- switch(checkRanef, "warn" = function(...) warning(..., call.=FALSE), "error" = function(...) stop(..., call.=FALSE), "message" = message) nrow_fullmf <- with(frames, nrow(mf[wts > 0, ])) REterm.names <- names(Zt_list) for(i in seq_along(Zt_list)) { Zti <- Zt_list[[i]][["Zt"]] if(nrow(Zti) > ncol(Zti) || (all(frames$wts == 1) && nrow(Zti) == ncol(Zti))) checkfun(gettextf("no. random effects (=%d) >= no. observations (=%d) for term: (%s)", nrow(Zti), ncol(Zti), REterm.names[i])) } ## Test if total no. random effects >= total nobs: q <- sum(sapply(Zt_list, function(x) nrow(x$Zt))) if(all(frames$wts == 1) && q >= nrow_fullmf) checkfun(gettextf("no. random effects (=%d) >= no. observations (=%d)", q, nrow_fullmf)) invisible(NULL) ### NOTE: q > nrow(fullmf) is (sometimes) allowed if some frames$wts > 1 ### ### NOTE: if all(frames$wts == 1) we cannot have observation-level ### random effects so we error if nrow(Zti) >= ncol(Zti) ### ### NOTE: Could probably also throw an error if q >= sum(frames$wts), ### but I am not sure about that. ### ### NOTE: It would be better to test the rank of the Zt matrix, but ### also computationally more intensive. ### } fe.start <- function(frames, link, threshold) { ## get starting values from clm: fit <- with(frames, clm.fit(y=y, X=X, weights=wts, offset=off, link=link, threshold=threshold)) unname(coef(fit)) } getDims <- function(frames, ths, retrms) ### Collect and compute all relevant dimensions in a list { dims <- retrms$dims ## n is also on retrms$dims dims$n <- sum(frames$wts > 0) dims$nbeta <- ncol(frames$X) - 1 dims$nalpha <- ths$nalpha dims$nfepar <- dims$nalpha + dims$nbeta dims } rho.clm2clmm <- function(rho, retrms, ctrl) ### update environment, rho returned by clm.newRho(). { ### OPTION: write default list of control arguments? ## control arguments are used when calling update.u(rho) rho$ctrl = ctrl ## compute Zt design matrix: rho$Zt <- getZt(retrms$retrms) rho$ST <- lapply(retrms$retrms, `[[`, "ST") rho$allST1 <- all(sapply(rho$ST, ncol) == 1) ## Lambda <- getLambda(rho$ST, rho$dims$nlev.re) ## Vt <- crossprod(Lambda, rho$Zt) ## rho$L <- Cholesky(tcrossprod(Vt), ## LDL = TRUE, super = FALSE, Imult = 1) rho$L <- Cholesky(tcrossprod(crossprod(getLambda(rho$ST, rho$dims$nlev.re), rho$Zt)), LDL = TRUE, super = FALSE, Imult = 1) rho$Niter <- 0L ## no. conditional mode updates rho$neval <- 0L ## no. evaluations of the log-likelihood function rho$u <- rho$uStart <- rep(0, rho$dims$q) rho$.f <- if(package_version(packageDescription("Matrix")$Version) > "0.999375-30") 2 else 1 } getLambda <- function(ST, nlev) { ### ST: a list of ST matrices ### nlev: a vector of no. random effects levels .local <- function(ST, nlev) { if(ncol(ST) == 1) .symDiagonal(n=nlev, x = rep(as.vector(ST[1, 1]), nlev)) else kronecker(as(ST, "sparseMatrix"), .symDiagonal(n=nlev)) ## This would make sense if the columns in Z (rows in Zt) were ordered differently: ## kronecker(Diagonal(n=nlev), ST) ### NOTE: .symDiagonal() appears to be faster than Diagonal() here. } stopifnot(length(ST) == length(nlev)) res <- if(length(ST) == 1) .local(ST[[1]], nlev) else .bdiag(lapply(seq_along(ST), function(i) .local(ST[[i]], nlev[i]))) ## coerce to diagonal matrix if relevant: if(all(sapply(ST, ncol) == 1)) as(res, "diagonalMatrix") else as(res, "CsparseMatrix") ### QUESTION: Are there any speed gains by coerce'ing Lambda to ### 'diagonalMatrix' or 'CsparseMatrix'? ### QUESTION: What is the best way to form the kronecker product in .local()? } getNLA <- function(rho, par, which=rep(TRUE, length(par))) { ### negative log-likelihood by the Laplace approximation if(!missing(par)) { setPar.clmm(rho, par, which) if(any(!is.finite(par))) stop(gettextf(paste(c("Non-finite parameters not allowed:", formatC(par, format="g")), collapse=" "))) } rho$neval <- rho$neval + 1L if(!update.u(rho)) return(Inf) if(any(rho$D < 0)) return(Inf) logDetD <- c(suppressWarnings(determinant(rho$L)$modulus)) - rho$dims$q * log(2*pi) / 2 rho$nll + logDetD } nll.u <- function(rho) { ## negative log-likelihood if(rho$allST1) { ## are all ST matrices scalars? rho$varVec <- rep.int(unlist(rho$ST), rho$dims$nlev.re) b.expanded <- as.vector(crossprod(rho$Zt, rho$varVec * rho$u)) ### NOTE: Working with Lambda when it is diagonal will slow things ### down significantly. } else { rho$ZLt <- crossprod(getLambda(rho$ST, rho$dims$nlev.re), rho$Zt) b.expanded <- as.vector(crossprod(rho$ZLt, rho$u)) } rho$eta1Fix <- drop(rho$B1 %*% rho$fepar) rho$eta2Fix <- drop(rho$B2 %*% rho$fepar) rho$eta1 <- as.vector(rho$eta1Fix - b.expanded + rho$o1) rho$eta2 <- as.vector(rho$eta2Fix - b.expanded + rho$o2) rho$fitted <- getFittedC(rho$eta1, rho$eta2, rho$link) if(any(!is.finite(rho$fitted)) || any(rho$fitted <= 0)) nll <- Inf else nll <- -sum(rho$wts * log(rho$fitted)) - sum(dnorm(x=rho$u, mean=0, sd=1, log=TRUE)) nll } nllFast.u <- function(rho) { ## negative log-likelihood ## Does not update X %*% beta - fixed effect part. if(rho$allST1) { rho$varVec <- rep.int(unlist(rho$ST), rho$dims$nlev.re) b.expanded <- as.vector(crossprod(rho$Zt, rho$varVec * rho$u)) } else { rho$ZLt <- crossprod(getLambda(rho$ST, rho$dims$nlev.re), rho$Zt) b.expanded <- as.vector(crossprod(rho$ZLt, rho$u)) } rho$eta1 <- as.vector(rho$eta1Fix - b.expanded + rho$o1) rho$eta2 <- as.vector(rho$eta2Fix - b.expanded + rho$o2) rho$fitted <- getFittedC(rho$eta1, rho$eta2, rho$link) if(any(!is.finite(rho$fitted)) || any(rho$fitted <= 0)) nll <- Inf else nll <- -sum(rho$wts * log(rho$fitted)) - sum(dnorm(x=rho$u, mean=0, sd=1, log=TRUE)) nll } grad.u <- function(rho){ ## gradient of nll wrt. u (random effects) ### should only be called with up to date values of eta1, eta2, par ## compute phi1: rho$p1 <- rho$dfun(rho$eta1) rho$p2 <- rho$dfun(rho$eta2) rho$wtpr <- rho$wts/rho$fitted phi1 <- as.vector(rho$wtpr * (rho$p1 - rho$p2)) if(rho$allST1) (rho$Zt %*% phi1) * rho$varVec + rho$u else rho$ZLt %*% phi1 + rho$u } hess.u <- function(rho) { ## Hessian of nll wrt. u (random effects) ### should only be called with up-to-date values of eta1, eta2, par, ### p1, p2 g1 <- rho$gfun(rho$eta1) ## does not need to be saved in rho g2 <- rho$gfun(rho$eta2) ## does not need to be saved in rho phi2 <- rho$wts * ( ((rho$p1 - rho$p2) / rho$fitted)^2 - ( (g1 - g2) / rho$fitted) ) ## This may happen if the link function [pfun, dfun and gfun] ## evaluates its arguments inaccurately: if(any(phi2 < 0)) return(FALSE) if(rho$allST1) Vt <- crossprod(Diagonal(x = rho$varVec), tcrossprod(rho$Zt, Diagonal(x = sqrt(phi2)))) else Vt <- rho$ZLt %*% Diagonal(x = sqrt(phi2)) rho$L <- update(rho$L, Vt, mult = 1) return(TRUE) } getPar.clmm <- function(rho) ### Extract vector of parameters from model-environment rho c(rho$fepar, ST2par(rho$ST)) setPar.clmm <- function(rho, par, which=rep(TRUE, length(par))) { ### Set parameters in model environment rho. which <- as.logical(as.vector(which)) oldpar <- getPar.clmm(rho) stopifnot(length(which) == length(oldpar)) stopifnot(sum(which) == length(par)) ## over-wright selected elements of oldpar: oldpar[which] <- as.vector(par) ## assign oldpar to rho$fepar and rho$ST: rho$fepar <- oldpar[1:rho$dims$nfepar] rho$ST <- par2ST(oldpar[-(1:rho$dims$nfepar)], rho$ST) } ST2par <- function(STlist) { ### Compute parameter vector from list of ST matrices. unlist(lapply(STlist, function(ST) { ## if(ncol(ST) == 1) as.vector(ST) else as.vector(c(diag(ST), ST[lower.tri(ST)])) })) } par2ST <- function(STpar, STlist) { ### Fill in parameters in list of ST matrices. Reverse of ST2par(). nc <- sapply(STlist, ncol) asgn <- rep(1:length(nc), sapply(nc, function(qi) qi * (qi + 1) / 2)) STparList <- split(STpar, asgn) stopifnot(length(asgn) == length(ST2par(STlist))) for(i in 1:length(STlist)) { par <- STparList[[i]] if(nc[i] > 1) { diag(STlist[[i]]) <- par[1:nc[i]] STlist[[i]][lower.tri(STlist[[i]])] <- par[-(1:nc[i])] } else { STlist[[i]][] <- par } } STlist } STatBoundary <- function(STpar, STlist, tol=1e-3) { ### Compute dummy vector of which ST parameters are at the ### boundary of the parameters space (variance-parameters that are ### zero). STcon <- STconstraints(STlist) stopifnot(length(STpar) == length(STcon)) as.integer(STcon == 1 & STpar <= tol) } paratBoundary <- function(rho, tol=1e-3) ### Compute dummy vector of which parameters are at the boundary of ### the parameter space. c(rep(0, rho$dims$nfepar), STatBoundary(ST2par(rho$ST), rho$ST, tol)) paratBoundary2 <- function(rho, tol=1e-3) { STcon <- STconstraints(rho$ST) c(rep(0L, rho$dims$nfepar), as.integer(STcon == 1 & ST2par(rho$ST) < tol)) } STconstraints <- function(STlist) { ### Compute indicator vector of which variance parameters are constrained above zero. The ### variance parameters are non-negative, while the covariance parameters are not ### constrained. ### ### This function can also be used to generate starting values for the covar. parameters. nc <- sapply(STlist, ncol) unlist(lapply(nc, function(qi) { c(rep(1L, qi), rep(0L, qi * (qi - 1) / 2)) } )) } parConstraints <- function(rho) ### Returns a dummy vector of the same length as getPar.clmm(rho) ### indicating which parameters are contrained to be non-negative. c(rep(0, rho$dims$nfepar), STconstraints(rho$ST)) STstart <- function(STlist) par2ST(STconstraints(STlist), STlist) isNested <- function(f1, f2) ### Borrowed from lme4/R/lmer.R ### Checks if f1 is nested within f2. { f1 <- as.factor(f1) f2 <- as.factor(f2) stopifnot(length(f1) == length(f2)) sm <- as(new("ngTMatrix", i = as.integer(f2) - 1L, j = as.integer(f1) - 1L, Dim = c(length(levels(f2)), length(levels(f1)))), "CsparseMatrix") all(diff(sm@p) < 2) } set.AGQ <- function(rho, nAGQ, control, ssr) { ## Stop if arguments are incompatible: if(nAGQ != 1 && !ssr) stop("Quadrature methods are not available with more than one random effects term", call.=FALSE) if(nAGQ != 1 && control$useMatrix) stop("Quadrature methods are not available with 'useMatrix = TRUE'", call.=FALSE) rho$nAGQ <- nAGQ if(nAGQ %in% 0:1) return(invisible()) ghq <- gauss.hermite(abs(nAGQ)) rho$ghqns <- ghq$nodes rho$ghqws <- if(nAGQ > 0) ghq$weights ## AGQ else log(ghq$weights) + (ghq$nodes^2)/2 ## GHQ } clmm.fit.env <- function(rho, control = list(), method=c("nlminb", "ucminf"), Hess = FALSE) ### Fit the clmm by optimizing the Laplace likelihood. ### Returns a list with elements: ### ### coefficients ### ST ### logLik ### Niter ### dims ### u ### optRes ### fitted.values ### L ### Zt ### ranef ### condVar ### gradient ### (Hessian) { method <- match.arg(method) if(method == "ucminf") warning("cannot use ucminf optimizer for this model, using nlminb instead") ## Compute lower bounds on the parameter vector lwr <- c(-Inf, 0)[parConstraints(rho) + 1] ## hack to remove ucminf control settings: keep <- !names(control) %in% c("grad", "grtol") control <- if(length(keep)) control[keep] else list() ## Fit the model with Laplace: fit <- try(nlminb(getPar.clmm(rho), function(par) getNLA(rho, par), lower=lwr, control=control), silent=TRUE) ### OPTION: Make it possible to use the ucminf optimizer with ### log-transformed std-par instead. ## Check if optimizer converged without error: if(inherits(fit, "try-error")) stop("optimizer ", method, " failed to converge", call.=FALSE) ### OPTION: Could have an argument c(warn, fail, ignore) to optionally ### return the fitted model despite the optimizer failing. ## Ensure parameters in rho are set at the optimum: setPar.clmm(rho, fit$par) ## Ensure random mode estimation at optimum: nllFast.u(rho) update.u(rho) names(rho$ST) <- names(rho$dims$nlev.re) ## Prepare list of results: res <- list(coefficients = fit$par[1:rho$dims$nfepar], ST = rho$ST, logLik = -fit$objective, dims = rho$dims, ### OPTION: Should we evaluate hess.u(rho) to make sure rho$L contains ### the right values corresponding to the optimum? u = rho$u, optRes = fit, fitted.values = rho$fitted, L = rho$L, Zt = rho$Zt ) ## save ranef and condVar in res: if(rho$allST1) { res$ranef <- rep.int(unlist(rho$ST), rho$dims$nlev.re) * rho$u res$condVar <- as.vector(diag(solve(rho$L)) * rep.int(unlist(rho$ST)^2, rho$dims$nlev.re)) } else { Lambda <- getLambda(rho$ST, rho$dims$nlev.re) res$ranef <- Lambda %*% rho$u res$condVar <- tcrossprod(Lambda %*% solve(rho$L), Lambda) } ## Add gradient vector and optionally Hessian matrix: bound <- as.logical(paratBoundary2(rho)) optpar <- fit$par[!bound] if(Hess) { ### NOTE: This is the Hessian evaluated for all parameters that are ### not at the boundary at the parameter space. The likelihood for ### models with boundary parameters is still defined as a function of ### all the parameters, so standard errors will differ whether or not ### boundary terms are included or not. gH <- deriv12(function(par) getNLA(rho, par, which=!bound), x=optpar) res$gradient <- gH$gradient res$Hessian <- gH$Hessian } else { res$gradient <- grad.ctr(function(par) getNLA(rho, par, which=!bound), x=optpar) } ### OPTION: We could check that the (forward) gradient for variances at the ### boundary are not < -1e-5 (wrt. -logLik/nll/getNLA) ## Setting Niter and neval after gradient and Hessian evaluations: res$Niter <- rho$Niter res$neval <- rho$neval ## return value: res } update.u <- function(rho) { stepFactor <- 1 innerIter <- 0 rho$u <- rho$uStart rho$nll <- nll.u(rho) if(!is.finite(rho$nll)) return(FALSE) rho$gradient <- grad.u(rho) maxGrad <- max(abs(rho$gradient)) conv <- -1 ## Convergence flag message <- "iteration limit reached when updating the random effects" if(rho$ctrl$trace > 0) Trace(iter=0, stepFactor, rho$nll, maxGrad, rho$u, first=TRUE) ## Newton-Raphson algorithm: for(i in 1:rho$ctrl$maxIter) { if(maxGrad < rho$ctrl$gradTol) { message <- "max|gradient| < tol, so current iterate is probably solution" if(rho$ctrl$trace > 0) cat("\nOptimizer converged! ", "max|grad|:", maxGrad, message, fill = TRUE) conv <- 0 break } if(!hess.u(rho)) return(FALSE) step <- as.vector(solve(rho$L, rho$gradient)) rho$u <- rho$u - stepFactor * step nllTry <- nllFast.u(rho) ## no 'X %*% beta' update lineIter <- 0 ## Step halfing: while(nllTry > rho$nll) { stepFactor <- stepFactor/2 rho$u <- rho$u + stepFactor * step nllTry <- nllFast.u(rho) ## no 'X %*% beta' update lineIter <- lineIter + 1 if(rho$ctrl$trace > 0) Trace(i+innerIter, stepFactor, rho$nll, maxGrad, rho$u, first=FALSE) if(lineIter > rho$ctrl$maxLineIter){ message <- "step factor reduced below minimum when updating the random effects" conv <- 1 break } innerIter <- innerIter + 1 } rho$nll <- nllTry rho$gradient <- grad.u(rho) maxGrad <- max(abs(rho$gradient)) if(rho$ctrl$trace > 0) Trace(i+innerIter, stepFactor, rho$nll, maxGrad, rho$u, first=FALSE) stepFactor <- min(1, 2 * stepFactor) } if(conv != 0 && rho$ctrl$innerCtrl == "warnOnly") { warning(message, "\n at iteration ", rho$Niter) utils::flush.console() } else if(conv != 0 && rho$ctrl$innerCtrl == "giveError") stop(message, "\n at iteration ", rho$Niter) rho$Niter <- rho$Niter + i - 1 if(!hess.u(rho)) return(FALSE) if(!is.finite(rho$nll)) return(FALSE) else return(TRUE) } clmm.finalize <- function(fit, frames, ths, use.ssr) { fit$tJac <- ths$tJac fit$contrasts <- attr(frames$X, "contrasts") fit$na.action <- attr(frames$mf, "na.action") fit$terms <- frames$terms ### QUEST: Should the terms object contain only the fixed effects ### terms? fit$xlevels <- .getXlevels(frames$terms, frames$mf) fit$y.levels <- levels(frames$y) fit <- within(fit, { ## extract coefficients from 'fit': names(coefficients) <- names(gradient) <- c(ths$alpha.names, colnames(frames$X)[-1]) alpha <- coefficients[1:dims$nalpha] beta <- if(dims$nbeta > 0) coefficients[dims$nalpha + 1:dims$nbeta] else numeric(0) ## set various fit elements: edf <- dims$edf <- dims$nfepar + dims$nSTpar dims$nobs <- sum(frames$wts) dims$df.residual <- dims$nobs - dims$edf Theta <- alpha %*% t(tJac) nm <- paste(y.levels[-length(y.levels)], y.levels[-1], sep="|") dimnames(Theta) <- list("", nm) rm(nm) info <- data.frame("link" = link, "threshold" = threshold, "nobs" = dims$nobs, "logLik" = formatC(logLik, digits=2, format="f"), "AIC" = formatC(-2*logLik + 2*dims$edf, digits=2, format="f"), ## "niter" = paste(optRes$info["neval"], "(", Niter, ")", ## sep=""), "niter" = paste(neval, "(", Niter, ")", sep=""), "max.grad" = formatC(max(abs(gradient)), digits=2, format="e") ## BIC is not part of output since it is not clear what ## the no. observations are. ) }) bound <- if(use.ssr) rep(FALSE, fit$dims$edf) else as.logical(paratBoundary2(fit)) dn <- c(names(fit$coefficients), paste("ST", seq_len(fit$dims$nSTpar), sep=""))[!bound] names(fit$gradient) <- dn if(!is.null(fit$Hessian)) dimnames(fit$Hessian) <- list(dn, dn) ## set class and return fit: class(fit) <- "clmm" return(fit) } ordinal/NEWS0000644000175100001440000002633114533322411012422 0ustar hornikusersThis file documents updates and changes in package ordinal since version 2010.03-04 March 04 2010: - First version of the package is created. 2010-04-06: - removing class "clm.fit" from results of finalizeRho. - moving offset computations from logLik and gradient funtions to newRho function. - Bug fixed in grad.lambda - checks and warning messages added to profile.clm - a warning is now given if the profile fits do not converge - profile.clm has grown the argument 'stepWarn', which gives a warning if the no. profile steps in each direction (up or down) is less than stepWarn (default 8), which indicates that the profile is unreliable. - Bug in loglog-link for clmm fits fixed. - Missing values are handled better in clm and clmm. - clmm has grown an argument 'sdFixed' which assigns a fixed value of the standard deviation of the random effects. Optimization is performed with respect to the remaining parameters. - profile.clmm, confint.profile.clmm and plot.profile.clmm are now available. Profiling is restricted to the standard deviation parameter of the random effects. - control.clm and control.clmm now handles the control parameters. 2010-05-06: - allowing the formulas to be constructed outside clm and clmm (the formulas are evaluated in the parent frame before the variable names are extracted) 2010-05-17: - Better evaluation in case of non-standard formula usage allowing e.g. clm(data$y ~ data$x). - Better handling of ill-defined variance-covariance matrix of the parameters in summary methods for clm and clmm objects. 2010-06-12: - Standard Gauss-Hermite quadrature is now available via the nAGQ argument to clmm. - Core functions implemented in C for speed. This includes all link functions, update of the conditional modes of the random effects, adaptive Gauss-Hermite quadrature and standard, i.e. non-adaptive Gauss-Hermite quadrature. Select R or C implementation via the argument doFit to clmm. - Bug in random effects estimates and their conditional modes corrected. 2010-07-06: - Bug in predict when 'newdata' was supplied is now corrected. 2010-07-23: - Better descriptions of random effect estimates and fitted values in the clmm help page. 2010-10-22: - Updated help page for predict.clm/clmm. 2010-12-13: - Bug in predict.clm corrected for models with nominal effects and newdata supplied (thanks to Simon Blomberg for the bug report). 2011-04-21: - Better message from summary.clmm when Hess = FALSE - endpoint thresholds are now closer to infinity. This is due to a bug report from Ioannis Kosmidis (March 30, 2011); the model estimates weren't right with very large scale effects. Tests are added to testCLM.R - gradTol in clm.control now defaults to 1e-5 rather than 1e-4. convTol is retained at 1e-4, so we are asking for closer convergence than we require. - getGnll no longer returns Inf if !all(pr > 0) - link utility functions are moved from clm.R to linkUtils.R - extensive testing for NaN-specials in C-code for the link functions is added. - details section added to clmm.control.Rd with comment about using "central" gradients with the ucminf optimizer. - examples updated in confint.Rd 2012-01-19: - Changed evaluation of formula in clm to make clm more forgiving for evaluation inside other functions. 2012-05-09: - Updated evaluation of formula in clmm, cf. resent update of clm. 2012-05-22: - Better evaluation of fitted probabilities. This should reduce the occurance of the "sqrt(phi2) : NaNs produced" error message. - Improved evaluation of control parameters in clmm using the new function getCtrlArgs. - Better warning if intercept is attempted removed in clmm. 2012-05-23: - Adding useMatrix argument to clmm.control - Using getFitted in clm - Implementing getFittedC in C and updating C code for fit.clmm.ssr with better and faster evaluation of fitted values - Introduction of links.h, links.c and get_fitted.c in /src 2012-05-29: - Correcting formula interpretation in clm to allow for really long formulas. - Better evaluation of control arguments in clmm (adjustment of getCtrlAgs). - Adding clmm.control.R to ./test 2012-09-10: - Computing Newton step in clm with solve() rather than .Call("La_dgesv", ...) to accomodate changes in R base. 2012-09-11: - Using globalVariables() conditional on getRversion() >= '2.15.1'. 2013-03-20: - Adding symmetric2 threshold function, which restricts the latent mean in the reference group to zero. This means that the central threshold (ylev even) is zero or that the two central thresholds are equal apart from their sign (ylev uneven). 2013-04-08: - Allowing zero weights in clm unless there are no observations with a positive weight in one or more response categories. 2013-04-11: - clm now computes Theta and alpha.mat tables of thresholds and threshold-parameters if nominal effects are specified. 2013-04-17: - anova.clm and anova.clmm now tests for illegal arguments 'test' and 'type' (wish from Ben Bolker and Jonathan Dushoff) - introducing convergence code 3 in clm: Thresholds are not increasing, which can happen with nominal effects. 2013-06-21: - Allowing zero weights in clm even if an entire response category is zeroed out. 2013-07-23: - Newton-Raphson fitting algorithm for CLMs has been redesigned: clm.fit.env is now deprecated (and removed from the code base) and all fitting of CLMs take place in a new version of clm.fit.NR - Convergence assessment has been improved with a new set of convergence codes and new message handling. - clm.control has gained several arguments to accommodate this. - in clm the new function conv.check assess convergence and compute the variance-covariance matrix of the parameters. Thus vcov is always part of a clm object. - vcov.clm has been redesigned and can now compute the variance-covariance matrix with Cholesky, SVD, EIGEN and QR methods or just grap it from the clm object (default). - nominal_test and scale_test functions added: they add all terms in a model to nominal and scale formulae respectively and perform likelihood ratio tests. These functions can be helpful in model development and model/GOF testing, e.g. of non-proportional odds. - Lazy-loading of data enabled. - MASS moved from Depends to Imports. - In clm man-page the 'value' list is ordered alphabetically as are the elements in a clm object. - clmm now computes the variance-covariance matrix with the Cholesky decomposition. - makeThresholds now take ylevels rather than y as argument. - clm.control and clmm.control are moved to control.R - drop.cols has gained argument drop.scale which controls whether columns in the scale design matrix are droped if they are linearly dependent of columns in the nominal design matrix. This was previously implicitly TRUE but is now FALSE to allow fits of certain models. - The list of control arguments are now storred as part of the clm output. - weights, offset and S.offset can now be missing or NULL in clm.fit. - predict.clm now allows type="eta". 2013-08-22: - Exporting S3 print method for convergence.clm objects. 2013-08-23: - Fixing an issue in the Hessian computation for boundary fits with useMatrix=FALSE and a single scalar random-effects term. - Allowing control parameters to be passed on to nlminb (when it is used). A bug was fixed in getCtrlArgs and clmm.control now includes method="nlminb". - Adding test for no. random effects >= no. observations for each r.e. term. 2013-08-25 - changing default optimizer from ucminf to nlminb - adding grad.ctr4 to the list of gradient functions - explicitly computing the number of objective function evaluations rather than relying on the optimizer's count. - wrapping calls to optimizers in try() to catch errors that occur here - adding test for non-finite parameter values in *.ssr objective functions. - adding list of control parameters to list of clmm output. - refining test of no. random effects > no. observations. - removing ucminf control settings from clmm.control when fitting with nlminb. - fixing bug with C version of NRalgv3 (conditional mode update): Hessian (D) values are now initialized to 1 rather than 0. 2013-08-26: - registrering global variables. - removing use of ':::'. 2013-08-27: - documenting list of control parameters in clmm objects. 2013-09-27: - no longer importing numDeriv as we now use our own gradient and hessian functions - moving Matrix package from Depends to Imports 2013-10-01: - Updating convergence checking in clm.fit and simple_clm to the clm standard - Removing distinction between (non-S3/4) sclm, eclm and clm model classes 2013-10-31: - Now having 'methods' in depends since this is needed to run clmm. This was most likely only a problem when using Rscript where the methods package is not loaded by default. 2014-11-12: - Reimplementation of formula, model.frame and design matrix processing motivated by a bug in model.matrix.clm and predict.clm reported by Russell Lenth 2014-11-07 when implementing lsmeans support for clm::ordinal. 2014-11-14: - Fixing bug in convergence checking (conv.check) and added test to /tests/test.clm.convergence.R - Improved the efficiency (i.e. speed) in the evaluation of standard errors for predictions using predict.clm (based on feature request by Thomas Jagger). 2015-01-21: - Updating Citation information per CRAN request. 2015-06-28: - Updating maintainer email address 2016-12-12: - Fixing a couple of errors in CLM tutorial vignette - Correcting description of threshold argument to clmm - qgumbel did not respect it's lower.tail argument (thanks to John Fox for reporting) - Test for no. random effects less than the no. observations now gives a warning instead of an error and is now manageable via clmm.control. 2018-04-19: - Fixed insufficient protect in get_fitted - Registration of native routines (C-code) - Reduce exec time for clmm examples - change rBind -> rbind 2018-08-25: - Added sign.location and sign.nominal to clm.control() - Implemented type I, II and III type ANODE tables for clm fits - Implemented flexible link functions for clm()s - Added new article submitted to JSS as vignette and moved old vignettes to GitHub 2019-03-09: - Massage tests to check out on R-devel 2019-04-25: - Change in formula evaluation in base R prompts this update - very kindly fixed by Martin Maechler (R core) in PR#18 2019-12-11: - Get rid of S3 class checks with class() - now using inherits() instead. 2020-08-22: - Fix evaluation of long formulae in clmm - thanks to StĂ©phane Guillou, Stefan Th. Gries and Tingting Zhan for reporting. 2022-11-13: - Fix function declaration without a prototype in utilityFuns.c per CRAN request. - Add model.matrix method for clmm-objects. - Enable evaluation of anova.clmm in separate environments - thanks to Karl Ove Hufthammer for reporting and Jack Taylor for a detailed analysis and suggestion for a fix. - Allow models with an implicit intercept and only random effects in clmm(). - Fixed index in equation (7) of the clm-vignette. - Fix import of ranef and VarCorr methods from nlme and lme4 packages 2023-12-04: - Change NCOL usage because Kurt Hornik wants to change the behavior of NCOL(NULL) in base R - Names of functions clm.fit.NR, clm.fit.flex and clm.fit.optim changed to clm_fit_NR, clm_fit_flex and clm_fit_optim to avoid hiccup from CRAN checks. ordinal/vignettes/0000755000175100001440000000000014660601550013733 5ustar hornikusersordinal/vignettes/clm_article_refs.bib0000644000175100001440000003776613654745104017737 0ustar hornikusers@Misc{ordinal-pkg, title = {\pkg{ordinal}---Regression Models for Ordinal Data }, author = {R. H. B. Christensen}, year = {2019}, note = {\proglang{R} package version 2019.12-10}, url = {http://www.cran.r-project.org/package=ordinal/}, } @Manual{emmeans, title = {\pkg{emmeans}: Estimated Marginal Means, aka Least-Squares Means}, author = {Russell Lenth}, year = {2020}, note = {R package version 1.4.6}, url = {https://CRAN.R-project.org/package=emmeans}, } @Manual{margins, title = {\pkg{margins}: Marginal Effects for Model Objects}, author = {Thomas J. Leeper}, year = {2018}, note = {R package version 0.3.23}, } @Article{ggeffects, title = {\pkg{ggeffects}: Tidy Data Frames of Marginal Effects from Regression Models.}, volume = {3}, doi = {10.21105/joss.00772}, number = {26}, journal = {Journal of Open Source Software}, author = {Daniel LĂĽdecke}, year = {2018}, pages = {772}, } @Article{effects1, title = {Visualizing Fit and Lack of Fit in Complex Regression Models with Predictor Effect Plots and Partial Residuals}, author = {John Fox and Sanford Weisberg}, journal = {Journal of Statistical Software}, year = {2018}, volume = {87}, number = {9}, pages = {1--27}, doi = {10.18637/jss.v087.i09}, url = {https://www.jstatsoft.org/v087/i09}, } @Article{effects2, title = {Effect Displays in \proglang{R} for Multinomial and Proportional-Odds Logit Models: Extensions to the \pkg{effects} Package}, author = {John Fox and Jangman Hong}, journal = {Journal of Statistical Software}, year = {2009}, volume = {32}, number = {1}, pages = {1--24}, url = {http://www.jstatsoft.org/v32/i01/}, } @Manual{generalhoslem, title = {\pkg{generalhoslem}: Goodness of Fit Tests for Logistic Regression Models}, author = {Matthew Jay}, year = {2019}, note = {R package version 1.3.4}, url = {https://CRAN.R-project.org/package=generalhoslem}, } @article{ananth97, author = {Ananth, C V and Kleinbaum, D G}, title = "{Regression Models for Ordinal Responses: A Review of Methods and Applications.}", journal = {International Journal of Epidemiology}, volume = {26}, number = {6}, pages = {1323-1333}, year = {1997}, month = {12}, issn = {0300-5771}, doi = {10.1093/ije/26.6.1323}, url = {https://doi.org/10.1093/ije/26.6.1323}, eprint = {https://academic.oup.com/ije/article-pdf/26/6/1323/18477637/261323.pdf}, } @Article{ordinalgmifs, title = {\pkg{ordinalgmifs}: An \proglang{R} Package for Ordinal Regression in High-dimensional Data Settings}, author = {Kellie J. Archer and Jiayi Hou and Qing Zhou and Kyle Ferber and John G. Layne and Amanda Elswick Gentry}, journal = {Cancer Informatics}, year = {2014}, volume = {13}, pages = {187-195}, url = {http://www.la-press.com/article.php?article_id=4569}, doi = {10.4137/CIN.S20806} } @Manual{oglmx, title = {\pkg{oglmx}: Estimation of Ordered Generalized Linear Models}, author = {Nathan Carroll}, year = {2018}, note = {R package version 3.0.0.0}, url = {https://CRAN.R-project.org/package=oglmx}, } @Article{mvord, title = {\pkg{mvord}: An \proglang{R} Package for Fitting Multivariate Ordinal Regression Models}, author = {Rainer Hirk and Kurt Hornik and Laura Vana}, journal = {Journal of Statistical Software}, year = {2020}, volume = {93}, number = {4}, pages = {1--41}, doi = {10.18637/jss.v093.i04}, } @Manual{CUB, title = {\pkg{CUB}: A Class of Mixture Models for Ordinal Data}, author = {Maria Iannario and Domenico Piccolo and Rosaria Simone}, year = {2020}, note = {R package version 1.1.4}, url = {https://CRAN.R-project.org/package=CUB}, } @Article{MCMCpack, title = {\pkg{MCMCpack}: Markov Chain Monte Carlo in \proglang{R}}, author = {Andrew D. Martin and Kevin M. Quinn and Jong Hee Park}, journal = {Journal of Statistical Software}, year = {2011}, volume = {42}, number = {9}, pages = {22}, url = {http://www.jstatsoft.org/v42/i09/}, doi = {10.18637/jss.v042.i09}, } @Article{decarlo98, author = {Lawrence T DeCarlo}, title = {{Signal Detection Theory and Generalized Linear Models}}, journal = {Psychological Methods}, year = 1998, volume = 3, number = 2, doi = {10.1037/1082-989X.3.2.186}, pages = {185-205}} @Article{christensen11, author = {Rune Haubo Bojesen Christensen and Graham Cleaver and Per Bruun Brockhoff}, title = {{Statistical and Thurstonian Models for the A-not A Protocol with and without Sureness}}, journal = {Food Quality and Preference}, year = 2011, pages = {542-549}, volume = {22}, doi = {10.1016/j.foodqual.2011.03.003}} @Book{macmillan05, author = {Neil A Macmillan and C Douglas Creelman}, title = {Detection Theory, A User's Guide}, publisher = {Lawrence Elbaum Associates, Publishers}, year = 2005, edition = {2nd}, ISBN = {978-0805842319} } @article{kuznetsova17, author = {Alexandra Kuznetsova and Per Brockhoff and Rune Christensen}, title = {\pkg{lmerTest} Package: Tests in Linear Mixed Effects Models}, journal = {Journal of Statistical Software, Articles}, volume = {82}, number = {13}, year = {2017}, keywords = {denominator degree of freedom, Satterthwaite's approximation, ANOVA, R, linear mixed effects models, lme4}, abstract = {One of the frequent questions by users of the mixed model function lmer of the lme4 package has been: How can I get p values for the F and t tests for objects returned by lmer? The lmerTest package extends the 'lmerMod' class of the lme4 package, by overloading the anova and summary functions by providing p values for tests for fixed effects. We have implemented the Satterthwaite's method for approximating degrees of freedom for the t and F tests. We have also implemented the construction of Type I - III ANOVA tables. Furthermore, one may also obtain the summary as well as the anova table using the Kenward-Roger approximation for denominator degrees of freedom (based on the KRmodcomp function from the pbkrtest package). Some other convenient mixed model analysis tools such as a step method, that performs backward elimination of nonsignificant effects - both random and fixed, calculation of population means and multiple comparison tests together with plot facilities are provided by the package as well.}, issn = {1548-7660}, pages = {1--26}, doi = {10.18637/jss.v082.i13}, url = {https://www.jstatsoft.org/v082/i13} } @Article{cox95, author = {Christopher Cox}, title = {Location-Scale Cumulative Odds Models for Ordinal Data: A Generalized Non-Linear Model Approach}, journal = {Statistics in Medicine}, year = 1995, volume = 14, doi = {10.1002/sim.4780141105}, pages = {1191-1203}, } @Book{elden04, author = {Lars Eld\'en and Linde Wittmeyer-Koch and Hans Bruun Nielsen}, title = {Introduction to Numerical Computation --- Analysis and \proglang{MATLAB} Illustrations}, publisher = {Studentlitteratur}, ISBN = {978-9144037271}, year = 2004} @Article{farewell77, author = {Vernon T Farewell and R L Prentice}, title = {A Study of Distributional Shape in Life Testing}, journal = {{Technometrics}}, year = 1977, volume = 19, doi = {10.2307/1268257}, pages = {69-77}} @Article{genter85, author = {Frederic C Genter and Vernon T Farewell}, title = {Goodness-of-Link Testing in Ordinal Regression Models}, journal = {{The Canadian Journal of Statistics}}, year = 1985, volume = 13, number = 1, doi = {10.2307/3315165}, pages = {37-44}, } @Article{aranda-ordaz83, author = {Francisco J Aranda-Ordaz}, title = {An Extension of the Proportional-Hazards Model for Grouped Data}, journal = {Biometrics}, year = 1983, volume = 39, doi = {10.2307/2530811}, pages = {109-117}} @Article{peterson90, author = {Bercedis Peterson and Frank E {Harrell Jr.}}, title = {Partial Proportional Odds Models for Ordinal Response Variables}, journal = {Applied Statistics}, year = 1990, volume = 39, doi = {10.2307/2347760}, pages = {205-217} } @Article{peterson92, author = {Bercedis Peterson and Frank E {Harrell Jr.}}, title = {Proportional Odds Model}, journal = {Biometrics}, year = 1992, month = {March}, note = {Letters to the Editor} } @Book{brazzale07, author = {A R Brazzale and A C Davison and N Reid}, title = {Applied Asymptotics---Case Studies in Small-Sample Statistics}, ISBN = {9780521847032}, publisher = {Cambridge University Press}, year = 2007} @Book{pawitan01, author = {Yudi Pawitan}, title = {{In All Likelihood---Statistical Modelling and Inference Using Likelihood}}, publisher = {Oxford University Press}, ISBN = {978-0198507659}, year = 2001 } @Article{efron78, author = {Bradley Efron and David V Hinkley}, title = {{Assessing the Accuracy of the Maximum Likelihood Estimator: Observed versus Expected Fisher Information}}, journal = {Biometrika}, year = 1978, volume = 65, number = 3, doi = {10.1093/biomet/65.3.457}, pages = {457-487}, } @article{burridge81, title = {A Note on Maximum Likelihood Estimation for Regression Models Using Grouped Data}, author = {Burridge, J.}, journal = {Journal of the Royal Statistical Society B}, volume = {43}, number = {1}, pages = {41-45}, ISSN = {00359246}, language = {English}, year = {1981}, publisher = {Blackwell Publishing for the Royal Statistical Society}, } @article{pratt81, title = {Concavity of the Log Likelihood}, author = {Pratt, John W.}, journal = {Journal of the American Statistical Association}, volume = {76}, number = {373}, pages = {103-106}, ISSN = {01621459}, language = {English}, year = {1981}, doi = {10.2307/2287052}, } @Book{agresti10, author = {Alan Agresti}, title = {Analysis of Ordinal Categorical Data}, publisher = {John Wiley \& Sons}, year = 2010, edition = {2nd}, doi = {10.1002/9780470594001} } @Book{agresti02, author = {Alan Agresti}, title = {Categorical Data Analysis}, publisher = {John Wiley \& Sons}, year = 2002, edition = {3rd}, ISBN = {978-0470463635}, } @Article{mccullagh80, author = {Peter McCullagh}, title = {Regression Models for Ordinal Data}, journal = {Journal of the Royal Statistical Society B}, year = 1980, volume = 42, pages = {109-142} } @Article{randall89, author = {J.H. Randall}, title = {The Analysis of Sensory Data by Generalised Linear Model}, journal = {Biometrical journal}, year = 1989, volume = 7, pages = {781-793}, doi = {10.1002/bimj.4710310703}, } @phdthesis{mythesis, title = "Sensometrics: Thurstonian and Statistical Models", author = "Christensen, Rune Haubo Bojesen", year = "2012", publisher = "Technical University of Denmark (DTU)", school = "Technical University of Denmark (DTU)", url = "http://orbit.dtu.dk/files/12270008/phd271_Rune_Haubo_net.pdf" } @Manual{SAStype, title = {The Four Types of Estimable Functions -- \proglang{SAS/STAT} \textregistered 9.22 User's Guide}, author = {\proglang{SAS} Institute Inc.}, organization = {\proglang{SAS} Institute Inc.}, address = {Cary, NC}, year = {2008}, url = {https://support.sas.com/documentation/cdl/en/statugestimable/61763/PDF/default/statugestimable.pdf}, } @Manual{SAS, title = {\proglang{SAS/STAT} \textregistered 9.22 User's Guide}, author = {\proglang{SAS} Institute Inc.}, organization = {\proglang{SAS} Institute Inc.}, address = {Cary, NC}, year = {2010}, url = {https://support.sas.com/documentation/}, } @Manual{ucminf, title = {\pkg{ucminf}: General-Purpose Unconstrained Non-Linear Optimization}, author = {Hans Bruun Nielsen and Stig Bousgaard Mortensen}, year = {2016}, note = {\proglang{R} package version 1.1-4}, url = {https://CRAN.R-project.org/package=ucminf}, } @Book{fahrmeir01, author = {Ludwig Fahrmeir and Gerhard Tutz}, title = {Multivariate Statistical Modelling Based on Generalized Linear Models}, publisher = {Springer-Verlag}, year = 2001, series = {Springer series in statistics}, edition = {2nd} } @Book{greene10, author = {William H Greene and David A Hensher}, title = {Modeling Ordered Choices: A Primer}, publisher = {Cambridge University Press}, year = 2010} @Book{mccullagh89, author = {Peter McCullagh and John A. Nelder}, title = {Generalized Linear Models}, edition = {2nd}, year = {1989}, publisher = {Chapman \& Hall}, address = {London}, doi = {10.1007/978-1-4899-3242-6}, } @Manual{Stata, title = {\proglang{Stata} 15 Base Reference Manual}, author = {{StataCorp}}, publisher = "\proglang{Stata} Press", address = "College Station, TX", year = {2017}, url = {https://www.stata.com/}, } @article{oglm, author = "Williams, R.", title = "Fitting Heterogeneous Choice Models with \pkg{oglm}", journal = "Stata Journal", publisher = "\proglang{Stata} Press", address = "College Station, TX", volume = "10", number = "4", year = "2010", pages = "540-567(28)", url = "http://www.stata-journal.com/article.html?article=st0208" } @Article{gllamm, author="Rabe-Hesketh, Sophia and Skrondal, Anders and Pickles, Andrew", title="Generalized Multilevel Structural Equation Modeling", journal="Psychometrika", year="2004", month="Jun", day="01", volume="69", number="2", pages="167--190", issn="1860-0980", doi="10.1007/BF02295939", url="https://doi.org/10.1007/BF02295939" } @Manual{SPSS, title = {\proglang{IBM SPSS} Statistics for Windows, Version 25.0}, author = {{IBM Corp.}}, organization = {IBM Corp.}, address = {Armonk, NY}, year = {2017}, } @manual{Matlab, author = {\proglang{Matlab}}, address = {Natick, Massachusetts}, organization = {The Mathworks, Inc.}, title = {{\proglang{Matlab} version 9.8 (R2020a)}}, year = {2020} } @phdthesis{mord, author = {Fabian Pedregosa-Izquierdo}, title = {Feature Extraction and Supervised Learning on fMRI: From Practice to Theory}, school = {UniversitĂ© Pierre et Marie Curie}, year = 2015, address = {Paris VI}, url = {https://pythonhosted.org/mord/} } @Manual{R, title = {\proglang{R}: {A} Language and Environment for Statistical Computing}, author = {{\proglang{R} Core Team}}, organization = {\proglang{R} Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2020}, url = {https://www.R-project.org/}, } @Article{brms, title = {\pkg{brms}: An \proglang{R} Package for {Bayesian} Multilevel Models Using \pkg{Stan}}, author = {Paul-Christian BĂĽrkner}, journal = {Journal of Statistical Software}, year = {2017}, volume = {80}, number = {1}, pages = {1--28}, doi = {10.18637/jss.v080.i01}, encoding = {UTF-8}, } @Manual{rms, title = {\pkg{rms}: Regression Modeling Strategies}, author = {Frank E {Harrell Jr}}, year = {2018}, note = {\proglang{R} package version 5.1-2}, url = {https://CRAN.R-project.org/package=rms}, } @Book{MASS, author = {William N. Venables and Brian D. Ripley}, title = {Modern Applied Statistics with \proglang{S}}, edition = {4th}, year = {2002}, pages = {495}, publisher = {Springer-Verlag}, address = {New York}, doi = {10.1007/978-0-387-21706-2}, } @Article{VGAM, author = {Thomas W. Yee}, title = {The \pkg{VGAM} Package for Categorical Data Analysis}, journal = {Journal of Statistical Software}, year = {2010}, volume = {32}, number = {10}, pages = {1--34}, doi = {10.18637/jss.v032.i10}, } @Article{Zeileis+Kleiber+Jackman:2008, author = {Achim Zeileis and Christian Kleiber and Simon Jackman}, title = {Regression Models for Count Data in \proglang{R}}, journal = {Journal of Statistical Software}, year = {2008}, volume = {27}, number = {8}, pages = {1--25}, doi = {10.18637/jss.v027.i08}, } ordinal/vignettes/static_figs/0000755000175100001440000000000014533322576016241 5ustar hornikusersordinal/vignettes/static_figs/fig-figFlex.pdf0000755000175100001440000003474013633002525021063 0ustar hornikusers%PDF-1.4 %âăĎÓ\r 1 0 obj << /CreationDate (D:20120625120914) /ModDate (D:20120625120914) /Title (R Graphics Output) /Producer (R 2.15.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 10928 /Filter /FlateDecode >> stream xśµťKĎ-KRžçűW¬a÷Ŕ›Ę{¦%OŔ É–q·d!`€Á }°€˙xÇ{‰úŞÚ¸éÓŘłÖyv­U™U•ďúĘçŹ?ĺó7źżűö'úďSżďýiĺűÜźşë÷Ú6ŢţţżţëçożýÁ?ü—˙đ‡ź?úŐ·ëűu]źçëŻţč?Ĺż®ńůÇoöźëó×ßĘçŹăżżůVđĎüVÚ÷Ö>˝/őóhR˙üíI ~´Dm“ŽhvP˝Dç"UĐř^x–ÚEťíŐ)šlŻnŃ$žs~ŻÔЍ/R-žĄ±g ×Z˘Ęöú%ěuŻ˘Ĺ^wöeżŘë>EŤgéG4ŘŢ(˘Íö[?ß/özLQcŻÇMözŃćY&ľWŻď…g™SÔŮŢ<˘É^Ż":ěőB?ků^ŘëµDť˝Ţ—hń,»‰ŰŰl! ŰŰGÔŮëSE‹˝>¸µ}żŘësD5Î2ľ_U4:ÉźŚvAüd˙~MP©˘VISw$c"hó,•ýŚĎŇ5¶Ç'w 4DŃ{Ű›‹ťcÔy–ľD“gá :lođ, ˝š—¨ł×ł‹{­ç°ľöz±Úh‹ŰŰ>¶ŘŢć±ěői˘Ę^‹^ô‰Ov!áX»đTš¨u’ŹEh9A°Ć)ëkśşKAŤgéE4yŢ— ĂöžQ«°_ĐÁăÎ ¬qj öšŁ®5ZăÔµu¶w.Ńb{‡źě´ĆĄ«m´ô r‰`ŤK>$Ö¸|}aAŤŁ´E°Ć%Km|A´Ć6iŤK×xG@G4ŮŢš˘Íö6Ű[đrA´‡ Xă†`Ť[ŁĽń3Aęő¦5ny° >@­‹âŢq|Á·ďüˇ5n÷óĐ7¬—´xÚtż`y #ŞlŹc)Öx4z‚`ŤGăĄZă‘7 ‚5ÝÁ xöçFÚ4ŘBĄ5Ýł Xăq_*­ńčIEźĆĄ»Ô,=Ö>6O3(ć« ŽĎ °Ć >?ÍAňżAĽđr<Ë®˘ĂöĎţb|Ż’ÖÄ6ş@=˛µQäçe3Ac‰ÂoŹâö&Z â¸Ć¨Ý 3EńTGŐ(Ŕş@Őź kUsĆFŃ÷`4­ O|€Ö…5éŠĆÔh~šă&H-ô0¨ůXô)cwą‚ćĹS Ú>ÖD_Ž»gńŁvxNĹi ú Ü‘â\…« ö×Y@Ľ/¸Îčµ˝~P´Dż톥ńIŁ÷DO‹ţVĐ.˘°Ća9sŚ©ącpö˘UˇO D;B/Ď˝8 Ú ÚŤ^ÇS\˘°Ć±d©hi:ďÄÄ]RĎâÜHwpÂ_Ś-†łUŁśmş)¬1hšÂf‚8vńýhďh ŠČ%¨šÂňĆ‘źŔ7H}9°ĆxÝC#l^óúLçÍA«ś—l:ŢăŢMŰţµ‚NĹH™EłĚ¤=Ń6ă=<ű´uÄ{چxĄőÇ{Ěłę‚bLU~ŹďńŞÖ9öă•sŢŁ|6ÄYńJ˙ďgĹ+ăłxkŚ×éOĆ˝›Msęě°‹Ů5Îâ=F^§(ü(^/QÄYłËłĎëŚWZŐdě€×& kŚ×ácqâ•OlrŢŤWŽžxďŻÍÇâľNĎ›ń–0=Î…§Żôńwd.ŤÝxĎ>—űÉůe.ĹgAńăU×·aŤńJ{Ź÷°ĽxŐ}9°Ć zá °Ćy|?ú4=–â=îÁ<ë‚5qfŠ{Żô/ńŁ6^‡?÷<^9ŰŻŻWE\±ŠîDĽ‡5®˘ą#ŢĂă•W´*¬Ż]¶†×" ĎľŞf™x»Ç+Űk5đ:DŃ'ĽVQXăj‘«c,®®g»¸rXńqÖęşgń~fuEdkŕ©Ćk-˘ ńĘX?ŢăZÖđµXŢš˛¸xʧłě‰đľA´wĽwml1ZKóŢ'Ö÷ b˛ť¬­:(⬵5>ă=z¸ěQâ=¬qůąÇ{Xă:naĂč˝ă=Ľ\ĽŞ…{·/?ż8+-č_ă•qţő±…xkÜEńÄć,Ľ‹Z÷ßńş†(ĽG,GŮBPś-#$(¬1c>ŢĂw•‡Ćgâ,öřĚŃ'EśÄŘź‰^wĹřLq–Ág.}VPXc=&>íyvÚ\ĎŃŰEď&ż7pî=´Ú\Ťě)Ö¸§¬#(Fßv,Ľ96öňµÓClÇ­›"~"(¬q;âÜŚ‚÷†'Ũ bó㤧˛aŤűhn { â „o,®hc´qĚÇ{ÄYçňÓ<“…5ŃńŤ ˘ż>ŚáŽ#«CD˙rč!NQäď1GĆ+cčxʧsŞúÖÄ;ÖxŞ˘‹xkŚ×˝Da]§iŤp8nNÓhĹg&km|¦‚¸;ŚŤŽGČárşĽ[PÜ» Ž¬Ă¬ĹńĘ˙Ú@śeWŕÇ+ÚĂqPc_č/Ž×”‡+Í34Çá˝hýg"Ί×b kŚ×f k<Kń˝ŹWŢůĂQt¦űÂQtżÄ{ŚďxĄW<ŚNâUĎk“ăUOPXăYľ/\cśĄqwůx–9ľ9vOçlߥűsĽB ЧDŹR.Ł@>j`ŚŁř { Ś›H÷ żŘôÝ‚‡Č ›<Žw€a”K§ŞxžÇ+`¸xś‘Ń8B.vgĂ4ÁU_o0N03ŕ0O°o0M°24Áá6xş°ŽGŢÉa Ľ˘äÂčô•¦ .:ß@ÇxÉ—ąń1ĎMV¶*řtr×őL|<ŞąOń1ŻJžÓ|tľĄűĂáB>ćˇöw7ŻEöýeKîćŞë9ÇV7oŤŹ©ö':J.ćîńÖÍSçëË|t>ŮSa€C.ćîń^ÍKăÍ÷cÁĐ^Ä7žö4ĚýČŢ’—ěw‰ą€˘˝vłýr±ÁöĘđ–“ţ€ĽÔ+ýĆ[eD2ÍÎS&pÓénVšőńô lôkj;pŇŻéÖTÚś {^9äáp/c§?Ős śô§;Źúĺ©ď6NÝŰÉčŔNϬěwe—>Ťa«tŞŽ`ş¨ĆÁŮŔgfÓ®hp_y·8ńjđÎcľ9\(a㣨Ěab^ĆĆ©LNůX͉›“§/Á?`Mlś„GâÔ,<ڇӰ†TÝžÍݫͩ¨ŰWćÔĺď+ořÉ-†Ęřéůô™‹`AÎ1p1‘m4n’ Ě8ĆcNó5ÁS=1.F?S.°s„?ÓŘ˙ČJ—Űś¶q3âŇŤmt¦§řéĆ-Et5Śaá§řq7îť´—Ö8Áçt‡LmÖ<ŞpQÎ=Pń˘ŰĺvÎv’ŘwşĎÜśŘ9€ð·3Ą 8Ř˝˝µ‚Ś­bÝe\ ™ĺÄłeĚ,›¬ š5%FÍ%?ˇŁBi ŁŁ==TuMŻaÎ{zvÜ ř}Ś˝·w €@îa×Ţ}ďž”á÷îŮIĆßŰkM`óöB漽J†{Ű^Âäp PsP`çIw2pq…$'OG % źűÎů‰Ü‚e¬;k»ôŢťÓĘ.Ţ^C.W«»eÄňÎA?ps•¨ť˛Î4äv:ÖkGć8€aëŘŘĂśµęvóÚŮPG籊=ĆÉ%®â^;pÍkeCC(Đ °µ˛!:5m8ťËµ5łˇ “YŢ..ĺŠ »[°Î×@ÂĆSHÚO@†`“˛˛ÎŐúňţ°1 Ń›q0áťŇŤ&VÓň¦tN«9‚ë ‹5"ď^š‘xg EŽq0Î]β‘ŠÉŕ$PąyB$Ę™ŚQh¨ÜřĘ™éđ Ô@Bľ—ůÝŤA_„tű</­śE‘ň˝€ »73dG»ĺsÁ>@EXHZ+y•sžŰwrtóLż1¸Ă;·gëŔ¸iÓ›4ŔzćĘ ä" ·blĚĽé)(í<ťfđdÎJ5#˝wŚń(çô38˘ćČďNóůÝĹ”éČďr2ť9="iÚ`ÎËłgźąq4sCzpw9Îm sžÍÁ8˛ÇĚśĘÇ"¬Ôé4*węűLSťÍ#9cfk5&·b¦mĆÉ|­w×/&P3HU¦xÇdH _ŔŮŚq-łř¶O.˙§Óe2˛źés fĘZÓúĂśµüŐd}ăÝе “]ŚťirÝIÜĺÉŐţ#g«ŔĘ|{MDj>¨łgn^8Śm—‹GÉOLň×ÄÍ,żO5ąĹ±´d6î+¸Ww —;f+ď3g \ź†îČř ›ľW‹»fÓ&‰t±6EŽűfÓ®U˛ĐÉýÂ1ň ó^ŔT PŐ 2dŠĚƵŚŘ>KOÁť!ąk8n éN"gĽ:3śOç†Ó0NíFăćv”úŚĽ1wµôŚ·µ×!sĚ}­‘G±‘Ö<WóNšY ¶Ňtź'wäN=Ü’ó%tÜĂQ}sŕŐ77óşqqĐő$ĽpŹÓXą¨)ł ·_-VŚ\«!©Ě L-ŐóCŁ(O ÜÂÔ \Ü]% ·F.ł›öBŹ1Ěy¤Ń-Αk*LµÜ~u»śGf@0MsVŃćbŠ;·şÜ\Ɔă4b‡-ł/H-ł]M^‹; =S›[ ŃŞ±sz%.nB«›•~˛â¦pŰűřů*ÂéÇóŃ.ŢřVŇyhî|Ëo(ŤMňÄÁ˝ö“¸µŮ®n4î~oßśŔĆMű™8ąkŻÁ€Ź§R˛fsĆďÎá;7îĺ‚:rç^Łe'ެŚéŢevJČó#deĺ‚F’Ô,rX:óDLĽŚĹî3óÔ=#¨ÍRŚî­`ĺ©4ž‘Şf»ZZn.{†[Ŕ_,™đ%°Îˇ§űBňYĄè ĹfHXł¸Ds÷ć2űíĂ8U^rŚŞRŃŘ@Ňše*š4‘µVťĘeTˇŠ ňÖlWxh#ŔjT­Šâv-˛şSłĺ0ďҧ×G‡vݧÇŐátŮ3*8ÜÄďÓF+ÁKu=ÝŘXtňč`}ĐÉŁ›BŠ(‘fE’˘ŻĂebÝ<:Y“¤‰@©jEÂ@F}xE¸ą,ĆÉSÉO–$őá•Öă¬Lň˝š,_ŽľkşwK€G…Yşu‹ć<ĽĆA:˘Ţĺ_ŔĘKĐśr¶‹Ęä6•ęĂśµűđ" ¶+K9ÇEŠľĎÜ)ď®M¨‡îä°±"Ž!DU©wM1@U*ň)T$­X„·‹±« o§Ęđ†ńđT±U ĚŻrľęzĹąŚ*XTÉYŕ9w•`˝¸ńŮ»ŔQîúBŕR)˘ľŰ]µ¨:7ä§żĘCՏ˸Uţ¨>sO<«!­ßĄ’@Ő.¶mTńbS7¦«[76^B«ĆÉKh—ń”»°ł^ËŚuUÂX»q}Ő‹Ź Fu¬ĽČJS`ßw*pńTŞ9ĽŽ K7ÖĺęVáP±k1.^‚jQËK` l<!p°]•A®›şC—Š,4/A%“Ť—Ŕ svIćÜ\X*'‘¦ąŞĆćń\č^aÎÍĂ»4šssQgáN*°—Ú˝Ś‡íŞ´đţw[aÎŽľ€0çćRŇÂjĐŢä˝U§ęĆÁv]…ĘźŢ4ĂÖŠŠŢlVŤ—ŕÖIsnr}Ŕ=Čą¦{ÇŘŘ®Ka™AęMkŕá%ČB ¤Oě:U7NµŰŚg<[YÝÁ'°óTž¸Ú ŹNĹ+ŞĚ¶őfW€ s}áâ%0Ú¬•‰ń'6^‚üFŕŕ%¨d¸2íó…,Mc/śĽůśĘÝÖ/l4çćŇäĘ$çç|áQ»Şćrő‰]—PŚëzá™d 0đ2öóÂĹK'D†ąĽ°®žjlă:\Ś Řx cÇ~áîÜ4ç6ťjg{á><6gU×csľQć|ŁĚY óő®v»Qć|ŁĚŮXlÎ7ĘśąŢ®ő@nç=±žĘśo”9›ÍyTŁĚůĆy˝pĎv›óŤ2çeΚÚZ·9<<±·Ęśo”9§ÍůF™3éŔŐ(=Áë|ˇĚůF™łqŰśol× Çzán<6gMĺíŘśo”9ß(sö‹1áűőB™óŤ2gc±9ßŘű Wyáy¶[mÎ7öóB™3ŁÍÚ›ÍůFM"7ŽţÂ}=°Űśo”9ß8ö ÷óT’<°­Ęśo”9§ÍůĆ^^8÷ ĎłÝesľ±Ď®úÂó<Őö$ră(/\ĎK86gE}ýŘśo”9ߨID8¤@x`ë/”9ß(s6›óŤmżpŽžňŔjsľ±·ÎóÂó^¸Ę ĎóNšsb?/\ŹvçĺđĆş_8ú ÷ăfIsNlí…ăĽp?.aÖ4çĶ^8Ű ÷óTÍ1፽ľpîžç%ô4çÄ>_¸Ú ϳݑćś8Ę ×óćËś‘aľ^8ć źć<×ËśU‡üħ9ŁůŮîvLxc;/|šóÜ/sV9ňźć¬‚ä'žÇ%¬ëeÎëz™óş^ćĽĘËśëzáh/|šóŞ/s^őeΫľĚ9p?ŰmŽ o|šój/s^íeΫżĚćňÂůŐÉDZ+,&E™ĆVe~!#Ş'† ~bDTOŚę )Ő{bo/śç…(śş‘ŐŁ÷O\ĎS1˘zbť/ő…ëy ڍžŘ®ŽőÂýl—ŃrĚ6^8Ë ÷úB©5źŘŻÎůÂSČꉽżp]/<ĎvQ=±ź®Ç%H¸ůÄş^8ú ÷ł]FTOlő…cżp?OĹę‰m˝p¶îç%0˘zb//śë…çŮ.#Ş'v_B®úÂłH1çGyáZdDőÄz^8Ć ÷ăTŇt>±őÎë…űq Ňu>±í¦9·OJ;żŐÓśŤiÎĆ4g+:kyaß/\ĎvűmÎ_Ď'¦9÷OŞ<żŐ[yašł1Í™8os6¶ńÂévÇ'Őž_Čę‰iÎĆ4găyžjßćlěn×ĐU^ćL<·9ÓśŤëq*)?‰ë“ŇĎ'¦9Óś‰ĺ6ç/ůçsů€~a˝ÍŮćlEhšł1Í™ŘîIÄŘŐ®ŁŚ¨žhs>V{Úś™°”ô‰6çÄŁv™ě”ô‰6çD›3Ą„>Ńćś8Ü®ő˘»>pĄ9'ÚśYŔ*YčmÎ’îśD›Ű]ꔆ>Ńć|,ů´9'Úś™E–<ô‰íş*PŃ'Ňś‹Ň’~a‘9»¤]"Ń'Ž&lꔉ©V¬2ç/¤9ĄÉĄ%Z8şŰQ×'ŢÄýIµč·/JĎ.s.Ú2’`”X>©}âQ»R¬˛ŕŹŘ>)%öOŞF‰ă“˛Q"ű)őveŞG‰…^j—›$ŇŹ–,•€”8?© %˛WGć\´ý" )›3‘Ë'U¤DĘ/™s±^ň’9§Xô’9«0/™s±h±hqĹ™´¤Ü€ý“żÔ¤%…E’“­.:b J˝—›ŠRŕ°´éŢ“¦”Ř>)*-Ň#ĄŞ”¸>)+%žOęJa)‘}2çbYć9»ŕNÚŇ’â(‰KąáĚSMM"E[ ’—Ç'őĄÄőI)ŃšR›3ĂIL‰_S˘eĄ—ÚÝV’V]‚¤Ŕ;Í™®O:S"ż{ŇśéU¤4ĺ&yů¤Ô”hU*cBKA$6+JiÎ.Ť‘Ü´¤:LzS˘e¤Ś ]-Ĺ)q|RrJÜźÔś›…Ą4çŞ!*Ő)qRv LęQ»ÝRÓŞKNłÉśëSzJ´ľôŇ©$}í2gkÚ¤>%®OĘOY2`ĹéĄKŕă–Ő©@ňJ‚JdݦbBWšK„J\źTˇ˛áK†J´Ö”ćlqť„¨DkO69(IQ‰<şeÎM~CbT˘ŹŇś›¬[rT"ŹM"θKZRÇ'EjÉB{IR‰ë“šTŕ˛`učTĽWRĄ–¬Ů—,µorJ—Jśź¦˘€‚“—”©D‹QiήŰUÉ5PĐŞĐ›ŘR§˛Rn2gďĄKźJü¨y˝R¨˛¬ÝčšDş<4ŞÄőI‘*‹>¬K˝t ÇÂTšłËń¤S%îO UY!Âv§bBeHŞ ”NwĘśS;eÎVEK­ ”ČvÉś‡|ťôŞĺ¸˛^‚U —R¬˛öÄ"Ušó´–wËś-–”hČA(Ő*°şěQşUÖ­| WĂZUšsŠ+/™ł‹ŚÎĄIÄÁŠhP·rYˇĘвM¬y1Ňś—nť|^ąŐU“ČŇć›$¬@éM«bÂĄç++PÝh2gËw$c-·^łÉś·ž „¬@VśIÉZR'$)kąś]ćĽőŚ$f-Ç5°Rł˛ÖĆRWĆ„GîZzV  Z‹ô˘©h-)„’¤µ¤LJšVć”OŠZÇ:ÖP(˝ą,€Ť!¬_şV–íXĘÖVSíĄ+cŹŹnťŠŁNÚVőěOŠ[YÔăŁń4j 1%oeŤŹtʱČç2÷NľőŻ«oěAŰţuk\Y4ĚýU†&•+Ř:NΩ, šćşÉçˇsEńOIěľČ*·’ÎlÝ(u®`Jç Ţť+ŘşNVÁ @H•çŇą˛śhšg#«ŠP:W°¤4Ňą‚Ý_ę\Q4¤Ú@é\Yb”şŘÓÉŞď”ÎĽ’ű$[—ĘR@V%źMöů¨sŹäQČ+y-˛ź -Y‰”:ÖzČ-uŻc}˝¬­×JY2u®,NÚć†ëŮ©óĄÎ•ĺIĹĽ'y¦nµT˛u›ÔąÖë¤.”:WpKě)—,ýHť+k–¦ą7˛ž§t®¨K˛“:W°Ć‡t®`ë@ň€Oę^ăÁ˛Iź§Ž€•L©{ ŔR¦f•¬jmé\Y̤ó±R ÜRÇŽĺLť+ŘşO”ł )u¬pĹцu®ŕůĐą‚w߸žžßgŃ&ŘíSç ľuŻpĄg˙9PPş¤ń!ť+řÖ˝öAVŐĄt®ŕ“:Xř4«óQç î©{…?(ţÝ"ë\Á*Ů–Î%LőˇsKH ť+xĺçá”˙‘:W°ěC:W°üŤt®ŕťşWřboĄ+ ťŠţ Źi]Yę4Ía¨¬uRű ěYěTĚářXítĚđŐ‹} ^YďôPĽÖšăK’W°îŻ4ݍb*)‰Ť¶•ŞW°Ą,Dĺ’ďŁ+Ö9I&ĘrR:ĄÔµ]dčJúĘR§e†?¨ůk‘ż˛Ř)Űđ5«T%űyP˙ Öř•,‰°(br{”Ŕ‚űCË"§‡–UN,ËśŠy]äůĐÁ˛Đé!„­5šR‚ÝEˇ`K'©…EÁŇ•r׺ČňWRĂ‚GŠeáę±}I‹˘%ů bYâÔĚđ-‡A’XÔ-Ý2×0lV9m3üA+©Ą*¶¶üťÉbQ»d)u±ŕ–ŇWĚW-U—RĆ‚UŻ-i,ę—nő+üľvĚđÍĄVǢféJ--üAËß/•>¬ß •@,˙%…,‹śY°tŇȲĚ)5łđm|Ij7ÚĎń#™,+ťšţ ĄTRBY°třRʲŘI÷›:°ĚÔʲܩg'ź<жőH’Ë‚űC/[[ęţ$»}†‡(kň/ĘR2 îÍ,« –ţ _żTł¬’“™2°îźtł¬„JmĬŕýPÎÖîܤĄłŕšbYřî“Ĺł¬ŽJ},üA/ľžÎ‰ PR‹w:šÚý‹Đ‚5¤ eĹTjfázĘů¤ˇeÍÔCD ¶¨–*ZđL†?č-ĎGőŘĘY ië×ďůRI[łÜŰRÚšeçÖŇÖ¬w·¶fe˝Ő´¨ž’—ś¶*K˙#ő´`ĹĂÔ‚}ýTÔ‚ĺo$©źŕÂô™Ď‡˘ÚÚý{MVŐ‚})«Ź”Ů"~˝%%’0˝»Me­+¸~¤´UYşik]Ňő#ŵőÎH][ó7J-Żëú¤Ż­·fG[°âs)lkżĄ®śČę­’ƶjCáGŠlY&öPŮ‚[2üAß)4ĄÎÖud?Rh Öx‘Ň–śĘŰ­ö×Ck[ő~¤Ř¶ŢŞ*©mkţN©ĺ¶¬L{čmë­Ń’ŕ–<Í_{ţÚ€$·dÝ.ÄÁň§ÝÖžż1$Ő-Y˘\®§k÷ďâYwKN.â×~ěĎĄĽ­·ţLŇ[rŞk›Î§őÄ·äănµoµ&×·ämnăÍłĽyŻç÷‹üAž_ÜŻö%ÂýęźT¸_ý— ·ö[[ĺŽçw qÉŐ||?őyJqÉÝÜu=í!ĆĺóŃůşüAJň$ÇĺóÍăCí_©ŢÝę?Ő>?ÓÜ<ŢŽyhĽI¶'Q.ǧú7ĺ¶í[˛Ü*7ň#uą´‡ÔénŤwůO)si?É]öSSą;uľ’ÇŹÚ·Üš AÚóCž[oÉžôą`÷o§?°ú¤?đó8šŻň—Y¤Ń­ůŰÉéÖüťe«tkţ&łeş`ŮŻtşôÍW3妚Ňćń)˙Zňř–˝RŽ[䯭m­ň)R“\—ţ˝›żŞööG vë-“b·Ţ*/IvYÉ;ĚGóŹ…Ć]ţ Ż]ŞÝš $Ëvkj¬Űĺü—J]úËA¬ÜuňŹ”î‚­żťšŻšµ€ďbľ>ÉCóů-îÝšĎG véRq//ăËLP<~$áűz©áeqvjz»ă“jžŠO,ÓŢňţEOëxkO彄ĽŚŹŠy)>şR÷{oÉßKËë*ô)će‘ú2/Ço’ĹŻŰë éykó/ZĐËůcŢŠu%éE|©ű!M/xćqĆŻ+ż_3~-)Ü-ЇÝ>u˝µĺř—°¬ůCĘ^ĆĎ*$ă¦@mÎh[Ű[[ę*%îe|žź?ŠÇŻđVĹ÷ş˙Ň÷2ţżĚđÍżWh…/Öň’řRNqĚđ­Ů?Hä[[ŽG©|©ŐXfř–ůFé|ąţ)fÄŻ-‡LJ_ęDRůŰ´ţ˛l×_—ţ ]_ň^ĚW-§Kr_°ď/őľ`ĹSüb}hÉëĄőlÎ_‡ ĂZ38Ôüb=z˘_jqR×ëő¬ĆٶŠÁë­gWVV­gW c©üëyHú‹őöIeđŇúÜíQü v{T˙R±ô˙r}™·Öűnʉ*ˡ~¤j©ÔüNĺÜ5Ŕ`ÍĎÝwqżxČ€Áţ›ÔkJ}‹ň'oRךż‚ )05eÇ Ps=-10iÍ<”żQ|"90Xń›ôŔČY¶KA0óCĹ PŻ”"S .)ľ”Ź’=K\Kú#©‚Á-UÂÎo]]0ň_Vó^ĘoíÔŃrŕÖ˛S”ĘĄŞ´ŢŹÔ3˙v™»ňuú[RSŻ8ÍđĹ›MÖý·@¸˘rš—ň…ĺ2ĺ­Mć¦,•–Ű<”´—‰ę4u>&"߼ĚMůĎ[F<”˙¬)†?(©h•TŇTĂ”TI, ®µ0Řß§\ů]źxŕ‘úá©ü°Ű§b,­$ĂĚ/sW~z¤†x9?ÝĚGůé+uÂÎwK±*Ý0óßŐĚ|÷•jg*‡Áe«ňíçˇĆ›Ţt\xS·ÔĂüZ77ĺď- ľ´łSŘĘÄXC)Áú»'’%e–†—™ă­ýŤG©y›Ž™ű1ËĎG:bđµĚđqŰ-𥒏%ąkEŇqi‰Á5Ůű1DSMĚa<´ż3“—öwz*á®aM¸ĹvË<´ż´“·ö«$”•¨Ă8eÄMűU-UĆCűUĄ™s˙K÷si?ćˇnÚ/©4žÚ“8^Úbšaę…‹öß®‡şfk95ĺĹ4ëb>Ţ˙SűŰ2wí'ęďĺHb\ówB­1†[Ńů%2ćţd5ígZ†J™1Ý””µ¬Đăög77íŽĘ^¤4¦Űkfî]¶_iŤé&›Ů;łoRÓ­>äĆt»:N˝1·}‡™ĹÎßYq\ňg€-9枲Ú몷8Ů^WÁ…×˙VsĂ:EÉGçóő Ő\x}iá1§™f^Ţ,W¦Ę.ö—ş¸jç]ăWâă’żÉiő1§5}©ôbgűKµ9źH€Ě*€aŢ*!<]dÖTsSć+‰Yp™·ĘäO%Cf9Ă6w0\É.ÂpNVaČŢ$Ef0Í®ĂÉ.ÄÉ®Äčâ’Ą-ٵú›O$3 WUcřď"Y’̰ĺ‡KJ.3 2Fjš*2†íˇYD3<~¤Kf9Ë0oŐł¸żÖŃ8ßnirÉ_·6™Ą4©U>®´‘Ţz¨2#çßf1M÷Ż<4«iň—Hšĺ4ů—»šő4ůó"Í‚šôwŇ(“u˝–Ôä|ެ©É_ţhŐäŹ{4«jüÔ,TfuÓ27ťŻ>¤Ę S»yëzäź›Ą5ůíÜ…WĂßfVń łk+ĺ{ĎâJŮc·â¦ZrŇ-ąÉřŞ[sSí?şE7ŐńAźYa)űí3K,ĺ_¤dć˛ç!e&«VŢřo9ŃÍĘÉeÎ:ËnÎBKµżUß›ó]·ü¦zľčÖßTŰ[·§z|v+pü;ŢN„’‹y»ľ”ýáTÇsĂ*×'XŘĚeŕ1o]Źěw”,şT<;JV]jĽKÜ\ň'|­n&«=‹q\gk}3ů2OŢj>Öăř7-q&7sÖüłkřőüGĎ"~ůëŃłŠ_ăaX•“ń‚„Îwu˛•Îwń˛ĄÎwmłµÎwéłĹÎwe´ŐÎwá´ĺά«Ţf—ókľ3ëůeżceAżÖceEżĆ۰BÇ?ŠlŃó]nŐ3yš]ŐŻń8v–ők˝6vÖőwť˙dażĆë°PÇő/Ö>“%a˝˛¶_óŰĽ˛¸_ăy^YÝ/˙2Ż,ď×zmZ®ă*|+ Ëń~Ł%Đw ż5Đw‰żEĐ·Ŕ*č[ `ô­°úVX}‹¬„ľµ –BßRkˇoĄĹĐ·Âjč['a9ô‹]î/{ś#ëýĺ?çČ‚ĹësdĹżěuZÁcI‡EŃ·ÄŞč»ę_ö=W–ý+ľ+ëţ݇2úĹű!]±6š<Ě®ýży>„0–G—cŮŚőŃ/¶?ĐúpžÜś‚)ߊ‹¤_l‰žâĄURŁws}¨‰,”~ńzH“,•~±…zŠźWMĄŢÍš-î±.ĘzéχČĘŠé÷ÔëÝl™¨üéę©%˙ę[ýR\˙ô©úű?ÖT|”"µëë°Ç˙đ×ţ;şő˙ÄßŃý‡żúŰođďă ź_˙ŹOaćđş_ÄpČ{úŻŞýú§Ď/ţęţřë_~~ý7ßţÝŻyöîë—ŠWéfâűö‹üĺ'Lĺů÷żüü«0•_üôËżřüúŹq:üeŕߥĂó·µXTęX™A‡˙2{ű˙˙Ź+kÓądý铨źíއÁĄB|[ÝE%˛ĎŁúŹyÜ_¬ţ@řćTÚEŰŞń ó×'~ŁgŻ3üSźçĆyÜ„ĂúŕźľýĆ'ľŽűO•ţnCé·?ýk»¸¤ĆŁůoůhôX}Ń=ŚÍčí˙“‘±ą´«,°Bë÷O ăýţ&q»F._,Ż/ţöknÚĎüůŤfeÔÝjý­.†Ď•AíĎkuŐc0ŕ›íwoµęŹçü×Ęô`}\k˙˝l¶ü6»™o#üô´I¤•¨N͇MĎă‹C4Ź‹Ç™·¬yÜô8ţ›ăú˙Ľ‚ßĹEs‹ĄéĎ@ÓĹţé/?ńżżř×·gýçő ^âë$ż1Čëwá¸"čx|ąţŚ/†ŢŹ/·źńĺĂr˛Ç—űĎ›*cÁÇ—ÇĎv˙âçV$H.L ů˙üçżřÓĎżůÔ˙…9öĎ™ťůŤď.ÁK)žZ.nś,É1bęO­-–˙ôí}ř›˙|Ň:JŢ˙ßfE›Măžü—™i&•–VYĺńÓ·ßřÄ}ĽůoÝ˙ę7>ńeZŹs.–|ťóý‰űř㜯O|™ă×9ą¶żÎůź¸Źť3Áď5*[ĺnžýżýť=ôĹ ?ĆbY?{:Ň_Řţ˝ÚüĺéG»?gBŇzíöń3Ű=\aĐöĆŰ?üÉ·˙ ĚeTjendstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 288 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xśť–wTSهϽ7˝P’Š”ĐkhRH ˝H‘.*1 JŔ"6DTpDQ‘¦2(ŕ€ŁC‘±"Š…Q±ëDÔqp–Id­߼yďÍ›ß÷~kź˝ĎÝgď}ÖşüÂLX € ˇXáçĹŤ‹g` đlŕpłłBřF™|ŘŚl™ř˝ş ůű*Ó?ŚÁ˙ź”ąY"1PŚçňřŮ\É8=Wś%·Oɶ4MÎ0JÎ"Y‚2V“sň,[|ö™e9ó2„<ËsÎâeđäÜ'ăŤ9ľŚ‘`çřą2ľ&ctI†@Ćoä±|N6(’Ü.ćsSdl-c’(2‚-ăyŕHÉ_đŇ/XĚĎËĹÎĚZ.$§&\S†Ť“‹áĎĎMç‹ĹĚ07Ť#â1Ř™YárfĎüYym˛";Ř8980m-mľ(Ô]ü›’÷v–^„îDřĂöW~™ °¦eµŮú‡mi]ëP»ý‡Í`/Оľu}qş|^RÄâ,g+«ÜÜ\Kźk)/čďúźC_|ĎRľÝďĺaxó“8’t1C^7nfz¦DÄČÎâpů 柇řţuü$ľ/”ED˦L L–µ[Č™B†@řźšřĂţ¤Ůą–‰ÚřĐ–XĄ!@~(* {d+Đď} ĆGů͋љťűĎ‚ţ}W¸LţČ$ŽcGD2¸QÎěšüZ4 E@ę@čŔ¶Ŕ¸ŕA(q`1ŕ‚D €µ ”‚­`'¨u 46ptcŕ48.Ë`ÜR0ž€)đ Ě@„…ČR‡t CȲ…XäCP”%CBH@ë R¨ކęˇfč[č(tş C· Qhúz#0 ¦ÁZ°lł`O8Ž„ÁÉđ28.‚·Ŕ•p|î„OĂ—ŕX ?§€:˘‹0ÂFB‘x$ !«¤i@Ú¤ąŠH‘§Č[EE1PL” Ę…⢖ˇVˇ6ŁŞQPť¨>ÔUÔ(j őMFk˘ÍŃÎčt,:ť‹.FW ›Đčłčô8úˇcŚ1ŽL&łłłÓŽ9…ĆŚa¦±X¬:ÖëŠ Ĺr°bl1¶ {{{;Ž}#âtp¶8_\ˇ8áú"ăEy‹.,ÖXśľřřĹ%ś%Gщ1‰-‰ď9ˇśÎôŇ€ĄµK§¸lî.îžoo’ďĘ/çO$ą&•'=JvMŢž<™âžR‘ňTŔT ž§ú§ÖĄľN MŰźö)=&˝=—‘qTH¦ ű2µ3ó2‡łĚłŠł¤Ëś—í\6% 5eCŮ‹˛»Ĺ4ŮĎÔ€ÄD˛^2šă–S“ó&7:÷Hžrž0o`ąŮňMË'ň}óż^ZÁ]Ń[ [°¶`tĄçĘúUĐŞĄ«zWëŻ.Z=ľĆo͵„µik(´.,/|ą.f]O‘VŃš˘±ő~ë[‹ŠEĹ76¸l¨ŰÚ(Ř8¸iMKx%K­K+Jßoćnľř•ÍW•_}Ú’´e°ĚˇlĎVĚVáÖëŰÜ·(W.Ď/۲˝scGÉŽ—;—ěĽPaWQ·‹°K˛KZ\Ů]ePµµę}uJőHŤWM{­fí¦Ú×»y»ŻěńŘÓV§UWZ÷nŻ`ďÍzżúÎنŠ}}9ű6F7öÍúşąIŁ©´éĂ~á~é}ÍŽÍÍ-š-e­p«¤uň`ÂÁËßxÓÝĆl«o§·—‡$‡›říőĂA‡{ʰ޴}gř]mµŁ¤ę\Ţ9Ő•Ň%íŽë>x´·ÇĄ§ă{Ëď÷Ó=Vs\ĺx٠‰˘źNćźś>•uęééäÓc˝Kz=s­/ĽođlĐŮóç|Ďťé÷ě?yŢőü± ÎŽ^d]ěşäp©sŔ~ ăű:;‡‡ş/;]îž7|âŠű•ÓW˝Żž»píŇČü‘áëQ×oŢH¸!˝É»ůčVú­ç·snĎÜYs}·äžŇ˝Šűš÷~4ý±]ę =>ę=:đ`Á;cܱ'?e˙ô~Ľč!ůaĹ„ÎDó#ŰGÇ&}'/?^řxüIÖ“™§Ĺ?+˙\űĚäŮwżxü20;5ţ\ôüÓŻ›_¨żŘ˙ŇîeďtŘôýWŻf^—ĽQsŕ-ëm˙»w3ąď±ď+?~čůôńî§ŚOź~÷„óűendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol >> endobj xref 0 12 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000011294 00000 n 0000011377 00000 n 0000011500 00000 n 0000011533 00000 n 0000000213 00000 n 0000000293 00000 n 0000014228 00000 n 0000014322 00000 n 0000014419 00000 n trailer << /Size 12 /Info 1 0 R /Root 2 0 R >> startxref 14497 %%EOF ordinal/vignettes/static_figs/fig-fig2.pdf0000755000175100001440000003453413633002525020327 0ustar hornikusers%PDF-1.4 %âăĎÓ\r 1 0 obj << /CreationDate (D:20120625120914) /ModDate (D:20120625120914) /Title (R Graphics Output) /Producer (R 2.15.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 10796 /Filter /FlateDecode >> stream xśµťË®,Ëqžçű)zHĽUyĎ4ŕ‰Ű¶IŔ$ dÉűČ8ĐÄďř/Q«Š(’˛§ë|»»+łŞ2"##ăďU>żř”ĎŻ?˙íżężOýľ÷§•ďsę®ßkŘ8üĂ˙üü÷Ďß}ű“ßü·˙ř§ź?űĺ·ëűu]źçë/˙ě?Çż®ńůÇońWźëó·ßĘçń߯ż|ŕóźľ•ö˝µOďßKýü‡Ô??@{’ź-Qۤ#šT/ŃąH4ľžĄvQg{uŠ&Ű«[t‰çśßkµ"ę‹ÔD‹giěٵ€–¨˛˝~‰{Ý«h±×ť}Ůß/öşOQăYú ¶7Šhł˝ÁÖĎ÷‹˝SÔŘë±E“˝žE´y–‰ďŐë{áYću¶7Źh˛×«{˝ĐĎZľöz-QgŻ÷%Z<Ën˘Ăö6[ÁÂööuöúTŃbŻî`mß/öúQŤłŚďWŤNň'Ł]?Ůż_TިUŇĹ âÚÍ Ż‚8>Âřü4Oq Ę˙ńNŔËń,»ŠŰ;ᵊÂWÓ\cqu=ŰĹ•ĂňcÄY«ëžĹ1üĚęŠČÖŔSŤ×ZD1╱~ăZÖđµXŢš˛¸8ĆÓYöD8níǢŤ-FCki>Âq‚h8VăĹčdmEÔAg­­ńÇčá˛G‰cXăňsŹcXă:naĂč˝ă^.^ŐÂÁ˝Ű—źßAśÄôŻńĘ8˙zŘBĂwQ<±9 ď˘âă;^×…÷ĺ([Šłq„…5qĚÇ1¬qWyh|&Îb_€ĎL}rPÄYAŚ˝ń™čuW¬Ďtg|ćŃg…5Ńcâ3Ńžg§Íő\˝MPô>hň{çŢCk ÍŐČžňĐAaŤ{Ę:‚bômÇ›cc/_;=ÄvÜşé!‚č'‚·#ÎÍ(xořwRŚÚ FA1ďnŰ;ľq@z*Ö¸ŹćĆ °§ Î@řĆéŠ6F{Ç|#Î:—źćÁśÄ((¬1Öolýőa wYz ú—CqŠ"Ź8ĆŻŚˇăOçTő3(¬1w>(¬ńTEq kŚ×˝Da]§iŤp8nNÓhĹg&km|¦‚¸;ŚŤŽGČárşĽ[PÜ» Ž¬Ă¬ĹńĘ˙Ú@śeWŕÇ+ÚĂqPc_č/Ž×”‡+Í34ÇáŘA´ţ3gĹk1…5Ćk3…5ŹĄ8Fďă•wţpťéľpÇ/qŚńŻôЇŃIĽę9pmrĽę k<Ë÷…kŚł4®â.Ď2çŔ7ŃŽ‚âéśí»tpŽW(AńTčQĘĹaČG ŚqźaOqSé^á×›ľ[đPy€a“Çń0Ś2péTĎóxĹ Ź32GČĹî s&¸ęë Ć fĆć vă ¦ V†&8Ü/@ÖńÁ;9 ”W”Cťľ’ĂTÁEçč/ů2÷">ćąÉĘVźNîşž‰/‚G5÷)>ćUÉsšŹÎ·t8\ČÇ<ÔţîćµČľż sÉÝ\u=çÎWóţ3Ľ%«˙\Š‚Ëen]ÜĚóOóžbćË —Ź|Ě—ąq5OµO»ź"fKiż¸·7Ďóćó:z´Ç€–\ĚË×ĂűQ ťĽĚŐ×ÓÍCçÓx^j˙ŇővLűännşžë2?źiŢ~>:źç47ŤŹ}™§ĆÇęć­ń1ŐţDGÉĹÜ=Ţşyę|}™ŹÎ'{* pČĹÜ=Ţ«yiĽů~,¸Ú‹xăĆÓž†ąŮ[ň’ý.1P´×n¶?P.6Řţ@ŢrŇĐ—zĄ?Đx« čO¦yĐqĘn:#ÝÍJł>ž^Ť~MmNú5ÝšJ›‚dĎ+‡<îeěô§z®“ţt织~y껍S÷v2:°Ó3+ű]"ÁĄOcŘ*fťŞŁ.Şqp6đ™™FĆ4˘+śÁWŢ-N|ĽóoJŔř(*s׆±q*“ÓG>V3bâćäéË_đC'á‘85 ăá4¬!U·gs÷js*ęvŕ•9µ@ůűĘ~r‹ˇr~z>}&Ä"Xs \ŚDdŤ›$3Ž1ćÓ|EŤCđTO ‹ŃĎÔ‡ ěáĎ46Ć?˛’Ćĺ6§mÜŚ¸tcťé)~úqK] cXř)~ÜŤűC'íĄ5Nđ9Ý!S[€5ßU¸(ç¨xŃír;g;IěŚ;ÝgnNěŔaŘŰĚŇěŢŢZAĆV±î2.†ĚrbČŮ2f–MVÍšŁć’ŽĐQˇ4ŃŃž*Ťş¦×Ŕ0ç==;nüľ@ĆŢŰ;Ŕ ÷°koŚľwĎĘđ{÷ě$ăďíµ&0Ěy{! sŢ^ĄĂ˝m/a r¸¨9(°s¤;¸¸B’“ ڧمĎ}ç|‚DnÁ2LÖµ]zďÎieoŻ!—«ŐÝ2byç ¸ąJÔNYgr;ť 답#sŔ0ŠulěaÎZu;Ěyíl¨ŁóXĹăä× ńŻť ¸ćµ˛ˇ!č†ŘZŮČš6śÎĺÚšŮĐ„É,ď—ň EÝ-Xçk aă) $í' C°Ť‹IYYçj}y؆čÍ8‡đNéF«iyS:§€ŐÁu†Ĺš@‘wŻ@ÍŹHĽ3…"Ç8ç.gŮ€HĹdp¨\Śn/Ś\f6í…cóHŁ[ś#×Tjąýęv9ŹĚ€`šć¬˘ÍĹvnu7¸ąŚ ÇiÄ[f_Zf»šĽwz.¦6·0ŁUcçôJ\Ü„V763*ýdĹMá¶÷ńóU„ÓŹçŁ]Ľń­¤ňĐÜů–ßP"›ä‰{í'qkł]ÝhÜýŢľ9Ť›ö3qr×^OĄdÍćŚßťĂvnÜË!täνF;ËNT7XÓ˝Ëě,”çGČĘĘŤ$©Yä°tć‰x‹%Ügć©{FP›ĄÝ[ŔĘSi<#UÍvµ´Ü\6ö ·"€żX2áK`ťCO÷…äłJ=†Q*ŠÍ°fq‰ćîÍe2öۇqŞĽäUĄ˘±¤5ËT4i"k­:•˨B=ä­Ů®.đĐF€Ő¨ZĹíZdu§fËaŢĄOŻŹíşOŹ«Ăé˛gTp¸‰ß§Ť.V‚—ęzş±±<čä»őA'ßÝ,RDŚ4+’}.+ë滓5Iš”ŞV$ d¤Ń‡Wô‡›Ŕbś<•üäaIR^‰`=ÎĘ$ß«Éň•áčë°ö§{·xTĄ[·hÎĂ“őá×3`>ÜÝęĂk¤#ę]ţ¬ĽÍ)g»¨LnSi >ĚY»/Ň‘`a»˛”s\¤čűĚťňîÚ„z1xčN+âBTĄ‘z×TĄ"źBEŇŠEx»»Şđ¶qŞ oOĹ[•Ŕü*ç«®WśË¨‚E•śžsW Ö‹ź˝kĺ®/.•"ę»ÝU‹ŞsC~ú«l8Tý¸Ś[ĺŹę3÷ÄłŘú]* TíbŰF/6ucşz±ucă%´jśĽ„vOą ;ëµ\ÁX§Q%ڵ×W˝(đ¨`TČĘ‹¬4ö}—ˇOĄšĂ븱tc]®n»ăâ%¨–%±ĽĆŔŔĆSqŰUdáş©;t©ČBóT2Řx ś€€0g—äaÎÍŐĄriš»¨jlĎ…iîćÜ<ĽKŁ97uq©ÝËxŘ®ęA ďw±ćěč sn.%-¬íMŢXuŞnl×U¨,ńéM3l-¬¨čÍfŘx .`ť4ç&×Üăśkşwü€Ťíş–¤Ţ´Ć^‚,´0AúÄ®SuăT»ÍxĆą•Ő|;/Aĺą«˝đčTĽ˘Ęl[ovČ0×.^ŁÍZ™bă%Čo^‚J†+Ó>_ČŇ4ŕ0¶ńÂÉKĎ©ÜmýÂFsn.M®Lr>qε«Úa.WźŘu Ÿ®žů@–/c?/\ĽyBdË ëzáŕ©Ć6®óŔĹđŤ—0–qěîţŔMs~`Ó©¦q¶îóŔcsVĺq=6çeÎ7Ęś…Č0_/ěj·eÎ7ĘśŤĹć|ŁĚ™ë}ŕZävŢëyˇĚůF™ł±ŮśG5Ęśoś× ÷|`·9ß(sľQ欩­u›ł‘ÁĂ{{ˇĚůF™łqÚśo”9s‘\ýŇ<°ÎĘśo”9·ÍůĆv˝p¬îöŔcsÖTŢŽÍůF™óŤ2gaż>°_/”9ß(s6›óŤ˝żp•žg»Őć|c?/”93Ú¬˝ŮśoÔ$răč/Ü×»ÍůF™óŤcżp?O%ąÁŰzˇĚůF™łqÚśoěĺ…sżđ<Ű]6çű|áŞ/<ĎSmO"7ŽňÂőĽ„csVÔ׏ÍůF™óŤšD„C „¶ţB™óŤ2gc±9ßŘö çxá)¬6ç{{áq”®ő@FTO¬ç…cĽp?N%Mç[áĽ^¸— ]çŰ~ašsű¤´ó Q=1ÍŮćlLs¶˘ł–öýÂől·ßćüĄń|bšs˙¤Ęó Q=±•¦9Óś‰ó6gc/śnw|Ríů…ڍžćlLs6žç©ömÎĆîv-]ĺ…iÎÄs›ł1Íٸ§’ň“¸>)ý|bšł1Í™Xnsţ’>1'‘/čÖŰśŤiÎV„¦9Óś‰ížDŚ]íJ1Ęę‰6çcµ§Í™ KIAźhsNŃć, éÎI$±ąÝőIičmÎÇ’O›s˘Í™YdÉCźxĐ®«%}"Íą(!-‰č™łKÚ%}âhÂöI™(‘jĹ*sţBšsQš\JQ˘…Ł»=q}R,JÜźT‹>qű¨ôě2ç˘-# F‰ĺ“ŠŃ'µ+Ĺ* ţ퓢Qb˙¤j”8>)%˛ĎSć\´˙ á(qR9ZR:#é(7$ŻOjG‰ĺ“âQoW¦z”hQčĄvąI"ýhÉ"P H‰ó“ R"{udÎEŰ/Ňą9#)±|REJ¤ ń’9ë%/™sŠE/™s± ó’9‹‹&WśIKĘ Ř/1)ńKMZRX$9)ŃęҡS1(– Ô{ą©(‹H›.é=iJ‰í“˘Ň"=RŞJ‰ë“˛Râů¤®ř–Ůç!s.–e™ł î¤--)Ž’¸”Î<ŐÔ$R´Ą y)q|R_J\ź­)µ93ě‘Ä”řĄ1%ZVz©Ým%iŐ%H ĽÓśéú¤3%ň»'Í™^EJSn’—OJM‰VĄ2&´DbS`±˘”ćěŇÉMKŞĂ¤7%ZFĘĐőŃRśÇ'%§ÄýIÍ)°YXJs®˘Rť÷'e§ŔTˇµŰ-5­şé4›Ěą>Ą§DëK/ťJŇ×.s¶¦MęSâú¤ü”%Vś^ş>n P]P T ¨$¨Döj*&tĄąD¨ÄőI*‹ľd¨DkMiÎ×IJ´ö”1a“’•Čw·ĚąÉoHŚJô»4ç&ë–•ČwŹ&gÜ%H-©ă“"µdˇ˝$©ÄőIM*pY°:t*Ţ+©RKÖěK–ZŽ79ĄK%ÎO SQ@ÁÉKĘT˘Ĺ¨4g×íŞä( hULčMl©SY©Á7™ł÷ŇĄO%~ TĽ^)TYÖÁntM"]žAUâú¤H•EÖĄ^ş„ca*ÍŮĺxŇ©÷'…ެa»S1ˇ‹2$UJ§;eÎ)Žť2g«˘ĄVJd»dÎCľNzŐr\Y/Á*K)VY{b‘*ÍyZË»eÎKJ´ ä ”jŘŚŚ ]ö(Ý*ëVľ„«Ŕa­*Í9Ĺ•—ĚŮEFçŇ$âŠ`E4¨[ą¬PeLh٦ ÖĽiÎK·N>ŻÜjĚŞIdióMV ô¦U1áŇó•¨n4™łĺ;’±–[ŻŮdÎ[OPBV +Τd-©’”µÜ Î.sŢzFł–ăX©YYkc©+cÂ#w-=+†­EzŃT´–BIŇZR&%M+ sĘ'E­Ŕck (”Ţ\ŔĆÖ/]+Ëv,e k«©öŇ•±ŠÇďnťŠŁNÚVőěOŠ[YÔăwăiÔbJŢĘé)c‘Ďeîť|ë_W!ßضýë0Ö¸˛ hű!« M*W°uśśSY4Íu“ĎCçŠâź’:Ř}‘Un%ť+ŘşQę\Á*”ÎĽ:W°uť¬‚A*ĎĄse9Ń4ĎFVˇt®`Ii¤s»żÔą˘hHµŇą˛Ä(u±§“Uß)ť+x%÷I¶.•Ą€¬:J>›ěóQç ÉŁWňZd?/Z˛)u¬ő[ę^Ç űzYZŻ•˛dę\Yś´Í ׳SçKť+Ë“ŠyOňLÝj©dë6©s­×I](u®ŕ–:ŘS>.Yú‘:WÖ,Msod=Oé\Q—d&u®`Ťé\ÁÖ2äźÔ˝Će!“>O+™R÷€ĄLÍ<*YŐÚŇą˛IçcĄ¸ĄŽ5Ë™:W°uź,(gASęXኣ ë\Áóˇsď|ăzz~źE›`·Oť+řֽ”žýç@Aé’Ƈt®ŕ[÷ÚYU—Ňą‚Oę`áЬÎGť+¸§îţ řw‹¬s«d[:W”0Ő‡Î,!t®ŕ•ź‡?PvüGę\Á˛é\Áň7Ňą‚wę^áŠý˝•®,t*fřr<^¤ue©Ó4‡ˇ˛ÖIí3°g±S1‡ăcµÓ1ĂT/ö-xe˝ÓCńZkŽ/I^ÁşżŇĽ˘Š©¤$6>ŘBVŞ^ÁV”˛@•Kľ?Ś®Xç$™(ËIYč”R×v‘U +é+Kť–ţ ćŻEJüĘb§ĂÂÔ¬R•üěçAý+XăWX°d$RŔ˘ÉíQ î ,‹ś"XV9=T°,s*ću‘çCËB§‡¶ÖThJ v{…‚-ť¤KWĘ]ë"Ë_I )–…?¨Çö%=,Š–ä_$e‰S3Ă´üIbQ·tË\ðYĺ´Í𭤔ŞŘÚňw$‹Eí’U¤ÔĹ‚[J_1_µT]J V˝¶¤±¨_şŐŻđřÚ1Ă4—"Z‹šĄ+µ´đ-żTúX°~'TY°ü—˛,rzHdÁŇaH#Ë2§ÔĚ´ń%©Ýh?ÇŹd˛¬tjfř–RI eÁŇáK)Ëb'ÝoęŔ0S+Ër§bžť|ň}ř¶­G’\ÜzŮÚR÷'Á,Ří3ŞŔVÎRH[ż~Ď—JÚšĺŢ–ŇÖ,;·–¶f˝»Ĺ´5+ë­¦Eő”ü»ä´UYú©§+– ě맢,#I-ř¤ţ Ď|>ŐÖîßk˛ŞěűKY-x¤Ěńë-)‘„ ěÝm*k]Áő#Ąµ¨ĘŇőH[ë’®)®­·pFęÚšżQjy-X×'}m˝5;Ř‚źKa[ű-uĺDVo}4¶U ?RdË2±‡ĘÜ’áúNˇ)u¶®#ű‘B[°Ć‹”¶äTŢnµżZŰŞÇđ#ŶőVUIm[ówJ-·eeÚCo[oŤ–·äiFüÚó×$ą%ëţs!–?•č¶öüŤ!©nÉĺr=]»Ďş[rępżöc.ĺm˝őg’Ţ’S]Űt>­$ľ%§w«}«5ąľ%osožĺÍ{=ż_äňüŇŕ~µ/îW˙¤Âýężd¸µßňŘ*p<żKK®ćăű©ĎSŠKîć®ëi1.źŹÎ×ĺR’'9.źoľ?Ôţ•ęÝíńˇţSíĂń3ÍÍăí‡Ć›d{ĺr|ŞSţ`Űľ%Ë­r#?R—K{HťîÖx—˙”2—ö“Üe?5•»Sç+ůţQű–[s!H{~Čsë-Ů“>ěţíôVBźô~GóUţ2‹4ş5;Ů"Ýšżłl•nÍßd¶L,ű•N—ţOҢůj¦Ü”BSúĎ|Ęż–|Ëż^)Ç-ň×Ö¶Vů©I®K˙ŢÍ_U{ű#»őI±[o•—$»¬äćŁůÇBă.ż×.ŐnM’e»5µ?ÖírţKĄ.ýĺ VîşůGJwÁÖßNÍWÍZ@‰w1_źäˇůü÷nÍç#»ô©¸—€—ńÁe¦?(?’đ‚}˝Ôđ˛8;5˝ÝńI5OĹ'–ioů˙˘§uĽµ§ň^B^ĆGĹĽ]©ű=Š·äďĄĺuúŹó˛H}™—ă7 I‹â×íő†ôĽµů-čeü1oĹŹşż’ô"ľÔý¦<ó}ĆŻ+ż_3~-)Ü-ЇÝ>u˝µĺř—°¬ůCĘ^ĆĎ*$ă¦@mÎh[Ű[[ę*%îe|žź?ŠÇŻđVĹ÷ş˙Ň÷2ţżĚđÍżWh…/Öň’řRNqĚđ­Ů?Hä[[ŽG©|©ŐXfř–ůFé|ąţ)fÄŻ-‡LJ_ęDRůŰ´ţ˛l×_—ţ ]_ň^ĚW-§Kr_°ď/őľ`ĹSüb}hÉëĄőlÎ_‡ ĂZ38Ôüb=z˘_jqR×ëő¬ĆٶŠÁë­gWVV­gW c©üëyHú‹őöIeđŇúÜíQü v{T˙R±ô˙r}™·Öűnʉ*ˡ~¤j©ÔüNĺÜ5Ŕ`ÍĎÝwqżxČ€Áţ›ÔkJ}‹ň'oRךż‚ )05eÇ Ps=-10iÍ<”żQ|"90Xń›ôŔČY¶KA0óCĹ PŻ”"S .)ľ”Ź’=K\Kú#©‚Á-UÂÎo]]0ň_Vó^ĘoíÔŃrŕÖ˛S”ĘĄŞ´ŢŹÔ3˙v™»ňuú[RSŻ8ÍđĹ›MÖý·@¸˘rš—ň…ĺ2ĺ­Mć¦,•–Ű<”´—‰ę4u>&"߼ĚMůĎ[F<”˙¬)†?(©h•TŇTĂ”TI, ®µ0Řß§\ů]źxŕ‘úá©ü°Ű§b,­$ĂĚ/sW~z¤†x9?ÝĚGůé+uÂÎwK±*Ý0óßŐĚ|÷•jg*‡Áe«ňíçˇĆÁo:.TÄ-ő0żÖÍMů{K‚/íÇě¶2ń–ĆP b°ţî‰$Ä`I™Ą!će¦Äxk?BăQ*bަcć~Ěňó‘Ž|-3üAÜv |©$ćcIîÚ_‘t\ZbpMö~ŚŃTs$íďĚäĄýťž břkX.E1‡Ý2í/íä­ý* e%*ć0NqÓ~UK•ńĐ~UićÜ˙Ňý\ÚŹyh‡›öËF*Ť§öß$Ž—¶fzá˘ý·ëˇ.†ŮZNMy1ÍşŹ÷˙Ô>Ćŕ¶Ě]ű‰ú{9’×üťPkŚáVt~‰Śą?YÍCű™–ˇRfL7%e-+ô¸ýŮÍM»Ł˛)Ťéöš™ű_—íWZcşÉföάƛÔĆt«ą1ݮާŢŰľĂĚb çď¬8.ů3Ŕ–sOYíuŐ[ślŻ«ŕÂ뫎ąať˘äŁóůú†j.Ľľ´đÓL3/o–«?SeűK]\µó®ń+ńqÉßä´úÓšľżTz±łýĄÚ‹śO$@fŔ0o•Hž. 2kŞą©@ó•DȬ@¸Ě[ĺ ň§’!łśa›» ®da¸?'«0do’"3 f×aĚdbŚdWbtqÉRŚ–ěZ ýÍ' ’†«Ş1üw‘,IfŘrĚĂ%%—™#µ MĂöĐ,˘?Ň%łśe·ęYÜ_ëhśo·4ąä/[›ĚRšÔ*WÚHo=T™‘óoł¦űWšŐ4ůK$ÍršüË]Ízšüy‘fAMú;i”Éş^Kjr>oÖÔä/4‹jňÇ=šU5ţ j*łşi™›ÎWRe†©ÝĽu=ňĎÍŇšüŤ‹vî«až*Ű˝˛Ăŕ)XfU×2w}óTŐ—ćŹn…MţR@·Ä&őîÝ›ö’-“óýăę5If-łńďĚ[ąĚÚ·|ąNď[iÓlO˝©úĎë/'¸,8ćí:<˝oµŤóů0łŠo][)Ř{WĘ»7Ő’“nÉMĆWÝš›j˙Ń-ş©ŽúĚ KŮoźYb)˙"%3—=)3YýłňĆăȉnVN.sÖYvsZŞý­úŢśďşĺ7ŐóE·ţ¦ÚŢş8Őăł[ăßńv"”\ĚŰőĄě˙°§:žVá¸>ÁÂf.ŹyëzdżŁdŃĄâŮQ˛ęRă]âć’?áku3YíYŚă:[ë›É—yŞđVóů°Çżąh‰3ą™łć·]ĂŻç?zńË_ŹžUüĂŞśŚ$tľ«“­tľ‹—-uľk›­uľKź-vľ+Ł­vľ §-wf]ő6»ś_óĹYĎ/ű+ úµľ++ú5ކ:ţQd‹žďŠp«žÉÓěŞ~ŤÇ±ł¬_ëµ±ł®żëü' ű5^‡…:®±ö™, 땵ýšßć•ĹýĎóĘę~ů—yeyżÖkÓrWá[]Ž÷-ľkř­ľKü-‚ľVAßË oý€uĐ·ÚŔBč[Ś`%ô­U°ú–2X }+,†ľ…VCß: ˡ_ěrŮăYď/˙9Gü+^ź#+ţeŻÓ K:,Šľ VEżŘU˙˛ďą˛ě_ńĹ\Y÷=”Ń/Ţ銵Ńäaví˙Íó!„±<şËf¬Ź~±ýÖ‡ó¤ŕćôHéřVôX$ýbKô/­’˝›ëCMdˇô‹×Cšd©ô‹-ÔSüĽj*őn¶@ÔlqŹuQÖKżx>DVVL?¸§^ďfËDĺOWOť(ů—ßę—âú§OŐß˙±¦úăw)R»ľŢ6ăý?ý•˙Žîßüćźů;şżů›żűö'˙!ľđůŐ˙úfŻűE ‡Ľ§˙ŞÚŻ~úüěoţ÷ŹżýůçWżţöďĹł˙K_żTĽJ7ß˙‹źýăĎ?a*?űëřůçß„©üě§ź˙ŐçWżŔéđ—źĎßŐbQ©ceţëěí˙˙?:¬¬Mç’ő§O˘~¶;— ńmu•Č>Ź>č?ćq±úá›Sim«Ć'Ě_źř­ž˝ÎđĎ}žçqëúö[źřzߪô÷JżűÉtĘąÚĹ%5Í˙ČGŁÇŇč‹îalFo˙źŚŚÍĄ]eZ˙űnď÷7‰Ű5şpůřby}ńw_sÓ~ćŢhVFÝ­Ö? ŐĹđą2¨ýĂZ]GőÄ řfűý[­úă9ĵ2=X×Ú˙(›-„ÍnćŰ?}mi%ŞSóۦçű‹C4ß=Ţg޲ćű¦Çűż=®˙éü>.š[,Mš.öĎţ‰˙ýŮż˝=ëżě¨ő_'ů­Aţ;ż«=ŚÇwëď˙ݢ_~|ąý_Vőřr˙¦¦ĘҨǗÇ2ęţŐŹ­HŹ\9@ó˙ĺ/öçź÷©˙Sě_ţ<;óŻŢ]z—R<ł\Ü7YRcÄÔ_Z[¬ţéŰűíoţëIë(wĂőŰ˙`}Ó†endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 288 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xśť–wTSهϽ7˝P’Š”ĐkhRH ˝H‘.*1 JŔ"6DTpDQ‘¦2(ŕ€ŁC‘±"Š…Q±ëDÔqp–Id­߼yďÍ›ß÷~kź˝ĎÝgď}ÖşüÂLX € ˇXáçĹŤ‹g` đlŕpłłBřF™|ŘŚl™ř˝ş ůű*Ó?ŚÁ˙ź”ąY"1PŚçňřŮ\É8=Wś%·Oɶ4MÎ0JÎ"Y‚2V“sň,[|ö™e9ó2„<ËsÎâeđäÜ'ăŤ9ľŚ‘`çřą2ľ&ctI†@Ćoä±|N6(’Ü.ćsSdl-c’(2‚-ăyŕHÉ_đŇ/XĚĎËĹÎĚZ.$§&\S†Ť“‹áĎĎMç‹ĹĚ07Ť#â1Ř™YárfĎüYym˛";Ř8980m-mľ(Ô]ü›’÷v–^„îDřĂöW~™ °¦eµŮú‡mi]ëP»ý‡Í`/Оľu}qş|^RÄâ,g+«ÜÜ\Kźk)/čďúźC_|ĎRľÝďĺaxó“8’t1C^7nfz¦DÄČÎâpů 柇řţuü$ľ/”ED˦L L–µ[Č™B†@řźšřĂţ¤Ůą–‰ÚřĐ–XĄ!@~(* {d+Đď} ĆGů͋љťűĎ‚ţ}W¸LţČ$ŽcGD2¸QÎěšüZ4 E@ę@čŔ¶Ŕ¸ŕA(q`1ŕ‚D €µ ”‚­`'¨u 46ptcŕ48.Ë`ÜR0ž€)đ Ě@„…ČR‡t CȲ…XäCP”%CBH@ë R¨ކęˇfč[č(tş C· Qhúz#0 ¦ÁZ°lł`O8Ž„ÁÉđ28.‚·Ŕ•p|î„OĂ—ŕX ?§€:˘‹0ÂFB‘x$ !«¤i@Ú¤ąŠH‘§Č[EE1PL” Ę…⢖ˇVˇ6ŁŞQPť¨>ÔUÔ(j őMFk˘ÍŃÎčt,:ť‹.FW ›Đčłčô8úˇcŚ1ŽL&łłłÓŽ9…ĆŚa¦±X¬:ÖëŠ Ĺr°bl1¶ {{{;Ž}#âtp¶8_\ˇ8áú"ăEy‹.,ÖXśľřřĹ%ś%Gщ1‰-‰ď9ˇśÎôŇ€ĄµK§¸lî.îžoo’ďĘ/çO$ą&•'=JvMŢž<™âžR‘ňTŔT ž§ú§ÖĄľN MŰźö)=&˝=—‘qTH¦ ű2µ3ó2‡łĚłŠł¤Ëś—í\6% 5eCŮ‹˛»Ĺ4ŮĎÔ€ÄD˛^2šă–S“ó&7:÷Hžrž0o`ąŮňMË'ň}óż^ZÁ]Ń[ [°¶`tĄçĘúUĐŞĄ«zWëŻ.Z=ľĆo͵„µik(´.,/|ą.f]O‘VŃš˘±ő~ë[‹ŠEĹ76¸l¨ŰÚ(Ř8¸iMKx%K­K+Jßoćnľř•ÍW•_}Ú’´e°ĚˇlĎVĚVáÖëŰÜ·(W.Ď/۲˝scGÉŽ—;—ěĽPaWQ·‹°K˛KZ\Ů]ePµµę}uJőHŤWM{­fí¦Ú×»y»ŻěńŘÓV§UWZ÷nŻ`ďÍzżúÎنŠ}}9ű6F7öÍúşąIŁ©´éĂ~á~é}ÍŽÍÍ-š-e­p«¤uň`ÂÁËßxÓÝĆl«o§·—‡$‡›říőĂA‡{ʰ޴}gř]mµŁ¤ę\Ţ9Ő•Ň%íŽë>x´·ÇĄ§ă{Ëď÷Ó=Vs\ĺx٠‰˘źNćźś>•uęééäÓc˝Kz=s­/ĽođlĐŮóç|Ďťé÷ě?yŢőü± ÎŽ^d]ěşäp©sŔ~ ăű:;‡‡ş/;]îž7|âŠű•ÓW˝Żž»píŇČü‘áëQ×oŢH¸!˝É»ůčVú­ç·snĎÜYs}·äžŇ˝Šűš÷~4ý±]ę =>ę=:đ`Á;cܱ'?e˙ô~Ľč!ůaĹ„ÎDó#ŰGÇ&}'/?^řxüIÖ“™§Ĺ?+˙\űĚäŮwżxü20;5ţ\ôüÓŻ›_¨żŘ˙ŇîeďtŘôýWŻf^—ĽQsŕ-ëm˙»w3ąď±ď+?~čůôńî§ŚOź~÷„óűendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol >> endobj xref 0 12 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000011162 00000 n 0000011245 00000 n 0000011368 00000 n 0000011401 00000 n 0000000213 00000 n 0000000293 00000 n 0000014096 00000 n 0000014190 00000 n 0000014287 00000 n trailer << /Size 12 /Info 1 0 R /Root 2 0 R >> startxref 14365 %%EOF ordinal/vignettes/static_figs/fig-figEqui.pdf0000755000175100001440000003467013633002525021072 0ustar hornikusers%PDF-1.4 %âăĎÓ\r 1 0 obj << /CreationDate (D:20120625120914) /ModDate (D:20120625120914) /Title (R Graphics Output) /Producer (R 2.15.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 10888 /Filter /FlateDecode >> stream xśµťKĎ-KRžçűW¬a÷Ŕ›Ę{¦%OŔ É–q·d!`€Á }°€˙xÇ{‰úŞÚí†ÓŘłÖyöZ«2«*#222ŢúĘçŹ?ĺó7źżűö'úďSżďýiĺűÜźşë÷Ú6ŢţţżţëçożýÁ?ü—˙đ‡ź?úŐ·ëűu]źçëŻţč?Ĺż®ńůÇoöźëó×ßĘçŹăżżůVđ…ĎüVÚ÷Ö>˝/őóhR˙üíI ~´Dm“ŽhvP˝Dç"UĐř^x”ÚEťíŐ)šlŻnŃ$s~ŻÔЍ/R-Ą±g çZ˘Ęöú%ěuŻ˘Ĺ^wöeżŘë>EŤGéG4ŘŢ(˘Íö[?ß/özLQcŻÇMözŃćQ&~WŻď…G™SÔŮŢ<˘É^Ż":ěőB?ků^ŘëµDť˝Ţ—hń(»‰ŰŰl! ŰŰGÔŮëSE‹˝>¸‚µ}żŘësD5Ž2ľ_U4:ÉߌvAüf˙~MP©˘VISW$c"hó(•ýŚďŇ5¶Ç;W 4DŃ{Ű›‹ťcÔy”ľD“Gá :lođ( ˝š—¨ł×ł‹{­ű°ľöz±Úh‹ŰŰţl±˝ÍĎbL°×§‰*{}üYô˘O|´ źµ ďAĄ‰Z'ůłčo-'Ö8eá`ŤSW)¨ń(˝&ŹÂëtŘŢŔ=jö Ú"Xc\ą!‚5NŤÁ Ă^sÔµFkś:÷ ÎöÎ%Zlďđ›ťÖ¸t¶Ť–T.¬qɇÁ—ĎŹ#,Ł q4€¶Ö¸d©Ťw ÖŘ&­qÉâŻč&Ű[S´ŮŢf{ ^.ökܰ¬qk”7~'H˝Ţ´Ć-Ô¨uQ\» ŽĎ Xăö•?´Ćí~Ză†ő’ŹB›î,tD•íq,ÁŹFO¬ńhĽôBk<ň¦A°ĆŁ+Ď~pßH{€[¨´ĆŁkk<îKĄ5Ýé čÓ¸t•zĄŃúÂÇńnĹ|ÄńÖÄű§y"cPţ7W^ŽGŮUtŘŢá1Ă_ŚĎŕY’Â8ÁFŁG¶6ŠüĽl&h,QříQÜŢDKA×µt¦(îę¨S¨ú›aŤŁjÎÁŘh úچ˘UáŽĐ:˘°Ć ťŃÁÍwó`Ü©…5} âÇU® ąEqW¶? k ˘/ÇŐŠŁxŠQ;<§âŠ4ý®Čq®ÂY{Ťó, ^śgôÚ^?(Ú ˘_ŠvĂŇx§Ńű ˘§E+hQXă°ŹŚ9ĆÔÜ18{ѪЧ˘ˇ Äű‡^míFŻă..QXăX˛T´´@ťWbâ*©gqě ¤+8á/Ć–ĂŃ*Ń Ž¶AÝÖ4Ma3A»ř}´w4‹EäTMayăČOाXcĽî!Š6/Ťy}'óć UÎK6ďqí¦í˙ZA§b¤Ě˘YfŇž‚h›ńž}Ú:â=FCĽŇúă=ćÁYuA1¦‚*Ç÷xUëűńĘąď ÄQ>â¬xĄ˙Ś÷łâ•ńYĽ‡5Ćëô7ăÚͦ9uvŘĹěgńŁŻS~Ż—(â¬ŮĺŮçŔyĆ+­j2vŔk…5Ćëđgq}â•wlrŢŤWŽžxďŻÍźĹuťž7ă=,az6ś w5^é'â=®Č\»ńž}.÷“óË\ŠĎ‚â>Ć«ÎoĂă•öďayńŞër`ŤAôÂAaŤóřzôiz,Ĺ{\y4 Ök âĚ×.^é_â=FmĽ3®yĽr¶_ţ"^Ż.Џb]‰xk\EsGĽ‡5Ć+ĎhUX#^»(l ŻEž}UÍ2ńvŹW¶×0kŕu˘Ox­˘°ĆŐ4"WÇX\]÷vqĺ°<&â=â¬ŐuÍâ=üĚęŠČÖŔ]Ť×ZD1╱~ĽÇą¬ás°Ľ5eqńwgŮá}hďxď ÚŘb4´–ć#ĽO­ďÄ8d1:Y[uPÄYkk|Ć{ôpŮŁÄ{Xăň}Ź÷°Ću܆5Ń{Ç{xąxU ×n_ľqV[ĐżĆ+ăüëb ńÖ¸‹â‰ÍYxµď1ľău QxŹXޞ… 8ZGHPXcÇ|Ľ‡5î*ŤďÄQě đť ˘OŠ8+±7ľ˝îŠ5đťâ,ď\ ú¬ °Ć zL|'Úóě´ąž ˘· ŠŢMţnŕŘ{h ´ąŮS:(¬qOYGPŚľíXxslěĺs§‡ŘŽ[7=DýDPXăvÄąď ˙NŠQÄ"(ćÝm{Ç/HweĂ÷ŃÜöÄżX ťŃĆhâŹ÷łÎĺ»y0'1& k ˘5âD}ĂGV‡"ţĺĐCś˘Č#ŢcŽŚWĆĐńwçTő3(¬1W>(¬ńTEńÖŻ{‰ÂşNÓápÜś¦ŃŠďL×ÚřNq=vŹĂ9äty· ¸vAY‡Y‹ă•7ţµ8Ë®ŔŹW´‡+â ĆľĐ_Ż)WšghŽĂ{ŃúĎDśŻĹÖŻÍÖx<–â=zŻĽň‡ŁčL÷…Łč8~‰÷ßńJŻxťÄ«î×&Ç«ž °Ćł|]¸Ć8Kă:(®ňń,s|sí((îÎŮľJ×çx…w5Ą\FĽŐŔGńö%î~=°é·7%6yďĂ(—Uq?ŹWŔpń8"Ł1p„\ěÎ0‡i‚«~Ţ`ś`f Ŕaž`7Ţ`š`eh‚Ămđtb·Ľ“Ă@yFÉ1„Ńé+9L\tĽŽń”/s/âcž›¬lUđéä®ó™ř!xTsźâc^•<§ůčxKׇÅ|ĚCíďn^‹ěëË0—ÜÍUçsŽyŕx5Ż?Ă[˛úĎĄ(¸\ćÖĹͯ㱡G{ hÉĹĽ|>ĽĄÁĐÉË\}>Ýý˙€94±q‰Słđ0NĂRu{6wŻ6§˘n^™S ”żŻĽŕ'·*Wŕ§çÝgB,‚9ÇŔĹHD¶Ń¸I‚0ăcŽ9ÍgÔ8OőĸýL}ąŔÎţLccü#+i\n#pÚĆÍK¶Ń™žâ»—ŃŐ0†…źâŰݸ?tŇ^ZăźÓ2µXóS…‹rîŠÝ.·s¶“„ŔθÓ}ććÄΆ˝ťÁ,mŔÁîí­dlë.ăbČ,'†ś-cfŮt`eЬ)1p0j.ůĺJíéˇŘ¨kz sŢÓłsŕfŔďdě˝˝cŚr»öĆč{÷Ľˇ żwĎN2ţŢ^kĂś·˘Ŕ0çíU*0ÜŰö¶ ‡[€š;Hş’‹+$9™Ŕ¸;Z(yßwÎ'Hä,ĂdÝXŰĄ÷îśVvńörąZÝ-#–wú›«Dí”u¦!·ÓąŔ°ľX;2Ç ŁXÇĆć¬U'°Ăś×Ά::ŹUě1N.qÝŻđÚŮĐ€k^+Bnh`€­• ѬiĂé\®­™ MĚň>pq)ŻPŮÝ‚uľ6Đ@Ň~2۸•u®Ö—÷瀍iŢŚyď”n4±š–7Ąs XÍ\gX¨ y÷ ÔüÄ;S(rŚqîr– TL'ĘĹČ"QÎdŚBCĺĆWÎÜH‡O ň˝Ě˙čj ú"¤ŘçÁxiĺ,Š”ďT8Ř˝™!;Ř (ź ö*ÂBŇZÉ«üróÜľ’ŁĂśgúŤÁŢą=[ĆE›Ţ¤FÔ3Wž ůH¸ccćMwAiçéÔ0đ0'sVŞé˝cŚ[9§§Á5GţvÂśçČß.¦LGţ–“éĚé)IÓî{p^ž=űĚŤŁ™Ň»CČqncólĆ‘=fćT>É`ĄN§QąS_gšęl±Č3[«4ą4m3Nćk˝»~1šAŞ2Ĺł8&CRřÎfŚs™Ĺ—}rů?ť.(“‘ýLź1SÖšžĐć¬ĺŻ&€č݆ΙěběL“ëJâ:(O®†¸đ9[VćŰk"Róą@ť=sóÂ`l»\ÜJćř{â`’ż&nfů}¨É-ŽĄ%;°q_Á˝š¸JظŚŘ1[yť98ĺú4tGĆWŘÜčđµZÜ5›6I¤‹µ)rŚŘ7›v0¨ ”…NwđŔśÇđ"¦Z€Şn!Ă|xSdć0®eÄöYzB¸î É]ĂpkHW9ă Ô‘á|:7ś†qj7ę7·ŁÔg䍹«Ą{ظ­Ą¸™cîkŤüiÍp5ď¤é–j+M×9prGî䧇[r>…Žk8Ş/Ľúćf^7.îşž„×îq+÷5Ĺ`6áv˘â«ĹĘ‘k5$•ą©Ąúb~hĺI[„‹» ŁäMáöÂČeV`Ó^č1†9Ź4şĹÁ9rM…©–ŰŻn—ńČ ¦inŔ*Ú\Lń`çVW›ËŘpśFě°eö©e¶«Ékq§ˇçbjs«3Z5vîAŻÄĹMhuc3ŁŇOVÜn{ß_E8ýx>ÚĹßJ Íťoů %˘±Iž8¸×~·6ŰŐŤĆÝďí‹ظi?'wí5ŕńPJÖlÎřÝ9\`çĆ˝\BGîÜk´#°ěDu•1Ý»ŚŔÎB y~„¬¬\ĐČA’šEKGž —q°XÂ}fžşgµYŠŃ˝¬<”Ć3RŐlWKËÍecĎp+ř‹%>Ö9ôt_H>«ÔcUˇ˘Ř k—hîŢ\&cż}§ĘKŽQU*HZłLE“&˛ÖŞSąŚ*TŃMAŢšíęmXŤŞUQÜ®EVwj¶ć]úôúčĐ®űô¸:ś.{F‡›ř}Účb%x©®§ËN~:XtňÓÍ!EČHł"IŃ×Ჱn~:Y“¤‰@©jEÂ@F}xE¸ą,ĆÉCÉO–$őá•Öă¬Lňµš,_ŽľkşwK€G…Yşt‹ć<ĽĆA:˘Ţĺ_ŔĘSĐśr¶‹Ęä6•ęËśµűđ" ¶+K9ÇEŠľÎÜ)ď®M¨‡îä°±"Ž!DU©wM1@U*ň.T$­X„·‹±« o§Ęđ†ńđP±U ĚŻrľęzĹąŚ*XTÉYŕ9w•`˝¸ńŮ»ŔQîúBŕR)˘~Ű]µ¨:7ä§żĘCՏ˸Uţ¨>sO<«!­ßĄ’@Ő.¶mTńbS7¦«[76žB«ĆÉSh—ń”»°ł^ËŚuUÂX»q}Ő‹Ź Fu‚¬ĽČJS`ßw*pńPŞ9ĽŽ K7ÖĺęVáP±k1.ž‚jQËS` l<!p°]•A®›şC—Š,4OA%“Ť§Ŕ svIćÜ\X*'‘¦ąŞĆćń\č^aÎÍĂ»4šssQgáN*°—Ú˝Ś‡íŞ´đúw[aÎŽľ€0çćRŇÂjĐŢä˝U‡ęĆÁv]…ĘźŢ4ĂÖŠŠŢlVŤ§ŕÖIsnr}Ŕ=Čą¦{ÇŘŘ®Ka™AęMkŕá)ČB ¤Oě:T7NµŰŚg<[YÝÁ'°óTž¸Ú ŹĹ3ŞĚ¶őfW€ s}áâ)0Ú¬•‰ń'6ž‚üFŕŕ)¨d¸2íó…,Mc/ś<ůśĘÝÖ/l4çćŇäĘ$çç|áQ»Şćrő‰]§PŚëzá™d 0đ2öóÂĹS'D†ąĽ°®jlă:\Ś Řx cÇ~áîÜ4ç6jg{á><6gU×csľQć|ŁĚY óő®v»Qć|ŁĚŮXlÎ7ĘśąŢ®ő@nç=±žĘśo”9›ÍyTŁĚůĆy˝pĎv›óŤ2çeΚÚZ·9<<±·Ęśo”9§ÍůF™3éŔŐ(=Áë|ˇĚůF™łqŰśol× Çzán<6gMĺíŘśo”9ß(sö‹1áűőB™óŤ2gc±9ßŘű Wyáy¶[mÎ7öóB™3ŁÍÚ›ÍůFM"7ŽţÂ}=°Űśo”9ß8ö ÷óP’<°­Ęśo”9§ÍůĆ^^8÷ ĎłÝesľ±Ď®úÂó<Ôö$ră(/\ĎS86gE}ýŘśo”9ߨID8¤@x`ë/”9ß(s6›óŤmżpŽžňŔjsľ±·ÎóÂó^¸Ę ĎóNšsb?/\ŹvçĺđĆş_8ú ÷ăfIsNlí…ăĽp?NaÖ4çĶ^8Ű ÷óPÍ1፽ľpîžç)ô4çÄ>_¸Ú ϳݑćś8Ę ×óćËś‘aľ^8ć źć<×ËśU‡üħ9ŁůŮîvLxc;/|šóÜ/sV9ňźć¬‚ä'žÇ)¬ëeÎëz™óş^ćĽĘËśëzáh/|šóŞ/s^őeΫľĚ9p?ŰmŽ o|šój/s^íeΫżĚćňÂůŐÉDZ+,&E™ĆVe~!#Ş'† ~bDTOŚę )Ő{bo/śç…(śş‘ŐŁ÷O\ĎC1˘zbť/ő…ëy ڍžŘ®·ű%ÔüBFTOlă…łĽp?%µćűőÂ9_xęQ=±÷®ë…çŮ.#Ş'öóÂő8 7źX× Gá~¶ËꉭľpěîçˇQ=±­ÎöÂý<FTOěĺ…s˝đ<ŰeDE¬Â>_¸ę Ď~ ĹśOĺ…k=Őëyá/ÜŹCIÓůÄÖ_8ŻîÇ)H×ůÄ4çöIeçOy #Ş'¦9ÓśŤiÎVtÖňÂľ_¸žíöŰśż4žÄţI‘çÓśżdžOlĺ…iÎĆ4gâĽÍŮć<>)ö|âŢdDőÄ4gcšłń<µosţŇ|>q•¦9ĎmÎĆ4çőIáçŤR~>±î¦9ÓśżÔźOLsţŇ>q»Ý/čÓśŤiÎF›ł4ˇ-'‘Ä^_8÷ mÎĚPJ úD›s˘Íů|‰AżŐmÎĚŚJú…3Í9Ńć|,ó…ŰíRŔąŇśmΉ6çÔŚÚś…;'&wĄ }âô)ěOjCżđ¤93m,uč9‰¸ PúĐ%%–O*DźHsv »4˘Ebމ>q4a˙¤Lô «Ěą(/.ˇ(ńK)úÄíCáôĄ%îOŠE‰V’Îú­Sŕ‘ô˘ÄňIÁ(ŃŃ©vąż$Éč˛ŕŹŘ?)%ŽOŞF‰_˛Q"űM"® ’–”hůčŇ)płQjRâ—ś”¸>©'-Y+A)pX5z©]&%)%ZE:t LŁJTJä‘»ĚŮ‚ ÉJĚOKWJlź–y¨!s.JĎ«Śx>©-ĺsů¤¸”ČCMM"ĐI^J\źÔ—%ĽťiÎR¦®4çmQ©Í™4¦Dvc+&´*K*Sb˙¤Ě”¸>©3%ň·G朊ß#s®˛nIM‰ű“ZS mPbS˘őĄ4g ?$7%žOęMąßÎ/Ĺ„.«‘â”h‘)ÍąŢ TšsŐ•č”heiס8ę$;-Y-Ý)‘_nŠ ]'ĺ)q}Rz äŘö”hiŐˇ¦µ¨CírËHňS"Ű2çŞ8VTâř¤•hAęÖˇ¤]ťŠ «ć‰PY}đĄB%®OĘPËqé“t¨%‹Ö%DJ»6_öĄĐĄ©Ň˘ç'ŨŔîOiÎ^¶JŽĘ޶{4‰x E‚T ÍJŠT"凗ĚŮ[sҤ˛bâK”JśźTĄŹĹ¦—ÚĺĹ‘.a*«-Ę'•©ĺô[~JsöF´J®Y‹aá*cB?WHęT ”Mćě}xéS‰ű“UÖqŚO*TKj$Q%žOjTYĺ±>)R-§ßşTšłÇ#™*k@¬LĄ9‹<‡&‘ˇ*Ą*°}IUY0R?©U-)oT…=‘˝Z2g× J® ”v)&ľ)K1aji·ĚŮĄ1’¬˛ö¤}Rł ¬Fšł•öR­˛2ĹČĐOn8Ť4g× ťKć<ĺ6Ď%sv Ňą4‰řŃ4 p€ 4y˛ČĹHs^r2ŇŻéF$`-Rh¦‚(QgUL¸4€ĄaŞMćĽuq¤b-©ć‘ŚŐő2©cJFŰú™2R˛–” IĘ \V¶Ňś-#–•Ĺ5í“jV mArVÖÚXĄĘĐŹ •Ą7듊Vŕ˛Ŕ•ćěgVHÓ <–¸†;aaNű¤Şµ¦`S˛Öšú-éZjÂÖšęLiSŰźnĘq¬´­¬âYź·Ą$¦şµ^Ž($oeQŹt—wJX»¦’J)\ë—®‘1<¸Ą¨µ6rOÍk?dĺIĺZ%Wý‘2WVmsEűíK×::ąĄîu_ä[ÇzM˛ŞVĄs«bP:WW ýHť+XŐâŇą‚U`)ť+X5vŇą‚­#ĄÎěţRçŠ"!UtIçĘ’˘d<°îJy…t®ŕ•şŐz‘OrÇů¤^L:W–=t®`ŐµIç ^ÉŁÝ?ę\Yy”:Ö«‘{ę^ë![Lť+Řş_Ö‡˘ľČ׏:WV#ĄŽµőŹË‘~¤Î•őH©Ý“|RÇZpĽ“şHę\Áş^Ňą˛DéO!«?ŇąşHéGę\Á*ż“ΕeJĹöޒŇ3°®Źt®¨EşuŻa˙`Ť_é\Á:é\ÁçˇseńŇ6ŻC–$F:W—/ýHť+ë—Şn ´ÔѲ śLúś:W°Ď*DÖ0ĺçíçóĄs»}m‚U—/ť+řĄ •UM©kmŤ¬ó•ÎŐuM?RčĘÂ& #ą’feÓ4ĂÔ,í–Ö¬ţJěZuŘ©v«z_rWT,•TĂÂT?G‚W°t@RĽ‚ĎCňŠŞ%UôKó ©Ť/˛ŞIýŁę•eMŮ+¸§*ţ ¦ż”đ••MËÜĐ~Oő.XEĆŇľ‚-«Ąřµ*ţ#ŐŻ`ß+ÝőŻŕ§–%M©q…?PMÓŹ”Ŕ‚ݵ“(Tr{”VVýěGŞ`ÁnŹŽěö¨ŰD±’ŰŁ¬ěö8XĚTĚđ5ĺËŇ‚Ą ÖőL?R Ë‚¦a†?h~Úő°`ه±U_ű‘ŠXÔ)Ie#I,¸Ąę5:Ö|*Qlm©‹—*µJ%Ełđ­¦Ö“şX°Ą \ư©šç"ׇ4¬ůFÚXÖ3ĄVţ őT©R芦)ŹeI“úĎÂhÖ4UóŔůÜâSNڬjŇ÷)aË˙H#Ëş¦m†?h~:¤U˛` )“eiÓC'ËÚ¦TĆ´ĺůCJYV7éúR§ŕň¦©•e}S~>;ąćçđ-Ç“ä˛ŕ•Yřv˛} fÁ5ő´ŻZŠ%™݇flĺ'Ő,U_ű‘ŞY>éűLś±ňi™áşŃβöIN*gÁo’΂u˙Ąťe5ÔC<‹ '‰L:Őł¬‡zČgYőĐĎ‚Ą!ě,´ËżKAË©dřîgbYC îÉŻş«=­˘eŐT7Ăd…˛u´ő~*Ż„´ŕ[+ Eč–ŇÖ|ꬵ´5źk1mÍgżZM –ýHN î)Ż…?P±ŐŹÔÖ[ň E-ř¤†ńkźö?ŇÔ‚-¦cŞýÖúRU ¶n˛Z°âéjÁÖ»RÂToµŠ”µ¨Â*imͧ“Z[ VĽ&q-kşęÚšĎ!µĽ–E^ÍŚř5ź>j-«ľ†ţ—ešáz>äAۚϵČÜ’żŢŇ$Élë­\’ÎM©îĐ|ZŇ]ÎÇâ©ůŞZö-ń.çóešĎźň]Ćęß’?Čç>IŔ‹xb§ —ţ źË$ /ă‘”ĺĹ'š$âe<ÓÍô—ýądĽŚ‡:^ĆK©Ü튏dŹRň2ŢĘďĹ[Vľ2gQúe†?héďĄćeI»äžEńë¶“ž—ńůůPüxĺçđ-ó/’ô2]fř¶ň÷5ăW·_żÎ¬ kŠ_3®—ńň1Ă´|RŚ”˝µe~JŇŢŞ0ýGj{ÁšŻ$îe<źß?Šď­ÉebÜú^®RŃ ЬƲ—ň ˛qaHuE7ŻW¦ţ ŐĐ2«MéF1Ă´|î™tľ\/M3â×–Ď“Ňl]0Ąľµ•—Öë5Ĺ/űr=§ăŃńs˝—ę_®góQCŇű‚5>%řĄ.ĺoŐ2ýGJąßćĄőąĆżÄżV(ýHő/LŐ<´Ţďý/ó©é-Ę7¸=ę,k˝˙ŽŘíQ ľRć P-Xł ůŽTĂÔ|Z•tŔĚ—¤ň·(2Së PkŞ{)¦Ä¬™ájIM2ĹŔĚç,óPţFń€äŔČi}.=0x¦>ţ ^).f Ę|Ó63ż•Ob“&mMŞ`ć»¶™ů­ťQăR~ËĎć·0ŘÁ© fľíżBa(í(/óu)˙íĘ×I=*u0ĺ‹ů}řb˙c}0ó…0µ‘ÍŚřµŘ˙X"LeĄµ\2_ŮÍđ%˙f‡T”męxLü3şĚMůO«l)f>ušáJj%f>všáJKY.ĹÂĚçćç_KÍß3`>x™›ňĂő!f>y›áŠźfÉ0ŘçOĂeľ:5ÄKůéëˇfľ;uÂÎwűúo廯,o廯ĽGű1Ç‚WI‡ńćżÝ‡7‹Ą)f>?ĺÂđ×ö_T‘|Í4óĐţ$h×ËţË bî7l3üÁµR€K 1÷+†ţŕňó`­"ëúJF ¶™ .óN†?¸üL+‰Á=ąkEşki‰ą_“|´żłjbî÷$íďřxÔő÷`$(ć0+ćŞý*‹†‡öcňoçHSĚý*Éw)*ć~Ö47íW1ž°¬űa]1ÍDí-íǤŞQĘbî· óÔţ[IĺńŃţŰĄţÓqp?/őĂđWµ6Wňbšů1í˙µTWď'Ns×^¦Ż/%ĆÜŹLA2üÁUR|i˙«x¤8¶˙‘’cn@KVŰUoq|ý$:ćöő1/mX_ů}–\8_aÝqÉnZxĚ­óe^Ú,—~V;7Ţ«ąjçÝç;Uxáő˘ŐÇśćÔţRé…čbýqÉÇrZ€Ěi˛·J|ţ[ĺ~l‹5ȬGXć©ę…úP!łš!•ĹEő ×C‡ĚiĽ›]„±“]…ˇű!)2 -’ł#Ů…ýˇFfÇCŽĚ"ʇ™aÇ0/µďż+UUŤáýK’Y`˛Ě¬ÇČżĹ$Q2YâŮ¦Š ?ŲdVłDe˛ÎÇ’š|´Gł¦&źŢŃ,Şńßzq"źµNúľe5~ňś•Ęäjj˙Ęďo•{ťÔgÝU37ŐŽů~Y\“O}hV×äÓ$X&_殢/=ź [`“úýn…Múën‰Í-µĆĆűÇ–-3,_ćŁöĺ?şe6~b•Ëäü|é|ô ‘nĄMËżuÖTýçżÝcő2ą™·J u˝şŐ6ţ›(0“/łk+ő„ŤŢł¸Ňú+nŞ}Ń-ą©?Ýš?Ö2f˛Ž7łÂRöŃg–XęR2“»ů¸2RýłňĆő-3“›Ůu–úKm}eˇĄěKzfr3ŹG‰§Íw¨%Íw¨‘äËěrKßźŁ˛@?‡Ű˛ć»8Őşć»vŐÂć»´ŐĘf2Ű%‹.5ß+q\dq3yĎŁęÖňfňe•} ËqüŚE+śďŠ_Kśď‚`kśąŚÝf×đk˝0zńk<ŚžUüš_†U9®U¶Đů.e¶Ňů®t¶Ôů.„¶Öů®“¶Řů.Ł¶Ú™ĽÍ®ć×c1ĆĚr~ŤŻ1łž_ţl¬,čW<3VVô+~V蔗虬ăď,ę—;«ú5>Çβţ^Ě®ëW|:NöË u\řníó]ońó]6oőó]Uoůó]toýó]“oô]˛oô]Ńo 4y™łÄ_í׬ń×ü:kůË^¦E;®ď±úÖ"X}K¬„ľ• –BßBkˇo„ĹĐ·LÂjč[Ea9ô-˛°úÁ#ëýK3»ŕ_ţuެř—ýN+x¬˙°(ú–‡XýbWýËŢçʲ˙ë!Ś~ńôń¦Ů•˙ňsgé˙Ííˇ±:ş«f,Ź~đI őę<éĎ/=OňSĐcŤô‹­ĐÓü˛®”č™Kjô´ľ–NúĹăˇL˛RúÁ5uzŠgVMˇŢÍVęÉ˙I-ý`‹{Ü+ ¦_ląžâ‰ŐSŻws/o¶N”ţöWßę—âú§OŐß˙±¦úăO)a»ľ>6ăó?üµ˙Žî_ýĂoů;ş˙đWűíţ}üŕóë˙ń)ś®űE ‡Ľ§˙ŞÚŻúüâŻţ珿ţĺç×óíßýšG˙§~~©x•n&~˙gżřÇ_~”~ń—˙ËĎż SůĹOżü‹ĎŻ˙‡Ă_ţçtxţ®Y1‰:ü—ŮŰ˙˙t¸čq\˛ţôIÔV~Ü .â×ę.*‘}}ŃĚăţaőÂ/ÇѶ·]ăćŻoüFĎ^Gřmß/šhëa}đOß~ă_źűO•ţó†Ňďľ3ŞMhc5Üš˙–·F·ĄŃÝĂŘŚŢţ?{ŞÔ ‹Ö˙î· ăýţĺö_J`NS~X^?üÝç\•ůůŤ˛r«=Z­?ŁUěâ"‹Ťąç絺TĆ,~Ůţů­2y~źse­?ε˙^6[~›U Mřé#h“H+i\‡řcÓóóĹĺR~.z|ŽtbLţÜôřü7Çő˙y˙Í-–¦?Mű§żüÄ˙ţâ_ßžőźvÔ/_ůŤAţ;‹˘ňN?®?ăÇť «ÇŹŰĎřńćréńăţ3ć¦FeßăÇăç »ń}SÎć±â@ó˙ůĎń§źó©˙ sěź˙2;ó/ß]‚—R<µ\,DX’ŕĹÔźZ[Lüôíýń7˙ů¤u´8řżÍŠ6›FŇ—™i&•Uw­ň/d˙ôí7ľqެIűŐo|ăË´ÇśL~óýŤűóÇ1_ßř2ÇŻcrâú:ćo|ăţüë1~Ď(…yĐV¸›˙o†{ď,Šř=Ľ™ˇ˙m?ţ“o˙e/2}endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 288 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xśť–wTSهϽ7˝P’Š”ĐkhRH ˝H‘.*1 JŔ"6DTpDQ‘¦2(ŕ€ŁC‘±"Š…Q±ëDÔqp–Id­߼yďÍ›ß÷~kź˝ĎÝgď}ÖşüÂLX € ˇXáçĹŤ‹g` đlŕpłłBřF™|ŘŚl™ř˝ş ůű*Ó?ŚÁ˙ź”ąY"1PŚçňřŮ\É8=Wś%·Oɶ4MÎ0JÎ"Y‚2V“sň,[|ö™e9ó2„<ËsÎâeđäÜ'ăŤ9ľŚ‘`çřą2ľ&ctI†@Ćoä±|N6(’Ü.ćsSdl-c’(2‚-ăyŕHÉ_đŇ/XĚĎËĹÎĚZ.$§&\S†Ť“‹áĎĎMç‹ĹĚ07Ť#â1Ř™YárfĎüYym˛";Ř8980m-mľ(Ô]ü›’÷v–^„îDřĂöW~™ °¦eµŮú‡mi]ëP»ý‡Í`/Оľu}qş|^RÄâ,g+«ÜÜ\Kźk)/čďúźC_|ĎRľÝďĺaxó“8’t1C^7nfz¦DÄČÎâpů 柇řţuü$ľ/”ED˦L L–µ[Č™B†@řźšřĂţ¤Ůą–‰ÚřĐ–XĄ!@~(* {d+Đď} ĆGů͋љťűĎ‚ţ}W¸LţČ$ŽcGD2¸QÎěšüZ4 E@ę@čŔ¶Ŕ¸ŕA(q`1ŕ‚D €µ ”‚­`'¨u 46ptcŕ48.Ë`ÜR0ž€)đ Ě@„…ČR‡t CȲ…XäCP”%CBH@ë R¨ކęˇfč[č(tş C· Qhúz#0 ¦ÁZ°lł`O8Ž„ÁÉđ28.‚·Ŕ•p|î„OĂ—ŕX ?§€:˘‹0ÂFB‘x$ !«¤i@Ú¤ąŠH‘§Č[EE1PL” Ę…⢖ˇVˇ6ŁŞQPť¨>ÔUÔ(j őMFk˘ÍŃÎčt,:ť‹.FW ›Đčłčô8úˇcŚ1ŽL&łłłÓŽ9…ĆŚa¦±X¬:ÖëŠ Ĺr°bl1¶ {{{;Ž}#âtp¶8_\ˇ8áú"ăEy‹.,ÖXśľřřĹ%ś%Gщ1‰-‰ď9ˇśÎôŇ€ĄµK§¸lî.îžoo’ďĘ/çO$ą&•'=JvMŢž<™âžR‘ňTŔT ž§ú§ÖĄľN MŰźö)=&˝=—‘qTH¦ ű2µ3ó2‡łĚłŠł¤Ëś—í\6% 5eCŮ‹˛»Ĺ4ŮĎÔ€ÄD˛^2šă–S“ó&7:÷Hžrž0o`ąŮňMË'ň}óż^ZÁ]Ń[ [°¶`tĄçĘúUĐŞĄ«zWëŻ.Z=ľĆo͵„µik(´.,/|ą.f]O‘VŃš˘±ő~ë[‹ŠEĹ76¸l¨ŰÚ(Ř8¸iMKx%K­K+Jßoćnľř•ÍW•_}Ú’´e°ĚˇlĎVĚVáÖëŰÜ·(W.Ď/۲˝scGÉŽ—;—ěĽPaWQ·‹°K˛KZ\Ů]ePµµę}uJőHŤWM{­fí¦Ú×»y»ŻěńŘÓV§UWZ÷nŻ`ďÍzżúÎنŠ}}9ű6F7öÍúşąIŁ©´éĂ~á~é}ÍŽÍÍ-š-e­p«¤uň`ÂÁËßxÓÝĆl«o§·—‡$‡›říőĂA‡{ʰ޴}gř]mµŁ¤ę\Ţ9Ő•Ň%íŽë>x´·ÇĄ§ă{Ëď÷Ó=Vs\ĺx٠‰˘źNćźś>•uęééäÓc˝Kz=s­/ĽođlĐŮóç|Ďťé÷ě?yŢőü± ÎŽ^d]ěşäp©sŔ~ ăű:;‡‡ş/;]îž7|âŠű•ÓW˝Żž»píŇČü‘áëQ×oŢH¸!˝É»ůčVú­ç·snĎÜYs}·äžŇ˝Šűš÷~4ý±]ę =>ę=:đ`Á;cܱ'?e˙ô~Ľč!ůaĹ„ÎDó#ŰGÇ&}'/?^řxüIÖ“™§Ĺ?+˙\űĚäŮwżxü20;5ţ\ôüÓŻ›_¨żŘ˙ŇîeďtŘôýWŻf^—ĽQsŕ-ëm˙»w3ąď±ď+?~čůôńî§ŚOź~÷„óűendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol >> endobj xref 0 12 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000011254 00000 n 0000011337 00000 n 0000011460 00000 n 0000011493 00000 n 0000000213 00000 n 0000000293 00000 n 0000014188 00000 n 0000014282 00000 n 0000014379 00000 n trailer << /Size 12 /Info 1 0 R /Root 2 0 R >> startxref 14457 %%EOF ordinal/vignettes/static_figs/fig-figNom2.pdf0000755000175100001440000003464013633002525020777 0ustar hornikusers%PDF-1.4 %âăĎÓ\r 1 0 obj << /CreationDate (D:20120625120914) /ModDate (D:20120625120914) /Title (R Graphics Output) /Producer (R 2.15.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 10864 /Filter /FlateDecode >> stream xśµťMŻíĘqžççW¬ˇ4Č1ű»;CI H@†Žě „s%Ř2`äß§ŢŹâ&mCöŕÁÝç>{q±ŮdWuuu˝Üĺó—źňůíçďżýOý÷©ß÷ţ´ň}îOÝő{íĺűŐ?˙đwź˙ýůÝ·?űĂ˙úoţů‹_}»ľ_×őyţüŐ_üŹříźúöWýą>ű­|ţ2ţűí·‚>˙ý[iß[űôö}÷ĎO qHăó´'iú÷RIGÔ6č\˘ŮIUżuĐř^x–3Dťíť%šlďQÓű÷«€ć÷ZHMÔiV#ń, }Qť RDŁ’šhmϲqAKÔx–z‰Ű«U´Ů^eŹZ-QăU×#šĽęVE›giř^˝p %ęlŻŃäU÷*:ĽęŽë¬ĺ{áU÷%ęĽęq‰Ď2šč°˝1A1XŘŢ8˘Î«žU´xŐ“-4ÜsĐUžeUŃ`{ËGn¶÷1(î9ŻzWQăUsô ^5ÇKĐćYŻsŕ逦(îHxФŮH]ß±˝‰'TިŇMž…Ď/(FgYř-h‹úµ&Š~ö᧲ľź ŇsŘř>hŠŰE´ŘžîőÁ8 š—¨ňŞuwĎ÷Á«^ţló,ĽźíBĎ‚ö%jloOŃäUź"ÚĽjŢłđ°ĆůýŞ"Xă”=ŔWtÇ|P|„çĐ*F{P"XăüŢŠÖ8u'‚`ŤG5ZăÄ"u¶Çľ-¶Ç‘Ő:­qj,Á§{ŰiŤSăĄqxä€m©×Ô—¬?Ö¸ľ—Kk\˛Ű6iŤË=š´Ć%űkĽ¦ ~‰Â“‚0 Z|żÔ4»Ö¸dA‡gŃ3Ú´Ć…s‘:ŰŁ? ZqŐ[^*Ö¸ŃNС5nü$Á·ŻóĐ7ĆóŹoýÂS ˘…Ũ¬qëîÁ·¬±ZăÖ•5žĺŕŮŹě((l4¨*­ńČ:‚`ŤG~)ÖxôÜ6ĎÂQ~žý Ď¤°™ >Ű Ż‚hďš Ć%›–Ź ˘†_› zSyť µŢ13éN <ă Ž3ŮaĐę˘°Ć ÎU°„⼂Ńg)ňµAô ‹Aóo¤ö¬1h6Qô:hůČÍłpţĂ3ŽöŞű·qőŁj|âY m ĎŁ€čŮńH÷óŔÖ‚ÔŁ1ެw2Úk˛Ü­ âó Š=šü™îČhĺq…aŤA×č5ϲŽ(fŤá™=‹«öĽ‰ľ źŠ®>ľ (¬qx^Á6Đ‚áš.#\S´743ă**¨úȧcřśV4‹(¬1ă:(<ű°çśCĆ”UĹoĂŻŃŽp¶âóĂ÷ hnQXcGHüv8–,Uß⊾éʬ1~rÔá ÚEÖ8¶"–AÄż] nЧ?§)î]üܦ°Ćq4˙Ĺżńâg-˘™ńł›â9âgĹ苟×9/Xă´ŤĹżaŤń“^1ţŤ{€ß-QXŁ~TĐ~w‰âi[‰#ΊźŚ_âß°§řIŹ9+ÎŤ#¶(¬1~˛ńoXɬňułáš‚8‹Eś5«ä0ú:—"Çř7¬$~Ň÷śűĹCž GQüGřȰFÁ#+¬11JPڰ Ć‘‡ŃĐ)Šâęă'­ęĐîqüĹżÇŃÓáóÇńE#ó8^:\㟦ůý0Ž â(8\őâۦ°™ÓtĎ΀5ž.{ k<]c"(â¬Ó5«ť‰}ĽžŠcŽWÂA1nâx]Ë„5âĚĽ/ś pć"Šqs†"« 7gČ/z fUÎƸ9S~0(žă™šIźú·aŤÇ«łs7éHá9Ďô9¬ńxD…5Ż«ĘuÁ„Ž—RŔ°Çł4;ăᝥI±Ö±ß*WI2€†MĆu•ËFyĽ0*W…UŹh`8‡@`´xGĂ0iÂĺjxRgg» ĂôŘ Ă6Ďqébđ€˘†ůžŁ§ çrN^F‡}â~ ch »?`ˇ¸ÍŘy*hŕd»ëăvźă´Ú5aĄ¸ŰÝ wPY°‹“y›ĂTů8t<Xy«ŕpěäiŽán:ßĆ0$s >ĎË ÜÔ>Ç'xŞ}ÝËŕŁţĐ»—ÂI†<Ě˝˝yž÷ńg<ąÂđçŻčŘăz¸üz\oaő'¸ş?ĂJäfînÓ›wÜ„Ń9ŃRâ9ŚÜfěćø8ĚÇ4ZL×…Ň a@ŰŘyŞš¸ŘnLÇé  Ś^Yârlô{môĽŚzŮčő@#V;ŰăłňA‡IŔ-gĂS!µJgŁôpeľő2Nú­ťcNqV¨TNJpŰŘé/{3NúËšźúK7ÔhôSÉ`ýq^ 7üđŃ}˝FTí°řŔÖŚŢ^Ďż2ŚĹ4ˇ9ëęV.nÎČ{Ĺěĺ›H¶r˘ŇP«Źă8÷ lśđ4To匷.ăćäčŰΞžnŻ÷˙dR>pr–=‰ń?ň—u{¶—SMs‚yWÍěŰx Č›"óĘAC4°3DđC9śł«m§qäß«F;Îđ#DÓŤaŘęQ+°k„7Ű™űĘť“©;ťJ`ÄRštpĹÔwŇ…6FfÚKA–ˇ™ž~ăţĎv ´†oíăM db jçĄ5‡sŞű­Ăś÷Îď2Ţ+żŰq˙tć§a}n—©t„°Ă8ËúšĚyO;ŮĆĽôžŮ_.Ťőôă–î‘÷jbpn=Ą-ĆňŤř5ŤńüĘ7z9ßƨxwÇ,qX lăäBĂ éY."4Ń5Xa,cçbDŁ=pr5˘Y*0f,fŘP§7ŢŐűQť‰,.ăâ HŮ™–ÜN@–Îx_öuHÔ.łŽ1"µťłEgŠq_v#˝ző&漎=˛µŘt4™uăⱦěĆ«XpNcÔÚöĎÚ@ĂRő26®`ĺF´Ť´VŢ f˙ÖĘ»1p’ĺ0nx …¶EÖtô§ýŤ5˛!uËĺ·Ćłö«h[ay;¨ {[°ŽßÝXąä×ÄŤL?×ür#HîsŃď»Áśýjy7\Abaó ĺ7ÓŢîd~eĄĎéŚWő„Ţ™aYŐŃnçT»ŠCTeÁ—sj@¤ZŠ/ąîÔE"ˇÍd‹&>d´ó2ÇĎn]޲D>—ůMôHU3ÁŁq5¸‘<Ź=RşJMcóÜ~ÜJ;ĎmëtĹsŰş“Sz Čë2Ç%‡<¸I(O8•›Ëaµ’ČÓ;ŔÍĽš<Ăŕ“ťÓÁ~`cf­ĺ§q=HÚ姇:—âů]îcÍ‘ír{j{¤Ŕ٬ ®y1%Ú=Ľ‘ fvQ!DŕbzQžp0Z9— †ÓI(ŕ`FSNfp«f6O@Čů23ęÝđăÔ¨á8ÎŤĘo(Ń‹¤*/c2ÂCĆuÓ±ü“SĎ,ľí“#Häę»…Rçk€aPÓI<ŕd&Y—´/SÉşŚh±0—¬yi]&“nââ•“ŢĆĂôµî:ŢÍNڎ;rɸ”˛@Éqae>}&*őŢť{rľ;OĹŮdd ‡¤.“řľŞ›6Ľ/X4˘ĆĘűĚýĐ‘CŁ‘ŰzÜ“»—c:BžśÇtĚ09{bwb'· äT±+6mNnŚaĎ0éŠÇČţrŤ‹ Žm<Ü=ńS80gŘK7î×h\.nŘh>Z\ ŚŢđÜřŃCY\ŮŚŚÜć©4Úž‘‹[0ůfśÚmÚĆÍí&Ťř@îZÉ1.¦qŕLňÓÉS]ů©6ĘäcWóNŮÚFm•ą ć<Ş=ˇ’ľ#ggř|žJFí˛ś¬‘÷ĺ.ßŃ©X†0rî^̎⡲ÔĆ™pqżPóŃb›lË]ł’·ŽiŔ‘Î|18śA-‹i—q9řÔd:rU»č?Ç•ír÷ydT°¸Ĺ<.Oô‹{Năň0CR¬î/cĹžóÂâ¬;ŮěÜÖx^ĚaôLlî ëFRµ9\Śť»Ă-qńTşí›ďŢ‹V¶{%j_űäÁÚŘÖ˛eWďlŻDmm+CĆ{é#qk3ť×ŚŽ{ňĚb%Ť{: dŤą+݉ołĽ©oß«ÍaŹÝýcě,Đ# śŞ¨ĆĂ‚ąÍÍJ”ľĆo‘ô\-"{ĚSiŤłą^ëK[,eł>CűĎÂÁbŤ«ŔĄj]‹$€ŐXy*eą6·z®47ݶ§űеŔĄŚnl¬äĐ ÜLłőé%ž2É=|¬AX<˘řjłb g\·™%čNBU…˘k–ˇ¸LęrŠ&‚sąE)­ŔĂveG‡ŰK}zĆQY;ţÂĹő÷p§XŤ•E4šč«vv~şX¶ŁîcŤ©şťbl,ÜŃĹú”ő?„‡>°ß ,uŮ®Ć$Âl·ç§“5G˘XSłČ7‡nŘŤ]ĹKÇ8y* `¬ôŮ®¬ě°Î!÷2vL5ăb|ë&ÍŮ[]É U^ă`©—&ä=XëĄ<%’$,ö’- Ł˘jŻiTŃć…łłjLíŘWwɰ±NM> ĄsŁ·*ŐXg…D—JŐš±ńTŞ»RšŻ;ćUÇ©ţ®°`Ĺ9 `W•Ý6ÎýUtxxŞ®†*ÍąËŐUŹčZľę‚Ä6ŚçÜU€őj4ç.˙ ĺ®.•ę»ÝU‰µe‰ŔˇęĆmÜ*oÔÍa®¦w…ŔÖďRH jŻcTqâĄË®NĽ†±ť»ü8żj30g‡őZśDĽĐv•NăúŞžy‹V$ YWzбď»Ě¸ú]Z‘}f»{Q©Ř侀CŬ͸TÍĘ3Łäu/că©TÉ8ŘîZĆÍv9D+˛Îě};°± «'» ‚ÉŔ­S©ˇĘI¤ą¸ g¶;·q˛ s» Ń^¸äěŢÚvťŞŰUIgáý×BČrUŕe삪A ­Ż7ÍGifžJ†SX*Ů›‹ŰøËYwŘ›­¬L—»$uş¦xTăÖ©t‘ËUĹ®f].+ľQuĹýUX,-ەŮ‹Ý4ç޶Xµ›…»@˝eI-Ă’'vvˇwăbdűç|aeUŤęÝ„Łľp± Šje©vw‰°]/삊€w}`eiŁ `€mĽp˛ rA•)Đ/l4禥°ťÎůÂŁvy7j·9ß(sVsí6çeÎĆÁIÄĹhŔ~^¸ÔÝ«isľQć|ŁĚąŁĚٸ>°ŐĘśĺreÎĆmsľQć\Źq¶îóŔcsľQć¬ŇâzlÎ7Ęś…Ť»tOějweÎ7ĘśŤĹć|ŁĚůĆĄvů@ kžXĎ eÎ7ĘśŤÍć|ŁĚYÓSŁ?y˘4Ć Ü(sľQć|ŁĚY5ÚŤAËĄ¸Qć|ŁĚŮ8mÎ7öőBM"FéXŐ…f”9ß(s6n›óŤ2çÇzán<6çeÎ7Ęśo”9+ čÜ,xbż^(sľQćl,6ç{á*/<Ďv«ÍůF™óŤ2gcł9ßX÷ Gá~vˇŰśÇVĹNO”9ß(s6JNđŔ¶^hsN´9 gšsb//śű…çŮîJsNěó…«ľđÍy]/s^ĺeΫ8&Ľq´>ÍyŐ—9Żú2çU_挒âg»Í1áŤOs^íeΫ˝Ěyő—9#Ă\^8żÚý•5—LÔ]·čŇřĂŞË/dDőÄpÁOŚę‰Q}!ĄqOěí…óĽ…R72˘zbDTO\ĎS1˘zbť/ő…ëŮFTOl× Çzá~¶Ëę‰mĽpş JhÁn”ó‰ýzáś/<őڍžŘű ×őÂól—ŐűyádDőÄş^8ú ÷ł]FTOlő…cżp?OĹę‰m˝p¶îgQ=±—ÎőÂól—Źî‰}ľpŐžg(Ö$Z»9Ę ×z #Ş'ÖóÂ1^¸§’fó‰­żp^/Ls¶R3ÍůK¸ůÄŮ_xží2˘zbšsű¤zó‰iÎ_úÍ'öýÂŐŘos6¦9ÓśŤëy*FTÄţIçÓśŤiÎÄy›ł±ŤÎú½Čę‰iÎă“‚Î'¦9[¨™ćlěă…«Ľ0Í™ÂŃs›ł1ÍŮć ”˛ó‰uż0Íy}RÜů…ĺ6gcšł1'ăv»_ Ď'¦9ÓśŤiÎT¶{1öúÂą_hsffEië'ÚśmÎ’F2˘úBFTO´9'Úś›Eť6çD›sâp»í“šĎ/\iÎĚ`i×í‰6çD›3sc~>±ąÝůIéçmΓć,íéIsNô$Âlźöko””x>©}˘ÍYÚĂ’ćśhs–¦±~Rú…5Í9Ąź6燔Ř?)%RUÉę‰ÍíZ˙isfľVrĐ/ěiÎÝP›33ÁR„%ô¤$ô © %–OŠB‰ÖÚś™ź–,”hí§Íy| Cź¸ÔćĹ% %®OjC‰ű“âPâů¤:ĐKíJńş3&”´s§93ÓŻ""/ň¤9s—@Qâú¤H”¸?©%RfxĄ9swB:Qbý¤P”hM©ÍyYęI„»"ŇŠ×'ŢDëJmÎ’0Ö4g)/kšłÄ«5Í™;9RŚż$ŁÄőIÍ(ŃR›3w¤%Z(jsćî“tŁÄůIá(‘ש%ZXJsŢOő(q}R>J´b”ćlŮ–¤Ä/)q~RBJ´˘t©]†µ‘ë'U¤D G‡şŔ‰@:Rněó»GćüĄm:Ý—¤¤ÄőI-)PňĘKćě ©I‰ă“rRâţ¤žH” ”Ř?©(%®OJJ]nšR"Ş2ç­Ń.U)ńKV \>ř¨]ÉL›b­ťg)KYČ`ŮéR8ĚT äž¶ÄĄÄţIu)ńK^ŠşŽ éK‰–›ŇśŹžľ¦®H‰iÉ"niLŚc%2%ZJsvŻd¦D+KiΖYHh Ô3ZŠ ]p'©)žPZSâú¤Ř”…ţt© ÓźťJÖŁIäX4{úíRś)|ĽdÎG&)Íi‘č0E§¨ň¸¬O…9WJvĘ‚‘ńIÝ)¶ á)q~RyZRž(éiÉş{iOYlbaęT»R²ԌhQ)ĚůX7¤2q ݦ¨ĺ¸\K Tŕţ’ ˛nĄ|RJüˇ˘PĺúRˇË— •řĄCeÍËú¤(M.•¨,±01áńű+¤E%îOŠQ´ŁÍŠF×ˤČ'¨™(/}mI©„©,®Ůꔤ–TiJ“ĘZ›ńIQj‘Ę3U©%5’Ą˛§~R— śF3 sp'ĄL-·Č“ŇTŕ1b9M&)q*°g %OuQOęSĽ“¨˛ĆÇIäxă]’S oť4ެ˘ŕ’"Uŕ±fć|\g!™*ë¬a…9׆H¨ Ôe°ú8,\…9ß*SjUs˛ČG&µ*ę$ŔĄ\•µEÖ¤"&<~%’«ĺÖˇR± T»”‹˛ňČJÔK§âĚ.Ńją•©Ś†P[t}ÉVşí[ćě"n WKj›¤\ę>o™ó—Z1!Ş–Ú'Ĺ«¨KRCGćěŐ±ä«@U›JżĘ˘¦f¦A;J˛‚µ|iV)Č«öOVT2© M"V°u•EV˝]â%+XŐrұşęG YË­q“’µ¨Ź?RĘĘÚ¨b¦mźÔa6wŠń¤feµ”®źU?őKGĘRĄzeU¨­¬źJkXx˝uŤ’´‚×CÓĘŠŞbĆ é®’*^>~°ĘÔ$keŤUęVĂÎYd•˛×0t°*ƤkEĺÔ•şŐ:Č·Žu˛¸Ś:Á3u¬W#ű|ÔµVÝĆ©ke)Vň®äž:Ők“gę\['K$]+ ®Ü_ŠnXžĹű!]+ëłRÇÚYĺ Ňµ‚-ĽäŤD–,Ć«–XşVÖlUó<äýе˘Ký“®¬ű/]+Ř×CUxĄnőşČ*””®ĹYÖ•Ňőą”ëGęZÁş?ҵ˛«ú“ö!]+¸Ąv7˛u·,B5[%uŻł’ŰC× ¶N—şV°äҵ˘nKĎGÂVVyĺçáŔ„HÚĘ:ŻłĆŔbˇW1‡?pĄ×ŹT·şÔëGĘ[Yë•r׎óU—ZJŕ v˙©»bą×0‡?`˝W1‡?`ÁWj^÷Eî)k˝&ŮzKĘ\Yó5Ííç %t[5ĘŽąěëGJ]Y÷•ŇWř’e¦»˛ňKÇsrgéWę[;ú“˘>é]YüőĽ‚­ÄäöGŐcř‘’W”t)W/Í+Xö(Ń+Xö#Ő+ʸT>/Ůk-^ŘX÷Z‹—ľ‚wj[Ú?©ŔeÇXřu™áĘńř–ř•Ą_Ó P/Ëö$eńW1Ç@`ő—î°,˙ZfřZ<%­µ¤—†¶&–*MTu•”˝öNöýˇ ¶jżŕGę`QÉĺűC!,ëľ.3üAm)W¦,)-,KżRîZY%éRĂ‚gŠeáj–KËňŻTŔÂÔ¬€–"¬ůO’ŘŞŰü#5±`݉bÁV\2"ß*Yřşľ„°đ5ý•„±`«=Ya ¶Ř—ŇXwi>6źÔĎÂô|ď„ô´`ٵ`÷ź)'WŞýHI-x§ţ {‘lQ-k׺ţ g|)Y­‹Ů~¤®,˙&a-«ŰR; Đ3Ţ”´l I[ Öü q-ëßR?‹ůŞç|.y-XĎCúÚÚS’&­+ä~¤ÂĽ[°µźÔŘÖžď5Č,˙/•-kę’ázK.×—ŕžÜtľ‘:ܡói|HwY˘­óS» ž©ÖEüÚň…Rď‚k2üAK‰ąô»Ďw˛ă§‚,ű’„—ń‚®‡[AŚ'Şą+>‘?–Š,{—Śl5őQ|*I yď<”ĽŚ‡Šţ Ą \Z^°…±—â§­ćE<&{“ś,*=/ăąbfüšö-E/őRŹ2ŃV¤éĄÚ`ż¶Ô ׌_w*użĘJ×[µlř‘Â^Ć»ůůV<¬xRŇ^ĆË—™ńkIÍmWüšă]ę^Äă˛gÉ{Á–żRßËxľ—âű+ĺŔ_ë±}HâËőBJ~‡Öľ˙ábýq w/­WÖCć îť/•-ˇo­ëĄôχԗ˛™‡Ö—ŞšcŢZYÝ|´žťůĽŹÖł3EÉGëŮ|›żü¤Ä·hý§ë•älĄ*5żXO*Ţč—ëM}żh=ŰS[´žő»˝ŹőěząŢ˝ĚUëăšZ_®g«_z!í/EUń/5WÇĚőlŽ'É©Řjć­őľîŹŔŕš’_®gýNrK€™/(f®gó˝{5ßHŚ|ÄN‘đTţBăW:`°%ŐSů­|ۡ”Ŕȇ¬T/ĺOúC öýYĘo­Ôűr!CEŢCLÁžľż•ßJşÁ–űýHE0Հ˼•R~Bš`j SÜ”ŹşEÂĚoŤĽŢŁüÖHťě•ů­3ĚĚouë,Ą f>,Źg~Ë/¶°6ů´ťj`ć·R\)u0X’9É™Żc‘ŻôÁČçíÔ #~-5ĄČUů-żŢađĄó5ĺ·üâ ‹„ÁÖ.7ĺ·Ľţ±LlnW~ËóŻ…Â”µćç[ůOiĎ$¦(¶™›ň©+?Ç|uťlźja*nŐ>ĺÂä>ôÂĚç3óÝŰR)†™Öý¤d|Ą„ńëµü×C$fľąŹňÓR?J6ĚÓtłóÝ·ŽŘůn?nÔ-ďćBůň Ă\ö_ŁŰ·>ů×Kůîü+"Ň3ź_Ě_Żüű'R­ű-Ęw÷Ô§ĺ»S.±óŹTs?˘™ąs‹鸸źQĚđW n¤$ć~ČeîÚ_ŮÉÜŹ©)ną#ĄŞÔÄć?RNĚýšäĄý«­8ĐlŞąjżČšÚˇýÇ—Ö݇¨f*©·TĹ4ămÚŻ˛6ަć{NíčšąiżL˘tI‹Á~ľK±'űĎZî·5s×ţ[M=1÷b]áa}1÷óÔߣÝŘť ňŁíŘťúkJŚą_řĐÓmJżK‘1÷‹yh?SţM2cşá”_ŢĎěć¦ÝQ‰ĄĄ4ć~h3oťŻ¤šłţ‹+cZص1§Ťnöެ˙şPS­EÚ—ÇÜč-fnĎNÍ÷–s›XíuíĎĺŻ,:ëţIu\ňŐ•–s‹ZÇíĎćßń‘đÜ©KćţlÚ§¤ÇÜ-?檝wŤ7‰ŹąąŢÍË{ď'/íĎćßa’ţÓü6műűy.U_ä|# 2Ëşą©@!I"d†ĹĽUľ°ÄG%)ď—™ ©KžŞ`hÉGç{J‘YńĐ"—|ݦĹȬ­Hv%†ĆäČ ›’]‹áż!UTŚQ=>¤H&_f–cTű+i’Y%RÍ[5%ÖĂ6UdTű{É’ć=tɬPYćíz]źt4'çW%ž6VótuL3ťOţ^ęä’ď,·<™|™§*d|ý’ÓäĎ­Pf]Ď2w×ů\ćĄöŻÔ_Ş0’ż’J™%FÇă«.×gr7»ćWë™aIÎ~©śKľĽ×2ç˛]oať3ą™]ř«ůnڬüUĽ2F–ţĘţ†•9®f¶Řů.v¶Úů®…¶Ü™•ÓÇěr~ůßqËsŻŚ[źŁ·Ť[ ŁxiÜ Í˙ă–čhüIő|×€[öLf—őë]@ă–éh|Ž[§ŁůtÜBĹOŇ>ßŐë?ßĹíV?“‡yţ”IŃÇÇf|ţçżößÉýÍţ•ż“ű‡ßüîŰźý×řÂç×˙÷S¸¤˝îb8äÍ·â†=üú§Ď/~óűűËĎŻűíżüšg˙·ľ~©^Ťi»řţ_ýâź~ů ×ý‹żů‡_~ţSĘ/~úĺ_~ý—8ţňďżç‚çk‘“Xăă‚˙&Żö?ţŹ ˝îeř?}UęK…ř¶.źGúŹyÜ_¬vňřćdľÔۨq„ůëveŻ3ükÇ˝ř¶ęĄń?}űgGÜź˙9«ßPúăOfPSC4<š˙“ŹFŹk«Ç06ăj˙ůČ(Jűz›|ĺN Z˙űmď÷7‰[5•LIă‹ĺőĹ?Ţç¦ýĘźß(+ź®G«őg´şTµŔ"Ťź×*ö«­Gßl?ŁŐŁÚ›źßW¦×ĘŁŻýO˛Ů9*ţm›ÝL´4¦?úľę×"0ËĎlîlÜż@j/îeřóÇö÷łµ*Ż™wđ7ż˙Ý?ţÍoţń?~÷űÇSxžµü{ífđ•†Mřg=×Á,cÓź‡ţą–s±˛íOi–EňóŮîϱťN}ÚŤţçµŰ™mú#×?×z+ţ¤ţnĆŹţţiöó/GÇżm?c?ăQk’NÂ<®™oÖ˘yźôť/OăÂç»~˝&F|đǢ†ç˙ăöS(ţş…őeA˙ď—aWź_üÝľ•o˙`Dendstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 288 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xśť–wTSهϽ7˝P’Š”ĐkhRH ˝H‘.*1 JŔ"6DTpDQ‘¦2(ŕ€ŁC‘±"Š…Q±ëDÔqp–Id­߼yďÍ›ß÷~kź˝ĎÝgď}ÖşüÂLX € ˇXáçĹŤ‹g` đlŕpłłBřF™|ŘŚl™ř˝ş ůű*Ó?ŚÁ˙ź”ąY"1PŚçňřŮ\É8=Wś%·Oɶ4MÎ0JÎ"Y‚2V“sň,[|ö™e9ó2„<ËsÎâeđäÜ'ăŤ9ľŚ‘`çřą2ľ&ctI†@Ćoä±|N6(’Ü.ćsSdl-c’(2‚-ăyŕHÉ_đŇ/XĚĎËĹÎĚZ.$§&\S†Ť“‹áĎĎMç‹ĹĚ07Ť#â1Ř™YárfĎüYym˛";Ř8980m-mľ(Ô]ü›’÷v–^„îDřĂöW~™ °¦eµŮú‡mi]ëP»ý‡Í`/Оľu}qş|^RÄâ,g+«ÜÜ\Kźk)/čďúźC_|ĎRľÝďĺaxó“8’t1C^7nfz¦DÄČÎâpů 柇řţuü$ľ/”ED˦L L–µ[Č™B†@řźšřĂţ¤Ůą–‰ÚřĐ–XĄ!@~(* {d+Đď} ĆGů͋љťűĎ‚ţ}W¸LţČ$ŽcGD2¸QÎěšüZ4 E@ę@čŔ¶Ŕ¸ŕA(q`1ŕ‚D €µ ”‚­`'¨u 46ptcŕ48.Ë`ÜR0ž€)đ Ě@„…ČR‡t CȲ…XäCP”%CBH@ë R¨ކęˇfč[č(tş C· Qhúz#0 ¦ÁZ°lł`O8Ž„ÁÉđ28.‚·Ŕ•p|î„OĂ—ŕX ?§€:˘‹0ÂFB‘x$ !«¤i@Ú¤ąŠH‘§Č[EE1PL” Ę…⢖ˇVˇ6ŁŞQPť¨>ÔUÔ(j őMFk˘ÍŃÎčt,:ť‹.FW ›Đčłčô8úˇcŚ1ŽL&łłłÓŽ9…ĆŚa¦±X¬:ÖëŠ Ĺr°bl1¶ {{{;Ž}#âtp¶8_\ˇ8áú"ăEy‹.,ÖXśľřřĹ%ś%Gщ1‰-‰ď9ˇśÎôŇ€ĄµK§¸lî.îžoo’ďĘ/çO$ą&•'=JvMŢž<™âžR‘ňTŔT ž§ú§ÖĄľN MŰźö)=&˝=—‘qTH¦ ű2µ3ó2‡łĚłŠł¤Ëś—í\6% 5eCŮ‹˛»Ĺ4ŮĎÔ€ÄD˛^2šă–S“ó&7:÷Hžrž0o`ąŮňMË'ň}óż^ZÁ]Ń[ [°¶`tĄçĘúUĐŞĄ«zWëŻ.Z=ľĆo͵„µik(´.,/|ą.f]O‘VŃš˘±ő~ë[‹ŠEĹ76¸l¨ŰÚ(Ř8¸iMKx%K­K+Jßoćnľř•ÍW•_}Ú’´e°ĚˇlĎVĚVáÖëŰÜ·(W.Ď/۲˝scGÉŽ—;—ěĽPaWQ·‹°K˛KZ\Ů]ePµµę}uJőHŤWM{­fí¦Ú×»y»ŻěńŘÓV§UWZ÷nŻ`ďÍzżúÎنŠ}}9ű6F7öÍúşąIŁ©´éĂ~á~é}ÍŽÍÍ-š-e­p«¤uň`ÂÁËßxÓÝĆl«o§·—‡$‡›říőĂA‡{ʰ޴}gř]mµŁ¤ę\Ţ9Ő•Ň%íŽë>x´·ÇĄ§ă{Ëď÷Ó=Vs\ĺx٠‰˘źNćźś>•uęééäÓc˝Kz=s­/ĽođlĐŮóç|Ďťé÷ě?yŢőü± ÎŽ^d]ěşäp©sŔ~ ăű:;‡‡ş/;]îž7|âŠű•ÓW˝Żž»píŇČü‘áëQ×oŢH¸!˝É»ůčVú­ç·snĎÜYs}·äžŇ˝Šűš÷~4ý±]ę =>ę=:đ`Á;cܱ'?e˙ô~Ľč!ůaĹ„ÎDó#ŰGÇ&}'/?^řxüIÖ“™§Ĺ?+˙\űĚäŮwżxü20;5ţ\ôüÓŻ›_¨żŘ˙ŇîeďtŘôýWŻf^—ĽQsŕ-ëm˙»w3ąď±ď+?~čůôńî§ŚOź~÷„óűendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol >> endobj xref 0 12 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000011230 00000 n 0000011313 00000 n 0000011436 00000 n 0000011469 00000 n 0000000213 00000 n 0000000293 00000 n 0000014164 00000 n 0000014258 00000 n 0000014355 00000 n trailer << /Size 12 /Info 1 0 R /Root 2 0 R >> startxref 14433 %%EOF ordinal/vignettes/static_figs/fig-figSca.pdf0000755000175100001440000003474613633002525020701 0ustar hornikusers%PDF-1.4 %âăĎÓ\r 1 0 obj << /CreationDate (D:20120606102000) /ModDate (D:20120606102000) /Title (R Graphics Output) /Producer (R 2.15.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 10934 /Filter /FlateDecode >> stream xśµťMŻ,9rž÷÷Wä˛{á«ä7éĄŰŔ6`O† h!ŹěĹŕ´ iúűŽ÷#Ş˛ĆQ÷Ŕ^ô9ýśŞ"“™Ś`0oÝrýć*×ďŻţö_őßUżď}µň}î«îú˝ö€ňýî׿üĎëż_˙ôíŻţđßţÓ__óŰo÷÷űľŻçĎßţ͉ż®qýë·żűűëľţń[ą~˙ýţ[Á®˙ü­´ď­]˝}ßýú4i\_ =I Ôż—J:˘¶AçÍNŞ˘ř+¨Ć÷ÂVÎuöw–h˛żsDńžŢżß4ż×Bj˘ľHC´‰­,ŚtDu‚JŤJj˘µIleă.‚–¨±•z‹ű«U´Ů_ĺz-QăU×#šĽęVE›­4|®Ţ¸ Đuö׎hňŞ{^uÇuÖň˝đŞűu^ő¸E‹­Ś&:ěoLPLö7ލóŞg-^őd ÷tD•­¬*ěoůť›ýĹ} Š{ΫŢUÔxŐś=AWÍů´ŮĘáu<ĐĹéO‘4©‹âó ö7ńä‚JőBš˘ÉVřü‚böŘĘÂ_A[Ô'¨5QŚł?•őýlžĂĆçAS4Řß(˘ĹţtŻćiĐĽE•W­»{ľ^őňk›­đ~¶# Ú·¨±ż=E“W}ŠhóŞyĎÂŔç÷»Š`ŤSö_ŃAśóAńyžC«íAu`Ťó{+"XăÔť‚5NĽ#¨Ń'橳?Ž=h±?άÖiŤSs)Ö8=ÚNkśš/ŤłÄwŘvĆ7pM}Éú`Ťë{ąE°Ć%»m“Ö¸<˘Ik\˛żĆk ę·(<)ł Ĺç;Hcŕ{‚fÁ—, č°=ŁMk\h‹ÔŮýYĐŠ«ŢňRA°ĆŤ~‚­qă' Ö¸}ť‡Ö¸1źżľőO5łtD°Ć­»kܲĆ^hŤ[WÔŘĘ1ÁłŮQPŘhP!UZă‘uÁŹüR¬ńčąm¶ÂY~žý`̤°™ >Ű XŻ‚hďZ Ć-›–Ź ˘†_› zSyť őޱ2éN <ă Î3ŮaĐę˘°Ć ®U°„⺂٭y ÍÚ zÍĹ ÎyĚ· R Ö4›(F´üÎÍV¸ţáGŐă۸úQ5?ń¬6†çQ@ôěx ¤űy`kAŃżUÖ;ý5ŮîVńůĹŚMţLwd4Íň¸Â°Ć ÎkŚš­¬#ŠUcxeĆČ⪽nb,ħ˘«˘/ k^Wp… ´`G¸¦ÄH×ý ­Ě¸Š Ş~gĚÓ1Üf‡•Í" k ⼠Ď>ěů×1eUń×đkA´#´6@|~ř|Í- k â ‰ßa‡cÉRő‰ Ή K®lÁă'gŢłA»ÂÇVÄ2č!‚¸ᯠÔMńtâç4Ĺ˝‹źŰÖ8ŽÖżřO ~Ö"Š™?»)ž#~VQĚľřąqťó†5NŰXükŚźôŠń;îţ¶DaŤú[PAOřŰ-Š÷LŰJüŽ8+~2~‰ßaOń“sV´ŤwlQXcüäâwXɬňułáš‚¸ŠEś5«(¬1# ŠOńIŻkŚżq~Ĺ=˘ŤĹ˝ šKĎxŮ»­k\Žçcżĺ:(¬1ž=(zZžk˘§ĺX1(ćⲗ kÄű·(,ďçř~/Î!RÜ» ĆAqďÖ’­Äď¸Âµ4{Ö†5.G%AaŤA´đ °ĆřIżĂ×ÖJąĽjĆ~gáC6şŽ¬qÓCŕE÷ď8˘čĆ}ËúwumŻľAgm{Ť ¸#ń“+^ükŚź\ăbËÖ¸éIHq˝Ű~"~Gś…Mí…ź´€ÍŐmWŤ=(îänšÉń;¬1~rŐŽßaŤŰkÜî'ţVD1űâ'WĘÍ]ĚöľjXăö>'(¬qwĹ AaŤŰkŐf|Žżńť÷gŰl®=řŰŬݎ¨ăwŘ!ţĆëdüŠż5QŘaü¤ĎŠßeŕoCv¸—V‹˝a‡{iW°%nĎ‚Í'?›_ kÄßřÚÁJ¤Ďřß}üąQďăţ¬q;®;7¬qůĂčëÜŠăwXIü¤ď9ö‹w Qx2ĽăâŻx‡ßÖwđťÖÄ%(fXăČĂhčEŽAqőń“Vuh÷x˙ĹďăčéđůăýE3ó8^:Ü㟦őý0Ž â,8ÜőâÓ¦°™ÓtĎ΀5ž.{ k<]s"(â¬ÓµŞť‰}ĽźŠ÷ď„bŢÄűu-Ö–y_¸ ĺ"Šys†"« 7gČ/z fUÎĆĽ9S~0(žă™ZIźĆ·aŤÇ»łs7éHá9Ďt›Öx<#ÂŹ÷UĺľaBÇ[)`ŘăYZńđÎҢŚXëŘo•»Ŕ$ŔĂ&ăşĘm Ł<Ţ•»Â*Źg40śC § 0z<ŽŁ€a4ár7<©łłß†izěa›ç8‡t3xŔ QGŚ|ĎŃÓ†s9'/ŁĂ>qż†1 4ĐðPÜżfělŠ8Ůď:ƸÝç8­vOX)îv7Ć„ÂTěć˘AŢć0U>˝ź¬ĽUp8vň4Çô7µ·1 ÉĂ“†Ďó6µ×»y«?n!ÁŁĂxÉÝʆĽĚ[ăáś.ĺĆ”ÓG›úçüOőŻ{|4z÷R¸Č‡ą·Ožçóýg<ąÂđíW ěq=Ü~=®·Á°ßă ®Ď0µ7Şyů~ęóLY’‡ąi<˝‡źĎ2o?µÇÍźç27ő_‹yŞMăÂp„óEýsŁDnć®é6Ť°yÇ}@ý‘-e!žĂĚmĆ®i>Ś‹Ó|LăˇĹt]( ´ŤťMŐÄĹ~‹đ`™8NOeôĘ—cŁßÓhŁçeÔŰFݱÚŮžź•ň8Ln96…Ô*ťŤŇĂ•yřÖŰ8é·vľkŠłBĄrQ‚ ÜĆNŮ›qŇ_Ö|őĐ_şŁFŁźJÎĂčŹóbŔ¸á‡ŹFxčë5Łj‡Ĺ¶fôözţ•a,– ˝™«N hĺć挼WĚ^žáą‰d+*Mµ:ń8ŽsŻŔĆOSůV®xë6n.Žľíééö:q˙O&ĺ'WŮ“˙(Y·Wëq±Ô4'Ř‘wŐĘľŤ‡‚Ľ)2ŻŚ4E;C?”Ă5»ÚvANń˝j´±ă 0B@„1݆¨µ»FxłŤXąď<9)\şÓ©F,…¨Io®XúNşđŔĆČLg)HĂ24ÓÓo<˙ŮΔÖđ©}|hL,ŁAťĽ´ćppnŁâA żuóŢůYĆÁ{ĺg;î?‚Î|5¬/Đý2•ŽvcY_ó€9ďi'Ű—Ţ3ÇË­q ž~`ÜŇ=ň^MLÎí §´…Ř0Pţ/°1ż§q0ž_ůćÍ€^η1*ŢÝ1K`\¶Ű8ą‡Đ4Cz–›-tŤvËŘąŃlśÜŤh• ŚU›vÔéŤwőyTg˘۠۸¸ŇEv¦%·Ą3&Ţ·}µ…۬cŚHmçjŃ™bÜ·ÝHŻŢ˝ÉA†9ŻcŹ„lm6]MfäŔ¸xě)»1ć*6śÓµ¶ýłаU˝ŤŤ;Xą#­•wŮżµňn 4˛śĆ ”ŁĐ±ČšŽţtľ±†C6¤nąýÖ|ÖůC b+,do öń»+·üZ¸‘éçž_nÉ}nú}7ł_-ď“+H,,ă`žˇăfşÂǝ̯¬ô9ť1ăŞ^Đ;3,«:Úí\jWqŞ,řrN TKńE"×˝€şH$´™lчŚöa^ćăŮ­ŰG–Čç2żŁ…©j&x4Ż’ç±g@JW‰˘i sžŰŹ[içąmÝ®xn[wŕ`rJOy]ć¸äiĺ łrs9¬Vyú`¸™W“g|˛s:Řl̬µ|5®I»|ő0CçĎrAś#?Ës¬9˛_OÍaŹx”Ô5/¦D»§72ÁĚ.*„\L/ĘF 3ײÁĐb: ĚhĘÉ ŐĚć9_fF}~śŐ$ÇąQů %z‘TĺeLFxȸNcc:V“ré™Ĺ·}ň`‰\}¶0Cę| 0 j:‰śĚ$ë2öe*Y—=ć’µ"­Ëd˛ÂM\ĽrŇŰxľÖÝŔŔłŮ‰1uGną—ňŕB(9.¬Ě§ĎDĄŢ{˘sďB®cgS\MFrHę2‰ď«¸iĂç‚E3j¬ĽĎ<9E1yü Ç=yz9¦#äÉőqLÇ “«'N'¦qňBN5§bÓŃćäÁÁö “®xŚ/÷¸8ŕŘĆĂÓ?…s†˝tăŕyŤćUŕâŤÖŁĹ˝ŔČé ŹÁ=”ĹťÍČČ ‰a6ĄŮľđڬŘX<€É7ăÔiÓ6n7ićŔňÔJŽq1Ťg’ŻN6uç«:(“Ź]Í'ekuTć!4ó¨ö„JúŽ\ťáóŮ”Ś.ÇeąX#ďËSľŁ¦X†0rí^̎⩲ÔÁ™pńĽPëŃb‡lËSł’·ŽiŔ‘Î|18śA-‹i—q;řÔb:rW»č?ÇťýňôydT°xÄű••Öů ä^Ć®‚©f\‚oݤ9ű¨« YˇĘ«b,őŇ"‚Ľk˝”§D’„Ĺ^˛dTTí5Ť*ÓşpvVŤ©ßűę.6Ö©Éç ˇt^ĹhŔ­J5ÖY!ŃĄRµfllJuWJóuÇüŔŁę8Ő߬8G쪲ŰĆąßEw‡MuuTiÎ]®¨zD×ňU$¶a<çUXďFsîňĎŔQ^őŔĄRC}¶»*±VăŁ,8TݸŤ[卺9ĚŐô®0Řú«¨ÚÄűUśxë2¦«ďalçU~ śďÚL ĚŮa@˝o´]ĺ Ó¸Ţő Ŕ3_Ţ hÖ•žběűUf \ýUZ‘}fż{Q©Ř侀CŬ͸TÍĘ–Qň:·±±)U2ö»–qł_NŃŠ¬3‡@ßlÂjĆÉ!¨`2p«)uTą4W"áĚ~ç6Na.ăá4Ű ·śÝG›Ŕ®¦šq±_•tŢmä,WŢĆÁ!¨´ĐúzÓzT‘ffS2śÂRÉŢ\Ü8ŘďĆ]ČşĂŢleeş¤Ř%©Ó5ĹŁ·šŇE.W»šuą¬ř…Ş+îǨÂblŮ®,v]ě¦9?PµĹŞÝ,<ę-Kj–<±s˝‡ Ű<獕U5ŞwŽú‹C`PT+Kµ»K€íţŔÁ!¨8p×V–6şŘĆNA.¨2úĆFsnÚzŰůŔ9?đ¨_ŢŤÚmÎ/”9«Šąv›ó eÎĆÁEÄĹhŔ~>pişWÓćüB™ó eέeÎĆĹđ­~ ĚY.7PćlÜ6çĘśë1Îöű<đŘś_(sViq=6çĘś…Ť§tOěęweÎ/”9‹Íů…2ç.őËÚXXóÄz>PćüB™ł±Ůś_(sÖňÔčOž(Ť€1E/”9żPćüB™łj´–'J)đB™ó eÎĆis~a_¨EÄ(˝Ŕ«†ĐŚ2çĘśŤŰćüB™ó ÇúŔÝxlÎ/”9żPćüB™łÂ€ÎĂ‚'öűeÎ/”9‹Íů…˝ŕ*xžýV›ó eÎ/”9›Íů…uŕ踟Cč6gƱU±ÓeÎ/”9%'x`[hsN´9 gšsb/8÷žgż+Í9±Ď\őĎł©íEä…Ł|ŕzá¤9'Öóc|ŕ~ô;¤0x`ë8ďÜŹ!¨fú‰mŕxCPýó{ű@›óm´9 ›cÂ*&|ˇÍYŘÓśmΉŁ~ŕzö;ľP1á mΉ6gáLsNlógýŔýÂJsNě÷ÎůçŮÔvLřÂ>>p•<Ď!ś4çÄ~>p=úť·cÂÖýŁŕ~ a–4çÄÖ>pśÜŹ!ĚšćśŘÖÎöűŮTsLřÂ^?pî<Ď!ô4çÄ>?pµ<Ď~Gšsâ(¸žCiΉíţŔ1?p?‡°Ňś[˙Ŕyŕ~ö»ľ°ťśăĎs'Í9±·\÷žÇt&őħ9ŻűĂśWů0çUľp´|šóŞćĽę‡9ŻúaÎ()~öŰľđiΫ}ójćĽú‡9#Ă\>pľűý­5—ÎĚĄčŇřeŐ%ń-»$ę.ř‰Q­ĘŚęŤ”Ć•¬#•ö’¨Ó'VJ=…RŰBÉ/ËÎ3^FTO\nJicIí•éjÖH=phĘś1˘*ŻBFTDe(a OîWÉNVGíĺ”$#*˘RV¨V_Îň[Mi×ÎCt˘Ĺ™]ýJçČŠ¨L\0Ń̢!8y€ę‰ËMiŰ ĚĚ«vpÁDíTŕ‚ť—ý˛.“¨0Q±*Śh1ćPżJ‡0˘"ň"Q­ŐlB 2‡†Ŕžô™D­ĎpÁ%kC¤Đ$Zľ95JŁI´łhLJĄI´„sş©#<č×%Wj«Ĺ{; Ĺ'I´ŞĄŰr;‰5‰oµ¦3Ü_–kŮ/#* Ź#$Ř$V!Š ·ëÂ$Ů$RÉÇŠh™fSżŇ#2˘"ž+e›@Zżt›ÄrĄp“h­ćTSÜšHşIdGڍhv ˇZŮ95„s A Ă&sö1śÄqĄ‚“Č–»ĚŮEsŇp%Łě2ç­„‡TśD¶ĚŠ8®ÔqוBN˘5ź[C`6HRNb»RËI´´sŞ_)6QßrNY¤ž“h çÔRßyÔ=’$ť%˦¤éŇÉHÔI¬WŞ:‰oY'q^©ë$î+…ť<9y+;‰íJi'q\©í$®+ĹťD*‹ĚŮĄ^’wű•úNâĽRŕI´n“ć|”ľ•ēخÔxç•"O"ő M‹…ť•RçIśW =‰ül—9ű PRO˘u KMqzKěIä53˘â±Ň[îI|ë=‰oÁ'STŠOb»RňY¤€HÍ'‘-™ł1:u#ö+eźÄ·îł¤TBÂOb»RůY˛vOŇOŕň›Ź†ŔHâOâĽRýI´ŕs©_éiQ)‚dDE3OIi9ţ6iJ‰|s•9ű(RŞR°§¬´‹‹tĄ@ş KKÖˇKYJ|KKý­-Ž·¸”x®T—ňč~^)/rzK_Ę“ürĄŔÔű©0ru–Ä´¤"LSűßWŠL‰Ö•Ňś-E”Ě(Eę’9[@&ˇ)ń\©4‹RŹúŐ3Ú2çaYę–9ű»H¤6%ZzÔ”†p´X-ÁiI=š§@® ’ś÷•šS ä›·ĚŮĄ"RťJvZRż&Ý) î+…§ÄsĄňH‡,é)Ëć•ÚÓr,ż–ř´¤&CęSA°Ł&s^Vr6™óRH,*G‘R –ă=»$¨@NiPY@1®ˇéú¤Bro%*Ë+Ś4goL$Deµ…őĄ ĎÖA–¤¨Ŕn¤9;Ř–•ĄVś5Ĺ WrTŕ2Nő»-]ELŠ)RYÇń–¤–”ŇI“ZRJ'QjI)ťT©Ŕţ–Ą˛čĂJTšł5F¦yëY¸$$Ą©%ĹLҦ˘čCrMŠSk*٤N­)ŚÓšĆúc.ű TkŞľ¤Peu‰1|jźU?`KcYŞÄ˘źnžŤ|Rŕş1ž™÷’Özgž4­, Şf|!Ý=S'JU+XYL}uC©[퓼şV5óA{Y·(]++‹–y˛Ęŕ¤ke©ŃC× ©[ĄągŇQşVÖ"mó®d?nwëmżk]+XU‡Ňµ˛Zéˇk·‡®KFKN•-üAmöŹŇ‚µ^HIK~HiYÚÍ_kËńQLKNů,üAu•Żĺ´,$˝ÍKíÉ$¨ŻŘ6ő//I-x§âvk<–S(D~¨jQmŞřH˛ÚZs}’®–Ą«©•EüZóŰ}%–×|ţ ć·řJ[[k~sŻÄµäeîęż?äµä|ńkÍ/@Ŕ–ś’ZřÚó,ž[˛d¤ÔŘ’ŹąŞ­ORŮÖęo)łĚĽSX{k<şźÚ’·y¨=)a$µ%?´¶äc¦?ČőWj[rľźţ żBzŰZ’ZÄŻ5×k)nÉËL0Ľ~JsËňáj¦?đ7řZuKÖýä‰1ů«úo©ĂEüZť'łň–¬ë?ň/Eđ‘?ČřAâ[Ö/ßć­ţ{*joŤGóAú[ňC€Kć­ńh=‘—üĐŕ~đt˙Ű|4žžB۲?ą÷O^jOń¸”¸nŚ_źÜĎ'Żńä.đjżË {É·y«˝šjݢö´>IŰËxqšżZ8ŰĺJŽgČ””(ů'c-đeü:ĚŽ_HâËxx›żĘ_Iäk˝ĐWŞ|_sU{ĘϨ|ĐrŁŻú2~W˙[ţ żˇH•@ÜL3ýÁťUy[ţŕNÁňŃz•ß'ą/÷#Ç<µż¨ÉGű‹—·hżR’»Ú»“§ö_R&KôËý“¸h?›_Ş'ŮoUŤßWę~ą?WígSś.ĺ/÷wÉĂűżŰĽÔżŻŻi?›u©ążLö~ÖšÖ¦üÖNŮjíg·Ůű٧űádďg­ąź-©óíjďNžÚďźT ďĎSę[´?wńăÔ~6«=%ćţ˙6í÷ő<%f>!ĺżĂů†i^ęß׳•ßšo}0ó[ůťfR3żQĚ[ůĹĂŇ3_˛ÍMůßźŁüÖLÝóQ~k¦ÖőV~Ë˙"‚…ÁĚß3Ö«âomµ4ů )K‹ň[ůď9HĚüQj‡§ňAÖôĺ·ňß›>ůŞmFüZň߸BĽaćżTŤÚ”ßęVoę”ů´c^jĎŠc.<y¦l¸)ż¦’E …™ż»ÍĚo5WJ*Ě|`J‡™ßJ©©Äµ¤nSjaćŐŢT~ËűIë…)XMýđTţń% >ʧúyP2Ě|hJ»ňźó!ʇjůŐ‡lůŘ wµW–y©=ë™™Xg~·š™ßň}X;Ě|ń6/ĺ‡-r˝ĺJjBoůWŮX?Ě|uꉷňÓ÷CAĚüvj†ťď¶:ąČÜ).ňwJp©"[˘Z•ßşł˙ŞüÖ­ý”…ÄĽlU,łĂ:)1ó˙)^:?p˙Mç1'Á¬¨[1K91ĎŞţŕ¶?uâ¶Ţ®"´˘Źĺ¤†xč*1d·ó•’cž‡J‚Üu>ëü…EÇ+«”Ç`­’ÓŤ6sŐYóIµ1üÁť_ ő1O›uýKçł©—ţ,ű™g×ÝĽux­ů! 2Oľ‹ą©=ůk‰yŚţP!sIe1Ďgk>źŁóŮš˙ö…Č\††ů¨=]ʤČ\¶šą«@đ#WcĄ™ËŻOrdóP!îŹÉ,]@ąę|¶Xž/I2 šdÖE óV5CIˇń­öTű/Y2—ńd×dX8Ѳ(Cë«”É5żgŘŇäšßŰkm2 @’ŹÚÓ|–:ąć÷îZžě°ă+őÉ5ż·ŮeÖ¦Ą§ÉŻÖµDąä—D[ŁĚ±$5Çń¬UĘ,›I*”iÉK•2ľ>ÉjP3QÍMíÝÉCuF'y»ŕç!Vf=ĐC­\ňkv-WvX÷•zeńyI°\ŽV,—üć]K–YŘ´ĚGµKZŻ$ZfYÔ6»Ëň•˘2ŢTŐH·Ě°T*ŘúŞÁz(—Ć6ł«°´žö–eXľŢ¦ęż•×+­ÍY^ß»Ä6ůméÖ/“osSŰI}óPIśîŻ$Ě ĂŐź7ůĄż1ł n›§jŮäď$c&?tĚ%żŘBfÖÜuóT˙úŞI™YŔ§öĄĽ93Ż_Ň›3ňúĄ˝9>µś™Ĺjo«ľ×_ŐiA3ů6/UúţK€“ß=lM3ë—y¨=}GTÍ%ż7߲fo“ľR×ĚšĘež*őÔz+e3Yź—'żŁßÚfÖs.óTą§ľĹEęfnŰ$’çäżµ'}3kIŹyŞäSţD gnŐ_SÉowü,Ť3ą—*W=>irN~]ŹdÎäŰpýôż®ÂĚáýú!†CŢüVÜXŹúůúáw˙űëĽ~úý·˙đ[˙·>~«x•i»řüßýđŻ?^1ôţá_~Ľţ]Üł~ţńﯟ~ćđ/˙ţ’ ž®GVL"˘†á‚˙!Żö˙˙?*\ôuü7,~ľjÄĂŕV!>­ËEÄávôF˙cŻÂÖ–#Ž%Ëë3Ţa~żăŹ®ěŁ…?ő~DăŮ~yŻ,ú­ÉX™^ʱöżČfË_`ł›ű ÂĎ— MÎŔJăzżlzľ.]Nľ.zĽÎtâĘ×MŹ×˙x^˙ß#ř%.šG,­ńä”.öo ‡}ýđď_žőßvÔúg8ߍüŃ$˙łź=ĚŃ<>[ůgQ…{úţpűÖ¶âńáţ+–¦ĘŁźÇ‡ÇkÖ}ű?_¦Ž™endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 288 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xśť–wTSهϽ7˝P’Š”ĐkhRH ˝H‘.*1 JŔ"6DTpDQ‘¦2(ŕ€ŁC‘±"Š…Q±ëDÔqp–Id­߼yďÍ›ß÷~kź˝ĎÝgď}ÖşüÂLX € ˇXáçĹŤ‹g` đlŕpłłBřF™|ŘŚl™ř˝ş ůű*Ó?ŚÁ˙ź”ąY"1PŚçňřŮ\É8=Wś%·Oɶ4MÎ0JÎ"Y‚2V“sň,[|ö™e9ó2„<ËsÎâeđäÜ'ăŤ9ľŚ‘`çřą2ľ&ctI†@Ćoä±|N6(’Ü.ćsSdl-c’(2‚-ăyŕHÉ_đŇ/XĚĎËĹÎĚZ.$§&\S†Ť“‹áĎĎMç‹ĹĚ07Ť#â1Ř™YárfĎüYym˛";Ř8980m-mľ(Ô]ü›’÷v–^„îDřĂöW~™ °¦eµŮú‡mi]ëP»ý‡Í`/Оľu}qş|^RÄâ,g+«ÜÜ\Kźk)/čďúźC_|ĎRľÝďĺaxó“8’t1C^7nfz¦DÄČÎâpů 柇řţuü$ľ/”ED˦L L–µ[Č™B†@řźšřĂţ¤Ůą–‰ÚřĐ–XĄ!@~(* {d+Đď} ĆGů͋љťűĎ‚ţ}W¸LţČ$ŽcGD2¸QÎěšüZ4 E@ę@čŔ¶Ŕ¸ŕA(q`1ŕ‚D €µ ”‚­`'¨u 46ptcŕ48.Ë`ÜR0ž€)đ Ě@„…ČR‡t CȲ…XäCP”%CBH@ë R¨ކęˇfč[č(tş C· Qhúz#0 ¦ÁZ°lł`O8Ž„ÁÉđ28.‚·Ŕ•p|î„OĂ—ŕX ?§€:˘‹0ÂFB‘x$ !«¤i@Ú¤ąŠH‘§Č[EE1PL” Ę…⢖ˇVˇ6ŁŞQPť¨>ÔUÔ(j őMFk˘ÍŃÎčt,:ť‹.FW ›Đčłčô8úˇcŚ1ŽL&łłłÓŽ9…ĆŚa¦±X¬:ÖëŠ Ĺr°bl1¶ {{{;Ž}#âtp¶8_\ˇ8áú"ăEy‹.,ÖXśľřřĹ%ś%Gщ1‰-‰ď9ˇśÎôŇ€ĄµK§¸lî.îžoo’ďĘ/çO$ą&•'=JvMŢž<™âžR‘ňTŔT ž§ú§ÖĄľN MŰźö)=&˝=—‘qTH¦ ű2µ3ó2‡łĚłŠł¤Ëś—í\6% 5eCŮ‹˛»Ĺ4ŮĎÔ€ÄD˛^2šă–S“ó&7:÷Hžrž0o`ąŮňMË'ň}óż^ZÁ]Ń[ [°¶`tĄçĘúUĐŞĄ«zWëŻ.Z=ľĆo͵„µik(´.,/|ą.f]O‘VŃš˘±ő~ë[‹ŠEĹ76¸l¨ŰÚ(Ř8¸iMKx%K­K+Jßoćnľř•ÍW•_}Ú’´e°ĚˇlĎVĚVáÖëŰÜ·(W.Ď/۲˝scGÉŽ—;—ěĽPaWQ·‹°K˛KZ\Ů]ePµµę}uJőHŤWM{­fí¦Ú×»y»ŻěńŘÓV§UWZ÷nŻ`ďÍzżúÎنŠ}}9ű6F7öÍúşąIŁ©´éĂ~á~é}ÍŽÍÍ-š-e­p«¤uň`ÂÁËßxÓÝĆl«o§·—‡$‡›říőĂA‡{ʰ޴}gř]mµŁ¤ę\Ţ9Ő•Ň%íŽë>x´·ÇĄ§ă{Ëď÷Ó=Vs\ĺx٠‰˘źNćźś>•uęééäÓc˝Kz=s­/ĽođlĐŮóç|Ďťé÷ě?yŢőü± ÎŽ^d]ěşäp©sŔ~ ăű:;‡‡ş/;]îž7|âŠű•ÓW˝Żž»píŇČü‘áëQ×oŢH¸!˝É»ůčVú­ç·snĎÜYs}·äžŇ˝Šűš÷~4ý±]ę =>ę=:đ`Á;cܱ'?e˙ô~Ľč!ůaĹ„ÎDó#ŰGÇ&}'/?^řxüIÖ“™§Ĺ?+˙\űĚäŮwżxü20;5ţ\ôüÓŻ›_¨żŘ˙ŇîeďtŘôýWŻf^—ĽQsŕ-ëm˙»w3ąď±ď+?~čůôńî§ŚOź~÷„óűendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol >> endobj xref 0 12 0000000000 65535 f 0000000021 00000 n 0000000164 00000 n 0000011300 00000 n 0000011383 00000 n 0000011506 00000 n 0000011539 00000 n 0000000213 00000 n 0000000293 00000 n 0000014234 00000 n 0000014328 00000 n 0000014425 00000 n trailer << /Size 12 /Info 1 0 R /Root 2 0 R >> startxref 14503 %%EOF ordinal/vignettes/clmm2_tutorial.Rnw0000644000175100001440000004375212431104052017360 0ustar hornikusers\documentclass[a4paper]{article} \usepackage{amsmath}%the AMS math extension of LaTeX. \usepackage{amssymb}%the extended AMS math symbols. %% \usepackage{amsthm} \usepackage{bm}%Use 'bm.sty' to get `bold math' symbols \usepackage{natbib} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{Sweave} \usepackage{url} \usepackage{float}%Use `float.sty' \usepackage[left=3.5cm,right=3.5cm]{geometry} \usepackage{algorithmic} \usepackage[amsmath,thmmarks,standard,thref]{ntheorem} %%\VignetteIndexEntry{clmm2 tutorial} %%\VignetteDepends{ordinal, xtable} \title{A Tutorial on fitting Cumulative Link Mixed Models with \texttt{clmm2} from the \textsf{ordinal} Package} \author{Rune Haubo B Christensen} %% \numberwithin{equation}{section} \setlength{\parskip}{2mm}%.8\baselineskip} \setlength{\parindent}{0in} %% \DefineVerbatimEnvironment{Sinput}{Verbatim}%{} %% {fontshape=sl, xleftmargin=1em} %% \DefineVerbatimEnvironment{Soutput}{Verbatim}%{} %% {xleftmargin=1em} %% \DefineVerbatimEnvironment{Scode}{Verbatim}%{} %% {fontshape=sl, xleftmargin=1em} \fvset{listparameters={\setlength{\topsep}{0pt}}} %% \fvset{listparameters={\setlength{\botsep}{0pt}}} \renewenvironment{Schunk}{\vspace{-1mm}}{\vspace{-1mm}} %RE-DEFINE marginpar \setlength{\marginparwidth}{1in} \let\oldmarginpar\marginpar \renewcommand\marginpar[1]{\oldmarginpar[\-\raggedleft\tiny #1]% {\tiny #1}} %uncomment to _HIDE_MARGINPAR_: %\renewcommand\marginpar[1]{} \newcommand{\var}{\textup{var}} \newcommand{\I}{\mathcal{I}} \newcommand{\bta}{\bm \theta} \newcommand{\ta}{\theta} \newcommand{\tah}{\hat \theta} \newcommand{\di}{~\textup{d}} \newcommand{\td}{\textup{d}} \newcommand{\Si}{\Sigma} \newcommand{\si}{\sigma} \newcommand{\bpi}{\bm \pi} \newcommand{\bmeta}{\bm \eta} \newcommand{\tdots}{\hspace{10mm} \texttt{....}} \newcommand{\FL}[1]{\fvset{firstline= #1}} \newcommand{\LL}[1]{\fvset{lastline= #1}} \newcommand{\s}{\square} \newcommand{\bs}{\blacksquare} % figurer bagerst i artikel %% \usepackage[tablesfirst, nolists]{endfloat} %% \renewcommand{\efloatseparator}{\vspace{.5cm}} \theoremstyle{plain} %% {break} \theoremseparator{:} \theoremsymbol{{\tiny $\square$}} %%\theoremstyle{plain} \theorembodyfont{\small} \theoremindent5mm \renewtheorem{example}{Example} %% \newtheoremstyle{example}{\topsep}{\topsep}% %% {}% Body font %% {}% Indent amount (empty = no indent, \parindent = para indent) %% {\bfseries}% Thm head font %% {}% Punctuation after thm head %% {\newline}% Space after thm head (\newline = linebreak) %% {\thmname{#1}\thmnumber{ #2}\thmnote{ #3}}% Thm head spec %% %% \theoremstyle{example} %% %% \newtheorem{example}{Example}[subsection] %% \newtheorem{example}{Example}[section] \usepackage{lineno} % \linenumbers \newcommand*\patchAmsMathEnvironmentForLineno[1]{% \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname \renewenvironment{#1}% {\linenomath\csname old#1\endcsname}% {\csname oldend#1\endcsname\endlinenomath}}% \newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{% \patchAmsMathEnvironmentForLineno{#1}% \patchAmsMathEnvironmentForLineno{#1*}}% \AtBeginDocument{% \patchBothAmsMathEnvironmentsForLineno{equation}% \patchBothAmsMathEnvironmentsForLineno{align}% \patchBothAmsMathEnvironmentsForLineno{flalign}% \patchBothAmsMathEnvironmentsForLineno{alignat}% \patchBothAmsMathEnvironmentsForLineno{gather}% \patchBothAmsMathEnvironmentsForLineno{multline}% } \begin{document} \bibliographystyle{chicago} \maketitle \begin{abstract} It is shown by example how a cumulative link mixed model is fitted with the \texttt{clmm2} function in package \textsf{ordinal}. Model interpretation and inference is briefly discussed. A tutorial for the more recent \texttt{clmm} function is work in progress. \end{abstract} %% \newpage %% \tableofcontents %% \newpage \SweaveOpts{echo=TRUE, results=verb, width=4.5, height=4.5} \SweaveOpts{prefix.string=figs} \fvset{listparameters={\setlength{\topsep}{0pt}}, gobble=0, fontsize=\small} %% \fvset{gobble=0, fontsize=\small} \setkeys{Gin}{width=.49\textwidth} <>= ## Load common packages, functions and set settings: library(ordinal) library(xtable) ## RUN <- FALSE #redo computations and write .RData files ## Change options: op <- options() ## To be able to reset settings options("digits" = 7) options(help_type = "html") ## options("width" = 75) options("SweaveHooks" = list(fig=function() par(mar=c(4,4,.5,0)+.5))) options(continue=" ") @ We will consider the data on the bitterness of wine from \citet{randall89} presented in Table~\ref{tab:winedata} and available as the object \texttt{wine} in package \textsf{ordinal}. The data were also analyzed with mixed effects models by \citet{tutz96}. The following gives an impression of the wine data object: <<>>= data(wine) head(wine) str(wine) @ The data represent a factorial experiment on factors determining the bitterness of wine with 1 = ``least bitter'' and 5 = ``most bitter''. Two treatment factors (temperature and contact) each have two levels. Temperature and contact between juice and skins can be controlled when crushing grapes during wine production. Nine judges each assessed wine from two bottles from each of the four treatment conditions, hence there are 72 observations in all. For more information see the manual entry for the wine data: \texttt{help(wine)}. \begin{table} \centering \caption{Ratings of the bitterness of some white wines. Data are adopted from \citet{randall89}.} \label{tab:winedata} \begin{tabular}{lllrrrrrrrrr} \hline & & & \multicolumn{9}{c}{Judge} \\ \cline{4-12} <>= data(wine) temp.contact.bottle <- with(wine, temp:contact:bottle)[drop=TRUE] tab <- xtabs(as.numeric(rating) ~ temp.contact.bottle + judge, data=wine) class(tab) <- "matrix" attr(tab, "call") <- NULL mat <- cbind(rep(c("cold", "warm"), each = 4), rep(rep(c("no", "yes"), each=2), 2), 1:8, tab) colnames(mat) <- c("Temperature", "Contact", "Bottle", 1:9) xtab <- xtable(mat) print(xtab, only.contents=TRUE, include.rownames=FALSE, sanitize.text.function = function(x) x) @ \end{tabular} \end{table} We will fit the following cumulative link mixed model to the wine data: \begin{equation} \label{eq:mixedModel} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j - \beta_1 (\mathtt{temp}_i) - \beta_2(\mathtt{contact}_i) - u(\mathtt{judge}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation} This is a model for the cumulative probability of the $i$th rating falling in the $j$th category or below, where $i$ index all observations and $j = 1, \ldots, J$ index the response categories ($J = 5$). $\{\theta_j\}$ are known as threshold parameters or cut-points. We take the judge effects to be random, and assume that the judge effects are IID normal: $u(\mathtt{judge}_i) \sim N(0, \sigma_u^2)$. We fit this model with the \texttt{clmm2} function in package \textsf{ordinal}. Here we save the fitted \texttt{clmm2} model in the object \texttt{fm1} (short for \texttt{f}itted \texttt{m}odel \texttt{1}) and \texttt{print} the model by simply typing its name: <<>>= fm1 <- clmm2(rating ~ temp + contact, random=judge, data=wine) fm1 @ Maximum likelihood estimates of the parameters are provided using the Laplace approximation to compute the likelihood function. A more accurate approximation is provided by the adaptive Gauss-Hermite quadrature method. Here we use 10 quadrature nodes and use the \texttt{summary} method to display additional information: <<>>= fm2 <- clmm2(rating ~ temp + contact, random=judge, data=wine, Hess=TRUE, nAGQ=10) summary(fm2) @ The small changes in the parameter estimates show that the Laplace approximation was in fact rather accurate in this case. Observe that we set the option \texttt{Hess = TRUE}. This is needed if we want to use the \texttt{summary} method since the Hessian is needed to compute standard errors of the model coefficients. The results contain the maximum likelihood estimates of the parameters: \begin{equation} \label{eq:parameters} \hat\beta_1 = 3.06, ~~\hat\beta_2 = 1.83, ~~\hat\sigma_u^2 = 1.29 = 1.13^2, ~~\{\hat\theta_j\} = [-1.62,~ 1.51,~ 4.23,~ 6.09]. \end{equation} Observe the number under \texttt{Std.Dev} for the random effect is \textbf{not} the standard error of the random effects variance, \texttt{Var}. Rather, it is the standard deviation of the random effects, i.e., it is the square root of the variance. In our example $\sqrt{1.29} \simeq 1.13$. The condition number of the Hessian measures the empirical identifiability of the model. High numbers, say larger than $10^4$ or $10^6$ indicate that the model is ill defined. This would indicate that the model can be simplified, that possibly some parameters are not identifiable, and that optimization of the model can be difficult. In this case the condition number of the Hessian does not indicate a problem with the model. The coefficients for \texttt{temp} and \texttt{contact} are positive indicating that higher temperature and more contact increase the bitterness of wine, i.e., rating in higher categories is more likely. The odds ratio of the event $Y \geq j$ is $\exp(\beta_{\textup{treatment}})$, thus the odds ratio of bitterness being rated in category $j$ or above at warm relative to cold temperatures is <<>>= exp(coef(fm2)[5]) @ The $p$-values for the location coefficients provided by the \texttt{summary} method are based on the so-called Wald statistic. More accurate test are provided by likelihood ratio tests. These can be obtained with the \texttt{anova} method, for example, the likelihood ratio test of \texttt{contact} is <<>>= fm3 <- clmm2(rating ~ temp, random=judge, data=wine, nAGQ=10) anova(fm3, fm2) @ which in this case is slightly more significant. The Wald test is not reliable for variance parameters, so the \texttt{summary} method does not provide a test of $\sigma_u$, but a likelihood ratio test can be obtained with \texttt{anova}: <<>>= fm4 <- clm2(rating ~ temp + contact, data=wine) anova(fm4, fm2) @ showing that the judge term is significant. Since this test of $\sigma_u = 0$ is on the boundary of the parameter space (a variance cannot be negative), it is often argued that a more correct $p$-value is obtained by halving the $p$-value produced by the conventional likelihood ratio test. In this case halving the $p$-value is of little relevance. A profile likelihood confidence interval of $\sigma_u$ is obtained with: <<>>= pr2 <- profile(fm2, range=c(.1, 4), nSteps=30, trace=0) confint(pr2) @ The profile likelihood can also be plotted: <>= plot(pr2) @ The result is shown in Fig.~\ref{fig:PRsigma_u} where horizontal lines indicate 95\% and 99\% confindence bounds. Clearly the profile likelihood function is asymmetric and symmetric confidence intervals would be inaccurate. \begin{figure} \centering <>= <> @ \caption{Profile likelihood of $\sigma_u$.} \label{fig:PRsigma_u} \end{figure} The judge effects, $u(\mathtt{judge}_i)$ are not parameters, so they cannot be \emph{estimated} in the conventional sense, but a ``best guess'' is provided by the \emph{conditional modes}. Similarly the \emph{conditional variance} provides an uncertainty measure of the conditional modes. These quantities are included in \texttt{clmm2} objects as the \texttt{ranef} and \texttt{condVar} components. The following code generates the plot in Fig.~\ref{fig:ranef} illustrating judge effects via conditional modes with 95\% confidence intervals based on the conditional variance: <>= ci <- fm2$ranef + qnorm(0.975) * sqrt(fm2$condVar) %o% c(-1, 1) ord.re <- order(fm2$ranef) ci <- ci[order(fm2$ranef),] plot(1:9, fm2$ranef[ord.re], axes=FALSE, ylim=range(ci), xlab="Judge", ylab="Judge effect") axis(1, at=1:9, labels = ord.re) axis(2) for(i in 1:9) segments(i, ci[i,1], i, ci[i, 2]) abline(h = 0, lty=2) @ The seventh judge gave the lowest ratings of bitterness while the first judge gave the highest ratings of bitterness. The significant judge effect indicate that judges perceived the bitterness of the wines differently. Two natural interpretations are that either a bitterness of, say, 3 means different things to different judges, or the judges actually perceived the bitterness of the wines differently. Possibly both effects play their part. \begin{figure} \centering <>= <> @ \caption{Judge effects given by conditional modes with 95\% confidence intervals based on the conditional variance.} \label{fig:ranef} \end{figure} The fitted or predicted probabilites can be obtained with the judge effects at their conditional modes or for an average judge ($u = 0$). The former are available with \texttt{fitted(fm)} or with \texttt{predict(fm)}, where \texttt{fm} is a \texttt{f}itted \texttt{m}odel object. In our example we get <<>>= head(cbind(wine, fitted(fm2))) @ Predicted probabilities for an average judge can be obtained by including the data used to fit the model in the \texttt{newdata} argument of \texttt{predict}: <<>>= head(cbind(wine, pred=predict(fm2, newdata=wine))) @ Model~\eqref{eq:mixedModel} says that for an average judge at cold temperature the cumulative probability of a bitterness rating in category $j$ or below is \begin{equation*} P(Y_i \leq j) = \textup{logit}^{-1} [ \theta_j - \beta_2(\mathtt{contact}_i) ] \end{equation*} since $u$ is set to zero and $\beta_1(\mathtt{temp}_i) = 0$ at cold conditions. Further, $\textup{logit}^{-1}(\eta) = 1 / [1 + \exp(\eta)]$ is the cumulative distribution function of the logistic distribution available as the \texttt{plogis} function. The (non-cumulative) probability of a bitterness rating in category $j$ is $\pi_j = P(Y_i \leq j) - P(Y_i \leq j-1)$, for instance the probability of a bitterness rating in the third category at these conditions can be computed as <<>>= plogis(fm2$Theta[3] - fm2$beta[2]) - plogis(fm2$Theta[2] - fm2$beta[2]) @ This corresponds to the third entry of \texttt{predict(fm2, newdata=wine)} given above. Judge effects are random and normally distributed, so an average judge effect is 0. Extreme judge effects, say 5th and 95th percentile judge effects are given by <<>>= qnorm(0.95) * c(-1, 1) * fm2$stDev @ At the baseline experimental conditions (cold and no contact) the probabilites of bitterness ratings in the five categories for a 5th percentile judge is <<>>= pred <- function(eta, theta, cat = 1:(length(theta)+1), inv.link = plogis) { Theta <- c(-1e3, theta, 1e3) sapply(cat, function(j) inv.link(Theta[j+1] - eta) - inv.link(Theta[j] - eta) ) } pred(qnorm(0.05) * fm2$stDev, fm2$Theta) @ We can compute these probabilities for average, 5th and 95th percentile judges at the four experimental conditions. The following code plots these probabilities and the results are shown in Fig.~\ref{fig:ratingProb}. <>= mat <- expand.grid(judge = qnorm(0.95) * c(-1, 0, 1) * fm2$stDev, contact = c(0, fm2$beta[2]), temp = c(0, fm2$beta[1])) pred.mat <- pred(eta=rowSums(mat), theta=fm2$Theta) lab <- paste("contact=", rep(levels(wine$contact), 2), ", ", "temp=", rep(levels(wine$temp), each=2), sep="") par(mfrow=c(2, 2)) for(k in c(1, 4, 7, 10)) { plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") } @ \begin{figure} \centering <>= k <- 1 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 4 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 7 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 10 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ \caption{Rating probabilities for average and extreme judges at different experimental conditions.} \label{fig:ratingProb} \end{figure} At constant experimental conditions the odds ratio for a bitterness rating in category $j$ or above for a 95th percentile judge relative to a 5th percentile judge is <<>>= exp(2*qnorm(0.95) * fm2$stDev) @ The differences between judges can also be expressed in terms of the interquartile range: the odds ratio for a bitterness rating in category $j$ or above for a third quartile judge relative to a first quartile judge is <<>>= exp(2*qnorm(0.75) * fm2$stDev) @ \newpage \bibliography{ordinal} %% \newpage \end{document} <>= @ ordinal/vignettes/ordinal.bib0000644000175100001440000002472112431434103016037 0ustar hornikusers@Book{brazzale07, author = {A R Brazzale and A C Davison and N Reid}, title = {Applied Asymptotics---case studies in small-sample statistics} , publisher = {Cambridge University Press}, year = 2007} @Book{pawitan01, author = {Yudi Pawitan}, title = {{In All Likelihood---Statistical Modelling and Inference Using Likelihood}}, publisher = {Oxford University Press}, year = 2001 } @Manual{R11, title = {R: A Language and Environment for Statistical Computing}, author = {{R Development Core Team}}, organization = {R Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2011}, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org/}, } @Article{tutz96, author = {Gerhard Tutz and Wolfgang Hennevogl}, title = {Random effects in ordinal regression models}, journal = {Computational Statistics \& Data Analysis}, year = 1996, volume = 22, pages = {537-557} } @Article{efron78, author = {Bradley Efron and David V Hinkley}, title = {{Assessing the accuracy of the maximum likelihood estimator: Observed versus expected Fisher information}}, journal = {Biometrika}, year = 1978, volume = 65, number = 3, pages = {457-487}} @article{bauer09, author = {Bauer, Daniel}, affiliation = {University of North Carolina Department of Psychology Chapel Hill NC 27599-3270 USA}, title = {A Note on Comparing the Estimates of Models for†Cluster-Correlated or Longitudinal Data with Binary or Ordinal†Outcomes}, journal = {Psychometrika}, publisher = {Springer New York}, issn = {0033-3123}, keyword = {Humanities, Social Sciences and Law}, pages = {97-105}, volume = {74}, issue = {1}, url = {http://dx.doi.org/10.1007/s11336-008-9080-1}, year = {2009} } @article{fielding04, author = {Fielding, Antony}, title = {Scaling for Residual Variance Components of Ordered Category Responses in Generalised Linear Mixed Multilevel Models}, journal = {Quality \& Quantity}, publisher = {Springer Netherlands}, issn = {0033-5177}, keyword = {Humanities, Social Sciences and Law}, pages = {425-433}, volume = {38}, issue = {4}, url = {http://dx.doi.org/10.1023/B:QUQU.0000043118.19835.6c}, year = {2004} } @article{winship84, jstor_articletype = {research-article}, title = {Regression Models with Ordinal Variables}, author = {Winship, Christopher and Mare, Robert D.}, journal = {American Sociological Review}, jstor_issuetitle = {}, volume = {49}, number = {4}, jstor_formatteddate = {Aug., 1984}, pages = {512-525}, url = {http://www.jstor.org/stable/2095465}, ISSN = {00031224}, abstract = {Most discussions of ordinal variables in the sociological literature debate the suitability of linear regression and structural equation methods when some variables are ordinal. Largely ignored in these discussions are methods for ordinal variables that are natural extensions of probit and logit models for dichotomous variables. If ordinal variables are discrete realizations of unmeasured continuous variables, these methods allow one to include ordinal dependent and independent variables into structural equation models in a way that (1) explicitly recognizes their ordinality, (2) avoids arbitrary assumptions about their scale, and (3) allows for analysis of continuous, dichotomous, and ordinal variables within a common statistical framework. These models rely on assumed probability distributions of the continuous variables that underly the observed ordinal variables, but these assumptions are testable. The models can be estimated using a number of commonly used statistical programs. As is illustrated by an empirical example, ordered probit and logit models, like their dichotomous counterparts, take account of the ceiling and floor restrictions on models that include ordinal variables, whereas the linear regression model does not.}, language = {English}, year = {1984}, publisher = {American Sociological Association}, copyright = {Copyright © 1984 American Sociological Association}, } @article{thompson81, jstor_articletype = {research-article}, title = {Composite Link Functions in Generalized Linear Models}, author = {Thompson, R. and Baker, R. J.}, journal = {Journal of the Royal Statistical Society. Series C (Applied Statistics)}, jstor_issuetitle = {}, volume = {30}, number = {2}, jstor_formatteddate = {1981}, pages = {125-131}, url = {http://www.jstor.org/stable/2346381}, ISSN = {00359254}, abstract = {In generalized linear models each observation is linked with a predicted value based on a linear function of some systematic effects. We sometimes require to link each observation with a linear function of more than one predicted value. We embed such models into the generalized linear model framework using composite link functions. The computer program GLIM-3 can be used to fit these models. Illustrative examples are given including a mixed-up contingency table and grouped normal data.}, language = {English}, year = {1981}, publisher = {Blackwell Publishing for the Royal Statistical Society}, copyright = {Copyright © 1981 Royal Statistical Society}, } @article{burridge81, jstor_articletype = {research-article}, title = {A Note on Maximum Likelihood Estimation for Regression Models Using Grouped Data}, author = {Burridge, J.}, journal = {Journal of the Royal Statistical Society. Series B (Methodological)}, jstor_issuetitle = {}, volume = {43}, number = {1}, jstor_formatteddate = {1981}, pages = {41-45}, url = {http://www.jstor.org/stable/2985147}, ISSN = {00359246}, abstract = {The estimation of parameters for a class of regression models using grouped or censored data is considered. It is shown that with a simple reparameterization some commonly used distributions, such as the normal and extreme value, result in a log-likelihood which is concave with respect to the transformed parameters. Apart from its theoretical implications for the existence and uniqueness of maximum likelihood estimates, this result suggests minor changes to some commonly used algorithms for maximum likelihood estimation from grouped data. Two simple examples are given.}, language = {English}, year = {1981}, publisher = {Blackwell Publishing for the Royal Statistical Society}, copyright = {Copyright © 1981 Royal Statistical Society}, } @article{pratt81, jstor_articletype = {research-article}, title = {Concavity of the Log Likelihood}, author = {Pratt, John W.}, journal = {Journal of the American Statistical Association}, jstor_issuetitle = {}, volume = {76}, number = {373}, jstor_formatteddate = {Mar., 1981}, pages = {103-106}, url = {http://www.jstor.org/stable/2287052}, ISSN = {01621459}, abstract = {For a very general regression model with an ordinal dependent variable, the log likelihood is proved concave if the derivative of the underlying response function has concave logarithm. For a binary dependent variable, a weaker condition suffices, namely, that the response function and its complement each have concave logarithm. The normal, logistic, sine, and extreme-value distributions, among others, satisfy the stronger condition, the t (including Cauchy) distributions only the weaker. Some converses and generalizations are also given. The model is that which arises from an ordinary linear regression model with a continuous dependent variable that is partly unobservable, being either grouped into intervals with unknown endpoints, or censored, or, more generally, grouped in some regions, censored in others, and observed exactly elsewhere.}, language = {English}, year = {1981}, publisher = {American Statistical Association}, copyright = {Copyright © 1981 American Statistical Association}, } @Manual{christensen11, title = {Analysis of ordinal data with cumulative link models --- estimation with the \textsf{ordinal} package}, author = {Rune Haubo Bojesen Christensen}, note = {R-package version 2011.09-13}, year = 2011} @Book{agresti10, author = {Alan Agresti}, title = {Analysis of ordinal categorical data}, publisher = {Wiley}, year = 2010, edition = {2nd}} @Book{agresti02, author = {Alan Agresti}, title = {Categorical Data Analysis}, publisher = {Wiley}, year = 2002, edition = {2nd} } @Article{mccullagh80, author = {Peter McCullagh}, title = {Regression Models for Ordinal Data}, journal = {Journal of the Royal Statistical Society, Series B}, year = 1980, volume = 42, pages = {109-142} } @Article{randall89, author = {J.H. Randall}, title = {The Analysis of Sensory Data by Generalised Linear Model}, journal = {Biometrical journal}, year = 1989, volume = 7, pages = {781-793} } @Book{fahrmeir01, author = {Ludwig Fahrmeir and Gerhard Tutz}, title = {Multivariate Statistical Modelling Based on Generalized Linear Models}, publisher = {Springer-Verlag New York, Inc.}, year = 2001, series = {Springer series in statistics}, edition = {2nd} } @Book{greene10, author = {William H Greene and David A Hensher}, title = {Modeling Ordered Choices: A Primer}, publisher = {Cambridge University Press}, year = 2010} @Book{mccullagh89, author = {Peter McCullagh and John Nelder}, title = {Generalized Linear Models}, publisher = {Chapman \& Hall/CRC}, year = 1989, edition = {Second} } @Book{collett02, author = {David Collett}, title = {Modelling binary data}, publisher = {London: Chapman \& Hall/CRC}, year = 2002, edition = {2nd} } ordinal/vignettes/clm_article.Rnw0000644000175100001440000032243614334176473016724 0ustar hornikusers% \documentclass[article]{article} % \documentclass[article]{jss} \documentclass[nojss]{jss} %% -- Latex packages and custom commands --------------------------------------- %% recommended packages \usepackage{thumbpdf,lmodern,amsmath,amssymb,bm,url} \usepackage{textcomp} \usepackage[utf8]{inputenc} %% another package (only for this demo article) \usepackage{framed} %% new custom commands \newcommand{\class}[1]{`\code{#1}'} \newcommand{\fct}[1]{\code{#1()}} %% For Sweave-based articles about R packages: %% need no \usepackage{Sweave} \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE, prefix.string=clmjss} <>= options(prompt = "R> ", continue = "+ ", width = 70, useFancyQuotes = FALSE) library("ordinal") library("xtable") @ %%\VignetteIndexEntry{Cumulative Link Models for Ordinal Regression} %%\VignetteDepends{ordinal, xtable} %% -- Article metainformation (author, title, ...) ----------------------------- %% - \author{} with primary affiliation %% - \Plainauthor{} without affiliations %% - Separate authors by \And or \AND (in \author) or by comma (in \Plainauthor). %% - \AND starts a new line, \And does not. \author{Rune Haubo B Christensen\\Technical University of Denmark\\ \& \\ Christensen Statistics} \Plainauthor{Rune Haubo B Christensen} %% - \title{} in title case %% - \Plaintitle{} without LaTeX markup (if any) %% - \Shorttitle{} with LaTeX markup (if any), used as running title \title{Cumulative Link Models for Ordinal Regression with the \proglang{R} Package \pkg{ordinal}} \Plaintitle{Cumulative Link Models for Ordinal Regression with the R Package ordinal} \Shorttitle{Cumulative Link Models with the \proglang{R} package \pkg{ordinal}} %% - \Abstract{} almost as usual \Abstract{ This paper introduces the R-package \pkg{ordinal} for the analysis of ordinal data using cumulative link models. The model framework implemented in \pkg{ordinal} includes partial proportional odds, structured thresholds, scale effects and flexible link functions. The package also support cumulative link models with random effects which are covered in a future paper. A speedy and reliable regularized Newton estimation scheme using analytical derivatives provides maximum likelihood estimation of the model class. The paper describes the implementation in the package as well as how to use the functionality in the package for analysis of ordinal data including topics on model identifiability and customized modelling. The package implements methods for profile likelihood confidence intervals, analysis of deviance tables with type I, II and III tests, predictions of various kinds as well as methods for checking the convergence of the fitted models. } %% - \Keywords{} with LaTeX markup, at least one required %% - \Plainkeywords{} without LaTeX markup (if necessary) %% - Should be comma-separated and in sentence case. \Keywords{ordinal, cumulative link models, proportional odds, scale effects, \proglang{R}} \Plainkeywords{ordinal, cumulative link models, proportional odds, scale effects, R} %% - \Address{} of at least one author %% - May contain multiple affiliations for each author %% (in extra lines, separated by \emph{and}\\). %% - May contain multiple authors for the same affiliation %% (in the same first line, separated by comma). \Address{ Rune Haubo Bojesen Christensen\\ Section for Statistics and Data Analysis\\ Department of Applied Mathematics and Computer Science\\ DTU Compute\\ Technical University of Denmark\\ Richard Petersens Plads \\ Building 324 \\ DK-2800 Kgs. Lyngby, Denmark\\ \emph{and}\\ Christensen Statistics\\ Bringetoften 7\\ DK-3500 V\ae rl\o se, Denmark \\ E-mail: \email{Rune.Haubo@gmail.com}; \email{Rune@ChristensenStatistics.dk}%\\ % URL: \url{http://christensenstatistics.dk/} } \begin{document} This is a copy of an article that is no longer submitted for publication in Journal of Statistical Software (\url{https://www.jstatsoft.org/}). %% -- Introduction ------------------------------------------------------------- %% - In principle "as usual". %% - But should typically have some discussion of both _software_ and _methods_. %% - Use \proglang{}, \pkg{}, and \code{} markup throughout the manuscript. %% - If such markup is in (sub)section titles, a plain text version has to be %% added as well. %% - All software mentioned should be properly \cite-d. %% - All abbreviations should be introduced. %% - Unless the expansions of abbreviations are proper names (like "Journal %% of Statistical Software" above) they should be in sentence case (like %% "generalized linear models" below). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Introduction} \label{sec:intro} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ordered categorical data, or simply \emph{ordinal} data, are common in a multitude of empirical sciences and in particular in scientific disciplines where humans are used as measurement instruments. Examples include school grades, ratings of preference in consumer studies, degree of tumor involvement in MR images and animal fitness in ecology. Cumulative link models (CLM) are a powerful model class for such data since observations are treated correctly as categorical, the ordered nature is exploited and the flexible regression framework allows for in-depth analyses. This paper introduces the \pkg{ordinal} package \citep{ordinal-pkg} for \proglang{R} \citep{R} for the analysis of ordinal data with cumulative link models. The paper describes how \pkg{ordinal} supports the fitting of CLMs with various models structures, model assessment and inferential options including tests of partial proportional odds, scale effects, threshold structures and flexible link functions. The implementation, its flexibility in allowing for costumizable models and an effective fitting algorithm is also described. The \pkg{ordinal} package also supports cumulative link \emph{mixed} models (CLMM); CLMs with normally distributed random effects. The support of this model class will not be given further treatment here but remain a topic for a future paper. The name, \emph{cumulative link models} is adopted from \citet{agresti02}, but the model class has been referred to by several other names in the literature, such as \emph{ordered logit models} and \emph{ordered probit models} \citep{greene10} for the logit and probit link functions. The cumulative link model with a logit link is widely known as the \emph{proportional odds model} due to \citet{mccullagh80} and with a complementary log-log link, the model is sometimes referred to as the \emph{proportional hazards model} for grouped survival times. CLMs is one of several types of models specifically developed for ordinal data. Alternatives to CLMs include continuation ratio models, adjacent category models, and stereotype models \citep{ananth97} but only models in the CLM framework will be considered in this paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Software review} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cumulative link models can be fitted by all the major software packages and while some software packages support scale effects, partial proportional odds (also referred to as unequal slopes, partial effects, and nominal effects), different link functions and structured thresholds all model structures are not available in any one package or implementation. The following brief software review is based on the publicly available documentation at software package websites retrieved in May 2020. \proglang{IBM SPSS} \citep{SPSS} implements McCullagh's \pkg{PLUM} \citep{mccullagh80} procedure, allows for the five standard link functions (cf. Table~\ref{tab:linkFunctions}) and scale effects. Estimation is via Fisher-Scoring and a test for equal slopes is available for the location-only model while it is not possible to estimate a partial proportional odds model. \proglang{Stata} \citep{Stata} includes the \code{ologit} and \code{oprobit} procedures for CLMs with logistic and probit links but without support for scale effects, partial effect or structured thresholds. The add-on package \pkg{oglm} \citep{oglm} allows for all five standard link functions and scale effects. The \pkg{GLLAMM} package \citep{gllamm} also has some support for CLMs in addition to some support for random effects. \proglang{SAS} \citep{SAS} implements CLMs with logit links in \code{proc logistic} and CLMs with the 5 standard links in \code{prog genmod}. \proglang{Matlab} \citep{Matlab} fits CLMs with the \code{mnrfit} function allowing for logit, probit, complementary log-log and log-log links. \proglang{Python} has a package \pkg{mord} \citep{mord} for ordinal classification and prediction focused at machine learning applications. In \proglang{R}, several packages on the Comprehensive \proglang{R} Archive Network (CRAN) implements CLMs. \code{polr} from \pkg{MASS} \citep{MASS} implements standard CLMs allowing for the 5 standard link functions but no further extensions; the \pkg{VGAM} package \citep{VGAM} includes CLMs via the \code{vglm} function using the \code{cumulative} link. \code{vglm} allows for several link functions as well as partial effects. The \code{lrm} and \code{orm} functions from the \pkg{rms} package \citep{rms} also implements CLMs with the 5 standard link functions but without scale effects, partial or structured thresholds. A Bayesian alternative is implemented in the \pkg{brms} package \citep{brms, brms2} which includes structured thresholds in addition to random-effects. In addition, several other \proglang{R} packages include methods for analyses of ordinal data including \pkg{oglmx} \citep{oglmx}, \pkg{MCMCpack} \citep{MCMCpack}, \pkg{mvord} \citep{mvord}, \pkg{CUB} \citep{CUB}, and \pkg{ordinalgmifs} \citep{ordinalgmifs}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection[ordinal package overview]{\pkg{ordinal} package overview} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \pkg{ordinal} package implements CLMs and CLMMs along with functions and methods to support these model classes as summarized in Table~\ref{tab:functions_in_ordinal}. The two key functions in \pkg{ordinal} are \code{clm} and \code{clmm} which fits CLMs and CLMMs respectively; \code{clm2} and \code{clmm2}\footnote{A brief tutorial on \code{clmm2} is currently available at the package website on CRAN: \url{https://CRAN.R-project.org/package=ordinal}} provide legacy implementations primarily retained for backwards compatibility. This paper introduces \code{clm} and its associated functionality covering CLMs with location, scale and nominal effects, structured thresholds and flexible link functions. \code{clm.fit} is the main work horse behind \code{clm} and an analogue to \code{lm.fit} for linear models. The package includes methods for assessment of convergence with \code{convergence} and \code{slice}, an auxiliary method for removing linearly dependent columns from a design matrix in \code{drop.coef}. Distributional support functions in \pkg{ordinal} provide support for Gumbel and log-gamma distributions as well as gradients\footnote{gradients with respect to $x$, the quantile; not the parameters of the distributions} of normal, logistic and Cauchy probability density functions which are used in the iterative methods implemented in \code{clm} and \code{clmm}. \begin{table}[t!] \centering \renewcommand*{\arraystretch}{1.2} \begin{tabular}{llll} \hline \rotatebox{0}{Fitting} & \rotatebox{0}{Miscellaneous} & \rotatebox{0}{Former impl.} & \rotatebox{0}{Distributions} \\ \hline \code{clm} & \code{convergence} & \code{clm2} & \code{[pdqrg]gumbel}$^{\textsf{c}}$ \\ \code{clmm}$^{\textsf{c}}$ & \code{slice} & \code{clmm2}$^{\textsf{c}}$ & \code{[pdg]lgamma}$^{\textsf{c}}$ \\ \code{clm.fit} & \code{drop.coef} & \code{clm2.control} & \code{gnorm}$^{\textsf{c}}$ \\ \code{clm.control} & & \code{clmm2.control} & \code{glogis}$^{\textsf{c}}$ \\ \code{clmm.control} & & & \code{gcauchy}$^{\textsf{c}}$ \\ \hline \end{tabular} \\ \caption{Key functions in \pkg{ordinal}. Superscript "c" indicates (partial or full) implementation in \proglang{C}.\label{tab:functions_in_ordinal}} \end{table} As summarized in Table~\ref{tab:clm_methods}, \pkg{ordinal} provides the familiar suite of extractor and print methods for \code{clm} objects known from \code{lm} and \code{glm}. These methods all behave in ways similar to those for \code{glm}-objects with the exception of \code{model.matrix} which returns a list of model matrices and \code{terms} which can return the \code{terms} object for each of three formulae. The inference methods facilitate profile likelihood confidence intervals via \code{profile} and \code{confint}, likelihood ratio tests for model comparison via \code{anova}, model assessment by tests of removal of model terms via \code{drop1} and addition of new terms via \code{add1} or AIC-based model selection via \code{step}. Calling \code{anova} on a single \code{clm}-object provides an analysis of deviance table with type I, II or III Wald-based $\chi^2$ tests following the \proglang{SAS}-definitions of such tests \citep{SAStype}. In addition to standard use of \code{clm}, the implementation facilitates extraction a model environment containing a complete representation of the model allowing the user to fit costumized models containing, for instance, special structures on the threshold parameters, restrictions on regression parameters or other case-specific model requirements. As CLMMs are not covered by this paper methods for \code{clmm} objects will not be discussed. Other packages including \pkg{emmeans} \citep{emmeans}, \pkg{margins} \citep{margins}, \pkg{ggeffects} \citep{ggeffects}, \pkg{generalhoslem} \citep{generalhoslem} and \pkg{effects} \citep{effects1, effects2} extend the \pkg{ordinal} package by providing methods marginal means, tests of functions of the coefficients, goodness-of-fit tests and methods for illustration of fitted models. \begin{table}[t!] \centering \renewcommand*{\arraystretch}{1.2} \begin{tabular}{llll} \hline \multicolumn{2}{l}{Extractor and Print} & Inference & Checking \\[3pt] \hline \code{coef} & \code{print} & \code{anova} & \code{slice} \\ \code{fitted} & \code{summary} & \code{drop1} & \code{convergence}\\ \code{logLik} & \code{model.frame} & \code{add1} & \\ \code{nobs} & \code{model.matrix} & \code{confint} & \\ \code{vcov} & \code{update} & \code{profile} & \\ \code{AIC}, \code{BIC} & & \code{predict} & \\ \code{extractAIC} & & \code{step}, \code{stepAIC} & \\ \hline \end{tabular} \caption{Key methods for \code{clm} objects.\label{tab:clm_methods}} \end{table} The \pkg{ordinal} package is therefore unique in providing a comprehensive framework for cumulative link models exceeding that of other software packages with its functionality extended by a series of additional \proglang{R} packages. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Organization of the paper} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The remainder of the paper is organized as follows. The next section establishes notation by defining CLMs and associated log-likelihood functions, then describes the extended class of CLMs that is implemented in \pkg{ordinal} including details about scale effects, structured thresholds, partial proportional odds and flexible link functions. The third section describes how maximum likelihood (ML) estimation of CLMs is implemented in \pkg{ordinal}. The fourth section describes how CLMs are fitted and ordinal data are analysed with \pkg{ordinal} including sections on nominal effects, scale effects, structured thresholds, flexible link functions, profile likelihoods, assessment of model convergence, fitted values and predictions. The final parts of section four is on a more advanced level and include issues around model identifiability and customizable fitting of models not otherwise covered by the \pkg{ordinal} API. We end in section~\ref{sec:conclusions} with Conclusions. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Cumulative link models} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A cumulative link model is a model for ordinal-scale observations, i.e., observations that fall in an ordered finite set of categories. Ordinal observations can be represented by a random variable $Y_i$ that takes a value $j$ if the $i$th ordinal observations falls in the $j$'th category where $j = 1, \ldots, J$ and $J \geq 2$.\footnote{binomial models ($J = 2$) are also included.}% % A basic cumulative link model is \begin{equation} \label{eq:BasicCLM} \gamma_{ij} = F(\eta_{ij})~, \quad \eta_{ij} = \theta_j - \bm x_i^\top \bm\beta~, \quad i = 1,\ldots,n~, \quad j = 1, \ldots, J-1 ~, \end{equation} where \begin{equation*} %% \label{eq:cum} \gamma_{ij} = \Prob (Y_i \leq j) = \pi_{i1} + \ldots + \pi_{ij} \quad \mathrm{with} \quad \sum_{j=1}^J \pi_{ij} = 1 \end{equation*} are cumulative probabilities\footnote{we have suppressed the conditioning on the covariate vector, $\bm x_i$, i.e., $\gamma_{ij} = \gamma_j(\bm x_i)$ and $P(Y_i \leq j) = P(Y \leq j | \bm x_i)$.}, $\pi_{ij}$ is the probability that the $i$th observation falls in the $j$th category, $\eta_{ij}$ is the linear predictor and $\bm x_i^\top$ is a $p$-vector of regression variables for the parameters, $\bm\beta$ without a leading column for an intercept and $F$ is the inverse link function. % The thresholds (also known as cut-points or intercepts) are strictly ordered: \begin{equation*} -\infty \equiv \theta_0 \leq \theta_1 \leq \ldots \leq \theta_{J-1} \leq \theta_J \equiv \infty. \end{equation*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{The multinomial distribution and the log-likelihood function} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The ordinal observation $Y_i$ which assumes the value $j$ can be represented by a multinomially distributed variable $\bm Y_i^* \sim \mathrm{multinom}(\bm\pi_i, 1)$, where $\bm Y_i^*$ is a $J$-vector with a $1$ at the $j$'th entry and 0 otherwise, and with probability mass function % \begin{equation} \label{eq:multinom_pmf} \Prob(\bm Y_i^* = \bm y_i^*) = \prod_j \pi_{ij}^{y_{ij}^*} ~. \end{equation} % The log-likelihood function can therefore be written as % \begin{equation*} \ell(\bm\theta, \bm\beta; \bm y^*) = \sum_i \sum_j y_{ij}^* \log \pi_{ij} \end{equation*} % or equivalently % \begin{align*} \ell(\bm\theta, \bm\beta; \bm y) =~& \sum_i \sum_j \mathrm I (y_i = j) \log \pi_{ij} \\ =~& \sum_i \log \tilde\pi_i \end{align*} % where $\tilde\pi_i$ is the $j$'th entry in $J$-vector $\bm \pi_i$ with elements $\pi_{ij}$ and $\mathrm I(\cdot)$ is the indicator function. Allowing for observation-level weights (case weights), $w_i$ leads finally to % \begin{equation} \label{eq:clm-log-likelihood} \ell(\bm\theta, \bm\beta; \bm y) = \sum_i w_i \log \tilde\pi_i ~. \end{equation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Likelihood based inference} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Confidence intervals for model parameters are obtained by appealing to the asymptotic normal distribution of a statistic $s(\cdot)$ for a scalar parameter of interest $\beta_a$ and defined as \begin{equation*} CI:~\left\{ \beta_a; |s(\beta_a)| < z_{1 - \alpha/2} \right\} . \end{equation*} where $z_{1 - \alpha/2}$ is the $(1 - \alpha/2)$ quantile of the standard normal cumulative distribution function. Taking $s(\cdot)$ to be the Wald statistic $s(\beta_a):~ w(\beta_a) = (\hat\beta_a - \beta_a)/\hat{\mathrm{se}}(\hat\beta_a)$ leads to the classical symmetric intervals. Better confidence intervals can be obtained by choosing instead the likelihood root statistic \citep[see e.g.,][]{pawitan01, brazzale07}: \begin{equation*} s(\beta_a):~ r(\beta_a) = \mathrm{sign}(\hat\beta_a - \beta_a) \sqrt{-2 [ \ell(\hat{\bm\theta}, \hat{\bm\beta}; \bm y) - \ell_p(\beta_a; \bm y)]} \end{equation*} where \begin{equation*} \ell_p(\beta_a; \bm y) = \max_{\bm\theta, \bm\beta_{-a}} \ell(\bm\theta, \bm\beta; \bm y)~, \end{equation*} is the profile likelihood for the scalar parameter $\beta_a$ and $\bm\beta_{-a}$ is the vector of regression parameters without the $a$'th one. While the profile likelihood has to be optimized over all parameters except $\beta_a$ we define a \emph{log-likelihood slice} as \begin{equation} \label{eq:slice} \ell_{\mathrm{slice}}(\beta_a; \bm y) = \ell(\beta_a; \hat{\bm\theta}, \hat{\bm\beta}_{-a}, \bm y)~, \end{equation} which is the log-likelihood function evaluated at $\beta_a$ while keeping the remaining parameters fixed at their ML estimates. A quadratic approximation to the log-likelihood slice is $(\hat\beta_a - \beta_a)^2 / 2\tau_a^2$ where the \emph{curvature unit} $\tau_a$ is the square root of $a$'th diagonal element of the Hessian of $-\ell(\hat{\bm\theta}, \hat{\bm\beta}; \bm y)$. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A commonly used link function is the logit link which leads to % \begin{equation} \label{eq:cum_logit_model} \mathrm{logit}(\gamma_{ij}) = \log \frac{\Prob (Y_i \leq j)}{1 - \Prob(Y_i \leq j)} \end{equation} % The odds ratio (OR) of the event $Y_i \leq j$ at $\bm x_1$ relative to the same event at $\bm x_2$ is then % \begin{equation} \label{eq:odds_ratio} \mathrm{OR} = \frac{\gamma_j(\bm x_1) / [1 - \gamma_j(\bm x_1)]} {\gamma_j(\bm x_2) / [1 - \gamma_j(\bm x_2)]} = \frac{\exp(\theta_j - \bm x_1^\top \bm\beta)} {\exp(\theta_j - \bm x_2^\top \bm\beta)} %% =&~ \exp(\theta_j - \theta_j - \bm x_1 \bm\beta + \bm x_2 \bm\beta) = \exp[(\bm x_2^\top - \bm x_1^\top)\bm\beta] \end{equation} which is independent of $j$. Thus the cumulative odds ratio is proportional to the distance between $\bm x_1$ and $\bm x_2$ which motivated \citet{mccullagh80} to denote the cumulative logit model a \emph{proportional odds model}. If $x$ represent a treatment variable with two levels (e.g., placebo and treatment), then $x_2 - x_1 = 1$ and the odds ratio is $\exp(-\beta_\textup{treatment})$. Similarly the odds ratio of the event $Y \geq j$ is $\exp(\beta_\textup{treatment})$. The probit link has its own interpretation through a normal linear model for a latent variable which is considered in section~\ref{sec:latent-variable-motivation}. The complementary log-log (clog-log) link is also sometimes used because of its interpretation as a proportional hazards model for grouped survival times: \begin{equation*} -\log\{1 - \gamma_{j}(\bm x_i) \} = \exp( \theta_j - \bm x_i^T \bm\beta ) \end{equation*} Here $1 - \gamma_{j}(\bm x_i)$ is the probability or survival beyond category $j$ given $\bm x_i$. The proportional hazards model has the property that \begin{equation*} \log \{ \gamma_{j}(\bm x_1) \} = \exp[ (\bm x_2^T - \bm x_1^T) \bm\beta ] \log \{ \gamma_{j}(\bm x_2) \}~. \end{equation*} thus the ratio of hazards at $\bm x_1$ relative to $\bm x_2$ are proportional. If the log-log link is used on the response categories in the reverse order, this is equivalent to using the clog-log link on the response in the original order. This reverses the sign of $\bm\beta$ as well as the sign and order of $\{\theta_j\}$ while the likelihood and standard errors remain unchanged. % % Thus, similar to the proportional odds % model, the ratio of hazard functions beyond category $j$ at $\bm x_1$ % relative to $\bm x_2$ (the hazard ratio, $HR$) is: % \begin{equation*} % HR = \frac{-\log\{1 - \gamma_{j}(\bm x_2) \}} % {-\log\{1 - \gamma_{j}(\bm x_1) \}} = % \frac{\exp( \theta_j - \bm x_1^T \bm\beta )} % {\exp( \theta_j - \bm x_2^T \bm\beta )} = % \exp[(\bm x_2 - \bm x_1)\bm\beta] % \end{equation*} % Details of the most common link functions are described in Table~\ref{tab:linkFunctions}. \begin{table}[t!] \begin{center} %\footnotesize \begin{tabular}{llll} \hline Name & logit & probit & log-log \\ \hline Distribution & logistic & normal & Gumbel (max)$^b$ \\ Shape & symmetric & symmetric & right skew\\ Link function ($F^{-1}$) & $\log[\gamma / (1 - \gamma)]$ & $\Phi^{-1}(\gamma)$ & $-\log[-\log(\gamma)]$ \\ Inverse link ($F$) & $1 / [1 + \exp(\eta)]$ & $\Phi(\eta)$ & $\exp(-\exp(-\eta))$ \\ Density ($f = F'$) & $\exp(-\eta) / [1 + \exp(-\eta)]^2$ & $\phi(\eta)$ \\ \hline \hline Name & clog-log$^a$ & cauchit \\ \hline Distribution & Gumbel (min)$^b$ & Cauchy$^c$ \\ Shape & left skew & kurtotic \\ Link function ($F^{-1}$) & $\log[ -\log(1 - \gamma)]$ & $\tan[\pi (\gamma - 0.5)]$ \\ Inverse link ($F$) & $1 - \exp[-\exp(\eta)]$ & $\arctan(\eta)/\pi + 0.5$ \\ Density ($f = F'$) & $\exp[-\exp(\eta) + \eta]$ & $1 / [\pi(1 + \eta^2)]$ \\ \hline \end{tabular} \end{center} % \footnotesize % % $^a$: the \emph{complementary log-log} link \\ % $^b$: the Gumbel distribution is also known as the extreme value % (type I) distribution for extreme minima or maxima. It is also % sometimes referred to as the Weibull (or log-Weibull) distribution % (\url{http://en.wikipedia.org/wiki/Gumbel_distribution}). \\ % $^c$: the Cauchy distribution is a $t$-distribution with one df \caption{Summary of the five standard link functions. $^a$: the \emph{complementary log-log} link; $^b$: the Gumbel distribution is also known as the extreme value (type I) distribution for extreme minima or maxima. It is also sometimes referred to as the Weibull (or log-Weibull) distribution; $^c$: the Cauchy distribution is a $t$-distribution with one degree of freedom. \label{tab:linkFunctions}} \end{table} The \pkg{ordinal} package allows for the estimation of an extended class of cumulative link models in which the basic model~(\ref{eq:BasicCLM}) is extended in a number of ways including structured thresholds, partial proportional odds, scale effects and flexible link functions. The following sections will describe these extensions of the basic CLM. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Extensions of cumulative link models} \label{sec:extensions-of-clms} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A general formulation of the class of models (excluding random effects) that is implemented in \pkg{ordinal} can be written % \begin{equation} \gamma_{ij} = F_{\lambda}(\eta_{ij}), \quad \eta_{ij} = \frac{g_{\bm\alpha} (\theta_j) - \bm x_i^\top \bm\beta - \bm w_i^\top \tilde{\bm\beta}_j}{\exp(\bm z_i\bm\zeta)} \end{equation} % where \begin{description} \item[$F_{\lambda}$] is the inverse link function. It may be parameterized by the scalar parameter $\lambda$ in which case we refer to $F_{\lambda}^{-1}$ as a \emph{flexible link function}, % \item[$g_{\bm\alpha}(\theta_j)$] parameterises thresholds $\{\theta_j\}$ by the vector $\bm\alpha$ such that $g$ restricts $\{\theta_j\}$ to be for example symmetric or equidistant. We denote this \emph{structured thresholds}. % \item[$\bm x_i^\top\bm\beta$] are the ordinary regression effects, % \item[$\bm w_i^\top \tilde{\bm\beta}_j$] are regression effects which are allowed to depend on the response category $j$ and they are denoted \emph{partial} or \emph{non-proportional odds} \citep{peterson90} when the logit link is applied. To include other link functions in the terminology we denote these effects \emph{nominal effects} (in text and code) because these effects are not integral to the ordinal nature of the data. % \item[$\exp(\bm z_i\bm\zeta)$] are \emph{scale effects} since in a latent variable view these effects model the scale of the underlying location-scale distribution. \end{description} With the exception of the structured thresholds, these extensions of the basic CLM have been considered individually in a number of sources but to the author's best knowledge not previously in a unified framework. % For example partial proportional odds have been considered by \citet{peterson90} and scale effect have been considered by \citet{mccullagh80} and \citet{cox95}. % \citet{agresti02} is a good introduction to cumulative link models in the context of categorical data analysis and includes discussions of scale effects. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Latent variable motivation of CLMs} \label{sec:latent-variable-motivation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% It is natural to motivate the CLM from a linear model for a categorized version of a latent variable. Assume the following linear model for an unobserved latent variable: % \begin{equation} \label{eq:latent} S_i = \alpha^* + \bm x_i^\top \bm\beta^* + \varepsilon_i, \quad \varepsilon_i \sim N(0, \sigma^{*2}) \end{equation} % If $S_i$ falls between two thresholds, $\theta_{j-1}^* < S_i \leq \theta_j^*$ where % \begin{equation} \label{eq:thresholds} -\infty \equiv \theta_0^* < \theta_1^* < \ldots < \theta^*_{J-1} < \theta_{J}^* \equiv \infty \end{equation} % then $Y_i = j$ is observed and the cumulative probabilities are: % \begin{equation*} \gamma_{ij} = \Prob (Y_i \leq j) = \Prob(S_i \leq \theta_j^*) = \Prob \left( Z \leq \frac{\theta_j^* - \alpha^* - \bm x_i^\top \bm\beta^*}{% \sigma^*} \right) = \Phi ( \theta_j - \bm x_i^\top \bm\beta ) \end{equation*} % where $Z$ follows a standard normal distribution, $\Phi$ denotes the standard normal cumulative distribution function, parameters with an ``$^*$'' exist on the latent scale, $\theta_j = (\theta_j^* - \alpha^*) / \sigma^*$ and $\bm\beta = \bm\beta^* / \sigma^*$. Note that $\alpha^*$, $\bm\beta^*$ and $\sigma^*$ would have been identifiable if the latent variable $S$ was directly observed, but they are not identifiable with ordinal observations. If we allow a log-linear model for the scale such that % \begin{equation*} \varepsilon_i \sim N(0, \sigma^{*2}_i), \quad \sigma_i^* = \exp(\mu + \bm z_i^\top \bm\zeta) = \sigma^* \exp(\bm z_i^\top \bm\zeta) \end{equation*} % where $\bm z_i$ is the $i$'th row of a design matrix $\bm Z$ without a leading column for an intercept and $\sigma^* = \exp(\mu)$, then \begin{equation*} \gamma_{ij} = \Prob \left( Z \leq \frac{\theta_j^* - \alpha^* - \bm x_i^\top \bm\beta^*}{% \sigma^*_i} \right) = \Phi \left( \frac{\theta_j - \bm x_i^T \bm\beta}{\sigma_i} \right) \end{equation*} where $\sigma_i = \sigma_i^* / \sigma^* = \exp(\bm z_i^\top \bm\zeta)$ is the \emph{relative} scale. The common link functions: probit, logit, log-log, c-log-log and cauchit correspond to inverse cumulative distribution functions of the normal, logistic, Gumbel(max), Gumbel(min) and Cauchy distributions respectively. These distributions are all members of the location-scale family with common form $F(\mu, \sigma)$, with location $\mu$ and non-negative scale $\sigma$, for example, the logistic distribution has mean $\mu$ and standard deviation $\sigma \pi / \sqrt{3}$. Choosing a link function therefore corresponds to assuming a particular distribution for the latent variable $S$ in which $\bm x_i^\top \bm\beta$ and $\exp(\bm z_i^\top \bm\zeta)$ models location \emph{differences} and scale \emph{ratios} respectively of that distribution. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Structured thresholds} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Structured thresholds, $\{ g(\bm\alpha)_j \}$ makes it possible to impose restrictions on the thresholds $\bm\theta = g(\bm\alpha)$. For instance restricting the thresholds to be equidistant means that only the location of, say, the first threshold and the spacing between adjacent thresholds has to be estimated, thus only two parameters are used to parameterize the thresholds irrespective of the number of response categories. \pkg{ordinal} takes $g(\bm\alpha)$ to be a linear function and operates with \begin{equation*} g(\bm\alpha) = \mathcal{J}^\top \bm\alpha = \bm \theta \end{equation*} where the Jacobian $\mathcal{J}$ defines the mapping from the parameters $\bm\alpha$ to the thresholds $\bm\theta$. The traditional ordered but otherwise unrestricted thresholds are denoted \emph{flexible thresholds} and obtained by taking $\mathcal{J}$ to be an identity matrix. Assuming $J=6$ ordered categories, the Jacobians for equidistant and symmetric thresholds (denoted \code{equidistant} and \code{symmetric} in the \code{clm}-argument \code{threshold}) are \begin{equation*} \mathcal{J}_{\mathrm{equidistant}} = \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 0 & 1 & 2 & 3 & 4 \\ \end{bmatrix}, \quad \mathcal{J}_{\mathrm{symmetric}} = \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 0 & -1 & 0 & 1 & 0 \\ -1 & 0 & 0 & 0 & 1 \\ \end{bmatrix}. \end{equation*} Another version of symmetric thresholds (denoted \code{symmetric2}) is sometimes relevant with an unequal number of response categories here illustrated with $J=5$ together with the \code{symmetric} thresholds: \begin{equation*} \mathcal{J}_{\mathrm{symmetric2}} = \begin{bmatrix} 0 & -1 & 1 & 0 \\ -1 & 0 & 0 & 1 \\ \end{bmatrix}, \quad \mathcal{J}_{\mathrm{symmetric}} = \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 \\ -1 & 0 & 0 & 1 \\ \end{bmatrix} \end{equation*} The nature of $\mathcal{J}$ for a particular model can always be inspected by printing the \code{tJac} component of the \code{clm} fit. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Partial proportional odds and nominal effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The nominal effects $\bm w_i^\top\tilde{\bm\beta}_j$ can be considered an extension of the regression part of the model $\bm x_i^\top \bm\beta$ in which the regression effects are allowed to vary with $j$. % The nominal effects can also be considered an extension of the thresholds $\theta_j$ which allows them to depend on variables $\bm w_i^\top$: $\tilde{\theta}_{ij}(\bm w_i^\top) = \theta_j - \bm w_i^\top \tilde{\bm\beta}_j$ is the $j$'th threshold for the $i$'th observation. The following treatment assumes for latter view. In general let $\bm W$ denote the design matrix for the nominal effects without a leading column for an intercept; the nominal-effects parameter vector $\tilde{\bm\beta}_j$ is then $\mathrm{ncol}(\bm W)$ long and $\tilde{\bm\beta}$ is $\mathrm{ncol}(\bm W) \cdot (J-1)$ long. If $\bm W$ is the design matrix for the nominal effects containing a single column for a continuous variable then $\tilde{\beta}_j$ is the slope parameter corresponding to the $j$'th threshold and $\theta_j$ is the $j$'th intercept, i.e., the threshold when the covariate is zero. Looking at $\tilde{\theta}_{ij}(\bm w_i^\top) = \theta_j - \bm w_i^\top \tilde{\bm\beta}_j$ as a linear model for the thresholds facilitates the interpretation. If, on the other hand, $\bm W$ is the design matrix for a categorical variable (a \code{factor} in \proglang{R}) then the interpretation of $\tilde{\bm\beta}_j$ depends on the contrast-coding of $\bm W$. If we assume that the categorical variable has 3 levels, then $\tilde{\bm\beta}_j$ is a 2-vector. In the default treatment contrast-coding (\code{"contr.treatment"}) $\theta_j$ is the $j$'th threshold for the first (base) level of the factor, $\tilde{\beta}_{1j}$ is the differences between thresholds for the first and second level and $\tilde{\beta}_{2j}$ is the difference between the thresholds for the first and third level. In general we define $\bm\Theta$ as a matrix with $J-1$ columns and with 1 row for each combination of the levels of factors in $\bm W$. This matrix is available in the \code{Theta} component of the model fit. Note that variables in $\bm X$ cannot also be part of $\bm W$ if the model is to remain identifiable. \pkg{ordinal} detects this and automatically removes the offending variables from $\bm X$. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Flexible link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \pkg{ordinal} package allows for two kinds of flexible link functions due to \citet{aranda-ordaz83} and \citet{genter85}. The link function proposed by \citet{aranda-ordaz83} reads % \begin{equation*} F^{-1}_\lambda (\gamma_{ij}) = \log \left\{ \frac{(1 - \gamma_{ij})^{-\lambda} - 1} {\lambda} \right\}~, \end{equation*} which depends on the auxiliary parameter $\lambda \in ]0, \infty[$. When $\lambda = 1$, the logistic link function arise, and when $\lambda \rightarrow 0$, \begin{equation*} \{ (1 - \gamma_{ij})^{-\lambda} - 1 \} / \lambda \rightarrow \log (1 - \gamma_{ij})^{-1}~, \end{equation*} so the log-log link arise. The inverse link function and its derivative are given by \begin{align*} F(\eta) =&~ 1 - (\lambda \exp(\eta) + 1)^{-\lambda^{-1}} \\ f(\eta) =&~ \exp(\eta) (\lambda \exp(\eta) + 1)^{-\lambda^{-1} - 1} \end{align*} The density implied by the inverse link function is left-skewed if $0 < \lambda < 1$, symmetric if $\lambda = 1$ and right-skewed if $\lambda > 1$, so the link function can be used to assess the evidence about possible skewness of the latent distribution. The log-gamma link function proposed by \citet{genter85} is based on the log-gamma density by \citet{farewell77}. The cumulative distribution function and hence inverse link function reads \begin{equation*} F_\lambda(\eta) = \begin{cases} 1 - G(q; \lambda^{-2}) & \lambda < 0 \\ \Phi(\eta) & \lambda = 0 \\ G(q; \lambda^{-2}) & \lambda > 0 \end{cases} \end{equation*} where $q = \lambda^{-2}\exp(\lambda \eta)$ and $G(\cdot; \alpha)$ denotes the Gamma distribution with shape parameter $\alpha$ and unit rate parameter, and $\Phi$ denotes the standard normal cumulative distribution function. The corresponding density function reads \begin{equation*} f_\lambda(\eta) = \begin{cases} |\lambda| k^k \Gamma(k)^{-1} \exp\{ k(\lambda\eta - \exp(\lambda\eta)) \} & \lambda \neq 0 \\ \phi(\eta) & \lambda = 0 \end{cases} \end{equation*} where $k=\lambda^{-2}$, $\Gamma(\cdot)$ is the gamma function and $\phi$ is the standard normal density function. By attaining the Gumbel(max) distribution at $\lambda = -1$, the standard normal distribution at $\lambda = 0$ and the Gumbel(min) distribution at $\lambda = 1$ the log-gamma link bridges the log-log, probit and complementary log-log links providing right-skew, symmetric and left-skewed latent distributions in a single family of link functions. Note that choice and parameterization of the predictor, $\eta_{ij}$, e.g., the use of scale effects, can affect the evidence about the shape of the latent distribution. There are usually several link functions which provide essentially the same fit to the data and choosing among the good candidates is often better done by appealing to arguments such as ease of interpretation rather than arguments related to fit. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section[Implementation of ML Estimation of CLMs in ordinal]{Implementation of ML Estimation of CLMs in \pkg{ordinal}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In the \pkg{ordinal} package cumulative link models are (by default) estimated with a regularized Newton-Raphson (NR) algorithm with step-halving (line search) using analytical expressions for the gradient and Hessian of the negative log-likelihood function. This NR algorithm with analytical derivatives is used irrespective of whether the model contains structured thresholds, nominal effects or scale effects; the only exception being models with flexible link functions for which a general-purpose quasi-Newton optimizer is used. Due to computationally cheap and efficient evaluation of the analytical derivatives, the relative well-behaved log-likelihood function (with exceptions described below) and the speedy convergence of the Newton-Raphson algorithm, the estimation of CLMs is virtually instant on a modern computer even with complicated models on large datasets. This also facilitates simulation studies. More important than speed is perhaps that the algorithm is reliable and accurate. Technical aspects of the regularized NR algorithm with step-halving (line search) are described in appendix~\ref{sec:algorithm} and analytical gradients are described in detail in \citet{mythesis}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Properties of the log-likelihood function for extended CLMs} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \citet{pratt81} and \citet{burridge81} showed (seemingly independent of each other) that the log-likelihood function of the basic cumulative link model~(\ref{eq:BasicCLM}) is concave. This means that there is a unique global optimum of the log-likelihood function and therefore no risk of convergence to a local optimum. It also means that the Hessian matrix for the negative log-likelihood is strictly positive definite and therefore also that the Newton step is always in direction of higher likelihood. The genuine Newton step may be too long to actually cause an increase in likelihood from one iteration to the next (this is called ``overshoot''). This is easily overcome by successively halving the length of the Newton step until an increase in likelihood is achieved. Exceptions to the strict concavity of the log-likelihood function include models using the cauchit link, flexible link functions as well as models with scale effects. Notably models with structured thresholds as well as nominal effects do not affect the linearity of the predictor, $\eta_{ij}$ and so are also guaranteed to have concave log-likelihoods. The restriction of the threshold parameters $\{\theta_j\}$ being non-decreasing is dealt with by defining $\ell(\bm\theta, \bm\beta; y) = \infty$ when $\{\theta_j\}$ are not in a non-decreasing sequence. If the algorithm attempts evaluation at such illegal values step-halving effectively brings the algorithm back on track. Other implementations of CLMs re-parameterize $\{\theta_j\}$ such that the non-decreasing nature of $\{\theta_j\}$ is enforced by the parameterization, for example, \code{MASS::polr} (package version 7.3.49) optimize the likelihood using \begin{equation*} \tilde\theta_1 = \theta_1, ~\tilde{\theta}_2 = \exp(\theta_2 - \theta_1),~\ldots, ~ \tilde{\theta}_{J-1} = \exp(\theta_{J-2} - \theta_{J-1}) \end{equation*} This is deliberately not used in \pkg{ordinal} because the log-likelihood function is generally closer to quadratic in the original parameterization in our experience which facilitates faster convergence. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Starting values} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% For the basic CLMs~(\ref{eq:BasicCLM}) the threshold parameters are initialized to an increasing sequence such that the cumulative density of a logistic distribution between consecutive thresholds (and below the lowest or above the highest threshold) is constant. The regression parameters $\bm\beta$, scale parameters $\bm\zeta$ as well as nominal effect $\bm\beta^*$ are initialized to 0. If the model specifies a cauchit link or includes scale parameters estimation starts at the parameter estimates of a model using the probit link and/or without the scale-part of the model. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Estimation problems} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% With many nominal effects it may be difficult to find a model in which the threshold parameters are strictly increasing for all combinations of the parameters. Upon convergence of the NR algorithm the model evaluates the $\bm\Theta$-matrix and checks that each row of threshold estimates are increasing. When a continuous variable is included among the nominal effects it is often helpful if the continuous variable is centered at an appropriate value (at least within the observed range of the data). This is because $\{\theta_j\}$ represent the thresholds when the continuous variable is zero and $\{\theta_j\}$ are enforced to be a non-decreasing sequence. Since the nominal effects represent different slopes for the continuous variable the thresholds will necessarily be ordered differently at some other value of the continuous variable. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Convergence codes} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Irrespective of the fitting algorithm, \pkg{ordinal} reports the following convergence codes for CLMs in which negative values indicate convergence failure: % \begin{description} \item[-3] Not all thresholds are increasing. This is only possible with nominal effects and the resulting fit is invalid. \item[-2] The Hessian has at least one negative eigenvalue. This means that the point at which the algorithm terminated does not represent an optimum. \item[-1] Absolute convergence criterion (maximum absolute gradient) was not satisfied. This means that the algorithm couldn't get close enough to a stationary point of the log-likelihood function. \item[0] Successful convergence. \item[1] The Hessian is singular (i.e., at least one eigenvalue is zero). This means that some parameters are not uniquely determined. \end{description} % Note that with convergence code \textbf{1} the optimum of the log-likelihood function has been found although it is not a single point but a line (or in general a (hyper) plane), so while some parameters are not uniquely determined the value of the likelihood is valid enough and can be compared to that of other models. In addition to these convergence codes, the NR algorithm in \pkg{ordinal} reports the following messages: \begin{description} \item[0] Absolute and relative convergence criteria were met \item[1] Absolute convergence criterion was met, but relative criterion was not met \item[2] iteration limit reached \item[3] step factor reduced below minimum \item[4] maximum number of consecutive Newton modifications reached \end{description} Note that convergence is assessed irrespective of potential messages from the fitting algorithm and irrespective of whether the tailored NR algorithm or a general-purpose quasi-Newton optimizer is used. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section[Fitting cumulative link models in ordinal with clm]{Fitting cumulative link models in \pkg{ordinal} with \code{clm}} \label{sec:fitting-clms} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \code{clm} function takes the following arguments: % <>= clm_args <- gsub("function ", "clm", deparse(args(clm))) cat(paste(clm_args[-length(clm_args)], "\n")) @ % Several arguments are standard and well-known from \code{lm} and \code{glm} and will not be described in detail; \code{formula}, \code{data}, \code{weights}, \code{subset} and \code{na.action} are all parts of the standard model specification in \proglang{R}. \code{scale} and \code{nominal} are interpreted as \proglang{R}-formulae with no left hand sides and specifies the scale and nominal effects of the model respectively, see sections~\ref{sec:scale-effects} and \ref{sec:nominal-effects} for details; \code{start} is an optional vector of starting values; \code{doFit} can be set to \code{FALSE} to prompt \code{clm} to return a model \emph{environment}, for details see section~\ref{sec:customized-modelling}; \code{model} controls whether the \code{model.frame} should be included in the returned model fit; \code{link} specifies the link function and \code{threshold} specifies an optional threshold structure, for details see section~\ref{sec:threshold-effects}. Note the absence of a separate \code{offset} argument. Since \code{clm} allows for different offsets in \code{formula} and \code{scale}, offsets have to be specified within a each formulae, e.g., \verb!scale = ~ x1 + offset(x2)!. Methods for \code{clm} model fits are summarized in Table~\ref{tab:clm_methods} and introduced in the following sections. Control parameters can either be specified as a named list, among the optional \code{...} arguments, or directly as a call to \code{clm.control} --- in the first two cases the arguments are passed on to \code{clm.control}. \code{clm.control} takes the following arguments: % <>= cc_args <- gsub("function ", "clm.control", deparse(args(clm.control))) cat(paste(cc_args[-length(cc_args)], "\n")) @ % The \code{method} argument specifies the optimization and/or return method. The default estimation method (\code{Newton}) is the regularized Newton-Raphson estimation scheme described in section~\ref{sec:algorithm}; options \code{model.frame} and \code{design} prompts \code{clm} to return respectively the \code{model.frame} and a list of objects that represent the internal representation instead of fitting the model; options \code{ucminf}, \code{nlminb} and \code{optim} represent different general-purpose optimizers which may be used to fit the model (the former from package \pkg{ucminf} \citep{ucminf}, the latter two from package \pkg{stats}). The \code{sign.location} and \code{sign.nominal} options allow the user to flip the signs on the location and nominal model terms. The \code{convergence} argument instructs \code{clm} how to alert the user of potential convergence problems; \code{...} are optional arguments passed on to the general purpose optimizers; \code{trace} applies across all optimizers and positive values lead to printing of progress during iterations; the remaining arguments (\code{maxIter, gradTol, maxLineIter, relTol, tol}) control the behavior of the regularized NR algorithm described in appendix~\ref{sec:algorithm}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection[Fitting a basic cumulative link model with clm]{Fitting a basic cumulative link model with \code{clm}} \label{sec:fitting-basic-clm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In the following examples we will use the wine data from \citet{randall89} available in the object \code{wine} in package \pkg{ordinal}, cf., Table~\ref{tab:wineData}. The data represent a factorial experiment on factors determining the bitterness of wine with 1 = ``least bitter'' and 5 = ``most bitter''. Two treatment factors (temperature and contact) each have two levels. Temperature and contact between juice and skins can be controlled when crushing grapes during wine production. Nine judges each assessed wine from two bottles from each of the four treatment conditions, hence there are 72 observations in all. The main objective is to examine the effect of contact and temperature on the perceived bitterness of wine. \begin{table}[t!] \centering \begin{tabular}{llrrrrr} \hline & & \multicolumn{5}{c}{Least---Most bitter} \\ \cline{3-7} <>= ## data(wine) tab <- with(wine, table(temp:contact, rating)) mat <- cbind(rep(c("cold", "warm"), each = 2), rep(c("no", "yes"), 2), tab) colnames(mat) <- c("Temperature", "Contact", paste("~~", 1:5, sep = "")) xtab <- xtable(mat) print(xtab, only.contents = TRUE, include.rownames = FALSE, sanitize.text.function = function(x) x) @ \end{tabular} \caption{The number of ratings from nine judges in bitterness categories 1 --- 5. Wine data from \citet{randall89} aggregated over bottles and judges.% \label{tab:wineData}} \end{table}% Initially we consider the following cumulative link model for the wine data: \begin{equation} \label{eq:CLM} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j - \beta_1 (\mathtt{temp}_i) - \beta_2(\mathtt{contact}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation}% % where $\beta_1(\mathtt{temp}_i)$ attains the values $\beta_1(\mathtt{cold})$ and $\beta_1(\mathtt{warm})$, and $\beta_2(\mathtt{contact}_i)$ attains the values $\beta_2(\mathtt{no})$ and $\beta_2(\mathtt{yes})$. The effect of temperature in this model is illustrated in Figure~\ref{fig:standard_clm}. This is a model for the cumulative probability of the $i$th rating falling in the $j$th category or below, where $i$ index all observations ($n=72$), $j = 1, \ldots, J$ index the response categories ($J = 5$) and $\theta_j$ is the intercept or threshold for the $j$th cumulative logit: $\textup{logit}(P(Y_i \leq j))$. Fitting the model with \code{clm} we obtain: <<>>= library("ordinal") fm1 <- clm(rating ~ temp + contact, data = wine) summary(fm1) @ The \code{summary} method prints basic information about the fitted model. % most of which is self explanatory. % The primary result is the coefficient table with parameter estimates, standard errors and Wald based $p$~values for tests of the parameters being zero. If one of the flexible link functions (\code{link = "log-gamma"} or \code{link = "Aranda-Ordaz"}) is used a coefficient table for the link parameter, $\lambda$ is also included. The maximum likelihood estimates of the model coefficients are:% % \begin{equation} \label{eq:parameters} \begin{gathered} \hat\beta_1(\mathtt{warm} - \mathtt{cold})= 2.50, ~~\hat\beta_2(\mathtt{yes} - \mathtt{no}) = 1.53, \\ \{\hat\theta_j\} = \{-1.34,~ 1.25,~ 3.47,~ 5.01\}. \end{gathered} \end{equation} % The coefficients for \code{temp} and \code{contact} are positive indicating that higher temperature and contact increase the bitterness of wine, i.e., rating in higher categories is more likely. % Because the treatment contrast coding which is the default in \proglang{R} was used, $\{\hat\theta_j\}$ refers to the thresholds at the setting with $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{no}$. % Three natural and complementing interpretations of this model are % \begin{enumerate} \item The thresholds $\{ \hat\theta_j \}$ at $\mathtt{contact}_i = \mathtt{yes}$ conditions have been shifted a constant amount $1.53$ relative to the thresholds $\{ \hat\theta_j \}$ at $\mathtt{contact}_i = \mathtt{no}$ conditions. \item The location of the latent distribution has been shifted $+1.53 \sigma^*$ (scale units) at $\mathtt{contact}_i = \mathtt{yes}$ relative to $\mathtt{contact}_i = \mathtt{no}$. \item The odds ratio of bitterness being rated in category $j$ or above ($\mathrm{OR}(Y \geq j)$) is $\exp(\hat\beta_2(\mathtt{yes} - \mathtt{no})) = 4.61$. \end{enumerate} % Note that there are no $p$~values displayed for the threshold coefficients because it usually does not make sense to test the hypothesis that they equal zero. \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-fig2} \caption{Illustration of the effect of temperature in the standard cumulative link model in Equation~\ref{eq:CLM} for the wine data in Table~\ref{tab:wineData} through a latent variable interpretation.\label{fig:standard_clm}} \end{figure} The number of Newton-Raphson iterations is given below \code{niter} with the number of step-halvings in parenthesis. \code{max.grad} is the maximum absolute gradient of the log-likelihood function with respect to the parameters. % The condition number of the Hessian (\code{cond.H}) is well below $10^4$ and so does not indicate a problem with the model. The \code{anova} method produces an analysis of deviance (ANODE) table also based on Wald $\chi^2$-tests and provides tables with type I, II and III hypothesis tests using the \proglang{SAS} definitions. A type I table, the \proglang{R} default for linear models fitted with \code{lm}, sequentially tests terms from first to last, type II tests attempt to respect the principle of marginality and test each term after all others while ignoring higher order interactions, and type III tables are based on orthogonalized contrasts and tests of main effects or lower order terms can often be interpreted as averaged over higher order terms. Note that in this implementation any type of contrasts (e.g., \code{contr.treatment} or \code{contr.SAS} as well as \code{contr.sum}) can be used to produce type III tests. For further details on the interpretation and definition of type I, II and III tests, please see \citep{kuznetsova17} and \citep{SAStype}. Here we illustrate with a type III ANODE table, which in this case is equivalent to type I and II tables since the variables are balanced: <<>>= anova(fm1, type = "III") @ Likelihood ratio tests, though asymptotically equivalent to the Wald tests usually better reflect the evidence in the data. These tests can be obtained by comparing nested models with the \code{anova} method, for example, the likelihood ratio test of \code{contact} is <<>>= fm2 <- clm(rating ~ temp, data = wine) anova(fm2, fm1) @ which in this case produces a slightly lower $p$~value. Equivalently we can use \code{drop1} to obtain likelihood ratio tests of the explanatory variables while \emph{controlling} for the remaining variables: <<>>= drop1(fm1, test = "Chi") @ Likelihood ratio tests of the explanatory variables while \emph{ignoring} the remaining variables are provided by the \code{add1} method: <<>>= fm0 <- clm(rating ~ 1, data = wine) add1(fm0, scope = ~ temp + contact, test = "Chi") @ % Confidence intervals of the parameter estimates are provided by the \code{confint} method which by default compute the so-called profile likelihood confidence intervals: <<>>= confint(fm1) @ The cumulative link model in Equation~\ref{eq:CLM} assumes that the thresholds, $\{\theta_j\}$ are constant for all values of the remaining explanatory variables, here \code{temp} and \code{contact}. This is generally referred to as the \emph{proportional odds assumption} or \emph{equal slopes assumption}. We can relax this assumption in two general ways: with nominal effects and scale effects examples of which will now be presented in turn. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Partial and non-proportional odds: nominal effects} \label{sec:nominal-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The CLM in Equation~\ref{eq:CLM} specifies a structure in which the regression parameters, $\bm\beta$ are not allowed to vary with $j$ or equivalently that the threshold parameters $\{\theta_j\}$ are not allowed to depend on regression variables. In the following model this assumption is relaxed and the threshold parameters are allowed to depend on \code{contact}. This leads to the so-called partial proportional odds for \code{contact}: % \begin{equation} \label{eq:CLM_nominal} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j + \tilde{\beta}_{j} (\mathtt{contact}_i) - \beta (\mathtt{temp}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation} % One way to view this model is to think of two sets of thresholds being applied at conditions with and without contact as illustrated in Figure~\ref{fig:clm_nominal}. The model is specified as follows with \code{clm}: <<>>= fm.nom <- clm(rating ~ temp, nominal = ~ contact, data = wine) summary(fm.nom) @ As can be seen from the output of \code{summary} there are no regression coefficient estimated for \code{contact}, but there are additional threshold coefficients estimated instead. % The naming and meaning of the threshold coefficients depend on the contrast coding applied to \code{contact}. Here the \proglang{R} default treatment contrasts (\code{"contr.treatment"}) are used. Here coefficients translate to the following parameter functions: \begin{equation} \label{eq:nom_parameters} \begin{gathered} \hat\beta(\mathtt{warm} - \mathtt{cold})= 2.52, \\ \{\hat\theta_j\} = \{-1.32,~ 1.25,~ 3.55,~ 4.66\}, \\ \{ \hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}) \} = \{-1.62,~ -1.51,~ -1.67,~ -1.05\}. \end{gathered} \end{equation} % Again $\{ \theta_j \}$ refer to the thresholds at $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{no}$ settings while the thresholds at $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{yes}$ are $\{ \hat\theta_j + \hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}) \}$. % The odds ratio of bitterness being rated in category $j$ or above ($\mathrm{OR}(Y \geq j)$) now depend on $j$: $\{\exp(-\hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}))\} = \{ 5.03,~ 4.53,~ 5.34,~ 2.86\}$. % \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figNom2} \caption{Illustration of nominal effects leading to different sets of thresholds being applied for each level of \code{contact} in a latent variable interpretation, cf., Equation~\ref{eq:CLM_nominal}.\label{fig:clm_nominal}} \end{figure} The resulting thresholds for each level of \code{contact}, i.e., the estimated $\bm\Theta$-matrix can be extracted with: <<>>= fm.nom$Theta @ As part of the convergence checks, \code{clm} checks the validity of $\bm\Theta$, i.e., that each row of the threshold matrix is non-decreasing. We can perform a likelihood ratio test of the proportional odds assumption for \code{contact} by comparing the likelihoods of models (\ref{eq:CLM}) and (\ref{eq:CLM_nominal}) as follows: <<>>= anova(fm1, fm.nom) @ There is only little difference in the log-likelihoods of the two models and the test is insignificant. Thus there is no evidence that the proportional odds assumption is violated for \code{contact}. It is not possible to estimate both $\beta_2(\mathtt{contact}_i)$ and $\tilde{\beta}_{j}(\mathtt{contact}_i)$ in the same model. Consequently variables that appear in \code{nominal} cannot enter in \code{formula} as well. For instance, not all parameters are identifiable in the following model: <<>>= fm.nom2 <- clm(rating ~ temp + contact, nominal = ~ contact, data = wine) @ We are made aware of this when summarizing or printing the model in which the coefficient for \code{contactyes} is \code{NA}: <<>>= fm.nom2 @ To test the proportional odds assumption for all variables, we can use <<>>= nominal_test(fm1) @ This function \emph{moves} all terms in \code{formula} to \code{nominal} and \emph{copies} all terms in \code{scale} to \code{nominal} one by one and produces an \code{add1}-like table with likelihood ratio tests of each term. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Modelling scale effects} \label{sec:scale-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % To allow the scale of the latent variable distribution to depend on explanatory variables we could for instance consider the following model where the scale is allowed to differ between cold and warm conditions. The location of the latent distribution is allowed to depend on both temperature and contact: \begin{equation} \label{eq:CLM_scale_wine} \begin{gathered} \textup{logit}(P(Y_i \leq j)) = \frac{\theta_j - \beta_1 (\mathtt{temp}_i) - \beta_{2} (\mathtt{contact}_i)} {\exp( \zeta (\mathtt{temp}_i))} \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{gathered} \end{equation} This model structure is illustrated in Figure~\ref{fig:clm_scale} and can be estimated with: <<>>= fm.sca <- clm(rating ~ temp + contact, scale = ~ temp, data = wine) summary(fm.sca) @ In a latent variable interpretation the location of the latent distribution is shifted $2.63\sigma^*$ (scale units) from cold to warm conditions and $1.59\sigma^*$ from absence to presence of contact. The scale of the latent distribution is $\sigma^*$ at cold conditions but $\sigma^* \exp(\zeta(\mathtt{warm} - \mathtt{cold})) = \sigma^*\exp(0.095) = 1.10 \sigma^*$, i.e., 10\% higher, at warm conditions. However, observe that the $p$~value for the scale effect in the summary output shows that the ratio of scales is not significantly different from 1 (or equivalently that the difference on the log-scale is not different from 0). Scale effects offer an alternative to nominal effects (partial proportional odds) when non-proportional odds structures are encountered in the data. Using scale effects is often a better approach because the model is well-defined for all values of the explanatory variables irrespective of translocation and scaling of covariates. Scale effects also use fewer parameters which often lead to more sensitive tests than nominal effects. Potential scale effects of variables already included in \code{formula} can be discovered using \code{scale_test}. This function adds each model term in \code{formula} to \code{scale} in turn and reports the likelihood ratio statistic in an \code{add1}-like fashion: <<>>= scale_test(fm1) @ \code{confint} and \code{anova} methods apply with no change to models with scale and nominal parts, but \code{drop1}, \code{add1} and \code{step} methods will only drop or add terms to the (location) \code{formula}. \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figSca} \caption{Illustration of scale effects leading to different scales of the latent variable, cf., Equation~\ref{eq:CLM_scale_wine}.\label{fig:clm_scale}} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Structured thresholds} \label{sec:threshold-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In section~\ref{sec:nominal-effects} nominal effects were described where the assumption that regression parameters have the same effect across all thresholds was relaxed. In this section additional restrictions on the thresholds will be imposed instead. The following model requires that the thresholds, $\{ \theta_j \}$ are equidistant or equally spaced. This allows us to assess an assumption that judges are using the response scale in such a way that there is the same distance between adjacent response categories, i.e., that $\theta_j - \theta_{j-1} = \textup{constant}$ for $j = 2, ..., J-1$. The effect of equidistant thresholds is illustrated in Figure~\ref{fig:clm_structured_thresholds} and can be fitted with: <<>>= fm.equi <- clm(rating ~ temp + contact, data = wine, threshold = "equidistant") summary(fm.equi) @ The parameters determining the thresholds are now the first threshold (\code{threshold.1}) and the spacing among consecutive thresholds (\code{spacing}). The mapping to this parameterization is stored in the transpose of the Jacobian matrix (\code{tJac}) component of the model fit. This makes it possible to extract the thresholds imposed by the equidistance structure with <<>>= drop(fm.equi$tJac %*% coef(fm.equi)[c("threshold.1", "spacing")]) @ These thresholds are in fact already stored in the \code{Theta} component of the model fit. % The following shows that the average distance between consecutive thresholds in \code{fm1} which did not restrict the thresholds is very close to the \code{spacing} parameter from \code{fm.equi}: <<>>= mean(diff(coef(fm1)[1:4])) @ One advantage of imposing additional restrictions on the thresholds is the use of fewer parameters. Whether the restrictions are warranted by the data can be assessed in a likelihood ratio test: <<>>= anova(fm1, fm.equi) @ In this case the test is non-significant, so there is no considerable loss of fit at the gain of saving two parameters, hence we may retain the model with equally spaced thresholds. Note that the shape of the latent distribution (determined by the choice of link function) also affects the distances between the thresholds. If thresholds are equidistant under a normal distribution (i.e., with the logit link) they will in general\footnote{The exception is perfect fits such as CLMs with flexible thresholds and no predictors where models have the same likelihood irrespective of link function.} not be equidistant under a differently shaped latent distribution such as a skew latent distribution (e.g., with the log-log or clog-log link). \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figFlex} \includegraphics[width=6cm]{./static_figs/fig-figEqui} \caption{Illustration of flexible (left) and equidistant (right) thresholds being applied in a cumulative link model in a latent variable interpretation.\label{fig:clm_structured_thresholds}} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Scale effects, nominal effects and link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This section presents an example that connects aspects of scale effects, nominal effects and link functions. The example is based on the \code{soup} data available in the \pkg{ordinal} package. This dataset represents a sensory discrimination study of packet soup in which 185 respondents assessed a reference product and one of 5 test products on an ordinal sureness-scale with 6 levels from "reference, sure" to "test, sure". The two key explanatory variables in this example are \code{PRODID} and \code{PROD}. \code{PRODID} identifies all 6 products while \code{PROD} distinguishes test and reference products: <<>>= with(soup, table(PROD, PRODID)) @ The so-called bi-normal model plays a special role in the field of signal detection theory \citep{decarlo98, macmillan05} and in sensometrics \citep{christensen11} and assumes the existence of normal latent distributions potentially with different variances. The bi-normal model can be fitted to ordinal data by identifying it as a CLM with a probit link. The following bi-normal model assumes that the location of the normal latent distribution depends on \code{PRODID} while the scale only varies with \code{PROD}: <<>>= fm_binorm <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="probit") summary(fm_binorm) @ Here we observe significant differences in scale for reference and test products and this is an example of what would have been denoted non-proportional odds had the link function been the logit function. In this context differences in scale are interpreted to mean that a location shift of the latent normal distribution is not enough to represent the data. Another test of such non-location effects is provided by the nominal effects: <<>>= fm_nom <- clm(SURENESS ~ PRODID, nominal = ~ PROD, data = soup, link="probit") @ A comparison of these models shows that the scale effects increase the likelihood substantially using only one extra parameter. The addition of nominal effects provides a smaller increase in likelihood using three extra parameters: <<>>= fm_location <- update(fm_binorm, scale = ~ 1) anova(fm_location, fm_binorm, fm_nom) @ Note that both the location-only and bi-normal models are nested under the model with nominal effects making these models comparable in likelihood ratio tests. This example illustrates an often seen aspect: that models allowing for scale differences frequently capture the majority of deviations from location-only effects that could otherwise be captured by nominal effects using fewer parameters. The role of link functions in relation to the evidence of non-location effects is also illustrated by this example. If we consider the complementary log-log link it is apparent that there is no evidence of scale differences. Furthermore, the likelihood of a complementary log-log model with constant scale is almost the same as that of the bi-normal model: <<>>= fm_cll_scale <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="cloglog") fm_cll <- clm(SURENESS ~ PRODID, data = soup, link="cloglog") anova(fm_cll, fm_cll_scale, fm_binorm) @ Using the log-gamma link we can also confirm that a left-skewed latent distribution ($\lambda > 0$) is best supported by the data and that the estimate of $\lambda$ is close to 1 at which the complementary log-log link is obtained: <<>>= fm_loggamma <- clm(SURENESS ~ PRODID, data = soup, link="log-gamma") summary(fm_loggamma) @ The analysis of link functions shown here can be thought of as providing a framework analogous to that of Box-Cox transformations for linear models. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Profile likelihood} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In addition to facilitating the generally quite accurate profile likelihood confidence intervals which were illustrated in section~\ref{sec:fitting-basic-clm}, the profile likelihood function can also be used to illustrate the relative importance of parameter values. As an example, the profile likelihood of model coefficients for \code{temp} and \code{contact} in \code{fm1} can be obtained with % <>= pr1 <- profile(fm1, alpha = 1e-4) plot(pr1) @ The resulting plots are provided in Figure~\ref{fig:ProfileLikelihood}. The \code{alpha} argument controls how far from the maximum likelihood estimate the likelihood function should be profiled: the profile strays no further from the MLE when values outside an (\code{1 - alpha})-level profile likelihood confidence interval. From the relative profile likelihood in Figure~\ref{fig:ProfileLikelihood} for \code{tempwarm} we see that parameter values between 1 and 4 are reasonably well supported by the data, and values outside this range has little likelihood. Values between 2 and 3 are very well supported by the data and have high likelihood. \setkeys{Gin}{width=.45\textwidth} \begin{figure} \centering <>= plot(pr1, which.par = 1) @ <>= plot(pr1, which.par = 2) @ \caption{Relative profile likelihoods for the regression parameters in \code{fm1} for the wine data. Horizontal lines indicate 95\% and 99\% confidence bounds.} \label{fig:ProfileLikelihood} \end{figure} Profiling is implemented for regression ($\beta$) and scale ($\zeta$) parameters but not available for threshold, nominal and flexible link parameters. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Assessment of model convergence} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Likelihood slices} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The maximum likelihood estimates of the parameters in cumulative link models do not have closed form expressions, so iterative methods have to be applied to fit the models. Further, CLMs are non-linear models and in general the likelihood function is not guaranteed to be well-behaved or even uni-model. In addition, the special role of the threshold parameters and the restriction on them being ordered can affect the appearance of the likelihood function. To confirm that an unequivocal optimum has been reached and that the likelihood function is reasonably well-behaved around the reported optimum we can inspect the likelihood function in a neighborhood around the reported optimum. For these purposes we can display slices of the likelihood function. The following code produces the slices shown in Figure~\ref{fig:slice1} which displays the shape of the log-likelihood function in a fairly wide neighborhood around the reported MLE; here we use $\lambda=5$ curvature units, as well as it's quadratic approximation. <<>>= slice.fm1 <- slice(fm1, lambda = 5) par(mfrow = c(2, 3)) plot(slice.fm1) @ Figure~\ref{fig:slice1} shows that log-likelihood function is fairly well behaved and relatively closely quadratic for most parameters. \setkeys{Gin}{width=.32\textwidth} \begin{figure} \centering <>= plot(slice.fm1, parm = 1) @ <>= plot(slice.fm1, parm = 2) @ <>= plot(slice.fm1, parm = 3) @ <>= plot(slice.fm1, parm = 4) @ <>= plot(slice.fm1, parm = 5) @ <>= plot(slice.fm1, parm = 6) @ \caption{Slices of the (negative) log-likelihood function (solid) for parameters in \code{fm1} for the wine data. Dashed lines indicate quadratic approximations to the log-likelihood function and vertical bars indicate maximum likelihood estimates.} \label{fig:slice1} \end{figure} Looking at the log-likelihood function much closer to the reported optimum (using $\lambda = 10^{-5}$) we can probe how accurately the parameter estimates are determined. The likelihood slices in Figure~\ref{fig:slice2} which are produced with the following code shows that the parameters are determined accurately with at least 5 correct decimals. Slices are shown for two parameters and the slices for the remaining 4 parameters are very similar. <>= slice2.fm1 <- slice(fm1, parm = 4:5, lambda = 1e-5) par(mfrow = c(1, 2)) plot(slice2.fm1) @ \setkeys{Gin}{width=.45\textwidth} \begin{figure} \centering <>= plot(slice2.fm1, parm = 1) @ <>= plot(slice2.fm1, parm = 2) @ \caption{Slices of the (negative) log-likelihood function (solid) for parameters in \code{fm1} for the wine data very close to the MLEs. Dashed lines (indistinguishable from the solid lines) indicate quadratic approximations to the log-likelihood function and vertical bars the indicate maximum likelihood estimates.} \label{fig:slice2} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Parameter accuracy} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% As discussed in section~\ref{sec:algorithm} the method independent error estimate provides an assessment of the accuracy with which the ML estimates of the parameters have been determined by the fitting algorithm. This error estimate is implemented in the \code{convergence} method which we now illustrate on a model fit: <<>>= convergence(fm1) @ The most important information is the number of correct decimals (\code{Cor.Dec}) and the number of significant digits (\code{Sig.Dig}) with which the parameters are determined. In this case all parameters are very accurately determined, so there is no reason to lower the convergence tolerance. The \code{logLik.error} shows that the error in the reported value of the log-likelihood is below $10^{-10}$, which is by far small enough that likelihood ratio tests based on this model are accurate. Note that the assessment of the number of correctly determined decimals and significant digits is only reliable sufficiently close to the optimum so in practice we caution against this assessment if the algorithm did not converge successfully. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Fitted values and predictions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Several types of fitted values and predictions can be extracted from a CLM depending on how it is viewed. By \emph{fitted values} we denote the values ($i=1, \ldots, n$) \begin{equation*} \hat{\tilde\pi}_i = \tilde\pi_i(\hat{\bm\psi}) \end{equation*} that is, the value of $\tilde\pi_i$, cf., Equation~\ref{eq:clm-log-likelihood} evaluated at the ML estimates $\hat{\bm\psi}$. These are the values returned by the \code{fitted} and \code{fitted.values} extractor methods and stored in the \code{fitted.values} component of the model fit. The values of $\pi_{ij}$ (cf., Equation~\ref{eq:multinom_pmf}) evaluated at the ML estimates of the parameters (i.e., $\hat\pi_{ij}$) can also be thought of as fitted values for the multinomially distributed variable $\bm Y_i^*$. These values can be obtained from the model fit by use of the \code{predict} method: <<>>= head(pred <- predict(fm1, newdata = subset(wine, select = -rating))$fit) @ Note that the original data set should be supplied in the \code{newdata} argument \emph{without} the response variable (here \code{rating}). If the response variable is \emph{present} in \code{newdata} predictions are produced for only those rating categories which were observed and we get back the fitted values: <<>>= stopifnot(isTRUE(all.equal(fitted(fm1), t(pred)[ t(col(pred) == wine$rating)])), isTRUE(all.equal(fitted(fm1), predict(fm1, newdata = wine)$fit))) @ Class predictions are also available and defined here as the response class with the highest probability, that is, for the $i$'th observation the class prediction is the mode of $\bm\pi_{i}$. To obtain class predictions use \code{type = "class"} as illustrated in the following small table: <<>>= newData <- expand.grid(temp = levels(wine$temp), contact = levels(wine$contact)) cbind(newData, round(predict(fm1, newdata = newData)$fit, 3), "class" = predict(fm1, newdata = newData, type = "class")$fit) @ Other definitions of class predictions can be applied, e.g., nearest mean predictions: <<>>= head(apply(pred, 1, function(x) round(weighted.mean(1:5, x)))) @ which in this case happens to be identical to the default class predictions. <>= p1 <- apply(predict(fm1, newdata = subset(wine, select=-rating))$fit, 1, function(x) round(weighted.mean(1:5, x))) p2 <- as.numeric(as.character(predict(fm1, type = "class")$fit)) stopifnot(isTRUE(all.equal(p1, p2, check.attributes = FALSE))) @ Standard errors and confidence intervals of predictions are also available, for example: <<>>= predictions <- predict(fm1, se.fit = TRUE, interval = TRUE) head(do.call("cbind", predictions)) @ where the default 95\% confidence level can be changed with the \code{level} argument. Here the standard errors of fitted values or predictions, $\hat{\tilde{\pi}} = \tilde{\pi}(\hat{\bm\psi})$ are obtained by application of the delta method: \begin{equation*} \mathsf{Var}(\hat{\tilde{\bm\pi}}) = \bm C \mathsf{Var}(\hat{\bm\psi}) \bm C^\top, \quad \bm C = \frac{\partial \tilde{\bm\pi}(\bm\psi)}{\partial \bm\psi} \Big|_{\bm\psi = \hat{\bm\psi}} \end{equation*} where $\mathsf{Var}(\hat{\bm\psi})$ is the estimated variance-covariance matrix of the parameters $\bm\psi$ evaluated at the ML estimates $\hat{\bm\psi}$ as given by the observed Fisher Information matrix and finally the standard errors are extracted as the square root of the diagonal elements of $\mathsf{Var}(\hat{\tilde{\bm\pi}})$. Since symmetric confidence intervals for probabilities are not appropriate unless perhaps if they are close to one half a more generally applicable approach is to form symmetric Wald intervals on the logit scale and then subsequently transform the confidence bounds to the probability scale. \code{predict.clm} takes this approach and computes the standard error of $\hat\kappa_i = \mathrm{logit}(\hat{\tilde{\pi}}_i)$ by yet an application of the delta method: \begin{equation*} \mathrm{se}(\hat\kappa_i) = \frac{\partial g(\hat{\tilde{\pi}}_i)}{\partial \hat{\tilde{\pi}}_i} \mathrm{se}(\hat{\tilde{\pi}}_i) = \frac{\mathrm{se}(\hat{\tilde{\pi}}_i)}{% \hat{\tilde{\pi}}_i(1 - \hat{\tilde{\pi}}_i)}, \quad g(\hat{\tilde{\pi}}_i) = \log \frac{\hat{\tilde{\pi}}_i}{1 - \hat{\tilde{\pi}}_i}. \end{equation*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Model identifiability} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Unidentifiable models or unidentifiable parameters may happen in CLMs for several reasons some of which are special to the model class. In this section we describe issues around model identifiability and how this is handled by \code{ordinal::clm}. Material in the remainder of this section is generally on a more advanced level than up to now. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Complete separation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In binary logistic regression the issue of \emph{complete separation} is well known. This may happen, for example if only ``success'' or only ``failure'' is observed for a level of a treatment factor. In CLMs the issue may appear even when outcomes are observed in more than one response category. This can be illustrated using the \code{wine} data set if we combine the three central categories: <<>>= wine <- within(wine, { rating_comb3 <- factor(rating, labels = c("1", "2-4", "2-4", "2-4", "5")) }) ftable(rating_comb3 ~ temp, data = wine) fm.comb3 <- clm(rating_comb3 ~ temp, data = wine) summary(fm.comb3) @ Here the true ML estimates of the coefficients for \code{temp} and the second threshold are at infinity but the algorithm in \code{clm} terminates when the likelihood function is sufficiently flat. This means that the reported values of the coefficients for \code{temp} and the second threshold are arbitrary and will change if the convergence criteria are changed or a different optimization method is used. The standard errors of the coefficients are not available because the Hessian is effectively singular and so cannot be inverted to produce the variance-covariance matrix of the parameters. The ill-determined nature of the Hessian is seen from the very large condition number of the Hessian, \code{cond.H}. Note, however, that while the model parameters cannot be uniquely determined, the likelihood of the model is well defined and as such it can be compared to the likelihood of other models. For example, we could compare it to a model that excludes \code{temp} <<>>= fm.comb3_b <- clm(rating_comb3 ~ 1, data = wine) anova(fm.comb3, fm.comb3_b) @ The difference in log-likelihood is substantial, however, the criteria for the validity of the likelihood ratio test are not fulfilled, so the $p$~value should not be taken at face value. The complete-separation issue may also appear in less obvious situations. If, for example, the following model is considered allowing for nominal effects of \code{temp} the issue shows up: <<>>= fm.nom2 <- clm(rating ~ contact, nominal = ~ temp, data = wine) summary(fm.nom2) @ Analytical detection of which coefficients suffer from unidentifiability due to \emph{complete separation} is a topic for future research and therefore unavailable in current versions of \pkg{ordinal}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Aliased coefficients} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Aliased coefficients can occur in all kinds of models that build on a design matrix including linear models as well as generalized linear models. \code{lm} and \code{glm} determine the rank deficiency of the design matrix using the rank-revealing implementation of the QR-decomposition in \code{LINPACK} and displays the aliased coefficients as \code{NA}s\footnote{if the \code{singular.ok = TRUE} which is the default.}. Though the QR decomposition is not used during iterations in \code{clm}, it is used initially to determine aliased coefficients. An example is provided using the \code{soup} data available in the \pkg{ordinal} package: <<>>= fm.soup <- clm(SURENESS ~ PRODID * DAY, data = soup) summary(fm.soup) @ The source of the singularity is revealed in the following table: <<>>= with(soup, table(DAY, PRODID)) @ which shows that the third \code{PRODID} was not presented at the second day. The issue of aliased coefficients extends in CLMs to nominal effects since the joint design matrix for location and nominal effects will be singular if the same variables are included in both location and nominal formulae. \code{clm} handles this by not estimating the offending coefficients in the location formula as illustrated with the \code{fm.nom2} model fit in section~\ref{sec:nominal-effects}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Over parameterization} \label{sec:over-parameterization} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The scope of model structures allowed in \code{clm} makes it possible to specify models which are over parameterized in ways that do not lead to rank deficient design matrices and as such are not easily detected before fitting the model. An example is given here which includes both additive (location) and multiplicative (scale) effects of \code{contact} for a binomial response variable but the issue can also occur with more than two response categories: <<>>= wine <- within(wine, { rating_comb2 <- factor(rating, labels = c("1-2", "1-2", "3-5", "3-5", "3-5")) }) ftable(rating_comb2 ~ contact, data = wine) fm.comb2 <- clm(rating_comb2 ~ contact, scale = ~ contact, data = wine) summary(fm.comb2) @ <>= ## Example with unidentified parameters with 3 response categories ## not shown in paper: wine <- within(wine, { rating_comb3b <- rating levels(rating_comb3b) <- c("1-2", "1-2", "3", "4-5", "4-5") }) wine$rating_comb3b[1] <- "4-5" # Remove the zero here to avoid inf MLE ftable(rating_comb3b ~ temp + contact, data = wine) fm.comb3_c <- clm(rating_comb3b ~ contact * temp, scale = ~contact * temp, nominal = ~contact, data = wine) summary(fm.comb3_c) convergence(fm.comb3_c) @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Customized modelling} \label{sec:customized-modelling} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Using the \code{doFit} argument \code{clm} can be instructed to return a \emph{model environment} that we denote \code{rho}: <<>>= rho <- update(fm1, doFit=FALSE) names(rho) @ This environment holds a complete specification of the cumulative link models including design matrices \code{B1}, \code{B2}, \code{S} and other components. The environment also contains the cumulative distribution function that defines the inverse link function \code{pfun} and its first and second derivatives, i.e., the corresponding density function \code{dfun} and gradient \code{gfun}. Of direct interest here is the parameter vector \code{par} and functions that readily evaluate the negative log-likelihood (\code{clm.nll}), its gradient with respect to the parameters (\code{clm.grad}) and the Hessian (\code{clm.hess}). The negative log-likelihood and the gradient at the starting values is therefore <<>>= rho$clm.nll(rho) c(rho$clm.grad(rho)) @ Similarly at the MLE they are: <<>>= rho$clm.nll(rho, par = coef(fm1)) print(c(rho$clm.grad(rho)), digits = 3) @ Note that the gradient function \code{clm.grad} assumes that \code{clm.nll} has been evaluated at the current parameter values; similarly, \code{clm.hess} assumes that \code{clm.grad} has been evaluated at the current parameter values. The NR algorithm in \pkg{ordinal} takes advantage of this so as to minimize the computational load. If interest is in fitting a \emph{custom} CLM with, say, restrictions on the parameter space, this can be achieved by a combination of a general purpose optimizer and the functions \code{clm.nll} and optionally \code{clm.grad}. Assume for instance we know that the regression parameters can be no larger than 2, then the model can be fitted with the following code: <<>>= nll <- function(par, envir) { envir$par <- par envir$clm.nll(envir) } grad <- function(par, envir) { envir$par <- par envir$clm.nll(envir) envir$clm.grad(envir) } nlminb(rho$par, nll, grad, upper = c(rep(Inf, 4), 2, 2), envir = rho)$par @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Constrained partial proportional odds} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A type of models which are not implemented in full generality in \pkg{ordinal} are the so-called \emph{constrained} partial proportional odds models proposed by \citet{peterson90}. These models impose restrictions on the nominal effects considered in section~\ref{sec:nominal-effects} and are well suited to illustrate the customisable modelling options available in the \pkg{ordinal} package. We consider an example from \citet{peterson90} in which disease status is tabulated by smoking status: <<>>= artery <- data.frame(disease = factor(rep(0:4, 2), ordered = TRUE), smoker = factor(rep(c("no", "yes"), each = 5)), freq = c(334, 99, 117, 159, 30, 350, 307, 345, 481, 67)) addmargins(xtabs(freq ~ smoker + disease, data = artery), margin = 2) @ The overall odds-ratio of smoking is <<>>= fm <- clm(disease ~ smoker, weights = freq, data = artery) exp(fm$beta) @ showing that overall the odds of worse disease rating is twice as high for smokers compared to non-smokers. Allowing for nominal effects we see that the log odds-ratio for smoking clearly changes with disease status, and that it does so in an almost linearly decreasing manor: <<>>= fm.nom <- clm(disease ~ 1, nominal = ~ smoker, weights = freq, data = artery, sign.nominal = "negative") coef(fm.nom)[5:8] @ \citet{peterson90} suggested a model which restricts the log odds-ratios to be linearly decreasing with disease status modelling only the intercept (first threshold) and slope of the log odds-ratios: <<>>= coef(fm.lm <- lm(I(coef(fm.nom)[5:8]) ~ I(0:3))) @ We can implement the log-likelihood of this model as follows. As starting values we combine parameter estimates from \code{fm.nom} and the linear model \code{fm.lm}, and finally optimize the log-likelihood utilizing the \code{fm.nom} model environment: <<>>= nll2 <- function(par, envir) { envir$par <- c(par[1:4], par[5] + par[6] * (0:3)) envir$clm.nll(envir) } start <- unname(c(coef(fm.nom)[1:4], coef(fm.lm))) fit <- nlminb(start, nll2, envir = update(fm.nom, doFit = FALSE)) round(fit$par[5:6], 2) @ Thus the log-odds decrease linearly from 1.02 for the first two disease categories by 0.3 per disease category. %% -- Illustrations ------------------------------------------------------------ %% - Virtually all JSS manuscripts list source code along with the generated %% output. The style files provide dedicated environments for this. %% - In R, the environments {Sinput} and {Soutput} - as produced by Sweave() or %% or knitr using the render_sweave() hook - are used (without the need to %% load Sweave.sty). %% - Equivalently, {CodeInput} and {CodeOutput} can be used. %% - The code input should use "the usual" command prompt in the respective %% software system. %% - For R code, the prompt "R> " should be used with "+ " as the %% continuation prompt. %% - Comments within the code chunks should be avoided - these should be made %% within the regular LaTeX text. %% -- Summary/conclusions/discussion ------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusions} \label{sec:conclusions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This paper has described the class of cumulative link models for the analysis of ordinal data and the implementation of such models in the \proglang{R} package \pkg{ordinal}. It is shown how the package supports model building and assessment of CLMs with scale effects, partial proportional odds, structured thresholds, flexible link functions and how models can be costumized to specific needs. A number of examples have been given illustrating analyses of ordinal data using \code{clm} in practice. The significant flexibility of model structures available in \pkg{ordinal} is in one respect a clear advantage but it can also be a challenge when particular model variants turn out to be unidentifiable. Analytical detection of unidentifiable models could prove very useful in the analysis of ordinal data, but it is, unfortunately, a difficult question that remains a topic of future research. In a wider data analysis perspective, cumulative link models have been described as a very rich model class---a class that sits in between, in a sense, the perhaps the two most important model classes in statistics; linear models and logistic regression models. The greater flexibility of CLMs relative to binary logistic regression models facilitates the ability to check assumptions such as the partial proportional odds assumption. A latent variable interpretation connects cumulative link models to linear models in a natural way and also motivates non-linear structures such as scale effects. In addition to nominal effects and the non-linear scale effects, the ordered nature of the thresholds gives rise to computational challenges that we have described here and addressed in the \pkg{ordinal} package. In addition to computational challenges, practical data analysis with CLMs can also be challenging. In our experience a top-down approach in which a ``full'' model is fitted and gradually simplified is often problematic, not only because this easily leads to unidentifiable models but also because there are many different ways in which models can be reduced or expanded. A more pragmatic approach is often preferred; understanding the data through plots, tables, and even linear models can aid in finding a suitable intermediate ordinal starting model. Attempts to identify a ``correct'' model will also often lead to frustrations; the greater the model framework, the greater the risk that there are multiple models which fit the data (almost) equally well. It is well known statistical wisdom that with enough data many goodness of fit tests become sensitive to even minor deviations of little practical relevance. This is particularly true for tests of partial proportional odds; in the author's experience almost all CLMs on real data show some evidence of non-proportional odds for one or more variables but it is not always the case that models with partial or non-proportional odds are the most useful. Such effects complicate the interpretation and often generalize poorly outside the observed data and models assuming proportional odds or including scale effects are often more appropriate. %% -- Optional special unnumbered sections ------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section*{Computational details} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \begin{leftbar} % If necessary or useful, information about certain computational details % such as version numbers, operating systems, or compilers could be included % in an unnumbered section. Also, auxiliary packages (say, for visualizations, % maps, tables, \dots) that are not cited in the main text can be credited here. % \end{leftbar} The results in this paper were obtained using \proglang{R}~\Sexpr{paste(R.Version()[6:7], collapse = ".")} with \pkg{ordinal}, version~\Sexpr{packageVersion("ordinal")}. \proglang{R} itself and all packages used are available from CRAN at \url{https://CRAN.R-project.org/}. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section*{Acknowledgments} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \begin{leftbar} % % All acknowledgments (note the AE spelling) should be collected in this % unnumbered section before the references. It may contain the usual information % about funding and feedback from colleagues/reviewers/etc. Furthermore, % information such as relative contributions of the authors may be added here % (if any). % \end{leftbar} %% -- Bibliography ------------------------------------------------------------- %% - References need to be provided in a .bib BibTeX database. %% - All references should be made with \cite, \citet, \citep, \citealp etc. %% (and never hard-coded). See the FAQ for details. %% - JSS-specific markup (\proglang, \pkg, \code) should be used in the .bib. %% - Titles in the .bib should be in title case. %% - DOIs should be included where available. \bibliography{clm_article_refs} %% -- Appendix (if any) -------------------------------------------------------- %% - After the bibliography with page break. %% - With proper section titles and _not_ just "Appendix". \newpage \begin{appendix} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{A regularized Newton-Raphson algorithm with step halving} \label{sec:algorithm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The regularized NR algorithm is an iterative method that produce a sequence of estimates $\bm\psi^{(0)}, \ldots, \bm\psi^{(i)}, \ldots$, where parenthesized superscripts denote iterations. From the $i$th estimate, the $(i+1)$'th estimate is given by % \begin{equation*} \bm\psi^{(i+1)} = \bm\psi^{(i)} - c_1 \bm h^{(i)}, \quad \bm h^{(i)} = \tilde{\bm H}(\bm\psi^{(i)}; \bm y)^{-1} \bm g(\bm\psi^{(i)}; \bm y) \end{equation*} where \begin{equation*} \tilde{\bm H}(\bm\psi^{(i)}; \bm y) = \bm H(\bm\psi^{(i)}; \bm y) + c_2 (c_3 + \min(\bm e^{(i)})) \bm I, \end{equation*} % % where % $\bm h^{(i)}$ is the step of the $i$th iteration, $\bm H(\bm\psi^{(i)} ; \bm y)$ and $\bm g(\bm\psi^{(i)}; \bm y)$ are the Hessian and gradient of the negative log-likelihood function with respect to the parameters evaluated at the current estimates; $\bm e^{(i)}$ is a vector of eigenvalues of $\bm H(\bm\psi^{(i)}; \bm y)$, $\bm h^{(i)}$ is the $i$'th step, $c_1$ is a scalar parameter which controls the step halving, and $c_2$, $c_3$ are scalar parameters which control the regularization of the Hessian. Regularization is only enforced when the Hessian is not positive definite, so $c_2 = 1$ when $\min(\bm e^{(i)}) < \tau$ and zero otherwise, were $\tau$ is an appropriate tolerance. The choice of $c_3$ is to some extent arbitrary (though required positive) and the algorithm in \pkg{ordinal} sets $c_3 = 1$. Step-halving is enforced when the full step $\bm h^{(i)}$ causes a decrease in the likelihood function in which case $c_1$ is consecutively halved, $c_1 = \frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \ldots$ until the step $c_1 \bm h^{(i)}$ is small enough to cause an increase in the likelihood or until the maximum allowed number of consecutive step-halvings has been reached. The algorithm in \pkg{ordinal} also deals with a couple of numerical issues that may occur. For example, the likelihood function may be sufficiently flat that the change in log-likelihood is smaller than what can be represented in double precision, and so, while the new parameters may be closer to the true ML estimates and be associated with a smaller gradient, it is not possible to measure progress by the change in log-likelihood. The NR algorithm in \pkg{ordinal} has two convergence criteria: (1) an absolute criterion requesting that $\max | \bm g(\bm\psi^{(i)}; \bm y) | < \tau_1$ and (2) a relative criterion requesting that $\max | \bm h^{(i)} | < \tau_2$ where the default thresholds are $\tau_1 = \tau_2 = 10^{-6}$. Here the first criterion attempts to establish closeness of $\bm\psi^{(i)}$ to the true ML estimates in absolute terms; the second criterion is an estimate of relative closeness of to the true ML estimates. % Both convergence criteria are needed if both small (e.g., $\approx 0.0001$) and large (e.g., $\approx 1000$) parameter estimates are to be determined accurately with an appropriate number of correct decimals as well as significant digits. The NR algorithm in \pkg{ordinal} attempts to satisfy the absolute criterion first and will then only attempt to satisfy the relative criterion if it can take the full un-regularized NR step and then only for a maximum of 5 steps. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Convergence properties and parameter accuracy} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Convergence to a well-defined optimum is achieved when the gradient of the negative log-likelihood function with respect to the parameters is small and the Hessian is positive definite i.e., having only positive eigenvalues away from zero. % Identifiability problems occur when the likelihood function is flat in directions of one or more parameters (or linear functions of the parameters) while well-defined, i.e., pointy in other directions. It may happen that a parameter is exactly unidentifiable and \code{clm} is in some cases (including rank-deficient design matrices) able to detect this and exclude the parameter from the optimization procedure. In other cases the likelihood is almost flat in one or more directions. These cases are not uncommon in practice and it is not possible to reduce the parameter space before optimizing the model. To measure the degree of empirical identifiability \code{clm} reports the condition number of the Hessian which is the ratio of the largest to the smallest eigenvalue. A large condition number of the Hessian does not necessarily mean there is a problem with the model, but it can be. A small condition number of the Hessian, say smaller than about $10^4$ or $10^6$, on the other hand is a good assurance that a well-defined optimum has been reached. A key problem for optimization methods is when to stop iterating: when have the parameters that determine the optimum of the function been found with sufficient accuracy? The \emph{method independent error estimate} \citep{elden04} provides a way to approximate the error in the parameter estimates. Sufficiently close to the optimum the Newton-Raphson step provides this estimate: \begin{equation*} |\hat{\bm\alpha}^{(i)} - \bm\alpha^*| \lesssim \bm h^{(i)}, \quad \bm h^{(i)} = \bm H(\bm\psi^{(i)}; \bm y)^{-1} \bm g(\bm\psi^{(i)}; \bm y) \end{equation*} where $\bm\alpha^*$ is the exact (but unknown) value of the ML estimate, $\hat{\bm\alpha}^{(i)}$ is the ML estimator of $\bm\alpha$ at the $i$'th iteration and $\bm h^{(i)}$ is the full unregularized NR step at the $i$'th iteration. % Since the gradient and Hessian of the negative log-likelihood function with respect to the parameters is already evaluated and part of the model fit at convergence, it is essentially computationally cost-free to approximate the error in the parameter estimates. Based on the error estimate the number of correctly determined decimals and significant digits is determined for each parameter. The assessment of the number of correctly determined decimals and significant digits is only reliable sufficiently close to the optimum and when the NR algorithm converges without regularization and step-halving. In practice we caution against this assessment if the algorithm did not converge successfully. % % \begin{leftbar} % Appendices can be included after the bibliography (with a page break). Each % section within the appendix should have a proper section title (rather than % just \emph{Appendix}). % % For more technical style details, please check out JSS's style FAQ at % \url{https://www.jstatsoft.org/pages/view/style#frequently-asked-questions} % which includes the following topics: % \begin{itemize} % \item Title vs.\ sentence case. % \item Graphics formatting. % \item Naming conventions. % \item Turning JSS manuscripts into \proglang{R} package vignettes. % \item Trouble shooting. % \item Many other potentially helpful details\dots % \end{itemize} % \end{leftbar} % % % \section[Using BibTeX]{Using \textsc{Bib}{\TeX}} \label{app:bibtex} % % \begin{leftbar} % References need to be provided in a \textsc{Bib}{\TeX} file (\code{.bib}). All % references should be made with \verb|\cite|, \verb|\citet|, \verb|\citep|, % \verb|\citealp| etc.\ (and never hard-coded). This commands yield different % formats of author-year citations and allow to include additional details (e.g., % pages, chapters, \dots) in brackets. In case you are not familiar with these % commands see the JSS style FAQ for details. % % Cleaning up \textsc{Bib}{\TeX} files is a somewhat tedious task -- especially % when acquiring the entries automatically from mixed online sources. However, % it is important that informations are complete and presented in a consistent % style to avoid confusions. JSS requires the following format. % \begin{itemize} % \item JSS-specific markup (\verb|\proglang|, \verb|\pkg|, \verb|\code|) should % be used in the references. % \item Titles should be in title case. % \item Journal titles should not be abbreviated and in title case. % \item DOIs should be included where available. % \item Software should be properly cited as well. For \proglang{R} packages % \code{citation("pkgname")} typically provides a good starting point. % \end{itemize} % \end{leftbar} % \end{appendix} %% ----------------------------------------------------------------------------- \end{document} ordinal/data/0000755000175100001440000000000012174033664012637 5ustar hornikusersordinal/data/income.rda0000644000175100001440000000050114660601551014573 0ustar hornikusers‹}RÍJÄ0Î&]Ë]/âAĽ(¨dmZşĹ[zóäiݎMAčn%[oľ†>“ľŚ°5I3•×éüefľ|éĂí" B#Ď!L´ëaý!M´Ýy\eŐR"Du¤ËdOŰ©=±]ńvíO/ĺł,×ÚŰo1جÇnćᯟ†®qVŠ54uŁ ‘Ő•ŇŢĆśňcd…źVřů»‘žľµůëŘ żpőą‹ś=rý'źFľřĄ;wćňá}›żŰµv@n Óř4dP«˙Í\7îfľ» i nLpšG)eŔ×…”E]QÖ5°äŞÝ@`îW*—JćQŮg~%–'°ţU Kž˛zřçô<ő2)†-lޢišď6hrQ‹Yˇ„eßvóŔA¶ordinal/data/soup.rda0000644000175100001440000001212614660601551014315 0ustar hornikusersBZh91AY&SY’ŹÁĚ˝‘˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ŕ żxz­IP6Č@‰€ ďř^>¨(…) &›CS#LCF F&Ť`Đi„`&&ŚFŚÉ„Ä` “`g˙ꪀÓß˙ŞŞ ĘPéDءĘ3(Äd 4Č€j= ÓF€f„ŞÔQ¦zѦ&™ ÄdĐÓ#LŚ&M0ĐŔŚÂA ÄdČ2di„Äb11F†CF!ÓL0&š#!‚OU*jTi‘@Ä   †š44Đ4 €d0š4Či ČÄČ d44 !‚hdÓ#C&`‰HŤTő?QęŹP4 € Đ4őLAŞ(‹""’¬ŠH˛¶ŚčąmŞŠBƱµ­%ŽsŰEި sśŤ(@ʵ¬®sqÎSśšY0'ąs—%ĹÖmÔŞ˘«4Đ+#8 €-‚‚€!Ős\L1ŃĚA¨P 4=*NŃ:/"•mg”m4řÚÚłVšµcYŞłV¨Ş$EY…¸€QDJ P€Şhđ(•m?!ř›µ˛ÖŰ\rk­M5SBI´•\ ĽEac8Őá†Vňi‹"HŽĹě×™E¤kś‰ZuŔ•—.]˛Üö,Ý©‰«ŮVšăŞĘžiđ i^öI/·ŤbĹEcP@žĄ*¸ÂL0K8^ĽtRR®đݲëÂÚŃiÖN•Ä,•H˘Ó«ťkś¶č«tU‹DĄ"$ęrŃRbŚ…&0 L&Ŕh@¬Żr˝Ęôç9Ň·I‹fbŇI˛lŔÄ ¶†0 CI´”»UşiWxsËxxo ¨¦†«H,v‹˛\mąĺ0· +ŇKW3•즲M"ްVXć‘ (˘ZL"Lm1m¸ŞiK„bíÓ,ĂԲۥ‘-m,2ĺl[K´´Tšôî4śä!ÚDJk-¤‹L‰T‚BÖÔĺ±+ĆÓşË$"ŮBGÔjG]ÝĘŠÍ•”˘˛urí¸íÄ”¨Agm.Qeją+$h´®S­ă]tšqn\vÜ´JNŠHZÁ Ř„ë×»®qEŰ\¶S¬Ĺă(Ą™]»µŐAF.¸Q-­íµS%۬“´|»ae2T¦ś­’ BP©Fhő’BşQ¤i4qĹ!)qV¤ ARŐŚ`M›ŽT`M$š4  L]ă¦Ň"IrŠ™mÝśčĐfŤ(4 4DR€a 2H“i2$–&$a Ů D†aN¤,a(I˘J(±"i ˘&iI°¤!˛h3 ™*6,f“&" B$ tĎł¶ŘŤ4(¤pnTX˛q2YÂá)–].Tq–ÎBĚć&hÎěwNVą"˝×…ąĎ#µ†ËHÎm¤šÂ 2(’3`*#\ërçN®tÝMFH˛2Ś`Ú,!”¬E¤‚ŃSY41©,U«şĘäş*čę¶«B‚‹h‚Ć,`ÔlmŤ-k@‰Ů @m› 1BÄĘËY­ŞJZEŤ‰ % &š˘˘ÄŚĐcjkj›Zj­FµR7\k™HAşu—7VNdąÂşsťLĺÎspĘj"ç.\k‘ÓG:sŞÚµ@ñ®§ ¤Đ­Z5’HC”şsqÔµmqÉŚVÖeqĹmŠ#mIµść­¤6ŇŰNHZPmş"ÂQQ" ·ĂcE […iŞ$źś4’N 6׌nŐNŤłĄń”ZŃ4%†"‘AR §ja-Vá(&«đˇÍł‹Ň= `“„¸zÍ€\¤jľëŐB,‹*śpÝän“XI.‰b‰–îś§qh¶ŐY!lFŘÜ*<+zĽűvV)i<€Ű*•µŃ%–¬+%‘Ö—ś×ˇžfŇKÉ4ĽĽ·•€˘$‘y0łYŠ )¬nH¬ŐZŁ„Î Ph¶+™]&Z#ş6 Ä Tä’\E(Íbť94ťm¦˛ĺĆ"ĺeR V‘@ľ‡&›T3‘´ŔI´ÔѤ Ą$^h›NĽD(ş <şîŤ6ß›`’^0ŁÚ5Ó¨ö­Gµę=łQíşŹnÔ{~ŁÜ*=ÇQŮuĺ¨÷=Gşj=×QîÚŹwÔvmGĽj=çQďZŽÍ¨÷˝Gľj=÷QďÚŹÔv}GhÔ|Łŕu¨í:ŹÔv­GÂj>QÚő ¨ř}GÄj;fŁâu·QńZŹ‹Ô|fŁău¨řýGČj>GQňZŹ“Ô|¦Łĺu-¨ů}GnÔvýGpÔwGrÔw=GĚj>gQóZŹ›Ô|棺j>wQóÚŹźÔ}Łču×QݵE¨ú=GŇj>—QÜőM¨ú}GÔj;ľŁĽj>§QőZŹ«ÔwťGzÔw˝G|Ô}fŁľę>·QőÚŽý¨úýGÔx GŘj>ÇQöZʍű=G‚Ô}¦Łíum¨ű}GÔxMGÜT}ÎŁÂę<6ŁĂę>ëQâ5'Q÷zŹĽÔ}îŁďµ¨ü Gŕę? QřzŹÄÔ~.ŁńµʍüŤGäę?+Qůu™¨üÝGçj??QúŹŃÔ~–Łôő©˘Nĺ ;¤$îĐ“ĽN®w˝÷ŕx>‡âxľ7Źäy>W—ćyľwźčz9ąŮú:ZzšşÚű;[{›»Űü<\|śĽÜý=]}ť˝Ýţ>^~žľŢ˙?Rżq_ʵ.î®®ŞîżöuwUWx¬\\€Ż€cî]0ŞaT©…S aLi Č;‹«şŞ«Ş¶uww@úŞaWL.©…U0ş¦b]S ş\»§UUWwwV®ęꙍ¬0ş s >ĺ]]Ó » 4JeÍU~÷CuWwwl*®ęü f­üňFXbâ2ÉsźďÄţîń?Ö3*ĆărˇŽˇiz&„Ňt0N}ă&~&0Ä1¤Ú@ Űq܆ě×€/UuuUL*Şî¨b0`~2€ $’I$’I$’I$’I$’I$’I$’pµUwUwS Şą$’I$’I$’I$’I$’I$’I$’I$’I5 &2a$’I2y$’I$’I$“éŐ\’I’I$’I$’I$’I$’I$’I$’I$’I$’I$’I$’Hänî®®Ř]Đ3»«őě%ëתP , „4.*ę] ˇt]Ä»WjííÇvęIĺŐUÝÝÝÝŐUruUUWwŚ]ÝÝÝÝÝÝÝóË,˛Ë,˛Ë+»»»»»»»»»»»»»»»»»»»»»ĽbîŞŞŞŞ®îîîęŞŞŞŞîîîîîîîîîîîîîďĘgűçć7ř>‘üťĎOɡđ]őGĂÔ)sřŕm_ß˙—.bíŕ  ŔAUpV«U3T™5-µ™Ť­UUuᲜ5U "¤H"Љe•)d±–Ye`Š€[‚#e,ŞË,˛°V¤›ä“M$— &ÚMą' $i4ÓNI$‘&›mI$’4šmI7É'šI9$’Gŕa´ťUUUNxIŐUUTmI7É'ś’I8'0žRo’HÚ’I$iĄ$’HÚ’I$mI$“„mIľI#jI$‘µ$’HÚ’I$mI$’6¤’IRI$Ť©$’FÔ’I#jI$‘µ$’HÚ’I$mI$’6¤’Iü®›UUUURI$Ť©$’FÔ’I#jI$‘µ$’HÚ’I$mI$’6¤’IRI$Ť©$’FÔ’I#jI$žg˘]ßÜ͵žyçžy˙oďŰjîîîůwضŐÝđ»»á§ź}áü(ßöŐUUWĆ1ŚcĆ1ŚcĆ­­u׆şë¬jÎ\ąk¦šUUUkwwčţµ–YxĎŘĽż'čé«mMIVÚš’&­µŰjJŰS[·uďipáĂzkµµ·ű»goo««źogggI6Şí»»íôŻFľ‡Ń“Eµ5$RyíŻD»ÇĎóü˙?Ĺ/;Í×¶šh__\“\xÝŰşnÝŚcĆ0±Śc­µŐżŻcm„´ÓM¶ÓN’M¶ŞŞŰ]Ű·né…»Ć1ŚcĆÍ®­űg´Űh•ë®»k®˛I´’-µÝŐ»vٵĎvŰ–¦şđU¦šk¦šI&ŰUUh±Ś=°—6žÍ®®;m¶ĐU®›téĐ6›mUTÚŐµžşë®ş‹M4×§Nť$šëUTôĆ1…ŚcĆ1ŚcV×-ú뮺•¦škÓ§I$×ZŞ­1ŚcĆ1ŚcĆ1ŚjÚĺż]u×XÚ’I$mI$“ÖéµUUUQµ$’ERI$Ť©$’FÔ“„’Ľ7ţxlŰYçžYd6€ý·îŤ©'yj˙ŁËoń:rmrĺ9rĺâwů…’éŽy¶łĎ:Ď<ńRIţĆÔÚŞŞ¨6€——¦ŐUUPÚ´vSjŞŞ«pڸɚ)µ[ŞIעěěÝçë6ÖyçžyĎ/ă1džëm]ŮsŞ6¤’Iě×˙§qxKě|Ű\ůđśůôĄÔ±ÝńY¶łĎ<óÎąđ¦ŐUpŞî>tÚŞŞŞ@6€Ç÷”ÚŞŞŞľ]ám«˝÷v6€mÚ´hĐ  ţĎtńŢ-;żßćעď»Î]m®ľľľľľľ•ą'éÖÚ»»ąn6¤ťíUoŤ©$“ýU6ŞŞŞ†ĐeRI'áëVÚ»»ąăŞŢďPY6˛Ë,˛ËŇ^›űŢ\M¬˛Ë*ËĹř/UÖ“óżÍy¶ąóđ:şşşŁj@µŃ'$’wóąâĽFî¬y—6×>|řóçĎwo mUVRîű‹˝IäÚË,®ď¤mI$śŁjI$®ň›UUÝ»¸Ú’ŮRI Ú´hĐ  @6€mÚ´hĐ  @6€mÚ´hĐ  @6€mÚ4hĐ  @6€mÚ´hĐ  @6€mÚ´hĐ  @6€mÚ4hĐ  @6€mÚ´hĐ  @&€ŢôÇŹ\„R(QIó „ýF9;É´ám#w nچ›ââ7_Ö-żűŮň‡aË{˙űü–a_ßż?Ł^»qďÁ›ž˙xťůȨcü–ő‚{ë‚_3řěoŔŹŔ/0ľŢ®Ýů¨3n·vósť»ÂÍÇ:Řżá®ă.ôUđsđS0űşăÍ7‚ľá­w‹őCgßą>ö—ű{ÇËÇýâé[¬›ńH(ÂćÓt©ůŻ…€˛|řĐ?‚ź/­8ÎcÇHĎ϶)kvś´ęS¨+°Ćfĺ˛í6”ëÇ ~ç,vRýM§Ą‘n]TĐZe +V)ܧđŔ›*§qÉ™$ŚÝĽHtˇ¦;ŠÇU^éÜÚ°ŔôđźŹ7]–Sݱjś§Éď 5.&­_HżŕR÷+¸Öçw\f9¤đ».ŻÜnűVhNzóňu z×ăN»{W» ¬QX§đđŻÄ<řGÖÇĽ{~Ö;4 Ńt »˝č˙Îő˙ŮAظĚVąoMO4ßšŚ˝B—§yVj†qu’ó’¬ô䔯Ň8Ď*37?çU•2,úň59Ö^Â~‘ź-1ió§‘µůL§Ósj$q/&¤­_ś˙x.če ordinal/src/0000755000175100001440000000000014660601551012513 5ustar hornikusersordinal/src/links.h0000755000175100001440000000407414334154604014014 0ustar hornikusers///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen // // This file is part of the ordinal package for R (*ordinal*) // // *ordinal* is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // *ordinal* is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // A copy of the GNU General Public License is available at // and/or // . ///////////////////////////////////////////////////////////////////////////// #ifndef _ORDINAL_LINKS_H_ #define _ORDINAL_LINKS_H_ /* That ifndef, etc. is an idiom to prevent the body of the header * being read more than once. */ #include #include #ifdef __cplusplus extern "C" { #endif /* That stanza allows the same header file to be used by C and C++ * programs. There is a matching stanza at the end of this header * file. */ /* Additional scalar cumulative probability functions */ double d_pgumbel (double,double,double,int); double d_pgumbel2 (double,double,double,int); double d_pAO (double,double,int); double d_plgamma (double,double,int); /* Additional scalar density functions */ double d_dgumbel (double,double,double,int); double d_dgumbel2 (double,double,double,int); double d_dAO (double,double,int); double d_dlgamma (double,double,int); /* Scalar density gradients */ double d_glogis (double); double d_gnorm (double); double d_gcauchy (double); double d_ggumbel (double); double d_ggumbel2 (double); double d_gAO (double,double); double d_glgamma (double,double); #ifdef __cplusplus } #endif #endif ordinal/src/get_fitted.c0000755000175100001440000001150214334154604014777 0ustar hornikusers///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen // // This file is part of the ordinal package for R (*ordinal*) // // *ordinal* is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // *ordinal* is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // A copy of the GNU General Public License is available at // and/or // . ///////////////////////////////////////////////////////////////////////////// #include #include #include #include "links.h" SEXP get_fitted(SEXP, SEXP, SEXP, SEXP); // ------------------------------------------------------- SEXP get_fitted(SEXP eta1p, SEXP eta2p, SEXP linkp, SEXP lambdap) { /* Compute fitted values (probabilities) from vectors of linear predictors (eta1 and eta2) given the link function (linkp) and an optional lambda parameter. eta1 and eta2 are required to be equal length numeric vectors, linkp a character vector and lambdap a numeric scalar. return: vector of fittec values of same length as eta1 and eta2. */ SEXP ans = PROTECT(duplicate(coerceVector(eta1p, REALSXP))); eta2p = PROTECT(coerceVector(eta2p, REALSXP)); linkp = PROTECT(coerceVector(linkp, STRSXP)); const char *linkc = CHAR(asChar(linkp)); double *eta1 = REAL(ans), *eta2 = REAL(eta2p), lambda = asReal(lambdap); int i, nans = LENGTH(ans); if(LENGTH(eta2p) != nans) { // ".. don't have to UNPROTECT before calling into "error"; it is not a bug to do so, but it is not needed either, error will result in a long jump that will UNPROTECT automatically." Email from Tomas Kalibra 19Apr2018. ; UNPROTECT(3); error("'eta1' and 'eta2' should have the same length"); } if(strcmp(linkc, "probit") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // pnorm(x, mu, sigma, lower_tail, give_log); eta1[i] = pnorm(eta1[i], 0.0, 1.0, 1, 0) - pnorm(eta2[i], 0.0, 1.0, 1, 0); else eta1[i] = pnorm(eta2[i], 0.0, 1.0, 0, 0) - pnorm(eta1[i], 0.0, 1.0, 0, 0); } } else if(strcmp(linkc, "logit") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // plogis(x, mu, sigma, lower_tail, give_log); eta1[i] = plogis(eta1[i], 0.0, 1.0, 1, 0) - plogis(eta2[i], 0.0, 1.0, 1, 0); else eta1[i] = plogis(eta2[i], 0.0, 1.0, 0, 0) - plogis(eta1[i], 0.0, 1.0, 0, 0); } } else if(strcmp(linkc, "loglog") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // d_pgumbel(double q, double loc, double scale, int lower_tail) eta1[i] = d_pgumbel(eta1[i], 0., 1., 1) - d_pgumbel(eta2[i], 0., 1., 1); else eta1[i] = d_pgumbel(eta2[i], 0., 1., 0) - d_pgumbel(eta1[i], 0., 1., 0); } } else if(strcmp(linkc, "cloglog") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // d_pgumbel2(double q, double loc, double scale, int lower_tail) eta1[i] = d_pgumbel2(eta1[i], 0., 1., 1) - d_pgumbel2(eta2[i], 0., 1., 1); else eta1[i] = d_pgumbel2(eta2[i], 0., 1., 0) - d_pgumbel2(eta1[i], 0., 1., 0); } } else if(strcmp(linkc, "cauchit") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // pcauchy(q, loc, scale, lower_tail, give_log) eta1[i] = pcauchy(eta1[i], 0., 1., 1, 0) - pcauchy(eta2[i], 0., 1., 1, 0); else eta1[i] = pcauchy(eta2[i], 0., 1., 0, 0) - pcauchy(eta1[i], 0., 1., 0, 0); } } else if(strcmp(linkc, "Aranda-Ordaz") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // d_pAO(q, lambda, lower_tail) eta1[i] = d_pAO(eta1[i], lambda, 1) - d_pAO(eta2[i], lambda, 1); else eta1[i] = d_pAO(eta2[i], lambda, 0) - d_pAO(eta1[i], lambda, 0); } } else if(strcmp(linkc, "log-gamma") == 0) { for(i = 0; i < nans; i++) { if(eta2[i] <= 0) // d_plgamma(double eta, double lambda, int lower_tail) eta1[i] = d_plgamma(eta1[i], lambda, 1) - d_plgamma(eta2[i], lambda, 1); else eta1[i] = d_plgamma(eta2[i], lambda, 0) - d_plgamma(eta1[i], lambda, 0); } } else { // ".. don't have to UNPROTECT before calling into "error"; it is not a bug to do so, but it is not needed either, error will result in a long jump that will UNPROTECT automatically." Email from Tomas Kalibra 19Apr2018. ; UNPROTECT(3); // unprotecting before exiting with an error error("link not recognized"); } UNPROTECT(3); return ans; } ordinal/src/init.c0000644000175100001440000001130314334154604013620 0ustar hornikusers///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen // // This file is part of the ordinal package for R (*ordinal*) // // *ordinal* is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // *ordinal* is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // A copy of the GNU General Public License is available at // and/or // . ///////////////////////////////////////////////////////////////////////////// #include #include #include // for NULL #include /* .C calls */ extern void dAO_C(void *, void *, void *, void *); extern void dgumbel_C(void *, void *, void *, void *, void *); extern void dgumbel2_C(void *, void *, void *, void *, void *); extern void dlgamma_C(void *, void *, void *, void *); extern void gAO_C(void *, void *, void *); extern void gcauchy_C(void *, void *); extern void getNAGQ(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void getNGHQ_C(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void ggumbel_C(void *, void *); extern void ggumbel2_C(void *, void *); extern void glgamma_C(void *, void *, void *); extern void glogis_C(void *, void *); extern void gnorm_C(void *, void *); extern void grad_C(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void gradC(void *, void *, void *, void *, void *, void *, void *, void *); extern void grFacSum_C(void *, void *, void *, void *, void *); extern void hess(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void hessC(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void nll(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void NRalg(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void NRalgv3(void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *, void *); extern void pAO_C(void *, void *, void *, void *); extern void pgumbel_C(void *, void *, void *, void *, void *); extern void pgumbel2_C(void *, void *, void *, void *, void *); extern void plgamma_C(void *, void *, void *, void *); /* .Call calls */ extern SEXP get_fitted(SEXP, SEXP, SEXP, SEXP); static const R_CMethodDef CEntries[] = { {"dAO_C", (DL_FUNC) &dAO_C, 4}, {"dgumbel_C", (DL_FUNC) &dgumbel_C, 5}, {"dgumbel2_C", (DL_FUNC) &dgumbel2_C, 5}, {"dlgamma_C", (DL_FUNC) &dlgamma_C, 4}, {"gAO_C", (DL_FUNC) &gAO_C, 3}, {"gcauchy_C", (DL_FUNC) &gcauchy_C, 2}, {"getNAGQ", (DL_FUNC) &getNAGQ, 19}, {"getNGHQ_C", (DL_FUNC) &getNGHQ_C, 17}, {"ggumbel_C", (DL_FUNC) &ggumbel_C, 2}, {"ggumbel2_C", (DL_FUNC) &ggumbel2_C, 2}, {"glgamma_C", (DL_FUNC) &glgamma_C, 3}, {"glogis_C", (DL_FUNC) &glogis_C, 2}, {"gnorm_C", (DL_FUNC) &gnorm_C, 2}, {"grad_C", (DL_FUNC) &grad_C, 16}, {"gradC", (DL_FUNC) &gradC, 8}, {"grFacSum_C", (DL_FUNC) &grFacSum_C, 5}, {"hess", (DL_FUNC) &hess, 13}, {"hessC", (DL_FUNC) &hessC, 11}, {"nll", (DL_FUNC) &nll, 17}, {"NRalg", (DL_FUNC) &NRalg, 29}, {"NRalgv3", (DL_FUNC) &NRalgv3, 24}, {"pAO_C", (DL_FUNC) &pAO_C, 4}, {"pgumbel_C", (DL_FUNC) &pgumbel_C, 5}, {"pgumbel2_C", (DL_FUNC) &pgumbel2_C, 5}, {"plgamma_C", (DL_FUNC) &plgamma_C, 4}, {NULL, NULL, 0} }; static const R_CallMethodDef CallEntries[] = { {"get_fitted", (DL_FUNC) &get_fitted, 4}, {NULL, NULL, 0} }; void R_init_ordinal(DllInfo *dll) { R_registerRoutines(dll, CEntries, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } ordinal/src/links.c0000755000175100001440000001624514334154604014012 0ustar hornikusers///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen // // This file is part of the ordinal package for R (*ordinal*) // // *ordinal* is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // *ordinal* is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // A copy of the GNU General Public License is available at // and/or // . ///////////////////////////////////////////////////////////////////////////// #include "links.h" /* This file implements scalar distribution, density and gradient function */ /*-------------------------------------------------------*/ /* Scalar cumulative distribution functions (CDFs) */ /*-------------------------------------------------------*/ double d_pgumbel(double q, double loc, double scale, int lower_tail) // Consider implementing 'int give_log' to follow the convention from // pnorm etc. { if(ISNAN(q)) // true for NA and NaN return NA_REAL; if(q == R_PosInf) q = 1.; else if(q == R_NegInf) q = 0.; else { q = (q - loc) / scale; q = exp( -exp( -q)); } return !lower_tail ? 1 - q : q; } double d_pgumbel2(double q, double loc, double scale, int lower_tail) // this is (partly) redundant since d_pgumbel2(q) = 1 - d_pgumbel(-q) { if(ISNAN(q)) // true for NA and NaN return NA_REAL; if(q == R_PosInf) q = 1; else if(q == R_NegInf) q = 0; else { q = (-q - loc) / scale; q = exp(-exp(-q)); } return !lower_tail ? q : 1 - q; } double d_pAO(double q, double lambda, int lower_tail) { if(ISNAN(q) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(q == R_PosInf) q = 1; else if(q == R_NegInf) q = 0; else { if(lambda < 1.0e-6) error("'lambda' has to be positive. lambda = %e was supplied\n", lambda); q = 1 - R_pow(lambda * exp(q) + 1, -1/lambda); } return !lower_tail ? 1 - q : q; } double d_plgamma(double eta, double lambda, int lower_tail) { double v; if(ISNAN(eta) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(eta == R_PosInf) v = 1; else if(eta == R_NegInf) v = 0; else { v = R_pow_di(lambda, -2) * exp(lambda * eta); if(lambda < 1.0e-6) v = 1 - pgamma(v, R_pow_di(lambda, -2), /*scale = */ 1, 1 /*lower_tail*/, 0 /*give_log*/); if(lambda > -1.0e-6) v = pgamma(v, R_pow_di(lambda, -2), /*scale = */ 1, 1 /*lower_tail*/, 0 /*give_log*/); if(lambda >= -1.0e-6 && lambda <= 1.0e-6) // pnorm(x, mu, sigma, lower_tail, give_log); v = pnorm(eta, 0., 1., 1, 0); } return lower_tail ? v : 1 - v; } /*-------------------------------------------------------*/ /* Scalar probability density functions (PDFs) */ /*-------------------------------------------------------*/ double d_dgumbel(double x, double loc, double scale, int give_log) { if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) // if(x == INFINITE || x == -INFINITE) // seems to work as well. return 0; // this special case needs to be handled separately x = (x - loc) / scale; x = -exp(-x) - x - log(scale); return give_log ? x : exp(x); } double d_dgumbel2(double x, double loc, double scale, int give_log) { if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) return 0; x = (-x - loc) / scale; x = -exp(-x) - x - log(scale); return give_log ? x : exp(x); } double d_dAO(double eta, double lambda, int give_log) { if(ISNAN(eta) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(eta == R_PosInf || eta == R_NegInf) return 0; if(lambda < 1.0e-6) error("'lambda' has to be positive. lambda = %e was supplied\n", lambda); eta -= (1 + 1 / lambda) * log(lambda * exp(eta) + 1); return give_log ? eta : exp(eta); } double d_dlgamma(double x, double lambda, int give_log) { if(ISNAN(x) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) return 0; if(lambda < 1.0e-5 && lambda > -1.0e-5) // lambda close to zero return dnorm(x, 0. , 1., give_log); double q_2 = R_pow_di(lambda, -2); x *= lambda; x = log(fabs(lambda)) + q_2 * log(q_2) - lgammafn(q_2) + q_2 * (x - exp(x)); return !give_log ? exp(x) : x; } /*-------------------------------------------------------*/ /* Scalar gradients of probability density functions */ /*-------------------------------------------------------*/ double d_glogis(double x) { // Gradient of dlogis(x) wrt. x if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) // if(x == INFINITE || x == -INFINITE) // seems to work as well. return 0; // this special case needs to be handled separately /* Store the sign of x, compute the gradient for the absolute value and restore the sign. This is needed to avoid exp(LARGE) to blow up and the function to return NaN. */ int sign = x > 0; //could use fsign() instead... x = exp(-fabs(x)); x = 2 * x * x * R_pow_di(1 + x, -3) - x * R_pow_di(1 + x, -2); return sign ? x : -x; } double d_gnorm(double x) { if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == INFINITY || x == -INFINITY) return 0; else return -x * dnorm(x, 0., 1., 0); } double d_gcauchy(double x) { if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) return 0; return x = -2 * x / M_PI * R_pow_di(1 + x * x, -2); } double d_ggumbel(double x) { if(ISNAN(x)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) return 0; x = exp(-x); if(x == INFINITY) return 0; double eq = exp(-x); return -eq * x + eq * x * x; } double d_ggumbel2(double x) // redundant function... { return -d_ggumbel(-x); } double d_gAO(double eta, double lambda) { if(ISNAN(eta) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(eta == R_PosInf || eta == R_NegInf) return 0; double lex = lambda * exp(eta); if(lex == R_PosInf || lex == 0) return 0.; double y = d_dAO(eta, lambda, 0/*give_log*/); return y == 0. ? 0. : y * (1 - (1 + 1/lambda) * lex / (1 + lex)); } double d_glgamma(double x, double lambda) { if(ISNAN(x) || ISNAN(lambda)) // true for NA and NaN return NA_REAL; if(x == R_PosInf || x == R_NegInf) return 0.; if(lambda < 1.0e-5 && lambda > -1.0e-5) // lambda close to zero return -x * dnorm(x, 0., 1., 0/*give_log*/); double z = exp(lambda * x); if(z == R_PosInf || z == 0.) return 0.; double y = d_dlgamma(x, lambda, 0/*give_log*/); return y <= 0. ? 0.0 : y * (1 - exp(lambda * x)) / lambda; // Equivalent to: /* if(y <= 0) return 0.0; else return y * (1 - exp(lambda * x)) / lambda; */ } ordinal/src/utilityFuns.c0000755000175100001440000005662314334154562015240 0ustar hornikusers///////////////////////////////////////////////////////////////////////////// // Copyright (c) 2010-2022 Rune Haubo Bojesen Christensen // // This file is part of the ordinal package for R (*ordinal*) // // *ordinal* is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // *ordinal* is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // A copy of the GNU General Public License is available at // and/or // . ///////////////////////////////////////////////////////////////////////////// #include #include #include "links.h" double mu = 0, sigma = 1; int give_log = 0, lower_tail = 1; //--------------------------------- double d_pfun(double, double, int); double d_pfun2(double, double, int, int); // with lower_tail arg double d_dfun(double, double, int); double d_gfun(double, double, int); //--- negative log-likelihood: double d_nll(double *, int, int *, double, double *, double *, int, double *, double *, double *, double *, double *, double *, double *, double, int *); //--- Utilities: double mmax(double *, int); double maxAbs(double *, int); void Trace(int, double, double, double, double *, int, int); //--------------------------------- //------------------------------------------------------------------ // CDFs: void pgumbel_C(double *q, int *nq, double *loc, double *scale, int *lower_tail) { // pgumbel() int i; // How can I handle if loc and scale are not of unit length? for(i = 0; i < *nq; i++) q[i] = d_pgumbel(q[i], *loc, *scale, *lower_tail); } void pgumbel2_C(double *q, int *nq, double *loc, double *scale, int *lower_tail) { int i; for(i = 0; i < *nq; i++) q[i] = 1 - d_pgumbel(-q[i], *loc, *scale, *lower_tail); } void pAO_C(double *q, int *nq, double *lambda, int *lower_tail) { int i; for(i = 0; i < *nq; i++) q[i] = d_pAO(q[i], *lambda, *lower_tail); } void plgamma_C(double *q, int *nq, double *lambda, int *lower_tail) { int i; for(i = 0; i < *nq; i++) q[i] = d_plgamma(q[i], *lambda, *lower_tail); } //------------------------------------------------------------------ // PDFs: void dgumbel_C(double *x, int *nx, double *loc, double *scale, int *give_log) { int i; for(i = 0; i < *nx; i++) x[i] = d_dgumbel(x[i], *loc, *scale, *give_log); } void dgumbel2_C(double *x, int *nx, double *loc, double *scale, int *give_log) { int i; for(i = 0; i < *nx; i++) x[i] = d_dgumbel2(x[i], *loc, *scale, *give_log); } void dAO_C(double *x, int *nx, double *lambda, int *give_log) { int i; for(i = 0; i < *nx; i++) x[i] = d_dAO(x[i], *lambda, *give_log); } void dlgamma_C(double *x, int *nx, double *lambda, int *give_log) { int i; for(i = 0; i < *nx; i++) x[i] = d_dlgamma(x[i], *lambda, *give_log); } //------------------------------------------------------------------ // gradients of PDFs: void glogis_C(double *x, int *nx) { int i; for(i = 0; i < *nx; i++) x[i] = d_glogis(x[i]); } void gnorm_C(double *x, int *nx) { // Gradient of dnorm(x) wrt. x int i; for(i = 0; i < *nx; i++) x[i] = d_gnorm(x[i]); } void gcauchy_C(double *x, int *n) { // Gradient of dcauchy(x) wrt. x int i; for(i = 0; i < *n; i++) x[i] = d_gcauchy(x[i]); } void ggumbel_C(double *x, int *nx) { int i; for(i = 0; i < *nx; i++) x[i] = d_ggumbel(x[i]); } void ggumbel2_C(double *x, int *nx) { int i; for(i = 0; i < *nx; i++) x[i] = -d_ggumbel(-x[i]); // or x[i] = d_ggumbel2(x[i]); } void gAO_C(double *x, int *nx, double *lambda) { int i; for(i = 0; i < *nx; i++) x[i] = d_gAO(x[i], *lambda); } void glgamma_C(double *x, int *nx, double *lambda) { int i; for(i = 0; i < *nx; i++) x[i] = d_glgamma(x[i], *lambda); } //------------------------------------------------------------------ // link utility functions: /* Link functions:: 1: logistic 2: probit 3: cloglog 4: loglog 5: cauchit 6: Aranda-Ordaz 7: log-gamma */ double d_pfun(double x, double lambda, int link) { switch(link) { case 1: // logistic return plogis(x, mu, sigma, lower_tail, give_log); case 2: // probit return pnorm(x, mu, sigma, lower_tail, give_log); case 3: // cloglog return d_pgumbel(x, mu, sigma, lower_tail); case 4: // loglog return d_pgumbel2(x, mu, sigma, lower_tail); case 5: // cauchit return pcauchy(x, mu, sigma, lower_tail, give_log); case 6: // Aranda-Ordaz return d_pAO(x, lambda, lower_tail); case 7: // log-gamma return d_plgamma(x, lambda, lower_tail); default : // all other // if(link == 6) // error("the Aranda-Ordaz link is not available"); // if(link == 7) // error("the log-gamma link is not available"); // else error("link not recognized\n"); return NA_REAL; } } double d_pfun2(double x, double lambda, int link, int lower_tail) // 2nd version of d_pfun with a lower_tail arg { switch(link) { case 1: // logistic return plogis(x, mu, sigma, lower_tail, give_log); case 2: // probit return pnorm(x, mu, sigma, lower_tail, give_log); case 3: // cloglog return d_pgumbel(x, mu, sigma, lower_tail); case 4: // loglog return d_pgumbel2(x, mu, sigma, lower_tail); case 5: // cauchit return pcauchy(x, mu, sigma, lower_tail, give_log); case 6: // Aranda-Ordaz return d_pAO(x, lambda, lower_tail); case 7: // log-gamma return d_plgamma(x, lambda, lower_tail); default : // all other // if(link == 6) // error("the Aranda-Ordaz link is not available"); // if(link == 7) // error("the log-gamma link is not available"); // else error("link not recognized\n"); return NA_REAL; } } void pfun(double *x, int *nx, double *lambda, int *link) { int i; for(i = 0; i < *nx; i++) x[i] = d_pfun(x[i], *lambda, *link); } double d_dfun(double x, double lambda, int link) { switch(link) { case 1: // logistic return dlogis(x, mu, sigma, give_log); case 2: // probit return dnorm(x, mu, sigma, give_log); case 3: // cloglog return d_dgumbel(x, mu, sigma, give_log); case 4: // loglog return d_dgumbel2(x, mu, sigma, give_log); case 5: // cauchit return dcauchy(x, mu, sigma, give_log); case 6: return d_dAO(x, lambda, give_log); case 7: return d_dlgamma(x, lambda, give_log); default : // all other error("link not recognized\n"); return NA_REAL; } } void dfun(double *x, int *nx, double *lambda, int *link) { int i; for(i = 0; i < *nx; i++) x[i] = d_dfun(x[i], *lambda, *link); } double d_gfun(double x, double lambda, int link) { switch(link) { case 1: // logistic return d_glogis(x); case 2: // probit return d_gnorm(x); case 3: // cloglog return d_ggumbel(x); case 4: // loglog return d_ggumbel2(x); case 5: // cauchit return d_gcauchy(x); case 6: return d_gAO(x, lambda); case 7: return d_glgamma(x, lambda); default : // all other error("link not recognized\n"); return NA_REAL; } } void gfun(double *x, int *nx, double *lambda, int *link) { int i; for(i = 0; i < *nx; i++) x[i] = d_gfun(x[i], *lambda, *link); } //------------------------------------------------------------------ void getFitted(double *eta1, double *eta2, int *neta) { // adjust for NA and NaN values? int i; for(i = 0; i < *neta; i++) { if(eta2[i] <= 0) // pnorm(x, mu, sigma, lower_tail, give_log); eta1[i] = pnorm(eta1[i], 0.0, 1.0, 1, 0) - pnorm(eta2[i], 0.0, 1.0, 1, 0); else eta1[i] = pnorm(eta2[i], 0.0, 1.0, 0, 0) - pnorm(eta1[i], 0.0, 1.0, 0, 0); } } void getFitted2(double *eta1, double *eta2, int *neta, double *lambda, int *link) // 2nd version now including a link arg { // adjust for NA and NaN values? int i; for(i = 0; i < *neta; i++) { if(eta2[i] <= 0) // d_pfun2(x, lambda, link, lower_tail) eta1[i] = d_pfun2(eta1[i], *lambda, *link, 1) - d_pfun2(eta2[i], *lambda, *link, 1); else eta1[i] = d_pfun2(eta2[i], *lambda, *link, 0) - d_pfun2(eta1[i], *lambda, *link, 0); } } //------------------------------------------------------------------ // Gradients and Hessians for update.b in clmm2(): void grFacSum_C(double *x, int *grFac, int *nx, double *u, int *nu) // compute tapply(x, grFac, sum) + u { int i, j; double z = 0; for(i = 0; i < *nu; i++) { for (j = 0; j < *nx; j++) { if(grFac[j] == i + 1) z = z + x[j]; } u[i] = u[i] + z; z = 0; } } // FIXME: grFacSum_C such that it can be used by gradC and hessC - this // should simplify the code double d_nll(double *u, int nu, int *grFac, double stDev, double *o1, double *o2, int no, double *eta1, double *eta2, double *eta1Fix, double *eta2Fix, double *sigma, double *pr, double *weights, double lambda, int *link) /* Returns: nll Updates: eta1, eta2, pr given the new value of u Leaves unchanged: u, grFac, stDev, o1, o2, eta1Fix, eta2Fix, sigma, weights */ { int i, j; double o, nll = 0.0; for(i = 0; i < no; i++) { o = u[grFac[i] - 1] * stDev; eta1[i] = (eta1Fix[i] + o1[i] - o) / sigma[i]; eta2[i] = (eta2Fix[i] + o2[i] - o) / sigma[i]; /* Accurate evaluation of pr (fitted values) even if eta1 and eta2 are both large: */ if(eta2[i] <= 0) pr[i] = d_pfun2(eta1[i], lambda, *link, 1) - d_pfun2(eta2[i], lambda, *link, 1); else pr[i] = d_pfun2(eta2[i], lambda, *link, 0) - d_pfun2(eta1[i], lambda, *link, 0); if(!R_FINITE(pr[i]) || pr[i] <= 0.) { return INFINITY; } nll -= weights[i] * log(pr[i]); } for(j = 0; j < nu; j++) nll -= dnorm(u[j], 0., 1., 1); return nll; } void nll(double *u, int *nu, int *grFac, double *stDev, double *o1, double *o2, int *no, double *eta1, double *eta2, double *eta1Fix, double *eta2Fix, double *sigma, double *pr, double *weights, double *lambda, int *link, double *nll) { *nll = d_nll(u, *nu, grFac, *stDev, o1, o2, *no, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); } void grad_C(double *stDev, double *p1, double *p2, double *pr, double *weights, double *sigma, double *wtprSig, double *eta1, double *eta2, double *gradValues, double *u, int *grFac, int *nx, int *ngv, double *lambda, int *link) /* Returns: void Updates: gradValues, p1, p2, wtprSig given the new values of eta1, eta2 Leaves unchanged: grFac, stDev, eta1, eta2, pr, sigma, weights, link, nx, ngv Assumes: nx: length of grFac, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2 ngv: length of gradValues */ { int i, j; // double tmp[*nx], z = 0; // update p1, p2, wtprSig: for(i = 0; i < *nx; i++) { p1[i] = d_dfun(eta1[i], *lambda, *link); p2[i] = d_dfun(eta2[i], *lambda, *link); wtprSig[i] = weights[i] / pr[i] / sigma[i]; } // sum for each level of the grouping factor: for(i = 0; i < *ngv; i++) { gradValues[i] = 0; // Could set these to for (j = 0; j < *nx; j++) { if(grFac[j] == i + 1) gradValues[i] += *stDev * wtprSig[j] * (p1[j] - p2[j]); } gradValues[i] += u[i]; } } void gradC(double *stDev, double *p1, double *p2, double *wtprSig, int *grFac, int *nx, double *u, int *nu) { // gradient for update.b int i, j; double z = 0; for(i = 0; i < *nx; i++) { wtprSig[i] = *stDev * wtprSig[i] * (p1[i] - p2[i]); } for(i = 0; i < *nu; i++) { for (j = 0; j < *nx; j++) { if(grFac[j] == i + 1) z += wtprSig[j]; } u[i] += z; z = 0; } } void hess(double *stDev, double *p1, double *p2, double *pr, double *wtprSig, double *eta1, double *eta2, int *link, int *grFac, int *nx, double *hessValues, double *lambda, int *nhv) /* Returns: void Updates: hessValues given the new values of eta1, eta2 Leaves unchanged: grFac, stDev, eta1, eta2, p1, p2, pr, sigma, weights, link, nx, ngv Assumes: nx: length of grFac, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2 nhv: length of hessValues */ { int i, j; // sum for each level of the grouping factor: for(i = 0; i < *nhv; i++) { hessValues[i] = 0; for (j = 0; j < *nx; j++) { if(grFac[j] == i + 1) hessValues[i] += (R_pow_di(p1[j] - p2[j], 2) / pr[j] - (d_gfun(eta1[j], *lambda, *link) - d_gfun(eta2[j], *lambda, *link))) * wtprSig[j]; } hessValues[i] = (hessValues[i] * *stDev * *stDev) + 1; } } void hessC(double *stDev, double *p1, double *p2, double *pr, double *g1, double *g2, double *wtprSig, int *grFac, int *nx, double *z, int *nz) { // hessian for update.b int i, j; double sigma2; sigma2 = R_pow_di(*stDev, 2); for(i = 0; i < *nx; i++) pr[i] = (R_pow_di(p1[i] - p2[i], 2) / pr[i] - (g1[i] - g2[i])) * wtprSig[i]; for(i = 0; i < *nz; i++) { for (j = 0; j < *nx; j++) { if(grFac[j] == i + 1) z[i] = z[i] + pr[j]; } z[i] = z[i] * sigma2 + 1; } } //------------------------------------------------------------------ // Trace function: void Trace(int iter, double stepFactor, double val, double maxGrad, double *par, int npar, int first) { int i; if(first) Rprintf("iter: step factor: Value: max|grad|: Parameters:\n"); Rprintf(" %3d: %1.3e: %.3f: %1.3e: ", iter, stepFactor, val, maxGrad); for(i = 0; i < npar; i++) Rprintf(" %.4f", par[i]); Rprintf("\n"); } //------------------------------------------------------------------ void NRalg(int *trace, int *maxIter, double *gradTol, int *maxLineIter, int *grFac, double *stDev, double *o1, double *o2, double *eta1Fix, double *eta2Fix, double *eta1, double *eta2, double *sigma, int *link, double *weights, double *u, double *pr, double *funValue, double *gradValues, double *hessValues, int *nx, int *nu, double *maxGrad, int *conv, double *p1, double *p2, double *wtprSig, double *lambda, int *Niter) { /* nx: length(pr) r: length(start) = length(u) updates: u, funValue, gradValues, hessValues, maxGrad, correct vector input: eta1, eta2, pr, funValue (grad is called before d_nll), u = 0, grFac, o1, o2, eta1Fix, eta2Fix, sigma, weights arbitrary input: p1, p2, wtprSig, gradValues, hessValues, needed output: u, funValue, gradValues, hessValues, conv, Niter, */ int lineIter, innerIter = 0, i, j; double stepFactor = 1, funValueTry, step[*nu]; *funValue = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); if(!R_FINITE(*funValue)) { *conv = 0; return ; } grad_C(stDev, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2, gradValues, u, grFac, nx, nu, lambda, link); *maxGrad = maxAbs(gradValues, *nu); *conv = -1; // Convergence flag if(*trace) Trace(0, stepFactor, *funValue, *maxGrad, u, *nu, 1); // Newton-Raphson algorithm: for(i = 0; i < *maxIter; i++) { if(*maxGrad < *gradTol) { *conv = 1; return ; } hess(stDev, p1, p2, pr, wtprSig, eta1, eta2, link, grFac, nx, hessValues, lambda, nu); for(j = 0; j < *nu; j++) { step[j] = gradValues[j] / hessValues[j]; u[j] -= stepFactor * step[j]; } funValueTry = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); lineIter = 0; // simple line search, i.e. step halfing: while(funValueTry > *funValue) { stepFactor *= 0.5; for(j = 0; j < *nu; j++) u[j] += stepFactor * step[j]; funValueTry = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); lineIter++; if(*trace) Trace(i+1+innerIter, stepFactor, *funValue, *maxGrad, u, *nu, 0); if(lineIter > *maxLineIter){ *conv = -2; return ; } innerIter++; } *funValue = funValueTry; grad_C(stDev, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2, gradValues, u, grFac, nx, nu, lambda, link); *maxGrad = maxAbs(gradValues, *nu); if(*trace) Trace(i+1+innerIter, stepFactor, *funValue, *maxGrad, u, *nu, 0); stepFactor = fmin2(1., stepFactor * 2.); (*Niter)++; } } void NRalgv3(int *trace, int *maxIter, double *gradTol, int *maxLineIter, int *grFac, double *stDev, double *o1, double *o2, double *eta1Fix, double *eta2Fix, double *sigma, int *link, double *weights, double *u, double *pr, double *funValue, double *gradValues, double *hessValues, int *nx, int *nu, double *maxGrad, int *conv, double *lambda, int *Niter) // Less input and slightly faster than NRalg(). { /* control arguments from clmm - see ?clmm.control: trace, maxIter, gradTol, maxLineIter all of length 1 length = nx: grFac, o1, o2, eta1Fix, eta2Fix, sigma, weights length = 1: stDev, funValue, nx, nu, maxGrad, conv, lambda, Niter length = nu: gradValues, hessValues, u updates: u, funValue, gradValues, hessValues, maxGrad, conv, Niter, pr, correct vector input: eta1, eta2, pr, u = 0, grFac, o1, o2, eta1Fix, eta2Fix, sigma, weights arbitrary input: gradValues, hessValues, needed output: u, funValue, gradValues, hessValues, conv, Niter, */ int lineIter, innerIter = 0, i, j; double stepFactor = 1, funValueTry, step[*nu]; double eta1[*nx], eta2[*nx], p1[*nx], p2[*nx], wtprSig[*nx]; *funValue = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); if(!R_FINITE(*funValue)) { *conv = 0; return ; } grad_C(stDev, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2, gradValues, u, grFac, nx, nu, lambda, link); *maxGrad = maxAbs(gradValues, *nu); *conv = -1; // Convergence flag if(*trace) Trace(0, stepFactor, *funValue, *maxGrad, u, *nu, 1); // Newton-Raphson algorithm: for(i = 0; i < *maxIter; i++) { if(*maxGrad < *gradTol) { *conv = 1; return ; } hess(stDev, p1, p2, pr, wtprSig, eta1, eta2, link, grFac, nx, hessValues, lambda, nu); for(j = 0; j < *nu; j++) { /* Actually there is no need to store 'step' since 'gradValues' could hold the step values (maintained here for code clarity) */ step[j] = gradValues[j] / hessValues[j]; u[j] -= stepFactor * step[j]; } funValueTry = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); lineIter = 0; // simple line search, i.e. step halfing: while(funValueTry > *funValue) { stepFactor *= 0.5; for(j = 0; j < *nu; j++) u[j] += stepFactor * step[j]; funValueTry = d_nll(u, *nu, grFac, *stDev, o1, o2, *nx, eta1, eta2, eta1Fix, eta2Fix, sigma, pr, weights, *lambda, link); lineIter++; if(*trace) Trace(i+1+innerIter, stepFactor, *funValue, *maxGrad, u, *nu, 0); if(lineIter > *maxLineIter){ *conv = -2; return ; } innerIter++; } *funValue = funValueTry; grad_C(stDev, p1, p2, pr, weights, sigma, wtprSig, eta1, eta2, gradValues, u, grFac, nx, nu, lambda, link); *maxGrad = maxAbs(gradValues, *nu); if(*trace) Trace(i+1+innerIter, stepFactor, *funValue, *maxGrad, u, *nu, 0); stepFactor = fmin2(1.0, stepFactor * 2.0); (*Niter)++; } (*Niter)--; } //------------------------------------------------------------------ void getNGHQ_C(double *nll, int *grFac, double *stDev, double *eta1Fix, double *eta2Fix, double *o1, double *o2, double *Sigma, double *weights, int *nx, int *nu, double *ghqns, /* double *ghqws,*/ double *lghqws, int *nGHQ, int *link, double *ns, double *lambda) { int i, j, h; double SS = 0, SS1 = 0, SS2 = 0, eta1tmp, eta2tmp, pr_tmp; for(i = 0; i < *nu; i++) { for(h = 0; h < *nGHQ; h++) { for(j = 0; j < *nx; j++) { if(grFac[j] == i + 1) { eta1tmp = (eta1Fix[j] + o1[j] - ns[h]) / Sigma[j]; eta2tmp = (eta2Fix[j] + o2[j] - ns[h]) / Sigma[j]; /* Accurate evaluation of differences of probabilities even if eta1tmp and eta2tmp are large: */ if(eta2tmp <= 0) pr_tmp = d_pfun2(eta1tmp, *lambda, *link, 1) - d_pfun2(eta2tmp, *lambda, *link, 1); else pr_tmp = d_pfun2(eta2tmp, *lambda, *link, 0) - d_pfun2(eta1tmp, *lambda, *link, 0); // sum up contributions: SS1 += weights[j] * log(pr_tmp); } } // SS2 += exp(SS1) * ghqws[h]; // SS2 += exp(SS1 + log(ghqws[h])); SS2 += exp(SS1 + lghqws[h]); SS1 = 0; } SS += log(SS2); SS2 = 0; } *nll = -SS + *nu * log(M_PI * 2) * 0.5; } void getNAGQ(double *nll, int *grFac, double *stDev, double *eta1Fix, double *eta2Fix, double *o1, double *o2, double *Sigma, double *weights, int *nx, int *nu, double *ghqns, double *lghqws, /* double *lghqws, */ double *ghqns2, double *u, double *D, int *nAGQ, int *link, double *lambda) /* nll: negative log-likelihood (return value) length = nx: grFac, o1, o2, eta1Fix, eta2Fix, Sigma, weights length = 1: stDev, nll, nx, nu, nAGQ, lambda, link length = nu: D, u length = nAGQ: ghqns, lghqws (log ghqws) / ghqws */ { int i, j, h; double SS1 = 0, SS2 = 0, eta1tmp, eta2tmp, K, ranNew, pr_tmp; *nll = 0; for(i = 0; i < *nu; i++) { K = sqrt(2. / D[i]); for(h = 0; h < *nAGQ; h++) { for(j = 0; j < *nx; j++) { if(grFac[j] == i + 1) { ranNew = *stDev * (u[i] + K * ghqns[h]); eta1tmp = (eta1Fix[j] + o1[j] - ranNew) / Sigma[j]; eta2tmp = (eta2Fix[j] + o2[j] - ranNew) / Sigma[j]; /* Accurate evaluation of differences of probabilities even if eta1tmp and eta2tmp are large: */ if(eta2tmp <= 0) pr_tmp = d_pfun2(eta1tmp, *lambda, *link, 1) - d_pfun2(eta2tmp, *lambda, *link, 1); else pr_tmp = d_pfun2(eta2tmp, *lambda, *link, 0) - d_pfun2(eta1tmp, *lambda, *link, 0); // sum up contributions: SS1 += weights[j] * log(pr_tmp); } } // SS2 += exp(SS1) * K * ghqws[h] * // dnorm(u[i] + K * ghqns[h], mu, sigma, give_log); // SS2 += exp(SS1 + lghqws[h] + ghqns2[h] - //R_pow_di(ghqns[h], 2) + // 0.5 * R_pow_di(u[i] + K * ghqns[h], 2)) * K; SS2 += exp(SS1 + lghqws[h] + ghqns2[h] - //R_pow_di(ghqns[h], 2) + 0.5 * R_pow_di(u[i] + K * ghqns[h], 2)); SS1 = 0; } // *nll -= log(SS2); *nll -= log(SS2) + log(K); SS2 = 0; } *nll += *nu * log(M_PI * 2) * 0.5; } //------------------------------------------------------------------ double mmax(double *x, int nx) /* Return the maximum of the elements in x nx: length of x ( >= 1) */ { int i; double cmax; // current max cmax = x[0]; if(nx == 1) return cmax; for(i = 1; i < nx; i++) { if(x[i] > cmax) cmax = x[i]; } return cmax; } double maxAbs(double *x, int nx) /* Return max(abs(x)) nx: length of x ( >= 1 ) */ { int i; double cmax; // current max cmax = fabs(x[0]); if(nx == 1) return cmax; for(i = 1; i < nx; i++) { if(fabs(x[i]) > cmax) cmax = fabs(x[i]); } return cmax; } ordinal/NAMESPACE0000644000175100001440000001012414334204246013137 0ustar hornikusersuseDynLib("ordinal", .registration = TRUE) importFrom(graphics, plot, par, abline, lines, points, contour) importFrom(grDevices, dev.interactive, devAskNewPage) importFrom(utils, "combn", "packageDescription", "as.roman") importFrom(ucminf, ucminf) importFrom(numDeriv, grad, hessian) importFrom("stats", ".checkMFClasses", ".getXlevels", "AIC", "add.scope", "approx", "as.formula", "binomial", "coef", "confint", "dcauchy", "dlogis", "dnorm", "drop.scope", "drop.terms", "extractAIC", "fitted", "formula", "glm.fit", "is.empty.model", "logLik", "model.frame", "model.matrix", "model.offset", "model.response", "model.weights", "na.pass", "napredict", "naprint", "nlminb", "optim", "pcauchy", "pchisq", "pgamma", "plogis", "pnorm", "printCoefmat", "profile", "qchisq", "qlogis", "qnorm", "runif", "setNames", "spline", "terms", "update.formula", "vcov", "nobs", "delete.response", "lm.fit", "resid", "reformulate") ## importFrom(stats, ## nobs) import(methods) ## import(stats) ## importFrom(methods, ## as, ## checkAtAssignment, ## loadMethod) import(Matrix) importFrom(nlme, ranef, # also exported VarCorr) # also exported ## importFrom(numDeriv, ## hessian, ## grad) importFrom(MASS, ginv, addterm, dropterm) ## importFrom(stats, ## coef, ## confint, ## nobs, ## logLik, ## profile, ## vcov, ## extractAIC, ## anova, ## fitted## , ## ## terms ## ## update ## ) # Functions: export(clm) export(clm.fit) export(clmm) export(clm.control) export(clmm.control) export(slice) export(convergence) export(drop.coef) export(nominal_test) export(scale_test) export(condVar) export(ranef) export(VarCorr) export(gnorm, glogis, gcauchy, pgumbel, dgumbel, ggumbel, qgumbel, rgumbel, plgamma, dlgamma, glgamma ## , ## pAO, dAO, gAO, ) ## Methods: S3method(clm.fit, default) S3method(clm.fit, factor) S3method(print, clm) S3method(vcov, clm) S3method(summary, clm) S3method(print, summary.clm) S3method(convergence, clm) S3method(print, convergence.clm) S3method(slice, clm) S3method(plot, slice.clm) S3method(anova, clm) S3method(print, anova.clm) S3method(predict, clm) S3method(coef, clm) S3method(nobs, clm) S3method(coef, summary.clm) S3method(scale_test, clm) S3method(nominal_test, clm) S3method(profile, clm) S3method(confint, clm) S3method(confint, profile.clm) S3method(plot, profile.clm) S3method(logLik, clm) S3method(extractAIC, clm) S3method(model.matrix, clm) S3method(model.frame, clm) S3method(terms, clm) S3method(print, clmm) S3method(vcov, clmm) S3method(summary, clmm) S3method(print, summary.clmm) S3method(logLik, clmm) S3method(extractAIC, clmm) S3method(anova, clmm) S3method(nobs, clmm) ## S3method(profile, clmm) ## S3method(confint, profile.clmm) ## S3method(plot, profile.clmm) ## S3method(update, clmm) ## S3method(fixef, clmm) S3method(ranef, clmm) S3method(condVar, clmm) S3method(VarCorr, clmm) S3method(model.matrix, clmm) ################################################################## ### clm2 stuff: ## Functions: export(clm2) export(clmm2) export(clm2.control) export(clmm2.control) ## Methods: S3method(print, clm2) S3method(vcov, clm2) S3method(summary, clm2) S3method(print, summary.clm2) S3method(anova, clm2) S3method(predict, clm2) S3method(profile, clm2) S3method(confint, clm2) S3method(confint, profile.clm2) S3method(plot, profile.clm2) S3method(logLik, clm2) S3method(extractAIC, clm2) S3method(update, clm2) S3method(dropterm, clm2) S3method(addterm, clm2) S3method(print, clmm2) S3method(vcov, clmm2) S3method(summary, clmm2) S3method(print, summary.clmm2) S3method(anova, clmm2) S3method(profile, clmm2) S3method(confint, profile.clmm2) S3method(plot, profile.clmm2) S3method(update, clmm2) ordinal/LICENCE.note0000644000175100001440000000155313277531311013660 0ustar hornikusersCopyrights ========== All files are copyright (C) 2011 R. H. B. Christensen with all rights assigned to R. H. B. Christensen Licence ======= This is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 or 3 of the License (at your option). This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Files share/licenses/GPL-2 and share/licenses/GPL-3 in the R (source or binary) distribution are copies of versions 2 and 3 of the 'GNU General Public License'. These can also be viewed at http://www.r-project.org/licenses/ Rune.Haubo@gmail.com ordinal/inst/0000755000175100001440000000000014660600734012703 5ustar hornikusersordinal/inst/CITATION0000755000175100001440000000071414660600734014045 0ustar hornikusersyear <- sub(".*(2[[:digit:]]{3})-.*", "\\1", meta$Date) vers <- paste0("R package version ", meta$Version) bibentry( 'Manual', title = 'ordinal---Regression Models for Ordinal Data', author = person("Rune H. B.", "Christensen", comment = c(ORCID = "0000-0002-4494-3399")), header = "To cite 'ordinal' in publications use:", year = year, note = vers, url = "https://CRAN.R-project.org/package=ordinal" ) ordinal/inst/doc/0000755000175100001440000000000014533322572013450 5ustar hornikusersordinal/inst/doc/clmm2_tutorial.Rnw0000644000175100001440000004375212431104052017072 0ustar hornikusers\documentclass[a4paper]{article} \usepackage{amsmath}%the AMS math extension of LaTeX. \usepackage{amssymb}%the extended AMS math symbols. %% \usepackage{amsthm} \usepackage{bm}%Use 'bm.sty' to get `bold math' symbols \usepackage{natbib} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{Sweave} \usepackage{url} \usepackage{float}%Use `float.sty' \usepackage[left=3.5cm,right=3.5cm]{geometry} \usepackage{algorithmic} \usepackage[amsmath,thmmarks,standard,thref]{ntheorem} %%\VignetteIndexEntry{clmm2 tutorial} %%\VignetteDepends{ordinal, xtable} \title{A Tutorial on fitting Cumulative Link Mixed Models with \texttt{clmm2} from the \textsf{ordinal} Package} \author{Rune Haubo B Christensen} %% \numberwithin{equation}{section} \setlength{\parskip}{2mm}%.8\baselineskip} \setlength{\parindent}{0in} %% \DefineVerbatimEnvironment{Sinput}{Verbatim}%{} %% {fontshape=sl, xleftmargin=1em} %% \DefineVerbatimEnvironment{Soutput}{Verbatim}%{} %% {xleftmargin=1em} %% \DefineVerbatimEnvironment{Scode}{Verbatim}%{} %% {fontshape=sl, xleftmargin=1em} \fvset{listparameters={\setlength{\topsep}{0pt}}} %% \fvset{listparameters={\setlength{\botsep}{0pt}}} \renewenvironment{Schunk}{\vspace{-1mm}}{\vspace{-1mm}} %RE-DEFINE marginpar \setlength{\marginparwidth}{1in} \let\oldmarginpar\marginpar \renewcommand\marginpar[1]{\oldmarginpar[\-\raggedleft\tiny #1]% {\tiny #1}} %uncomment to _HIDE_MARGINPAR_: %\renewcommand\marginpar[1]{} \newcommand{\var}{\textup{var}} \newcommand{\I}{\mathcal{I}} \newcommand{\bta}{\bm \theta} \newcommand{\ta}{\theta} \newcommand{\tah}{\hat \theta} \newcommand{\di}{~\textup{d}} \newcommand{\td}{\textup{d}} \newcommand{\Si}{\Sigma} \newcommand{\si}{\sigma} \newcommand{\bpi}{\bm \pi} \newcommand{\bmeta}{\bm \eta} \newcommand{\tdots}{\hspace{10mm} \texttt{....}} \newcommand{\FL}[1]{\fvset{firstline= #1}} \newcommand{\LL}[1]{\fvset{lastline= #1}} \newcommand{\s}{\square} \newcommand{\bs}{\blacksquare} % figurer bagerst i artikel %% \usepackage[tablesfirst, nolists]{endfloat} %% \renewcommand{\efloatseparator}{\vspace{.5cm}} \theoremstyle{plain} %% {break} \theoremseparator{:} \theoremsymbol{{\tiny $\square$}} %%\theoremstyle{plain} \theorembodyfont{\small} \theoremindent5mm \renewtheorem{example}{Example} %% \newtheoremstyle{example}{\topsep}{\topsep}% %% {}% Body font %% {}% Indent amount (empty = no indent, \parindent = para indent) %% {\bfseries}% Thm head font %% {}% Punctuation after thm head %% {\newline}% Space after thm head (\newline = linebreak) %% {\thmname{#1}\thmnumber{ #2}\thmnote{ #3}}% Thm head spec %% %% \theoremstyle{example} %% %% \newtheorem{example}{Example}[subsection] %% \newtheorem{example}{Example}[section] \usepackage{lineno} % \linenumbers \newcommand*\patchAmsMathEnvironmentForLineno[1]{% \expandafter\let\csname old#1\expandafter\endcsname\csname #1\endcsname \expandafter\let\csname oldend#1\expandafter\endcsname\csname end#1\endcsname \renewenvironment{#1}% {\linenomath\csname old#1\endcsname}% {\csname oldend#1\endcsname\endlinenomath}}% \newcommand*\patchBothAmsMathEnvironmentsForLineno[1]{% \patchAmsMathEnvironmentForLineno{#1}% \patchAmsMathEnvironmentForLineno{#1*}}% \AtBeginDocument{% \patchBothAmsMathEnvironmentsForLineno{equation}% \patchBothAmsMathEnvironmentsForLineno{align}% \patchBothAmsMathEnvironmentsForLineno{flalign}% \patchBothAmsMathEnvironmentsForLineno{alignat}% \patchBothAmsMathEnvironmentsForLineno{gather}% \patchBothAmsMathEnvironmentsForLineno{multline}% } \begin{document} \bibliographystyle{chicago} \maketitle \begin{abstract} It is shown by example how a cumulative link mixed model is fitted with the \texttt{clmm2} function in package \textsf{ordinal}. Model interpretation and inference is briefly discussed. A tutorial for the more recent \texttt{clmm} function is work in progress. \end{abstract} %% \newpage %% \tableofcontents %% \newpage \SweaveOpts{echo=TRUE, results=verb, width=4.5, height=4.5} \SweaveOpts{prefix.string=figs} \fvset{listparameters={\setlength{\topsep}{0pt}}, gobble=0, fontsize=\small} %% \fvset{gobble=0, fontsize=\small} \setkeys{Gin}{width=.49\textwidth} <>= ## Load common packages, functions and set settings: library(ordinal) library(xtable) ## RUN <- FALSE #redo computations and write .RData files ## Change options: op <- options() ## To be able to reset settings options("digits" = 7) options(help_type = "html") ## options("width" = 75) options("SweaveHooks" = list(fig=function() par(mar=c(4,4,.5,0)+.5))) options(continue=" ") @ We will consider the data on the bitterness of wine from \citet{randall89} presented in Table~\ref{tab:winedata} and available as the object \texttt{wine} in package \textsf{ordinal}. The data were also analyzed with mixed effects models by \citet{tutz96}. The following gives an impression of the wine data object: <<>>= data(wine) head(wine) str(wine) @ The data represent a factorial experiment on factors determining the bitterness of wine with 1 = ``least bitter'' and 5 = ``most bitter''. Two treatment factors (temperature and contact) each have two levels. Temperature and contact between juice and skins can be controlled when crushing grapes during wine production. Nine judges each assessed wine from two bottles from each of the four treatment conditions, hence there are 72 observations in all. For more information see the manual entry for the wine data: \texttt{help(wine)}. \begin{table} \centering \caption{Ratings of the bitterness of some white wines. Data are adopted from \citet{randall89}.} \label{tab:winedata} \begin{tabular}{lllrrrrrrrrr} \hline & & & \multicolumn{9}{c}{Judge} \\ \cline{4-12} <>= data(wine) temp.contact.bottle <- with(wine, temp:contact:bottle)[drop=TRUE] tab <- xtabs(as.numeric(rating) ~ temp.contact.bottle + judge, data=wine) class(tab) <- "matrix" attr(tab, "call") <- NULL mat <- cbind(rep(c("cold", "warm"), each = 4), rep(rep(c("no", "yes"), each=2), 2), 1:8, tab) colnames(mat) <- c("Temperature", "Contact", "Bottle", 1:9) xtab <- xtable(mat) print(xtab, only.contents=TRUE, include.rownames=FALSE, sanitize.text.function = function(x) x) @ \end{tabular} \end{table} We will fit the following cumulative link mixed model to the wine data: \begin{equation} \label{eq:mixedModel} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j - \beta_1 (\mathtt{temp}_i) - \beta_2(\mathtt{contact}_i) - u(\mathtt{judge}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation} This is a model for the cumulative probability of the $i$th rating falling in the $j$th category or below, where $i$ index all observations and $j = 1, \ldots, J$ index the response categories ($J = 5$). $\{\theta_j\}$ are known as threshold parameters or cut-points. We take the judge effects to be random, and assume that the judge effects are IID normal: $u(\mathtt{judge}_i) \sim N(0, \sigma_u^2)$. We fit this model with the \texttt{clmm2} function in package \textsf{ordinal}. Here we save the fitted \texttt{clmm2} model in the object \texttt{fm1} (short for \texttt{f}itted \texttt{m}odel \texttt{1}) and \texttt{print} the model by simply typing its name: <<>>= fm1 <- clmm2(rating ~ temp + contact, random=judge, data=wine) fm1 @ Maximum likelihood estimates of the parameters are provided using the Laplace approximation to compute the likelihood function. A more accurate approximation is provided by the adaptive Gauss-Hermite quadrature method. Here we use 10 quadrature nodes and use the \texttt{summary} method to display additional information: <<>>= fm2 <- clmm2(rating ~ temp + contact, random=judge, data=wine, Hess=TRUE, nAGQ=10) summary(fm2) @ The small changes in the parameter estimates show that the Laplace approximation was in fact rather accurate in this case. Observe that we set the option \texttt{Hess = TRUE}. This is needed if we want to use the \texttt{summary} method since the Hessian is needed to compute standard errors of the model coefficients. The results contain the maximum likelihood estimates of the parameters: \begin{equation} \label{eq:parameters} \hat\beta_1 = 3.06, ~~\hat\beta_2 = 1.83, ~~\hat\sigma_u^2 = 1.29 = 1.13^2, ~~\{\hat\theta_j\} = [-1.62,~ 1.51,~ 4.23,~ 6.09]. \end{equation} Observe the number under \texttt{Std.Dev} for the random effect is \textbf{not} the standard error of the random effects variance, \texttt{Var}. Rather, it is the standard deviation of the random effects, i.e., it is the square root of the variance. In our example $\sqrt{1.29} \simeq 1.13$. The condition number of the Hessian measures the empirical identifiability of the model. High numbers, say larger than $10^4$ or $10^6$ indicate that the model is ill defined. This would indicate that the model can be simplified, that possibly some parameters are not identifiable, and that optimization of the model can be difficult. In this case the condition number of the Hessian does not indicate a problem with the model. The coefficients for \texttt{temp} and \texttt{contact} are positive indicating that higher temperature and more contact increase the bitterness of wine, i.e., rating in higher categories is more likely. The odds ratio of the event $Y \geq j$ is $\exp(\beta_{\textup{treatment}})$, thus the odds ratio of bitterness being rated in category $j$ or above at warm relative to cold temperatures is <<>>= exp(coef(fm2)[5]) @ The $p$-values for the location coefficients provided by the \texttt{summary} method are based on the so-called Wald statistic. More accurate test are provided by likelihood ratio tests. These can be obtained with the \texttt{anova} method, for example, the likelihood ratio test of \texttt{contact} is <<>>= fm3 <- clmm2(rating ~ temp, random=judge, data=wine, nAGQ=10) anova(fm3, fm2) @ which in this case is slightly more significant. The Wald test is not reliable for variance parameters, so the \texttt{summary} method does not provide a test of $\sigma_u$, but a likelihood ratio test can be obtained with \texttt{anova}: <<>>= fm4 <- clm2(rating ~ temp + contact, data=wine) anova(fm4, fm2) @ showing that the judge term is significant. Since this test of $\sigma_u = 0$ is on the boundary of the parameter space (a variance cannot be negative), it is often argued that a more correct $p$-value is obtained by halving the $p$-value produced by the conventional likelihood ratio test. In this case halving the $p$-value is of little relevance. A profile likelihood confidence interval of $\sigma_u$ is obtained with: <<>>= pr2 <- profile(fm2, range=c(.1, 4), nSteps=30, trace=0) confint(pr2) @ The profile likelihood can also be plotted: <>= plot(pr2) @ The result is shown in Fig.~\ref{fig:PRsigma_u} where horizontal lines indicate 95\% and 99\% confindence bounds. Clearly the profile likelihood function is asymmetric and symmetric confidence intervals would be inaccurate. \begin{figure} \centering <>= <> @ \caption{Profile likelihood of $\sigma_u$.} \label{fig:PRsigma_u} \end{figure} The judge effects, $u(\mathtt{judge}_i)$ are not parameters, so they cannot be \emph{estimated} in the conventional sense, but a ``best guess'' is provided by the \emph{conditional modes}. Similarly the \emph{conditional variance} provides an uncertainty measure of the conditional modes. These quantities are included in \texttt{clmm2} objects as the \texttt{ranef} and \texttt{condVar} components. The following code generates the plot in Fig.~\ref{fig:ranef} illustrating judge effects via conditional modes with 95\% confidence intervals based on the conditional variance: <>= ci <- fm2$ranef + qnorm(0.975) * sqrt(fm2$condVar) %o% c(-1, 1) ord.re <- order(fm2$ranef) ci <- ci[order(fm2$ranef),] plot(1:9, fm2$ranef[ord.re], axes=FALSE, ylim=range(ci), xlab="Judge", ylab="Judge effect") axis(1, at=1:9, labels = ord.re) axis(2) for(i in 1:9) segments(i, ci[i,1], i, ci[i, 2]) abline(h = 0, lty=2) @ The seventh judge gave the lowest ratings of bitterness while the first judge gave the highest ratings of bitterness. The significant judge effect indicate that judges perceived the bitterness of the wines differently. Two natural interpretations are that either a bitterness of, say, 3 means different things to different judges, or the judges actually perceived the bitterness of the wines differently. Possibly both effects play their part. \begin{figure} \centering <>= <> @ \caption{Judge effects given by conditional modes with 95\% confidence intervals based on the conditional variance.} \label{fig:ranef} \end{figure} The fitted or predicted probabilites can be obtained with the judge effects at their conditional modes or for an average judge ($u = 0$). The former are available with \texttt{fitted(fm)} or with \texttt{predict(fm)}, where \texttt{fm} is a \texttt{f}itted \texttt{m}odel object. In our example we get <<>>= head(cbind(wine, fitted(fm2))) @ Predicted probabilities for an average judge can be obtained by including the data used to fit the model in the \texttt{newdata} argument of \texttt{predict}: <<>>= head(cbind(wine, pred=predict(fm2, newdata=wine))) @ Model~\eqref{eq:mixedModel} says that for an average judge at cold temperature the cumulative probability of a bitterness rating in category $j$ or below is \begin{equation*} P(Y_i \leq j) = \textup{logit}^{-1} [ \theta_j - \beta_2(\mathtt{contact}_i) ] \end{equation*} since $u$ is set to zero and $\beta_1(\mathtt{temp}_i) = 0$ at cold conditions. Further, $\textup{logit}^{-1}(\eta) = 1 / [1 + \exp(\eta)]$ is the cumulative distribution function of the logistic distribution available as the \texttt{plogis} function. The (non-cumulative) probability of a bitterness rating in category $j$ is $\pi_j = P(Y_i \leq j) - P(Y_i \leq j-1)$, for instance the probability of a bitterness rating in the third category at these conditions can be computed as <<>>= plogis(fm2$Theta[3] - fm2$beta[2]) - plogis(fm2$Theta[2] - fm2$beta[2]) @ This corresponds to the third entry of \texttt{predict(fm2, newdata=wine)} given above. Judge effects are random and normally distributed, so an average judge effect is 0. Extreme judge effects, say 5th and 95th percentile judge effects are given by <<>>= qnorm(0.95) * c(-1, 1) * fm2$stDev @ At the baseline experimental conditions (cold and no contact) the probabilites of bitterness ratings in the five categories for a 5th percentile judge is <<>>= pred <- function(eta, theta, cat = 1:(length(theta)+1), inv.link = plogis) { Theta <- c(-1e3, theta, 1e3) sapply(cat, function(j) inv.link(Theta[j+1] - eta) - inv.link(Theta[j] - eta) ) } pred(qnorm(0.05) * fm2$stDev, fm2$Theta) @ We can compute these probabilities for average, 5th and 95th percentile judges at the four experimental conditions. The following code plots these probabilities and the results are shown in Fig.~\ref{fig:ratingProb}. <>= mat <- expand.grid(judge = qnorm(0.95) * c(-1, 0, 1) * fm2$stDev, contact = c(0, fm2$beta[2]), temp = c(0, fm2$beta[1])) pred.mat <- pred(eta=rowSums(mat), theta=fm2$Theta) lab <- paste("contact=", rep(levels(wine$contact), 2), ", ", "temp=", rep(levels(wine$temp), each=2), sep="") par(mfrow=c(2, 2)) for(k in c(1, 4, 7, 10)) { plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") } @ \begin{figure} \centering <>= k <- 1 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 4 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 7 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ <>= k <- 10 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") @ \caption{Rating probabilities for average and extreme judges at different experimental conditions.} \label{fig:ratingProb} \end{figure} At constant experimental conditions the odds ratio for a bitterness rating in category $j$ or above for a 95th percentile judge relative to a 5th percentile judge is <<>>= exp(2*qnorm(0.95) * fm2$stDev) @ The differences between judges can also be expressed in terms of the interquartile range: the odds ratio for a bitterness rating in category $j$ or above for a third quartile judge relative to a first quartile judge is <<>>= exp(2*qnorm(0.75) * fm2$stDev) @ \newpage \bibliography{ordinal} %% \newpage \end{document} <>= @ ordinal/inst/doc/clmm2_tutorial.pdf0000644000175100001440000027457214660601551017117 0ustar hornikusers%PDF-1.5 %ż÷˘ţ 1 0 obj << /Type /ObjStm /Length 4064 /Filter /FlateDecode /N 85 /First 714 >> stream xśĹ\[s۸~ďŻŔ[·ł“%q';ťťń%ŽíD©c{ťM:ű X´­®,y%9›íŻďwń‚’h[íŽ# $Ëą}çŚ`)“Ls¦ĎP`"çĚ0% ł,K ËO3ÁrĆĄIQf\ă Ž6Ś &RaQÉ„´¸VLŤk"Ü0É î[&µ‘ŚÉLjĆs¦¤HŃ©L&8Ó©´L¦… ĹšŚ ĹŚŔ—ĐĚ4qfr´G—–S»ŚYiŃyÎl¦1•”eŇjtĘ2<Ŕ$Fžj\K–+…zĹr‹I€Dža ÁSŽQ ožj Kş §h‚ѦxˇçŽGË;·ČB¸ďâϦ´>ĆŤ8üÓĹ ZHe#Ëú®'Ë?eÝ7L%Ť~Ů›şkáh©Ü¸’%›MOYßVB1Ąĺî×ÝÇsÔýţR®ýŢâš8ja  ÇĹřö®ĽÄżKö’ä]2HÎ’Ëd\'٤Hn’›qr›Ü%ăä×d’Ü'Ód–Ě“E˛L“ŻÉďÉ7=ń†Čż‚^`Í'Ă[R@·řűĄąş,ĺ®Ó_|ĺŃxR@ŻKžăÎűá}Ń!'ĐßńőŢôvRŕŮd0^, -Ž­°űÜ_÷W^jĆ7D&ůy5eŐŠäńŕčxđůý]^¶ä˘3Ý›.ĆőŤZ2aĘŰÝämÉ„çč)™éî$sÝ_WtŹ>mI1đŔ Iń—•¤\;QXţ>k2_—¬ç’ó4â?Übž9B÷ó´Íý›¸Ż!Q+îĂme~3˙óŰ«Á[twqńćĂ·»áĽÍ}8ż~܇ßöv Sg„Ť_Ş©4bi6`WSłÝeĹŻ!ty ž9ĺmňĚnćlŕ yĆŰ<‹±§Ćš<“1ĎN?ź]ěťx!€ˇúńL©g2â™íÉ3aKmR°`ĺ']}×5-Ż8 8 +h{ţElÖf˘­•o©¤nÜ©G–şër(K<Ń/ÝŹeH‡2¤Cď°˙pśśCšľ$׳űű!ů@•&Óń´€„Íđí],ÜÄŠů,ôŞ;)b7ˇśŔQďˇĐ‰¶ĐER°QčG”nkżMęrc©»|{~FBľ˙sš÷–:Łc©Ó‘Ô™žR—ĺňĄ^X‘â5-ĚůĘŃPTÓamČę6q%ĹI—&ăÍfkČq /#Ć·±‘ńąŞńAĆëńźNŽŻŢ:Ak1>+Ƕ Żň°ňľ°€B=Ë·2Udşó­mß‘ő\ő… ŽŤFEQbů+éŢ꾍=*e_ܱa˛ˇa˛ˇ¸ť´z‘« ëÍ$B­ÉC1ĎF!|MţMS…bLl™0@ę>PŐĐH`6 (f\Y¦l»€vřĂOGçGç2=Á2É!XŃ×2iá.t«_=çÓ¦—ö ›>±ßJĽ+Ęé“iĽ|Žţ;Âăą ń¸iGn‡Éëä(y}⢸÷É?É}€żľ@<÷Sr.®Çăĺx2* -_†óäË|xýk±ś7˲<§ J׳ÉlşňóŁd4›Lđ|‘¸ţ“â·ÇáÄiÚ× ÜRş¤Cëîţx¸+¦Pľ;ő›‹…ÓÁ>€2R’ÁuěJľ[h(M·ÔÔ‡Éă"ů-ůíq¶,F_&ľ@š3ńcQ|E?‹ń·d1.îqÜÍ‹b…;Vúťü'F ˘ľ2tC€Ľ®–ĚÉ۸WGŠŢVĽŤ±Šhx˘íŠ®: Č›óŁűďÎ~‚˘w+âÁJîA§–µ_J7~©†¬˝ó/šÇö\„ÁŠč¬ ŔÚPOa‘ ŮfÚl‹–±§}°ŢĆ5Óaž?|úđúŘŐ4Äi?pó* R„čÉ+)Ąű¬ YxqJ$iâW&CPY^Ë,wÇY›9Jôë)őůř§ wd%Ń©KYĚÁ"ü3Xźf¨NšRv Ě`N‘€öíŤ[,+Ťµ]Ąňx*˛`đőTé1…8§ü•pŕĺ}7şFk*Ó”é~YO÷%BBŹ´ĺ=ë¶+2÷Q]1”‘±ćq Ő´Ô§ [í-őÇ” íoex§#2t•ýĄcx–8˛ŔĎ2ľµÝu–ţŮĐúö¶»Ŕ÷ťůÁW*őµĐŹÜ­Z¨Á¶­Á‘JmÔ`Y§5_ŁÂ‘Ö^ >Ľű¸çóPi˙$CśQ¸×˙wž&(éÄç­ű1•®ëŕPLů9 k}«u€GoH@’ Đćş©*+íđ@‰˙7K~ÔB†.˛ëĘZĽŇľV‹Ü ;ݬ-ş‘\őÄ 6V®ěç·§—.}j®żwA†(Śí˛2p¬ł^bµ3⩦tO˛+„ ěŇ-Á¨ÉąkŃžD´Ś= ŽÝľ%a:€ŢŕýŐ»‹7ÔÝ #:±»îů‘Đ6Ă©m¶Gef$מëS#ąý> t°!†Ka¸żR0‡ŕ­¨Â¸Â›µgDwN\çŃÄýŘŹj…+6Etëăą<ĚŰTřjCGÚOÓ¶žGŠ×ÔsgOÖŮç\>+¤śśż˙řýÁŕś‘A™TÚ„,dĹőŢ —Yć>„­kŁĽ Ë7Ki«ÝÓ˙„kMßaT’:X݉=t“ĐŃ€§!O›ęµ^#ĆóëÇű›Iń­ťă¨4ÁKů'ˇvh¸’Řo±¤ę¦GJmśe¤h˛JoÉj´ëŠÎćmŇô)9F•u±—ź.člp j™©CX ęó÷Ů´©ŮNg” ÷Ô´őßŰ“äŰÄŃ‹d[C,E3KiF¦#e®łm}IÚ“ăĺxÍJµę\ŰüłQ¬OAž%ź’/ĹrXn͡D†zZç˝ĆĎ[Ô­Lë=ó¸F:[ń Ż«Í˛NŃŚöćZŇŇW6ĺşK$Žß}>üä:°=ŃOă­8oĹőL•Ň–|÷ž‰±ŽßÖ_V,$^=®Ů%íĆ®ô˘#B-vD;fájőäFŢcsžwlFě˝ţçë+ôuń)4ĄýŞŇáĐâŁ+Ő5űi ¬0*O~-ő÷Pôdůô¶V/ó{/˙ ˝pýG)¬§{Ă4®ŕž÷~ń|é~<…{›Găk\-Ć÷cBŚ«_÷HSxsłĆ¤ľ.ŁŚ_lFâüz(K}ÍČÚ}ŢHX÷^ź~8˝$Ú׊¸VKjŰ1–î»#ÁΡŐߑݰáQ,dB4!TâÇď­Őf¦Ö&‹ OYXŐćC”0–©'Öć+â§{ËCP§ŚČó*ŢÓč 2˘Ŕ3Ě´Ą,ÓŕnÄ52\{_«0!ĚfQe3}áw®oáĘ˝ęeË*sJą… uęk)!ş-VF™ÓÖb·™9üÖq+ÔŃkź˛{uNo¤~ç\<\•5ăĺcN‡Ä˲{iŔ—„EŮVH&ʶ‹(ŰBŰEŮ !ʶŽdŮVşVeÍdŮG–mĄ{Ŕ—•{ Ŕ—<®J9óőíŐ„©_|˛úő·ĺ›‹%ť0W ;Ho<ý¬őĹ»NEYWÓ.™˘h˙˘9™pŮ˙”ĄŽ—5ßĺ˛ęJĄ·-^r„ýdďđăѡ;‚ô„¬*ç1äQQ‚®÷a0:\®m#©ă]”ľ[¸Ö„çlĄ®m漳Ü6•toŃqh%@[ˇŮt€ÓÓ§ÓĽTR¦ ˘t0Qhz/stč™U z§ŽXB¤´´UK•Ĺ wŰAMúá‚v1îŠůb8­ ockˇ>ŻY2¨we˙čw’ü•Ôľ:ŁłĄí›śGG6#QŮhú´­cMó„mŮ˙“ék˘WăŢ]•3¦× ŘňLúŽŚAÁšç ŘZ‰Ź>}ö9€fŚž•hnC:ɨ–ÚöÝÉň8+lĂůËJ¸]~¤!›kóĐéLąÖ-‘Ś‚îpâ}s|KîăOöľëD“ŢJkDÓîČ›l§ž¸ą"Ő*ÄŁßihhŤŮ—˝†[yŮWűłÉhŁsÜît;ÄŞąXMVÓŕë@×>ż4jw¬ŽFYf$^>ĘçdÍŔ·oNN>ű‹Ţměo2™§Ýu_KÉ·gĂý hd¤¤lżtdx3(R˛ăHeř˛‘ÉPqAď|PP´xâiáŚËřu#.˘°(ZçŤŘŔÔ/š‰u‡ »Ţ7 őĄňÔÉynč?ShH"IŔVŽon H‰ÚżÜ I7ăúż¨ž{1 G›§BYx,”Ž•ŻŽ¨Ňq±äćĆő gAÇTw4sΖő 6.Čo•›”ž6*Ü~e˝ůÁ»~żiµË±ëńî†ÜŠźÉÍ®ĆGŰ|őń‡] ­p±ŇËo´Íüv3ť…MĆN8Ü^4IůjšůťkŠýőކ˘ôFüDdŐĽendstream endobj 87 0 obj << /Subtype /XML /Type /Metadata /Length 1168 >> stream 2024-08-19T10:33:44+02:00 2024-08-19T10:33:44+02:00 TeX Untitled endstream endobj 88 0 obj << /Filter /FlateDecode /Length 3191 >> stream xśµZÝoÜĆďłĐ‡´č[Sŕ Č^ác¸ß»JR ¤AÚ¦†€˘ú@ßQí»ŁÂăYqţúÎĚî’ËĄČ-Ăđ’śťŹß|ěěśX”_”ř'ţ»Ţť•‹›łÎ8˝]Äֻŗgż´ n ÁµZ\^ź…|Á9ěÖ|aś/JĂ—»łďŮçË•ä˘đ^±ËĄµ°Šűvą*‹R ­”a]ł„) ·šUá wRk¶Ť»µgmţ~ź¸rö!˝Ź›ű>°âîoLÂ.Ăľ<î–ÂŔŇvÜ>”4ésMŢŇxbugŘ·o˘€Rłżĺ~¬7i |Ő‘“V’mę [•R[vXţçň›3í n+Á ĎÝâr¸Ýçšô·DřńKźă.Má¤GôiÇ:cś Ů=X¦b|OśŞ\ˇ­MĽŻ $ÍK-5ë&ÎŰEC•5ë¨'ç9/¸z¶¬Ýf9ňiöôŔą0ŠUŰĺŚNş,ŚĐ‰ĎwŔgę˝őRh 0ÉŢ,µÝ[Bř”Üv“ÓšJ[ Đ%¬¸’ĽZIUhm —GŇĚxăYPŇ—śsŠ hŮ×#EuĚH^ç!ćMé0~%Îű".KÎľĽwv͡Żs‡ř„_Q[á 1 ¦QRďó‘C¦čM¶>ôISθ¤c0‹R¨„^8PÔĐk!´=Ęaźż:ô]µî——Ż‘Üfä+.}ęz…•6ęőW”ĘuQ Öp©Đ#ěp |9¤Éý>’” B«{H˝€¬vwŰz|[=RsvwrŠLBď,[c–c‘,¶U߼EQđA†FzζMČ[|’l×Äd "v¬h6·”¬Q?mŔµcö}˝äčKĎ6Ł"÷ $jääólđX˛ô…q&D1[ow;1©˛Đ%řšcüú†ÇýşoZDMcü(ĚXkBö®Zd!Ä úU7I Á3ŽĘz›%%+-$ełŇo˘DÓ¸X®”Ç ő Addß;Tá·^°ľîîşşŻ2í9¤ů~Ő稯ë®ŢŻëôÝĚÉ:HĄ®©˙đ.2wŠmšĂúx8Ô›¨HYZHT ł…|Š]‡N×T¨ž!×-ůPCičâ[t¸ęG÷&éĹۉX°»®˝éęáHn– ˘@ JMSZ8:\Ŕ˝Ś-ťžTÄ„…€Ý7Ű->ÂrÝîͦîđMzB&}ŢT}•>I†Ę7!ÓěU©ŇíA˝H ×^‡5ß7ű:±1ěşkwé›a/!<Ş R+¨^Î_-“Ęň`řrĹ10Ç÷±˛€ÓIŁfźrĐ„8‰ˇ ‰ńj;(*'ôÂQěŰłË?}âS¸’®ZRŐ´ŚA8ŠXŐl#ÜUˇťŽS9@8:X GFuŕś|]ŻSđŔq6:‹ăYgU ‚†‚gâQƇŕ!ŰHC čč$ÔŕÎ €Íř([貀ĐY5-SŃäjZŕşůr4UĄĐ@ žß‡‚l«»ĐßÚ• «í»Đc@GçúOä?UÄş¬¤‚ťS!%˝ŕ¦0%&=úPĹł»ţ=`Ť>ńś ÚĹZĺ ޡVŃA§Â+ÔłÄĆč]|©S´8‡-ëOá5…ĹŇ@ä|]ď÷ő[˛RB›zł?aŔzsµD¤dI§B@*~żn·Ű–v:hjÁá7ISÎnę?˝†:Y'  ›¬öi?”Ě&ŔjGř’ˇ–´eéNvp‘”‚źb“ÎN±y‘ś?©lw^ ©ńňϰG„ěGnW$r“Ň(Ö݇¤·uµ™žÔOě#0şW ÖŕD°ńŞQŤlŐż썰„AßÄ/šÝ]˘óXÄzěY‚|(!ŻÚľß#IŚ^71=VŁčěÔŕ€’±L:ۢ,Fëv»?ěŰqͱí'ą±ş bd¨ÜH+źĂPĚ1”CűCŘIDďęĐŚá)†TSŽd»uÉujdn2ćęYĚŐ,ó!,ôČŰÎ󾯺Ý<z “)[ľ'CsĘđ4úc8>Śh芟 h$˙¤¸îŞ] 1 ť8śĂěŁ ( pT‘ý"ńăŚp’ÜbC§4ŢÁ8Ü ˘¶É¤·45pBŇB^âiÄÉS*]„Wx"îˇg8K3Z†ń™´ÂĐJk3ędGÎ6§(ǵ“ăÚgďyŘËDf{Q3’«ŹyÔeăűt›â˝íŇ;(xŹŚuĚxǶő[*ű`ÉÎůů§çţJř«Î?-Š‹Dkň4—łKőôRŹ‚eX†·|\Šq™¬?±9T4QzşeF•ěse`;o0fěů‹sĚ…ó‹¸Cđ íŕŁůĄx|I ÄÓ µ4«ÖŠţ÷16ŤÖ†ú~ľoÁV(K©Đ»>aŐsô €SZâő©é: ä§Ět3) µ1ĐW îuÎ/ ś_@8ż€p~Ă9ôÁ|ÎÂůhÖă2+6v`0čňžÁÎŰ×X§źmą*}źcďφôË)‰‘3öžŢżĆ‚ í¸]é|» ĹyĽĎH͇ű T˘>ôĘY;a¸żbtĄ ť24б5ć .µw±ŐĹλŮ!łŘhŽĚÚěö؆o›nn»fşŇđ®ĎźÜíč»í'uţ6Ýíđ‹‹MüĚ‹‡ű5vźáRŃÍ˙`G)ŕD§W4Â"2ĺţ&Ţ>ډcúJeö?Ă>صExŚ,°/§űź ť>‡ů…ĄYő]]őĂ’Ců¸ôâ*ŐlĽ „żęŹi€(e SŐ ·6Ľb«ÔC#LF&jĽŰˇ˙ŕ’‰C&*ämEˇMá blLŇ-WšÉ©YNÓömş¸€;!ݰńđ6Ăb4ĂÚĚ ¦mÁ §ÓĽ€˘µ–…*N:â Ž‡„gu?ÜĐł{a˝Ä€óëcC ¸5Jâoň{_ł?¤Ol]íÓ?C“:Ş~„+WĽ2Ĺ€đý-ęˇD=­»ăá–B_Ĺ"tÓUwq6h ]ÉT,B›c)ĂŢř´ŹĆ3ŁB›#Mzg¸ĂłżtÖTWčŹKŽ'ćÉáPăŘ+˝™áa†BL¬ ţ‡‹§A¸>ŐäĚ)tRLńČ!Ŕi ›Í'Rŕo„#–< p8¦Š·qHŚč.; ˝áaűśtöąîŢŽĂŹČ?}¦ÁmcŐv;Q_ !Źg”’fqü'ĂO?Íţşívi„‰$뇚(Âl;A_ ŰU1!ü#Í‘ î ůŞ{7hČ%Ńbä„‚“x^\ĚŤŹś©ŞŚŔo{7\LŽ‘´(DúíH@?ďčî ÷973*$\K-ű°OĆą›Ď7Ś‹óŤ`† Łú8¬Jłz‹%/4Ěę‘G?Qî8×I#h’ę´I7őNÂ4¸dÄÔÂÁf‡}ôS۶7MüÝCň|^ç Xš‡]1TÎq&xGć€ËÂŮřŰűn†\0­—ďÍë{öo¤4Pˇ|¤Ô Pݢ˙ŔÍ…u’|Z(ݏŠCCÜÂ=Vż¸'ź BUˇ=“-żĂ-đus Á…Ms“4zý€67TpI/őqś 8ł0Úu…„˙ěI4Í%ţ‰%xJ΀€­T' -ńčÔł (έ‚đ«'u˘Ő8™ýő©_üÄ/F"bS•8nŃPI¸›N(wS•B |a‹â'ĺ.†u%!ňrxě§Á—(,MŔ‰‘)cÉ-÷‹É–Ě•Ź„•u>Áó ,Gâ˙KńËb™îŞᔦ0ś~}z:ĺćඪó‹ÁyDb}-źSjäÖI)z •TÖÂĺn&ŔLÁuéćĚ”j®J<3Ŕ¦żuyWpëâO:—󨱦ÉĐĎBń±N 3Ŕi‘ÓŔƸ|]‹Ş GÎ.MüĹÉ۰üd$Řłť‚Ł_‰˙ąš KŘ÷ŇÔýźŠ~ó·<ü$śNRąÇĂŹź„ź‘T~ŘŽpčW¸[C8A­&ş+ĆCë˛âëý· iK;˛ůËĺŮ?áĎBą_­endstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3219 >> stream xśŤW TSך>!’}PÄ^ÓTZťs¬3˝w͵íí팭Ž×Vű°ŠPđUĺaä yHČłOŢ$ä ŹCR|˘Xmm©`[˝Úö®™Î˝sm§ťÚŐ渦s"íťvÖ¬57묬užű˙ż˙˙żďŰa˛ŁTĘÄŇĺĽŢ‘­c@eu(BZíu´Ú[cm‡ >%oŇ#0 C0Ly ­·ęÚö¤zĘ<ĺž2«ŢŢuxU!%%$¨„Ń‚7`˝»~¨âzőŤŞĐ’´äJ1řšTÂćj&ŹĄć˛OdłOĽÁ>ˇ.T¦AmFZŚî˘önbJ¬ťfbĎČyßM˘C“ü±Ť"‰DŰuIök›r¸µ2¨©¶ö“(\Ť|óŐ»ţĚkâĘćrBżŻHŞ­GI¤đ5RÝ+é+tÂđőýőŮÔ¤¦|Ďűčć“ĹvÉyŃwQĎ{|$‰eŠŘdőkŹĂ•řŞY6 -G‹>F‰(á»—P2űÁ.gˇş(tÁ<˙úűż#`óĂ;đÔ‹®Ť´’V@Ě1ĄçŐ”—ÔĂő0˙¦~oöBołç ďÂÔĚÜj†wî?v9öď˘}—Ó‡_€8»űň«l»=Ćľ‚˛Hż=âř–áN@YM¬‡vUł^ĎbĎ=ΦŔ—ŕKÇöOíš®ű ~ §[®ö_ýôł·îB”gŮä¶_âÖC]âN›ŐE"7°Qv®tk©šŕň.OÇćľ7Á?östk qtó P^m&ŃJ§m7&ÇľŽ–0—·“r™ë›ô\5•­ŞöfĽŰëo?V(ÍÜ—µł‘¤?‘[ˇÚđ˛ýCH;Äż~Zd„KN+O@|ćłž{'e§vFȬ>VX§ý·©)fjbşâI=4¸ť´ÝI G€­ŮaÔ©kµMDEW•§âik¤«wť*:Ł&ŁŤć¨îxĂ°Ř’Ź›Ŕ¶ťĄékËfßWÍKXq=e2ě:`˛ěnWŘí ěN»ÓęÂçsç"{†ArŢ7“|DÄî‹¶+ŮK¨ţŔ*ÔPj¨Á7 fÜľĽs…8É]RÓj¨Âó×mĎÖĽ7I ^´’aW˘ Ŕ5ŞW{şß!_ú U— oţЬĂţ†\Ą‚j’}ŔúPw%S1ÚpNÁ‹'|č§RŃBW"ŁĄr×)<…ľlrC˘đ¦$‚ …$» l*YłFRáěTőíT7ěÄąÇţ¸ľúl>^ ö˛Hâç([eĎćŰl~ŞŻ¤cSôB«ßęŽŢNíű¨÷zßuďPűé· Î°+$ TČUMJ†,{±ěĹŠL:“ÎÜS]¤>ŇĐłL5» čĆ-ŔbŔ|çţdÉVĐzwq835útô©ţ'­Ťµč¶YĎ@çlßlű5Ü"°©»şgmdmß:«Î˘iĄÚ``Ö;Řs“ąĹÜ žlďµpQ‘ĐEu©`Tč”FeĹzésG64vşôť’j>¬ţŔě2ą` nÖŽ^:Oäy‰ BŹĆ]f1Řô° oTٱŃÔ(ŮPąA˛ˇbV~CrM©ć@ł[GçóO|S$öOňĄ§ßAů“»Đ“Ë„_ľůĎś‰ž…řěŕ«[Éđ dyň˝ë†(ĂőŔ‘vC2'á;‘ŕ[8- öĺFK üÓ°˝{Ŕv ˙P‘ ĘŚŠ á×ĹÍăÝ$Ú`/QwWžÍŽäŔÝpg•4ۨ5r WűUanšÂŞ€Üd¤(JYLô÷¦ĚŘlÄ ‚ĽüÁ±oýrľŘܬ¦0ĽÖ8ň„m”ż)¨kU´ŞĂUáĘpUô@ŞÍčj‚Ę o2Ĺ©ol/J[ q ZÍťUç0·Ŕ–Gá‰k{Nqáwé)í* IRzgÔÁzµľžâŢÄ4%TĐj§˘EŰ® >}ř¤ř´É®sB't86[ßńÔŃ oľ}+^Őŕ7:ő-¤çWçIyDÖ#‹¤:7G^‹—žďťmsĚ-bxhĹ4jŽ›Ź.ĐĎŠôTl"ď[4Đń"—›Ëą$V"čBŽD…@˙śi»¤¬ĘP +!ľIP§´E´ÚÉŘ îwőz)č!ÔµĂôß s4C÷D&ÚH› .Ó(岠: ú»Ż˙îěvéËěâ•lŇťUčˇéKăWÚH‹•¶Cn6m®‡jť™î>P ĺPfW´¦ +>łř-=ŚĆĆ+ňÚ8ĺď_öcJd(f~‡)žz˙'+x˝H[Ŕ1éě©čś$éŘX`gWNhçŁ#ě‚7Ů#l˘˙P„ĺ‡ÍŘ˙MŰřôëóhőEôkg[K»­ťľ˙yjays!Ń A¦ZPVmrŇ.č c`NĘ ]řń^ëQ"Ä°Ź 4ÍŠ|6˙ţy¶,öI“Oc‰K¨O6—ÇůÎńŃD<Ŕč ë‹HŠ5JNîíÎ…Ź˛K6°€ĺŻĽÎ&˘¤ń©Č)†¤9ĄăIJ”žcäŘéű´Č>éDʎä·/fíŃRZ¨%ŘçÁîWr˛^Ů?ű~#aöCł˙i˘Ó¨ţ-ţ—¨A„˘‚›Ĺýĺî/ŘDváFę§­ÉŇ%ďź ]Ł­´•«Ýl5Ő›Ş´Bšź'Î…°Ô# eť5Ţ„38Ynżű)üöľŕČ´h©z‹6ľ$qo~@P7g&řßqcň;ÉÇ쟇%ÔaÂײJAąÄ6H˘?"Ăâč1`ëşvŃÂ1–É­Çëę4JŹ2D‘L«?(Ţ˙®\‰ŇË-‘ÁČ@ŤÔ%ç’ąřK~‰ýĹöĆŹź;˙Q ® Š~Vđ0Ó÷ő—W‚Ű3 VJjšó˙šŰJP khĄ˘Ş^éđ~oĚ„Żh˛8/T˙~ÁŃŤÜF!s_}ÎŤBBŇŃ÷ˇpbT4Á˙–Ł™ő’ß˙„f2¸>«®á˛AFk¸Ůá–˙1ć ţ»‘X `Ň%˛J´\olFá 6TĹÉ~ťR#—TˇPŔ"­ŕrZďžW×–ľVFčd”Jńb!ßóbr†ý7Íî endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 557 >> stream xścd`ab`ddä v 147˛q$şŰ~´ýdaíćaîća™ô“Gč´ŕ!ţ= Ŕ’ś“kÄŔŕÂŕËŕÇ ĚŔ ÔÎŔÎPʰ‹q=“ÖĆŻ{řŔdŰţď/÷3^?Ěüůźhg[wkwGĹŚšůsfO›Ű'wĂj˘ÇoSĺßÜÚÇó|—j•›Ěv±űěŠĺWzű{&t÷sĚ©îk”kc+čî-o¬®ĚÉ®Îčć0tľűP~:ű¤űoĽč^Ö˝˘{I#Ķžý?ú÷3~/:Âü˝čÇŃ?ýż…Ř«šęk+f´Ě‘˙ľŹmá´Ésç4N)‘˙Íýc%ۢ꾹ߪl5•Ą5“ęçÉC 9đýţÎŘý]ĺBýobw~!qáÓ~ȉNbźÝ6łL.…­Ş¦­ĽnJÝĚ.yáăËßbkíníiéć>]^ßP]9Ły¶ü#¶9ł&ÎźW3ąŞĄµ«»Uţ»5{÷Úž5S×LYµpíúnŽ^¶mýÁ™ňżŰءziˇ3’˝{vϬîŮ«OÔÜrHČ/Ě*–ž˝Ą>{N¦tfw~ui!"äfďgü!w„ů‡ÜŃß“ŘöíÜ·c˙ö+§ď_ęţÎČńÜĺýo9= źßĄsjćÎť3{Ţô¦IÝSäzŮ»—.߸tÎü &,ęć¸ů(FOIÉŢ;X><&,6<¦©Ą©µ»–ŁxvÇ,ąďOŮfÍí]$ż}NűěâƆà 9>9.ćiö<ś Rš"Çendstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 614 >> stream xś=]HSaÇßwÇ<ďlhĽ:óB˘¨ űŠ Y¬BÍŹ–eIm¦]:K›‹¦ËŮ cʉsů˘!DTS,Ąčk›™s"Ě\0ű¸iT`đžńNě,ˇçî˙ó˙˙ž?FI*„1VŽ »˛wďO,é Éşih8Đ$uĘ«[ć7ŇŢnB‰á͵uĺ•UŐ˘"d@:¤Gąč"ŠâQzŠ–±Ä+*Í>PR×đjÓ˝x)HĎ9Ş•UÂ\q\¤ ü‡ŢźËŹ<·Ż Š–»f0ć R‰‡ľ¶>č'ó–ĹŚ3%uefQ±Yä§ż˝xĚOÇ&8Z' lŁ=Ź© 0U©¨FěJ¦ęîYŠ`…PśCSXšČ2]€§ :Hd2ü5ňţP–ţjîńˢM˛Ý±Á>8ş!JBNv4׊ĂŽŠ4*|3ÄőZĆCčálxx ó~ű ?ź+ë ‰‹É$yéź7Ř凌Ó\®=®wŹËÓ?î2ý¤¸Řî´ĂMív¶§žq%ĂE3SÁŢŃ—Ú‹Ú´ţf —†·]09¬˘ÔÚÜ -ĐŘŢŘÖH¨Ťíô|^ĺôĄSŻi¦űY»č†{ŕn#ë˝J>őŃÇVüb‚‚ý#fX„7ŤT iIÎt”25쀬W,ő—t'żßŃqr23ňl*Ţ+€ËŮ.ňÉű=ú|ŞúśĂŮ ‘m塶¦ĆŇtŁŮÚzöBů’´ D˘Ď]JC1ń_Caů×dźOŻÇććř˙ăş@Y5”¤T1…ë>¬Q#ôDe†endstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2902 >> stream xś•VyTSW1{µT-™Tô˝:­Z[ëÚÓŞµZ•Z[wµJeQĂ aIČBŢ÷ ,l $X\@ĄNQkµRÚŇĹJµ¶ťńŘ˝ăÔsc/ç8/bçôźůcŢýëť÷ÎýľďwË•0!#‰D2răŠč5sćΞ|‰/ţ^\(„I!,¤bbŘ‘p2ö±Á1˝c™ŕ±Tą,my¦*keöÎ]I»÷Dďť1{ÎÜç0Ě_™uĚĚzćIf#ł‰‰a¦3›™eĚrfł’yŤ™ÇĽÎ<Ę<Ć„3rFÁL`ƉĄÄÔH‘ôŤX5bPşRz3dqHčŇĐŻe;eŁ/ńJüűČ‘MŁžu`ÔýG’Â$÷%+Ö1Łďʏţ%#řIĽ?°U-9ÔŞP’m~”žŕîpÚśg«ŻWe“Ął0ŃČ\ —ëĽëĆŮłě*{VąŢ˘¬ÜΧłJbógˇ,Č ]E.ŁÇXEb^'›W’c]icAo..É·†®]I׾F×jŢTďZ,(&7 ¦7CĹž¸`OHŹ„0ý$ˇ_ÚX¦PÖ#‹éM޶ˇä\c´XnżXN©˛trd8üÓOď»ÖŻgiÚŁ,ÝĎxđ]–ž!áA(ż%ëŘvwôä´¬ĹňîŠ<«Z=aĆ 1sŮŃ÷%ßĺ0ş†Ŕě^îżBZ#ä'É@´âqíł3Ę1•}EĄd űî.ÉĘIČ|ň(ĎĘOšŚĽ)’ŽĄ6o‡ŕ¨¸5ř–Úkë-u‘G ó@ÓţĂ»,a läW%Ĺf¦&ç%Á|˙˘ä˛ą |}o‹Úo–_rö¶40ř]±íěúÎ%€é:Ť.ĄŃt™B—’­\µŚŚ±ßýÁI& V°€ŰůJmľuß›˙äÜ94–²ÎŘ÷6}TřÜ€ľĘC绯Ýxď{ rřŽ®BĐšsk;Ę­vŽ8‘­Ô¦/1LlÚÖ 3jÇ‹hhŽÉ3K-ůwź´%HśÔÚZű'âúQ1ńE€÷ĄYEúLD0č$#®űěe‚Äćx+`i : äă¬ú|OłŰăéÜăÝ»91).—5‰Ąx-O¤"y$şÉŚÎxUŢ~’äysNEČo“ÎŔ‹ăÉĺPR3Ä+LŰŤńĘ䌔ĜŘI>Őa˝łÄ5,Dŕâ]˘ç]üäÔ2ÂGGĎ×C ŻđŘ_‚śă‘řż$Ú>éÝ É•UY-Uw6ý@GѰ穄ây=sżŮÍ5j›ôM€ËeźĂ§'Ľ—…ň2 X°Ő`5Ó őlćŽŘ}1{˝Ş–„·M}p őŠ+]?ÝřÖ÷dÔC¤ń^sîfĽuřĹO6µK§#äwÉĺŔt/KoJp‚|yţ–™)Δ†L®ĽÔjq f–˙P¤Ö«˛&Ŕ>w’?_T˙›E;ažM"v߼F&ů&cččşěbY\Jc7gABm…Ű^íĎo.l7c»ě*|tÚu;tůňüĄĺĄĺâŞhx·¦8Ż3ęuPŚ5®bwM•ł†µ"SŁşV»aGľ*SóPÂ.nŕkosą­5B5ŕŹeÂ?ŤŽ%XŹ–LV®[9óŕgZV~÷,R¸ĐŰ7®~ŕ[˝&®dŃKëłNź ˙żé!Ád2X`3*3ZĚĺŕßaG}ăŃę·ˇŃ~°u^ffZCnsŤ«˘Şę!©Őž{<âťäŘRyE´5’o¦‚FçńT Ď`:©…n#Q¬SF˘ëĘ~ ÚÓD%‰ŁËÄîŚ&ŢIeCÓů^)ćű%řŔz©üőDc‡·ípC§xůš¨Ł ĎrK,5-Jß’·;y˙NŔ «˛“çt·đpBË˝Çġ”Ň[źJtŽTś¨ÇC (1ŃŻ PÄëĂ ĹçóŔo(­Ý\ŕSd3Wj Šrő…lĽr«n+ü±Ý§K"Y7¤×…çŇéŢŔ˙čyaŃ”e V/ç–/ĚÉĘQĺ¨ĆgeJJLP8Ś‚L8ŔȚɢĐlYIlůöx9cNŻ e˝˝{çěéOúľżżaţôg”™>ďĹ©iU9oŘöÚƦƂú4+§čÍ4á'¬? ÇęůHz,Rš˛]ić•â$îá°*ś’n=Ę}˙‹Z U-%9IËvg±ËiČR*Ť˘!…ęqťIĹ` `ÄM~1ÂB‡Âf„ş…ěń¦6IŽ_'ĆëŇC®(Ě3?ąá•ô={rwęOŞPůqcsŐ!oACz¶ZŁâ9ZţAĘĺkýgűŹ˛ÝźÔ\SźŚQ‘˝tEÔ†„čD6=Q±xĘE˝đ~×ű.ÖLU€VĐN4 c”rú,ŔOiHč ×>®'#ţőkŤŘhâKÁÄŽfGIKÂF2Ě\¨÷endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1041 >> stream xś“}LSgĆßŇöŢËW‡˝é !ąŤ$ś.!ưéś87ĄČ¨Ů`ĐÁP@ľĘ€––^ĘĄoˇmŔiˇĘPˇ€vvŐY¦ÁąůCŤ3Űţزeq8·„äŻ »ś˙Nrňśß“<ŹI˘H$ŠVÜ_”ľ+=}cIÄ]k¬•â81Ž“śzq^ţ`ÓwŻ\K@Cľ]ßĐXZ¦E(©Q:†öŁltQ‚"‡ž‰ľŽ’GĹŮâкȦA˛uqű ˛‡!%)Ö‹‚ó ů W ‡Ż:¬Ă5®P&;¤`!Ü=#ĺÁ-Ň×5đ4Ľ“čŔ6'7`šHÜ…o@Á^(4Ťšť b‰ZĚ6Zô{řĽLţČn>ĎÜhŃWq:lÄF»S`…DĂÄđSRY¤]řŢiÚ€<{Rź§‚DI/"y Ť‡¤đŤq:›¤ßŐŔp }Dü2[@Ę ]ÜJŃ‹źNÔÍú/ŚÔľâ^¦“ČĹyC® $‰ůśt![ý8şľjiŽĽ5k×Ë/=öˇ’ž†˛ČqEiw‰µ˛®¦©µWŕO<şÉ¦PĺÍîć‹ě˛ «©C{ŮŠŁůŢĄ“ {Ć>ŇŚ©N˘…3U|,IWcłÝ<ÄQýÄ89wSvâ”m k ‡˘§Ű§§şć’˙w$Ků׺U‡ÜĽŚĂw©›:Ć™>â ľn8­ékc[&± ŕu¸†T‘CV—ˇĹĐŠŤŚ·ąŚŠv÷57ö6%ÓÓ,kc“'÷ä¨+/Ú0¨őňU)š‡Řy%ýö­%(2Šy*…Ń’ô“_y«Ő#u“e· W0u÷ţĹçŞPQ)YÉćű¨#bŔ ŰHújßjR¶•ĄDÖ÷Cj@> ń»áUxb”ô*ĽŮ®ëó9Ć1uíNkŠŞžäiĚkęÍ|<µ}ĄúŮÂcď­1f@goöG;}6áîqÖémsTÝDSď OR`&{ĽŹÉ]z'Ă}SV‚^Éá7őě(9_?3{nrÎc9Óń… rřlE:ů^ˇö0CŻ–}9˙7l]v¨Ć,1N/^10Ie`-[Ż ;í.LŤz¬:ŐËÂdxaŞtI˙ NZÄŹFćĂÁËŢ[ř{ ”iOů­¨ŰO”1â7“‘´—ý NË•×V5Ô–*0EŻ|é˙V'Éţ™źüa!ąČ˝5S°Ž-ŘbłPLü=d ‚ v~”_Ú`XŚ#Ż)L¶N}6QsyÎwÁ˙O8syź’Çgń;@ů$,?»?Ëô»ś§ń ĺ ą!ÓF5ş‰FŚŰYCCII“S|lý?«čą'NÜăµu{#ĚŠ‹FčČůßčendstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3551 >> stream xś­WyXSgş?a9ßÁ]b*ÖzŇŽŁőŽÖkŰyzÇÖnj]PÜ•ĺ" "„¬°d!d!ä Y!$,!@ «Š¨ŕríT;˝ÔÖÖ©·Ői§·3×έ~ńžëýíŚÎťgžűÇÍIž$Ďó~çĽËďý˝ż—EÄD,+n÷†]I«VŻZůł2™˙őĚŁĚX8#α?7çX<úŮÜŰłGç‘עwůˇXRTĽY*Ë,É*=””}8'÷H^ŻđąE+ âgÄvb±“ŘMě!öű_ÉD ±–H%ÖiÄzb%ń±ŘHl"6‰ÄV"‰ŘF|b6Acg@8XóX0ę™(yô+ŃŽŮ117cCd" ’J ,q»ă>™–8mdúĹŰg´ĎLťéµkÖÄěÁŮż{ĚÚWIĚzĄ L!” §ËX=]¸lŽE+ü$˙ «ßeuYëąMĂî+HˇJ˛Öď®Ö [˛a U¸ ię @1”Ԩꕮ*Ź®qÚ» Ą¬G{5Ţ„*gUm9”Â*‰®|óÖ6ćť$ćÍŇ”éÖ,Ů|Ǩ”¦ˇ[hs+vÖă¨×?#,~µ4üK_<Šůxă ”sc>{ 7ĽŽĂkÁ!ťË@–ČBł‹x€Ý=Ž]}Ů_DňĹ–~.ÚnÝůö|cjͨ@.ż:ź–““†S†%$źoîă")€Ac@Ţ)N®OIpkVńNă°¬‹„Úţ‡Ł,>řęą3ź=„ôá=†R- 2ó¨źßdf˘_ 8u=Cło˘é+Qłf髌ú…L»?ř·Ň/Ä^ưkýydžŔr”‹ÖűUĎű2…V'‡rJč-k÷5{۲ĽG¶ĄĄěVĐě~ăC\hV]ˇö…˙±5ľg•űççłď}ÓĂé*P Bę‹ßžřŽëU ¦zĵ‹ČšéŘ\/Q—®»ŻśĘYoŁ5&u=Íľo‡v‹ÉNˇ™Ŕn¨­”WˇŠ®&µ5Z›Î,­Y$ZżĽhÉRWvMÁ=©9-˛¤Që¶K÷Ńjr­ĺĐ…˛«'l”CŞÂ ©ä2qˇžRרťµŽz›Ť¶Úlv›Íj_€˝¶ÔNixĄOBI˛ř7~´°s>ű´"<ÁY›ÇL[F‹{řÓDB^Maٰ=ólů)HŐ’źş\·áűTż@…)’šę·wěU]9CŁ6´$Ä,AI` 8-ś>› ă ý7'Ń_ :ŹUóą5P +(&ŔBżAčOý âĽĎu{FMŻ% eÎŘP(,4q1p˙0Ë+bŮ7ynę2ěç2i@—˝öMxćÖUŽV{`3ôPŘđ2~6Kü5a >ОĐó_Gw?z3 şM.Hő…tŮ܉8tDwD©4Á Üő˙J¨0*!•Ëłă†ŕxŻ­×ĺ2B'Š„Bo›ĚUŐńżŚ@łĽw͉}ËN¬°*­Š&Ř˝c GăÁ±Ŕ¸˝ÉÖT×ŕéô»» i†X†mFŻÂ$¦ôŠ‹«„âí‚íĹIm•í•mŰŃĎ4ÍÚfMsµ]o‡ŞŁÇäťzň7Ď>ůd7¸MyľÄŢý+şVX+ĚJw5UC6@«ÓZßůI‚gÔs®eÔÚŕh07R&Ň\î[ĺu˘Zq­(řzţ’ÔŠ­*kEħÜ5f—ŐŮűý±ďű˙Ăs¶-0l˘BĚ<Đa )`ÉŽ¨ůĹŰ$ŰĄIG~—÷uá7{•Ú)˙1ŘL‡dž tĂF}C–YgŃ@-U `ĄNmĐ`F”í+Ý+M>ňoü;…_ţxŞłĎÔ:Q„•|â㨽$öĹÜF‡o\óĎgg YáN§o ®öÁPIKˇG`âÁެ®\ 7$ç‹EŮ0‹zý‚Ź.ź ŤhGV{ĆăŻ;G.p‡©@ ;ĚËŻ>ŮJŁdđĂËŁŻ$­­ˇŮ˝ÂFií35¶Á6Ř)uY)”ËĽČY6¦íŘ@kČtkn/˘ľEä©oé©Z›BáË3EXgaŁ´Ťß"ňŠ[D} ˝C u°˛W^šľc˙¶_AŠF0wpü¤ĚŞ« °­©©ˇ±ąÍŰÚÔŽ‹Đ‘Óu¤3תsh`%”K5J#ĹC‡B% –z‹Bą'ó†rO¬•¸űaťßďn<}éÄčgŕ$cŕpdS]™B¦PV(¸e˛©ĽŞ&%Gł»e}ŐfŁšˇ»ĄÖŤK÷—–[Ňl2ÖĂqÔ~':Á~č`ľ›ř#đ×ôżß—zşř<\€ćŢ€f>| Ź«göd”<ČEcvť¨ćTĄë3ůąÂ‚CĹYđ Ěňőiś80…$ŔqrüŘćć8/˙Žó¬–;•3ć OŚć†%ˇx¶×;…Ő~جvçySü›[ü›şßL0k8 ĄL§T J2x;wW—Âr«ÂŮn­o€^Š}°˝ÜS(TIdi§ †ţt-ş¤˙4xčűćÁÖ“ŕĽ0˙Ä‘fŞCaQ¶Š/Ţ)ÚU´3űËĽ»‡żú©şěÖ=x˘>ô˘Ŕ™€WŃă0Í)֔ޠ’4:Ľžŕřkľm5DЉz‰yŽ™őď/ ycöŹűą56k-†ŻCkŃ–E -É8ŔÇÓža塹7ąěţ/üxćÇvŞ*|´Ý`ÓŰ xF÷Ś`=ŠÂüł$îý"zp’‚śĐeއTo—ţ0PPÇťÍ;u0©B`˙.ÇżÖ™ja-×¶ŮdµR‡lÁŻ™ĹĄ—%C ™`UZ¤MCŞÉdiµşĆĐ–hë ”čđ:[m­¦‰±„¬]R1EjGCŮ €gŕ†ŕX·­»~ŠÎwĚ .gŠ&®huMÚ¦™?¤˘yřťŚć-Pwhő–R¸ŕŻŔÔsµŹGŁŹ#a8ÁńŽę\ć0Č?–Ţ’Šs1gńbf6CŢc˘ŃÜáŰ|\Ó´Ó·äóÍĂÜđ#Ŕ|;aä¸Áo[Đ<?ríp’Ҩ‚JšÁĂ[©ŻÔŞ…Ů‚t s[$!~Ő~§‘uyN¤zGÚŃ›>–˙.ŞşŤ*ă 3d˝ŐćDsßúôfÖ üaf÷ťňŢ_í?ą‘÷|öŕß\¤8Řާ ąŘĆO_ű RÚ±ĺ_j±ü?ۢlŤçíÓE ';Óŕv¸ĺtyĺŐÄŽí0nÍ•lťÚž~‚#.—Żă(WěĚCěűŢçO°Ŕ$°®›cżŔ?Ç ±ě3ˇ" ™{ąč6^Mü­šl.+ˇVoúqÝ›˛˝>i+ÁÂţ‡IŔ¬TĹ2Ď~OBŻÉëhi;÷A÷%‚ˇĘv©¤ZZĹ”Ä#ńűZ[:i3¸úvpÇ2fF CŇ˙Ožć3·źn•§ĽźęZaTV© eŔ¬ ´iÍe–Ňš2UF.fâö11\t”‰â0…ÉëĂcZ[Ş ­´B]©‚ĄPěŐ×ČMxčáK…ąż‚šW«2Ö]DDŁgÁ¤ĹP@‰Z]ľPs_§´3ßP Ťz=-ÚůöŚ8‚řxŃŔendstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8513 >> stream xśĄzxĺŢď„ŔĚ `ɺΠô "(í¨ô*˝"˝Ej ›lď=ŮÝw{ď5 BB(‡:Č""QA=vŹ^Ëy×;śçűŢYš~÷žűť{/ň[Ř ÷™’ŤŔVőâ+•bšĂEÔ)ŠÓćrY]%Ç3!*-ó z´Š6Gj"µc“ˇŃŘ4(Vł|°R|ĐČ k™×171jĺ5rłś„…p÷8ô{Žűf¶3Ž.w7ť…í—Šź SJBŞ §áőˇü)ôüÜIĽAě”Vk|JMlÜľ<¶ L×ý®lmŔÇH¶¶ŇL ĽW dŻ^?wdî 75—đúÜŮŁ\¸vŻŘŁÂťY¸(k}Ý‹®¶u”ˇâ߇}ť?ô&B Ó hŽ…TŠłWăńXÝ%ą'ń¸Í1ŕ¶x€‹üH«|‰Ř¸Ĺh­5Ô,&+!‡F‹Č-Q]2smĄnŔeuŁŤ2ŻH$Óma;ÜH1¸GĎ„ş9řć¨!YçŐQ7Î,eŚo˘ĐOô‹ˇ„ůźx•R#¬Ž’żĎqĆ).j€‹Ćˇ}7Ad¸ÍD˝6TI1Źŕb™V( ł9¨»É´Ĺ9ë*ĄDR¤hNÓť ¦đŐE§gń„Iüćń_`7Š—”ĄÓÉh#Ĺ ›é[?uAŲe÷CËŮŻ‚:`¶Âň[źŹ4 HŇp ^&âę €ž ËaOüߍGOtuÍb‘މm˘n÷ÄyJ­ :q?µŮipě˙<-[t9 }Ůžś(|zwGŐ~Ý>@Ţ„Ť?ÁĚ\űô Ís­ zňŔ5Ďîí§,劳]ŕ˛[KšÉ}‰HhŁ"•Ę ®ˇ*Âë9‚éÄžy ^ý0=k@-źŞAťż<&űţüë™íóĘB´gŤ]»ő”¤5a_#¨ŤŤ«Ă+©Á™g•3ń€éĆDÇľ5˝µěŘŠl-‚˘˝`OtŰ6ňA¨FÁeYř¨¸>‡jEźËMŕĹ«U*±8¤NŃź3÷Ś>ľě: ;®ţ8ˇŹl^ŻŘ(A \Ąä)·”ĚVíŮCC>śLDěŢ0“Ť"‡Śb^ůo’yÄ"ą®ň÷mµ+ ß`Űęf,GŹŰ{3_<#:#"IX™F ĺvŁ~ş…sD.ŹĹ]’ŠúQeîM*|Şň`9ĂăáąV˙Ű9ažFHsZŠ]ŚřŃX‚ĘľŐ¸D WŁíE‡ÍPŤĚL9|ăß_p7Š—`{¶ŕk–" żÎuâ2l±m‰ňËŹčö=`żo{ťUÔ đż…'˘ľtRî—ĐoŔŹđ´>Ľ‰z— k+Ą~Eš>ʬŔ_›-,]·ÖqŠ‚ "ŁŹVPĂq‘µxâw-žf  qˇ0@¦3QĄFEP!Čâ1[>HBTßiŢ—sBŘ5^ ™o<&‹KÍ:Pâ˛Îă¶÷ÝŁDE9śÍ§ý[t›ÖˇµkŁ‹Šc‹B‹Ł‹FG–z­€´ă­Ŕď ďî*NśKśMžKž+vś[€lfů'Ms’qUOqÚóÁ듯iaD›¦›đ~Ěą~đ\—¦|”Ů$Ń}pNŇ`@±ĺ# ˘9í‚6óű \D›±W»ŞŐ[™1ű§m˛˝`đŕcލ#fŤ‘V,NÍ ®ômŐÖŔvĘ÷včăŘÇţŹÉ0ž’u7j..ÎG•Ťš+EźÄ—0ű@›|ŹvG/]“±Nĺ^k€qˇJ˝Z˝J·j1ÜW|O‚ń„&XÍ®I Ő˝Ň÷zá#eÚ;P.ĆÁ±=9{ŕŘÁMX¶ ^–ŽĄś™Ég{鋥î˝ŕkj˘7µ™‘Jŕ‘´}+j9­Ä9×ř€híe­A7¦śŰ%@ Č/›&T¦$u͡úFľÎ äŽ&f˝.)-ź;väłř7Őěl¶7ňwřß)źÄ$”A>×B¨ŐZ…V9ol±JˇŻFwÜ‚K«M[Ä˝hřžyÓIE@H+đ!y!»(p!ŠÍY)j‘ŔLş=®ăś•nŹĹS’ “M‡ĺ%×P˘Ă5Ŕě0zúÂŢĹf{Ť8Pů…=ţD]Ľ>^N;Ýv§-x*âOe$)Íŕ§{‰P®ATš”Ui*O4ůË.A<ÇŇRŻřŞÄ[ęLqT8! }Ľş8& cŻÚŁňkɅ °0߆ŕjaž©mÄĆ>• „Ň”‹ř×Bh*±Käě\fV©””•)*G2ßţ?ČŁ_;  áÚţ_ómůć]Ą •H(ě÷°0•{ŹŮďę7p“ušpµX˘çÝÓ Şśđ‘†âI…źO3“q‘Z!c{âž<]ČĄďtél—Ş]‡fۨmŁ·Žj\l׹5@ jL5–Z]U±b™hÜL@ꍎĹë¤ _(«\Ú¶ö ě´ >ůYIřÝgőAŻ$žHÚ[éÚ”Ě)E¬ˇľ4¬Ć‘ŚĹĽvQXSG5áÓEĽ]̸nűčďҀסöJ°}̦5i`Ó*PćYŃÜID5ý ęBŃe$y°‘ŐđťT/Lw˛ĎG űeß­?×H9Ľvđ’I©[ЬMYbäźK†Oé¸q´îč_·ŇMńmŽí€Śă‘¨EC×Îę< Čúd˛®ăYűRZŤ2ň÷8yń Lś-ĽĎŚ*Ô˘<ł}Ă"q*ņX[sVµCmW÷ ż‘V?-:µ—‡ď«j;€ż»1v*q2v*|¤Řp J°Ţ®(–áčNbŃ˝SNŕ&âG8Đ3ń ÖX1H0U4E<Ť©Ő 2  N٬Żľ+ş(¸(ß+·mäL\ V"­Iß/(xôBÁˇ¸ üŁ(ËPk‘ëd"ą˘×qŁ&Ś/U©ŔfRgP±âÍötśľH4I\R©ÄČŁ–2^bÇÖ–Ö–íŮłçĎ]8† I6 ťbŠů— Lô\‚ď‘5¦Ăžć.ëí,j"TZ-W  ňw0‡âĆ $6Ö—GVˇ’xčĄ~ĚĂ ţéź`áý‰íŰi QT×Qźäy-%÷‰éE9ÎąW‡üg4 řźKůo‚u™E¨Ż€ÓâNňę©>˘śř Ó‘Ĺ h,Z€ תZrÚ’1ăF®ůđĽžúC{ˇ}}qVźéÉŮţĹ]áŔę‰_Ů€’Ŕ©Čł&LĐśíwŘźM¬Cěą%˝Ú™~‡gŽ1ýĽźqXßćHĹčś˝`‰(® ńčpN4OňŐ*Ö`ożŁ nWŕFä¦k"ĽŠ×ŔΫa—Ő°łşąX×"ôTr.»ČşD,W‹Đ"Ô©©{={ś‡Ý˛ąâ÷ a8Ź ŕŤ`Ý/óežf~ˇ/C2%𡡰ëŮwŇÇZh·ĎAŇFJŹl‰F.®xSąŚcNh:Hëyn({üř{ŕ8ľĘ1Šü˝y=ó.ڎr©ü­;R7Ĺ©fFÖ.ËŔrrćŘfGËęGvŢäü h··lßłÇţ¸†Ľ?[ŽčęŰ•§D7y6‚M(Ő}owĺ"'ăpśrž˛7Ř[âÉtý.[ x3hłd„ ‰sŁ˝Ęą  9†ó,E뗚ւ٠̡ĽaŘak«ÝńGnúb5áÔ–0§"Á9™µHÓ%čö÷|.+Ä,WĂjś#D,ђ椳)®D˝ĹŮn`Kkl‡\< ÇřNÍtoÇßÚUż›âěI™Wî,iĄhÓÁ2˙j$ÝÇ,{ţAwMĚBCž-t…÷|_®°)§a_Ŕt#§—®1sx¦COŐl‰ő€Üh"5Ü›ŕ”‰:o:qo¦Ŕ/ä2÷r8Ă( ·űł„SFČd™q`GŤa'1ľP¬ŕŐR5ÄŘM;(7ţ5x'ľiO€8Hą—íb‡„bF"?j¬ŞŽęëiŘ˙ߌ’Z\8 ˇz}|śýBĄÄŕă·…sY;!‘ůä(ćsY×—Ž«‚Bz.2ĄŹOARAh‹ă%™@ žţ”¨S„Ôíţ8O/ݦGĽ.‘Śş›¨?$Y-ĎÍFZ`Äň5[Jpö°ĘĎápvBxçAĄřűW Î<ŰE†W+YŽđş$âTÜyc#Č›†`(‰xĄQh—RB\”[U‘Ť{7ěŮ´Ďä¨q'pEC>OcݡÓI@şqw~ĐG˛v¨Ně–ĐĚśŻĐ„H$Ó­8ó<Ó· ĽAw>óäĹŃ ěĚn&ęGµHHÖň?>kŘ3]î€ »k—YŮ•"€Ä"A<Ä<źţŕÂѫۨP›}'Ř b–8‚#n&ŇQ/ňŰű“Š zµ;SÁ®ůćńˇ™ąŚ!ÖÔekćĎsŔšęŁ5I)^ţo×˙«‘CO˘RĄ)Ľr¶á ž ă…—G3=rĽUâQĚ«¸é>~X×x÷.AQîČ…ĽqyÝÄŽ\†S–Xś~1=ý}ąŘ)ô‰·˛úľx#ľm±+Ĺ™oŇßfľÉ|[ěŚ9Łö ¸î "g2ĺX‡’×^26Żíě<Čí˛U«1ŁŹ|FqU^?qżˇŐ°aW1r7Ŕ'*ŕµ’two‡hL&e1Ĺi7‘˛€W«ÔbaTťĘßđ^.Ŕ“Ů"ě:ű |„ýb5r§\?nß&ˇÖâ©^€@(b˘9×·1ířť6$ç;dtYˇšˇÄ“(ŕ)Y@„´10"ü&Nľęhµ.© ‘ž(ňŔž¤˙†'ĂÁxRţß^("ΨoľZľ\T!ˇÄmUá HĎmTDwyčÔDż-c« nÎχ÷ɸż•Ŕ‘÷&xś`ťČ#ˇ8MůjEY” ‘[řçjÂ#™ăČCż‚sÖçµv,ĺj 9M ¬ Ëíwďţ“–fa©¸Ę˛…Pżä2Ăq™E©R «˘c†âVYPC&8˛FŃ˙ŔaDÔ ˇ˙)‚2+É …ĂpKTB‹€Ja‘‘DÝ{1P›í\Őz)ż\¦¬•Ő —ĺ1 yéâ­k‡6[°¦zó†uŤ•;\.«ŐI˙/GW揮üí!î?K‘„Ü”qÖW'őqtöüHQq,eßF˙¶šĐ§•6 RĹčěÁĽE Ť<öě /ĘöÝÝÁy[®…ĐĘ•›ô  $óŁ ¸ G†>–ŹÍřqÎX˝ÎŞ/1˛Ăď{n5…¤QţdOB7är+ ŐB°ÜP_±›ráŰÜu)ĐB¶Tm[s2f‰~‹˛°ĎiĎŤýmWl2JôňÉĚ3ţč»h…`…xůŞˇĹ…Jä¤4¨S6Ů›ŢůöÉŢß3Ř_GLB­űBUXĐFŐŮĂI/ŻŮ[ăąďś>†ŞŚ3ŮÁwUÍ”%`ÉŃH#ňXSč€k'Šr$”Qm˝˘QąüěŘÚĐât»=(âś±1yDşEą¸¶śŞĹ9šĺkŽÍ+áŚEâ¤öľ8ů)›{ĺ󽳅đ2Ĺí7Ť¨V«$ů‘;\ŚÇÁDRéŇSşŽ§‚ˇx^6Ľ Ć“¦ÄZjľe2ŢŞ©Ĺ †/ľp¸N­× ¬›cĆ4Ő’ĺÂŤđ«.ĚWÄý=é p0 ź y•Ą!đ?¸p¬ Üů±™‰ş›iKDé—!Lq dĐYu%|±qÍd±S°µÎťD¨Ćú·<;Ó;0uę°±ecÖ­ 6 čZ‡ńpůŘYAť8Y͉7? ±˛O…ÝŢÜüĺk†XµN#[űŕŐSSĎľ 㨦‹ŕ7\ßw—ŕð3‹¸µŤQgŇ-YťŐŐ'ăMŹNϦŚ8Ó<ßgsíşÚµ`-Éíd¦Ă)°ŕď·`ן_ýšéâ třđ†tő:Ňⵋ{.vś:aâĽ×ÇŚ[őöY%e'+s‡ĹevY\w“íĺŽe#¨›_Ců.|•‰ĽjSŐÁú‘Ě#Kţ€y†¬ň `elľ8HŁöđŔďÁń°ě †ĽHŻĆT!1Ĺś@ŮhA™Ó&Q~ÉFŁ”O—Čš'1wăÔfaY¶h˙•Ů0Ř1=ů'8ŢäN­ž°  öóřźj‘Ťűvą;ßś˛"b¶ďÎĆÎżuą7řľďé—í¤Ät™ßwrvĹ)Íůi3ąÝŽkŢąxîͱ!ävÇŹ^2uĘôÝWTH"‡ŕN®‡Č^k>v"[1ÇCé‰éc6.?µůÔ˝ˇü"xEsă•/_»ôÍçŁ/őä|G˙Ö‰+4Käf0 ĺ`°//ćdí+í+l+­U–Š] Ř$çŠă¸í¸ă¸Ő…„©“t¦”8ŠÜ,Űăţrýťĺ·î/ßü`ůçöÝÖÝöÝöýĹQ-‘N˘6%aďp?bĂŮŞ):tĆoŽy9‹\_á‡Ěbş?m µ¸¤Üň¸¸Ą›„±jžDTůĘ Á8ěGTě/Â"\ČĚ` ű eęűń XXKyńcŕHlĎRq99Ť]Łé=y⪓fžĽNyçĺÓ§>@ˬč"; 7Ţ'ĆÜřűÄ›đ F#süߡMí§.ţśýé"Ň'9†űÝčRőPRG€>™yKK2BbŤ}DľŰbV`Á ™ţ´ó$ÜńżÁ-7`őß`Ą3ŕXŮA$2˛(Ĺ×ň˘€łźi±rçčEă@ą0óÚyd"O{’ŕ(ŮÎ˙h:ën{¸ső‰`Á˝źň¤ŢÇîü9ť+dĂ ím‹:I^o›Q+Đ­–™÷Ë®Í'a3şË˝Ëü{˘62é)U 4ěE2 ßaJÜ=ďG˘śUĆsđ4wÓţ†ýŤ·Ž'É`"ö&Ľ IF•)U«ÍZ˝Ö8o]ńĐ…ĂJ‡.TéTz #Í„mËQQŁôâŞwW^\ur]±ĎčÓ,¤Ź#єȭđÓ3vÍkťŰ:Ż­2:ą›ücëV\ő –Tý¨if™Ě, őŮV‘}ŤuŤ}ŤMR[•ÔxMĹAÜkŹyl Ö+@p޵µsµ"ů<¦Ś$.¸×vpqöÖťW;ďä^ćĘĚ*Ú(ű»NdBśü< &rźÔF3ź"÷ŁŐZµ%z$H ˛†y«ĐJÔâ¨*Mç:ăɤ7Ö†e6úv1nµŔdůCŕrÁ3Üĺ[–ó–W]P,V‹Tb•B'Ö) Éc”Ř|źëäŽâ[íźżŐô= ĘŽ§›Ę’•±)oMŢ;ĺ­y;е.­Gm%kp©J.& a ývůÉő§Öź\Ű+¬‹¨#†?ꪱH±•ą±föśMk¦ż¶ľ?@ß'Ëô†ť‡‡Ő 2رP(’z”>úOď–ÂvđŃ]q)ŕń{‘O‰)2X¦˙"á¶<ŻtFPµJ Š€.`€ŘÄÓ 0ŔÍcí;^©Uą–‡”ŃX$ŕQ°ű§YHř'ź~>Ĺ7«ř˛¤„ó®ŮÄŠbęˇB˙n]1ě?7ń¸Vendstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 623 >> stream xś5‘}HSaĆßw×xŻ5fîvQ4®A!b"}؇l6›%&l¤ŁĐ-¨t®rµWk*X-ęź jJMŇR˛pðPáÎŤbB,‘9wĽ»#:篇çyÎď`”¦AătÓ1“© ¤  5dS§r5aÝBµŐ¦ő(›úŻ™ScŰQŞH“íĘ…zË%„ ČLč0:ŠN˘rÄ«: J@QlĆ!Ľ®Ńmâ*Ňmjôcč©]ÉůhęĺÔF˛„(R2Ĺ/‡’Upéľß±ŕ«†˛VOm“XW^:twđÚK^ڶűÍągč ›­†WĹđÔ> ±ÇˇX‚U,JťČ˛ZK†˛tži˛4ČŚµ?°CR˝2ňaŰ) ·ÇťËDć©×ÓM»ya!:±¸ĽPlĹ\’ÖԴˆ+MVÉPKV?-'Í‘2ZŇĐTˇfÁ+#¨}~}Ćoˇ.ÂEaUôő>ęóőúź ÷ S~¦˙Hu^#ŮĂŽ·0|*P>7z04šwQˇľNőń˧żď:kno>'ąÜN7uR»×ŢiçÁÍňĹb¨m,łTřĆĄ®wᇯĽ÷_Ü ü?¤Î üÂ3ö/A—Ě)\Â*˛rŢ_Ů_IUF–˝w÷4€źz˙Ü˙&Ż:’°N>i·Ç«ʬ N6[˝Rçmšę6•ż“gű˝\oµ9[;®ßąA‹hÝüÍyŐ­RoŚĆőßâĺ,a6¬TI٬‰-„[âţxśü_KX)~a5Ó†EVŤuŇV®ŻT›ŽĐ_u‹%Wendstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8101 >> stream xś­Y TS×Öľä^«VKšď^k«­u˘U[µÎ*"ÎCťT $ad ó ™ cBÂ@pÂy¶Z籊­­ÚÚÖvzÚz|ďýç‚íëÖëzký\V˛ çć޽Ϸżý}ű†Ý»!!!=–ÎYűFTTűÇŔxTô‹şŁ0 ô ˝şŰý%–˝űö9Ö—`fOĚH›™>+c¶pNftÖ\Ń<ń|ɦěÍ râcs&ĆmY´uŰ’¤ĄÉËRř©+ŽÉőĆ›cĆŽ{á­·ÇO8drß׆Ńb0GĽL,"^!C%ÄPb)ń*±ŚxŤXN #VŻ+‰áÄ*b±šIŚ$Ţ%fŁ5Älb41‡"˘‰7ąÄ­Ć €ú 'o/Émżĺ »ł?zŞ.1ůމ1[$"uVť’ßÖ»€[ď—ív­'!tŚ „śř)4xżŕÉŠĺ.Yń¦ć•Ë…–ˇ7Ń´-#ĐTř.»˙ic´3°PNťM™mIhińĐ7& 0 ĚkZ{lÉ…Üŕ¸l»x÷G÷Ď|`_p=çB„I®ÎńĘ]d-f Ť´réÚI*Ý´<GxĂü!ŹŻB÷˝ĐZ-•dC˝oV&ą5C+ łX,drR3Í-ŚNŻŢ|RŇúÁľß=˝aŻQŹQŹek27oe.°iyš Ł””šł$ř2[ ťębŕ¦ŕ$¸  ԱˇO˙°EĚҵAĂŢÚ…!ÔÚ˙|?řâˇÍ„›ďIȰçŮSphén[Ř `Ô08 E{óŚą W†č)Ĺ“ĘAI(˝śŞ> Ćq˛r,›Ń¬LPA‡ˇ8¨ťĄÖ:»Ý¬ôEÎUpEzxáńů%oń^QT†BvŰúÔţ.UMwaéµĐ`źł<#Š Ű"ÔŻ ;SD¦eŕr ž!ĹúazŚđäĘí A?>ßDÔýsÔö>xÎŔÇ Rřgž“Őóyť˝Čat€ `˙üâĹK‚¸kärťĚ 1E®IĎéĘőř`ďŁ>žĄ 3ŘŔwýˇM“˙5[użĎVđą:Ă„i”ěU’ĆWĄ0y 9QQëľ$·ťşJ~‰Ř„”Â+„8ö岍‹ łőŮ PłˇžÓě1zhŘ‹sÜ;W4Ä[VX×P~NaŃÚş¨'äńĄ.ý;ĺhČ7Č•’nÁ´ÓŹĽWyŹĚ&`0ÓRŞ.ĚĂ{—UšW­Ąę++ü»˝[­X±\Á~f™ĆX‰aŕţ®Ř—˙qěđF€Ěą†\@­N5ďg ţ.Ů vë+n‘1 düěJĹú……98Ř@Í…ĹśćŞ"lÎQpNż#aGĽyˇmĺ?‚5¬&Ţŕ\‰GŢtćř2EpoŔY=¶hTa¦8? ¤\ÁozťZ¸,mŮÔUÇďçÓz‡ÁP¨U«ô&iÔtUÄ)e­%&ĘȱZˇGU®®ĐWę“÷~yqÍńyĺLlůnPÜ}ď_*Ý{črú8Ą±ĐYl¶[ čź0YuöÂ<…‡mŕ‚<—ĚŚ—[s$¦ěÜvµĆ đüßCűj1ý@i 8”e ŕŰB_śçą„­‰.@YMV;§Ŕj°µ˝¦h/@-l‚ËŚe€:ب[Ďd@†)TF˝59aŇč±'îl¤“ĎâÂŹŞ~şsą­ĺTőI»›Qµ(Ä*QoőĘi¶ý űäą Jó\ďşW`(®DĂĐlÇHIZ_Găá ˛ËžçY¦Vťg™šç`¬$ü/W…~8ŔÁ˝ ‡źňćĐ ChÉýđ>rr@rQr™Ŕ w/ >.űňÓ*$Ô(yÔĹ”EK”WöŃĐ“Ü4Ć’ĎÚz<€Ű:quôĆŐ0ĐÁ@ą)˝h+ŕQTAĆ'i·ŇÉě˙1Ć XŚoă[v2ÁąłŃÚěr€§ň ż™ÜS«ßÄ : ä®fs Ýŕtq±ÜŚh±âÚ­«u·w¶n7YęőÖTśsSh ’Ťü AíĆS˛`Ř]ĺoµŰŠM%Ć1‘p3, %“SMűÜĎţF˘×äaÜöߊq9=qÂřĄ÷ÜĆŕY}HRŘŻä;đAhýł¸ÝF¬`¶4[§ÍdbŠ:Y*5Žűd€,Ŕ5\€ăK±î`‚ÍdkłĄŮĺ6€:@vĄS©ěę$‡Yz­‹,K¬šćŐ ňzië]é?ëm< ¨Ç'˝ţÜĚuľ¦€ĚJ›-­Sj”zeਪĺŐĘę p}¤Î®µ;e&-Uc>Ź˝ZČIBěÁĄAI |7 …ŻßgŰřd6Š÷Č­Úći [€¨ ›Ş[2i“ÁLř\ź/Ŕpł˛jRřBQŇŘűknÝ˝wüS7]„CÇ-*ř.Ů\n9ÓîŘ]UtŃÚQP$ňĎňĎ©™ă›Óđv¤YnĘwł%ěîK®¦Šc•ÇŞŽYÜV·ÉŤËŮ”oÍ·ä×OڬXYµŞbĄYn–ą”_+i9ÇDVźsßąĹć`ź¬1Ôĺ›Ň@ZnŠ2#oŁ…b…H#ÂYĐř ţ¬ ™çEu6Ýłĺ[É)p\hvÁ‘Z7ÖnÁh-M–}Ô á*2]ł™ź˘ŮYKĂwČÎBrQßFżŕMţ;4wŻŔ“]SWîőŐg•§Ó0 â %Áś5Ëćk)-gí¦ÖŚ…´ýöß7=뿸˝tÇÄżF…–ł;Q…wÂ-®|…úDšµöBVMę´qs6D˝ (>ŚŮŠ wU©»¤”))-)s•Ú‹«ÓźîIń *…‘fŤMTTžH™Ź±˝)Cć‚lŁÔžăUĘJ“÷nŰ›ĽWY©/ŇłŔ±Ú¬&s`Gd…·Ěç© Ôí,Űæź¬Ňظu R2rłTJ©+_­tŠę¶µ€rPęµ»Ś]€ĹeŽ;Ç/´Jp§„wCkY°–“¶>ź~GúŠ\ĺľ=aEßšÓ™‡±’éű $`OHŽÝĐ‹+× ¶1đ*VZOO»Fł)u‹0%Q°Řňg±bËJ©ÎŚwŠ­37öź„D źÔ)eXµ•Ţţ»‚˙#˘ Vuťâˇpb˘) v0Ó9’"©ÔRÁ]ä®K“łŘt}'•±ZiŁ7řá3(ĂćŐ•'îGÝö˘Đ¨›©Đ&J`0čA%VH”É»‚čX «¬¤ŇTĺuđJ+DE?/G¸úcä\;>đźn¸ąý~ >|§"ËÔ´žzĆ ŐŐyÂuFƢ3ć¤Fw2˛‹A™˙%ęŽúŚA!¨çč#>‹g޵j? Lśvpľ­¶ÝhÂ>ŃDŮ´‡ędąšnX#X ¶€Ozmü~ÝđeôđÚwó1má@CŔ8L {cÉ[®Ż`%ßy]t­Ţz)†bÄMćßFw9I]*;žPR8GF™łĐ\ „‚7!'€zŔňÄŽKÇ‹ÝzµťÎÖČs@6•Q•ë«©¬ň\íß5Öëô3'ŐwÖŔó ěÔâĎŕAő·č=˙ˇüÔpůµ ö|G ž ľ:´âŢ1JóŤŇÜo;ÇŁŃW< Amਫ਼şÉ9 .čw®ő Lń`+ŘŞKĄ&m\¬\őë<mކKNâ:źS^wLt θŐt,‚űH{Vó äZĺ†ő`-5ľ’Ň~Ň ?]X·/®śŢęÜbLT'Ĺ$lŤ”…4şl5ĹŔĄsËK5ę*]%VĂ˝Ż9Wş—1’µU5-€•B&R­V*Ď•_V^â.«yÓ¶%ĺ‹2hťN«Ő0ŞAˇ]c˘¸‘»3Rí©&˝µ,*Ů•Z•Áµ6 Ŕ‡ZŁ×HTB řîÍ RŠűDž8g'Źí§osÎ}Łś2c?vŢč†Ë Ńqř”ç"O¸>řŕ¬qĚ打3„%Ţ\ZZĄ÷é|ÔďFY, Ŕn—`âŐĐFvkJÉÖíći TFfÄtmťŮ5ĐúĆYM҆̽«]ë0ç'd/5Ŕ"ńUď~‡ő$h€Ç˝đXç8¶ţôÇă}żAÂ9äEp&Ń6…OF׏…ě ܰÓŇ®+VćV óhY^Ž,Ľ /ŞvĘnGĘŻfŃTi«2WÚOúOěł^ ělý ďŤ´ĺóö®Đ'źEK,ů&!&Ú"N…ÉÔh¶†#ÂQGŕ“Ăd/r`afÉtfYłö!z/bö#Ú‘iR™Uv=îŢŔ䳸ĎÁŘS0î,Ś-ŮíŮq•Íô>ą*0%µ^ĄW+…‘ąK˛—f/‰C±‘Ę4EzaZ~łb‡|{<ěµöŢ {éś*¶6śuX_”ókÉ}Ŕˇ¨ž­ˇ()=–<Šlm~ňhÁČÔŠä‚de¦x}‰Ć©-AĽ)Ý#ß-Ým0łs%ĘDÚj‚zđ›y鄿vĐ·\ }üűĆÜI´™LNZ† í]8ެój–+  `â·Ýc·>Mhna‚$‰†ËÂďGđ˝Ĺ^ď‘ÓŤ'A#(Şł¨ QNzfeVmµ§Ě_ÄXÉ+3‹¦˝‘2c­pď§ş‡¦ŠáQIř}ŘCě‰ŕ^Ń•Ľ"ŤQŤ=XtĘâ kô:˝č(­Emq×îđşhßn×p€ÚWpz%Í˝—*ĘJMŞÉ®--ł¸,›ĆN#ŕÂÓ!N¨ç-‚•§ź9dčŔJ$Đ]ÔzźáÜ+îäî1ń„‡©! )a• P[ç Đ\OŤ¤.…ćÓé:éý QuG¤kŤťź@Ű]ÖdČ;FóĐň\-’a`”…ś›Ţx»ľűŕâ‰@{íÓ-p|Ą€ś…W(îľťIË}«pŰ5ZVh…=Á38€8¨$8Xšv÷xšĽMŰ«wb‚îaGC_cÖ’ Ý(©z1Ѩęď‚+Ϋé®[ÂF°/®Őô›ˇźżÇM® ´ěôPO+É„DuBn®°Ćř6Ką†<@Ĺoc‡>7H‡Î&ĎĎÍ.”ÓË 0ĆÇC?†ľ} đ|GZŹ\ÔW{ĆM;uÉrĆ aqĘž†jOC­¤†Źe'Đ< G\äĂEŘÇíˇo˙ßy8KşÝ0$ŘÎk>pĽô8 N×Ć­^ ž0WÂd©ٰ4Ô‘F•Í`T Ç JŘĎ˝ö¨fÔLFJbŇĆŚËŔÜÁV)™ŐXíÔeW§™5'>'Ť?†­ú O>„äĂI×Ţ,c¸nÔ\~˙ÓţźE9ĺµM#R|ٵµŐU Q˙ל`˙@P„5çŰ3ŻGp¨y°2Šł™Ż_Içóˇ?Ŕ)č˛f)é8Ý_|x-¸ŚfŁĄó ]–«WÉUôH4x$zy,Ë‘IAPł§ę<îC¨ ’aOÉgĐ•ÔzaÄ'®‡ż[€Ů°¦üöâYôVPőO}]VUFzVvĘ+Oüöţú'ŘűÇ9X…ôb¸ß¬ës¶%Sp%éSűÔ~ÎŐUp±áŔ łŐjĹ®·4X´f ¬üŤ@É×ňÁzďÜčƢQS¤1iŚ”žŁXNj(ô©4©ŠKś^‹…®kj«ÜËş—Oő.ÔLŃÚ·¦$ććčr1ÇÎ=GuUdpś.n‡˝DŢĎŮ\?Ź?ó€Â¨ ]śpŮĆŤZ­JTxG56ť©´¦Ą˛„öď*;kc—üýwm÷A˘H’Ě÷Šn›»„[ţô?ťţđźO˙ r˝0Ųçs(ű<öwyx`ţńü•ú†OhMUé:#&!@edK22Ş$5µ•Í7˘qčťh1Žţ\ʶÂđůŹ v<ö@=/áĎĎaŚč9^1yŮ9ßÁ#ę·Î!çŞQODŚM˙ćC- ŠÓPü¬ţ€8xďćv\Đ3†~Ö1—Śâ±±ďŃkT ÇŞ‹|pVĚ\:cÓ¤wGmCaŕ%*µRTOqjŚĺPOU°ęÓ_|ěŞrWş+ż‚‘‘v§Í‚=z ů6Ő ‹Ŕ"«®žú5}pĹíţ6Ńa¬µŕBř9OOÎČ5 L ä¤őµż,řPß@Î%ř\{â‰é{™]î(°bwxfÇ™]öż˙öű#ß;hÚ‰Ug·adŻâq fspőđ‰ŰÍEłGÚUQ°3óű5`6őö´ŐďĚś˛˙396ˇŢ`?žĽÔŢrââű‰SKh 5ę€,^żaŁ“żV” Ă“ďXŮSŻzď·Ű†ŰĽÁ!5á{Ä| >ÇZ#Ř ^ĺ9`śaŘŇŮiÉIY@·gŐQµ~w?·:-Kś—©c”äÔküËpúm¸FÁçp š3fŇü‰šűX™ˇKKďŹ[ťáÉť§Kiäň¶’ÚYüácőr!ŚĽvÉ|çâ¦Ô^n.Ôăb4x)ókO Ng«ôţ¶‘Egü{ciíj,W: jďţ/ ŘOńG€}ŔËjŞeŐđ—jC5,ň~ę ?q.©…đkM÷¨žďÎŰ—v\zm®=Ő‹GĹŚ‰‹ŠŹŰ‡xhY¤"?WŚËZiWë;źRŮ=v' p"Ô˛ďf«™&;ĺveľ:_©˘7-ź›2ĚK=Kö «łŞ¶‚×ÁZÔ]7…RoBśG_·Â>í» wJ[hx]ćEÉÖ c©· žßÓĹśO‹›awđĹ˝+˙p ě3’Ć÷©ÓâP1Ąń4±éŻÍÔ[8Ľ™ÁKŢwÁî·JKTĘúP˘{X :*SO_ĺá3c5xý€Îĺ˙XĘüÓŇ®á|Ů §±Í™{ě,ü…§Őë´@K©¬ZÝŃ—cs9®Ç®4«pKď|ü˙×îĐ˝2˘<Ť^Ď"NcVŰ TG8ÇVl˛ŰfnŐ@Ëü5ŻŐ±kź‘ó.—„«˝"Řësö%‚ű°<ĹŘŕ€bÓ˙‰¶6łWś 0‹Ę¤“flÍ–ŃÂřĽ5` ćŐ…‡T¸rvx«š"/?'_•/ë$ł˙ĺô˙|z×c6”-ţ%ŹĹß÷§Yü]íPňň59™ őA}VŁ)MhŢi´ľŠžłč¬kçCCł3Ý#w1ŻŔ>)p<€o8ˇ Î}a_«µ¸r[­85´˝Á0ŕ×’bŞĘ9z_GËfPdŐąNŮϨo#{Ą7—ŚbP/ÔKĄ*P`ď ±h¬´‘SRTĺ))á0ü0śŘßq0 …}qݱ¨ťŮ~ć*:IáX°n˝cľbýŕ/˙]·nĹń˙_Ďrź˛ŠVŕÍi`VG%đRWg6,^¸2{ëjZşcaů60 ›dC)@‘<”üç‹ó§?i¬—‹ü´0+WoÍw*śx˝QĹI˘ŁžE7’˘Î·ŕŘîü÷ضü.6͢‘ôÜ×$8ëúôşĂÍ>FPçČ€Ű ŚŠěš··úđŠŞÍI©ą´V§Qł# üRąUäĚ´f)9gęµőe`SO§r  pżJzLrď|yůäťşęBąź«ňd äçT¨©çéçBťS{ő ˙ť×Ŕendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4158 >> stream xś­XytŐž®¸Ul]ö$_OPÄ…EAQq|Č* ‚€l YéîęîôľĄÓ·Ó[zß;I‡$„M–6ĂÖ "‘ETpÇ }ç©·ťâĚĚ­Âűăť3çĚäôIźÔą·îoůľď÷Ýä}ű999ý gŤ7nśđG…—gÓżĎéĺÂA}=ŃGDhÂ°Ż†J?#**«¦MŻŮ$™%•q%ŠŐoŻY»ný …E‹6ľQţäńOżôŘh‚xťO, !% ‰"b1šxXL,!^!Ţ$¦Ó‰ÄLbń*ń 1›@L$ž%ćĎóÁÄBDĐCô'#qxIŘźręsPźtî¨Üł}'öŇŻ€}ärj%í/ęo@ =pë Ĺ ë߸Oy_÷˛ˇó†z‡v{bX›H$’Š.üwźAź÷őţ¶gP&S”ůŃŘé=¨¨'Źľ€^ČŠĹ~2aW3€BĄădCśĄĎä3‹˝›Óh”˛°>ŢI )ŇJ¨ýrv1z|˛˙ÜŐĂÁ·W0|í2R¦SŐJb¦‹&€TŘ—Śj‚^U >P|É÷]ö¦Ľt=s+K}”É9v5÷ä"{ö51?P7u8NéI'źsíQÔR€ú.üĄüdĘťř7~¤ř|^!†N› :©‹ď^ýü㮩Óů—ĺO<ĂÔż¸—ť3^ˇnÂWgĐŘ :{7Wç‡yôw8×ÄŤd§Ě®`&Ni”pa=ÎőßÝlĹą^ţ'ą–€­e;ű!…ČŻ~EäoSŕ‡+Ę7°ČÉĎ›¦,™ň¤f_>°`€…~ţ˘Nżwđĵ}ăgZ`ťÍÂÜéŔ*Y¶+#şÚ˘¸üű®f»Ä7ŐŐ¤\a”˛´\Ô$zźÇmw 1€–űń« и4=č×Ń~"ËŻ2•žă‚şf–Ţ÷ýMµ8«ţšD˘.ţ‘‘ăVó,ßWÇŢ= íĘ Ń÷=č_>ÜÓł zčűŢCKIi­AĆŇ.˘Ĺ‡ôxěž‚,b Ť1›z¨+dJ(ä–JłÝ-Ě<>ޤ(Ź„f›š¨ň9‹ş73×Ič¶ ÚänĄBa.7ŮŤĐĚđyh !ë|PµÄ›üć2™Ş‹–17‡‚µAÚ‹š{˘˝öëĚĚ˘Ś¨NǡzQ ú]ĽťlŃ«~0« 2YPŹóö|Îg&úm‰V«PTI–nqąí®´? Gl‘‚ö¸«•Ąí1] †áID‚Ż >č>†n ŮŠß)H%˘é®…á5ł”.+fď€sšúŁÇ瞝ϠX&ŹŽ"¶SĽŁrź÷˙Úoí?Ł<~śf+=%!Ř÷]hěhđBŻÝ;ŕ»&ĎjŠî¬öŘj; Úśń8{™Lč‚rµÎ µ0Bĺž5zžď'}ś]ľ‡łVrÎČ:)†ďb¸,)ë¦čŤi- —”×)ěˇĘ&\ei@ov'bž»:›AC¸ôdŹyôdvŞxؤŐĘąô7|x^9Vň ¤.^Ý˙) [N…T«•0&ň­béşBnë~iĐód,ĺhŤkR–ůKĐVë–ËkM÷`íΠ⌝]ďAëqCö\ďĹNYŁÓ(XZĆ…tM ˝ÇÓ{Đ27†MA*ĬړPů¤L’ˇőĽ¬üŻ7dŐm ŮÇŇŰâę /6mćÜěmf“ÝT Uiäx1¦nŠiă‹ůő¨¸Mť„°A” Lw6ń†­Z!lá w X$(ˇ@ A÷}źbľž„vi´˘uŐaĂ~¸îőoMS´ś čš™ĎpDŢŽOÎ.A×@Ę.eţ(Ąő• ż&ĹćK˝oňÂňůkßveÔD&-± ć9¬1)ÖÓŘm|ĹdŮţB1é#YR8’ŕĎ÷«<Î÷k¸żM Ťż†č¤I\˘Ňr,}D5Ä™‚vµC[”ßú|ë¤ö«}’vHąA FíÁpŁ·!ŕôoůyÇOť?9|öPR- őbb$Ş.ă\FSÁ(PŁŃq÷°®7¦śł8G…§ŇUŃÎżśďÝVxî‡.'ĘwFś{”˛řVzn ¸±4nn†]f|Ýíčĺ|W›głŁŤ dŘ›J)9–ż`¬Éĺ]’=–đ‡aı„Pw›ż(‚«aÝzc•¦DS˘_ąÎ?’üďDY* ’w y}xRÔݸQrôRv 8ćH4Ä!uâśd2ËâgVđÇüÇę‹]ő6ídě H5 ©‚–Íú° RÍľpŚu¶¨Ú«„T9s q—Ý ť,šMÂď^ÉŚvSëŔ“Ěł*Rʦ–x˘ŮGŤEsůńâgIzßě)ÚĄ%ŻĹŹű&¶ËĂlqu:¶Ŕ;ÆËd;ouőG\Ĺ˝ËŕÔwĽĐ9ąăĹÖ™ůN}َ֍±ęKĺ/LO ”­\tS…Z"]¶»tďĎ»ĐŔ+if"vţ¶ă7wÔqE]ţúpRIŹ;:RśKÉ>ŚqŃˉV ŇŚĚ¦<Ćć:Ü“ äK¤T^;\Xiî]©î]Ň7ýĂü˝Đ“›íK ­6+´R͵©D,v1OrÎź4Łfę›LÍZM1\A=|•ďŹţtîôűŚĂăđÂF*¦ö*=A‹Ě¬©-]­Ú©§g\şöĹéŹ~H&ëëď6ݍW¨€Pśíç[ĐôźX@ř§É˛–5ńUxŞyf$?Ďąôęc`}  îMlŰF©HşBę×61źx¬1•Tů8vi6úP ć·ŮŚů= (”™" I˛ürţ†şlNč˘>>yĺ*㇬]ĹžĺÔęěZ¨Ą¦ľ>kÎK+®ś3Ý­ĂC'ťÉÉ>t>ѨHŚdĚŐţ®ęXé.vÝż-J,Âáő1ž/` ¤‹řëX4R>ĐÝp"ąuc €§$•Txĺ6ąRĎČĘÖ¨×ÂŕÜnŮUĘ~R?łçÔ§đÜłŔ9şÇ~!Q&ÍÁ˘=‹ö‹ŔŤxRR›4N3ĹŘżó™çđCSďCťZ©ňŞ#ő,:ţ`4ˇ HŚ&4±“Pĺx0KKśµ,?ě(8¸'±;i2hÝLŁ:l C*I¶™éŞś6aő„Ű-áĺ'Ń+G»O˘ĺ'Ýś¨í8'ŕŽyôßučłěb¤V5n„Ô¤ç^{˛ŇSŢÄ6Ôą,v eĂ…”—A)¬đËŐýŁn5WşxÉ#Đ+ľëęr'ö2ű’]ŰťďRŤ$Ćç'F2ó€Ĺ^g·Ř)ÖśtŇ×ŕsřŘMZßVŹËxíę™ďҦm[ß`Ŧzwxb§<¨JÂ8Ś)ĘEî\۰vy-Ç1Ľĺ¦^ ¶č şŹ·íÇĆúC żµx¦Pf®+ŮT®+Ő¬«[×µîőáj˙†¸µÂą@űľĂ{şŽ0Đe}gŤ{ e$Ż\öcËoď4şŰ˘^ÄŢc‘¸e—“ô/˙f- ·*ť2f,P[uZ¨˘äAmüŹą»D†ŢÉ ŇŚ0ugőLGóřgp îť˝ÂĹCşŮëŔÝkÖ(aŠ #”­@Ąß‚ýć]•pULŇĘ…ž±ßt˝ł˙xZéV(”–rƦ®ŻÁ:HX÷¤ŮĎČú=5í7Sôţ©-'( /-|oz˛Ě»–bŚ2Á[őMě ľTŚJÉŚŮcđ0üH›śŢ`j0B#UGÂâuëW×n2ÔŘjཇźŢŕ’ś™pż “0ů2üP"ąÚ«ŕ}ľwôÂŰ(Ŕ{"ÂnDá’3üh ”ŐUIĂĆfÝŹ,⪺Z ”RŇXe[GŞ9ÍĐ?¤›Ëú+–˛‚[‡ę3ŮĆS6Ntč,Úý~ý1¸]|xýQÝ HÝř⣟/,ű`j ;»‰ ÂߨÓg¶=}hÝś(㩲Vď€T»`ÜĐp,ú)}«1TsV†ţxsńÚxQÁÇ_őę_ŰÄîTî5ď24Yšë’şíň–5p55}ÎŞąłÇ´ŐŽÍVY=§`řá¤Ô§N´xÓ Ç˝Í˛h켌(Ýň„n«€/”wS=ż·Ęrż.͢yďˇH/ľćgŐ(ďu@_­Yb©€ż…ůŚlÇťdnŽ…ś}ެŽăńg3óGţÖLÎŤëÉ˝(ČífĘmr(‡ŁňCŘHůÁ'đýc›Ď·9vÂ0n‹Á8…âťd*âĹvÁ/cyÔŕhpá›ŘNţ€(±Hµo”,śçĂ’cÚ#–l‚MşôOvý‘° ‡Źë…/Ď’r<ż¤Q#&Čß@ÄŃ‚!*Šm2®WÖ ziÁOµRk÷;6%$Ëľ{ŞwČ^ÂŻqż_\ÚÁnă‡mĺ;8ż*nĄÚA'ôĹÜiO‹;ínŮ‚îߎÄíH슺c ŃŰ$IF|©¸»¬§nÍHso™ŕ˛"ş$ľwA73âćd}!öeѨIčşşńľ’ż`Ą’Jź[©ŢôTo®˛>‰ŻN·>…Ţ?Z(ŔĎ‚úE"á“Gż‡ěńfÎĹ áŚ(&‰Ę'¨;}˛Ď3Ä“ň=Nabz'ŮA»Î”ÂË™Ě6hfŃxoĽr*âjŔWHí‚…YžS‘2|-Ân ‰ý$CţÄ˙i˝[Žężś´zEMą‚ˇ#[”5©5Ą°´V"˝ăxúËPß>–ŁGsŃ6§ŘR.­ŞV)őe6XkCŞŤ:óᵏTYdg×TWn(MŐtZXđ—ĆŰoIÉĐ0ü’·Đ\ÔDâ2ŁTK©uéŞ=Ě<óa'µ˝şuĺ=—‘ßs±X0ev K–ß|ţ)˛F«Ă—Şš©ˇw„ĂöpZ R@<®öobÇd›@Ň’m˛H”Fľ®˘t•~“©Ú78´ůnMĐ„”ětĄĂM(–@žě#ćf=%ćőŕôˇ÷ťě>}¬ű üšBCyň?Źçs ůśĘ´µ9‘lk˝xÁpSKÄßM{ZńµëÓ•ă}lÚôlYőĆŞ˛ęĄ%ů*5g€Ş2UaĐ÷Řj8·°ťdŇ«”+Í•·łDË…;ד˝ň Šk­ TSŞ@-ľ3%Ý.áż7A*âK„u!e{3`ű†M…žč«˛ę…Ÿţ)Ľăýhň#a}XXš‡—Ö Koť4Wö{W˙lţ}¶XS_«ŃůOżĘ@~Ą$ÝüĂ—ř‘hčŻĹkńA* …ŁJŹÖÇţůÂ$‚č~Ä'°sĘ˝čwaŠj k=´Y™8˘Sż>B]oĐB ”Ç aýß_ęćB^yz?Ś'^V4FXKŐµ‘wÎ~°wsęrÇ x˘áłŃźřţ×Ő~eXŽS­ďÍ€ëyP‚ř¬áaüendstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 615 >> stream xś5}HSQĆĎń.Ď™SÇĹ(¸+Š@ĐÂB‚ŠÔ"KT–:­$WM éÓšA¸-bÇLŻhj¬X(áW‚Q – +?®»4Íč®$úř#ĺÜqvGôţ÷ŔËóüřA ‹B˝yŻŮśš’’ «K­•Ż ±‰Ő‰ębâTÂ+ĂP<:}ć|ىŠJrA0= d€µ€@AXGŕ·(nćěqËQ:7¸I|‰É ™–ČIĆš¬ĆóáBdôË´:z¬eIyÓ}|ŤŰA»%S"žş»Ä§/+,F0. Ą•'KqÜ2ü=\Żé/ěňÓ>™ŁŐĘł„+; LŹ`+©IhŤ¦†¶™‘ęp+˘ú4j`k¶–ŢÝH‰ç†?•é[wÚ6®ß^<Ľ*hÝÍÖĂv8+q4™†ů/™áB‰AdćÁř§nŹč­÷üe“mÖ ‡"4ógkŚ.ŤÂ'“Ôęçfé"ßŢÔÚÜŢÔíéěëŘg©qׇiˬbŕŕ`Îű—ă·{Mĺ}„ČÜ±Ż ŠŘ]LJ]G«®Ýp\'Nbo¨®łcZËRůl”ź{ŃRVtď©psHľÓ×ĐŮĐUßIđ?ł.ýîŁ^;ěőS·ĆĚBĺ<“µ§Đ[@0ÓçłŐ›ÖŤ0#5 ?ŘŰo*’C6ĦÂm "iÄž Śžł84őNmF%Y§liVż\«ů?§">>+‰ÓJş”d|Póůpž¤ć!ă|:uň[ý Ůě0 qŤŕŹMŇfâ„®eW¬€żb >endstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8790 >> stream xś˝zxUUľď 1ëlGĘáČ Ń˝‡¤Č`± MUzŇNッÓ{Żi„’ˇ*‚ŇNPÇ‚Ł3ĘŕĚŐqĆY‡o;÷ľµOBysç˝{ß{ß÷Řůň…ďdŻ˝ÖżüʧŚuW?VYYŮÝ §/\4aň„ ĚîĐ’e7ćTŔ{Ęá=wůîäQj4ŕÄ@óoú ő/64Nkz™?]0C8S$ž%Y']?G¶aă¦Íókl©Ţş°vѶĹŰ—Ô=˛bĚŘUăĆ?:Ań›‰ŞÇÔŹ?ńÔđÉO˙ę™ĎNynÔhk8ëUÖìů¬¬¬jÖŻY Y#Y‹XŁX‹YŁYKXKYcXËX/˛^c˝ÄÇZΚĆz™5ť5őÖLÖDÖ+¬ÇXłXŹłfłž`Ía=ÉšËzŠ5Źő Öł¬{Xżd=Çş—5€55µ’5Ĺa­f a­aqY÷±x¬rÖ0V«‚u? °`‘,Šu7«?k‹ÍşP¦é7 ß¦ňŃĺö»ž¨!đ4¸Ćn'¦ŢÍ»ű­ţ/÷?ô Ő=O˙rĘ/?»÷µŹČ ś6p˙ ']|…“˛Ś;ś»űľĺCYCÍĽ5•Ă*ë†ńŞ8U_Ý?íţăčzŕ+r&ąŹZL˝ýŕö‡?td8{xöá1'5âWGG ńÍŻŽ\4ňÔ¨ńŁ’ŁŠŁ×ýGż{®˛î-}wô¬ŁÇ Ĺ’Áčďç~1”s˝ÔĂÝűmÄYžqFhp`ĄP®S©4ŞĘ’śĂ>źĂ[őŕH˝^»Ż*Źd(NwZ›Lvh"aÖš±g Îa#Ł+}Ů3–Ě6HpşĄ` 4.VWÓżZLŹO·lJ-$ę€Ü®•CQ×bO’×{—öVĄ‘LFQčô—>Ak;QY]ÎöŃĽŠľ3Љ‚G2¸8öňPÎE¤*ă:\Đ ]DZO‘\+&őięXNź¨X„j•TѶPčO„˛IeTJ­î¸3áŠÇľáů_ěďÚÝÖÜ•Ü ‰\łeťÄ,¶J)}źi›s“ VjˇÁ©„Pˇ S†…&‚|üÖ:®#ä 5ŁGxîfol%8]GDgÇ/['m\OŢÚsc-+ .ÎşĽoű4łxűĚĎ˘Š­ I©‹cÚ<…"ŕzŕÚ§đGxróů™!‚s­Đ^8đő0řö†·g…n”C‚–ľJ-& *őłŰ…+ĐŔůˇg׺%K·¬_+ˇÚ&{$梽ܝhYşp®í>©śűě¤ ł©ŢýX ¨§Pöő”ż\Ž.gsé!ęátHs‰ §Ew“a€†D~B˘űkŐ×čţäôb®ńŮ…=‰)µ—Î^}˙ú GγحĐŇ·*ÝTX-Főtţ “źĺW†rş‘şHr=ě´&̤F¨¸•»ÚŞ˛©WŇť<ĂZăăZă:ž]ĺjHl"¨¶ë *Cę•Ŕńć}~»ż*› ĺ(ή¤:*!W€ÝhMű–nĹX‰x¨ AC~?˙:]ľfµ˘©†BŤô8®ń©™cĆBb˙ě›”3ëÍş2Î#î ăÚ<ž9·˙TŐ…Îy‹ĚĐb7S73UĘŠ›Ż”ŁçúRT„2ť@”ŇăÄ/hÖßĐ*ôüw5Kߡh5ŕ+ŐbQJ—Ćm˝” 'ĺÓ˘¨±Ŕ´ůáp:Aß3ŤžF?Hţs ßÇ:\r”k\iXeXi\Ďłëj\i«L`ŻĄ,lA‹5F˘ńLřpď%łľfĘĹćN©ĂbrY©„ťń«E3ĎáÁ-ŕ&še>é&g=ßLnďZ“X륒îOßK˙î8Ôďxwşăµ­ăš·Řj%µ Ë—®Ż†Ä [.śąöŐµkçvV/±B«Ýz+x§{ ? 'f’Áśv4·/$›7™$˘i¦Š¸řK›Űížćŕž3ŕ ‘ůeŤF‰ÄFÖص©VrÚÍf‡µŠÖŕÔ­öÄ‚u°¬z¨'š2ćx§ŁĄŐMĆ®UäqťY&ł’Vq=ěDŻU =0KL P†L6&;akÚEO9‚řqÁJ[\R8źË§Ů¨wŞJ•„â´ ú yű@E6Sśś Ú‹ţë ąÂ0Lä”AIß „˝­Ł~[BŽ @¨Ň`\+ 38ńxž*´pÖĆâöxŐŽś·=­ )NĆh°›Ş® F‚`¨‡—řë‡EwC 2ŠLk:ŰJâ¬yŢśáĚ™]·vőmXŘX@wÝŚďE´°/ľ«€DĄ–czŚ “@.Î$5QµěA+Đ}Ŕ®·pČřiS˘7džˇ=pŃ*t+69¶ ­$}1ţ]ó­}ůż‰8g †[1»(ŚësäM¨…^BISĆŔÔđá¬ÂPÎ.4z'wWĂ!ĂAx÷jď̵„!zś>4 ~AśEńćÖZRÁć§L©vO‚yěY‡Ďé…ŢĘ„2*'91ÔLÚ-‘:ß&HL˘ÖŹxéSá9-uRßbyWďÚP9o’tńš×§Ő$gű.Ł9T_µ Ú$©z2Ďn° FµÉt4•đöíVW@ă. }=vÉŕĎ1Î^+ÜÍĆuéLÔŰî&1F;öpVşˇ×îbň“pâ0NäÄ~‘Ţ`‡r$‹ŤMň 2Kę9‹&NÄăô‹3¨ü 4ěŹďP©P.…oĂlµ{afC“ÝMDcڔ첷fÜdáft¸ˇ§’óqJR ŐMrÉą–ŻÝ–^U5ÎYµnŮĚg¶<&F¤G"ňŔÁxŰÎ[ŃFoĐIÚ\ěǵ L«PHWńlj«Ú®&´ěio®˝růăeH‡×é>"/ńÉD:îxĺ†-ők!QŰÝw'\Q*‹pç˝ygľ= ’9O[R…‹~x˛®ś+ëđ»¸MóbŻĽŃ¤j4“úĄ6…CĄ„•“S¦$ŞÉމűcę´ ˝ÔW§Ű€H¦Ă Đ•BŽätaôUˇrЉ¦ÓĘ0÷4Q%ŽÚôł•ł łě‡TÍ(ˇN.Ĺw śSşŠÓđ;üUßdĆ×’Q„E|§‘b€t'Č%‚ôŰSި?ŁÔkt?L±(©Íúü ěÖŇË*č €!Ľ˙Ţ }ń~‹‰24ž ¶Đ,´Ä4‡gáaˇg^Ľ <»áľđž´KÖ$!®^‡ďL*ĎËübjÓőř:‚Z{/H0†ś$_QĄ©Ł­Ä*•Ňe4|Ę9>ElbC5T;48CőISúżeŠ ·„[­ž¨/ęµv-Ô:\őîWĎł5jĚĂcĐżżőËćOÚ?iůŘđŕň'Ň ć DQÂĂÎĘýsŤX®âĽe©ă` }´0¨´¶ŔŽMř„­¶^µť§é„:‘QiPZvtwdbálJ–Qô0¬´Bq\—ş]dntďě /_F^†ň±hÜ L{28|Vľ˛˛őP«"ĺ`šž!=’üɆKŽ{HŻËďőáÂHJcć´)gÇ÷ěIG(a++ HHPB…Cé.éŮDŤŕ9Ł®ŚÂŹ^<2# t( KG[ž§87eĺůÉ–V=JŹĺęk\Ż ¶m­Ö͉݇î厅¨.˙>7V·-C±_©ň2ha÷Ď8O&ht`Ą¨DkĹ1 ĂŹ^Ć'`Ý“Nű[2˛ČČŘĘPź5DämňVy›˘…gsY=v7Ś|~eď!Ż×í A"ü0`gŇ‘ó¶QOFĆť›ÁeČłP©‰ăÚ4ĺ“&,ů¦"˛XĹ—ŚN—õ(ˇÍůĽL[űAâő /ŢoJ4…%<§ŐehË´šm53źAÂ0:ô‹L ř’:ŹXÂŻź@:Ěĺ¤Émµ|ľ€Ę±,\Že!Ł,J»ŇŞśúó*žÝl7C3!ČšăŢlŢIö Râ_ŇŔQßßQď.F«1W\R¸q@.2ó)3[Q§Hô>ýÎ˙R´fŽcĹ ‰˙,Y±Ş9Ät%z­—_"ŤR&ÁiˇŠĺXŻ”ŚŰ^howçCž#Pţf™_şÍ*‘XH›kqĄUĆł­6n«Ĺa«˘·€ Î#é¬*(¤č™@Ś.Ů•>9+Ć Ŕ-n(ČÚoéá\/¸śĘ–VG…¨‘ÖŐŻëhčŽÇÜž(uąm˙•ÝďžBwťFř{Ëqž7čŚF!Ń‚ůÉÝŢ.rÉ©‡Çc29ŚU"ąF„! ĂAŽlô/i«xĄęęj´ˇ˘´DĂY¦NJ —)Í ˇą^Q§©Ŕb‡9í"—*ţ\jj|j|Ďipë°l˛°mf«ŮfV5ňD«·Ľ0±ŮăuaéĽĂő”ý›ŁďsÄUĐý„4ßIď^ţţ˝÷Zßî$˝/r±O^kÜ,®'Ĺ*ľ‘‰Żľy飓…ÓT[¤Í݉0' §w_®-ÓÜňŢ÷*R Ś·‘ť¸ů§IĘz® šP^d´`=ˇ®}c|=¬¤1Ńé!ăĎŤGýŽJ·ďˇzKĎ!‹h1$ś> $‡”—ú%0 ŕëJq Ż—Y´*$ÄÄ$–ę˘$†';ťäęÇÔŹË×Űt6=CH3üM§áiâ«+?\ßw˘~±Ín¶ŰÚ„{ÝS(űę2ĘáĐ<Şąč8ččęülËušW˛ż ‡ŃĺמEe=—ň§öQľ ? #DFî7Xd 5)¨Ű ÄjoĆŚŁźSŃ Üü™Â™!q±eŐ.=\vĐFÝáóŃ<,…Lú=ţŽŃa„ĂŽ2 LÚ(t dc‘LZâSŁÁ1t‚1ĂĚeYeOŃpg`s ?p(şŤŚĎäZOÎt7Ě›]żd©h´l¶ÔzŁÍHŽB5nš¨&§ę1‘)î"żdg˙gDq„˝ČŃí/)źţ 9Îd”!!ŐÜ1GĚK!6Ďéł0Ë"@ߡ»ţzŠbA;µ=¶Í±;´€łË„á´J¬Pb4í¤ŚňmäîCĆŠ«ŕČďÍŹL}aŃtăÍŽ“\@Oź}ł€]ýţ`Tv-ĽŇpn(ç'Ä:Â].Y=.Á˛Ô7=Đř!ü˘Q?ÂĎFô˝±GÉ @ŮSă$Ś@˘Ź'ţ€'Fµ+[t»qß˙Űźţřů÷YS[Ý”7H;ť˘”&…őA<ź9°1˛}ëVťĽŽ˛Ř, $ě@ç2úu.‚ó“Ü'óČ„ŚóĚH©Kâ—QN‹«Rf“Ő˘ wz”~) 4Á5̢Y /Ăp‘oó.]ŔÄEâaűOťÝu×Áᯭs¬LéQśżŻÂŮuŃÂy›7叽óÖ;göw6¬¸éĄďŁ!…",”]ýťţ¸ô\Mrk°Ć+ Xb¸@<ĺĘ„Śak€Ň¶kÚő;ΧłźDNµ˘Šŕ@lâŰEiú¸_€ĎX7?U7S÷Ľú%őtítű4ŘčŘšîŘtĆ~>YGo]ĺšłÚ¬1kŽÚRH€Rl“ńĺśYFk{C7ă9ůTőTJ÷Şę7kš[Ąţv/ÁŚ˝\~«Äţ˙®nŹ­zµDq/ăĹdÓ„T.b< ¬uXenµČ"1ęblě`ô—Ë/ ôó—Ť ĺěű'‹Ŕřf>âŁţ“;`,í%°ë”ąwÓFůúµĂ6$çż{âč›'Ýd›Ü'‘j-Ű ¤E©çcĂ9˘łE”ŹÍŮ÷Çö;÷^6ěR¶7µŕŹN·žxďâ°ož=9ŠÄDĹhqB›ő—»źŢČe ń)Đý•é©9ݬ\h˘T65TA⸟ţP2ş§~Ęůzłwh.hRéDĘ€‚AśK%:Ljb|,O°G™ÔÇŁ¨‹ÁYěf±GFŇO±,Ś•$š‚ěÜ&«Ddk"¬ÄÍíÍąv'3řS‹(%÷߬6»µŞw+ú kÄĹŽčŕúF/Ţ·›{´~Żö +‘Äň÷«ýĺÂRÔüȨ ĽDĽűńëçNľŢ0ËKJŘuŘnwÚ›Ón2ńŁ3čĂPeJ• t|©\×¶9ľ #éŠç1ťLDŐ‰‹5ÔyĽÖÓ^š?}ń¤ř%Ň͆>§ú‰©OşŐ.[HůĂ6ťE5•)É\¤9uÓqÓ’žbţVŕţ˝¸8pv5c´3xÚ—5řŇÎăigŐ?ů$ęFëRQ¶5-‰J Šd>ˇaOżnßMşŔuřÉ;;®»cNŚť…bĎĆZ6L´ ] ’~HÄŘT…±©BŻţź„ÔQ(r™1KIÄâĘDSśsKF·wú:d"ŃTBP‹Kş˙ŽIln‚R‚s‚ź1'Ú=©¬› ľă şÂĚě$Ą břy¨f©UŞy‘g7Ú0Ł´1‘‡v¸°4q%=)G’¸C©ő+ ç6qI슾.yµ·×™Ůz˛äđF„ÔR˝üőĄŻé‘}syJ%nĘš“Ô€#- D[b‘,eŤVpÇ ‡˘Ę ž* ®]k<Ôt¸ń Íeń@7öeNo:ňçRůT.•ŽóĽ^ŻkîNfŔ”ÍK|RŠ~ ±ű)¤ĂNżH?ľ˙"úEeř>uź:­Ť4as*WhEň2w˵ IţXÉ?Ĺ(d… _kčĎ"´ 0°˝“O<ů#üĽúŮŽŻ}9wŢťíç9‚Něžń&ňIĆ´wĄ•Éąh(™öţ%đ(m§ XµvŤM»‘Öňô ó6¬Ôoj܉WëĎś ‚lGÚ“vĄ±‹ľm,˙‹ďř˘‹}‰ G‘NˇŔ˝žŔ˝Ž@>MfTá&Šćôú‡Ĺ—xŽ'Š ÷ąś¤§ĄĐZ'ŠéÚú–Ś‹Ç™h —?{­‡ Č3xq¸Ń·Ţµŕś ĐÂôŔ =ČŮdŮŇ ‰č„Ńxxgţ4ď8ř&„ż›cǓȄ#ĚŚ§v4:1 °€rI ”0i-ł¦ńŢş‘kGnˇiqśí?đ¶ŮŢ’¬l‰ba¤ ó©G§«¤¨q±‹)ÎEIT›űWŃiĹQ\[Nę–@b33~J"ę<-ÍBĚěĂ8v_ô oU&ÁĽ ĘdĺA1©î„3éJÄżă/t\»‚ŮÎĄPQ&6”[ńµŤ^Ŕłc‰i×JŚĚ}&˙[Ă-—V‡”ň˙ů~OÚ™q§Sđ<ţ]p'ÁńĽ!9öęş ÂĆFRÓYÝ7CˇĽNŮ׌¨B\|«Ëč?¸ü ÉŹë|ęÚIXP"Š2†„ž:Ü4Ś!KĄŤm°,Ëăky2ťJE„* L·˝{$w´k­:›Vó Ď¦Ç ©#dqMtŻ»k‡›twxv¸;š•yYł"hŚh#6Âréd.+öËÔęVťWďÓş+ťlżËďö»ż:ČKŁ%˘ú¤ać*áZŇrťˇpĎŔh$’аj“esť…´l7×Y¶÷g2ÎäŤU}>˝[ÎE¬UK°°ÇÓşî&:›r7_1ÎßH0Ě9QÜscWbŐ‹tJz]MßK/¤Ň ¤ ˛FyNĄA!Ź*RdÖĚămÝ-[»ŃÝhŞ@3˝bżš 8™„:.#9'lXŠWÝz¬¶żůĹBő§ĺ\ú9飴Ňcqűéč>2бŃ&ßá|Ń•äźi×LłĐŻŇT„<ËGý®üm/ňĺY*ΆłĚ ţóÖ‡fŢ9Ő\@‡Ż2ô:z›ŰĚĺ"­¬łĹťĎ ĽŕŮßúOB²8’)uDLŔt8Q»±Z!˛6Yš„ôý<ÍŚ©şjHH¶íŠ 2a§’`ŹíŠ®‡fh“Îł*l*ś–áh$ěÎdĽíIeXFjÁşi¸dĎL5Ł_;#NŚő•0gL+’fŻŃmöŢAç7ĘKĄôA±Ž;óç1ŁAŁV%U`oj§P—ŹÇc÷Te˘ńÓKjLD{ĺ{âRq.Ö6¸ŁĂö„&"ĹöČŔ×Č7m¨Ye–[ůXKH°łß»;žé¸ÖłPEq~apqűĄˇś.4ż‡ 'ÂńĐ®üÎü®Üż}€îşĘĽ° ±Íߏyk|Ž\"xŘ^zAᤕ8Îíé|3ĺaŰ˝f¦í\ě@ÇÉöV_ÄĹś‘xç˝Úi4A“OÎ\A-ܰhíÂŤrU“6 YK’DÂD[\¬*#Ět·1®Ź7.Ë/‡ $§Ë¼׻™ąU=eč*:ϵ±ëµüFívŁŘ&´ĚőćzK˝i+O9kŞe13„iriDťĄüŕx=Ľç|„çłč~śá Á7ÝD dZť;ĎŃ÷/“žˇěNč‚Nčub™ťC3çŚ:˘„›ý{ú®Ô$ ¶ĎX%H/Řoë±xkqCí&1=gÁĆ#E}l{ËMř/Uňŕâ+——0šĄřú÷ÜÎCďĂóŘQżżűE8NRmŞÖ« R('šŇ˛|K:“w‘ĐgóClţÔc÷řGbß)ůŠEŐK–ި•š—2p!Ťh˛äŔůňÄ;›ç>>ľú™úyžÎ&Ľ|' F0I´H’‚ĺ¶mŁŃ=Ű>#ă?băüđ­ÚcKwômł¨z˙‚Žb‘»Úüü2\Ѝ,ٚݳźt,L˓ڜ*Żm…ÄëźźčJ(ăŇńrËzĘDPš…Q~¸á¶Éů±PĽż_˘ďŃ®Qhm° J“?›Ő‰j ŔʞaÚŤjâv­L YYPJ˝ ?V|Y"”” wÜTŕŮĺÝéٵ-ŕąZm°™H©|L˙0bˡŻâCť^)Łłôx*…J ·‚´)M"Ko(Źľ]C'+n˝¸ËĐo°ž†‘Ą G›€xőç9}¶@s“ä˘Ńt«Ŕ-ŁčCąŮZżšNó,cŮŤ›<ßĘĆňä®Ě^vÄgw-ZöČ™Ź×ÎIď Ćý0Ká ·Ę7ŚůËĆKhŞüÝ˙ĹÂßÓěŤuŞšľ. ‰‹' qHŃ&Ć)8ÍŁŚŁ]IO3‹M"›&•©NGw‹ŹěDs@ĎŁŃ/cŃtf”2,%é÷ćobb 5 Ë™A± š qRźÄşú2ÎÖ›Jä/btTRV\pŁw‘Éű‚y±ĄŢÖ`­·aŐ„‰-ŤkL¶ťž´;éÉóÝA|ů÷âČ81Qá>ÎËŇ’ž}ßF‹i»u“i>ϲδ޺ŽhŚęŇŘTĺś®´‡ą3ŘŘčěű§;ożß©€Ú±=ąű2Ę^ĘyŁ8ĄąŰGOˇ}ÄĚá–ű}!ăČ8ĘVQT\+k¬›zIÜC†ŞIü!šD|żÝE˘ąô=ż¦«fîź}®‘̲֬ťcđíäŢťD=͵*ś ‹RüĘK›fAbé’}=×÷Ńď.ěš»Č m·ţ!˨´Á NAC†â˛ýŻčđMô—sq«ąˇľfŘ–6aGďÇí°“ŘÓŰv›-űŁ‘Ż~ÔpIŢĘą†:Đî&ZĽŐ˝* »+a,ÄÉĚ*ł ët·M<ąú9iUeX$ČšxŢ›ŔăOĚ˝îůékřWřáÂîF«y¶CrĎfćŻW´R5ćZARÜB:Ž{ű_čš \qO &l1mH鬆mł%*“©Ţ.7śŹ_ľĽŔ<»a8ůĂE—őD-äîA›÷ęŢÂĹ•đĹgjÖ©:ĆÝYÇá鏾îVŚĺÝ’IĹžR°FŚë Ö˙ťV:\|ńżÂ’ŕ@ŃĚ(š9”óqщ…‡ŘjęsčrŢzƯ虣č™…J]´$.Oă8äT0q•óţ€ű=ö zlßEž/ŽaŁ“V$Ä$ç0˝ĎÁťĄŰúśE¬H,8O{ľ‚=ÄëňÓłI´äg?w®~óSpfď‡ç]_Ŕ‹˝Ň/âÚtůr›ť^6 sZň0ŠaÝŮěČf]N—Ë zZ V /éĺÚjuŤ|~ß]jks”ňłť»"­ůĽÓá„H„¦cDčĎ•ĚÔ­ďQż-ť¬83¸\#ŃËtcó×-®]T/׋ôŘĚË#ňd4ň…HÔ˙ŃÝ…¨?€IW5ţ»xSN>wúŮ7u>]@ă$Ě@¦RČ%ICDG}°ň˝Ą¬Šč˘ş¨ˇďqsĹ7R8u—Ę‹n\Aµć9K¶l3v= Ň÷CúŢcĂ˙4%h 1$#ńxJШ—ÎÔ\‡×°Ęü ‹x_D|A?®켤V+´[˙ąHż.M&řxyĄUĎŚýä1}X˙ŃÜÝăáXHOC?NóžU•zܰŠ*† 5cˇhŤşö74˘éĺhŔč‚Óĺ×i˝š*ÎE[iŔDö/M˝çnë9|V˛endstream endobj 101 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2027 >> stream xśMUiTY­’*A5€Ú•3ŁÓ*.-Ҷ˘Ň,:îâ®AEČ–°“|$ "[…€€DiFEěQ¦Ő¶[g„nwÚ/ř8}¦@űś®÷§ęśúľ{ż{ß»O@Y[Q@ĽhőZ×YCoăčv¤‹ŔF6Öą\Řß´kC =’ČřťţÓdł\g»}9ç«yîS¦R”µ…ZB-¤l¨Ż){Ę’Pc)–úĺH9S㨊ŁFP#©±<eM6 . [MłZnŐ)#TZn­ąŠ:Ä+ĹŹi+z1­§,*[K;ŮhÂé‹sÓ~ŁĂŻ7°¸ÇQň˝,6l7M&)Dáô­\e Tň`0”PŔ2.ś>•Ý®­„pA]§ił™h˘—)ŕśŇGčĂň¦ w€ÁQ˙{‰,J\^k©ä…ĆĹ2:RÄb4]uˇµę0·Żşý·ąŢÁ;őŤ‘ŇärČ=ck©“Edµd ŃŚ©lőéÓ­•¦úƢ–lĆDG©#4Qµ)ŮÎátĄÖ”] UФ®ř8V¬.łŠŔPU{ő‡;“ťň…rPBzzR¤† §«ł/i Ľ g4Őęáß7@‚6¦Š`ŤÂĺčcp8ŮéÝűŤŽ Zăa6§>2žć]>"%éX¬tPţjĂ bO/&{©¤źŚëwAmϡ°,?C›•®Vf¨ąĐI®[ ¸:¦!âč†zĆ«‰ÎüaşY€#ÍBĚ#:Öěňaú 3ůě·$Úv t^9ž3ăy˝Ŕ"2 -30qđXčőń,%5X+>eqqźĚ‘ZRK'ÇC\\“"˙%N†x˝ĘŽqĹą ¤łäłŕżMw ĆĎĶU¬aŔÉ 8Óy=BËvĽÍÂý¬űˇ?Ęž»/řDí¶$Ë€×!×FĎłóoǵBÜ)o~Vsăđ=řCv“Űl¬1&÷ôőÜkŻ2é UmŰ ‰3µvÖÓx1Ö5Uí(ŤđߣگÉĐD«3!C“©4F2¨PäB ×,~ذt*™°d_ŕvŻ’+ˇŇş,“N3ő‘ú}ŃaÉł~^Ž´íí}ËńĐđpŐ˝‰ĺĆq&KŻpË]^atgż¤w«ŢÜpqŁ®šřő-4ky€öVÔKźĽ6M¶řóÚçČÓUšÁ‘®Á=|– ŃÄ•U–˘áŃŃę%®2 cŹCŰ+Ć˙×Qň޲e,ŽrM(˙íňĐÝn˘őĘÚĚ>Xěnöć¨gjÔ Ę’ĆĄoŤ[Á ËÝVžˇSóJ3i!—’V:2Žĺju9‡¸‚↎ĐFY^Bń.mla$ |Ł˘CvEÉŔÖ~›xE§Ńi €©-1VT$÷&‡fĘćÜpA>żŢ#óö9J¤Ă„-9ŢÓkć}zŠ!}+ž:JŃ °4ćŕú MĘ=.)Â+’ ĹŐGÎt~3ŹŚ%ă K˘¤’DŹĚâźQřěľN2ű9r’ÁĄ°ksś?›ä'vDt)‹Zŕ>”2÷j^?->«M\é.Ř [Á¶$îŽđ•eĹ|Ú;řĎËXÂÓi‹iĆĘ涡ôžk‘±˛ę§ „ąz˝éÖík›­ ń÷ ĺ Iě ­íĐÍôÍľ> stream xśŤ–{pSUÇoš6\ŘRŔ1Úŕš;ě.« 2 :‚+®,˛Ę›ŇÚgRh›6¤Iźy4íM~7·y?Ú&iúLJ›¶v€"(uKyŐ*RDFF«ŕîęě:xn=({JŮÝŮŮqfgîť9śó;ßűű}~ßßQ‰ ”H$šµ6-măň'§—bţ‡¤)c$‹!9ŃůËŮż=°ŕëy̧’D˘$zÎĽű_ÍUg‘§DQ¦Č?”Ą. kŠ˘í)9üŇË[ĘŐ«~—Ľ@öĐ}µ™ZEĄS;©Ç¨'¨ĺÔKÔ&j.5Źš/j±"‹Č*ę>"€J¤N¸„ľ—&ţ6ńlŇö¤$KVKÔł6Ěú–®ˇ?™˝^`S„żę#²ýp®i\üůY)[eVC=­ ›|AWŘ)çlľ×‘?§:"Ž˝­±Ĺĺ›zFľüčawž2-ß_™ÉŐÖZĐÓűâŻß@ʏŇŇď?6ú. Ö†jV^˝M»> hŤÁßń˝îŠ3Ýâ›<ŤM2{›gt°Ú]Uݞ*Lrí đÚÚťÖ†ěŐ/˝Ë0<0Úýaç%Ćł DěYš‡g>ĹÖl—w|680´»ŮZX¦/2W1yK4iA/˝TúÖD˙p¤Ež"Ľy82Š„ŠŃ” …葉^›űO@7{!ä6ó&¦^fK >«xĺt¦Ťµ¤´.čló€Ąigť,TŮRg1áY·¤–=ş~ç.PÁNOĺiŢę$@ŃŻuöĹŽ”x*tµëÓFö}řŐwßt0)SÇgŔťb…«RĎP°ç:OŰ}\O Che•  ĚŢ˝Ô\{;sĆęŐŔa`-UV'ŢNOĹ*!d Z95ČđBIą‘ěsCČ~Ś ^x»Ď]Q¸Š•™őVmÝ46G Îh źíý6#§gŇm¦„ÁÉŮy/J:RÍ`±íö§©Î Ţâ/oŇ)S@ěD‰ň%7Äh]’˘ç$čWů%^Űř>~Á×$Zj­Âţ Őęcš-ôĐ`eŮÚiY©†‹éYâÓ»|Ŕw_桛i…•Ľ±´íôĎ´J^16;ç`ĐBaXęŽŰřc@˙EňńHÉ‹9ĺ+sň™=Żl6‘ÖŔ‹$)hĆÁĐ_®ź;FJ’†«›Ő%%Şm ˘˝-Ö“Żąť,őE &]®đżáY–ű_đtÝŠőíjBMť¦ÁŔTŻ`ş2Ó ŞQ‚†Ţ×Wp’XŰb÷¬M÷GĺË»ďY›#ĐvžtĂ8+âůLŕď Şů ] ‹˘PuK™úúPy ˛­««łKŽ÷˙ř´T»fďÖm`†*ĐącΦNÓÍúPIi‘&?{čđÉ÷nŚ|Ó!˙JH°‡!ĽěLV|Ďâ­÷D»9.ä’wś?qž 6dÍ4o Šá­čů["´1"F8éDék9ĘňŇâ’°Ş×çot{伍ă8 9ÎZýű‚ÍJ%Ł×…xáĹî˝~ Í–“(pKôé-1Ú>"Ť–µ••µ—EŁííQŇD,ć[ŘŤ Š…MSű¤«FŕhŻŃ­Ż«cͬűSZ} 4€U¦w˝~ŢŮâ /ŕť­he݉"ČÝI÷1uQ|'áą;qó«Ű/¬J/®TČ·goT»Żřq^޵Ánv lţ=M m>žw®ŔŐřđń“'ŽŚĂű0™w:żc¬÷̤ńĽJZSŻ·”‘6-·ě6OżĹ ­ŕ=ŤćŁt)¬Ë]»ë`‰§ÜvxŃ6NÉX‹OóA€&.ćĚ·äöŰŇËž/ÎÉٱ!+ĐkrÇ.{ ÉbĆ‘#ňé$Z’A6?¸™ÔĽl01î?Ś‹…*“ÚĽşč·łŹ>˙ě®]eňú3Y±Wţ˙ťpé¸rf Ë~v Ű®^ÎÁ»{Fűş"Í=!ŇÇĽŠüzв,ąťÉÖ’ŠZdUŢÚ–gÔ˓ԿŁoEwĆDč‹SbfKQ’D‰—3aáŻÄĄđđš›Č m †`3˘Ix› ˛ç[ŢÓ4’HüýĐ×®-?—†\8°Ż Gµźü-XÁčsŮ]ů©kcÄSč3’B> stream xśEĎIhqđ'•%ÄtćŕÁ‚÷ćĐŁPÔŞ`‹‡ÔFkDMI'mÚ”‰YjҤÉk§Ů'›ŤYf&ÖĆÔTö(´E‘ę‚â‚ŕÁăLM/ľÓwůř~ÇT‡0Çź7.ę:©SµĎušµ*&?>±sĽutóÖ9búî= Ć.aú&¦Â^ŕđ=yAÓÖ͉2%âŇ™w„Ü/őiŽćPxv|lČh^?Ü÷Ĺ·TĽÍBµFk×Î^WN;Ý`3‹‘K–?67€ňqď”Ý73g§†¬@#ë–ęTĂ÷^A­¶ö¤¨ß qPľ°˛Vld¶Ei,¸ÂAÚOzŚł7Ůü%>ŻÇx*&$źGŠĄ/'Ł•T"¨ŕäŰ~«ĹGjäŢ´¤ýŽKŞýŐ7„ôˇÝĄÍyŠ´ŐfeŇ3BUR1ýŽhî€dÜ0oýlJd6íî,Î{¤˝ôć-@Ž@şXŠ­$ŠTRH )>Q®[ćŘ$ËAmŽ=»Ú;˘śbţ˙ËjÖ×ĺ>Ú>Ň@iäqĹ$F?Ëľü÷„¬˙'Ę»ŃVz‚vrÓ˘P嫤rçOź–ľrÜŕYň.ó\Ľ YTžM;Ćm´ĹÜÜÝ•şë’f•ü*ýbSK Čöl ˇW(WGÁ-˛ŮYŮn˝ÜTI0oČPňJWPwcŘ_şa`endstream endobj 104 0 obj << /Filter /FlateDecode /Length 212 >> stream xś];nĂ0 @wťB7°Ĺ8vCK˛dhQ´˝€,Q†Č‚â ą}HŞ)ŠOŔIđÓϧsN›î>ęężpÓ1ĺPń¶Ţ«G˝ŕ%ee@‡ä·“×_]QÝńÍ•ďGAM ›ż»+vźů2­ČŻoĹy¬._PÍ}oç­Âţ…­`‰2VÍf°Ŕ8°î­@şg=X`çIa˛ v¤ăh…ľźVŠ0¤t˘&Skäd°×<#oűZNű{­79‰¬Ě›¦ŚżW+ká*M¨'jTiqendstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 896 >> stream xśu’KlU†çÚyL „‡°…jo"(EAHv@›Bˇ¨ FięÔ¨Ćuc§Đ$ŤS§4Ź=ă̱Ǟńxj—Dv@… ŁX‰iQpú@µ°ŕ%!X€AĹ˝Î8;,»şçęťďÓ.˘šLB¨u×+=ѵY>·zŞkŐp3´›ˇ˝IYçîĂŢ‹[îţ÷Şˇ»Řöp—wŘăő {Žźpž‘‘z1ě:ęs»#ľ!_Ŕ5ĽuÔ_(Š˘Ľs˙Ű–NŠ:L˝N}€CÓHD@µTu=ŠöŁĎLť¦¸iŐÜKb$¦K2đ>ńĺÜ0ăŮ` |T<™™Ö8`;»úžmúx+żűÍÁcžé"/ DaJ†Śx]¨x5‡ÄÂ4xiÝŃ .đW<‹C×ŮE µ4hŁ1nß—tO_Ž©€ŤZa‰›ńÇ Ç2oĄ}Ż´_Đ[Jâ+4”zîă/ë(Ň@Ҭęß.˙·aCiŠĺŹçĎ/$ćâ e¨Ăö&űKěrLk° Ą Pě_p´'ă:Ě[·_–ýŮ>)Ü07”śéPŃ_;?ő!÷Ě¨× ŻŃŐY*Łß6W;q™™…|ţ$„ěµ…–ĐIgaĆn4éŰĘřń™Ď7ZźÂ?39YV@…Ś O(µ ÎZŢQDOrav2ÍkĽťĚéPËë ‹D­¬Ö¤(Y™×ť Ôś˛×J-§Ćn‹ÚIV-•NÁc]ę$¦[í’ž q±pVË‘\”\Ňł–l$’±UŐTAĄíµ<›‰\ ŢöĂ­žÂú<úľZ0ëĆ_Śľ›X#ďň«<°Üc»,§§ŚkŚćĄ¨"ĎäŇšMNťŐ´4>Të¶()#ł ÉJŽ8Öźµ(9HB‚Îp™I.ÂOp¶Í„­+¸c­Tw«řwf.šáx.2.Ú„í{{şaô_t\ě[:¸ôĐ:zU7uůłפĽdObÓŹź~ × rdůČeçç·@cô%6­nfU*ăçWţů4ŮÍĚEÔFŤŃOw~ öC˙üÁrď…ŢO^ú‘=OîĘŠŤÁ©›ż”>‡Ż 2xĹ}ŐuőŤ@ßüîŹ5űĆť:a&‚[‘µ–ztăĆ—č°ÝŃ´3ßŢFQ˙ đwendstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 513 >> stream xśö ţCMR7‹wřĄů6‹ ‹ ’řÇľ¸1246Q˝ŁřřÍ‹Żř¤Ż·ź÷’Ü÷ăů¦‰ŚoKL0Šb‹gŁ‹Í‹Â§ü’j‹~'egťŚ÷ް‹Ş‹÷ˇŠ˝ #Że'‹¬řÍ‹ŕ÷ěőčŻĘő÷ěřŤ÷JiuP~…>‹}‹űLôč®§ÇşŐĆĐÉ‹ę÷ !Őűű74/X¶†•ٍśŻť„®WŞŇϡş‹ďż=:4MFkgű…ű‚‚‹‰‹oř0řÍ‹Ż÷ŻřZź÷čŮřĄ÷8ŻűřR ‹’u‡‹}űßü`g÷ş9i‹:pg˝ŤËŤŻ‹°‹Ë‰˝‰˝ #Żp:‹—­Ý=ř&üűśřÍw«ř§ŰꮨÁî÷ťë÷*÷ۋݒձȭÁÁ°Ë‹©‹łźpr‰vz‹nrśu©©ťź¨Ĺaż(ű$ű'űűkű—÷=÷÷őč÷÷&éű ;_V^u÷űĎY‹d¨v·|©˝‹ÇěĹÖŰąŞyf¤ŁeŚa‹Q‹R‹apdshkxZ‹ 7ź ©Óëâendstream endobj 107 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1336 >> stream xś…TkPWÝ@Řl+ͲÚQ»;ťŠvD¬ŕŁęX ęŕ UÁÚVy(”(@xŇ_J䑚e‹čŠ"‹Ú!h´ţŔiٵ(Ĺ:¶wÇëŹ& V§ítgěÎśůÎ=ß9÷± !‰$kCĂĂ};?ßúkŁ ¸éÜEŕî îâň9äéÝé?xôL#śŹ{ŠbOş2fwl\|b2A„›‰bHÁÄ:b±‘ŘDĽáL‰<âśhĄč‹ÄĄÂeÔ5ĘőŚXď&qkLSđh祬(Ü:“ľV žL3TîfɬT'wFýý‡–†cĐŘ” Y\ &é3ă×Úľë5(ÂXś+™Ŕwâ|^ĆiɇŰ;VłôŤ ™ VSîBÝŕEç­¨Áę*Ä#9¦/ú ‹±xŃ»x:¦G"ä2zIY—1ˇ×ďÝ˝|ůĘŐK!‹…úpŽ8•Gďńh虄 #hŞb.ô÷^ĽÖ¸Ô;8$řŮí.Ď·Çtä7…DFŤ<üĆŢţ,R#Oŕč–bCÜ+‚źš˙K09yđ!ţQ­ůX‘źŐĄ $V• Pš„WÜ$kŔ” U»réäJ ’»Ť‹Hďˇx۵‘{5e‰%ŞL¶$tËľt Ö@O71<ÜéÉsGÔčI3ŁK2B5P6ňh45î…l.Ý$› +^µ)Áa†ďŞÜ¤ŐđM3‹ę$˙DčIokšŤĄŐíĐ^Ńj¦žúň㼴ĎmGˇR•ŕŇĚä]%m@™MĘTĐĆěűę@‡ä’+?áąŃ^lĚŞŻ4ë[u,|­ÓŐ–tG@ÔŹ=ň ŽîÄÁEŘăďYë.†üÎŇŞV,ďl˘ňĐ&ć} ¤*Vź @…îj9Ů}«y•q/Bał˘4»«đ91ć(ĚÚWś±ź-ĚQďjůÚá»]f$AłŤ'!źÓÉj˛ëŞ7VYlď@$öĂs–`÷_˝q-cU/v:Ä#7^zb2%Zôä,Ů߲//U8ř/Kő#énK⮣ѳ±Č{!¦ń´; ţŕhí98uÜlˇP’8H˛5rĹš °+öűĂ—‡/uo g'•Ě@žĽ¨ĎŠę _Ť¶2ĆhEäĆ1<OńžŹ=đÔ‡óŢěĽÓŕÔ©)(Rďç”Ű#ňŕţgłnQşĆ`»Đ7 =0Şźë4 kPŔůľ´s@jéW;sr˛óŐ™ôźy(11ť˝çOźîůţÔŽm[˘˘>ć|eĚâ¶ôn ~±]µ7ć[2Íśńp}ŮÝÁ=uű+€ŞŞ;l©S7Eä}Z’°“Ë:$«Ů ”O˙ňčŞÄJ5Gc"/+_™< d†T}n@$¬‡üąUsvűq6§<Ćä T0Y9PPŞ…BČ5äJjˇĘJ eš‚/2óý;NWë››ką†Łz°eGn°,Ę?zţÄ…VóB ?2.í˛Ł™ăëN=ÄÂ,f‡/®šńÔ‡„LŰ+Ű'w*rKµĄş¶rĘś^ĄJWf¦|8íČërżÄŇ÷„GbłŇ¤P(• …Ii6›LföĄ ě=‡¦8_g…/¦¸14@%‘Ú˝,7 JâUĎÚí6YéěÄsh˝„î¶·w¶×2CXś-Q?ŻŔ므ţň…¤é—Ľ+'VÁj[Ő‰@Ń#Iśť¦¤¦˛Ż‹5 ÷×â/Úß˙Şendstream endobj 108 0 obj << /Filter /FlateDecode /Length 2873 >> stream xśĹYIŹÇľóSçŔ›‹‰ŘîÚ«ä(€-Ž 9€ĺArrčá2ÓÉ“MŤůíů^-˝Ěôx<É!ŇaŞ›µĽő{ß«ţe^|^Ň˙ôwµź•ó«Ů/3ŢÎÓźŐ~ţőĹě‹×BÎ}áŤ0ó‹í,®ŕsď Á…ź[ˇŠRşůĹ~öOv±p˛(K'XuąŰ,–J˘äžń狥ÁŘ;Ď^Wm}¸:ő?6Ű8öN˛ö:¬âxŕě˛nŰÍń°9ťň×M.KÉNÍ>źQv»XrěgĽg×u`·5–‹ĄĺŘŇöMŐVůdÍŞcF"ăaÝÜ´›uŢбí±Ů'aĽcŻËĺ%”[ŕ¤RYÉńPĄ[W»Ýâ_?Ěč(­ěüâŐŚ˝a:żY‹Ďgß^Ě~‚5•›_ťfÚĚoaöďf\)[(=·%Śçí|?SşÔ…äÝ›Ýěç§9G^hĽ‚1 'Á9ě‡óújł¸xĺ0pÁ%f˛Prph~óäCą. +ÄÜ8[8«îFÄfłX Ľ¸9V홌ĎEYÂ~ěesX„ß$gmµjń ‡ěđĺ×MŰîŇLĆű˘Ę~¨úˇî‡¦Ú~čúˇŽ †ÉŢ0N•…sCä7˙˝a¬†W˘]V͡¦KiIÉCłXÂg†” ±7ĐîQť§ßN/ă}„jNzńÇeI–GŹzôí´,"Čr_€Ź!ŚölÄ—řW”‚vľ+ źˇ3Ş"x? ç`ĄWiť 2)ëĐ#•K©-˘h–w˘ -KPˇUň% ‹ĺŔĂ‘˛;hěaQ:´ő˘PF ÷€qĹ]U"Ů€ [J°/CPd #tÜeśžĄ ‘˙ŠűŇ'dĚŞô! ďÓ©4í¶<€¦ĄDNBéˇq˛ÉĐlµŰďŬ =Ẹ؞+ŞĽI<1UçC „¬Zuô®/ÚWť$ĂŘsDŮTWä"@SŘq]ŞÝTí µUż¤ ĆMŕ©Ř_7!ÓTřzZŢ˝ÔěTĹ·Ąbď{~ž· ů‚ů%ĚO×ESö+~Ä~Ki©¸č;đxßu® ć$:Ŕ:ŠA` @”ĚčŔgßÖ¦$QC…éŞĺžOČĂ=8żç}:˘ĐŰ|hdâ[+Ť´rv\G#-D®ý¬F‹“†ŰU›ČŰ?´‹ń}(DB#t°Ň„`ŕwÖeňɦ4Ö!€{Ť¤,ń 1 Ťă=AěD–ňćXÚéÄđĘš€ÎY]b"–,[*UďçKÄxhQHĄŘ©ŢßěĎmŚP-iqéą0ě†z‰Čŕ¬"PĽVu*w!Ś  ą !*ÎƨKĄÍ­ëëż ´DlÖ(hđ€@CĘüyĆ1¶ßt˝Mřđýď<¬ ×~á Ęý‰†TÓŮŞ9Đ=ßłüOU˙E(vń5[Wmő‚®pášĐYĂB€ĺ‡Ä‹ ń‘B _ˇÎĹ/ĎűŘ*n˛„†˝ŞĂm®)=;Ľë7ü±ţ@—Ááőc’1?ncGm |ÄŐ¬fpyÜź˝ŞnvŐj“—jVÝ 'ý@gr ÖWďCĂ„§«fîÂĹńK4<ĎźG•»ŰŽdď]łŠ‹Â!$Ď‹Ţâ#g o˙gô› ö'é©‹ž"‹ńŕ­~÷ÁŠ{ G§h¶Ůn ŔBV ¦O1F5Ů8Äs2…óß«cŤ?·ëâ›ÍűţSłűËÎ〯th5µDş—•.Ĺ9—˝°¶ ·W#«“•VÍfŰ™b[Żę͡MBL9­ÉAöż ·@ýdůNăöcęĂĆnGÖ˝=]éh?4®R9…\v'eŰćŐô‘üóŞÚ ´_‘ŢNŔ âg©'ĽsŃ7q-éŰy;Vh,¤±c…ů'şD6@$T\ńIöň“ęÔ'ť°kj ¤Á[C×XĄňáć,SĘřF—LCĆ8˛9gmŮëd:ĄvÍŐrWżŰěęë¦Y?Ϭ٭ŤV|Âţ_}˙ňyŮÜZIéč\­“]ČüX}4xuĽ°Bx±3b@zâ%–Aś€é˛¤BąĐ:T9 oH÷Í©%Ě·†>¸%Übůx­«MŘYŹ›Cá.¶;q!€N†Ţ“_ué¤\ľtmÖi2Hĺůď«âÚÁA § ŁČ-˛†•Ş^ž&îK.ĄRA‰Đ/*îrVÍţćLßöâŹůFPEd͆ N†Ět!®¦/ŹÄYC.˝ˇĘĂŘ1wmBy@€ĺŹ}ô…‘hĄĄ ű*I·űćeóhTW«3Ŕ8˝ˇO”ťUŔ5ĺ« Ő&4 tžĂş°ĘÁIĂëŕ/C3k–¬ ľazV­«›|OjDěéĂwUĹľ«Î§Ór¬`Ëűđ5.Öě—áéçjť?áÉđąT´ ¦˝ÎDŠ®ÉZŠg.ůhjÖm€ś8ĺÓQĽ¤±ś8uѝҞ{u\đ^>J‡ž˛é!éCÇ‘•‚‰>żÇá-őÖ™ÖžÎű}uü8AöčúD¨®‰Ý'Í©Áá1Ö¤]y¬ër%ĄÝÇôŢ‚q®×5E@µëo-ęĂ–.čő$][jěb .‰·©DőĆ´Hü˙XŰłI„$Č@ł˝$šĚŁĚLtߥšýaolendstream endobj 109 0 obj << /Filter /FlateDecode /Length 3469 >> stream xśµZÝŹŰĆďóˇOú” Đ[V­Źć~ďşp€Ô5’NŰ8×…ť<‰wÇDĎeÇŃż˝3ł»äRGůś´Ĺ=śHîÎÎüć{ČW‹˛ŕ‹˙â˙Őö¬\\ź˝:ătw˙­¶‹?^ś=|.üÂ޵¸¸: ;ř‚›˛^.¬, çýâb{ö‚}Yď÷Ź/ž˙ýé幪đNłÝç_|łäEÉKnŮc^ľ\.ż»řóŮąáw%_śó˛đ¬ŔóĎpŁ.ĘR˛ýa»­ş·/ŮŐv K¬s†3·?|Î'\ąBIďĎÎ.~÷‚=9l›Şo^׉Ăž5ČEiJĎv?ڧ|ÝüXŻă%wěëv]oĆË«¦ďĂcYxĎŮ›¦ż‰$˝gýÍ@źUëę6;Ö~Qö{äÜsÎ%;˙˛î¶M_űIćŔî«CµîŞţĐeěV·»·]űcłqÚ]âŰqÂËô„µđ Y/ŮmŰěú=ń xáą!ĚŘ“jły´üôŻŐf»/٦] ‡+‚ĺqâSŕÍîz<ŕß㣾ŢŢŽ,ţ>˘čŘŞÝőŐŞ0BŐU»u»‰dôż?¬C§Ťqěş ‹­«ľ©g;Ţ4;XF(»Â %¦&†6:»/łŰ’›`·sëFč”.šđDÍę««zŐ“B”0l˙öj^XŔ~ÂŮ?Şn 7”‡}ěŰ~]üi´žúu8rn@t]Ź6Ë á¬U´Ws@ŠgĽ\*ëěhĎ<›hµ˛jë«Á®šUSḛ́ďDŕăéľG3Í\…HÎcŮÓ®k»‘ĎźF¶^W›C&Áßş—ěłw?ŃŮÚö.>'=ZŮ›ŞÄEé=ě`˛( ÷Ą¶HŹ•… ŕąAŐ ¦ ®´­MäjVifŚ÷őyigś4ZíŰzOJr¨$^8)Őä$.Äx’,´őv<©„cJ ‘jÉŮśţŇfáoUmęŃQI´×_Ütőţ¦Ý  —‘»ŘRxv5UÚ¬;ü·J›:BN™żq±uěśFHMPQ( 㺤´sQH«ç€ďäčlR¸˝@zĄR#ô˘Đ%$eEĐ9 ňUÁ?9(Xkž!!4ěĺŕ—GŕŠbĆ zC"1YV­V‡Ž<’î8öŇj¬9š}¤şZUűśŐú Ó_/÷u÷šUŔH$x’–(ä±:-Áşa_÷‰°‰xż†µ·$fԾδ/ą(ŚÁšđ8·Â™Ź“MĘ­sÖŁ-ř3TŹq‘V`IMŔń\Z¨SЍ˛a)ˇŔ)DZ]]ݱJ ׎5Wř[ĐÉ$ŞGG8ˇĎnV;‚Ąě#çXߦµšöu˘, –¸RE!•­Ë‹ďŹ…Uea“¤`¶`–çhňĄ°l=ž˝ov«áĨb=3¸ŽňR0rŇLć“xč‰8«v{{臸­ ESEÎö=0UŰĄ°Ý°SŔŻ%ˇ‡ÁŇĺ⏀mQ"KRP`ÁîűR±úLI˸¬ßÁY0ÂčI D wŘôűt$ćáe‚­ŻĐ5Â1zä˝h[EWĺ BJł]& ´!äŇ}áŁŘůGŹĘáŠIhV" AŔ>gxJ1í>|.yî2č`ß“¦tšj'öŻ`.27H™ |ËKÇů¨ź_ŁXĚÁGâ~a †KGţT¨ďě÷zĹUĚĸE7p7Ă-„´:ş|ËcDÂ,Pľ—=Äę˙žžŁ7ÇĄuö^öÔ öD)ŹŇĚ rČŢ`ĚâCcär7—´¨Ěúçs÷‚•ţ»;«'Q –Ë’ź$=),¶…2ŠĹ^Ҹ=—PŢqX‰ó©’«č’y“:ĹY1G’í†ů°jäK*Jl~°eµě°[ĂĎą˘ŘÂ,¸˘yVýzľ,ćzŚĐWm—09GbJmh˛\„µđĘŇŘ/<|®UÎEi hĺ"»¶źá@”Ĺ€ôäĬ¦3}¨…Ó‚X ă#݆ŢęFčjŚLuu ĉ{.T3÷{Ľ–Ô;ľ^jŤiVuPŮŻâ óÔŇ"ZQśŢ2žqv›ŞPŐ˛çÔj>€C=]Cź˘‚xIÝ0݇M#UĹý뼶ŽMp¤Ç©§źĐ™`#ÄLXĐuń 6&BN™ŁÖą Uv`—j}wÔ„ě_Ţ` ١ęęX§CGÚĄFDqÖÄÜ|-Ź­OT Ž‚R¨CUd_íĆ6¨=t#…:ď<Şíí&őŚ“<#d Ő©\@Ý ŹFr‹;ąůÓ‹ło`›r‹ëýŠşxsV.ľ8“ŇzHR Hh°z±=“l@Ľ±9űöäËśi_ćAh‚€ ń8±Ä—9˙Łl‘Š)¬Ą={ĺ„ަOß_łâtŐܓˎ“Ĺr—j0q2[€aHEßuabÇ*cŮĆ^gÔ4wú]â8”‚)şJˇ`óJăŇö*ţt:őţjśĘĹ`~ŰşÚ:tĹ;“őőö¶éšUµIĎkÖuÖ:7W—Í\Š¸Đ’˝Ť+µ;Ĺ…:|OQ`SĚMşľl®oŔ„ˇ‰Én5ť’C€¤'žálGń°¦ ó@«1|^JÁ6UwM‰'Ě q¬µ›k˛ą„Şß ĆRľ§Â–…áĘĹŇSWŘ€Š@˘ťg{XŰÍź`Ř\)ţłĎ7÷žĎŤšśŹ“Ĺ5čç…E‡}„Ź#S,0) ¶qFCHĆx*b&Ý„°âă]˝¦'pörqCúÁ×'“ 4÷l›u+QX=ŽŢźB«l() v #Gzäů8Jň"đ)41g+ôş€ss;Š„@ŕ}1·ů¸^cn±exŹRĐí¸Ż·şÜĽŤ4!}´Ű:\`Ng9éPĂ(Ł>Łil“ŢD¦J ¸dBĎůl-ťĄą'ÎZ·ÍO1§†5&$(çHč ĎřŕÎČ-."đĹťÂD'!¬Í'A›×6=čŮ”žfć_ »ÓÄ™¸8qŽĎĽšň’ľ´áŽ?”Ž›ŕ\Ö%Nh”6G&Y}”q1ú ŕT“)VgµŔnĚë&w š]‚ňÂđî¶kA7Ă$0˝ŘWrZąL6°”n:±Ô’âđűĆť¸*T;XçÎxÎ@JLI,ĽBź)Xˇ×—*µ:hMaͤR„Tn†ß^ž(żĹ8óő’¨OüTşa,ËEé+€t/Ú4]±Hˇ[ nř,€…¬S§/âbÔń0ăNńśŘ)~O¶mئ"čůX8ôŠTŰěV]¬VËĽ«ä—ř‰G·Ł7t/–´[ĹŻ ŕ҇ĐH5j¸äřáÂrxĂŐ79ë×9@é4}ŚçuŰ5ő~ řĐŐ0­v`Ç5„,ŞŁ‰, C×1±Čř7fŻ)n+ňüxŁŤ—k;¨ˇ§üíÚet@!ŐźÁřŤŮ«˛Ö1{•ŘmÇŰ]Mßź-H©ËšP|—–­čŰŤ$řé TŚŚCnăiÂÁÁ8}v„I¸ o¨ˇ†ń›ł˙tŇA]endstream endobj 110 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 428 >> stream xśˇ^ţ SFBX1000‹…řűů‹ ‹ ’ř,ČÁĽnotOPUtđO˙=˙~»Śşřݏ÷@$ň$÷÷`÷ä¸řO\źÔĄ˘műĎäF\÷şĚF÷t’×ČÎŰ‹¸–]Vű F\÷şF÷‹‹®‰°x©nşP’X‹H‹:_wKäŠ÷ű…˙>܆łř®«÷÷“÷÷ řZU‚c‡apIai?‹>‹WśSŻdżS×vŐ‹÷ ÷Ë÷6÷,űÜű ű űťĚ‹¸ŤŔ¬«˘˘®—­‹Ż‹Ż~˘r¬g‹R‹]m‹^‰Tohtoe}f‹d‹dšu©sŞŚ´‡°˙ż…´÷˙Żgş÷Swń÷\ş÷ »Ö÷=ů:aű !gÚÜű•‹jŤkžo§cĹ}ş‹ŃĻ暊š‹š\af…KTYżµ÷ˇ÷'şşű'÷S –? Ö´lendstream endobj 111 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 778 >> stream xś…’]HSQŔĎuşs µÚe­»¨!Z/FYX+F%.rjˇéťËm:§™ůŃÍť5µ$+?§Îµ›Vf~TV*=¨ C…4ŇCő¦gx»–EÔy;śĂůýůť|}Aţ2It”čH´±Ů‰ô«ďš ŕ ßŰ«$orűđÖÁm`cqUŮ9I©™ś2pHdčÁ ‘@¬úh9ÁëDÉ{´î“;Ś.o€•7„CÄnńľ:' ¤ÜvŰÍKB¦ RąÖK§ák®\HŤ©˛MN!–ÂÉľůĺ‘ĆKRš)€éŞJ%]řăWŁ1=bD6˝ #»_v/E˘pEÎY’ňľĹVř­/Ďo˘đÉ„ä€ZŘäNüć.lr+]°JI˝ËĐT»„35šQ9kÁ  °¸¬Ľ’ę–üöŽFłů™Ľ5%ň|LLM-°OÜ/¦Ţá%­jŽĘăáŔ9E'ŢíPÓ8Ü»Ć?šĘp÷ŃjHÍ~fjąHyKŮ ±$ż(čC.ä¨o±™¦.ÔMv+ *4n°’oDHeׇ_Ѹ‹ ŐďbD8 ˛ZKŢŞîĹÉ–NĽWmĺ˝™gĹş;”‡zi~GcWŤőˇ'ąfyťÎ¨EZ22ŚLÁN»żOYFZ…FnÍĺö´ADľîéŽ*â`Vyú•Ś WŤĂ Ş3Öˇ{ä ž‹¤!ůÇhŞWÓ ł[›š­-Ĺőş;4ÎdöóCá Yě©™mhďu~¤YĚ뀝 ‡=$/qđśĎÇ܆ęšH;ßAfŚŕ­nĎÓ™fˇŃd¬B&Ň wĘŞJQŞH/*PĄ\ÔĹ#ň&WŽÍÚyOŮ(zK-ü»śźľ°ŇY•mĘÚ$'Ö9ö“µö#·Ą_ąM˙ţöĄ?s˙_n˙>×q5Y¦N!N‡ăe‹Ěž8]R]Ş//)Őë§Ž›ŁŮ2Źdäś!©ĄźeŇ[8w#üřî7Dendstream endobj 112 0 obj << /Filter /FlateDecode /Length 2536 >> stream xśíYÝoä¶÷żĐC±/‡r[ŻĘ/‘âˇ.&iĐâ4}8çAŢ•˝ĘiĄŤ¤µ{AŃż˝3CR{ňŮEóR đ—9śůÍpćÇŃO+žÇżđ{¸ŕ«ű‹ź.=]…ŰĂęO׿'Ý*Kś1zu}wáW•s‰đĆ*ždέ®ďŮ»?®7©LÎ+ţqĽaۦ¸»awkž8›eF°ĽYżO¸Yݏţ+Č3ŮYbĘz{Áúâp|ĚŰĂú7 UâR˙TŠD™Ś§đôR+kĄˇµ&±™ĚhÖőľ  j:AňD:«@ůë¨z\oŔ|εU^“™40A+ăä Nć)—ĘXö°NÓÄéT±Ľ:ÝzŁŚł”Ý5-4 ëAV5덴‰s\łmŢ—M&9 đŚďŠ_oˢ^ă0ËXOr ŞÁŽmł–ěKJ('¤aĺ®Ř…ťťf·´ fýC® iLK§8HťHĺĽi¬;yűq}ýă9Ę%VŹxŠ~ŹÚf,ěËą`y[5ap›w^'?lÖ"!xY!’N âÇĄ«ŤŕÜTřMşf†ô6Ż*é2%Ůß×™3’Ľ§¬ëÖ®/·Ézc@mçŘ· ić,9&ßnOmŢÓZ®®„ fŕd÷9°áíh\®«ĘôX‚G‹ŞÄ•ŕ§$#Ä ú×0·KŮ »e-F„> WGfŔŘŚäÎ#6ŕôöâú·ďDŐ FGUŃŁČĆć¶ĎËš4§'Ž=–ý>ڏ{*>Ä&ʎĎňşyȢCBt¤6ű$:ĐO–í.qG1îOiBRđ¸ möñ*p¦ĺŢ)tdŚ ›T€NgAÝű“îVçHf@‡x€Ľ‡aÄEĆš»ĹŁˇŞ… ¦n›şĎ·ý‚± ’‡6łhee¦ÎRJ¬S6şišď S!űÆ~łmu€”HĘ×÷áu&ŘżâOI‰đŇą@3ë]s¸úń´»/.ŁpÁvyź_=‚»/ăĘ”Ő_Đ´:eß|w%xHşc:=ל}Š’R4ŚäÓŮZr˝-?źš]Ô•% F:'ZOaöőŢ Ůž§ Đx(˘ bˇţĂ<4»˘ęH#(Nd)Ewlę®x%#¬Xz2ËĄc0.Ę8†‘g 0€żEˇŁF ŞÜ%AĆÝDĂŤ¬š{°v˝©MŮ5šäY$űj2ńí»ń7ć(ÄB` '>.*"`Ťµčkću—PjÄŔŢ?ag®)ĎÁOmIGf̸›°6vÓÜńÇËyŤřţ.?ś‹~jçÔDzŔCn´‹˘öxčFő$fEŠçé Č;J˛¤«‚S¬Őö·ö†}ą/!áŘm&|qfB ‰GĘÔR(*eáőBĹ÷ü!‚ó¸/·kĘfĘ1Č™Z*5eŤżS:ý2Śp# ug™c¨ştUyżęF_} ŻR ˇÜúE¬+ďëňfuÚŐBů†đłK Ä஧ŔŢ^<Żgőĺř´ç•ĘfjÔM’µpRóŰŞ3ÁŐ”Ą˝e*0# #´e^o'H©í·9¤ý˘í YHç(v:ĚÍNP°S\—fJ(Űq)‰ ˝ö–ŽAg=µô0éŚÝę5(AhgĎQ2DŰö‹´cŢxľ%…xA FF§ ß“jŽoMÍúôîďűĽz\çéHKăčš:’ż3ć$á"ť˝Ľ 'łfm‚ÚZĚÔ¶Äî| @ˇŘť¶^qG/(zs4މxYĺo9¸pů‡ây… ,Esl÷d@¨1Ń]îže|+ 3L(Sp+I¤Uáh!±F+˙B\KĹĤ-ó· a®[Ţż{xžRăĺŔObçxŇĘůxńűz®á9"ňĐľŻŠŔ†vU„;\żđĚG ľČɱM ĐDÚî xőŐTH„]aŻt™á*ędýújW„üâq+'N-Ú4ž‚Q÷'?ÜZÂ˙ é5}9ĺĎ }gNĚ“ţ ß3†­aż‰µ`ÎŤťI”ŚÜXéOąń±•#kŚÜż+«‰ŞÚHHöęűâj{ĂűPpĐ”WýVßÇîJńI÷©oˇ\=ßt?Ý•uŰŹź ž Ćpď‚ÄĽ„zOáČŔ…r4ć5ŃGâNÎ/`ôÚ‡Ü(bB»ţ+ĐĄr¸yę,]ÓĺŁĹŮQ_<´Đ}žđ\ďcěABüŻĂyz Ë+Ľhǰ^ş’ v¬šľ/v‹2Ü™>u.C_Ś[¨ÁB—ÍL®J†¶čN6,VKß|ŔWآźr?ěˇXAŤ ę§ĐrĂţ\Ţ'Ł0ä8Ë÷E;Ůfß´ĺĎÍřĄOŻ—‡ąą.ü¶ zWn©éďőQĚĄŻŁF˛Đn8÷:nGyŁĆÄÄ{17aż>ŁŚ¨Ř—U‘·Ôá!ľî+Ť6š~ z'>ůn°TH|‹Ű/ČŘÝ©ŢúHô„{LâaŻĽű8ío€“µĺßKâ8Ţbę–kÖ}śĽ÷w±1a˘ÍhhĚ—žx‡| ÚAřĹ83ěq¨°Í‰ľĘPŚ~•š>á”uüăK€pP {ŃLT®Ż___|˙ĂőÉ endstream endobj 113 0 obj << /Filter /FlateDecode /Length 10139 >> stream xśĄ|KŹF’Ţť'ű<:4 zÍ®É÷ca°á]Ă=ějű0ÔˇŘ,’5î‡ÔÝ”F˙Ţß_dU5ŐÜ`»ľĘČGddĽ2˛~ĽŰxřź˙{}űęŹß•qńńńŐŹŻRžů˘Žš¶ř7Ö¶ř&–6·©_<ě/ţĎĹÝ«˛­!–tńó«xń'ü˙×WáâľJĄĚ‹:cنyq‹Ź5lKÚ"q;’R…ä­- Ŕ_N4ś¨mµ©ŰŕD}[¤)`l‡#UÝ´°MNÔŐM‹ŰÖ »($łCC’:nWR©ś†!Ă‘ÎÖ@ú6:28yC|U=lC҉üČŘFŤŢÓvd!E3ěĆ'C†VŃ붸/ oCĐĽ#Ż3aČ"drކřtF$Ł ™ęx¤m3޸ÍMH3€ ő3ęÖ64ĄmBšd8Ő3RŢfmĹ[k˘>f#vU@RőÍĽS€™řfhŰâ4M;—Ŕq'ř\ç¤ŰjD5`­€4·ąÁ:äŕ˝Ô·m™*ż·Ýi …Ň i4y[ÁF„Sa@ Ć\}ţUžđ ¨š}kś€¶Ö—LWŚL¬¤<-Jo’âÓÁaɆ«=o;‰°ëYS†‹$ĘÇýź `ł’Ř ť7ITšëˇ W8ŁËŚŕčß ŕŚu­1h"ŁÉAGâÓńŔŤ&`ŠY<ťĆ Č`W†LN˛ôĺÇ`n/ăôˇŕÇ^ËZ4ţ*¤‚ŇrŃśv Z G!ŠĂjLŠ–!ť«E9ďGŽTÉ4ě Íćú Ä#Ň"ÖB254!ý >#"d:b±ÁŘ;˱fji ݧŚň„´ Ť«1#bŰ»#‘­t_F5fD—˘)Óň“ ®ÍÄ Ôg@†Ë<:0f$¨ăćČ0f$čÔX4w+á_±_ŇŰŇÝČ5š)li‚F‘Đ6č:(FüC%h@ĄáźčJ«<‚ĹÁdk ŠDrĐ`S© ĽYCŐ%RIĘ Iś<šš<Rx@[Ć®9QĄ=09¤!Íx‘Ąë `‘(-ŰŃhHjő EHTÖˇj8;ŕM†&^@6Nd(‚âDŐ8‘ˇůšFÂńęĆQş ćp˛1^p7«AÍ‘ÖVNUĂ „˛nK Ő ćĐ“î05Lś(´Íęj.’J‹3¤Ń×h…cz›N_ŁŃ×óíÄŽdRa¤¬śĽF*ś‹ eŤ©›™6$ÓtaęÝUCĂăŔÔ‡Ôck¦Ů[ŤÇé`X®F+W˝Í4fĺŃŇ!÷•T`Šôn/É *d9U ʄ̠˛ôă»ŇI6G-úŽĚ0Uâ=wcł<Ő&4ž0ąt ôdĄ^+‡éáj”;ŤD%ɡ0x ó÷ĂĄ56yä{ľeaš«Í (6RËíh(Uv›Kq–aµŔşV ˇ‡!mi ¨<đ¤u§˛Ö`Q_«śćßaěîÎd›ćε^Źç˘7IŐşkŻL“€iĂE°ĂŃŁőęcí^‡Î#/úQs®4_#¸ZěP‚äĹ Ü:2ڮހij{P•ÚNőhjĽY{‡†"/F]ľA‡¤ů05Ú»Ťť^/ĂB>qóŘßä\ŕIvÄL¸ßÖčÉäŁYü˘ŇUťéęH¦Ľ6z§ň÷z2Ňč$ę@pOhÄčąéđuęPRá8-dšŢžz‰JϦ÷̵R^$ř.˝ÓáďQoO·ˇů`Đŕ=€˙:#:ÜŔ6ć­wÓið‹Ń5Q‡Ę‹$ÂŇĄîĨÓmŇ‹M;]]_ôb1 vz9‰˝°Ő+ęéPz‰cas†#ťĚčîž;ßťF_ˇEg\ˡfđ3¬ĺçî~egT řęM ő,&úÁęč »;ąńB¨˘ŤbPK’\DÓ’(·%űŚiITÜÓëͶŔ86)ÔŮą˛z1Ď"·ÂCžĄD"|35ŰfžŹĐhľ“ÝĽK Í#ěΖTP<Í ¬čą3˘%Ő<2śm&R×Ňb˙ťGě¤YSfD; H†Î’‚Ţ…0ś%ELş¬FgHK*F%Z7cZR•ŕ®ZgPK*ę^G*µ Ş 17ČQć' _É{žÔ`@’kÄ.+°ťŇ Úθ*ë5ŕňuŁZ:rŕ´7`™Ş·iâ¤`µéś+$Á lů9»@x|đ<€÷Ô´46uš#[Í·f0Ź3„4G=ěnţ”aČAŃ<"CŚé‘­Ó(TfřÎ[djëóNŘ:MrćHSŃLÖŢ`PĺŘzśOŚjµd ŁÔ€qE}0¤Mb›LÔ°D€¸&¶Š× Ëe‡D:↠cAí} ´ľ’F.Q,¨Ŕ W“pČŬ¶ Pô^*U„lůUál— JăŃxUÍěćr0ś5ŞČ¶DÎÚ1X” ÂnÇ`…á,©ňŠ|ĂYŁ ®ĂY?rÍŰ #;–RžŁšw $®6ÍŽ#Ž÷p1ŃrűcuŁ?×™RnżG«âFXĹ`X;ĄX\čˇčŚa…#ŁY„ µ\ŽÁłq˘§Ü-$,ńeT[Ą÷|2ťŮ-+†T›$ę+NÝüQ eńŹQ-µđtű>ŕăő!˝¬Ë`‡¦©Ł[üÁ€Ú˝ą˘ĂÖ$­UcZ¦¨©htš+ eĆ”\$’ÇZ3gć*çĹ)ž‹/Ŕu ĂŰqn®<<3Wq…°A-˛d<5.„ĺ2 (8łW Jmr“f€¶t:Ń QFýkó'CZL;;RČ! Ĺ÷„^µ4wíŰdLKŞž=Şśćű™í×™› iIéŇŞgŚň3ę i'Ť‡ŞÉφ'ł;ó25L:RáüH 6?#W—r&yi˛čÓ(δ .©ŔR9ĚĹsŤ–5·Ěk•ł”ťŞÁ!}?Z¬ óÎ)eş`ál&ÜGdŠ”ŃᤋŻ6Ů&nľť„Ó2 ¤ęy-)›ŕ6ć×|_Ď’J™vCšĘł®l#3ś ”'UŚ·± gcŠŇAµC—u¸şd†“2'á΀–D©ą9eB“óuVf1ÓějAk $ö˝;Ńd Íľ8Zé¨ÂWŻnâ¸:¦ x€}Ęo6j§áŮC Đ÷ ä’EŃ•ĺ„u` EĄ©ťŢwdp1×iŠIDM­n`—Ň ř˛Ě~”-˙I"Č…b ć?$ÓĘŞ_†˛)®Ŕ˘Sá‘ ób$˘»! XŚL?F>"3¤Ś‘ű kĚeFbeMŹç1*ZóŔH¶Yľł¨Ś‘é—:‡•pkôw]$Ě’ŠÜχ9ţŤţş2“Á,©$,† ‹łzž´ä) /»Č›cî•Ě8EŞ“Ń,© [ŇĚĚĆ’Śä\ 0š%x}š{$»ŤźŚf\Ď÷MFłH’ż‘C0Oá¶ dÜ`€oj H±Ü&/9ÎŚ¦'3'ać%3ŐË8™ÉŽćm†ĹÉLŁŘś3󿌓-AS aľ:Ň,F®5ŻÝĚY4Ţř’˛q;[9ÓX–YŞš/ôß´\SÖ©’Mg3ĺ»ÉPÖ2Ty±ŻX®Ĺ˛XŢÄ.>ď–|ˇ eIÜŚgfĐŤÁÍ8» iĽQSżŚe-V–DÂŃ#/ ަYj“W†U3ś%Ő:Ő@Lë¶Ň=[‘Cł8§ńn´kĺÍn“,ĹEĄ;Z iń˘ŮTď|}YŚh‘ĽŐ©f™q,së4ĂŇĽ\kjÂx–4ŚŮ´{Ýî\Zˇ·.Ŕ¬€¸6á,‰`S%K˝zj3)餋Ńó?™/+Š2߆L3^%O+#ZRż›’Lkz?ꇭ%_űâÖ0Ý$ëHSž˛_µÎ1”çUV:Ók"/ňđ;¦hÚčíşŤ”çíGAf@K"Ýúb—ď@ę: h™AĆ&şH2 µDt_ě™fË€)ŕ)U AfH2µť‹§€dËóć’tť¤šó‘qś‚·i¦¶--Ţ…tła9GgýÎDŞ´D'FKYňyYK**{G2˝0KĘ'Gбě)+MĚAˇffbÇüj&Ó/¦ ËÁ=¨Ě‹2#Íą†Ňu-沓]GÉş*Ęô¸;o¦«ŢţPi§á”@,¶ŰçVL^¤îWź™YĄlwîA1—Čq‚Śm 9ŠY0‹ ‡j™^ĆĂޤÓ˙`¬[˝Ĺ°(S«›NçłQ“Ź4ĎîZłe9 ‘ä fęaIp+QCčĆVÇ|U6żĹ‘&>ä˘ÄÖDŮĹoö^¬&Şń K'%i§Fe ďŽÉ’¦űco‘ÍzQÇDu‹¸Ň‘¦RX4]ĚqU¦i솙‰>ő’l§Ô,ŹŤÝ0ÓżT?)‰Ě2:•ĺ\ázĽ¤ę†947(<˘vĂ,`D5ŤäD‰.XĚď&»¤÷D+jĚá{ĎŮ.çÍZtÄ"łĆL„” ŐĘ0Şä‚ĹY2Ş \z¦2jV"0ÝďaZŤÜöLFn„Q×čĹʢ­ľŐaŽ#͆÷ˇëZzRl‰#Iz_˛V­v¨ńrĂyĂĚ2ĺ73ł‹ÍË ˘vŞVńˇ/7™f‚ÂłLŐN·ăXM‘™h¦¶+„Ë4śK««IłŞ¨FÎGjVŐ~ŃdÝňłG}ٵ^Őá+j–¦kô.ł÷K§€şčv«€ŹUQ!»V˛Z™s<ň zU€"&ŕ¤Ëi˘•Ś^qâĂśĄĘpśúJ_ÍČ6©pĹh<(eí˛ßŃŇżwIVeĺ/Y»8¬Ş1*fJĂęˇc‰áýX4mU4.Ó*µ#©¦4­Ş1J‰Ž×jŐ8.«ÓJŁťîŐC5FDÎŃiőP@˘ÇWiÚ=«Őů¸„O«‡jڵ4ç¬ ßv±z(+’~ÍŚkŤĘ“d@޸‘VtGjv•)~ĘŚkŤĘk2ë)ŚÉďÚŕzETZK¦Ţ©*hJŢ&‹ŠT YeQÝ%4ű=-ă[é„ĚÖÜÁX=bÉŃ ŁârqéJZaµ«zN*Śâő‰’Fa˘:/9yaTô\~f HSŐ–Ď/yaT[oa…Ťą@‰vÎŞ‹ײ^Şź—śł‡y~@UńXőŹ^’{ú9w•‡aS»#ÓĘĂBpcž‹ůŐ3†$•ńÎą¸É¨–ŔXł-VeĄmXYTeňR¦0Ó™Őň-Z´®:­BÎÇ®AUĽsľąZY/ŚĚ¬Ť‰6TReRfHbUĽs… ąZ4V™#ňŽ­0Á€ŕDCEĽců|ąYPgE}˛Őڇ¬w¬Ŕ-·¬*Ţc’'7 U¨±ÔUuuž[3F9ö3ÄŚ‘סęAUĽ#Żůô(fŚeh3ăÚ¨bEé»Ě¸ÖË]¬uM[™ś“çĘŕжŻOŹÁr·śjŞ »/·ŠA¦•±öî2ʤbŢŢ= ÉöéT`™=XrTĂ Ł ŢłIŤjú ÇT9Ż®cL«Ś2$:’T’Ţ“G= ž­ WOC¬4ĘäHSMzdF¶Cň9ĹŤćŮZś€`5˝mxÇ%$1Ł ď¸„,f4ŻbzÄčH3šßŞébF[Ů‚bWµVü*§č޶2?<IŞÄnĹą\bVQoËî^1EaµŘmE€%6•¤·ĺŕ”ŘUÔŰüţ)y+ĎwJ *ęmq-"Eő6OĎÉŞIo^¤¨¨·úŐ&fÔéz’™«IŻËбŞlz±ÔJÉ–I¨ĚąËąc§M!Ѝ #۬Bd_CŰ(D'‡‰ ăF­kstĺoHňžÇóçĚ„’őÖĺ™—UÔ[ó•RĽMQQoő›' Ve o)]ŐéĽyŇJ‹EV„-eČŚ×,B|kTy:]?µ©Veş©ćU»“Ńŕ n“é]>ÂM÷bŐQV$î+gl;„řĘ[/dWĂSyzwÓ¦»Wíy.Ş$¨Ľ˝ń&M| ĐĎ-âśhŠĹ F3`XAvQŤZćk SÝô˝ÔMĎŞÇfiĽ†bd[„DďĆ*٬ Ţ›Xa”boźRÜeůËĚxšc˛JD#©6˝,[SF–â^Ąű™Ď/¦QE8d>¶°Út Ţq—ަ#čČ”cč(DE„†ČĽóÁ…±˛Ľuľ¸0Väą&Čzä.Ä'8›¬ÓŐŽt±"Ź%G¬GîBdYřć‘— Ué!Uw[Suy«§Ž1#w7ÎŐ”v^Ć‘o.LiçćŰËŇM{G”›OŹ.Déě\}ľ|ta,×5_†ŁąÖXeŔňŠ×ůę"ůëŽćTŹÉcŐËC˘#VeŹD¦€$Ťť=CÍGf˝X+á(†ř ÚŃJ0ý/F$Ůš¦3"ąÇGÉ©˘€äŚ’a>ąţĘĹw@OU Qň ęâÖŕTĂ÷mĺEkžzC”/ŞD9TŔŽ$©ëőć&óŢCO¦{k|qˇ'DÓý®ZšÔuš®yś*y?ÓߍµS5řC˘á‡/.Ěx­GAąę¦Ë_h­2^i™ľ¸ĐŞî›Çč¶ pń«ÓßSůŐ7<Ĺŕď©–çÍ7Ńß(ÉĎáŐ‘ŢS­äimEľGjké­I[ŻÇO@şŢS5O(±–88"5Ŕ‡¦­S]‡Ś1®Zćt‡—Ú^ôś(Őuę㠋ŇzTUÜpŐ>üQUqłÉ:ć,@™É:˘ôuZöŹ//˘É·ĺ]ś1Ô)ŞlVĘKÎGw.¬‹ŤĘW€łeéę´˛nÓë{}¨„źaŮŠÓEŹŹ.Śqşěµ”ʼnőv(7{üg€Xl÷ÄN”ĽI#ât÷°éŢÖ™ý¦{ŰÓ{ÉĚâws8âpůl¦q pžKµźž]f>şČŢFË«mo’Ľß)—#?Ě­©ë¸ň…­řGĄăřä"!¦űÚ×&X^čôl@WĐ˝´4óĹEđ6ľÝćµŕ›RŁÜ®ŘÖ¦đĆ6]śŢ¬)[ú*ąç ŚéDÍűí˛YqÝ5ƶ¨ůę@˘ż|ő: ţŃĎE+ţěµ®sŃŞ?{­kÓZ—Żq¬hmřłWĚ—YŘśJw‚|lQśJń_ëIz:ú«śĚW É©|#{•ŻqL×4š§×Ĺ™Ź-ôxĄéZźţxÝţ°C¬(4ĺeO/™3_L§ŞNUťeí8ăZ§ňg\ëT~Çtnʦřŕ"ři‚™¤ŞuŇ Ér9hôYť+Ţkł)J$˘ŃuckËKčđvĺx ‘\đ˝EňˇöłćĄ HNT/Çě‚Â÷ʼn‚uS×*°3`ĘhĹäÂÓu7`„‡ď-˘Éź['’ č±8'’ë>·Čx/ݱ®žřÚ"8‘„‰Ő?U€43ź_ '’tu]֢ظŰe­Á{iň7âş6ä[ ÓÖ1ş¸ő4Ću÷ß•Y5DâÖs”şŽ+čć[‹čT@ľµ(NU˝ź*ĂŁ‹$[d§ĘŢĎ÷Ł‹$[D§’Hö,Q?%ąľ^!?[d§’öR,ńž»lW\·%˝ 熿3ɬç7üťaćs‹ěTŰ^“s#xČĎ÷Ń©$Ȭ«Nĺ’¬ [CŠ÷<|Ă’í:,ǰd»Eyq,ô–\m‡%î-+ZfňV=·*×#®tGoÍőöşÜä«‹čT~ÚTÄć:=Hq‡é>ëćĚ|…uĐŮ:•Š^eż¨çŢ2ź!]nXXé>»ČN凱­SůÉᝯ?8#‹aş^fńßt"?JŁIw‡u%ÖGWśV•/b{†Ě ÝV[ץ­ŤĄW·†ř›EQsëŔͦ¨9Śuŕf—űq†LEÍÁźze>ĽČN%0B”îĂ%^$§Ňˇˇ(j>Cš,YX,>Ľ(NU}¬áÜđl™O/R~ŽDç†?+ËCŹc ŃQćŰ‹âT:ĘV7>Gş6přŮŃÍ"x©zćă‹ŕmt¶ůř”÷’0ݬĚ|~±ˇÓÎ ÔÖž#]†,t?˙|an^Ł2ĄľOHŽ žCw1ă:•ta„ö© žĂJĂąN%­1Trü ™ŠžĂş«ĺ; 3e@¤GřŁ´çHvnt×,ŁřŻZ¨ Ý˙U‹3dą!]cĄżă ůó«ăO´đ®†sŕď•@L#3Víôďßů•–(Cá?ńr{ĆóëV'„*#©•O:o´€S«+ĘçĂ-ଠóV<]§FGä¬Őó<źů©U¸řEű}› ˙çúöâżżyőÇďXżM!a'Ţ|xĄż‰V.Da±ß…hon_ýe.ŻJˇčĺM<ý™NćÓźĺňű7zőOo°9úő”ăŢęăéŐŇźý}™~Ô“¶7i,łę?5YČ© Óżúł&ŽśšĐG2?kâČ© oÉz>oâȱɚ˙©ÉůŠ~ŻÉç+2<Ů+ŰjâęĚނ݉&ŁŕC˛|D€ĺü›vţÍ8}#ůĺ|őŚ~óś—|đzĐŰç“l’Můńéě/ů5¤±ůÉ?­ŃrŹ,c˝5˙nł{:ütÉäJHsłż¸9üßKĆŃŁĹÍţćđéţţýi ˙ö˙÷CL’ `É7ś’ôCŽśÉ!<©ŮΚ,Dšćß;J°F,¤¶ÜssöyÂŔ?Í$ž`‡yÇ]ë†B=ĆT7ďI7÷Ś_ü.?›Jć5óŔtŢĽÇčż»Ľ˘bĚ޸^0NζðG«c×Ŕřz˘ůě4aŃ<[+Ä6ŔjśQl¶—oţúę*±új䊅°Ö×›O\‹7CÝüőó{v='‘ióŃľá}ĎŘě·ż~z|ýŇ‚ě Î&Wćś±{ăřlrĆú±ńŰ [°¶©q9oĚLlUSN óÁ2ľŕoŕjş¸b0ˇa­Ű{ŤsÖňŇřŁ ţÂ3’·—¶ňG|§´ŃNµO{÷°7w÷OúeóĂîaw»Ú?€UWĽťŕăă=ĐŽÍÓ§ý/NšëćzwçäúöťÄiňü9«őťÉ´ă4öŹO‡ŰÝÓţ’?r1#ď…ąóÎi±¬ą[Űm“YS›ëű»+˛ ÔŚhж㊥ Pë?f á?[?ŮhjáîŇd+:Üßín°čÎľŰćń2BÇŞöwŹ{°·$óÍ»ĎOŢ,¦ÍŽňlőÍxç'ërx¤ÍÇĎűÇÇ˙r+vŘ×WuóĂĂ=§¦Äë4}ÚŢďmčXjáIÔHĽ5Öö±ůĹÁ2Ť/đ™Ąj‘‰óěÚ<ććţîýá¸Pf…gÝÜŢ_VăćýţńĄ °Emu¶˝Ľ˛§ Đ&>Ünv7kBˇ|mBW,ĄĐÚ ¸żçĂšÎgĆĘkp~óÓîá°»ó6%EęŮäX)‚@aÍÎXJ{q’rLgĹ\ył»ăߌUâćóÝőţái™ZbűdO€\fłĐŔ˘ýîńóiS¸Y<żSňľ µĄŹ%ö~ýlmŢâÖ5ďĎ0=0µ­šThŹÇnŰćÇó•|ŢýZĆžËřFäŞY-CáÔ‰oѶüpw}óůýţ˝Ťu€ÎŰzÎ[^Óçíćúćö6I=ŰÄź^Őó¸Ç1 ¨pęŻTşksł{ÔBČg‚ňlHOPűkȇÝÝţĂ׆lkb»»÷ŢćĽ'¦ÇKíkňŘ„˙˝{xˇ/ľO ĺ¨ŃŻďoĐ95B,]EđĂ·‰‚ŞJv‡‹L}¸żą±Łl–ôçĂÝG[ŰkG\ROĎFCśď={ˇČŘ«»ýÔˇq‰‡Óś}7?ÜŞmÍÄÄô }“člŹ4iáŘ盛ϏOč’rĘę–HŤ`3eő5‰žťÝęíą[_Đ_±Oőó鸞>­Éĺͬ0Öň/ŻŢüYr÷Íű=NŁy& v(70E?]2—Ţ ív7ŹîĘ@ażŰ=šg˝;'‹Ë&؇öĹśłŚ”÷GU`úe˙ŹKçÎ\}27ÇLćšŕw˙•[_mfׇÓß˙劗͇Űôź$­ú*nţł}a&ŕÇ»ű‡Ű·¦ŕ*í4ߔͱů‡S‹ÇžŢZ'.¨jVŚg¸˙>„„mx»ąŠŻ×(cŃŇJ2_šîýĂű-OżŤ:×”ŹßíŢžfŢYżuńׇżüşŁ×ß˙ťyQžßÂ[ťŻ}u°čGúżhÖßW Sű·ýă·˙üßţĺĎ—qóO Łą9Ü~ ˘Źű· ¶qŻ–:Ő˘O€'ďo7»wßţţO<ż×¨ >B«ËľŮř€Cń{çĆŐ‹}ť/e÷·Ă#–˛ÂÉ>}»VVípc=Ĺwmę·§Í÷ ây©-m|Ô/ŮĄ1ŇWľýpîÖřÍÔĂú9‰ÓÜ<î?ŢîďžĐŮáőiÉŘC|4?,âhÄď_Ż ž5‹Ţě(}éűŻÍöÝÍáňiIű<_qx}jyóôË·kU_F= vŕčşđĘĺ#,:´‘´]“}١űÄĆÔF}©<ÖusÖwŇé¦íޤę{iÝ5ÎŤů?ť/*ą5îÓan¤d]“;Ŕńđ÷»ĂôŘü@'€ëńó§ĂÍy6ć7Ź«k8瓇°ÉŻy×yšw<ď¤m>>~˘#zÔ¶t ÄČÓdËEźl6 ‡ŮďN_íăę ÉYdńp˝?hýŮ74"ŞÎ˙pĆő%ˇ\g¶B0·|í„©Áb›ńâG¬ęýáwű‡eřfwđ·`Ŕ*ş–»n›7—Ăât&÷«—´ąŰ=}~0Ă3$őN°űáa˙´Łmz<µ—ćô⇦X6{ŃýĂjÚxdV%#˙bÇ6§Ť:Ĺ‚_3Bę!=î.—­Öz Ó6ë{ô“Ź|‚ĂkÓâtÓ‰ŐFůJ•ńśŁ -7O÷ú÷Ys„Źg͵«2‰…÷ç}íýĂěÇýGĂÍîúéóî†Q†M¨Žż# 6uf!éÉ9žBŤ9WŠk>súQ č2śsŕe(üĄ7pű_y2ďďl˛$ÎÝâ@węŢ\!­A¤ŹŽW¦-t•—çźF7–4˙ cNÎâô§­Ž6ßĂŐç*2ŰÁÝ|ő®ĂrňZ‡|"LÚăřů×A]>ܿ۽;ÜžŽçŽQµ…KYnîłđއÁ‚ß1‚RWĐkćîé»x~ óI„ł”ĚIńśNżäĂĂęćą÷‚÷¸ĽĐ!–Ę$ŰČ/xîüëŚ+Ňße#®Ç^Î ÁĂÎückrś5?RUĽÝĽśăoňôß–Câ\2+áŤaíA ”RxŃ Öíů_˝˝¤ âoCÜ…Ô…<ÜšŠŕďUĹĄMŞ”ńůJŹţ/˘÷w–$E¨ÚĽ˘2ľŽĹS›Z<Ť·ß)Ň)çŤměa˙řLę~u7+ü]áĎÓžţr†ˇYžvtKäŃÂk¸zş9FKq˙ĺđ>›š˘ÓD,:(šH´ŔŮâĽÜđ·ý`¤EçË ľľżyúâîţô7h퇓ááĎČÚR*Ś3vď…¸*ťF+ăÔQţ-ŁĄŻŤÖSĺKa>®˙;ĂĄ¦H÷SĘŃ~…­^ŻBaĆ_X]9 ×Ά+żi¸ň•ářÜ)ő5.;3׋+«ˇîđm*Ϥßý?:§Ä—endstream endobj 114 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4363 >> stream xś]W tS×™–1‘n6’ jCć˝–$dź&@“)mCBÓ`b 1Ř`L0¶Áx7Ö.YÖľĽ_Ű{O‹µX¶ä]llI°CŘ áČFh“tŇž´§í4çÚ}™f®0™ÎŚŢŃŃŃ‘Î{÷~˙·ÝŃÜ9˘śśśŰ_Ď/zĺ™§ź~:űeaµ°mćÚLůmpW.Ü5—{@úÔ|śwß•{ŽÜ+Ęľî±aeă/›^ÚݢPŞĘµ•U»^Ż©«jÉs‹E˘E˘µ˘EëD‰Ö‹˝.*mm‹VŠ6‹^˝,Ę­-^Šć‰¤"ąH"ZHÖ@>ţ”“™ăšs#să·ÜvI\ ţNr•ßţĐíÜ‘çwîż«řîĹw_šW|OÓ=Ý÷ęî{x~Ăw9U#˘yßÍůŹĹ"OƢšĚôőüiďĄ××~¶@::Ă:[(‚¨ŢĺlaElnsë-ś“ŁĄŔă_wzČH:z&ŕ  Ăľ(ëâlZ#Ţt|ڤăö?Ř~o˙’˛bä<ăÂ÷·˛y.Ź \ĐUËZ¶ Ńoß·lo,]o7şµ>P#[ŔÎuuú ‹’j`€`P»XzČďgü CŰžzMă´WâM„ă|,Úë!ď>ąź‚ŕ‡ădĎČp!ľ’®ÜF¶ąD&2§¦źLĺL—ťÉĹÝř;™yĐ4ů:üt?1ndśn'8•u‡Űđđ•VëmEV Ôj¬µeBÜÖÜV-Č4&ŮîKĂÍžůňŞ'Ď/ŢÇďhĘŻ[ˇx…¶4›vC*Ý×0úńđőŁqĘă÷ €ĽÎć·j»ôNŞmgók[i\ŃhŘžöE:ĎvźJśÍăŇčAç·­nŘÔD‘µ™yÍ*üÇÍĚźľţeí ¤ăÓűđŚĚ+ąĚă;.Ăź‘_"=Ł»Ňý[Ľe€„cb+cł€™nžJ‰ÓÝŚŢěhs›iAúmŔ\éßý<ä‘m{ś€LVk›)Âđ4îK5ń“Xřkř¬ďř™ˇážĂ0…Ţ-úč9Jhn“á5â“ý…›héř—>!ä´¶zŔH-›­ŢPg$æéIĽŮň=ˇ<6%K_‹ßčľćďđG»}Ďď»čzjů«?˙…‚V;ÔŚ ĐĽďrţńí­Éŕ9qäb.ţëtˇLřWĂCÂC HŃĎÇ—ýŤ ‹ń‘ođ#€ečJŮő‡©O…<™«Ę¶ÓĽSýBĹOčŃ«ęcStXâä¸řŮôŮ©‰®Žľř źřhga…“!|Ł ď•‹T™™§29řńĎsg*frdŠ“ů}ë`1<ňZ~ţ˛e…Â= ܇„{?áźa9ÎýF“TdČđ˛Čc8»ĎJ€Z«nÇăŹ=.Ě´¨ŕËođâ÷ńZ,˙‚ëťęšôÍČ“Ëő sëiĆá¶™y2VôzB^ţ(®•ű"ţvoů$~7gŐU®kn¦fáОÓ.Č‚2şđüé!Ľů°Ě#UďW섹ŠK˙xľö·KwV«[ši‹Őf¶ŘcUUđ"h¶T2.Bg'ˇł“Oz’í>*4–¸8 ¨Sé* Ű-Uô3Âß]—ÎnČłé´n¬âV·ÍvźťePXś‚”7˝Đ˝ngS|\8Ş-íë@ L;p^ŢËeđ}r<đĹvâ™k—u—Ą¦uťv}y™^ۢiT¦|7C{Bţ74Ś”ó{CéĚţhTž÷$zl߼Ă6Ć–ťŃ_/OšÉÉä̬şž‹ŰfVČě.ů™YW0ેŃ[ťĆN żÝo®¨…JČłŠŰlí1ó O@ş&ĆoDđłXx+üm#ľC¸3ađéÁ@”ńľ8k>nMojd&aÉ*¶+őn=ŁryČźJÄ6ŹŐCnă}±tš“óiGć  ß‰G`Żsźr˘ľłÄ[śĄpo@VMŻ$ć˛vú1™ŇaĐ€éÂúÔ`g_ďŰk"µkš·VRÖuĺ°ÔŹYʉă8˛ŽĂąŮN&óS‘±Ř‡ŁłŢĺbírÖę1Trĺ r7Ů/XŔ1ÇA¤ůŢ“X/Źź{óÓs<âĹrFMٵ´żű˝śž:‘‹çś—őötőuÚ5»tuőżü°ůřĄ‡® Ňl<Đ—8´ě­oíČ7ÁůŔäÁýG`öę5J·V d´%úă}˝gÖ÷nZţüÚ%‚\„R+_®\żcSô€)ËŮ5eź)Ďŕu.ž~Hćh°4Ř· ?•ŰUv•[…’­ýe'.żyăť4ĺó{ą›~ȰvŻvB›°h) …#™¤9‰'Iě˘ăŽĘ}!H´ú@ś%(̱‘°Ío´Ů°ŃkÄüţđţŕţŕÜĂů8ŕP§‰oÝeŻm¶SuÂÝn«ÇÜ y°“ AbŁŮŮJ;%^+ĎpYŰ™#wŹÓŹĎäNĎ›’µďěk…“Đu&úfö¦~OüDťł«$‚ßíÔ[vjWď¤töĹö„3|†žŔ/q=‘=Đťk šlJĄŤZ%ôK«Š^#OWđć ĂůľóéłÁžH‘ÇđnÎŇ%oín 톗`Űł¦Ťn‡ŰNŚŘĆ;9čfKDFzO”`[ µ†S­\۸ Đ‹‡Ţ879Ü=ÜźĹý˝ĎżßĂÓdoŞÜ-jP€&fáŤa « ëV:”v•âąJaÁŹm1Ľ5|!s1ýͧ8"qاŮÂ"›ř¨xŇXBćdőÚ#ťLośĄÚÇúĎLŠsmd µćÚ®·ëězUľÜ®p4Ănôz˙«_SA1ľ34… {đ<Ęź‚4굍×P˙4ötťĎĹ9-‹oëjš€ ú<<ĺńű˛$ŕ­^›Ám¶¸)Óşźo¤µuĆč RlW ë4¶řĂž0JšBz…Q«vQĘŚŞżÁKÂ]†Zĺ6C l‚W»V_hąBLÁ±ˇÔ:Ž2Ćä4ąĚŐÂĺ.Ł[oołéZőm­\§kR7ŞŇNLŇŢ‘ŕHp8v*~ćŔ›‰d:Ůë!‰1‘.¬#F”óe“HŘ–šţAx¦O¦y¶T¸÷q éŢnB~qO*ճƴ>Ú!®l­«_¸áđ×—Ż_ßKGG¸±Đč'řmą—'4˘,;š-J•ť°ŁŻmSŐ­yĄĆ‘ýďőĽ×ušőGű!FUăE+«—(bŕbŕ6ÎÁ§\}1–ŠŽwź>Lf0ڵćfZ±¦>VˇUĄç÷ĹŇÝ˙¤ĂJu6Is§WMß-kR¨ŐQcr0Ő·çĆÁŤÂŹ„ąÂRáKŽ­řýµŹľ=F\hÇ+qs6Î&04™L۶ż^ż+ЏÖwH±ËđýÁ䥾Ë&ˇN®H'kŤ4üďôƬúćś§:-“9Ht˛ÚžćöŘĄŐőőëÖV-…ç`í˙źÓ,%Đ˙ág÷[+ŁÂ°šŇÚH{Ů^ß?=›ŔlžGÂŰ|V»Ý NŞŢŐŕ®w·1hĹďPQq˘—ŃÓ. X]·µBX&w¨l*— é×ţ#~$·V¶©Z ôúFáBmËĐ)ÚCîülß÷™ď& ÖŐŇ·€MăĆ^žfÔó±řvŚ,^ĹÉ6•Zćđ#´břQ<ç“/ĆÎŤQ>źÇ>ÄÚB‹ÝdsR[7˝Vń2 őę““Sˇł~–ý~8o§Ą_Ýś)ˇ¤WťĆąPxPX'“~ýIâÄď®.뮯{Px‚Y•]Ĺ’Č-¨kÔ]ęůҸŚ<ţKÍó†’Y˙@VŢÉg\¤ż^Ą˘AłFan´(hífm©vs[Ť®ŞQEWĹ1Šźg‡®Ĺ¦nS˙l1µUsń§ ¶h{o¨7ŘMwL%';¦Â™ÄŘ‹ĆcEÔe\#S¸4jR‚µQC˛§;ŐCI/$[cJzĂíf\ g‹¶jpć™ţüČa™Wś.ľ®#Ćü/ÂwžP]ßKYŻŐ_”o‰VuÁIR]{ĺĆŤO¬[n cĄ\őŚ“!éç’xl¬›8ď ż… ĺŢY7đJX»ßa¬ß˘ŇPę#ńlÝ˝w‘pŻ )é,y§™ŽY㮸ă]­ü¤.Ł ®ůo?}té›ăĂŤ”ş×¶‡$\:Ři†łym¤0·ĄX¨’“LveUpú“#'"<5 ú¬Ě˘ŽŁ§Hż /Ęş‚ńô˘Ž¶˛Qµ»©|B7üńűÇŢď§Ř/ćŹ]ÁźČŮźµŘĂŤ#%,˛‹-ů™rťŰéĘżŤwpťľG%Ç÷ťśÔĹkUĺúmć ú—¸±¤îŃ!Ď%6yĚ~łáS3 ôjâíH7$©€8íëě‚n$ý4iüż"ř» ţ˘ďڤ‹ĚlPç|u*ŹÍČÖŰ_đ“óŐçQíâd?ŁÓšw;ÔôsÂĆbe!”ćyĘű·ĉşGöł]r„M@8~śŤ´]ÍÍđ3ďÔľBÂĎŘMLĽ>@ă;§›˝,ń7>X7i,Ärź ~ĐŠăodŚŘýNůđF@Nq¬®k.µ'Ý­1CBRÂË ú‰©„q’j—mBÎ`Đ`˝Tt"ňů›¤ ůż›4!îźMHť/dn5!¤ŹšcžnŽĂvwtä7żĽ~gSą±ŇĽť.6Îţ/ĎŁo·Ä€¸ő`Ŕ;ŔuÂůň@§/Ĺ'Ó'Ž]úHwrńŐĐĚójÍZŐ«ć†Öz¨#'?e¦~ ÎÁŘĹÄioŔO¶‰x‡ĎŞň(´6Ş­˘ą°[lô8ÂL„p’$ŰŃy¬óhě8×Ă’ŢŚÎmŰżnýK;Š[˛L"ÇmĽîxÎź±Sfq:Z#˛úí W‹Sľžv‡Hß$4®ľŮM]Ě-sU]ܤşśÂáKÍÇ_m°@jÄO~":<|`j‹>Ä/ü ¸şýł‡#Č,$đĽ0·ţ»Úˇ!Gé†XÝľ«ăřŽńë>Ýé°SDUźÓK¶B ®•”ţdłĘťŚ˙ćsĽ‹N Żć=»¬€Ú´cCËÖ­[¶T¬ÓŻf\Ś\$Á´]†cÔ( ŐŞ‘ôm}wż©á0ůźg8`oń۬—ŐEi7ě(ü¬Â5`rußÚ¨¦Ą_ôd}l:4˝OÖ\Ő˛]Q±J¬du‚ĚirÁ„\’€*lM Žň#Gđ–OqľŻ`áIUžč—Íď€Ę!.c'ńÜPeŤ;ŞąD< íČ#‘^Č2XeÚ¦µP»76)6Ü`¶µ{RG:{ôĆČäŃgSĐöň A<eł-ń:‘*5łšä˙üKx<µ'wĆ=ý_2Eńޞ˛š5[ŰOŁťÝ»F»»;ű:ŚíZĄÎ¨±Q.‚ôľ5şg$=DääeÉ®5ÚŔzđ¨+,Qk\j·ĐňĹűđ<:*ńťî?ž<–RfL™›ŠdŚÂ[hHŮ·µn‡AÓLMíĹőřÔ¤˝c+l'ŞjnŇ4hŰ[St@<â€=„‰ÇŞNĽ"ü˳³‹µ>-«Ą<î,Łn‹BѦ«ßŇTM ÷ă{JţfCíâ+đYǹÿ>}çÂ×0Ąź¬wű¤xëëhŹî=ôĽ‰’­ín…j·>¤ď¦„ż 2g­˛¶ÚE”в«»“öIĽ‡G÷’â,Nt•®Ůc7uGnxĹ]·‹D˙ 7GMžendstream endobj 115 0 obj << /Filter /FlateDecode /Length 3620 >> stream xśµZÝoÇϳЗ})š‡{he^nżw ¸šF $©€˘ý@‘”LC"ň×E˙řţfżŹ>É2šĆîvovfvľg¨şˇçÝ@˙Ňs}ńő÷Ęu·§‹.„ô˛ÓN‹O®ąčń…+ă{a»ă¶űG·żP˝¸Ýű Ţ˝Ä˙o/†î/BIŃ»Îp«z'şűşádoM'”Eµçý híËb hm{Ż›ĎF÷‚7Çó:â§yOp[1hמ Ägúůsb/źž°żľřű…0íťíŚr®çŽ®TvĽí0d=—ťŃęĄĂZ¨~pe Şh˝i Ŕ…p †ĽŽ4čDޱ:˔彷•FZÓ‰ÄEČ\f Ó{„»Y'‚°”’şęŽ·řBâŐ8M ±Ř纬A× ®T…pŕCšŠˇ®‡¤˛˛ăxzĆ  uŇI¦‘Ö8‘ą(™Ë„áěánž d® ™ď}łc}áÉt`ÚŠŢ@+Řą-kĐő0;Îŕ—¶ÁבťČ;Ęöś ¤OŰĐk:‘ąČ™ËŚazş›äR‰™Á¶űf˛t'9°ÁŚdpXÂTYŻqŔ[°ˇt Ż# :‘v4ŚU0hç‰ÁB#­éDd˘$ ‚é-ÂÍ$läe,^ÓÍĘtlT'%YŹŁuÄ*á R”5Čâż^4ŕB‹A^Gt ď¸=ď H^ë†B\ÓĚC†ČĎF„*żFQieRą],ąłŠ‰ř„W2__]úŞň–eş~5髬[ĽZI¬h=BŘ@ń),Ŕ,ąKPĐůwÜĎú˛S@Uoy’w*t!87 i§‚ ľí˝kAŇN!Y› ˇ´S@ěŕ4GÉ;$]±i.ý<ŤU/®÷‚śÉ Ş *[BŢb LëŮR4ďďĺ™±lŔ+eBlóú*Â+JCgEQßýŹí9±G%*möi$.3ńi#bTăÓĆ×ۉK¸)}ăŇ`×ůćJN"Š"«T—6TĎ*5qi’€*†ęŇĆQí:ńhÔüś®X=Úxe2Á’ŞRd̲iq~ 2¤őhT&ŠZ‹ęŃ–CóŠO<·†p‡¶P UítŐq )+Ô OŘřkXÁćÜ„ĄG¸'\Ť ÷dÖ@íG•tŇ\Ep˛.Ü%F´®ov·Çíb)e(ÎÄKjřĽ7ěeČ#ř3qŽáuŔľ3cż^ŕŐ15Ů^Ź'‚‡ő9Ínč0ÉĆŮ.‚XäIöăBPµ­=Űě:ězë؇ċfëĂ~łw‡ýę.ógŘýFm?›m!¦ŘűÝř&ŁŁ–Iëß泊~ą‰ě:Ť,·_o+âÝ~ď8Ňç¸=ţ¸ĐĐęήW§í¦r}Ř·Bnőč%şËż^\ţo-UŢÜž]B-ÇvˇŮę¸[Ť>ŕůú{î;DÔ¸¤7ÔPΑž"ZDbŰ1‹0+wääŐ¤PŹhü~uĽŻö‡ú®)Ô&śâ×1>  ôĘĹ[@,Úgj¦R3ĂgR3Ď vn٦G‡™‰{Ünvë1Š=/ŚáÝńp˝şŢÝA–Qíd†ÝŽ b]íó»a«¨M¤+śéáĺšmŹ«hĎ69ołyŘn<î·ë`e†%X8;\Ź«Ý>˛śŽźŰ-ŽX˛¤`îĘKÁÖw›Ýţ6ź0É:—›Ő¸Jź0xůö\]¨"=rO„»‚ß>ÜĂť,ĆÄ t(žx3G·ˇ"%|ő>Gp0ž÷‡ŃzËRŢ+Ö%bŞőõď˙H [${ł]m^±őőnżˇđeZ!ö ˇcżý*ٵ׉‰“Wěć^”o’$źF«”÷‚żZĐż9FÄç(˝ÁÍÂĽŹ<·§w‡ýi›ńrv\ŤĐ ç°ľŰęeăöţ]†óMĆŻÄ5»>Śă]@$˘lÓ\S!Ź»ń[ĄÉ Áee)ů;qÄ«·KSYT>Ö‡»ÍĽ·ó‰·Fśť¦+(,fB‹¨Ä ůbbžGj”ŢbDB6$ě$€+}1…ę –g4ℯŞzŻ÷˘SM°śÍOSŹ*9ă RN!÷Óe‚*@ĎĄóŞřéÂ˙,‰'Ł˙ß(~92[“XLĚpU7Ă2„\vZ-BŚFf˙@˛Ň‘“ť"±íÝ!\Ý †˝Ż‰ewZĚĐ^˘h2;ÝŮŔsŇĹ·1]H>ˇk­/<ľbAŇČ’|©D#¬3č? Ň ťř‰¦Ą'Sé v,QˇC› jńHP#˘?"b:cěÍť™ůĺąĐ¦F3ÂÍŁž\Tˇ?¦“ ˙@uđâIÍ —ᵸ;ÜîRb¶íŤŃ‘H„¨Í4¤#‘/±‘s‘8ňÍô[Âđ˘rNŔz włěŁ+…T–WOŠG ż˛Ügż ` 7RrFe$ăő™Ę˘LQň=«˛C'Gľx’'zăVdž~vnE~bEF’~§,‰gÉirä#łVü̬•Č ÎĄEt•VBT{Qßř)Łžâ–Ü çě, ;ěő“¶5!†´n|ÚQĂů›¨©FéâË„}»çv3ÂѦď(ňůĐ)°ÓvĚ‹Ps㝪hËţ˝=ҬVűÍ\äqĽ—VČç+Ř«$Q®žíťů´‚‘˘’‚CnúX»çśe Ż FýLí’MŽ„ÔěĐ×rN‘E:ÓSČćľ !ŹâĄٰ©«Oµ_X53€SżXň5űfá$µl‚=‘RŹ(Đ!ʤ)LEŠÓ8E˝”HqŠšęâ˛~‚ËgĆ)ĺiČóÉ8• |:Żý\±źźî„€î% І'„íŇ<öÜ?T/J1“ © \I!¸şAZgcqŻCţűş ĽĐTvYĘ :¦+ 6ŚŞő_ń 4ÁŢŰĆŐІGˇ =ČŮ܆˘ŘëĎ ĘV* s 0‘ú\r#ç´sQ Öh>Ž&5Ú*Ł8L@iĚ2šěÝi<î®ČLvó°_ç• M%J±@ :ěiÜ­ëÎ9şX-®ĘtęÇ…†ÂÍ;vw«ë»mtvŹ™†{)I›€­ŢŘ»ŔĆ\ß «Ňçç{‘/Ş!”‡—ń2>”ŁŻĐě—Ahä©(łĐč/FĐloÝhűXńJ_š%ćť %k”u®Xă ÄBˇvM±ŁÔ®á\Ş]µR»Î9˘2ýőÔD"hä•qÉtXÚ´•ÁS멌5|‘¨ ýTíqV¸šŹ2ë‹scźşżů OĂĆO«áÇô˙] ;GµĎÇŐđł®—¤7=݆ĺ gĆ|™78_¬˙‹§ą ż&îi)ă´{ľ”›ÜđI9+pţąrVÖ~V×Ar®%ěÇm‡ť\V vŮ=ÚŁLdw»üIÚ<ó@4×UŽ_‘ŹÇéWlńµŇäü§qGüô;ËSRúŚTůHôqŤŠŃÇQ Á‡x9í—Ăצ_¦“H“!ćJ^rE¤RreşŤovÇMn´MÓ\‡v[ŰX…ˇnŕý´Íť»hꢌ€§vöęI]ţőáţÝCś«‡E)#‰¸ť[†jů塝ˇĆL梿 łE)-%qu%_×沊ňšľ‹×¤×4ZĆŃ„ę9wÓYdK!"Żó1ű8â™ékŔîÓô5Ő©LţG‘oŇ„IH;™ŇŚ/Mö>΄ÓŐĺ›]š™PÖ‡#Ít“ČŤaĐN©ŘK„Š›ţ8tfa‚ÎĆj"ŹpÎ’87ľw˘”= «uÝőx—9őěđMŇŻľĄşMé!5ţB— pµČ?MdÓBÂ?4UIů•ĄOF#âThHŽţ1Îă™!ɦźˇ˙ ™¨`Úendstream endobj 116 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 105 >> stream xścd`ab`dddsö Ž4±Ä»».ůľśµ›‡ą›‡Ąű­Đ>ÁÝü;@€—1012˛hýčŕű%đ˝lăw†źĚ?kľ—‰Î^Ü˝xIIw•üźlŐĹÝĹE‹şçČó10U ·endstream endobj 117 0 obj << /Filter /FlateDecode /Length 2406 >> stream xśµXKoăFľű/$AČb[3Ă~±»gŁěääM ěÁň’h™ŠŇ´ÇĆÎţ÷Tő‹-Yă¬X 0ÉęęꯪľŞęŹ“<Ł“˙ůżëÝE>Ů^|Ľ öíÄ˙Yď&?\]|ű+ă“™‚“«Ű ·‚NŚÉef˘xžic&W»‹kňÓýf[ÍćĚčĚIŞŻŞőĐă3¬×’”]ř¨ Ň•ífż›Íyžg9ĂGFÚ}·+›ćÉ­Í N6u?tőę~¨6—¸¨°;ô{/a„őđ{Ć4ĽT‚<ĚŠ¬éĘhlń!ŘŠ« këlžÖ<ç” ţKnHÝŹ{äŮl.8ł Ţ?˘|.ąˇ¬ CWíŞŮÍŐO”fF 5ąúůâęÍu؇s¨ÇäŇ˝0F“lUđ‹*ňäĹ%r¸ k Ť“/ńźŔĂÉlĂŐĚŔůÖU ç&CÝTăâdŘ$úžť?¬#ŰúÁÚÁ‹v4oĺ¬S­‹ÇĹsB` `YÂĎ”á"ű׿Ďć’I@“ŹčÎ%€gä ţSZ”,g( ,”oĆźë%™ÓKż–jBť*˘©ÜínFáť’°oúáŐĂĚEŹŚŇYÁňč‹kză5Ŕyć4ÓE!ĄžÍi.Đż$ľńç; ü"SšMß[ &ЎÍÉpWą‡ś˛*űŞ©[|Ăr{ŠĘÇ  >Óđş«wč3|’’ e3.YďŰM=ÔűťEµőöŢ6ż« awŐ3v1.´Ńź3×č”ĘÔLMÝ~U®ę¦Ş>ý­ «z@16… ÝŚ’Ö>R!©ú~Śui*]9Ôí¶Áąc#Iř}íKEľö‘–Éčřr¨¶ű®®ú|śÜî» e=IŽ—3Q:ÉŔşź˝.|]µńac ůCX37wŚR= ,Š áí}»Fß-I5”—căâ»ä ş»Bp“ĹćôÝ’4U»î–â¸/go!9.ep°ö!°ű}|“(:4ű-f p6 1¦ĎM&(U,5žü{vőáâ̇kr…6Ź&71´µÖ©6 żâQ…ő*|őűĺóľ<š§%B!+ĘQ±ő_Źń =¶2Ŕ°tö^Ŕĺ†RĘÉŰ˙ţ#6ĚŃŢäK„‘ÓČQéMŔáEeÁ2ŽY’˘üDy.2•Lŕ4ö–Ž@ę$Č%ăNň=ġđâ;{L?{oÚ ]:COŕMjĽ=ô3łŞűĚí¦áź…}0D|–éYO\’g˛ČE}· /•·"/¤ć•퇣Au7BXú6Ň=äÔh©¨‹-I%dÇź“÷żfšŮ°üGAŞZc˙Ŕ¶ ÎűÝá~°_ ŰP@ ÷ö1ĄMÇU¸ăÔr•ĹE÷đŞĆőXř%ĆŁ'1»9÷DnóPáqgČářÍĘ{~ëĂ ¨ ĂřÍŻÝMĽďÎŃö+Ş“e:V'čŐ6XŻp3Á ŢöMłŹ ?AM°ď-űŻ÷ţ@@˙+Ďm‚¾Ċĺ2fDܬMúppŇUý}R¨ťĄ‘ś! 4ŇĎť3ŮJ>ąşei®nÇzöc˝Í“ <űr%9WHv‘ăU`O(Ź8E¶íjHt_ŞS&üŤSŘ7S±5˘ňĄ*O KȰ„?đpŞ'…ĽŹťĹ¸űÂgµĆÍó„űQŰ “Ý`­zNúCµ;Śâ‹ŁSŚ)źś j¤ 1Ö±sVžňhćńG;ÍQőr, JÝţÓo÷»~‰ľŠĹZ)WĸyĘź§nĘŐsĘ~¨–dęQ[L“ZŘU,đU l ąR}ăýţΉl,őšx ř­(d¦őq}ą&SD6ًƽl=äšCŁß„-Q8i&ŕSąľ[°Łţ˘Ż6zdQ@Ź2ťđĎn~Ů ·€íb,bŕ_– ‹Î<ĹuI|S,†ů´4Q".ÇO*ůMs«ÝůŢ(hqľÔ¸! Îw2BďBgě! 0®żĽIpi†§K|:<Ş“¶©1m¦‰­OM˝[Řlˇ!3@LrĘ˝EJ;“!¨Ó°ďZlĽ#®Ý7î×eSMŁĺ0p?VýâÇďţíýe„öÉŞű%ňé“[ŔíPľ+ëv×ë ľµ[ţ[hÖnĆĐkĘ•ý‚†8¶ÜcY>BىÜßF¬Ü;f™LŔŘśř'¦~Ä^Xlďh/łŘżąŤÜ$Ä€n ˙‹>öe}ˇQ…´ŮV-pÄtŘşz{7j=ß‚O§ĺÖ §TxVŹ4M6™ÚZbâ/sWŮCíÂ4Xď¦ĆË;R8/ÂÉ‚€ ĽăI´®ŕMD`ÚN˙´I=iĄ’ž~iCÝ©ă@,µĺŕ°~(ý$ĘMúé5ðÔvfó톛G…âdoŁÁž~*-ľŢ/ČCß#Ť]ŤęÎdł‰BĚćĎ>ŘĹ|'íu‡7Ą»Z%©çdML=§ĘşŇ]ůIöÉ7nwÉŐ¸;LŔű @;ÄkĆů3Z/Ťóçš0č·€€ŢŘ~*Łg •8Űťźšb —Mŕ,g$úëy•!‚f:7ŚžÉ®ăAĹ6ÔL–ş6őWUWµkěĂ»U‚ÖŕÜo?Ĺ;» ŻňrJÜłvŹ{€RŃŘ»Tĺć‘TŻŰ ¸ę8o;T…îWĐJ@o€··JZ÷×m°|Wu»~TŚ×Ka˙!=]í˘Ś»äczµz_v.¬,te»­ŢAkO Ű•Ł˘3 ýł´Wn±~‡=ÁOJ&#śňóţÄĎďÂâú„|=(aé Ňát^1éáô:ő(XžgZÉ˙–(„Ąd/ěŽ!¬í–68ßŢŢ…ăčťLĄÁ0l´\{?#.I˝ŔpWw›p(CNť4 ·’«Â€ăąîČČ.’ú©lÎr“1MOîo8:ůşëĎZ‹l€Ć¨q˘ć5×€Żă ő˙ŕŤS^ĐŔTMćp\äĚ +|uńOř÷á573endstream endobj 118 0 obj << /Filter /FlateDecode /Length 1846 >> stream xśµXMo7˝ď_če/EW@Í’~Č%@[ čˇI ô`ä ŘŠ«Ŕ˛YIšßÇÝ%9+˲ +­FŹ;äĚpŢ<jĄP­L˙ĆĎËUóËÚëűćSŁŚ4B©ÖJm…Ž­˛J ü¨Ś‹B»v˝h˙io›‹V‘°ŇP«5>˝jßâMWŤÁetűµQí+ü˙ĐČöĽÔÉţĄÁhˇŰUŁ‚’émÖ‘Áµ7ŤV€máN Ľ ŚE-zCÄĆdŔbţn^§Ke…Š­qäąVEc„Să§Î;–íuîŹ<~\®Ú—ç8ľ¸Ľ»ąšťŔKśo˝ĐRëĐż[UÖµg8ŞHń9żj.ş—ËÍf±žť!¶R†îvqß®gQÄHŇtóÍňöş˝żśß,foĎ_5igi7 9đˇ°Q¨ĐoäŻőÝ»ů»ĺÍró-ą˙í±x"řcFW,%Eň!*[LDüĄP9o5Z8Şä˛z-TÉoAŤ– jkŻu÷őXb·r’‹ÂŠZś)5+¤FÍÎ ’ ‚ît}¤ţŃ ;S­¶OOóz_|ľŻíŃâŚéă7D÷ŠpŠX Y%|d Ń09M"X PVÄŔ@ŁśrAHö¦l€ĆĂT;ÝaŃŻŐLé^ĄŚŠn\Š>,¸Ľ°xÖěŮôĎAĆÇ~ĺ¬&äőáMě‰űB’„÷Ľ[Et3éVCmLşUtBąi»Âíb~‘ŽŹŕJ´“ˇaoJĄ60éŤë=÷ćťÎqoĘ{Ajâ-FaÔčmđˇ! H™ BĄâÓÚ™T+Ů2€wwôĽĐ—=_;vź*/Ňéc˛j´¤eű:ňî‹«)•Ś‡ď ´¶CéĚg)rAűî˵h?|ľşşgÎč¶ýgÓŮÍżíŹg›ĺÍbüÔtq‡±TÚv<- ’!ßßfäN¦ ýEëëʧĽ…“)Ü Ť,útŤFSĘ+*-Ń  ŔPꪯ†±D§»=ĺAý|$‡žçÁ‹B„ß{"Ű-î9%¦ ĐÚ…ľKśN:/ĽD›µEµS ~ťŻW;Ő T.tZ5ŕ UŇ‘r0ç´ Şlár°˘ŞíĘNÔ K•TVĹRA9»T,´µOľó:N ę¨ ×ÍI” )äSY¦Ń ¬°f"¨jTŮ0zśfŞ+& —.#yŮ0E0Ľáo d0¶§ë]@Ů0Ť‡© vşă” ŠRŤOqćSŹRź:L >ŃÄž¸- Ädą¤4„H.)bâđ\žvšiłÂöŐctQ˝ˇžĺÄ›rNĂ˝Ůň§łěÍËX“y3Ů)îĆXôlˤY¶  ˇ*â‹GË^9ht 9ž' 8Ő»đýĹŕIYpśtPWŤ9(*śÔ°1Ee““:ćaD&>ć ¨\bĽm%8eŔ“(Aκʀ{u`O†;u vpßO«ŹŁĂś‡Â)%¨Ś €ŠˇđNÉ`ĹK•¤VoĹRA9ĎT,´µKľď#ą0kŔ'ąđp XIn4p®Ř¤g *DX@Ś 3¨a1&Ě B„Ä0ołaq&Ü: Ď„Y~_*<¬‘=ѰôŘúK}§ą8hŢł,"Ę•Éoµ¬Ôµu|„/Ş/›Ťű"€KN¨/@ w"Zć,ő±a‡[:°’`Vf‡ŕ°´P`Yş—‡E™Ëšç`Ö;đ¤:pßÎo¸szBŐ¤\mĘJű}yýy˝@·đ„¸ÄŽ~ťťˇ]cüÖÝ›ľąçßL÷±´ďĺâ>™ťŮîýÝzř"•ÇA‘Ô“v_f(Éčlěëůő"Ct7ż˝GÝ-ţ›ťáBˇł9ÝmÖ‹UŮ‹ďúߏßUâšüÓá¸GĘĹŘ-X¬·3Ý'Vu›Ľ –—STÚuq}Âv´\Ą%ă×Íü¦Ď†B[G}6Ŕ W8čÝí˝@ĚUúĆ»ł¤ňśŐ‰»PHěuó?In'4endstream endobj 119 0 obj << /Filter /FlateDecode /Length 117 >> stream xś-Ë;Â@Đ~Ná2)vöÇşEĘ@s ¶Čý6!raÉňŰÔöś˝v řČ&v¬8kí¸»\źF4e­ţ–ż0-·´‘đ.SÖ­1Íţ,&p°XƢL—Ěţ’‰űqqyŚüąŔendstream endobj 120 0 obj << /Filter /FlateDecode /Length 587 >> stream xśmR=oÔ@íݧ˘Ů Ť^Ľß;%Šh,Q s·9ůŘ$řő̬}$‚Č…wgçÍÇ{ďNÔR‰šżíżŠZŠ»Bĺ¨Ř~»Aś7Ĺ«+ôBYi¬×˘ą)VR+Ť"ZFDŃ Ĺ¸Je-kccôn_f>[cĐYXă.`a,«‡¤Ýă—ĄüÚ\P{mJôÚsw­dTQ4‹ćµkÇ}Ű÷/ËĘ ’µ˛p!éÎp #^—qÁhˇůžÖgŚÚ±íĺîŽĐÚĂŇ-'°é†ĎQ"*XŇH/Ô FoaâU0jo"/faßŰ =|+u l9…kňre‰1Ímß-i˙wŢľS;o×:Â0•U.RSńÔËŤŃA˘HŹŽiöD˙y7 é8w»Ňń´^CŰgXeŚ—ÁQ)%I‚°ćßN÷3±PV–žyÓđç¶–Ć}jÂlÍ @ę, YG«ĺiä„ŐěNoĘhx ÷Çߌőž·}ĎB9JDKJě× Ĺ?sÜĄJÇ4ŽégfŇ L‡ţYĹEżŠKžŕ*l†iŕ”‡KĎŇŞyčƇŽÓĽďňâąkíaN‡9-ě†MŮĄ›ĆÓPřŻËÓbx-m +Ođf~ÜWesKä;-ťvůN­ÄŰ#őX‡Ů4ź8´»OíH‘hŕůşńvuXNÖđşÔŽx!籏łw­rŮćZ?%Ł"âUt˙ɨŔ™pć¨lF© 5FQ9k¤Ă<+¨š÷x×—ôý ü†endstream endobj 121 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 957 >> stream xś=ŇmL[eđçR¸÷©Cć¸6Ě·[łÍ—L]@Qc4٤ĄdF fÉ€Áh`Q¬”R %Ąôˇĺö ş-†ÉË•şŮ”4đEęĆp‰:ŁÍ$f!9ĹK‚—Ĺř|;χó;ůźCˇÄDQ”Ľ@“U”‘™™ľ[ě'[ [ůI$YF’=˙”¤®ě[Ü;÷Ú}LmCŁ®˛ęBą¨"5Ň ôÂRÄ :t›˛SŰ Í ?ÉŞw¨ZJŮI¨ÔŤď ĄFŕÝĂoBÉf‹ÄsşA†]¶×(ĹU†Ťeë 'JłKŮPFŻ^űűÁ˘ëNěôť †„{† ~şĐ[BT$»ôĽł10I˘ŚN١ľ)’ÁţšPę8Ľ}díČú:ČŇŘĺń˙¨ď˙§–Ąžý%dÂ!:ć‚ag6[ͤłËgG›źŹŽ}­Ę>Ҟȵp‹Č–$‘ďĐĄć¸ę‹Ô/— %Rą”Ć®mL(Ćëf:§ľ˙ë䆲ź±-–Miëýu}z^çQůÉ<^¸10s}ţśÚËYő"çˇxţ‚’]w;ÜüÓ1Ć×Í[ZLM¤“3“ó .ŁËŘk$8ë%ȼɆŰfĺ”őz+ÉĂďżcŻŕŽůkÂú{vż•X6ۺ۔b Cě±a‹«Ë?xĽśÇíĺÝ, ˝¶lář3aę*02ăéŠÖöÎ6ŇŚëk'87}ĺł1!&>Ů[ĄěˇóI^[i•¶\źCr°Č=L‡go­ q.ŹŰOĽŘguvq]´8M]íMŧ‹ ~ąt’îúAűFFş»‡”’ą)—L(ŕč8Ě÷epšđ-čó úxC|ődˇéÓre὆h°x¨×»ó[h5Äőö9]¤ű,|‡ÁVßfĺę+ŠšŠ‰– 7Ě"Žir ‰dšź®^—&¤ô‡^9¶+çáÝsCQŘĎI—ŔŢ„„xľ"K·˛Ťm=3Ž 1*â?éţŻ?Ľ^‡ĂÇŰ-­RěďŐ#çBÁ‘áń…“B±&˝1KĎu6’R/Ĺ(Ë8Ž:B†(L† M…çáqŔSi¬éĘ–JˇŰÜŢ8 {Ń0 óĂÍOŢTŞv.{ř=Pµ Üňp<ă·űLg/g ÷ńÂköŃîŮ–éSc&źŃgtř€3ŔßZš#ż;ó Ç•SMp†xWчĚůŮ>Q2¨wV’jRf-?Ł×5žę9Mp ÷¬˙h˛ˇ°ţÂ@endstream endobj 122 0 obj << /Type /XRef /Length 155 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 123 /ID [<0de093c7d09a5b6c2a46c722f2b68420><505c8808e7cfcc645d63213421dc30f3>] >> stream xścb&F~0ů‰ $Ŕ8JŽ8ň?@č ›ő( đ‘ĽoA$sÜ"ą7€HÖlÉg "•fH¦ Rá?śV6Ai#ät“†`•5 ’QD˛Ü«Ś›9lo3dä»VÉ–M‘\F RăJŰž6ç0Řd°«8Ŕ"űŔz§€Íg´o= endstream endobj startxref 96205 %%EOF ordinal/inst/doc/clm_article.pdf0000644000175100001440000137461314660601550016435 0ustar hornikusers%PDF-1.5 %ż÷˘ţ 1 0 obj << /Type /ObjStm /Length 5399 /Filter /FlateDecode /N 97 /First 832 >> stream xśÝ\ksŰ6Öţţţ ~Űîě¸ßvÚě$NÓ¦ąÖIÚ´;ťŽ,ѶIt%ŞI÷×ďsPÖŐQ)Ýľ“Č Hđŕç~PĽP…ˇĐEđ˘0…P(l!Św…+D˘đ…TÁˇ7ŢĐ>ŕĄBs+ ! MŹ…*´ăşş0"p@(Ś€d $ڹ Źçľ°Pѧ“Z’NKY ‰3ťČÂyŔ•ŞđBŁ® ŻÚ™Â;‹Ňă}銠 pfÖńB†"ŔSčšó …>¸4¶Př) •[G@{`¦0`ś,0F(¤7…„ÖxDc5¨Y8ç -hʬ+đTHÉĐ€,5¦˛t/ Č2A ČJShš,BŁĘX^@VUČ*ľd-đײV4µ±1 k‡×14L @6Pŕ¦0 31˘'ŕc‰6‚(eĽ—@ Ë­-, [‰N1©ÂjŚ×˛µxÝŮ<(1 ÇAU ČNrUX@v ôĹf G´u–ȉ‹ô {î°¸m4í°do19˝±0ź`P´ArňôÇ…@[šŻ%ń–'ĆAo(%ąÎh/91ć\rĎeáÁ<ŕ/$5Ú3Î˙`¦xńU%MY şČRâ•Č .řĚѵdiŤřż/ż,Ř“Şé zMěi:+Řłëjr·ß ëIńoHTĽ÷`ŘżŕŃĽ 'Ő \'Ňç˝ËęI=¨ öjV-ÇŰ3elóňŹk­ó~…9ţćůă⛫zÖĚúÓáu®*ą*ÚĽźż©úMń®_›QŐN¸ţÉÔ[&SďšLž—'/¶˝Ť¸<1m„ár;“™P­N|śX—ńÓ‰iă˝|Ýâkrż†ç~TÂ;^»%běÄëN+]§ő|ŇîfʆŕÖVŽmü ÝźKKt.MľďsÝć˛m×ŢOščĺ2)mDĄ:—é}­d~®R]·e~Źç÷LnÇósăó{žăą4ů~[ć~|zŹě`,U‚/lľŻri}®çyPm?iś"ă%|.óxeF7a)[dunś€ýŇ껤[m7™Ô ŃAdP<÷”1ŃcĂ[ §ő¤©&x‡ś•¨FźTaď^ýP¨• ¦„óŕµ(ŃâępZŃSëłjVϧ} @ýýľůćEC‚ K›U::(DžrĘţ‹ŞlöüţڎzO˙ÎťĺálŚF¶ŚŠžr"2>‘mű_˘2뵡˝Éşţ¶^^µUL(‘÷ v—Ýc§ěö=aĎŮ ö’˝b?°;g}6`»`ě’]±!{ËFlĚ&¬f×lĘf¬asö;{3ITŁ®NŕX‚ŁŢ%9`‘,÷ZvŚĎ¤‚ř%=|0U}Â’ZxÚW⣇đć†ý»“KŘf ćÉp6WEň#¦!.iŞń,3ČkmňíˇĎî=hűŰÎłnťg!Ů뀳r¸aZ %·ÓjÄôKěA„†Y˝áâéHgüĽjů‘O,é…WÄ+ ˛®˘â橎gTFŢŮó'3,ˇňŚśPĎGI xŇRĽ‹(Ë!’ g ‘’ţŁw,ôU€Î‹ďPm©t*Ť!Â0 &Bż¨Ř¨X—žY~!(1P]”Xß!*& ŠL‚iiďTŇŹ`Naü/ýk•Ö‡Fh¬FółˇBĚŞ 1[TČ}ö5{Eň-{ČľcŹ˘ByĘžA©|ĎΊĺGöšýÄ~†‚éU¬7Fp3ëMQŰôëQ=Áßń¸5OŐëĎÔ%«ĆŢěŠU“Tü6jş¸˛ř˙wč*ÜE‹ę ÓU5ÖzłĐ[ćP^5ýťŤÎ5»&‹8Ş.št5Ťť+6•ĂzŔ~cżÍ«Ep¸¨›jp>Z\ÄWŰJz;ÖŇ%iÉ”WÚ¬ú͆ďYę˝aÍŐ´ŞXó®†&ť†Ő´š gĐ©ďŘ{öűűO5­WÔ+Mü6őz˘yzJů›Hź5 ›]­% »Săí«]ŤŘW»ž>}őúűď–úşWŹKŞJprw2ŢܸQ˛Úl*Ů<Ď€4ń^JVµnüúoóî’xİÁŰđ‰âhL(¬˘d•¸µeí´ÁO»Ůs‹ČhE“íNbĹ!‹BbüܜسeĘev\g<±0ëlß°íxîáÂm1íjťńv0Ăľ\wx;×±×yB4,Ň >»÷úőłűK˝¦ţ–í{ö7—|R±ÉzzťőäľöťHC'4¶ e'˝ß ń‡ć!ţÚ:%>UŚKXűăąÎ—î§VKfüKfIq†’“>Yîč?PÂĐŔ^“żJ9L_'ľź”ZRéo¶=Ă/„mň@ýkËăŻ˝ŽŁÉő8’\§ł>ÍCĆ=ľ‹y˘‘+EiÜÔÖÂăĐô¶ôěSŚÔí&Ş·Ým1DÉÝź[žÝ&§55+ÖŁÉÖˇ‹M@ř›l Í› ×Es§ě+śÖďíp?űţěěşzћ̶úŰ·»Ĺ(Ř É{J¦%6§źZfçäţŇ?źMAznµÍ!ŘNĺM«A­D[“ŐÍ’sOŽóâm\o°6¸%ÖŽŐ5Ö~8bcbß+pEj űc5>3-ł@˛64_c•6ă>ě˘ßľ¬BCř€ÇDlđÍÓ'Źľţńôű¤žÔÍ7JoňÍfša_gÂÄ” ýMW7ׇřÚn¨|Kmóďçř-÷·.”NYvz¤ú¤Uî)ú@ě1ë‡Íp4@ 2#u;{Ëz ÄćĽ7eçÓ^˙mŐD ťŻ“>^7 zÖ»± mPmAŠC.iI§šnZ…Q5›ío–Ł‘ëŃ|¶5$Yő涆“â­~=­nł'0ô­ŠX2ŇS2ČDŹ5a×uÄNYÝŰ×3ÔZ.%f1_ěŐŮĂöµĽ”o}qŐ4׳2öîÝ»ňͬé5łú˘)ëé%ű{ĚkŢ«§žś:ŤĆň4Vŕ¶Qĺ[ŕM9Ó>%E…ôĄ‡Ź˘´.5Ľ éBéŔ“ʸRóŘ~ˇB'oQözˇŐvv+/u•óÂěőO?cćŃ -Ř[^J‹>™ŹFČÉŔKA‹ÄÎ–Š˛#Ú—śÖŠ}(č~Č-ňě*ĺ©5OEÂFçU“v1%ÉJčĽ"’ňey•!/2ä5†ĽL‚b“ Ĺ$(«Ůűäl·đŮ®u[ČKA.aęV.Ť×Ąńú4ŢĽăÓxóR‘OeňŽOP|‚’—_rz?§Is,ź#«ěĹ­N?Đ….ósc¬~řđţO[ňŨ7i>ŢŐŰL˛ĘŤ L„=Mv›˝\ÄEfŤĺ|ĺ≺ÍĹŰž–ä{gďw%$7c}łš»7ËfŹŚŢ·ŃĚť-eěoKÖż[uíg0jz< AĹ>×4}X×ô ôľú^ď nŹí_>ţîÇď–|ŃgçŁ!Ěăľ ¦Í•'ąKěť`Zöęw˙k#Žĺ{mĽa [·GÖďNmĆ ¸j=HWŰ"ڵŕy3Âx—’/Eě6jťŚáčöT59ůżÂW&/é/ńŐNĘî˝ôaŽÚeüôäěĺŁçkËOÇVŰôV÷ÍŐőÇŰţąť9JMĚíëŤ|C_Ĺ7óZ#_ľ{¬3Zé5]ő lÓ®*&-Őę(ŇPóťK‰ŰBU;ć7ކo¬%ŢNĚ˝}Ń]k‰KşÉ|şgg­*%ő»ŐłS2”´”ćĘ|”µ%E«8Ł{úuGCÍÉŇ„%ä‚…'ěŹ\Ţł‚śpȕ؜đČH !!#˝-Ť§4(^W{şë ż/o 2É Ú¤µlš1›pË»~lňTlޕ̊M.^Ţd”Ľ˝Č%(ËŢśÉ;”>Ý›s]öŰ‹$|âá^´$­()CýQ$Ů“™· g‰¸Ü\eŰ|.BŰŇÁ͇!.­’.nÂČR"X ‡(ŹöÜąmZ@"ÂĄÍÇ[‘óş”ä­'Ú%ä†Ă ň)«řçá&ˇ‰8üÇ9)UéíQŰ& f·†R®äJĂÔi«¶€tk:€·ôžjßČéŮݧĺŮÉő´¦ť®s Ę’<9·´źŘ´EqÔ÷UŞű˘<¨‡OÁÁíA±á›ŠŃ\•BIőńČK˛8Z|SĄ&ćHq.´*™­Ă"ßë÷´  ¬ç×eżGě{ÓfŘU'× Ś„YF#aÂk¨ĺp‹ę%žv!Ť.-/ćŃ …ţżŚ.Ŕb„;ÎĄ3*ľ0ĆĆĂš}Ó[ß)›„ŁE~A™żňíÄ_::ČŁuÖ•Ňw©88Ć(î…č ę:”ŠŽI +N$´Ţ¬ŕ±Zs<´5”:;}ř´|A‡jl‡,3‰1|jíDLÜJOĚB{ÍQÝÓŇď…xΊŹz0 Ől…8 py}uýŻ|ýëpđ•çv`{V‘z1’–í˙‚CÉB !´łR8¸K[XAČ‘¬ °'˝ůCúÜTyQPd M$đ‚)´&𩒇=] Oń2®{ý·.ľŞ/Gă÷Ž9„"˛“ŁíQ’|`Xo(5§‰?ĐŻ§çæ4órđ–] GŐŚ )锓g×WéÄŻgóIőë·˝ůyýë¤j:Új¨%c(ď‚řÇ-$.~ijŞ?߲H o#Q¶ä’FhˇŹ ëýioRN·óŮt0śôF]VřśF,A§CIŮP­ˇĐnIMqęQ µ°ěMyQ×ZP.%Gd o•ó[`î=L†€ĆĐ´>‰ ŃŠxZ´ÔűĆ<ÝFÁ%› ÇĄvž -7Ź˝ĆÜ+:> G#xą aŕøŁFŔ>KŔ”:L:—ukYňŁ ;!ĐĹIđáu K¶ŁKăP bŕŚőÄéP1w šăŃu_OHRăşźÎŇâ T Ć (săB4×=« ~W’Á0wQ7•&žó7`mBáq;fI+EźÇ­pp+:¸D‚Lťë°đ|TüOJ´C›[&xłNxKp í=Ęhë58ć(xŻł¸RÂŰA­ §»‘¦ ÚŃ‚| ŹpĆ—^Ú0ÝâĂMÇłOđžyIg—¦#8Úß+ˇé?›6×fžt!‡×) Q•ľ b@ ®ŽHůvâą(ś0AçÝÁű Ň«ĎČ5§ŻîuT¸1FűşSŘíżŽkNAڔނüe5©¦˝ŃU=UăĂşô0˘Ňa€żá’–pdp%˙l:^–CŃ=÷#É›!·¸uęµAýsčxXÖ.xĂ“Yžqx%}Łć(ßÂ:Őx\ő&4¦đpŮă§cD)­+ńcA”:9¨Kłn¦Číeoj° }CBvÉú r‰_ęAř"“Ą˘‘`ęÜSlĎŕÎů,„áÉjo]“˙yÄłY±AÄ$Nă4 (k­>źvž÷ÇĂI‡Leä­ˇÓî”îwôů¶Ľs€ň+Ć˙úŹćŞžĐ7‹ŞAÄ~ L»0‹‡űďC‡¸ÄĽX‚˛00âĐněˇnמBKřޡJú&ŃŽ–׏˝ö¤hŮ’wI¸C1©¸·±Ô‰5Ĺ;`lC!ÄÓo ké7]ě¶Ąä+é8ÉZ‰rbĘC{Űłůőu=mĘY/­Ő ęţ| ;żĆúŁ-¨Î/éŔ˸w>ŞÎ*ÚĽÄŐEo>jÖ[tLĹCíPľQs8äâ&Ż!ŐűęřK< —Bp©iüpłÇ1˙9ÇÝwăĘ"QFpW´ŔŽčÓ‡ßŘ˝\Ę`‚ęâlŔćŠbÁeśÎ9gۡ”.:´ń;$ćm˛’’”ôíZŽ“ĘĹĄ,úĆËqóňçĂńR¦¤vťE%ź(v€·!蓦wncXNźő:|0{­VVŇRÜ9ÚĘ@ëA1ú%}ôđ“ZéEůěě_Ŕ—(ăůývESzpɡůúS‘móQŁjZöŁŻ¸Ĺ#sÇ•Áŕü ?QޝЇTíISMYNź¶6H4i%ź¶%ňňň\źĽ©çÓIo´˛»âŞŹÚí_Í.ąď2Úz‹@ťç=…6eÔ´vĚżĄčQQЬł'9ť·”‹%3­ˇOĚ’Ůľé#čSZÇÉ}ܒܸ?Ľ¸¨¦Ő„ö•˙;~´ďâ‚–F˛hם8ZţŞR±úYĄř5–ôŐŤ"„Łíź] ńŃőŽ«.}Că@¸}¸ď}şý/ÝĆłendstream endobj 99 0 obj << /Subtype /XML /Type /Metadata /Length 1552 >> stream GPL Ghostscript 10.03.1 ordinal, cumulative link models, proportional odds, scale effects, R 2024-08-19T10:33:44+02:00 2024-08-19T10:33:44+02:00 LaTeX with hyperref Cumulative Link Models for Ordinal Regression with the R Package ordinalRune Haubo B Christensen endstream endobj 100 0 obj << /Type /ObjStm /Length 3604 /Filter /FlateDecode /N 94 /First 883 >> stream xśÍ[[Ź·~ďŻŕc‚ \Ţ/E`Ävę:€íÚ¤IřA–fm!kÉ´…űď{‡‘J+­´Iv‡3âç|çĘCgś0™ /’©áŞt®ščp5ÄZĽZř9s„ËđÄ®548Ľn968áŢŔ?. 8ŞŽ\ađ-®‰p&â†Hîa0n‰Ô ű8"ŤÇ†,4#ŠIYp˘¤… ĘŕëBĺ5öQDóđ(– ¦†hxŕŘÇŹÎ@Ă#p!1 †ç’Łť€ŕ`Ě%%1Ţ`C‹ópŔĹJŤť „ÄŹo9bťĹ'ž8ŻrĹ–âÄ)ě¬qđä@“s@ ś·ŘG/® ń) ĽUŘpĆpqÄ…(jŽ’ÂµŔöŃAjř‹F1Y âŚĘÚ`ËÁśÚ˘Č$ľčsdçá]Ô€ Ţ ‚T8–(®đ+JĐĘpŁPN8‚Aan "Śrd†ôâÜB ü5 ßł Ą ‚Ú ”@ǸŘräOx†J…ZŤ’’رúŘ "śĂ˘J†Ď<Ęyp(.şĹQmC4PĚ*Ś…š­$RęŠĂÁ%¤‘¶ ş‰x© ŠŘC3%GuÖ‘đpĐ"ʍk¤( im¤Q{ÔCŹÂ8ůî;rő|u·ÜC®^,Ö›m°?F&äęŐď@3ÂÝO˙ýÜ‘«ÜmoËnCž<ÉŢýV’«:čýŃ}ď_˙őolJ®)łŔÁňîö–ĽŰM!ó)X|éM÷eě;Ü˝ť®»%ŢóHŔb{Ű‘ďnş›0{‡éł ţ´á™Á¶†«ěźźwOą‘HS©5ŁFË‘‘UŃ!tŔký&ŇbˇÍ#M@ \†6hAO¶mMř©’*!©C“©¨ŇmŞŢ®»˙ěp-hDú “®§ŃĚ"},Ţ#/ďcŰîčď›H·¸ź[𡤧Ť8ń±‡rŐ’r˘<˘(‡™í4˘\HyG-J#p†ż»L‘Óp Ü<©ŮîĺCHKµ”cU¶ą*s•«2Ż…Ĺ –[ ĄdTâyĽÎJV“ «łL ďăłůÎL|ßĘšM>°)Ľ*ŐÎ1ę™łé ‹u…ĹúŠMÓ˛”J96×̛Ȅ/µ4iŻ•™ŐcŃŹÓÔ…¤3Ş­Ŕ›^żÄ<ôýĽpďbż›ÝXÁâu˙^ŹSĂ,” ^ą†UŘ–RśB— #cßô<á›Y˛Éč7zLséĚ•“G«<¸¨¦ôŁ’ä'WÜxJżˇŹ“#ťâz˘ÔíŽN´Ó_śs>’ş%ÚP'F5Qĺ\˘™e݇odňľ§î±|"˛D„yđ(~„l#Ňkhfe÷d6{3’®÷Ć—Č|äôŇŮŽdĄ g©ňf„—:WłdĐg!÷ä“e”'ge^t•Ě­Ł\ʞYˇňĐĘß?—Ő \:NYC_ÍAÚ[U*}2®đűě\ýÚc YYËjĺĎ=§Ćޞabu_fR±•Ł̤ę¨'2Ę˵±°ŕ•$˝˘ś%‹ '÷8ńČV3'Źn:]†v•—Ź {\±9:1‹®@ŞŐ(PÉjÝ!Î-;Y™ý> 0P÷tą\m7X´ŃýLďPxË-Lľ…S4«×Ý|1}¶úý>í5A9Ĺ©óYj{OşÍęn=ë6gřŰ—í߯·Ómv‘B‡+dM§ěq˝š]wŃŐŰ^«Ä; 0ímĽť~čę“(×"J9Höô8ŮLˇ×‘V˛—‡µ`¶Q7RR?$ű©/3÷źYß@Ôô˛Äí±1˛ú|d{Ť8FY¦˘Ú+jĺ(Ď—‡c_SEë\*ŹÍ5ČžĘp¶O3dŚ÷ŐÍEŐ×\}Ť}îŁE5î!54%©4läĄ.ü˘/µĎ(Ä#ŹMM†D˝*2†g)$¤âb IÄ~T®ÓJP&ĆŞU…*ŮÜnJ^·Ş®$Ĺüśf»­¤”¤·Ë˙;+µ¬aťö˘Šcy®8ö,­JĚLQ9^KßF5jDsyČwmnS$ä‰OŠ)ľÔf|±˛ł»”´ęPëý NUľĂ»Ʀ߫öd‹ÝÍf˙îéţ:§¬wt ŔfÇ9•*Ď ̢öÚźÍ 7YbÎőäŢEOK7zŤÄ#ýŐĆ«‹WßĐ)Ýqě ÝQeĹĽÄ?ÖŐ¬8äédľĘ3ŔňČůč{ 㽼2Ń2Ü8í5ŞzꤍGµ«-署‘”ěŘJżdĺÚŃJ Af\éWEôTw˙Us—GF0ß/J<ą çĹß(@,á –Ë!:E(‚‹Ś×›äł~®ˇh–•ĐŇö•‡KŤQÄ9†´+yďŇ"÷Ŕ*݈RŚÖGOGJ{¨řßH/»?›nşŕ®~üőů«g“o^˝ľž.7ś}űlu;‡ľś­ć‹ĺrőËbůtąYěM{ţqş&NôŽŔś­ź·«u8«7(ŕĐéúîý6řô.<9™~ţ_óíGôŤ–ÉŕzŹą™!îĆ+0†éç—ÝâĂÇt Ł˘óúęjňudčÉ`ĽŰé‡ 1Z×ţlç,Ť–áíwý//·ť$:mAăŁ7ÓOÝ>4~ÜNoł§Ë {čőbł(ĺŤđęzŰ}ú'(•±–ˇ’@_­çÝ:RÄ‚“7ĽżI»O™źŐ’Zy›Ŕ2[ő˝˘ĐÇĎ‚+O­ ©„H"-nńâ1?a2ĆAŻËß•!,ťHśhç(ĎŁqAśâś <‰SpUxúď˙‚8,âńÄHśFűÇC“§7qG;=‚8/Ň6Í$śj5éĆ“h"p8>5ńčhjăqÎÔĆ#–±ŤG+m>Kžn"*Ęeë.aáPśc~.śKÜ© ‡„\8¸Ę¨1Ŕ¦V <}ŽĐjňЬá¨ôAhˇ¨áęy¨ßŠj®uʵzC1ë{°Ôúßn<č*í$ęňDď;SP¦Źp@Ţ--§’ă7W‚âPŇ1"ü!ú`Ŕ˘łŐ§Ż5ěgŹ7Ęb@*~ö>3g>ńWx@üČ č’żţq˝Ř€“ŘtK\WC{1ŰĐůď§Ó.Łá;öžtĹuřťř)¤?z­ŁXŢZł‡ů]Ó™˝^§w`ć‡ĹÍMŢÝëoÁŹŢë^q˙‰«¸‹endstream endobj 195 0 obj << /Type /ObjStm /Length 4535 /Filter /FlateDecode /N 97 /First 915 >> stream xśÍ\ksÜ6˛ý~>Ţ­[7PµµU¶?ŰńĘNçV>Ś%Jâz43™%v~ýž΋ŤlIvQ#ľĂFwŁq¤ŚŽULFĎ´ Xć*ZG°VUޱXK&5ŞJ1é=mh&TŘ0¸ÜŃ\'•Ă~*hlx¦ŚˇkP”M·ăç-]X1év)™®čvěhĄč”fZ‰ Ă´Ő(CZ¦]¤‹ÓÁĐĹž™Šę‘éP—ŚĚhüSŞbĆx‚ ™q§”bĆGT¨43Ń @e•NőYĺPp[”ňĚZO§łŹ«T„L<®ŃsF҆d.ŇŁhĹĽ…jĽ…°”6Ě{Úµe!ÓŽ›îň,„ÔE©i#˛)@H$ff$‹˘UZôUÍb„ H&«„ "+§P‘¬t ł[–dmĐ|(Ý™”’šĹ˘‰Ą¦§˛hH—EKâiQžES*ź®Cş (mťE:5ąE¦ €iQ‡Ń@ŤVĹ–E©Ęˇ;ä) [¨ĎŽ’QŁ´ĘŁd‡:čę°–Đ;ÔˇS)¨Ă¨Łr¨Ăá‘°…:) @bKă á–Î’ş Léaö¨Ă,žTBš” úZ‘˘A%¤§”GŢ(REÔám ň"é5©z@ĐÜÄÔHˇt { łIíI~u’˘Âq4)j@ÁXÚBÁÁ¸J—·`+Ň=[$“«Č*Đúv@Ö€:" îţůO&L&Óĺ‚ýR–Š']Ik˝]ËĽVy­óÚäµÍk—×>­uŐ–Łe•×2ŻU^ëĽ6ymóÚĺu.G¶¸~gâh:YÖ µůśxQź6Ł‡ÓŹŔOµŘh9Ú;É!Üńj4Ç ¬­A׋éŐü¤^0zňď?.źĽ^Ž–5#kN=y]/Q¶xőč1oęŹKúŻaóÓ¬¦ŇĎkěnÉŃeąą,7—ĺć˛Ü\–›ËrsYnÎçun—ŰÁçň|.ĎçňĽî‘K¸MąvŻäBţ%rńů9}~NźźÓÇžç·úˇZŽ ?ă9VŘŠz| ¶ D}‡ŁEťn˙ţĺń§?ţßóÇÓËŃDŞďNǧxîÉÉô´™ś'Ň>v3_,Ź.Fs»­űQ˝8™7łĺtžzÜtŐóQľΚ‰×Wď—©nB ¶â·Íéň‚ÚÔÁe;Ej“÷ZČÖ5Ô§µy K8ä×^˝Z:—€®/¤ă5úŠt) yMŇt›ä|+çÓA8Hć“85ę“Čű ÇE×PďšÖNŽ Đ~MÚ˘NW峀ŕ(0ň\IPiť~(÷÷Î,'¤ÇÄŃhö´nÎ/Ę.Ú€´áĹńP‰ďĹcńT<ĎĹ ńRü$^‰cńZĽ#ń^ś“éx:Á˙ËË‘8µH‰3qFŤHÖâ Ę'ÎĹ…¸ř4»¨'˘ÄX\Љ4“ZLĹ˙gbVϛ驋…XÔâşEóQ,Ĺňb^×bů×T\‰?Ĺ_âŁř$ţ×óé? ]˘gůŽ4I<ŹÎPú¤*‹y¤s%lzÄßŰłŹ›q ń(ą2ΗŁËzP±ź-GăćäÁä|\ăń˘Y, ćI“‰‹×Ëúňôęz]]×T=Ëţőv6/ęrŐĘQ›ÎOëy¶ë÷(íČv%’­ęl˝żľűŤYÍSŹŹ(’[ęń&Wă1]ű°ÉřOč5—čĂŤr<Ĺ‹ŇńžŰč» ]ß™ÝófňˇL>ôfŕT8·•‡ŕŽ“Ź.ŕ…`ß8c*ßtŕśá>ĆŰ'ËNG#“˘U®µ&瀊¬’ťöŽ^HCfä6¨/ ¸°í]ËŁîŞ!pR*NA6\"¸BLÉ)*ÖAń Ă×ç,ŻtŕB îóž°I'ąńCćŠÁ$÷±µiÁ ç#2m Ź2~epQaÄ×ó¤‚îľŔiČ"X= ¨oĆHźGv ¸ $IÉ1zůŞŘŚ2Üą5lkĢ÷„ úměč·†ĘÁÝ` Ç(ă51F‡‚µúĘŘ"ěŘhÔuA9ď š±ä~‡šŁZ^áş®kŔY›$Ôó‘ű4¬żpŐ…jĐP%ť DńÄ‚IĎ-1&¶Jîř«‚ðśwR°DO‰'şl2z8Ř0ÔŞľâAúŇă;x"Ž`ÁŇÜ}ǵśňbäŃĂĐÔ)}oŕ(ęěńŤ–Ŕ’¸ř’š“H@řbnż.8t&iç'âëŔő  |B=—i^i[0Í«‰zE Eę×wÝł’‚'sŕĘ€qłď’ü8 ')} Z0ń Ľ¤FŹWÝnďucpkÂ&©ł§Q˛†ńVCQĚaŘŽ%Ńá™î9n™řn‡ĽSŢń6eZňNdĺx,–M‚R¶IDe;0YĘ$Vą˝u‡”zöôůŁwŻËŘ=|w\ź_ŤGó ZްŠ-sܡĄT´FKÉi) ĂŇŻbA9Öń;݇~Uţꉦµ»>w)ĺµkăł±]·çá“»u6ťM×;FšDh™Äu%:ąËŮMţČnđG#⇚ůÉŐĺٸţ¸FŐ\ŤĆkÄP“ą Dm9®Ď–íÖ<Ý0_-Ä-/´Ă}Úe‚ÇD,FU„u‹ĘNgE *ÓˇTB™~*HüšEf0fÚQâGÇOß˝xz_Ś–m]˛ęUe·­ĘR>ŚaťţY>KÇ)p5ôč‰Ę1ŞŃćßu^Nq#×t”3LÇąĄł”N§<Ň*4m=VOĐĐş®ěłę˦-oąJ"m(|2ÖçB }.ŞtŔťş*áÁÎiHßW1Âňĺűęמý¸á{- –t×*dĐ=ŕw, :ÔtżößÇb7" gw­ËFm)Fí­#č]—‹cë.7ívşýúíwą+ţŹř¸éfÝ@×VIg)eěR•zç·őnűŞ|yö;ŰĎ„RNʲ”DüU‘:ŢΠâ4ĚzÖw?@ŢŹÍZ®öl>rÂť`ëˇ=Ľ¶ÜÉAŞÍ:^á¶ŚMGbă·Mâ‡dÁf*ĎŃ®w­—.2ŠGë‰6Çir_ĆV™o[&d¬•Ľ˘™y”¦„Ó<†ŻŚ #ZhrICuÚŢ8%ÇČjĎüš'[ŔQZÜ»đm€Ó:rš{Ös”«żp}.ÎJ813dŞ)…¤]®ł‡ëb‘Ł_ŢýôîxŁ/ęgâĘĽÇ˝ô…ů|&Îőηr{ű÷›.-“¶/걡ď¨ËSĆzďŔŘĘX›ćt­íqÓd»â)¬¶»w«›r ?¤;s )ň¦XĄĄ 2Q0ËţO‡Ťě1vOgi¦qOŘ\†a]ř˛_e_äˇcĹߎ~zřäI7Ç«—]KÔç†zöđÄv—\s‡j§Ún;݆Gl‡-:Í^!Íj౬ŐażÂŻmŢ˝U[×ôrť×»±v[’Ę\]ÁŃÎR,˙SÍÓU.‡ÖAët¬ś#תđ3éÉÚ#$©VŤÖźńfZ˙$EäĎhNăEq't>:ůP/ÓH2o·cÉ "»G‘Ůíč´oră ł˝9@í™ůŘŚO ŰM×óÝR÷áÚ¬óÖ‡Ťâ`Âű`|wôóăźÉ˙úÓĺűéx1`†…—ßk†Ű´š”ű9nťŤ»×2}gű–N÷3#˝˝˝ZdU]g¸é箝n.îZ”CK±ů•Ą–…ěď¦ýÇh6›O?¶¶0šĎ§µęý~4O†Tw&U·'pŕĺ’ő4ŽĆőä¤.4u[H39k&ÍňSb¨ŰC—ÍĆ2©ĎGËf:i»Ł–ä!¸ńTĚG§Í .]4— ÔhÝHč=ť!#ˇs”=Ţ5’’;YÉuŠ{¨©MĺÍŰŁw?>Ýf˝wfŰćuo0ew©ÍCgŰ{8~çVę“R/nłĂÚ¸Ľý\őÜ\‚\¤Vî#™d5Ł÷ßźö^÷^dmęź8·d ×ŕhTŰlŇî,ú ö§Ý]ËßĐěů·â×6słĘŰÔ©«5b¶h®Ë TjĎÔvzż­ň©Ţ-ĺÝÉhîSĄC7¬¸oźľ}ţöŦ©ô ťµ×Ĺos’îż/‹YrěwÉV¶Ů†A­Rn—GDŚłÎ#¦ÝU>}'×,>\BšË—Ëć¤^NgŮ/ÎćÍe˝¦4ŢV‰n†ĘŢŇ–ťtŰ5íwpTnUWß˙öď'oöepö¦Űú”f{đčžĹ±–­Ůđé…ÁÝŧůY7é5Ű^­7,ÜÎĆ­’ýé8ś§·J{úŻť|Ü ŚomőŮ ŠŞ$÷ah0ú.†:rť^8µÜUDZ(®â­Nťţ pÁsąÂ–ć%ű{¦*džh Mĺ)Řb䶲ß8©VÔ·fp4=>Ü›ŕč]”`ßú Šk¸Ę‚­cĹľp…%V6˝wQ¦íY¸żÝ9¶˝\§„N NĆ”!ň¸ÂF/˛`ú&°)XfXśŇ†»űś,Ô ˝®a ”ě+ŕt¬¸ˇ<Ř7.Ň{-˛g¤ă1Ř}łŐ żVŁxE:VŔŃŚir$߸<9ą€+““oÜîëq….ÍiŁ÷ł†z-Ę XúĚ÷ś^ě/NÁ€é[· ĚŻ€EŹĆ i Ć˝łůÉiv!%`‰+•1pú"…t‡C_]9Nßgi›ě†ł•é]U¨ęci«ôe”˛§ŇWQĘžI_D){!} %URö\úJIŮKŻő•=út‹íJˇďŔŘ®”hŇ×HźG˝wľôÝ˝Š§ĎŘŔ8Ť­ ú%rômőe/jíŐ(‰>Úę5ŤäV zę&=‘Éxú‹”\§©ÎW‡Îv˙‚Ž †fâkŘë«éU-clz D*<’ţĘŕŚńܤ÷28/yúěÍMŔ]oŚűLîV éÓé^;čĹřĹƇáîžńěŁć쬞!Ú~¶„‰ł3ü´Ů¤[Ńv÷|NÁD-¬r·T( ĂĹĹĹhvÓßiCÖDq‘«ł†:Qâ˝î¨Ţv˛ŐŞz‘ţecšÍrj“‰Ë«‹Äť¦73š×śD>»hͰf41/ĎŻfđÄ™zfm˛4ń ‰’f×­MˇfčOË ë[z\ JśÓlÂ…µEendstream endobj 293 0 obj << /Type /ObjStm /Length 3835 /Filter /FlateDecode /N 97 /First 914 >> stream xśŐ\msŰ6ţ~żŰą ÷—›^gě¤N{“¤‰í4I;ů Č´­F–|’ÜKî×ßł )‘)Ó¶”äF#“ÉĹłŘĹbw±´Š† ¦˘eŇ;3‚Úž9IíŔĽŐ8F&…Lă˘TŇŕD2©=ý˘´VáD† 81LF%pb™ «H)M—”€µ#eń”úP‘dŕĐÔL;ô 7‡>Ŕ:]Eč’žu¤_$¨‚ÔÁŃUôa„¤«‘Î0~¸g¤ż¤ŚŇzÖŁčý†>ŚGźÚŁéY[ZAB‡%ô€®˘«C$=#uNTЇő4ş}ŘZ: (8čĂ)’G@ÎĐAEĄł4âMś‘fôá<)B@^z˘h¦8şŠ>9bŮiţi˘?ţÓĎ×9QżČŃ\Ç[`#Ő.ގ<ĆâhDy”ĺQµđçwĘźŃuţŚyĆ–¸K>Mɧ)ů4%źV´đvĘ—•uľ¬ş_5lńáŘJ úAlË´ĺ@şRa\©0N•G]My,ăJÁ8ż)€Rův%ępńA|ű’O_ňéK>}ɧ/ůô%źľäÓ·ń)w%LĆTl§v. Ĺ(‘żS«v‹IŞlČAcŃzč6pf—jmJÓUâ­¬Ě}ńěkĘŁmÁow‹ß5đűŮEłŰµ64ÖÚpźµöp0ĎÓăٿ޼yuđôďĎžź &óđč8ż¸fčo2śžŤ&,{3šLćŁŐGŁŮ|ńřwÁŁO(žäóált˝Î’›žđ<Ôn:ąů°H ЬތΗ$gső~)ýů0ŤLxöxpýs>ş¸¬š Jś~— żgőMw>‚ŰźŤsxzRÂMô«ń¦ëpî‰÷ŵŁŃ8Oľűj<_ ®ňîAůe1ʆ“‹qŽG˛çŁů#’@$‚_NůŐopůëÖ'{[ăcC‡ŻŢ˝űů˝>źN¦ńŽ˘€ţoŠ"¬‰NxOYX„0Ő7éjy\}6ŻgőżíOÔďi»ŻížÍÖ¶ďćťëzĺ˛ÖôĘá–š^dŹłź˛Ůqvš˝ÎŮ0NÇÓIv–ĺYţď›Á8»Č.łËĎ×—ů$efłqv•M˛ivť]çłŃô,›eól>Ě/łE¶řĎ4»©ëŞÂĽ/•‘C]QąâŞE0I ×Tµć-ŞÚĄ4=UkómŞŠµ¶RŐéě,ź•ÖK$ű›˛hŕi2?Ş4öoßý—#Č…8¤ĺpo›ÜŚÇtďĎ@H&nHOÁć+|vn1ĘN>˛µ‚Ä.ďk:űl4ůX!N Äľ±)XçXk ÎYîaŇvNVŤśŚn…q0Źxîü·ĂÓZń€ ń>q7Ţüžô~?đ"F#PH«%ĐétĐ –ˇ”SÄiLä–R*^poľ:ąw¶ ť“Ü"@8Ŕ]Äą€ő8÷<‘Ű):żBůđ@i5¦K´2®Sz °ŕń)ÍŁś‚Š<šÝN µ9-LRx×5v< ŚRa…ąk"ć,Tš ż2¸9+őÍpŻîî ą]',{}üËň†áb4ť?}wąX\Ď˙‘eŹŹ^đăG׳éźčžOgŮő`řŢÖ?Áßh2źĽ°nnĺ&6bZZ°ą×´„)#eĚ"§×·ĎAiÓ%”Ö HR2˘íÁKć´ÇdXżúI’’•áϱ4.%«V`´t–-L{ĄĹ˛]ŐjŮ2LU)+´\J*W-P©˛cÇž˛ĎD˘Ő]`)V§”ě+ĎS®ŽwĺÝťľ89}ö˛ô)Ą¸Ł{G+öş{WMŚš{gzşw.ĄjŞŹKyŽÍŹ ˛Ă9[}(ův›s•šKçęeö\ŞYĂu—·¸î’Y­-ţP\÷‡:‡ą§Cü­‘“›Ň}{đôŐé;rĂ‹KÄj9ä8ť´Š™˛ąčĄtĄj‘®Ů®n‘îôődÂ99$Ĺ­/rŔ}>+!}-&ź «§»‚»ć‡”§íÉfóď]?”ާ€Đű‰ ­˙Bl†”˘QŠşn~ †yţ©8ŽóóĹáč˘Ń¨µ>,VçWŁłUcq]śĎ¨%ŞU4?ć‹Ų]Ň,[%˛U’EkTúaőlj®NM<}Mé…eŻ©µ˘ăv3\śŤć×ăÁçl68 cB?żąşĐŞQ]ű+'ý>Łé3ÎQM¤đĽČs8]”´aÄÚ,®'ˇ‹Y|űtę9ť•č p6¦đŻż?}{\öyňůęĂteźł˙v¨rS‹a0ÓŐQ# kz\KkzÜ©K}MŤéJÄn¨íŃď/žľ~Ň´mm)XÚb_S^Ő¦Ľ®yoCÉĄ»{I_ëC%*gVŃ\ąXY6Îçó”GmčŤí\ŁŇ5+K´Ö´Ć®kÍ-˘ě«;â6Ýé•řQ±ÔęFZJ î•éĘ8JÍi+Ä9„ĘTó$8ĄŹ\\őM8öśď+ףcpÍ,© °QvIf^Ů%•H&mIń…˛K*#e+*©0¬ĘÓ˘ĺRUŐ Éô•-*S~ŮR©¨Şj™TPŐĹ/C÷gˇeŽ)GŰ.G9mÁxa¸'AFč±ç.öLě ´)@I*pZXNáő>ŔµäÜŤUÜŠ®Ä¬–‚SaDÎĎiů›G9l*ś[‚óŠSŃß—kp§şÄj—¤úľˇ*1yL5ŠSŐÇWG éZÄR™ăĂÁmšÝÚn&ĽőŽ;ٹǣ J'©Ş”«dŇ€ę4š” ّɥJÖe®’ŠX—)ÇmĆx'&öľFµÝpâ” +wcD­[ö·˘I»nN(ÜŤŮ ŠŔ„l›S=ł/h Či­°‘ąwćKaŰ>ŐŚ¶<¸Xa3!‚‘oDJŰW%4+÷v?ĂÖbŰĄ·đ¦ş đ±09,ĆKR)°’iŰ…° ż÷ťč[Ŕ)Ź%[­ŔY™¬ÔťŔýßZ©Ţ–č~îŽ@wÂěŘ/Z"Ţľ_ttúä÷çËŕW<:śŽĎi”jďc‰n˘Ux´ D{çPŇ^ËúľŽoîëřz`wz™/í»:m:ľ:QX çjuwĺ†Nű8ôÎ6šľ)€źŢĽ{ţöUŐŃ]Ť¦Ą®*\ľé[ ç¤lÉ(ÚfF±‘üťNň¶lŻĂ†ŤŚ/ĽŰôüÚŘoÔÁuIßę˘ŰR˝÷/Úń±sŤ‘‘{uŹ*,ˇc´ţQŇÉŠ»Űę„»+Ŕ \µîśnsjČ©íŚ «Đ >¤bâÁĆÚí4~¸;¶˘f…M)Ä0»ÇvwˇbŤáô6—q– ,™*NŻ>ďyT_Yă4BUý\´1¶p÷j ‘ĂJ,áęSÚ”ąQpwLđ_ś¦ąŞVŕ ÍUÄÓ_ÖGří˛k®z—ŕ0gé56ĺáĘ”?Śz§‰»cSÁ‘ńKl” ×rîîwV·ŃTU¸|NŃË‹vgE˝ ôf=âµĆÔď -LQ­Ą‚áʤWbz…—Ó&Ęž­)‡UÝsPqz°g,ĺQżp&%Üě ś/nű×V B’:m««VÚĄu„;Ťéc"7vď™ĘíŘ$ 0rÇ@{×–ă•dö;-«ŁrK»§î–ćۧ¤â´ľ§-Tn'bÝZ¶,uäΤWĄ%fDWÍ·66yB©Ř&Y[UßLŃÓŮŘOżĹ|76Źn5Ń{DđÁurmáꛤJq ‰…'GKţ}ńk®•Í˝ąĆęرŇ xčX3JT‚ŕłĹ®šqh¤×űy c˙=Ň?5 wdĎď‹K×ő>˝íoĄŕ¦ŰI†Js[b§2J ·Š6ť$&âÇÝ« › €—ţ­Ďw¦Â)5I« ˇ-NúgäO@żH})eą#ooďzÚĂ7kÍŘmÉ=ťźçł|Bďqţ‘ }ĺ“éőŻFa&[«Ědëő˘lŁ 4±6ŞTŮZÍ)ł‚5kIŮZu(k–ˇ˛µŇRÖ¬KekĄ¦¬^ýĘ ¨ő2Yćęđ®FgĚ)V•Ú2gŁÄ”­•ŁÂ¬q¸Ć`Q˝*Z%Ť+Tl)‰ű ť¦:J*ެWWî<•˝ťźŹvD cšR°»"pË:ť˘ćĂ`ÖNüoÚGJendstream endobj 391 0 obj << /Type /ObjStm /Length 3201 /Filter /FlateDecode /N 97 /First 902 >> stream xśÍ[k“7ýľżBwk IWoUĄRĹ#„d°ž@R|0žfĆ…Çlýő{®Ü¶Űc{đŁ(jhu·Z:şşŹs%Ůf#´°Ů cWW˙yLŔ5,®QäqM‚Hs…,Čŕ[§µ o2 $($~b%ëQ°‚rŠ(8awN{a¬#‚0ź:…‰>ˇ„ÉÄŻ˛°:ŕ —1hO­ŤüÄë­CBĆç(ɡw*ýˇ řc`„Žmä;|éCy,Ľöxl´đ#p˛Ź•Ťx€ŠĆŠ@Ť'‚%~QX `Gp‰_E@Î=ż˛"ĺ€.śYó(śŮ”:Ad“s@ź¸N9˘1©ĺčŃ—×"gŹ:žP`i%i‡Ç¤MDKޡÄ(¤CÚgb©˘Yü*J5ÎA>dłápGĆ$~‹> ‹ĎVCĆć"ú€Jq }ń-Ć%e­čĂęT Ů"Ń>¬…´ XîřЬgôĐ7H@ó[ôa&¡o‚ćŁeH’ sč ŁB í;Ř A%řúpÜ*« a€hr ŔŕVĐ>ăúp±|÷ťP÷‡ĂŃt"ţ,ơE§ŘĆěšękž]! Ů•櫩ݶľúr}#ÔĂŃpZ Ń*«+?SĎŞó~÷ÁčúáV|ö śI_ĽčŽńpłÚťj2ş÷މ`„ŹGü†f¨Ô‹ń¨wVMŃzńč±PżVź¦háűďQü|]qSno ÎÖ±ő`śŢ6·Ö™ŁŔ†Zҡ–t¨%jIW_}}­g.ÄőAŐm5¨>M<›v§U±Ra6ÎŹgÜ„—Úš„ŽWkJÚ )ő„´%ÔDMˇ¦C”§Í¶%Ŕäň ;©ĘçęŹ~~ńŰţýôŮłŃpDć^§ş¸tÇů°7:ď/„ú˝?Ľ?śô—÷Ç“éĂKÔBś,0U“޸=ŤKô/€žvëJpůBťÝĽť †ćf~ďźO/y:}ńN«˙ř˙˝YLţ¤Ç" đpęa÷úIŐż¸śß˘;–Á?UO ÔŐż„b`\ű^@gîĹNş”Ňő™äďż÷p©ÜʛٻÇýAe…Ż­¸7ݸäÜa€ ­8 7{ë‘1lpţ¶»Ř*ů]ÝElÝ]PÓ*Ť72Y˱ÇĘÄTył '™ą‡”Pť“.#K¨µt-›¦[1Íh­Ô,Ť¸‹HN&˝vŇ—N 2ó$gGÓÚ1K\ŢĘh «ŕµĚ6lZô˛¤ ÁĘ@Lţá—99ŚAÎbÚWç2ÉLv€đ™mÜqSj|” ů&˛xÉIş µá/I­ŹŠO»H ˇAF» ś~m)!’ńÚD”™%IéëbCr'5ŚqÍ+ňđă±ÝžP^[Y€C’ ¶ PÁ!>"•Ţ2­)ČČëDÚK‹üÜd' ŻŃp”Ź;ęŰ’ů×âquH]eţˇUćo°¬ů@¸wkhŐj¨˝gĚ.v›ód$Ç"ÂdG'”eć…O S;ZKC¬u nň±ĆVĹjuS¬–ë*©"^Bô‹^=śß¸$Ś™Ó-‚PÍĽ÷Z·xrĹBźß%I›ĺ·ącŰ…ÂÝAĎ:żÜőüeMÎÝátoŽfÝ:GٵT nô޶Ť—mćg_ú»‹Ímzł|{űËM_čµúŰÚ?~$›ż^¶±ĆMł[á¦PÝ7˝ŻŞGęőXý¤~VOŐső‹zˇ:ęLýŞ^Ş×ŕ®ÝIŻßźöçŠÓjÜźĽWoŐŰq·W ŞwÓYiĚm—âűjşxŚňěEOőFŃ˙_]uÁ…ĎGh(qÁ¤Ş7Ýz§Ţő?Vę,W]¨‹q‹«Kuůůú˛Şľz=¨&“Bهýa.=Â˙×ęš­żt[JłNŻ«1 €ŻýŃąşÜLÔőáf4­Îß źTŃň¤˙ l|z9®*5ýk¤nÔÍžsŇŤ+ő4ý“ú¬ţWŤG«l=ĎŮzN«l“P^Ä –ţ-şŢX(›Ńő»-±ÉŮďѬŢř˴ݬ;‚'żvÎ:ĎďĘÓx±x†yiúë«0Ľ{±júvÓ"Ěčĺ°Źv+H˘v[ťÁš*C +ŞlšŞ\f–%3¨ätBŤÉŇó™Z]a»µĽvVç(ęŰs´UH;¦TnŰ Ě‰ůⓌ™6şr%‡ś $(C6_—<"(®‚‹Nä.{ë$„cmšAîVn%݆^ ]獼ůť-›xű„ß'Őŕc5í÷ş+vV‡đ;ÂĺZCgźŻŢŽ+­¤ť[ŮqE­1ł™ŕC€Čč9±Ü6µBâÍҤĄá˝:ÇĚ2– 0ĄŁô®•Ä j¤'Kx&Băx[lx_ÖĽ“CŢW6>lÖPŤYĽăMGłiŤď®µĽĆ.Y˝Ádë &[o0ٰNŮck5ö­˝Ýś•ÝଊxÇŞOÂŚGÍÎ*”\2‚GbgŐjľ?8¤ %#›łFK rp›Üę°‚řhÄ>ŕnYýŠ5ď)v__?™Ë6!Ë„Î,˘pâ#2ÉČť˛)I -ďŃQ˛–Ľ‡É®;ĺ Ďk%ox3LźÚ]jrÔŚ(™íüKk"Öđâ4¬P8ŚĺĎ,Ďd’ĆŇľk"®v°®ŢÁwvÄc»›Íne߲żsř;8ŕá;żq;S˛••’-V·fi A·¶sîÜńR=t% ¶cÝ®dá€mcJ$IĂ5d):l#k`2jZ5WLĚž‚Kä7}–Ţń˛Ľ—ÖĂ1E#„ᇠ˙tÂ+Ž«ŃY %·Ú ŢW`ş{¨ënLwMażÄńXżäÚňKŢţŤŢţŔ„ćĐ”űÇYČ$É«ň¶dµeQĹÚĎuą]‹oć¶V#Ąý"1Πä@€yN€ŃÇ›쮛3“mÜšďťÍz›ÝÜe+ľ5[9%3:µ–7Ô A Ľ™Ź)k(ĘÖsHPq—Ë!u$q0 Ą)gĂťä€mfo Ö=ĎŢČx^ŻÜ.9ÉG§ąć«'šíKşŁBďńŘŘGhOKpđ‰O™·nÓzÁŔů(ů§spd‚Ź™ŕ ¦U3׬ÁYKĆ÷7M«1ĐěĽíŔ ó¦`1ç‘÷ĺľ p Č|Z… ę˛Xcfžío[vŇóŻ[ćĐ@Ků&§‰J.vkx™×îO!ŮeoŻOę׹ş‹ŽŽÄŽŽÔ'ŰI/O<áŃ»˛¬4źń‚ô~Ǭ§Ćð@ ş-! |el|FšóиhĄŃv?p§ć ímá„N­˝áhbujúÔeś$ř “ŮşÇdŁŚ|ĆÝfÉÇĂ ¦?pä Ľ#sj#Ç:deě` 5O“äP‰Ü}´=Ü[ŃJFNT2I^ݱHcÚ]×=ťŐ$łăßwZĐąTCć$ŃÁ›µ¶V&ŹŮµ5yóä­Şť'oŹŇĚţ¨Nř©^aYŤG-ü6oą®Ěż^-Š‘“?ÄČw\¶OÍĺ1ĐoĎ?răí¦¤·.ŰĂ„5źű%É1šg™> stream xśĄ[Ks丑ľë/xˇÓËŃĹ!Ţ€÷d·ŢńÎŘëíiĆޤ–hU‰2IµZűë73ČŞ–Űч&Y@"‘ČÇ—™Đ?/›š]6ř/ü}Ľh.ď.ţyÁčëeřďúxůű«‹o?uÉLÍ™’—W/üvéLmŐĄá¬ćĘ^^/~ŞŢ?w‚Ő «žíÔ}Â'¬«nw{aTÝ4¶úľ{|oRU?ěöMÝh­•ŕUßa‚u˘şą=Ś8JÖNÚęăI§…U?„ďNWnşÇö°|ř@äŚV¶áŐíÝp;âLĹ%T•>wýăîďWľp¬ÖŚłË=lĂ1 Ľ}ĽtÓ=ńXM÷·4„`R!Skg-&Ŕ˛W˙XËÉÖJ)ć‡üTýĎN4Ŕ#U{˝dÁ«b7l¬˝›—rŮR˛6ÖÍtúá†ö!¬u¶ę“D ŚŔ~”âH`Ď„­…4—{Ék´ó„>C‚Ăa=ŢZ[ýWűü ťCÓMGB?Čę÷‹ßßÝ"M^M·ŹéëícŕĂ2PĄÚ5Ŕ=đÁkŕSLÔJ‚đŤ«ť¸–B%A–Ym«ë7°­Ş{żCĂW=&ĎÝu:ž´@Ô˝˙őŁhčÓŽ[řĘ úĂŘM¸Dä¨^Ă\PĎţ#>sTŰęa†§”®}l‡Ú#D'ž'uřT‡˝4µl\±Ű÷én@SĆTĘřXü¸bŐŹ … ¬lśrIŚÄŘŻ.ţ†' .ďĆ xů6ţ§ ¶­\Ăj#/ŹŠóĺőpńăI–áj§ąN=7®V–_*mjŁÉTżűeś†özň °LŰ3ĄkˇÄÖŇ6,(€‰b Č Ôj/A]ťSՓߨc\WíÓnŹ Áµ™ĎŃÂŚjđăćĐđ@•­¦ô–kص2ŐMBć9yľNÉd4‰‡Ş4Ý'nĂgéŞűŚ9ݬśŮę­\ü Ĺlωđ´«5haÎZh8ŰhΞěa1ŁeľÇ©…‰ó?&ú! ĎžäĽÍWxg‰[Żüô,ĺâghdÉŇÉ2”Řh;µqéLĆc6ďŽö®$`ŃfĐG_˘ŤdÇńś¨Ä‘„ëxNŮÇü´ž6Ř4QŮ’á&«#ę„Eż›ëD8zKËę0Ö»˝– cf˘f.2lčőK”ü4>;źˇ=¦ĘQ˝ě"•~đŚVÝ1U¬CFń˝=ŇdlNŮ÷đŐEd‡¶ˇ‰ÜJśőőš(A‘ŤółŮiŇ;)°1¸1ąĺSÖ‡¨dk#TĐH:zčGŃĂÔţ1Q%ݏšÔˇ÷ă\#3–n’áă;®1¦ ĽÚŽťöSúËP®é$ĎŤ25¦?ő‡”%ĎŁČ;f«¶˛lpzÚĺÂüU¦h9«c`Č ô ݉R ›¦úő©#úÜýRh'-®ř†Ő‘YĐ˙ÔŞý“Ę2YŘ<ŘŁQ`Ź€SJ{ś'ˇrĚ*ńýĹŐorĄţYqüł ÔÔ‡±÷o0çň÷”čÁ“&Áç„ămmĂcůą_ôX`_‘ ĄgŮyĂ{ 4ç<7€­`Ză2< VÉ3™§O§÷ǸgéII±+ŞLŘĎuŞ?ÓfXS˝Ü''ÚEĆŞyiĐŞá6per!ő~ű mĘŠ@ľňbHMó‹C,oÉŕů¦~5ŤSúB| ”ŐgŔ Ŕ0  Ş&!ňý'5ŢÜÂHÍrfł‘Ęö5,ءż§ 0wČLóеĄM3Cr8wą& Ý˙ťD/q)°Ężd?ĽLýăÂFî}¦îŘ’ĺ…ßŃŃ,'{Â#łĆśŤúž¦]Źiż[L×EÓŤpÖK—€˝Cg˘Ŕ‘«Řş8öj62'Ů*ľ§Đ.ó4ij'zEH>uç˘RAxpl?wÇYŁs€,ĂŮ>řoJlĐeŢŢ[9¦(YPŇéŁÂ퀣ś…Ć®+‰Ö?FD ůŮ9ĚâEd‹ŢŽ„‹|V¸ňĂ´†Ú°1 '«ĂÚmxë“x,ŹwÄO•mGJ¶Bľđ˝)~´ ’– @[N)†_‡ź^g+ň0"Źd ëv DK``~‡0řH‡çŞŐď% †ă™zb&7ÉČ ř·ă8ĎČŻ Őč]-ŕîöꆣ$v­^P<î•’2S—°ołqŚć«„żŁÂ&P&¦5rzjŁżÖĐ*0%DÉ Í/¶óE”»ĄďRSźn¸».Ý ˛‚‰ÇČ=sćAă!Ľźöc^Ç%8Ă©ű&ÝlŤşp¦ä^#Kˇ —ć4"÷sŕžúăfđбB° ő¶| ÁC0Ţ!V4y›„DGę/X&¤ékÜÄضŞ3m8ztÇľ_&ݞydŠ™"Ĺů¦`гΖxŁŘ[âŤtEĽ!.Ŕ_çŤä+QŘ߬|S±NŘG Ř)Ô{ Ë‹,v€AĄŃh–ÁSj¸Yż&1txĆ y’ÁO]{ŽG˘NdZá˛Ü:Ă’±Tl $NľŘîč5 GT°™jőîÄ*¶|·„ýďđ«Ł[ü19äŢoUrĂ/Ć CÝU_†BŤWŐĎŐŇkjEę3śîx»fKŰw5đu)¤­9Ôďşź¦§ń·ß~űňňR˙c„mŤýǩogŤ?×ZßVkhÁp“-ôó®^şĚ˛ŕÉÍBN®Lßx mFHXQߣúî14žC[ŚúóXxľžbĽäcĎ´®ycÁyKرöD˙š9ÜŰÔ†ě ˇ$¤^ŘBͬĄť˛awý[•ç™ÇA7™1µď|Ë9ŻĎDś]ëAs_7#i2ľ´9(Ü4|(]×Ů’„°zćÉ)¦Ś×5â]ą\…űă‘*ȱňöă…#Ń!áśJĆşES7=źpôq=ÚvHSžýÚ{Ą}lŞpHŢ –űFµňÍCG‰ Rjćٰěp)©qŢÓĐLi†× >ËĚ/­ślť‡0Éé”Ŕ6ñqŹA˛$ŐŤĚ‹Zg‚í Z™†e “őx,îĺţÔ Ň\Óŕ˝ĘŔ™Î6xlÓ˘™Füć"łđ}ăaÔÎłÝ‚Ž˝[Í‚Ę8fo ,ťOŚ×ľŹůŰr´ă4d;Éô!$Ë+,%:ěAňÇdţç6Ó×ĂJźµĄłÖŔĂ9cq¤Tئ6Ďn–D ¶ŘÂZ 1wC{sňÄÁţ•đEąaŽ_ز>úĄ±uBvŠĎ üOëd?&úV*Ď ) yM_gĂ6Q©|ׄÖR6ŃÚaéĆÁ @{sÚwC‚3Šp#±™R01éŰŢ‹Üĺ!ŞČś |ľšŤýžŘĚ pť3çłP8€ą?…ň©„ű4»ŃŚz®ýÁ(Č‘ Ł şLÎßűůáCŕwvlsX6&š%Węć«ü;8rÖR˙3=ž:éq ĬËËĺQć°‹GŮ߽ҕ*̰hĎyő>;^_ĄŐú ir ^¤L{âÉCíČBB·uĘŢ ú˘©7 Řűďřy‡4U,ČŁqAĐ›Ŕ95ĄUµôÜByŰĹąÔěHm%ŰͲʧ.]BÂg_ř“v @_jâ×ćÝ—…–ŘĄ™B•¸!ČňŘ)ó;(Ł)Ťŕܧ°ĚbÖÉđzÝÁéJë{ ‚6$č)w÷“-á#2ťë×0ʇ.…šlS€]¨TqŇ\§ćţeč‡`*”—§ű\źü˝Ydüç(q!X†VÚ© {˛aşxů„ń\1>g©ďVWĽkłö>O •Šw,ÖŞ8ß± 1ÖźŔÝP¸ŚĐtäň?&ŽzľvŢ_ćşGĽvDűn‡~v/ăîU öÓ´kĹ3“€ý†ŤůCI%I5SČĚPÚĽró:fłBu‰Tš3ŔUž/m)’±[rBĽ{›î’`0xO^?Ďk˝˛{˝ç¬YĂ]AWŐJ{çAËĺŢ$7…^ÝÁ ˇŁČ¨7Ssp•‘@¶ď‹°Zh($Y$Ăt \ťK†Oä¨8pÎlS3ĽËyô×[ —4ŤĺŐ@I˝żIEź­¤Ëj3I@ĚĆmWŹ“8 ×”Ű•Max âĎŮÄ(D €ö^}«ÚI°¶Bź«vÁŁĘ…! ŕ%ů˙˛|íăŻÔ\É”ń7, GĐń¨Ág„ŰŐĘäN¦=†!ĄxĂ›G =ZŁNIŘeľ(Hx/yC“Ň{Ó?­LGŕ Ei×.‚Lž@ŽGŐřŚĄîł5aĆéţÇ*ÓBË*ëKßY\C¨ôö<„BőByvťz#6Á| §«"”ysÂçqlĂ›Ť5ŮâbˇI¶ŕď[„Ęt™íŇ&‚äYŐ§!éŮmą;Ů€»s˛tw!Ó~»ŰG ůµú1Mž˛gâ_€ëîŤÍ¬ŐLâŐ‚›Y˛„ŕIݤ&ç€v Ó“űwš°+6ǰ/–ŐHăhfŢzö‘Ľ-ÓëĽN˙śŔČ`C+–ż Ó°7Ă+‰cxˇ”‡kĹDȨ¨Hö·¦*‚ZęV…’&©B,Sö[uş" [ădV}Ş¨Ř őm–BUwćd2Ä~2–“‘ů.®ĚŞŽSX-ôMi¨FYíňĽ ĘC׍!Mu˝Íľß‰ m|q¬č -ŔŐ/|cuŁ1D\ęÂiü*{[5†€žJńúV5iĚĽĂá&ŠęśRłV8=!čű X*4l~^×_ź*BD¬í"9@kĚFł˙ÖĄ™5ÖOHąLCM¦LĄţá%Sî-ştč´x ¬jĎjG‰}ăDq6'KeHçä|˝Ôë#ľĽ5˙Hn1ߣ[ľ „Ö’6ŕ—µa8Ę ľ—Ić|Ľ'3Ő2/"^´\Ľšg=éF') ęÝř«p±éGĎ‹ŘýinšD<čP‰ňŽÂU–ĎZţr3âĚŽŽÄRĘNéY…+ë~Ţ'ž›řÇsic:X)2>ý.Őr¦łѱUŐ'ůÉź7n$0Âęůö$]Â(„Ő_ž˛ç"řÓ {Říăß™č2łť†ŤÔŮ-‚5ęĂ‹ďşěß¶))ş?7˛fµ—ęK‚‘­Qw˙éďÓŁ7‹†ů‹¨ŔpşIśµ«‡#ŘůkjˆÉ4dN#•čş`B$Ŕ–żOXëăß' ŠxűEô«¦!sV)ËůŰĹ˙˝>Łţendstream endobj 490 0 obj << /Filter /FlateDecode /Length 5831 >> stream xś­\[sŰHv~×_Ř<čm ”‰Aßµ)Źk3덽嵕MĄĆy€-YĆš=$mGűŰóséş&E‰Ş©)‹dŁŻç|ç;—ĆďçM-Îü/üűquÖśßśý~&čŰóđĎÇŐů/—g?żőľ©Ű¦ç—źÎřqß:ăęV™óËŐY%/.˙mEٞĆMS[§áË«łßŞß.šş1ʉ¦­V÷ÚTé·Ën׿~1˛şľX(ĄęF‹ęU›4ű‚?Čşmuőz}±ľn„m««¤ <‹ĽđÖWËmč©ńŐŹ~÷™?µVUđwů™˙ąü -Čd ˛¦n¬ŕUo÷,ş¶ľi㢿&ýwiŃWĐÝđh¶ŃRŁą´'-j)äĐÓzĂëă%eűŃ-/¸‡ü°J¸ÚB ejo-÷łĺ ×^¶m^ü{ÓS°ÝëÍ÷HŔľęjý‰˙†_â~ń=m+Ś×Şjµć§ńD÷źChďuő‘żoüǾ݆1ĽZ.ÇŃÓu®wq@[}ŕń¬`1‘uătuŇăđwźŹ|T®ú”tČ[aZí}µŮ+ Ő&Śßď6Ů/Ýnu}AýşFÁ(0xŁ UcŞýť^‡F“Îi‚p‹±Wĺ㮺>.IëŞ óľÚ­S‰ë?†`›>%ҳތ'Ń‘ěUÝĘóËWg—˙ú[hĚÇäEşÎ?žMTPgs9’dĆ%ó9ojË‚4˘ňX—©La—6Ńdß­˛~žEq·©¸r)˘ľ|ü¶ú¶Lűh^4ěeúuűż$ČA)6¸Ý­«®®ÓVۢ‚ Ř5 ęF$}ŔÉŘv©dg˛Ëň Ám&—›őŠüÓĺŮßάÍů㎠Ť'ěZ{{][#©«žßä’´ÝőéPöµ22Łz_!2ž8wŮę¬_Ů42éůÁ]¶¦ÖBĺŰńţâś@Űfř‰&GFçŠŕGŞŮ´>Ş%Ô°ň öáAC?łďűč'•ˇEÇB(®iŢ ŇQďYŘ"ţRĆqś‹6…=Ť;ˇĺ€¬Aźr•KTt3Oî6aŤ#(ĂŘçîÂĎ­©¶Y7ĂőHLzKĹťš\î×–a .÷…[Úß&ťtKăYZöąęmş]zČůÂA*´ŃXr 6ßĘj8&ÍxJS0RRŐŇ'Ć›€E`)×đwCäĺšŃĆiÚgŘ1ÄăeŠÓ±ĺMż -@LJqgió=(4LQ SéŇMĵ´ RŐ@P&˛WÓČÂj;A e‹3¬ľĆ¦°¸řaX|yĚ6şĆÚőč"< VëĎ­Őµ1Ўŕ×MJɦŠ4ÔüF’HMö’ľoąţ9<̤Ť¶źóžr’Ń€1€N4'2|çéŇ彿 ůevf= ęfjĂk€Z“đq3]X˛ ­űš™ŻIůi¤ë`yg<o}ĆNRť»ÍôŹŽGZ+aşý:Ű×Vd\"ő ’é"śšŔRM)Ίq Ž´ŕ¦ ä;Ţ+‹nJ[XžEZv<;¶‚T)8)đp Ô…ŔęÄĂŔ_ZągĽ&PslŘřŁ/ ɸĽ‹]ËęKĆ´iݨŕ?năD,b]ÁÜç9MаÓ«  €PÔŕČ8p¦JđÎ4Á_Äą+2’†·˙ĘÍ×Ć#§;ń픀… ¸‡Ľ,ŕÉČÓÂĘL{n•«µŃ¬™Ż3g(s“—Ëî&ˇÇ'`‚ĐČ&řiÔ€ťkUÖŻh}sOÎÔB|Ź˝dëÉ× Äzľo‰µ†?±S–}§Śp­W)T-s·jú¨ÚV»ns‡“ţ-ŕ˙0Š·S D2ŮŘ–ÂG a„Ěô®KZ©0Î1°Ę% C<U‡Ü®óYíú âŤ1 óiĐDŽtÂ-X[ř{bó‘ţQĐ…pŔ6Á9•,á€6µÚOp€Čŕ€H!ŁK@Ż>w˙ě bŽ‚Mۆ_9öůjE€‰+‡ťYŔ°¬›Í:Ő˝Żi„!÷Ř0zPž±ĂÍw° ŕÂŮąŠ– ŘšĎŚ˝ŕ…p®öŔË?LQ˛WŻ· ĘMŁŽ7$1ëŰ|§©Ťăđ b8hŔń$ś;…ă6Ő]tاśd‰ ĂPdb4gĆŢtłLő·a¤ÔYŁL3ű™űfYFK…śrďĽ`!Íd&ë}Ă_…5\Ě„‚6¨Ân1Z‡Ý†¦Ťş]lÄĐ\tő|9q;˛.vű"VŰRXfGŃN´‚6Šôšp¨źĄ\K…t˛uÔPžě5ăžÁ8V?`ŕ·|ÖĐÇ6čGőĂĽü±Âń aK“g±’äÓä™6+ŹÎ9MčP.3ů¶ß¬ Ăq’B>f’ŢKc˘ĘMN7ű´Ţ]ÄŔŔ]'ĽńňČĐËÚëźN4×0¬ÔŇžFFůJĄăťµŽ‚ă஢2Om.}Ż«˙ČígF:őşśRĂĂHBëNńq¤”µw*_ ů8R“â ćŕä‘q¦gJ# µăŽz"\["çĆ;u––ަ,ŹöMâ?‚ÓqÚ/aAŕÖ„¸8ŽB±Ş4ţŤC śňę=XŞ‚Ě˙,ŕĂGž§Ř`iA[žzN…„€¤ů=$ üó[gÎ1’cŚdwˇ†}D=Q ÄS"s˛z·ć˝]”°Ůś0°k)ŕ¦P`ÚÚčÍőw‘Ű÷×?Š1‰–MÇ_L|Ŕý©ŞŃÔČFKg>™&çX'p;>ĂŮmřA‹üěy\YĄĆs7 2óŁ(6„›°Kwq ‰ć5~Gϰ{¤®Ý¨)FŁ­¤6ýŰő§LѢav|*Ô҉RZLÓb,›Űđ„Á/ŻGU?ŇéöËa?¦´ą`Lălů”Ălť¦Ů’¤±ˇŘöŢ—ČK>!Jy¶ŚWŽy6l]m'”'ns ůĂ~µŰ˛˙Al6›0đjb+45; ÖDväl ŕô«ĐN2Ç!Ź =¦Zuć3dÇĺĂg·ëřôÔ2ďśpŔĐȡň@ŘQj÷†‹˛nĎř çKIFrčrl˘˝ľ)oĺ¤}ń\ř'>ˇXަ–Ď ô7 ż¬ćD3¤¨Ž—Nmŕ 0N›ŞIţX~0śĂ4 'ÎfÂvŽhďľdjŤFď5ŰĹ…µ…Ŕ"ďË–etŞv›ołnc4pÉę+žk‹DńsŢ&Ĺ™ô§ő2—č(*„’Ęć=IĆ;¬BÁ/ĹuDI™äWqýă-Q‘–p¦ť§Çi~U7X&ôI«®_v)ZĆłq×JäŹS;Ü—ËiR|RA|„Djä\đĄpćU8ňB~†ńĆ4z7¤ĘPtäĺĺLŇÜËĺz ŕ?2ľÜ+íÁ‡tëű,©ö SÄ Ĺ@‹Vc$m:ĐÝŠžçi·ď}öńw ç…̉y1@=zV««0˘®ü§ž±Pź&7Y©Ä}HuŮçŮČ»0ŹădGĘ]— @;sÍĎŞ ľś@  Xą {u\¶dšÇ@MwŰ8k5DđąÍ‹ÔŽ|îü§ă„}M§)ŰZą!2úćŐ¦z˙şčł(‹u ň ŹË¤›śOqqiz‚·D™˙'ś(Zí]<#rćrŢ,°›PŚ}ÁíęP¶ź+-Ľ¤ńóČw­H břOÝyŠ@§†€ĚśkgápřŽžÔ;ËS‡Řŕu»+$ćCHfsŐĄ”ţŕĺ“P±°°÷yĂOIoh=ç"//<‚`ŐĚ. Ď>E“ŻÁ|źk¸ĆQ‚IťR¤5f$ýsśŃ™ńPüC(÷ŚÎN9yż '§íkčĽţ”îý®_ÓÇĂq(Ĺqľë{Ď5z ią¨$ÍJţVý{č+—čĺ–Ĺ»}ÇżŢLhĄ ć ĺb$eԌŤm»‹i™vGÇN…;썅§ućŽMüŢ·­ä͡~Ź"şŘŇ  ;7łxµŻ–ÁÝmü4®śëÍbEÄĹx?fűż?ÝÇ+—…@Í ú°»W^ŕ,éyqŤ¬J˛Wëí¶Oé őŤ|ökĚęMX Käu`áđ1íµ/˛ę±YEŮGFWŞť=Š&Ądh×Í?ěĄFä&ů§dFp¦J`á#Ř ôNu¨qGä(dÝÉŚHxWűVe#˘lYL)…˝=RĘ–hń<žŮ‡źß¶M:?ëkGÄ{»ć’*µźĐTΑ2®kˇXZ?ńuCµi…1´Ş–·ŞůďáCčµl•7Ĺ­¦P¦­B^8lhz‹APU(ěÇÉĆÂôüX˝g˛mb[AŃ~OŇTŞß Q}®ÚŁ űŘ^„B?UH·D™‡@ë39X§ű14s8] ±€iŕÔ’î'4d‹f¸fT2Řř“Ő ¨†qаŠ6Źîć0NŐ1”6ßÖĘŁt(@?¦-ôť•b± ˇłń­şdQ¦5ůíD[ÔĄĽ4ífÁ aE~Ŕq±ň’ÔúZać'(ćÍrUŇJnĘÓˇŻlÚÚŔBmj§CmřőËeß­B–ÝűS 3Ąóp’ CĄMž"d3WžÉ7OFq<’ôfżA­ÁĹ-úQŻBGz¦áqwz…&ŻfžGWťÝfĎvËif!ZC{—“ß,Hó‡ěSz·’á`čT$±´¦QŃVüúęŐóׯKBit}ě˝/¬oDö’{ş$ŃF# Lŕ¶ L˝í>0XZ9±Ę‹Ľ6yűĺ"¤ĺEféŃ M•tďFűesAĹë ešĂťĄL˛–ô¬"Ď`ćXyI÷&1=o"}YÎL¤gţ'›FźfĐ®ÖŢć;FĚ=ŰÖ†ÄÍŻŐÓ;ř})»¸PÖR·yôŕ×í$ťĂ,Ş@`°˙Št?ŤîĹä>x”ÄEVÁÇóŹ·+Ź·¸Š<…}t›˝ł^EA>Ŕř>Â?7’›"kýt@ÓItăjč€uěÎxűód~{§ä‡;d/3ČÜőYBý1©1=×ć łRŤŤ(Ň|ş˝¦ÖÎä«#{Ą4ĄÉ ‡6šj,y§Oŕm†:wZ¬˝¶ń=+R™2}á›oń§ëŹXš§)°2đćŇÁ8W Ôâ˛{Á3ŐA/Y˙[Ř$9­›ŤL/†ÂČç­¬LT"} •Pé'řm9j şŚdN~ŮŽúxďć(P%‘”ăbe3oŽ©n®oWë«âÖŘH˝ę`3ŐKÝR·yaëëĚ˝^¦ź>”ĂŰhďĂű$Ę ~_Ó a" oź6/ĚČśTěîkgm>ĄÔ ĎĘzĐOěÁnµO„ ‘µŽBP­n7ź¸Űj 8Ź 7óŤž0ÝY$’mŢÜΰ/Lčđ,„äÁ»GĎâc¸°áVX˛đ~˘Đ«Śd†„y¸"ŔR'şąľY°]ÓőhçQV‚?^1ľţü՛»ÝgŘěźJ#-ĹpEzĆl4ËĆú´ˇpÄă]9Ŕ+ô0Ö*+¤.ZBđ‡Ą{J§N6@ÉAÝu3–ľ*T÷ĆiňŘĚÍzŰ-^ţsořşĎZo&©pŢRňÍIWú4pŐFäk!śĐ\˛:ÓXŘ{ë×5•Ěî$ŠńŁo4źÔrNëµ& ˙šď((çµN#á`y·!ę¸[¸Î¬Ć4 ‡¤Ë?ÁJIS~'"ĐP\-ĺ*ʶł™Vdű3Řë/ş¬¦żO/‹F0ĂÄRάđé&¶É[†ÍË=Šp ş¦ű¶č@ 4úŃAAźĹËę×H¸č˙!Ő‘/ÍŁŚĆ v^1M˝ÂQżČA:×Ë˝ił˝Ëkt'€5Ů2đq­9¸eđ§0fŔ´ç›ŕ®Ę\h•®!ˇĹőűkćwcýJ¬5Q† ˝ů¦__Ľ}ţW …ŰŹĄÚáN’…h6rëżX:®]˘pŐ×őrł'ěff ÔK…VLŤ€Ä8—yýó§¤|Ę(ź’ĺ…>-p÷úýűşů^Ę\şł+{ÓŰŔç"łoűýçv7FĽéŧ¸i(ąŇdëbŮv>şĽ…"é!vH¨ Â$ç±CÎ!DŹ.ć ЇĘ7§xÔw)ßŃđ‹lf·(8×n‚ťŔWŻH3‰ľS I}§–‹řćEt…÷ޤANţ>/ŘśQ´ü:„C÷OB2żqM$ľGľˇ¨ĺWapz4ÇU˙»ŰŚ şL–łÉjÇŰţ_rŃáľÇˇčĽĄ]ůűP©÷ëó=uLm­|; ęáĐ)nťO:Ő˝ńř–‹Ž˙ď ©Ovř:śŹ==  ÝÂʇ%}mĹĚoż7óZ(zšĆÉý—vqdy¨¶„?yß]ŢIš¨môżďKŐŕť(Q2ǫ̏ŤlúČv (ÔČĎßcqĐůővhxŁ˝2ŠßUXŠmjÓ°– †”Í+,ßS·Ió$­l•ôý@pĂŮŢܱµĐŃ<Çă¸Đĺôs ‚í¦uJäa’Ĺó*ŰpW5¦T?Çćroę Ĺń—0đ!šě÷d€&đt†wHTËMů ›ÚŮÄXŤ †—ÁÉîď G>Eµ_xEĎôĹcCRűA¨ĐĄŤ‹Ó۬¶s¶-&‹¶É›ć?–ksÖţ‰ 3Ż­=Ăě2ĽçĎÝäµW,‡LPţBązG”ßź‚üF¸ÚťŽŽŔÇ˝ĐĘŇOÓÚSľBĄč’Ŕ*Í=Ŕ hŮÇČߪ¤„D¶DŇńÝfŇ;®g¤Vŕ­›ĐS…÷e±ť*T¨Ňꉠ=Rfă\+ľ°Ýî©6Iš)šT!ďĚkwĹDUଓ®ÝńűKPSBŔžÝ8J?¸§t(÷|“†ˇ$@f±óVŰô§XóB"uĽłiŞçˇ3řú—nĽ­Îř,&Q˛mßÝĆÁqłî}łÁ؉ůĆW$ńaC§ř(żd¶ăÎŚJhě0ĹůmÖ†¸çÔ€a©Śg ŮCĺĘ}€†{áü!š§{…çx@ĘŁűĺ˙ŇÉąťíBĽüÍ[7tK0®/> stream xś}WyXW¶Ż¶éŞY”˘mżjE NÇ}šĽ§â’¨(¨¸Ń˘˛€˛ď˘6«Mźî•]P¤Ô`ąa…{drŽJÇť+†0-97Cǡ«]éĆ30śJQyU:¶Ł&¬Hv͢],¶-Î ˛mQ +%WtC  Wj’Ń‹8˘·FŘĆtyá\5|?˙/ÄaűĂę˙>áoO˙Ž »ťu÷»oűčä¬ŔčŃűâíGZň!^W ™)±ł&ŠÄ+q0+42U€ô×Ö‘oÔ°2{íĆä¸ŕPČžxa'Žb…Éúh†z]m(,„lŢY6äuČ‚U±›4Ý”r4ĆŞqČŘ{d QżóG2ś »?tżs‹Äm«t°8+2+luR¬†đ:ý'9-pZA‚#ĄÍ[Űö×ď‡CĐS]A°ś§gż<ŃKňŻ’ëgčC›đwI#\íňÁTuM®)cc6dEâ>tθiÓ÷ž]-®9ťwîÂźáˇtţŘĹ«‡ŕ:|ďWKŢ2Ż/†JŕMćF-FsŐPšž]P›#,Zޱ¤îcđšČňq#)$G .Çń÷Qó\Ű;c˛HÂ!VY!Ew¸Ţ¤S^Śnˇź\Ť‰jôý-± ^µ!fµx‘é¶WC ”T Růî-˙4ęéÜžÄÖMmŔŁĂÓk8RKÜÁ‹-[±¶iOšUśŕ¶·a_C§çńŽŮÄ…V h>cŔy+ŘPv™›č¬üĺa˛ťú3˙Ć ĺ«?JŤwYzЉo¬Ť6ÄjđŢĂ™tĺ+ŰQuŇ2bBšS›ššk;Dşľ1žÉłbEóăfEËĺ'—+.+±µj8˝v¨–âÝÖŔ­p”?{ÉT}«hvŠY4eš7׿Šęµßö´4'Uź»QĚŘ[ĽďŘ„!ËvĹ—oŇ6G·ĺÎîČ9» üx˙ŕĚ`ßé‹ qó6Ł% řDČKŇ—ŮUĹf(Ż‹ ·•Y:bÂvÚ"—¶KWh ”®(0P’zŔ€qčĄC/Ť0­+‘RâV|!”Âf¬°đ:ě˙'t~đńĆ  •W‚İ?|ŕSř±ă܉7ĘÁ5řÁżŽüá2„aobCč Xxdţ¶ĹŕAtd@’H RŚŕŇżv¬Ý®mJ8WLżť¶ *¶kq9G;™?“ÉëŔˇ©+á‚T×Čę¤;µĎńtVźÔrë×ÄĂůj›ŃI"N¸@ÇÇÇö­Í|'ěýŮĹćzĘůŻ›.ś{á—g]'µ[±QŇť|-2Q6‘áürˇ]+3śPFfż} ç»fîě9Ćş˘ŕ?rÂß>ÝČyű¨ńS¸Đ&šf˛t—3LeŠ<\RČfyífBAŚ1˘a…y‰Ęcń'F=@Áć,í{$e$ZT§$–¸ťEĄ;ÇáĐnű­ńe;ŔŁ ˶ěŔAř‹ű––-g’Xqw ]+ö˘ŹUQŹöřGd•rŇN5Ôd™ő&ť* –ǵÜ)ź—(˘)ł˘5m×ŢćÚÍIU Ö–÷¦1h¦6‚#Ă D^ü„űŃWÎhí¬S`Ń]ń [S;µd˛ęqł’cB’´at/o4‹˝¤ zFX2@šÉ-ßG·­EĹß‚‡ÄE„ÓaĹ]ÇQŢwdMŰ}22ŞĂôś†p2E=t8t#s‡áҢ¨šyč¸=棦rxjp—¸ÓfóĆ’ëhç~“¸¨–ëXěkQ˝źěfĹ€“Šҡ¤Â‘ FźW"(,3.RÄv®W7zÔýčwDŞKě9 čôř:zS‘0©)Ľ—e†gFF%®¦ ]ßÎc-×r¨}[ XaObyxy,€PŞÎŹčiSSeµ¤ ú쥔?Ĺ]j›ë›AEîmŕ?–oŁÄ†F@0ĄŤ¬ˇ¤éu ˝ ĆG© tČ.ŠúąöWĘcŃ^˝mden6nÚ,ć¦&Ďž°¶.˝=˝ÝŘ Gřs€ýîU•vŮ9úőÄżśâS? îăŢ%ÉG“črö˘]™čüë,VHň)Ĺfk'ärěŻJő ůČ·ďK$ŚK±vYĐ îÂ`˛@6Ş„%őŮů–8ONË=ĂB2 Ľ 7$§@®gŞŽ:ZT‚ť¨Ö¦ršH1çš,`‚:^Ţgâ0©ű¦JČÝXT¸©Öł +ŠĘ1C~ânęţĆÇö˝Ąő´{ úvřZ ükŇ–~EÇh#!mËudÁFĂizŮúЇżpÂć7“$ţ\pk%‘úh_ďIdőăˇň@{Ĺî}ÚNĚüd'´ë#’VÇ{®††Ťmú}pšzbś(oÝŢŃŇpö‚5sW¸ŤH—÷ÚÄeN N´şRßýŰx ~‘gŃŃTĄA~FAţ†|1qn@J(Ýϰ˙i-Z؆bÓîŰhO'Ż3–ařOăP;źÖjGá@5™Ç kŽ›,ČÝň|dh’ÍqĆXzů‚qVĹCd. «Rö’»Ô×túľ3,„°â[şĎÉłµg÷¤O9´˙ĆTf)cˇ•»!âů•­iŤ{škظŘh[»äí‰3^Ó¨ś;ˇŹFŘßĹʛԨ˙ůHH/ YÁ`i˝žpÇ6‰ľňÁtgŃĺÉ%ě«%>„µăŔŹ8‰cńč-ť`î{ZPČr+Žz¬8áa„5â€k# D‰JQ©ú0r:»úĚÖĚCd¸(Řéw‡.-Śő$NţÓ?\YÚ”¤]jXM#˘ŢĽ´=šęőy “ć\vř?q:ŽůňěEMĽ€đboŽŻý|}i9‚ű‰Ü kúiOtţüňŐăq­YeÚň’˛Âm…FCA>dń •鍍•Ő;E˛h”z Ěť1Î…S“ŹĂŮ‹Áo©ř°ŰIµd¨wřáĂg>Jń>{őPF°öUć<^€ń•#Ô˙Sě…ʦAPhěŢ·XáĐoćŘżdĎßMž uŹh>ˇ{\Çw]Ďŕ⌌FhŔŞ’źěÍ §ČTŰš§_Ç gĘ=÷‹ň3 ëJ]txčŞÖCRs[Ç 'Łiî=Bó#ĄĽW¨áLÚá„}«N…•ľ_[Y˘/ڬiŁIăČÎSWĐ»† /-™EÔ]złÎîőhŁ19IŚ‹ kY^@ş˙ô±ÄÎżvĹ®(mG5çVr}~{Ö–‚ŁÉ•K!„_–:sâ4âŘ„sEc%ż łz‚G©ÉTW/îŢýůŠKąíTr|ůl­>O; _Ł*ÚDU´k¸˝N0oLÜŃŇ#‹śÍĚ ˛ôÖ–Šô;DyYI°Aěy‡Ţu ęŚ4t)âm{DUş‡¨xé„FÜ•Đ%¨m•GŠĘ˛ 5śpµj ŠŤ 0B2ßÝŹ##ß^ůDTwŠÂ»ň”ű¶o kĆ@¨§Đ c^xÎhŽ z:§âčĎQ#Ę} ęŔ´Ó -uµPěůŠňm[ĎŘZµ(Ô»<9áâ§ě˝6Ń›`EJ—§¤čŠď©w¸ŘÓJą*Ř YäĂîw2ERÝŘĂ8j‚aŕ ´¤ëfý_ź-…9»Ŕc7XJŠ+1]~č^\iŢň­-Đ(§ľĽôŃëŔ öő2đ»®Ëżaŕ´ °ĹqbÚ­I–hşö’yĽířřßÝßd"ö˙w$í33đµRď@—@dŃEŮ5ŠŠuG”4y]@^\¨Ú 4l–ô!śÖű•vÓĺ]z–†üŽšß—Ľ©šó×ĚżŻćäčAuv~Ňz„Śâ”ŞMü2ő1wéŔń»[kŚ9Ő˘łľLö/ĹŕÚ­e¬ä€^}E»…±Žö-–B“ąĐT\\q~‡Ł#Ăü§ňčÎendstream endobj 492 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8931 >> stream xśµzw\W×˙¬ ;cWĆ•Ĺ2kď˝×(j,± (v©JďU`) Ëvé˝.,ĹEě˝—¨1‰Ćš`IbILĚĽĽĎűŢYĐ'>yžßű~~ę'ĚĚÎÜó˝ç|Ď÷{nD”IJ$™­Xiííéŕ5qÂXkg×@?áj?'¬}Łl‰1….bčbRŰolş×Ťé~ą%üŮhéµq÷¦…>›ů~ě·ŘIŔŇŔeAź;,q\ę´2lű*g+—Ő®kvXď\ë¶ÎÝĆc˝ç†Ö~cúŹ•Žűaü„‰˝'Mž2µç´é3š9k6?tŘÜá=FĚÉőĄ¨A”5“L­¦fQC¨5Ôlj(eM ŁÖRĂ©uÔʆI­§FQ¨ŃÔFj5†ÚD-¤ĆR›©EÔ8j ő15žZLM –P©ĄÔ$j5™ú„šB-§¦R+¨iÔJj:µŠšA= <©®”ŐŤň¦şSźS=¨ž”•H±T/JJő¦‚)sJFYP)”ęCőĄúQ锄˘)Žb¨ťTGjŐIÔYÔ‰ÚDp¤L¨P굨¦ĂśEâ!â“a&Ń&ŻLLďJ>‘\¦C™nŚSGQÇívŐ©¤óęÎßwI麡ën–Ýľî>ŁűŤŁ{î9ŁgYOdć`ö {µWŞ´‡ôzď±˝źšŻ6ż(s“5[ °HëcŮWÜ·°ß´~ýMú÷ë?±żu˙GÜ ®€{Ěaą˙z€ÝŔŃwš2(đŕÁ­C¦ą9´óP—aô°űĂŹŤ G¬qcäř‘§FőŐ2şíéÖ´ÉŔo µ8ô6„ŇV‘¦Ř=ZLeń9‰iá*e|vjýQşŃi—Ťšń Ń"Zej 7ůé˵I™IůadnŠ@r ŹMJĐ(!ÁÂs-řpt­öě÷BR(A&čŽi·˙î0ZK75(tf¨Ăuä|Ýś­â«{č ŕęÝ ZKĂC0xÔF¸Ż°ŐŢ{%óÍ^ǦôŤô¸Ír\BŰ*`)ů 2Ő"aAKpHŽVĐlŐŻ7Ď^˝’ecÍá÷ž25Ü"2ĘZ¬Ĺ-n˝ !ä“A)A슾ˇţh›®zous’…Ćb•l'­…˝_­ „NLŚS` ž+ĂRd“¨ŤO‡d ČÖHb ôŐpÜ[+ó(˘Ď@Q\‘7Z 2<ÇG{näMH¬­3P«"_Ř–V…ˇMNËB‹ M±šm¨, *0Ě^ŔşF{K@€vΆ€†®éP˝Á É›Đůg ^šł‡Zähąľ›ůg?+ş~ľdľ÷ćZ;x”Ink®ňÖ2Ú5QńçďÁ÷“°ČâQórÜÝ—.ß<‹9<©%{4iG8ÔCÂŢ~V3m˝Ľ 7Im9„Ă=%[ÓöČQ9ZMł&/Ç-•wăU =?A'ŞlB»›ÄĽ;r“˘^Ă_㮸ç(,Â=±ô×Ѩ#ęúósÄr3ŇĄŕ 6v¶v^›ŔěJ|ű„KP őpşě`Ĺá#%űá ,·/·‡5ŕĚĽŰ(t˙ˇ¸%¨e€Ô@{$:©}Ó`ş!?$XˇŚLPĘńL\‚—ˇŁq™ ‹}ň!Î@»’ÍŘ޶…ôç®Č÷E.řGŢđ I­ö&ů|=Ü$»ÁčŹT™őrdC#ôYÝĄ ÉŐ`APż9 4´Ś5Îľâ}v‹[Ƣi&¤E*@­ćbńŕ3±Uxă^tťDö^B˘ć xX±\Ş\`ňA["GŃt¤) *–ŰdéR»ńřh°ŔVx*žŚí±š†'˘Uhús$GŚĽ­DđzŁă- zł××Q~“9Ű/DRÄŽzMć:Řs×hö"ĹÍ4ĄťĽuÇ»t7Ń"Ó?ŠbťA§„7Ú| ęüës$•Ď荻~<ÝŇÉą¸Á‡‹($(f?Íö:Qu¬ęDß[—&cSa%Ný(ŘË˙ Ŕ'‰ůs¨Xę'‰Ĺň±x%©ě^ĆżIË"?OłČWB0׺N˘Ŕ¦zI2Ýý-šA>8QŇjŃŠă †X‹°(áx y5ţžjßeîá±—(ňĄ¸ej–"kÜMÄó>śÂ$hâĐ´Z>Ľ7`q•ëć`ë5Ă€Ö–Şü>ÚÍ/%—ázŕ‰EVgL…ąB użřŐQzŃŢ&”]Ě—áőŇv”řs´ó„ČJÇ+łÉć0Fá޸çłaąŃp J'ÇKŢ×ÔÝ•‚{¨w d„»ĎV`¬jF4ę|ŁéË»ŤSÖ ĐU <‡.Đtdżf´YŹFëµzqË”EpôĂăŕůG‹ö*+~D?Ërź&ףB?ÉT…Ç(n"Šk/N©Ť…ŠuůXÎč%Ţ(Đ´őâ;|JŢáó%AV”`xÇ°ŻŻ˝~hÎŕ)ľ§´ÚŁĘ~ëRűuŘTţ!6•h÷ĂŘO(*¶LĚŞ•Łq4;âEcó×iPk8•:8 |ď’]şB}v5GMş(zÄ€nę×ěÔüMłź Ö›łuüďü©q±‡˙şX ›¤­ąő}ŕ±± ÝhÖz äÔČ‘ú!ýSć[ ¦G»Ťć¦˘T ;˛ Š.4 ôkó1G¶U¤öĄ:M?°ČlĎQäx4ŕ¨9;µ˘^R8ĺą;*Ű­z{şCúÚ¬Ą9pž©)ox:¤LôĐpI1YŔä@J‘ügcĆ'BT$§JŽIP9W:Â.˛5Ýś—®Ý‘ď](Żö­T~Á°·t ÷ÂöٸĂiît×sB8UŽ:9H •cqY)IIEEśFšÂ˘‡Ô%¤čĂź}AňBÜă!aŕ‡yeZł¸ĹĹ“,ÄÝHÓ™®¤éTÓŹ´ ůr›`6ĆűĽąĆH0›ö\üýńD<Ľű~qݶ9=‚¤đ*< OÂŘMÁ“‘ő­»ĺöĘs÷;e“éyr´€®ONů”ěˇ(î{JˇGłQ¬­6űő:ŮÁ>dß ¨‡ôśß:ÚŇÓŮe)<.ŕ 6ŕÁB§ťâ'QĎô02 ¤YĂ\%ÁÝźFŐެĽy•k“— ho[ňź$qÚ÷6řÓ Yŗѵš¬Ű\™A˛CeIZ§3̇ZĆŁŚ6f ŽÄ'Qäß?ó-Hj´_’Fąľ‚’Gíß@yč$Îűđ3m$«Đ) G č€ÁŁńťůĨE>ŽM;&Gfŕá”ÉbzĘ–% ¦'9ɱ]Đšmh»{T“äx=& 1gV^®â&ŇŐťýŢR\żf1zŘŰŕKĎQµGŻÍú†+"›CâÚsŚ‘•ÓßhŰ#S)ćpľÂŞż!k®‡oÚWMH,3ońb>…B' ŃKS„ÖX§Î €ILHP Ĺé2l‚Ş•9 `Q^…¤9b‘Ęś’<5D\deŽ‚‘,5BźäÉŚäLdŽîČ2J \K>)úž Ô2±A&:>Č`Ö€L–#“ź ±l❍ÝKU0śIęÖŇĎ!r‡Ľu+=~ÓÚő;H KŔő<Ă9™˝»ĽÖ»Ř[Î. Üa'gÁň¦Uó/·n|•Ĺ%Ą“ľ—áWÓ ąp…kë˝$P‘!Ď *l±·¬5†HB „qB¨µj](xă#'ŕ ŮTť­d@E=“H«<Á«-Đ:ČOĚŚLQfy¦…LĹń˛1¨8>›|1ůíł•q„Őéă­ĘvGfřwYJ„6V@D“š’ű3Ş•ý‚ë’Â%‹Đ (uDßĘ ŹrjJDé (˙ŃQťYőmätý)žH>¸YzÖo-˝ĆO©pK8”¡­44B˝kÝöúMů[€™ąxë2Ďâ°ňĘÂâňěř=Ű’ä5DzŞ9vnű$ą ˝Qő±j…çüť~ŔŽałžů]ąvx˙‘"Ž]ŕ”\áp¤oÉĄÜoĺxö )›4fáNŰÍŽ5ÇĎ46ˇ™©BqÇ‹ďĄ_KIkJö<ĂŃSZŠ,ÓÓOťřVĐ»ľ*wđ!:Ív’,$’75b <::6_Ă'ečć˙±ŇAĐ2\’“ QžŰ‰ZîŤv…Ű]X¬±a‚Á,›O2gU|Y2»ÚB5U¸˛”íŢ·ďXYąˇ¶!ď ş}=Őľŕ ë5‘IdŮ쀒ÄôČđ>dá‘ńĘ•sesŽ„aŞäĺe'1lŮiJ[“|„´¸Ię#V/°T¶Ő ·ZoYł:1Č›Ę5†¤rřQ%#ßź¨ŤËÉ뺪=—ľřz¸,]‘N˛.&f—ŹšaU¤gRÚ ¨WďN´xË*—Ńri$íwYŇív¤]»Ť|%sí·††sčÝ&ÝŚÔŇúTO×^Î hÜô%XĽŐhIRpI´ň˛ ňpvł†u±×2˙:"×´PČ GŠ )+żţě™ô28µľeÎĺŽZkp$ Ú”@ĚOjoɨ–äă§ü7FáˇATú"’~vB›hÚMď…Üą= ;Bĺ:űn‡ąí;ĚŢúgV(i—SşÂű ăí fE÷‰ů+ÔůaÄÖE«㣆aµ ‹‘.!31™T^yý%ĺî@ŁZE2żŐëĽ/ övŐ¨K¦PT†·E5 ĺU˘čoĹoÄčkx®Ä@Š˝[/ʰ'.F§"‘Xŕąď¤Šö­CŮŐQ‹: z}©óµI4RţW‡”Č’żY MOÎBę–®˛¤Ö›’·…V§ýÜha>:ˇ3‘žďE|ßQĚEVd§cp§ ;ĚÓI‚ |—Ś,#éĺÄB(‡o©>•HőÔ_ŠęP˘P$\ÝÚ5F‰o‘F¶5Iţč”g č ÉjˇYh‹®™łÎ|ŮŰ^É˙Jłůď%4ö ˝jíËm„O‰Ą}>I®Ú[­—/#E…¤& ‰Š0†­ßâihß—$wą˙>ßŐ9h€:ÍĹŞC%†}{NC 4î2Řf…‘U…ľg űUň3+‰¤hë?U¸ŁŔ߯`«ŹĽuŤ_óů1Ů꤂÷GU’<(Vç©KUIjaZ‹ţîtJ|’:YÉŹi}&ËJR§“ iErţ]G^qďĚł-0:ŕkí«‰ŹITĆ&r;†L„hŘN»ę<ŹÂ5¨ePµD§…’6ĎHÝ1ă‡˙öůmń Ý!q‘|˛âhI*y_żW™¸ďvy–·ĚĐ 2ŃĹ=‘"{<šřĹOđ<OÁŽDÝŤĂĐbô Ť&#[nH®âţÓÇŹĆ}ľGą( űĽé;4xΖ?±}ú‚¦ÜO׉ɵ'߉QKKwiťËžőO[?ĂôŹođíżq_!‰wD ýýŃŁµy—ÇE%„F‚\Q•W\Ć˝ó?űĘŃYÍ+x¨}…Öľ2go1á•Ňç#ľÇý9üúŻď_44—F]őíKůŢ[TćdŽuĂ*móGÍ4n¦رYź?Tš_Š 4ŞÔ MţŠĽě+s–VđˇüiATőö`;ĄŁÇbĹm`ßq‹d§sÖÉ#w…şÁđČq6[…ąŰłđĹ:Ô uúőÄťš+ąő•k`!5{KrO2@5ŃWĄĹőŢ Ş"`ž^ż~».ĽÎŻT^»·6Ąđ¶ą ´jEBĽ˘°ś¨ü̢´R/”|Ôî»übŁĽť€™/K+’ŞóôröŞ";˝´rßď`x€uhí,µY´iä°Ĺ'NŢWwPË]1Ô¤fTqycrÇ?%ˇ|¤řĄYśDżHan8pnŕY÷ă«Ůčaďč“’”(·)Ć&·…1( řö ÇúSĎPż©8]އŕkŇť!î äůŘĂyU%{ęOëÖdÉßÍ-Úć­żő7ŁÁé`gîʨŃĎ’·s¶fZđ/‡˙j4řßôT®ťŇˇ“m $[‹Z|ľ—¦BV¤bâz‹v„úÁf=ń4ň®,ôęć=늞•Ýąwź°ä>ÎáĎŢËiÖëç·YťŠh:ź(šťű\Á–Â'ŕÔŕ̰'\Î(w÷˝SpŻRŽůÉŇĹţłđŽtĎl ”B¶N›©©‚b`!“<”Ŕ'’^l+lŹF$zmöŕ÷Y„źőxËRęĺĽfĎáFźf( ?ëŢĹßA[5‰{Ő¬l˙ł´" Üsg°·źO©ďî˝Ĺ•z®mogýŘ€ć.ЬJŃŮ«ź]E+®Šů´J /—Ý›^Ś{d+ó¶ź&.űĆéKwĐlža›Ę%)A™ŐnłŃ6ŁQŤS«Łâ¸ÖžUŽ “A‹§O8ăÔ‚;>ň¬„Q7Â*âvÇUş”řfşłhÓÂé^óRŽ­çÖśV]Uת3cAőÖmo5şí´$MV MŢsʰóŞk3éeď>Gäm„GdJţ÷Ľż§''~_F ůąl’ň Ź ąť!¤ÍÚ6fęňřČńĺň’‹sˇ‚)-öö öÝpÖűÜW—Ż>ćŘ^-L>ń+˙UAh˝AT«GéÍ(]/n±ä7JC„ů’„çbąhjŢ4 ˇ2K@ É”ť1sň4hĂäď+h yâD‚Ü˝‚Ş ›ť[śĄ© ‰ü<Ď-O}'›>÷ŞćőµŻ®Ő“čšřt˛ń.Χ0‹–ČÔšřT˘“o^ĚLżr˘QS"Čg/U$xŐżR!Čç"u¦"!8"Ѝţ¸›Ś ŮšוH‹:Ľ««WôŐ3·6®…P‹°„Î(‰« J]E$qKL żl8Ň6ŮüĘđ®iwRáÎďš6~IăAŁfŹŮŠ;é‘5Ç÷ü7ŽŁ+Ť"“·"úŃS$)ŕ´Ĺűt‹Ţ‡Ś˝ZÚn€>XęKŰ´ďÂ챉ŤGę –iÄe·l·x˝›@ű–˛ö¤şÄ—hąX•2Q‰—·ÉđZ^ŁĚ5úěŞs 7ˇ '¬đř§‚®uF»ZßČŇBRT9Pš””\äĎ?ĺÖUT}.řl±ĄÍ?Ś đXËéż%Ŕ0çď,łlß;'ůö?<'9öa2ü ÓD|‘RńĎ ~†ZYásvăĄ)ĎDµ'˝%ˇ¦.vPŞb RŁZex ©NNL%>}÷y(7"µD@Ş›đ8;ă”@¶«îc–·Z⩼B­%2LűÁ‡O}ÉńŮ.hkk‹LŁŤÎ\Ф%ç ™|Š ÍjMm»hŃv•ag µüýÂs2ëÁâ/ D˙(ŕîüěŰgŢ÷Ąó˙<Şź˙Ż&Ať(aTOýÍ,5Uŕ±|«´,¨ÔÇ#Ô/ĐŻ$ ÂP¨/ĺĐâŢąöŢb›k…!.z Hţž1ęí¶üÓŘ,&\ť¨&)—¨N„Ai#S ŰúâáţË»kŁŠ9ÇDĄ7„3nĺ‘EĄĄů»/¬k´‡;oÄ"Kţ,ňÄZ$ţcŰoŁIôá´HG9.ýSU+ ĎB6ŻEh™NŚě’¤Wýśv„úřúřÔćĺ¦ffqš9Ţ«ě¶*•j5$0q) )Ůß|č?…•`4†ĺJ‚zö^P˙ ]•  NJĐX¸ç:ndaŃÚÁň·\×?Ý3uăçK±›Fʧ_ţ’c·g@TĆÄ$„G/„¦ď*P –iĄ …¬Î‹˛PˇUĂt®ˇ‰‚DDź t·t©®5!n'“ע‡ŻĹhÝ)i•™——żż—W™UUYYŐ?9¦ ´:ŘĚhĚŮÇ˙ +Sń㤅ˇ…ˇ» e‡»ŕ±ˇh ę–‘–žŮ‚ zł+Xt–7óV-^Ҭ EDBt´ŠĂ?ücA|$Ä“ěQdÄdĺ&gfj9ôĂ›)¤S“‹äÇş™NT߄қļ=ş%…»ńww|ąí§™ů` |Çą/Žź ła~ňĆyfÝ >§áë’?V_Oąß03˛Ą„µ—(–ďcíi Űaµ>ô'ĹExŕ*\K?]„:•ˇ‡=p-´hDćZ+„YI’:ĂŐ`ňůRĚOďmp§'Ş˛ęäüyş 4ÜĘĺ“Á]Ó“÷ś,gZó-DMäÜóđě'ż3ŽKßě2îä›pń›pa'˙(l/Ü~v-ţígŮńßž˙ŹÍŮ7Ľ Z@ürĽgś]ô®¸Ře¤s2x©äő+4qOĂK $™xwæ–ă'­=Ú‚šě†ňĐň±‰ VqĄźž®;ĚăłfĘŮOaö¦9ëVâuŘM¦Ě´?ĂÓĐĘ›ACJQ§ź/ëEhÜÄ1ż ͓½w—Ü«8ŔvoňŮŃĂćYÍsÓ…TŠuUÇ·Â.ÎpěZN-0 g'F%®ńµ“{nŮ©ňSÇŞýă V§†hF‘ÜAÉ˝ş%#qżĹ^vöó .ě×Ät°Ź©ő)öňwʰ›đtˇnŹ˙¡F} | ÁúÔMá,w¦Ô0śßBM ŹQ ç řbëNST4E0h–\ QNÉÚ§ŚĄÝ~G/2H±J‚T|GSc¬¨ĂóŃMh“™7}üÜ»2H§ 6;ţ"¨yÚ $m6g{ő o“˘Î3_bj‹}řWm Y¦DYĽ'®ş/ę~ăqNŞ*%NÎv¤€(ľxUpĚćŕĄÄt ś`[ÚÖ’Xm‚p€Ăî ±ár|Ś…ŘÜ4Ť65™ËĘŻ;ý-śý¶ôĐ|ÍvRn;ŔĘßÁ»‹ď6Ň+­O…]`ŘůóŐZ­:«ďž}YYŢ-bGÜ69["›z}2AĚ/?!–`äÁ? t·B‡ćĆsäJ/ú˛KyĹą™©Däj4Id) ‰HpŹ[¸bĄ<*Šě»ĘČ~YM_ŁNZßűó3#’ü Ň¦ÇűőfŤŹĺ#ďGćl+É{)b'ý„ĹK\6n ćĘhâ%zÔž(kTîÔq»śŔÖŁl—.wFýE»Ł3p/ÜK±/.F̢§rö ˙ř’É'&Ia l ső´ÚFdď đĽ¨Ě =wˇąSýňQţaXiŕ ]`#lę’ôű‡·«I®,"iÚ"“â î‰9 EŚźÄ ;«Íϸ’“ť–zr w’`lŤ×Ôµ0‚řËŇßéŹMżs‹źj˝}‹ŐÜă®lŰî„˝PŔ\ú´ńć­«r%­R©ĺü 3§.ĽÜtľúę#ę>·2ä'¬j?ţWč^–€î«’’Ú§‡tf‡n7śCťÎˇ]„ÖW=hYö–×Ő áńÜ®M۶®&÷ä)GĺFJGâ5°ČnmřŞŤrŻŁVUË™˝hŰŇ?ýőŐGrImź8ă8EΦŘBăi¸óĘŃsžřöíĺýÇĘäf݉ÝMŕ4m|ŰX€Ă%™hXSe-ü)¸Żf;qérkë…[ťöáŘ óátăm4-ü!8ĂC«bť„ľx‘âWˇ˛“ Z&I5ĹayÁ a»4Á: ˛r ę„ŕ—Ť{Sűä~é=ţ‰tĆÎQ“9Ö\ŰŔăJhˇą)©«8ľ/§†8¤=; l–ˇ˛Ý“Wlëó¶A#ďöÍwűk“ĆwL>Ը߉šżý±¶µł´*ńK›·%ś˘M.-)K“žF\ÔÜĺ–q±ďw#ďPÝu?Y÷0جćşÝuTD„ĺ ~;Ú)…ç6ź9W~†YHö2Ěä9çŮ+Üyô@,•ł`öţĄ§ťWbJ]ő9ęTYŃ( üôőc3´DJĚCSÖÍĄ1ţÜŮ>Ш9[qh÷É㵤ýB Ă™sx±ÜŔĘk›×¶-ˇŰ‰Ř™ć]†Ö˘˛úmšÂ1Ńt¬Ő!¬ŇęľÓ™ť˝|I˙«ÍşŚ¬őćěÉS-ËÚeCt|\ś’Ű´d©ĎřVęם )Ę#mxޢé¸#îúŬŻnťkF&ąp$č¤üS—ăńµđ5ś0¤&'©e­6˙51†XvAmdĆdfj’łŇ9^ۢLÍĐh!Ő˘©•d˝ú»E˙ô2®u?BŠ© 7/ËAłĐěOsJNť°ÄńV­Ăß»Á.˙ăfűěÔ€ 7‰ŇDů:łĆ¦}WRôżéŃÖ‹S-îĆ“ŠQ*Lo; :¬ń#1ŞUňuŁl—ŘŻŹĚ#޲ż˘O_üükB7‡Ă›­´\7Đ!uaÍ$nÂ(Űmľ>`c1ĺŢŠ.ŘSÇ]·ş~”„|ĺść!aCŐśĺn¶`N¸ď;|j˙燿©żVRӜĴv@«Ąě},›5Ĺß×ç®ę<űű«k.Â@ŕĘZłIŻŚófFŔłÓßî­=}R®Űšçy`e‘wí†:¦-8d±ŤŰ/:Ű2V ż”‡@×ú“$"‚‹ OÎ˙ É+‚b9^oBîíâZěj»—+ç’ä ÷ÚrźźŇ&čWüÚ›Đ%ą×Č&XôE[ź\ÇŻ•–‡U¸GD+•ś:Qđ) $ć&W§}qĺ˛<[ {-“źŻ1w˛*ł=PSXQ.ôÉ˙ÍĎÚţ†vąűâĽÝÇqRĐ‚&¬÷Dfîh  ±€ěC PwÔ3§ý= ZeôÄ%]Ím̰8ęąY¸ëlzwřI&0©ÉÚ4§Ű3ąü„Ž<ŢňřsR&OJ^o~mýdG“9;–â'óźIĎ;ÝĆ#1µrÉ'ŰoţÎŇRŕ9}1ś:ź×Hč[Kn·WŔęđĐĐĐe ÇĂ*Ć–Čevdr54 łg7kĘ6f~EqImc< 5÷năŹpQ8‰·iĄpGş®C¦V¨űÔOŁQ&$(UX*>âž çy.xîÍ"ŰvP™śšůčsÄ^ŕN ŮH ÷ßE öÉťČhÔČ?qˡ÷ěçvŐ Ř6ăia4žk;'[;í ĺjŠ73w$ô˙ŃÔýţjé+ÝžCşf‡Ć3¸·`é—ßŐ_(«‰÷®Lč’·±ĄčDHK|5Ŕ–îŇÚ{×®¶sNçĽęÖ¦ř330őo×éňoKhÁ‡ˇ›Ź9ôáĂU% W Ă8e’_EŚ*b ŠÁ4ŢI˙ě^ă§Ç*C€ë¨ă ݬTťÄĐézg®“É:ď.uIˇ>Ó4íĄ.](ęé\+˛endstream endobj 493 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2093 >> stream xś=•yTWĆ«ŞĘ ˇ‹A©ĆÜ'Ć$ ˘Ł¸DÔV@Q1DŮe_۬˛Ę˛ÚM7°pĹ-.Ł2.Ç8˘qŚĂčÄç–ó8Ç)Č™yďż÷Çűî÷»÷}OA™Žˇ Ĺ$Ď ^ˇ‡B.pv ý6päČR>Üů°Ů &ŔÓŽil‹iËG“®XP#KąňpDdŔž˝Î .ZĽäłĄź/sˇ¨O(oj+ĺCąQ«¨Ő”9eI))ޞ˘xĘššBŮP¶”=ĹÉ‚”)IÝWÄ*®ŹńsÇd…É×&gMMMÓÍśÍi%ťÁŚcrŘńxĘüŁÉľ0 DtĄÝ1Šw&‹łRüÁ,Ą)Ž€M(MĎ#Úá7S4 Yé.ŔF«i›g„ËĐ‘e#2°ĘUůeçp˘ÖŃ׉ŁŮ\5mČ{ ÝĐ ĎA—Ĺ’GÁ“Xil33˙¨x\5˘÷/QÝŻ|Ź y<š[sNŇFÉ”żčÓşÍ}ďvĎHÍn€|‘n¦fnA ŠÜXŁfP™g€[ —…—ŕ*ćî 4 ±GBö´Ç´¶¶×u ňőW+)M{°^šÚ®4ÜĂä{Ö\¬´íyčŽŃµ¶./ß_´®DöĆ+¨y`ŮZ h´™uŔ6BAę SĹqGł!6P/*Ü ě!2őŢÚ°Ú#ŞÎ ćQ˘^ó 6ł®ó!jzř@w˛Y‘ ‰ŔF€&REL,¤UĺÂń:ËjŞ:|jÁ¦ ç:Şä"/|Ni:ńŁŢ1ĘwH«E'ZsC’-ř‹j_Ć#8"t Üj°Uî qDo5“3s‡“S{@ćň”4Óö?GÝ{Ř{e@0—.kô‡DÜtťőĘf‹H[sjé\#ßIÂF-”C‹Á̋շÉ,/b~t±ź.¶ą­˝î»“±UYąBKa»¶ ŘşŐAfu)JâŔr)sĐ"îÇ'b×wőçú-ěú]čŁkË QEv!Ăs§ćĚO:ě»W×.Ş8—'ó“ôśŇč%+=né/ h…heÍ…ICÁŁŤóŻÄÁm{HL„€gâţ˙‰LeMUue ËÝN?vÖçĹTśőîT©ŐdPĂÖđŔ=»R‚Á/Ąg1źiÖőµö‹ć@&şŹ`ý8MĆ*MęTРв-˘Ą5÷J:ŚcůŠDHŤËÉNĘÂ=wĆúKT€3Ď\śŚĽ®*+«\ĹmŤ‹ĎŽNłýťAÂn¸:â±’0„%6żÎĹyřŮId‹Fä’}(tR”ăUĽ‡nüą:›1—î§čĄtýM˝˘Wö‹V&RŢç‡r0ťh&‡¤ÍrŇ’xÔ`F.y+«2ĽaAƶÄyž‰‡ŕx×' ¤]€ßˇîĂícĘ^Ü-i„芭ń«ÚÓa+«€(iÄ[1 LĆń&RÚd‘ŘKL=”„§dCFš°ÂëS6F]KWBżöZ ;\ATj¦'ď=ś•÷{čÉ˝-ń N7Ę+(˘‡źÚŁ`ÍUIxWÓY1ië3R4®/3›I‹Ć Ý˝§Xî?H?»%ľ¶EfĆ_Ét2ŃyĂÂÍ} Ťíťőç.T&ä ­Ť†R=°g<\×ěóp_- HJ†l±‰c¸ i%=«»ť]Ś8Űxí FĺT9ŁĘíí¬9ÁUjŔµ<ô‡ ‡¶ë®Ŕ űČĺ†,8~ůú/ýŰ ˝'Ú;®ú”Ő ş–žcmŔţ-oý7I9Äz†Fµ';;'3'5';4,g‘WŐg zhTŔ,_58Ěß–r§ęTń‰ĐĹr—¨Ţŕ6ż€ 0ß…C›8{ =ŢľTŤG…(m—‰?CÚD2ĘQ‰Š!q¶´ŚiÎ.ŤÎÉIHČoĂ6ScQS5cČ{9„?Źáôă ĐxÓlÔ9ŢD‹Ąú>´h2*űPŔŤ#Ój/;ŕŃŢq€L¸µQňl¸°5 ]×]tĽQĽ¤˙Xî|5śÎj<‡Ř ˇFcc“áFŔÍédYö'RđUń—]kŃĺaÄ]ůŤ¨ţńmUdZ.ď+·…+Ó…řv€j-/‰ýŻÁu¦%÷K˘Ąf´l—Mú Ą‰Ô˙a OüéH 3 óŁósŠłKX5DŠĚDşäayy~niáOP%+,§ă˘bŁă˘ćÓUd*'Öý2VŠÎ0Đ—×W$˙PwM×…óqí”’RČű†ůFÉÖ¨čĽ=óMd˙›x@j©¸Łĺ®ľ­®˛ż-č%4Qą5ÇŻÚ󱟰tżź¬dÉD¤|‘Ç%?=Ç1‚=đ°#ü _™ýlJ|qhśfďţRÔůěܡnx<żÔ9Ţk–×ůÇŹ/vëj´sé9Ü ;mF«¨CËłz|oT<’Ä&´©ă)˙`I%ź8}Al‰đĆ'éĢ»!Š·´Í Źúď^qp ÷PmY^Gô˛§#[#Â÷yś÷B9\>ĂbŘ˝á=Ă–Î…o˙ Oţ}­áëÔ|ˇěŘY96UĺŻpÁËhÔŁE›^q -»Ĺ{#ŮqXşĂ#OÖŔ~˘Úäą~gGü‰ö¶ú.Ńż<[+4Őt•ťöďÚ@µ_z|LŚjúаŽÝÇDAfC#6 Í Ľ{ő˝ˇľ¶¬Żn˛Äa8•ďŇůűůű낺»uşnÁ<ĄTÚ\Ś»ëJJiqŇă…q¦[C'Ś=•—§Őććk‹ŠN_ź0˘ţ ±@@Łendstream endobj 494 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7814 >> stream xś­zw|TuÚý C† ((q xŻtpPĄEştB3˝’Ţ'™LI¦Ď3˝Ą—I&mŇII0‘Ž˘`¬°«»ďęî~ďxłŻďw’PtŐűţ^řđOňýžç<çśçąń!†#|||߸i[RBhâsóç­KŤŹ ÷ţpR kř‘ńäűÂ#xdxë¤Ů˘q¨řqÄ{ö1ÂűgĺŠÄ•I«’W§¤ľš¶&=c]ćú¬Đ ‚°ŤŮá›r"^‹Üµ%zk̶ŘívÄíŚß•8iîSóxĎÎnü‚–ĽřŇĚYłź$)Äfb*±…Fl%¦ŰÄvb&±Eě$vĎÄb7±’Kě!Vó˝ÄjâYb@üx•O¬!ž#Ö uÄBb=ń<±xŘH,"6‹‰×%Dń(‘HŚ!’±ÄăÄ8BCřă >1‘x’ ‰‘Ä(źQÄ* 1śpůĽîóÓ°Ŕa×8ĂyĂŹűÖpgsŃ4r)Ů=2fä­Q{G}8ÚőČKŹÎ{ôë1‚±>cŰ÷ŘwŹ7Ť‹ń›ćgńűá #o&ŻoĽdÂ˙§ýŰřůťxýɶI{'˝űT(µŹ^ů4őtđäÉU“ß™ü·){§\ź:|ęŮi’é~Ó˦ߜ1eFîŚk3żCMc~öÍNÜhŻ›ŮźĺsÚó(Çł¶ŚW(a ÚZَB<\­Sk_*ąBĘŢě˙Ô?ä•UŚFŞŐfj]ľĂUo€Ę Ťę M…PîLG+tŃzpÍT`+˝ŠĆů#×Áľä›•& ‘J@ )C[‡Ú©hU7i.€2š]Ť”<6’‹^Cűâó-XBHťĚ<§ăw˛ě,‡ů MĺŮe &WEÉ’“go2S[\ä˛×X«éŠăťh8ś"?ÝáÜűâľÍ1%#¶!˘!+] ż†ĎśgSˇNç4QeWĘßpY‰RˇZ ŇËŮă…V jľÔš[QPj)·Pčy“Ó\irň Ź‚®´ľ¨şűÚu ë27łŁEá´8Vť™dp]ô‘ŰÍh¶‰Â?ö…Ř·ťč ŰÇ3ń ŽçE”ÄĎÖö¬˛ˇ1µď߂ȫ[.°>{+”b8¬Pî®…5hT"š}˛żC«­ÁČ{˙Ó%4úŚ‹¦ hÄt<úś·čĺé,—býąçÁÖj&ŕŁQÜö5ńôVö}Ţ3K§˛Ă(ö1n<,f]g¦Ż f_´ś{ŰüB =ć'źź& A‹†]AW8ŚąyÚrůyö1–ÇNagL;żé3ôâáoťIäAHĆ´¸Í‰;ví2"Ę}µŻqOĐmgŹ4ňŤşŕ-řs‡]0nĎ<·zćsŽç¨gOgÔ™ÁH‚ÖžrćSW„\ŢZ˛řlÇf°vÉ?§! "tŕ~•R!™šŢÍ.cß°ČĹ O˘)ç\蹏Ń0úŇ7ßô|ä?Zç<ź˘Ś5í-¨Ă +5R×bwąŃÜAÖl~‡ĂXĐAŢ?7ż±yoHtl"%9Tú„P€PžDłÜţ YĽLˇĺçcŇĘMJK-¦{ÝÍjüJ3¦{AvŮn¶ÔKčV4Ă’ă ;†ËáFŁYh6ÍŽe×ň$©!»ÜšwÓjĐôVşmµ6źűčMŕwŰ·Ĺ…&łŁ7Đc<*p{|0gÖ~Ćń”0ëyhęKcy{ńair†‹¶˘í(eĐKÚy°%‘ÝĽhćŢm«C—9í: ŠéłµXt8ßr?ů(ť@ŹaBîc‡KČ|‰Ă¬`Wńî^Ѣ7éĚzŠéÂW°đm2˝Z“$¤$ő)-ű€d9ě(v.;cQOŔµÎ¶šÚ::k™˛ţ( ŃŞ6hI1>fľYmil1@Ý„;żqDzęăÉâ_[şČý˛Ó }n4˛ěí:ŰÓ× V¨Ň–%Ů…öD€Z«Ň(HL´Úí:ăľĺF‹Ý>ç<Żp<«đPcuJϧ¶˛TĚzv!>Ôî}Őů~νd&˵ą˛D42µÄf‡A_f¤ßDÉCW+€J ęL%X-Čx Č—¸g‘ÖÚ4€zś‹WÂędŤXťFk•Ú|P“‹tĆ2=U… 5 Č~47'˛Ĺ¨8˛|™*—f'ö7ý˛nL·t:Kń—(É_§7ŕ#ŕKúÔ¸ {&úęŁbLćŮ78ŚË;¶ŢqŕŐč=BJz<˘üŔ˙RÝ,őV=uë Ýw ř&¨ QŚTJRlÔ”ą‹zµLwĘ tŻőxa^Čń2)Ľ®¸ď!®čCÇ!tĐ=Đ«îŇV€'„tw%X Ť 7Óç‘É÷3îE[nrŽJ¬‘kUC¸âţ.7QŢęu&0ń˝UkŐŮJ*{µ0KÄ2îTp·:#ą˙tĆżš¦¨Ói­Đ÷~a0˘…_`Ý{ëcôěĄ>LňgO˘qoq§Đs<ř|YY-Ém….˛şňŇǵmy*N%K†V qTB€”‰!Kę€bÚĘ-„Rmˇ¶RmŐ‚TŞI 4Ň„¤’H çľř6⟪F ?AśßÓĹłH5(Âüßá~ڦ|ó^O[=mKsF;ŔzłÁqm÷7Wéí‡,t`ŹĆn°eľfa‘;ĂAĚ/K@›-ٞ÷…/ßd2¸J,Pb©ŁßG}ľ7ąĄŽˇš/嶡YĆ"ĐăBVćňRó2±›G° }qsî6ÄÇÜUl‡VĄ‚ż§)üزV÷]ăúĂŮâ“ćÔÝďÖj3”h»`c,)P[4řÝWQ§ŢŚ9cŕ;dĹY ňD™†ZÉv+łA“/ć ’‚ Ę?Üt¶é+×%ÚZi*‚r˛ď€;äŮv–b°źôEFĘę®ýÓ) uJZ^˛(‚N HYäó§Oonh¨¦Ęvv)ʡ *]Ĺî˛ö‚3-ś§'5ý-f }]Î+AÖ&°8,Ćb =É´YͶËŔŻ´¸‰*dK-‹··:éNčRwińę)Öň!”ćź-:‰F~ÉaňGx-wbzjzşŘ"7Ë©ęCN.IűY#;b§´ŻéTăçµW)S‰ąř!1_”µö“ó/$žFěA˙ŞˇĆ0Î çĹď‘ŰçÎ÷Ď0ĎBžMaVC,ű nŻ—ą€[ S§—áą^†«D,Ůĺ/Xľ-`„AŚKÖ©×ę1Évgł«&«0S˝^^s"üÂťo®}í¤ŃH&ŢRg±vżŘá˝÷OĂ Sîäął…'ožE«ľäx6ýĆĺ! gŕPgĂ» —˘gá8ů`Hű;±ó÷‰~ ąč©8y¬RK şâJâ~îĘ­‡+ßč {Ű2[~NUvŤ€'‹ŰôŇŻ90yŘ ZąFć·†}ÎÓÎńěÁŚÎ‡|*Z'±HÜěôW´Í«*żôÖŰfľUg×A)iQ™ä™©jH§b Ҁϭ@jÓšč"m‹[vN®PĚţťíń˙]µ6Z­çq?Ř Ě!×Ë#ĂÔA‡C!b𫿰״wŕ ÝťjśL-x˛(”CÖV°ÚĚÖFSÝ‚¦!'i¶Ńś lq‘Z±·ŃĽ˝ÔzĐmTžgę±OY±/áB\ňşFɇč’Óçř Ô‡ť8÷~5„J*ů…=ˇ@f%«vtY›éfôTѱÚ7{o”Âó |×WŹn-HÜq`Ż ŹĘ8ł×š äĚťě„ô怮ÄD×Ţ:v·r}yzxšdo~ť>_¸>séfŕ«! rЬ6“5™fqjjćCé=GšÚJ©ŠmoHk€üţ(šXqOPÔ!4â-”ŚăpđPŽŚÍŚ‹Ą® ¦»Q7©:O«USłd­T ľÔEGôň<µZÔ¬~Z«Î HţâCkŢCĂŃHô   ·©*ݶµÔ#.m©}qE}G{s;Üź†Ą-ľËć4Ç3iy8j©%Zµ@NĹ-aIvľ7l=T'1ť¶łýŕŰMD Ş ýjxkd¨!üa81±–sť8b™KŻŁ8\ÓŻ ęDË˝ŤűËIŔn2Áď[fˇš÷CéĚú_zFŻ<1|óŕ˙˙šEŹ»ş°Šd_\ĽČ}˘včôí6ÔB Y)tdS~&I„b{`gě›?|ýý_\•DíuÎkˇ79LĚ<“Ě!Siµy2jĹĽŞ w¦vź:^ű÷š#tëĹľ–n¬­Ýšâ°= ÁÜ:„UµŐÎö7BÚ6Üňfť^÷zâłż{ă‰Ô=T™·ü#Çóqďn×XťŞýÎ,”AÍ>ÁÍ5HłŮŰýçü·3§4N &(źĺ˙ÚĽňDh{¤$HĂ—IµŮŢA ˇŮnt¦rô4sÖżäÂIC˝Ž4čJ‡z.ى–â¦ă^FĘö_oşőŇw¶Ű»-µôAnĽc8RţQ#\ ŮupĂvę 6ŕą#‹ţ4Řf!Čʛ̾¨LnZň=ôČŽŞäXŻ2ţ·›Č¨ń,qů Y_1‘79žzf -™ţ-;Ž eĂŮ<6—ťsçi4 íGQ()¨E‡x°0šĺďšżžĺ,زČůŰ?EŁ{ŠĐÓWĐúřťŻßűČŻnf'zi´ŔíUĽňŹÍű°Ňé“zťĂ^¶ŰăÇë « ›ťĘŽŹ•S™ě0ßu^°ł0SŠésÜ•ý#%›ň™|Y¬80ň@`7ŠŞˇ‚tfŰ…©©Y1A]™m?t˘¨V vÖ÷Sn©}H$–qŃ"k›ăx+đ­P©)&(EiEf”啸\-Ô˝qľ˝ťwűxĆÁń$2ŤĽkvdÇbůń{®ď/‹čłHç‹ţŔEăĐ“C#é…µ<ČĘť±G°3{÷ŞÚĄÝâ^9š˛a`#‚-b“™â^ÜxŁ6ňłŢXŚ“–q iIŇe‰*JTź\‡g7v8;‚ťĹN^Ô»ćÚѮ΂:s±dŹ"3)–ľ?G\1ÄC˛ŁÂZP‰SQa~yJvĽ("Ľ-űĆ߯ż}˝ś˘@Â^[†Űk§ćşăHYŮK»NîĆW:c[,ŁŐ"ßAް»î|čBcťL˝—07żt˘ţĎ-Ϣ4)d…\CĄěIŠ‚XH+Ö|Ť^ĽŠE›­!ŤR--VK%% Ô$‚ÜQu ‘ťh'P6&S,Ő±/L×4*Ţ_äŽĐmű„ą^IŻnJ˙®Âšs Ť8{űć›ďůÍé—ŘŃ4+ěßËK“ÄI±*J Łµ±÷đ x=E­ěß$íćŔv·ńá·»kcbâ©÷P÷CŞ;«˙s­F+Ĺ/•ÚrË+ KŞ ­ZíÚZuú˛ĆŠĆ®óWţź«ÝS '¦ęq':ćÇd#źćŻ&ř•z˘żáY4f±X«”¨©śí qXŘÔµŤ5†jC m¨2†J8shwšŇzésxŹüč•Ëěă[úěöő‹‰•a‚?yŹßŢ}9}đ·ř}•ř"‚{čp•Hť/ÚNK÷«D ý:WśŤ;ŁáVj.Ĺ…ęŮť;÷¤ŻrżËŇ`Ő[ô|‹ľĘĽđĚ‹ýăăĐ'{ßśŕ÷şńó %&ĎÁ’‰tµ5…M…môôŠ˝^Ź/Â3Ň5/–ť­Ľ‰lM5·"‘2=Mš(Đ K˘f‰"UXfřŐaÇî4ˇgŚ”ßÓµL Ż2×™—Q’YßŘčn¤źd¸=óë|ĐľK(·b ĘçA˝Ľ3Ą1Ő-1Ě­âmJ}lqN#t’ź~đĺÍ;ukV¤hĺŞ J+ň˝ż 9†Â؆(µZi>´=âťŐş,ě2cYüoD sשdÚ¬v*ŠUoüŹĺZŐĄŮ‘#˘ÉůËf.XľĽő‡*S­Á“˘Ż#gŤ’@6R#תńHˇ0©ĚťŢnĄ5Ťö¶ťrŹ‰Ő‡&˘q÷ĺů«â(ćŚâ´ĽŰĚ(ťÁXEüŢ„®íłv±3ĺw'3ĺ:ßqŽKź‘=¸Ö›ÓĎÓ*âŮGW_ 9moqčZ±S{Ĺ%+1'&訨őłË×®•clŃ“žgÜ ¬ľ ëöA«<Ł˝›ç^ZŁ3‚ Ăä]ÚPývnNzŠě-ělŘ*üŇ0Ť`0Pz˝NgŻéE“ë*Čfn¨ärM>ىýÍů1ůy ±P®w Ŕtô¸ŽŇÇŕ„účŔ2°Â‘ąt.Wńz5$”F(ÂfŤiŤ&2-ţ^†ZuV}-”ůC•h“y[hŤtŕb/8zC™´ěKźĘJď…Ó8( ~–•Ä»k‚LÖTUTYęt&ÚT :(„KµmUE••µîc§öôYn•*WĆ€l`nsÖ•µ×d7í ŹĄ¶­ crţĆĚő” ň?” KťMOEÁmĘ ™°•rP©E8OČq*\Ő›ÚvŘŮTî śíEgÁ0”Ł0˙'ŕ]»źŁpŽŠÇ9ęŔoć¨,ăÇň&ĎźdŕŽćŻť¦F““ţ+3ă?›˛çôŹ—ĹAäńŮGn¬ąü0ŹÇŁaµÔ×̰ÁÔÄLM??°rxx‡|îśá ¦!ô• PŞ)yjN€ 4 ř˙«¬Ę>ŢŹcĄ2 rů»ZŁŽ´WÔş ©Ň–˘ ÷Ňfza„"=39Ćó<4iZ˛R© Q"ľfŽÔ V-]˘­–ăQE,ÍRÉŮCýYţ»™J߆ă:{Ń੎ WC$ 1†ĐJđYúôů©zúLż^ S–sYç(CfŢőďx§ĹŃf°ę€gB´0ň Ď5v¤˛äŠvr2•=ĎwýýMů9ç6‰ń®hऀ¸ěá|˙aAËW‡Ń 4˝Ž:ŢńEűXŻ{{©­Ňĺ.¦îo­˝Ţ´<íü‡ňEJďĺ5‰jâÂScăŞň*+JF•űňž űĂ%řŽ "ŐąĄ ŤĹ!s´×Q6śyśyU8ÇĄŢ`†ťÉż1Áo2Á0żŹšÂ\Ô›±˙řřUB*—› Z­BăďwMŞĺ‚]ëŠ(MuÄ’] ‚™qěJňg°?ĹłOÉâ˝ó 6Ć ť¤ô—t šżěFSŃ”ZęzĎex1ńő{đâ"šřo°LGť<6‹[pľřłâβŁÇŠant G,iŠ\ś!čťh*J í&JÇĹ(Fž!Đć“>·™łÓ>žŢlv‚‘0T6ŞTbŤB)đ>rłB…vp˱ç †¶żČęôąÍq#¨śçőHŞ.77¤“3—[lÇP–€ZůpPęyžSX™w á@JYNMł»©ačŃx†Ó㏙‘ĐĹs&-áuŢnG ŕ˛C‰ĆłĽUK÷łÜÍÔŢgCŘU°€Ś–FßľÓ‰¦_¤ć¬ăeěßł;ȸŠ?˝†Ž´\ĄŰ®ťp6ŮŮš°aEŰ2w(Úă‰l–óBą÷ٱ’qĹŁë2 6vłŢ¦3zu˙®wZF…B«Í•P/O 'Ş•^ńĎ!qR0żanéĄŘQý‰˛8YŢ2ŕË«Ś‡ö®ntчˇG}řîSŹź8˙˝h44úÇŮś+ď˘ö/t5ş‡š’+ďZÄďy±=âDSßĺ0hń˝í.îÂ"Ö®…$° ŤŃÖ[ËŇýŃ!ôH{Y~‹XˇÄć*ť†2KŚb‰Q“_“ä™ę.^C[ĐÎŢä%ěôçĎÚB%‡¦…,–®Ň÷˝*Öş˛Öh„ş,WNM¶;ŁçČ=hĺ˝;Ô!ňÚćDÔu7Fýĺ«F‰Ęx_ţő°śÄ(Şm48ô:đŞěęry•¦Ȱ/>+¶(ôjµJ«QŇAYA˛†{b‰Â Ň«pŃ(ÔŇWŘ·üµjmž÷Lxıč  uôĚ›¶z\ůŠť;§d†ÓÁ/mÉÂőZ…ö[VŹYL6—×WU‹Ň[âVv­»…žŔŃ÷I4÷ޱ=c]>ßöť˝|ş¸›ĂäŁ4ć7fŐ*,Íé9ręmxźĽľáP;lć´™ŃEIv1e–é´ÝáěË̆ rń•]7q¨&˝żCŁ?ń¦°ŹŻQŕƲȩW.dç9ˇš˙öµ·?8~đŔVjE˙ĽĄ —ţaCp×…÷Nń—^ęÓW]Uâß=SŰÇv2ÓđLŤfăEÓÇäňjÍaÇłX?v ;+ČĹG#ÎîčuS)“S7oĎLٸ $Ö"®?b4t€‰,’•ĄÄf'FďęI>÷矼ÓKýM.Bp\Ž·*ŹŢO­†÷ŠÚĐ“u}TłëŇ»@-ŮrŻťQ˝pG'!ź ~7µ­?AňŞ„I”ß–Řř¸řô’¬şfwŁ{č#çĽůr‘žŃĽJ塻^ZfłŰ)éćČŐëvŠďKx9z ŤF#‡•łŮ™?ćfů ą}TÍʱŤQnßů©ě&\4é43ÉQHQ‘N‡#EeŔ>â%vĘó;Ś]Ďa‹mcŮ×Ú®­E@šŤF3ýóOľŮÇaĆ1{xp:˙|v_ę;!§D8¨TŢŽ±äŃ'^´.‚`'méÁĘŮ‘źTMĘŤjłŤřMůśBĂĐ:7Ú˙ôzräÎV\8yÎ ôĚ 4ăÇŁő.ş‚«BBC˘Tf<:•O˛"nZm+±–XŠú ęŐĺąRub.Äě¨j«śŤ˝ŰŮIqłWЍ¬iľëĽżóp×jVöŹŻŞD|Eš(0~Óoö  č ÔYtŐ‰¸kŘďE+r6HÓřĘĽč×vCds‹ŞLĺĺŕx_rzFÜîSÂö˧Nw:)בâăöă—Ńţź >ÁĘJżĚ-˝ˇ”–ݰvíŔ˝]%ŮéJRN^]SŢJŤÉp2«(M_âä:GťMŤľ#é‘‘NńߥFó#ŹÄ˙;7ż˘endstream endobj 495 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1371 >> stream xś]“0ÔiÇźďţřî& Ű.[Íw#7§nşQÍÇŘÂ’ęFjvő +•’ —ę”&eĄ)QI#©K®N6wčBq«ÍĎŽéúˇšňůîT=5ΛÁŰĎëçĎ?Ĺ7 AĽŕµPW¬>ó +Ńů= ndý“¨rvŚo˛•ťI)ô ‰nB)|J˙j!ÔŃÝD-śR’M7ŔÜ-ŽÜu^_٢ZśM礞H( sÝćn,ÓL aŕł2hµĄ +÷€ĂéL‡ďřdŠÚ.ôvżĘöÓ2¤N4 ˇ¬pŁíë^pí2¬6ÚIęŮ1PIń g‡CŃpIWîŹĚyNrpB E´$ś>ţýFá}ŇżÂ0D liÉŕ­ T”’^©·G(A q2ř†–đ>˝ ^˘°b3ŇZ`´™Ş0Ŕ53vHać·cd*™>źđ±ď SŔrôČeůRb ZîďŰÓ`Zw}k{çZbÁpŕ? ˇ´v …j{ÁgűnIÓÇ'ĹďŤ9(צEgĹ`%VUE5¬×'>Ĺ]¸«¸ë¶ţFľŞWŕĘŚK‡*•§\ܧ{nżít\ľ6/.O›ŁĹŘkŁJôÖ »b×Ënżűë•ĆŤC¸ We_Íżz˛ňlĹYÎi*f6§ M I˘>tňˇżLš¬ßąG{@‹ĺ[R+î) šHü‰Ä3´Źś…č~xÜŢpˇŕGNIr“2)“¨—/ř°BfR.śPrŁ úsQZ38Ýzę~'h8w\dP+zďÓľ@ą!yG$“řkőÝ‚z,˙Ąfăr…ZDćg‰{Őe^ş—9·š­˘ °—â˝8!foüľÍYiXĽnCIm;,:q3G1ą'śĘőćĚf8śdűĽËŰG v’9ěnŘ%ë@.ŚäÇM8č`H„Ľ96‰Ţp›.MĽý‹GFa¦b™ŚČ«7Ĺž˝ťŔŔN‘ıô̵Şßfé»Őd§BµÍFDó?~ŔÚ%ŮJŞŮ0V%ő¦‰Śtd®ĎÚ-΢Ó-ŕŁ'WŤýRÖŚ«¶şď ÝŹS±<kŹm;ť§´/>RžQŚĹU®>}ă˝ŘĘôyҸQ[hŕ› 9ď-⚎D»Eë´Hy}äüę”ZâÎ.´Źá„Ň`BŮtž¶†PŔy\n˙„9Ľ»’üKeťÇKäŮY $šÜ).‘µMP×H˝€N#źíaÓ¤cÎ˙ ż^äĺDá9ĎY­ÓÔhµęčSű÷äg”'śŰ_‹ŐâŔđ@·(÷üŽĹLŠ×PřłÔ?°ěGŢŹSGo‡ţŰwcܸ™™˙m•XĚŞŠ`mń™bşŮÂ0•±„o·śRSÍUN.wň--ú‡#ÉÜendstream endobj 496 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6956 >> stream xśŤYX×Ú„ťăHŃĚÚMl1¶`Ł((DQT°!˝-m)Kď‡Ţ{ď"Áްˢ&®őę5&Q±$&oĚ˙MrČóügwÝÜ››ç®¸pfΞ󝯼ďűÍęQ(==˝kmm}}|?™5ĂÎĹ5Čk·TuqLţf#B†úČĐŕó1óŤŕę8L1śR˝6Zúl]î»í3żţ+ĄV«WYŰ„ě^#Űł6tŻmŘľu.ë÷opułsßäaďąŮËŰaęöiÓwÎéüń¬O"fωś;oţ§ćă,ś8iń’Ą.űČ‚˘ĆSë©ÔjµšHm¤&QvÔdj5…˛§>¤6SQ[¨©”5ŤÚJ-§¦SۨϨ”#µ‚šIm§VRSVÔ,jő µš˛¦ćP6Ô\j 5ŹZKͧl©u”95ZLRC¨ĄÔPjeA §FPFÔNŠĄFRÎGŤ˘Ś)ʔҧ̨є˘©(ž’P©±Ô jeGŕNnę[čź706H‰E˘çt ý‡x»ř)ł™©Htř~|°áŕFĂ!†NCDC‡rCeCßóv}řôáąĂńŁŃ>vë7ŇldţČźąhî٨)ŁnGš 5Yk’oň•é`ÓY¦MM›L1ł2s7{>Z6úöË1Ç?˙A&oČoĺoK %gÇ:Ž­űbÜĚqAă~o>ţ4´Ş‘â…0.DŻÖż†őúBB3‡Šóٞ2‚PÂC„J“ŘCň4/äÂQ¬ ŇSe"G(!%:!!E2Ţő¨ŚG—עć–ä*©ůEóéš "×äĺ]‹Ę%ďč˛zÔ,ÁK`+‡Mč/á+‘zgčRŘ+Ś~T‚˝Ň=)ä5s-RÎ;CýóÖă‹W;ąËd<«<€JöňËép)Y®KNâ.gíćĐĹduŐ'%ΰ’f›ŢŢ;tîB±ďz‡ě«ç5¨ćÍPĎ“¨wä Ł°ĹËÁÖl-É_łŔÖ˝+ÄüQHăqP"UÓ%ŞőÉUÉ:BŠĽ˝jPŤdžĽ&‹*kPKłTs˟ܪG%’ q6Ĺe˘ š­  Ô‘ëlň/d¨^,J^›ü“÷ŘŔ Ţ9ż¨7Ó Á pR˝PB„r»ÚCÁ°CĘí7V\Ż>qu1w×=Ćú<¦ĺŞÍëP©¤ˇGî§ăśTš ŃŐOŕ(·ÇÓz*?ś`Í>ř®ÚÖCR…sŽű6Ěĺ1 ÁŔÓ¬ÁwÍËťTű'(ŕBď’ę”ú‚+xq0bćl€ f~G`ö‡é0üđŚx«n¦­…ĄĄíýW/nܸ}çşÍ,ľĎËz #OpäĚá|Ż«Q­d<Ž–ź[ć1U¦µŐZ'Şn×’sTŃđ!ľ"Âk¤âţk0.©S{/\"…54L+˘*ő5•ĹŃ !WˇwD WČ–2X̵ čŘ@ä“ÂÇ´0`bfÍű¦ÂGOíľúĹÎ…Ĺ’Ś°ôđfÄ´ˇŞJ HÄĄ¨Î;41&>‘OIB)‘RŹĆť•[9rl3l×ů Ł€yŇý\µ!–*ŕcÜÔdń %Ś%Q2"TÎ6ű§qŰťB˝ÜyöMSJ±Ëꏧńż&đúčîă±z?ţ¬ÄjÔ´•6+—¸=;ĂßłFW._¸vďňňąZ?VB99o(\ä`î<ŠMyĽ§oőIuŹGhMlí‘{čn¦6őŔĆĐé‹1äV†Ž#úëřŽĘú‚3ŚŕĐ/«ňĚZUh⓹Şfę´üđM±·ź–ÖŇ[Ju9$ÉăSxç*g$#ˇ^¸Ŕőă÷a/ĺ’Ž¸G‘h łżÇ¬› JůÄň¤ĨÂ%™*GŇćĽŇ´öBľĂőBJ#ÉćŮľ9Ł)RŁ€ ˝CJ¨'§Ź‡x®Y…¸x°Ö™Çč(lŕ¸c b.Š”ůŚG˙zŘv-Se’ô°ě¨ú?×lpb´{ďÖĽ·d71Ňp"Ť­ńÚ_°) ľt¬ą¦R„B4ľ‚ĹâZ‚Ř˝řv“Ŕ‰ůlbĆf0âĘQ•›GjpźjkĄč|ťbÁ\ÜďzlţîĎĘs5ě˘Âíg8™žvÓőŹwó:č­÷T ndýÔfMIyť6’şg®ĂNŘ śţ|·ź;ęzäRíčĎ@ n8XJ˙;LjiŻJn#¨‡™VJ+iĚFy-*ŹËy'xL«ÓîOÜęNłź,Śň\ŚZđP#ţĎyô4eŔÝŁGóŰyv‡gZ*}—.­ÓřUöízÉS‚(ťú8¤­K zäŇęgŔ˛`aBݶ=†múB˛0QăB“zht#ˇs"öţĹ•Ľ/”a‹Â\ťPÜhŰ=wAÓ ±śĽěgQ}ź”ÁµˇaţÇóD{i¶®˙: Ôäl0ň’ *Hvž*YřM„Í“ä±ţ«±“I”k¬O‚)ţÓs 0%;¦VŠä٤ö”„m"Հ=UYĂf©śÁ?Öś†ýJł¸š¸`çulź™Xä’źW_ŠPqnnqFöw]xIëń§UKh:“ÇýţP‚^‡Ž’4đ=Ę]ÖĘ0\-†ĐQU™–ĘL!Ź_Ńqq’ťâ~ŃQéb|w‡¤&Ł0S÷jTÁ ĂčęlT‰J> ş©Ji]bŠÔ“ýÄ4›öhÚSş‹0ĽŢ4˘8%lţ|ꯝÇšyvť+’á{iĎ„O9¶m““ůŇëowżľuăÖőŽMöÚ4Ő ÁťD|ôő%ăt™Ö7•Ćk…ä¨Ö ?dşJ‡˘U$Ü?úU‡ß4Öö$ą•¦Ö#ÓćÂŚC!»N¬M2tőWa¤Âőöő&Yh\˛,žÚş9ÖY ‹łáO8GWU v ×ü„GáÁÓ¦ŕa¶ýy2p`rúyżĆs¸‚.ľ{ĺ‹[´€ŇĽ‰LďÓ©„57¸ĚÁ±ŕFl‹mýđq|¬Ęlamuă­ň8d‹VDoŽŢä<ÍAŇŞ¨łQçĐSôęB7 N]i)|ŚîٶŘűÂIJuL_ZŔ‚k•?>Ő¬…‹ÜŐE(|ŃŇťsů-S´JčgÜ5Y‡Îkµ´?ş`¨N5=M?ü 5óIyűÚ*kJ{uÓZ$«±.…%P°ŕ^Y>Çbţ71śvoXK´70wźż"P·e—Ő4~$˙Jż>nµE JˇWÁňŇWaŮUď«FM—eJ;%¬Vú_NRnĽļ„lÁ„«‘µlŽvLußÉł¨‚p·ŠťŁg¬°ż«ĚŁD&aő¨čđŘ o3äV,Í‹"¨3ÜŇ ­Š6›÷~Ś„‘﻾ăY˱¨=ôěֆȜÝŐź f%‡"Q\zJ@QĹ ;>:ş8µ™ˇĚôâĚüŚ”Cyy÷N·„ťmšc›Â« k3‹Ň˛ýjâóSVSŘ$Á«±>gçěě°y÷é <{#ë҉ç/۱… cÎŮb×”)ÇO”ç8PÉו桻éš×[Ö7űHÄž8öݶŔşżŕůß.e/:uáĘŤ­áŁš«ä űţËö ĹQł'ËăA<^ůżIaʇDž7Łľ ű{u0 Úm†lw…g™wcřAÄ\«ýňéDá_śŁÓĆYügŕq‡f»_žŘ°˝ůî˝5÷·Ë‰•„¸zą|źPĆău2[„»đť,<ŁŃě,<^¨ćŞ}}‚|}«««ŐÉ­.RŁó7l”§• QşÜ0f˝/Xȡë®Ç˘ŠöńËYRľ°ÜdwˇK:Íśë8s•ĚđĘć3‚ *űšMg–ćÇďiŰ\čD QßbńüŐ§¬ż €ŘOÄ–4&|2×Ěa×†ĹľŽ™ {ůÝ IÇRËSËRË={›4l˘îŇŞł‹äńGĽá׉F`î<ëîĺn”~*ośé“·+‰?<gN°Ň$AăţЇQ=3h†\üÝü\ĽčóAQéé„#ŇQÓXćĂł±Ë~BGaŇç`xťgG¦ Ż˙ŇI€ţJů’üÓušăѦY®eš `Ú#wĐyŘ`©Ó%“žĂäĎ­°Ă [Ű7unRkóŢ{Ńř#ŘĂ@,jÓéTfęĎÇÓEđ^cŽŤ– :zäŽ:í—N«îř5ýč Ćk†Ş˝5¨_sj:ŹűJ&'-ëď<8 ĂßÓc­¶Řś˙?ľoVIŢ–fµešő†ĆĂž~üöíÓ—0ڇ7ÚFD§símAń¨>zí ˘ş°G‘>ŚÓ˙›"°W]č„ÁŞc¶C(R W‰Jz¶÷žČ}ľ|ÄAßr䉼ĺA űusJ í©1´ }.Á]b×ŕ^Śx¦ń2YD«ÄlG÷ŃÓGkŠĂlx,Ëú€äţź&ýÍ•ťqß > Ł s[`®1űJČWĽĘ©‹uđvĆOâÖĹ;¤úˇ™p}8¦fÇÖ˘XŇ… ŇíŔ;m‰CY©ń„±ş*t±FŘ7˘pËŞE…ŁóľÉŻĚČą‘™GH'–ét‡¦ĄäHëQéĹjQVۡҤ WÖCč—úÂđŕPYT^Jš´lU«1PWL sŠrP“‰šöňxřgéői_˘&Ó<Ôęá2…&!ź#< ż“âźjŤ|Lc‘Gk+jÍkJý2ĄžW¸ďŻĽµ»!<ĺ"¦˛¨ĽDeŹąâ· $U¤$UB¶ô¦Ęôß&Ŕtʶ¦=âc=%¬{eÇäÁş?I ö–„ÜŇÂŕ ×憢XÂşµąą!72š€Ç‹ŁČźnm¨PB´ű: ąµµˇ¶B&Ŕxq!ůSťm0BvŔd}xSÇ)övŢčíéŇ$mÍÎIKĎá#lw„G%Ĺ$‡&˘&˘$¬ěŔ»‹0€×Ú/WęĂ»ąßÖô•µNeN˙cž®3¶îoVTćÝÔgúmZkęmúßLˇ»¸vďzO©—×ţf˙‡ęZZT&ŕEŞU°Éß®"ě˙m WQ™Ŕăoţ°ŠOE(Î4´$¬˛:§¤(›‡o~łĘ)MC(×´_Ü‘Žý0‰ŤŹJÜ­›Ćx6˘~.˝î6†`đĚŔ†·*ŕđ‡6xĐ’%60>„ÉĘ7÷îŢúOéEס ˘‰d­u˝0K(ŁUś"KŠJä]ć;DËRÂSS/#-O,©8š}čßłp–XK»™ÚČ“¨ĂYWî·eâţh˙±LÜ]ͮɄřşIrů&IĽŽrő˝}…̗DZ4;üĘą×÷ŹaŘW×:O]d†“ďăˇxĐâó÷7F—UŐ”5&Ĺćđ%§N·|ÇvÎYé¸ŃÚ^‚ýńşŘ¸„D$7Uőô<›/i–é‹l´ŇŻŁÂčD÷úî˘n¤ÜKLđa9‡nď¸bÝÜůyă%t‘ą·ü+,Ɔ+·[yÔÉ+U'ä'gđ--·UĎ=nžuuňŽpó ’xúKS\Sě’"ňaT‰Äź˘Ůü7çVo\·ií¬˝K NűK˛˛rH»Ó˙höŹ µ÷ň•Ę‚ <ĺJ#JĂŁâyo_˙p9Áž¸ĽČÂȢ*wä‡|ĂĂB"|‚P(^^Zť•ťĂ77Ö—Ł|"“Š˘Š"+˘ÔXZSVYŇTŤĘ{U:Ą> á˝×ŮEś8Ř®‰đxO·ĆçşóľtJLŤ Á2ü»Il$J!eä‘ßÂC¦lutŐjmŮŰő°÷)ţňKiÂ;‘Ć·- §Đ{¦„T’O^`ÇýĽô'<ČÍ9>hvŻóě´Z¸BŠ”gfĺçň Ž–_&Ń<ąÜfŃŠőźú®Éý—8/7‡8Ż)°48Â;vźů·+ÁFĽyúşŔ ‹tŘFnŻř'$ýÓDô´ŕ ›9 çtăa{śřb÷ýăgč *ŤÎJ$ŻâĚ€ňúşĘ˛ć׋SIíá!Ř Ç€Áň7<űô~ú Iß0ĎÚî3›}Š>¦6˝3]WĎţăë «-Uűç —z'”—ÔíIo‰żˇJCQbÜQL˛»WŁT4ňPFcKĽÖű!<€‘#ʶ˛˛‚&> Úa,W\©,OO';ôfŞv’LUÚ«ľxQ}+:]“§÷m®XV=j8Ů.1Źç?ı᧋ÚťÚöOž˝mĽf…ŮÔWs`˝|ö#oG8;[çĺ<ŰşÜödçůÎ3˙|xi»¤欬7™ó¬ťąu§RqůÚ‹——Ö®SWń×pZO׹ŚÓîą‘H†|˘3ś‹°łIZDFp#ŞCYĺie 6‡]?Cs]ĐNÂŁ„Ú‡+nłďIpnp€ő•Ó±ţdsâvúŮlpţ|ŮŃ“| ľäĂi„]Ó‚K3ł˛˛QSZé/ óö,_Aš*R=#Ŕ‘_ň€łßlgľpËW÷žŢîĽsĽ10„â/#Ź;ˇ­*'›wÁř.Hî‚ ]zm¤ŘU<¸—¸‡ű:·;şl´XrxÓ™ŽC—ďó {Ł&ś€xw\˙Çʤ”Do*+ ݍÍ)/Čäˇá·U™ůéY(Çô|ĎŻÜ˝ýW¶mŰżÁҲ}ĂŮłíWîń¸[ČĺśeľQQ˛ĆGË›‹ŠĘ˝I·ö¨®ú‘« 'NT4Vř9«Îí‡*"sŁsđ°6ňVS”‹*Lkd…á±É©±r?Ć{c"ăĚ‘™ůńđ»Çf¤´-­(¬Q§ĄĂ­Ç„SĂ#®m?"zCË÷NmUqęďta+áT<Ý ÍCĹ·żÓQä^»Jľľˇ‹Ű{ůVEë¨(® &?y^rZ,bÂeQ2r•č¦#Ř“˙Ńńjc+˘Jó2ŇňŠyx {ó˛Őf«L±$o˝™C%ń™ˇ…xř·;Áz{$`ö˘´ '•0ą‰•ţ>x6Áyxđ©OÚ¶ń–ßßT‹ú¬Ę\µx+HHseÔŐÝůčWRác…=B ×.}Šmyök<ÎŃz“gmD•†đňł%uŤ§s#ćÝaO/˙ (YŚOZ„fŁ˝Ě>y¤9?ű _&F§K/˝:×TÚŢ„Î3xAĎúżl­ŕs˘ŤŢ«Ľw>w;»ĺ®Egb¤ !qńYÉ0Çz%xé™§ěÇâ}QLX2ЉáÝ<]˘ÝISJM ĆĂG?żűWăÉu5’ätUŔ,˛™‡Exđ­…÷:^ËÂń <ÇĆx5^C±)Ś}ţíĄ&É&â:ŮíÚ±űęĂoO}qě䉍 ůˇŃÂg°¤ ł€V RćŘű> stream xś­ZKsÜF’ľó¤9h.sái˘:B ˘ŢUŽ (Y˛,É2Eín¬5á€ŮMRwF7%s~ű63«€®Ń=dđ@4PďĘüňËÇďűeÁ÷Kü‹˙O—{ĺţůŢď{śŢîǧËý§'{ǎۗžďźśí….|ŢZm /őţÉrŹ)19ůŤy)łÖĄ)¸đĐăd¶÷ ;şš”E©ĄĺĄgˉ€ţN*–ľ]T›úKřb=›O¦RŞ˘TŠ˝®WIłĎřAŢ+ö¦™L…+Jn<›%M /ţpÜÇkě ‹˛těk˝ążĽ‘ žÇűüëämHg2ş(MŘ;ޱçÂ8Ńmů2˝:ĄŤ)\uć2ĄŞźË¦)^.x7Rӆ݅ e§Q-&a„ü®¦RŔŽťÜźJ]8cÂ8őfťÍY2Q–âă¤čDÔ¤{^(ďz|H¤ŻÚĚ'šĂhÜłó¦­O'ş9ŻQÚ§ŠĂaÖgŐ¦ żJî`ZěQJ¶‚6[±¸¦gí•eÖëQ]áBÚô+)&S#a/Ąe˛E!őx˘<•męMݤ*YÄđŽ˝jÄpe…g«8–ěżëE6Ţ5~ň0©gŹgY ö>5›bM‹´¤a?¤­žľínÂ0oÝ”6<Ą<áŕ˛ĐĘ ‚°RŮRi P˘¦p"NŚMAÖ¸W>Ţu €·ĆvN5 ëµbG˙ő(XŽg?ć«Cé%KŐ¸şJ†]bo;VěŮ‹8ČëGĆA™Q|¦^Łböč8Ľ—Ă;kĽ¸,qGë0AŃR1‹Á3XiÚ0‚ßO…4 Q8L ËŽK4ÂĂ^Â"&A‚ň+Ě›}7™Z‡·ÎQâJňˇÂeö×Dwé\¸¦/u¶«Ż Ơΰć,>ĂE˝ÉÔ6šżpń¬Ę\´×Ý8ę¦}Ŕ÷ŇłĂËäPRű°˝M–T ´d]üe¸5şÓư ¬Ôlµ™·+Ź[Âi"Ľj®Úío8%Ú/ž$gĎ/ëŮ|Y7‹Äx6„%`ÎŻ·‹E' ^FT`Oč:•6±@p´íšŰ ŔnÉô–ü#3' -Ňç`§%•ŽŽëLI`ÓаB·LŮÓg˛w¨C†•˛,§ÚZ^<€Ý ŚŔQ;S8°DhfMý4…iĺAýi~ L\v‚đZ:©PI|6O±ď?7Ű ”<µ3ÚŐi…ŇqZ4W—Ĺił¤­ ĽÓČŠUí¦>]ĚŁ•w(íł3Řű9Ŕ˝p@   Żđw_ďcú% ‡Eh+ ál (9ž“™řpüú!hŤá¬9ťĄ? ¸f"0éUÇóń…Ť¤Łěß_80 bPBśŁ—€©řAt–‰GËÔ )ăi‡Őń÷żáŇś®ď_…g4'haś$ c ˝{ľ—„mĎhűc“!ě*#Í* Ü4ô0ň8«Ř»¤wŰDí›¶GÉ@ŞĹô%®>ÁŃ-–—šĎđ7B DjÚa™xE`Őn±{}űł۸H`?/Ú&eďq•Hů— K4/łE3ë¤ĂE!Q+&\zuő%Â!H{€Ň§ułśo€ř­Ç ž˙ŕ6dq4ŁcŇďf-;`~BŢm<ć@)9ÁĐHČ)Đ)‘)r YLhY:Îď™ )|»t† 1Â:ú2ŕrmpŮ´0l—ëËZ„I†äÇW„7‚xÄKúT†m?(öżŤ¸Š€_üÜ7ěű‰Dóą~ 2%ůŘ"ŃŰ“Q^W“HR®WůúiÉĐńŐ j®ČXľ 9Ő`Q_a" ˇlÓ^o<|źAŐĐ[áŠŔŔ *; ›QVAŘ2Yµp±˝›«s~ľ¬SőZß2 DŰč=ŕ„Ú7úpu­¸´#lÎâ=gщ3§D`49Áxř9Qtč5Üopč‘‘€—"^0^Ť+É=ÉAö!¦f\±»pv ¬ĎÇ«»gĹ^Öç©N3ň˝ĽŚ ÁáÇŘýzżK6›:đ|Ťŕ…xŞw —Ô=Ç;J§_EçU‰ŘZ–dfRZ{Ö´K µ§ăŢ)H'Pą[Ńn©hNX€9ŢŹ‚¶Ŕ­bĽ…qgsŻú8ąkj_˵)đ)üč臷Ĺ{QşŇÜű„ă„yýä¸K«Ióq]HÁÓ95úúők±¨ş€»lçë5qČH‹Ë‹ËFß´Č}ďŘě×zöĄŤżk˛ ůÚěĂťdpkĽzčĎ?m;:śŔěG…ľ»2kb‡ÇOđ™ĽcĐB pwŔÓ\ŰůqyMř—kg]­b{Ű7Yzs1ÔZ `ČľŚ°˝ŢŢ|¬ć·ëv¸=;®ŰĂk`äöžRŰT7˝ŚüšxšßŚšb3®éäp(—ú®ŁľĚa°äJ´÷lóµj{ł?WZ…ÎźşstŔ•w Űć:Ë =Ă,aÂŃŔ…ż4şę0–ř Ěě ĘE]Ţ'R ”Ý4Ů<%JcéK[;ŞÚ¶Y,‚hˇŁü–¸-q¤­Áď6ľ;5Öś/–ÄĂÍ ž+¬łą¶—”úxžXIEAüĐWÎý© Ţ”ł3'IµDťRAl ĚíĹ|EMX–¬˙=ďl@Ňöu˝Ú¦+Ôx¬Í›¦Ď=Îć)ă'lB«BŘDC/ˇă¨¦ĄK˘K@şm]Ůýědé\ö¨AŔ•Bő@`XĂ6:ұ¶üMzZ>é8ťy ď{ 8I®ŕŕßÜ’76K_V§¸×ů¸G•Vşt ťT+N_rx”FŞZšĚ Ž$çúđB |5{ů”âKAvć¶9\tîAvľZwM ęXb0ě$™ńâŞ]ošU0\‘6T+Q.oxIřgĹSÁm;ź§„–ŃđÇĄ¤ąěgEڧq5V/ÓĄ/ëő“HEĘĄş@'‡!Ĺ-ťGí/°ľtä4Şßĺ;˙Ł<…b>¤÷ę†nP›Ţń[> ëă,ş:ŘâşQK¤<ěł8L —éTËŞĹ $… ~ĚQ?;ů@Äh3Śň`y0µ`€ö‘¶+٧e@µšö·zSĚ6WĹěóÁPŠő–€,1;#|¨I—3aůŻÇW«ůŻ/««ßš_Wó Ą¨î‚‘ŕ3 ż/Ś+śKC`ż<śú•žr+Aýđeo@}8|*>ŘÉLáD47Ă€íxŘrLoSM©{˝ůëť"š¸Jí˙DŤvn1$ź’—ăĄ‰ăĂ1Ňšą_nKĘ\îÓHŞ$şŤ/Ą¶Űě­ÖŠ&­Ž6  jTh”rŠY Ć?÷5ń&Áň`§dŕłc§¬*÷‘řry3ŽwÚV«˘E[…5°™Q[ŐÎj ­÷*ć }•t!ťąĐÄ/¦/J‡â=Đ ËiMq´ČFH+톔˘ËÂPWÎ^Đ(ŠĎOŰ$ćpďsů[\ĎCHOĂ0HH{CđĆ•ÁÍ|”;#Ń䥹ĎE7l_ŹĎâ{0Ź'd Ô ¸”¬ë6čělěr× Ęîň›a†$„ůu^bfb«ÓtńÍ?p˛A‡]_źůâmłé tČl&ëjŰéBy+ŽE•›ĂÂVÚ„VÉôé1uKÁPhň:;Éť¦ńF|c‰€Ĺ¸HeeO–żźX|릧âŰ'bBžŞ;ľĘ=rBĆ^t”) é»¶gGółyŰńţyš“÷!aݢstwŐţh/|bwŠ9‹ R5Ń:k%ĂŹ¨wÁ•;Ç |Ë)•—ëpsđ©8kšŮďp‚Ş_Q"-»WÝxÄFl†ă6bć=jBd•;öGIĚ$Ńc¨řÓ!«JŠ…>zŁ Đ*ç‚}ĄDP‘i*ŻÔÇ™¬řuč1<<Ź•™–ý”ÚŕA• ®Őť­}Řůµ÷!ý-‹ŹI;ŻČä“GačçaüâĐýM úN5m«EťŐ—dÝ’Ěö®ęŽ·ů-äµúą˝ÁíĹ|vNÚÝZŁÚ÷U†]$:EĆŽ”(ž{.”´EĽŘQg¨±mďˇm1S 7dč(MĎ+' 2¬dłúŁُędý7pŁtpŤ± WwËŃ–(NHČsÓ<1R˛,¤Ő/žSŽĄ8X×ËHOŕ 5·yzYY“óRß«ć Y –"yÚV|CĎýĐx–<ŽŞvARJ­_Ł‹éťŕlĆ—6Š "[Ň­F’ÝËó¬Ľy==ůşą×~ečŇĄt`B ';ëj¬;.ÔlM3usôbgYĂ]”¶ŻMóhÍFµ±Ż# ›-ő] Đ·ľŇşÂŘŢMz·ľN!ůbG.E5 SłĂ_`ͤř o曋H ”`łńP.Tw5·„;ţÁFS7¦VnQ8kvú1ÖÖ?Dµz]`¸=řŇčj’—ŇkŁ´Ľt":)%Pv`5˙SČB`śř^e¦IĄó&u·?ďý?×ĺů0endstream endobj 498 0 obj << /Filter /FlateDecode /Length 4677 >> stream xś­[ËrÇ’ÝsĄYhÖŘM!BhÔűˇ-ŮҲLŃö8¬Y´A„4ş)]ůŁćżî_Ü̬ęFŘ%“Á»ŃŐőĚ}ŞŢ7pŕ kµŢśO?j9…ĹNď°Zi$ÔČŘ['h"MB8D®ŃÎŽ źty– ŐiÝÂ,—ő92čX0(é2€ ŕ9‡V–ęÁqÂč  3vľ)`ľi ¬é}÷ ¦_)?Ë­7ř;j›b?nƨŇB7đ*€ ’7 záܲďę¶FMő„~Ăš*h¤ 75Ő(BeŇTŘŕŕ=(´F“ÚŹ '»·ţĽ;<ľ ¸ŁŘ x{"ANe?żĘw/Ěóö3včČD>Ô} –PYőeÝ·ÖúŰU_÷űđ 3‰>:©>€xĹ´‰e“D˝^Ěs‘Z6Ĺ©‚Hš>űáéŁxŤ»w´Ţ´;í¶›Ř˘Őő aGłFOńg<ŮíšEń´ßČDč­Y.ňł| «B˘šĘ;$7@z´Tą‰ţRbŘ÷óË9âuqÜlňćzsEç űÉÖ¸DéăôľŚ"ú×—M»‰’]ů›÷7§é 0:Ż×—“WôŚMÉß>üńŞ]LâÁ˛*@ňečôW‹ż@*A9d@ĂeÇ"„ěZLWI„.y׎ uş·!_ä]ŠăCćź4VjVśü&˘ ^ňLTb˘Q0ą!îr?0.˝Ş¬Ń#€’Ę+Ťyóx:=<~ňş:žŔáâÖ±«Íúý|ˇűŞžá2ţq=É9˦ňÍnŔžË§\+‡˘Âą„‰é Ő‘@yŤ\şFŔE4Óý†—Š4 •‹­r”b ďŐţťŚ#ž‰4é8"(@49äbŻ´†"8ćË­˛°ĹEÂ/h¶îűô?38ěÄ»ë4Lý,<;ť§q4đŽeÁĎÓ Ö~yş˝ˇy€*Ă.Ďć‰-9§Ë8š!›w ĐlStą]Iď˘Gâl! ¬$Eąî 8pşTÁ~g?ţ3"‹ö ×äLD vëç˘÷řn(EK Ľ`ź;oĘ‚Tl{Ý5Ćh·5ĄŔ^ú:Ťí ÎO€{zĂť5!>,ĐkŰ>Ř”ů+€˙t`‰¬›zňâŻü§?ŻłÖ‹r9CXŁ k˛łĎŁL‡„÷fźH 8)+{Şţ|ěltoç=‰®ŰëM $Іg˙LŕëXëád|d'pŃúż˝ľęÎ7ÍĽ“”®‘pěUlL7´C¤ľL2§É ŢŽŔÎŽŽ39F‹" q­´ŔöMßăz•Ž@Ű9ł#do’ ᎖1Ű*l˘e¬]ÇkĐđ“ě0.’Ĺ]o>o I=X«2§D>‚x‘]WßUHÍ iŕ^oT˛AŚŠ—Ô!ˇĘ uÍŁëgĽÚ@”ś¶h˙…]`Ŕ˘›OęĄ|Ĺ”fäĘNŰ1ąě ŕ°.şV śaŢ”Ý=ŠÍPV“Š8 ›E“^ç†ýň‚6ÉS×÷䆀l• ©ŽëŢi˘#˘áŕ w:˝úÜ^¬//ÖM;?%c¶$ş“ ]q0eŕ cr/D{zR˛Ć= Ňw›†ĽX°HOÉĺäüPoJ[ńćěĺ¦käŘógń:€H  ’ büéÁ›>ś€ˇ˘î8”/efłľâˇµ"&kŃNv|ź“L˙xš˝•XÓ)Ý·ÉR§gY¬‰B Â’Šó×4tŚĐ ¨î“±Áí1–­ć›śö˘É'_+|MŚŘrzÇŔ?‰íÁcjšÄMŃf‹čŰ Ćdu]ަNtMśýŠ0Á;¦śŠ1ÂÔ\=ÄlCbś@Ş Ęů6ČŽ}‚ÄŔvIˇ;ŢyG˝9BŤ´ő„˝©WŇ;đMî˘W QS# şËŐn®ÎtĄ]ćw ;¸ ß ů•dČRŇŁČ‹€$iéĎçk†*ĂöÎô”îă<ůŕ‚e •ďp]Ëăń„dť+šUýn<žćěU( ;ŮQvĘ0Ě  ¦ŕąź"d!^o>3$‘a/˘íŇĆ8x pđŽUIQź_רX”Ş űđh+oGuÓÔŰGÄ-äě®0¬m›ŢÝŘI"€÷É’Kßf[ý$Ý’čˇíA`ŰFL^ˇ°vŃć®RŰqQ±˘á¬ă¨2zü~Ż{ÄqŻ\7ÚIÖG orByň9ŕd-ĽŰţ|2v.f™>gšŚ-6ĎXKŚš’ăÍžÁVő˝î¶uÍ®/É٢">ěcy…|ăd˛ŹĺĺĐň$ż™ć7'cŻPš4Ŕ&^qăňuÇŚđ;…«.Đő˙Ią‹Ťt•˛Ű[#Ńí“Ë" óÍEš2Q°Zż`ß_/NçCH bö«ÓúAxß .÷…ÍŘëą]ŐRËŻ—9‡÷7en+¤xΓ8¬ÁsD¦’[äRÜňTßDÇűžÜĘÂhx¦•ĎÜźé´ąľşĆ^5uSÍÖ«éézv˝š_¶d$ÉŮĺ•Ű,ËĐYš†GC—.Đ)yKáľß¤Ţbç;±5Djĺ0ž°ř+R4;ŤóÄj…Ł"źÜ.`~Ä6(ŐÇčµůťX[¶â|“ÚÍÍ<]GĹŠ\LřĆĄ>Ëü™·Şű°MŻpŢpj'÷ÚÇgŚ˙B|¦µś§b¸ÜëĐQ¦çäoš,ŞĘfëŐĽÝ,>Ô cA’1xö·Í{hIMěţ`Fî¶Éč´…Ö=Łq¦ş [ś6Ż)˙{Á'âËBǢ¦Ű»ńŹö„•JÄč‚LfF(¬~ł=•ş¨0ŰfřwăBĘaµÎľOˇ©/ đŤý6Ęs{ąÂ[I¦o'8ęĽx肺8@0ę%Ág˛*ěŕśţ±X˝Ż4¬Q Ćĺ. ŁŃĎ-¦ÝKNË4ĆŢ “U@®)Í$PJUâµ\ďPz…M'¶ža:Ťő Ş;Ŕăa–[T+>Ćd€˘x#ň-‰"lł“őĺůu¬Ç $±©NĄ5{vůq±ˇ0¦Đ/@zÖ5óěŚZSj+Źd¦ü¤ĚţažÎ]]]·˙¤ĽNV®_ŘB Z|ký ě~ďm<ďyî:'%ËBŞśÖ^IˇwŘALSIuB]ż ;•,¦Ű“ü¨—}ëö#k}ťáT»ČQ뼏]iöËb/NŰ •x705ĹâbPěžrLżKŚ‚ż*ęi°ţ±/§)ŠiîT>ñÜ6äCö†]Đ“‚ďçž2P z…S˘Š“čĚşýÚg«ľ¬·<é˘×Ń—ť˘ĂĘŘ­_( OŐŔ’=­Ń iG™ě®ČĐ*6ďËZÔ¶ŞE’=‹Ť1¨yy}ú  ÚÚç){OĹ/dqYz#˝VŢéH¦cˇBŞA‡eźü/őGEC÷›Ü–" `9ą]TŮbp¦&·ň¶AVŁ»(ąoÜ ‘ňT‹4ă!ÂqîYaáVuźçx­cÁśň.{"…ă6ÝŻÄä]Ť„ČçÔ9)NT»•"ż.–ËE˝jbśĂËÇéRč,ô8Ál7˘ăç‹¶-Ű Ô. “Ślé ¬‹oŘýŹŻ%&+@šÔ9ЦâÓ•őb¶1ˇ92u9i­n©ˇI‡¨E;úQ~°Ł¸Ĺ(@âEëóĺj0ĄĚł&l?bŮW/°>AôAÔoô»°$&ő2s6˛ď´vôVIďc¤{ś íąď¦.ř­á 8sŤŃ ˛ď xÂďqŚćŤu >JđU¬ą›„FüĂ‘R9ÁyśYžNq\čĽ2˛EXg4[Ϋ‹vµüďtóʦşďďF€ lȧÔ MO ô۰™˘Ô˘ 4ĎÉŻńťő\ۤŽŰ›^ŹeCÂ)¸)čĺč—ľ˙ţÉŃpľŰt˝3ś}Ů–Bź 8©€—ĺĚŔ÷"ś DëRĹĎ×›R-côP)IqÜL;Ü `$'Ţďýę+hđOzrµý–D[úچÂÚ†Ý^řQQoäNáGţ=–| ç&4H·•ßPíˇľćŁw ĺ ·b†‰‡ p÷QĎ]Ąď˝x¤}ß…Á¨ q—‚(ĚÎLăT}?üW /áendstream endobj 499 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3284 >> stream xśťW TSg¶>!$žú@ĺ4ĺśŇŐ;UlµZ«u«˝˘–bk}ă«‘·žIŮÉIB €`Hxž˘(ľ@«­¶­eŞSGKµŇi{Ż×şl;˙ˇ?sďýřčÜŐ®{oVVVV˛“˝˙˝żďŰß/ˇĽ˝(‰Dâ·ęíő‰ń;6(w$¤ÎťóŇúčX•rGŠç+=ŽřY5"ńRďÝţ̤iľč…ÉßMě›DyO',K\ž”˛'5X•–ľ#bUäŰQѱqëwîVĆSÔj*µ–  ÖQ¨ŤT5ÚDm¦¶P˨ĺÔKÔ j6ő:DS+©yÔ›Ô*ęmj5ĺO*˘Ľ)ŁäU‰ĂkŞ×9iôgďHŮ,Y©\!ż2&“–Ó»éož(ű‡±­ă.ŹŹ°hBĎ:ŰÄ-¨Ĺ翼f ¸E™[ăňE/‘§ă›ź˛¸7C ›¸f´ˇü¦ŐťŇΩ+ŞÖÁ2 ŹzűŔŹ,s OŐ蔟BQAŢ6n;vć‡i 8ťÉ$ĺ-î`Đ€­›kB«dL㮝˝č˙BňÖGálö~´NÉ’h©ă\©őąP§ŰµßFĎÜV~tŰŹńZ‚ŢR”tKJżwüőbŮešiüŞ|ńř)˙a/ąN)«‘ ŃĆήaµ±zÍ ÷x>ź‘3©+ľŁĐ— Í[«`)Đxšü02X[„˘ăŔˇIrć˝ŰŕüCŢ&Z‰ę+ÉňP0Y[şQ‹ÖĘď;P?[LűĽ¦Vśă’f´KáDO.ü O<đ,IĂ“UXqk&zĐ@c˙ÉzˇMˇŤÍ Iض-a+„C¤sﱌŁ%¬íEťĹgÜGŰŽťr‚ŁĐ©r„;Âs×iŁiŇ‘ţW)•{č%·ÉîI‡6˘l…©ÄX”CšjĐňą»ńT<~!–ŔjŔZOˇžS¨…¶^$Ësôřy:ŰŔ—W§đě!”kŞ4i€ÓrŐ«YeűŽS3ŻĽĎۉĂwâHäŹç˘Ő€ňA˙â@4}x“Ír‰ś;»Ö÷ćĄ5—Ţ@GüIâ¤$çg^»˝a1lÝžŞ˛÷±ĚüĽFĆč”ý`Őćoç~ńp\ÁClx H6ŠŤ˘nŽŮĐ€ţh*6ík ů Ĺ8Ň5Ň2ýęSéx‚ qUé‡sť`Ş:Đö`Ď™Ćř ŽÍŰ‹e¤@‰Ţýż-7ˇođ¦ó;q©8YaiNn 'p V…;Ëăç~WS–OĘň'UŤÁqčä9‹[–&gfŘ­íuh6[qçÜŕ_ L`2đ•Z—¬O<ĺ‚P_jmöT`H¦4.“C|Î!AvB*NFO*ŠO§4ĺ–&5GŰ"l!ö7ËJŢ·¶µľ Č rçę•tž ĚhqĎVŢ*Ťžáč ˛Ôz˝&OÇďj€,Ŕ>°-8w6®4±ZŐ\Ż˝”íŇ˙uźzyţ–‘‹^Içô7 es.䀡€ĎPa–ĺ3 v°€ŃXí0‘şťŽŽÝ' 1pîăŇ?{j.¸EijŃké(ߍVĄű˘˝dŻí­ÝWëǢźĐ$Eń9YŠśéÉۨډŽ.*ţfŞ<ŽÜ,š*'=ÂSĺä‡$&ká;ż›®çUě ů»¸1 Oü›ş¸~8ÔożHű ĺNčF­„Ó3 (–Ľř1CáD`d{äKFÚL3»n‰5ÖvłýsŕjČßÇň \4,…ť‘ŹÂ9,î•w˘ś˙E0Í|Fáľp=h.ĂAŕÂh%d¤?Šöł¨Wľď˙µŕQ"h\÷ 7:âVvů2Á#"ů:źä>@HĆtŕŹđ•€˛~żöŤeŔ-óq[/ÍĐgŃŤAWÁŔg˝ÂĄŕsgÍAł€; ':?̚˒TĎS%iâËnß›böđ^1ŰŹY+ţY PXÜ©…ń†Tŕć“svŠRů˝\aŻ×iđ4lcßDÍú20p–şN‚OrDěĹ'A”1ŢÄ17tĘŹ@Đڔܗ™łŤş2ŕĘŔZl)A«ŃU¶´şöHźqTvHv‰{żŰ÷ĆPŕ?ţ8čÇÄ ŮGň«H~p/“üíG†.3h …9ĂĹě&Ô\Xj0-śĄľŞ<ů§đńčIOę…ý…¶άµĆ›÷b_¬c· *ľÔhóŁxRďËi’Ny ě|ŃnîcüwS¶)¤VÁj+GÓQ;{w4ŁZ<XŠ®łu§ZËÚŚ#ęěĘtŁŠŻO¸|™$Q7¨(>Kpš·!w]˛–l»Ť–ĘuY;:vu†VĽ aI¨fĄ.ľ2łŔYe©3•B˻Ɩ¶{3ś„ž¨¬WhmĚfţuţŤxnŃÎť› ¶ÓŚfQö·)ů÷ÁéCőÇifi$_µă¸ż>*/żNăy= F3+kńÎ0˙m×f;UüŢŮ´ČúMşĐ.Ó%A;ĐęéA]tˉ n Ý›q}Ę=}«éĂßĘjĺÇ>,MmŮzů‚iThcÔkbĂ’”á»B v×dtŮ„­(‚5;ŔXVqňěY[ tCsretUDÁú‚BQˇhzşř Ů3ą¨ľV:$CvEŠĎâIâ9ť‹Â;ňĹcvăŐažŐ%ĺ‡ڏ±˘‰Ş€í¸ĄžŰeF9zö^BŽWśĚ6«ý845Ęg÷?&5…O ¸NřÚ—šłnô‡GmHË‚>!K7J#Ö<’ť»â2¦Bó8@b±2µ=ş.„;–¬ŹiX‘†™ëÓ‘.BOkSłf%Ë,Ą\Hˇŕ3 …9™4sz'z›*Üź`¦.ó`úá˘sE‡­ĄçŰ»ëÝGZÎ@ĘŞłeB!źA?eĽ-#ČżO::Ĺ|“Î3E-źż)`.äÂVkÚס:aď# Źšĺ.@pVމľí™ X@ÜR*~zđE˛\DRÁAoGśç’í2ăVm+Ü5ö/ňĐGTŁőďwWWT#¨VWűîďíşveKoXďć+Hv%©zýo/ń¤8]!Tj›Ł ´Ű"hć Ş%&BPůφEA9KhfЦ`{E´3-+kĎ.mśNYÝľ*32\I(˝ląúëŤČÇŤäÝSvŐÚ¦ë m ™T¶áťu°Ú?…ř·ŁŇĽĎmi6šÍŐUU­‰‡y| ×.•}níČëPUwµvX× hµľ@S¨ć3íę (g‘PMăMRč“´»ÓSrŐI‰‘@3ę÷Pń˝ąšf ĽĄŢÚě¨-)mh8_Ać úTúÄđ8E^Čk[gŔ󰦧ř4›ĄEÇş;Ž ä]Ŕrâ+Ľ!{>ýĐĐsŁČyŕé/ý–§_!kT±´Aţ>ş+cn?ާůĂ•żáëü@L=pżîęou^žŹ}Řkb*ąśýęÄ˝$y4ńĘ{ź˝÷Ás-ř Žß›ˇß;2h‰Đ †ĆBîA[ŇzĘśDjě@žG}OüOą4ţZ*o`¤!˙t­˝“ťůmüî‰6~µÜö˙˝ź¶ýÖýô˙†z•K\^‰ěV—Ü=vpÜłc˝7&ŽÂi4šŚ&“±Ř$\?ž˘ţý~ńdendstream endobj 500 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1254 >> stream xś=SkPSGÝ››»M)EĚ5ń†Z[‘N­-‚€ťŽVG‘"Á ¨3ÚÚࣾđ…% &ň* YHQ Ś Á˘"SuFJµj3`Z…Q,6řŔ¨ŁNŐľün\¨˝ilwvöÇžťsľď|g$—!†a†Îš=/mýćń‘áIKÓWoĘ\á» !Ôülś·€#, ”Á˝§üchĎŽ`ä[AÓb?צ-ť5;yîĽÔô„BŃh4ŤE±h: GăĐxŤbĐ4Ł!’ ’ŁyČĹÄ0©ĚiY„lě «błŮAyś|ąÜÍAĎeµM¨N:‡źĹź˛^ĄšrŢD.„&rW0‚ŽVÜLuś¬*Z†ű`tR¨t4wśşY{TQ†MĆňŚJ­ÂOGĐčâ``Đ Ľ›őŽ„dŐžţ¸Ka¶‡öţvŰŐ˝÷˘úh(QĐ|LÇH`ĂF řNÝŻŠUpC•›4a)á Ü„%–\]`Ô*>ˇ×U[§ľťB‘„†ăvhäŕ-üą9'g’¤Î¬ňÎĂ­vŕł”ŔuĎí6t»»‡ówánŁŞ¤cť~UîZ˘ůŚ|q¨Ş­ ĚŚÂŐí…çâ1ź°‘ňźsS¸7ÍĄűr“L]$qě?`őI¨ÎI~yłűž 3Ő0Fr+Ę߉„ß4Ł<'„µAD#†«ťĐR˙[Š+‚hÉâ­ 6j…sGż·ž"'Éáe[§č:¶”ŽHËŽ.ĐY&ö“rżü§o W űAP•dg¬Č^łe…)Ź,&Ëě»Zj]đÁÎoĘ}NË›|BÇśĄN(ĚRöőşz ¬w8˙¦Ř›UŤĽP8Qđ×—“™ůq‹ÎĂaŞżČ^l9±7óČŞ.˘yLž>>!ŠÉęŤT=N7‡,'ëöNś„MÚP×úőŮ×:H—nćS|]šíyo@ĹV,Q×tŇ}ĄÜ" !Ţ€˙đ>÷Űó¸W¬íe˝µ~(ĆôSzo~d, Ö¬1aS]ÉѢ–x1J0ôs”űŻ2Ľ“ň´ÖF™Şťá2†eđ¤řÝ[ş-vM™‰ HrZ¶í¶/ą-íĐę`ÄߥśMóTőO'?ř7;ĺ~J–&ŔÁ$ Á”w@®¨ÎůpŠ–ľ$=…€VNŠČČŮ9[Ţ÷uYtĹGër‚ŐÁ<Ľ™nćfĹA5UÁ5ę»dskęŤď§Ł%‚"żĘ-Ü.˘0ĽJ]Üm±Be›’L¤aŘVÂ0(H[˛!Î'ń®e^„ĂťPŐÉ ×Xń¤¨j.čżËiXy:˝2ĆžZcř2㫢ú•­Ő]çî‘äřš¦ôĂż‹›Úb }PôŽ~L®"­)­yÉń\‡Ń­ŻÜnĎŘťS»¦@gÔĆk#ÉRm‰ż¤X;ńjęĎƉř‰dľ"š}Af/(á”§ŐC<Ăů'^›—•ęŕţÄFé[†ŕjb-«&Š;jĺ’— ńĘ9>Á#U& zŽÝ~ńÜ=—{XôĎűEÔ‚Äít‹ţ™!‹x׫ĚU…•yÄHŠň‹óŽý+n3Rš·ł JJţK…E<ö,VŘe-« {f˝l…ő»ë±3ŔóĘČyę†Ŕ—Ď–I«Ü,m‹90ˇ;őíendstream endobj 501 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2300 >> stream xś…V{PTçżËrŻCDůÜě®ë$™FMhjcµIDDىĘ#ĘSDA@AdŮ,{ö!»,/A^ +_É&¦Q›8ibc22ÖDkŚéä,ýśiż‹µ±­ťÜ?ďýî9ßůý~çwŽŚóőád2ŮSËŁWeoÝ‘ş5#ô…9+’¶dää§J_4@FGFcyđ—żďŃ©ă/â¤Iß\ČIÉZśž›—ż±09%5-}SĆš-[9n7ť‹ĺfpop«ą7ąĹÜ:.‚{Ť‹ä˘¸%ÜëÜRî·\4ĂMfą9_®D6[¶ÇgšO˝˙VNŤë ~Żú•ŚÁ® ˙đyÎĆ<˝žlwŕ]đ%”äSďŔSN)śŔ†Ú+»?¦rP‡Ăʤ”˘YhĽË“›4LŻŹRÔké0;ŞŹGbĂI¦±˙ş1•'Ő(oúÚ3 Ů űĘK^L ď¨–J§&Úx–řüT)qĄÜŘč Ä©¨ĚDeŁgQ•d˛v4 cő×?Łăîě®ű¬adŐWt&÷'†xţ[âBîŹđsX\Ţ"ŕ,¸6˛÷¶Č\UěK]şDę'°P'°‘Ç ˇ >:IÜLżP6”l)ĘI—‘ E,śĆ“<ÎH× ťĐ_ź¬[]©'xMĆ>/qËĽ{0[цÓÂoŇ)@ôë<:3ŹÎřr@üřu;‰”¸úxý[ĹĹ)IŰÓ! 6µšNş\CUÝNŹóÝúÎĆžţ¶ŁpdŮ2í›őqú‘Ary>§őx˙î‘!ŹsĐ…säŁoŕ…­Ů`)‚Ý SQ>UŃqËçA,=Ľm(wpĎ…†5í˝uîÂĐĹ/ęŽĂUř,ÚDźÍĹh„°X÷t¸1SeŰg©ŢÉ"TVę KŢTĄôŵľt-Đ:9•¤ŃV=đt›ÔLżaOŻÔA~D_TžeL:°ă wKUź”לĂÝX×y§S†ë/Ë˝źQ¸s—ÖmëÚäHv&şŢr9O»†.YöÁu(_VY`Ţe©h†v°ě±·Ő}Éʵ˛rőŻ-1»rś©ss‹¦é×·ć¸JßÉ<Ş?ˇëŐ–jŁu±q»A ‡ŹńăĘz°BŤŰwR™ĘTX©kbĹXˇą¶ĘŢP]eëÎ> €0p©öŠř Śî­ž^7vxâ?$›Ć:' PŐ«ňr<ŮC—˙ŚI&]Sžł ÔËÁÖZ}F$â‡řWž}ôP Ý]ôÁ)µV©ř€1}ÜóČĽNÉ.˘„`LÄq8ą¶®Ęń%0ş3+“Ě;A=æŹo†s}™zŢŻV!Çźś:Ţ” ›-éV5ëÝO„Ű4†>Egn†x`ŻY,µ ľËü$ËRaŐ:ŐwĐ÷ ŕ$IůK";ÍtŇç č“aKŠ“äŢ(ôSXëK  vA…ŮXŞÝ‘ą, Ň!»UŰ[Úë8é|×5Ü‚oBÔT6Ęô%ĹŰĹG‘Şů8˛ă÷ @ůÂv”KC®-Äń€Sa}­5ŹPÎ*˙ÔŤ+%Ö/áäă’mFxÝ?“˙÷o<ŮKŁô†‡Ľnˇ±)ÝI¶ś÷]ď4…˝MםÄdfÚ!’î@úz{¶†> Żí~ٰˇ.y˙öÔd]ši—YkXw$łČ»˝l•~}×+ř`(üi¨ćbÎĄÁ@EW 9ÖüÖŞŁö¶šZ‘LÔj»vjp\ş\űyő{Ýúš:g­˝Ţn6™Ę+ËD˘^”[QżłCÓÍű¤FJ›­ĐŻ-‹‰„Hp ;Dňˇö˝j×ĐEÍE(‹Ö­»î?©0¦l\;fÁÖSÎS®ó'…‹lĆq‹>‡ľ"}˘řďy}ář—ôÚQH{8µ[3µÉ’Xťśľ–ôYĽÎ“ÉŹ ’čžż?ŔÎĂ#Ă›´ŹŤď&”łŮ ęÇ o™b¬ńď˛ \Ĺď!·C•ä 6IůŁ…?xgńd†3KüŻY`cwŔWĽ÷X˛ÜXݧ¤“ ¦ôô8¤ —ĺH“đ¶çm¶”bđ] ŢÁÔďLÍ% ýó(Q8ŘEQOfĐ'ml !Í9ŰÍ•ó~“ŮlĘ_v˘*—>7}Ăď€> ­¨pśÉü?zĂŘŢ0ö»iS($kH_2„Â&Cő­yn>ťzm:.5Î…ďjEĺG^ÂÚŇÖj±´ŰDdkk‡ć!މ…{Ň`ä$ö?`ąQ O.> ö¨B([ópńĘě{¸x= ń«ŃË˙Cc¬II«âúB[&üÇ"vç—±˙Ë$Nüĺ3ümŤ7¶[\5‚g<?ńôxßŐŮţ~]6»Ĺj·8Ş,uWýý9îź~Ô4 endstream endobj 502 0 obj << /Filter /FlateDecode /Length 4336 >> stream xś­[ËrG˛ÝsĺYřn´Án DłŢGĚ‚˘dK2őŠ–ă†}m‚ZŘt7hYóÇ󳸙őhT Šc2´P“]]ĎĚ“çdźĐŠM(ţ‹˙_¬čdqđűóżťÄ˙.V“ÇçGgŚ řUĺ¨c“ó÷á6áBWŚó‰Q¦rBMÎWżł)·e”“›)­¨†QG®˛çůt&„¬¨aäYť7úm:ăzbŠ´ŘFTÎZň8są$?7ëő*ÎÉ hLľLą©(5ö¦"8Ł–tłĂŻÇ-ŔGĆČĹ·…[N>¤Ţ]Ńű«¦Xîr{őá#aÉłÇńŮqň+á”Ę_§Ő4î‰.öÎVKöäň×+Š\­»©‚†ŽYŁb8EG.o.ÖM‹C)MÖ­˙Úhňęf5ďš‹đ‰U¤^Ćw’śd§Ů®®oÖuęBůO˙ÇĎlĆ9śĺ“•‚9„űˇ)—ä şÜÍ—¬Óľé±7ëw±ľşŚ+eTĺKŐ˛2T°´Ô—ÇSËÁň„ çYż§ÇŹG7JšJ;6˛O°NËTś,ł)Ýôqű¬‚)ázűéM‚K &mę·š‚A ň6ëi}“Ůűeé_ůáŁ) ‡˛,Ţuő:wżÎKwäy>ĐăWÁŇś5Ä;sLJ* 7,ÎŚYZ)Ą'3.+aqţ8ĺďý6Bgu—F5R ňgä¬T¤đ‡%Ú…Ć#UäÝůaülě ¶ë7°a]𭬌+°`]YGóř©"g§© ÖÎś1hí3…Ţdůć_s?âť6ö˦»ö}xv’“'D]ó[~ČyohŇ›ëa™˛4G¶úÚ»>xąVŰŐ\Ĺ1ą&§Íűéć S#Ť&k®Č”fĐŻ›|‹jĘ„…ÓQäoăVÍ´Hćw>5~ŻôęÝÎHrńaŽ_RYq®ŁZëQôŞ]ÍaW.zÓmă–€-.őNcY8eĄµNĚÜX/ŚĂpňx(vßÂ\ýĚžžüóLÓ‡«nxst,ş1ç*ĄůDčÂrŚnä˛mľ¦\Psĸ¶\śYč–ş5ń8‚ üĄ ň±‡ĂéĂ‹ŕOĆmůS\ŕOX˛C•äĹáćůY´¸\ |á=ŽĽđŹůť÷í#« ß<ÍlţQa:ůëĐ~fí]>qrhÇHíĂ•ŕűҧćŚäö-·ş ^Ĺ?=pV cŇyżĎŁG·čeî}ËŇîŰUăĐoĢüÝeÜ'‰“ˇb˝ÖÓv;Ţ<{}Yô‘ź8%pôÓvѬc0ejႳ¨q0ÔcR·ů˛˙  "#ÂUÎEţ\8šOŻo KŔîůčl­ÇŔő‡=ă…#ŰË÷‚S(ĚÍKŰčwľ/ĎHszpŘ7ž)"¨ÔޤD¸Oő"LCSÉá(¨ś?×q RÁĂ”^´7ŇŔ$Xź”§ý3ŚňůEŹŃCojű¶}żţ\w—™ŹFd&UĄ–8 Z¦’\Ř„k‚ďE-=KżNq.Ü»(űś> ôk`ď!?APç/Cł•br˘l­óÄť|XŻŻż;:úüůső±‡ťęaS޶[ý!řQCŮŃ˝€ÎŔx˘/!ťöoîuVńłuVú?‡–%•húß‚ËJ-Ë7Ý"~j‘KÁ#M¨0ł)%߼kú›ÂË›ĺ†^†ŇĐ Zč÷ÍÚĎrWp%Či4tló)-2M |Ĺ>pu&D|˙­"'Ŕłż,ŔáĎŘÎYr݇kÍ Yt% čÁŽóy™4g·Ź7G8V+u \ź›5*”ĐŰ› jĘaóľ›32„JĚŞ Ä$zůć‡H€đłÄ…¤)`ăj<őý¬Í©ŕě´€çOqAB@ICłŰĄŃf¦Ap!.;ňş»Ěrü"t$ťńşp}Q®˘^ĺŰ“žÎĽS+M"ă0jĂ·Vżȉí 1¬>Ď2Vć‡$L€ĐúŞľlę«ô’eĐ…ŔxŹ]b3>5žÁ`ÚV€Zwyâ"/ŃĄŹDoĄ|µ‡IÇĺDqŕçfGě ÁÓę>ţ*Ŕ4ĎîŠ)|±ĺ®eŇd$ť9XÇ, ääçg‡řóólż(ˇü‘áç‡Ď'Á§9Žý3XÝ—0d`2`ÎC­’„—ó<Ö\-0Í«Ľ ˝Žą0Ž­| sNë”dpč3ÄnL=ĺŮÂmĘ(ÁCaä1/Ě›;MŢtÍ şµL#tŞ,·ĆŤńČvRŻ‚x…-Č:]AiÓ:ţ”omóÇ4yo‰Ş=°:˙Bţ—Čî98)\™ŐÜϡ Ćl[rno/@3ü‡Ďę®lżô'¤z_třrčß?Ťż&ă˝)1jJ˝Í@’óčźÝ*ĺrĘsÇ8â†D%ŠTgá„´ČÎsŃ ůŁy$Ł’#ŞŻXLjő6eź%©×ó-šůŕĐ K¨âěX2Ćż–xBń´ĆëśF/1Ôxéę÷ŮL÷aŰü˘ń`gTĹfĺXj›‡!#Ž>W 3‰ŤśśżŞÎf0& P×]űq~Éu}ËřöfAđ…WŮÁgý›2Wü¬é| väĚŽÜžµ]žľhBŻĺôͬ·îwň„?ţĚHSršúóÖÎi  TŢt4ÇatĹíoVţtAHfçŮvŚć9h%ąäąK°@ˇŽw+Qe =ç«I0jŘ]’(°ú Á;‰˛° 4׏Y¤Wz'‡öÇTÉ`,u×řD×Ţ˙ °=Ż»BämĄĽCę zŇyâ_ÝBĐ WĂŹ"°ĺ`%^ü.ôďˇGýÓb ‡Ł=*"Çá:dL‘ăř$g q~í ţ Š®=Łm~{1ÝС–…ŽŁ>§?®ăŕuŞ$Ťó%ö%6qw#LŇ&îkj„›d—śž`‘Ŕ*łOµ@ ‡Jź6,dCĺ=ČzEł1k& ńŢ€ţ[âËó„ žţ(Ń5Ą!¤ĽŞÉe¤…G-ň¤^ף~ÁŃĘDÂÄ(qáĆĹ6”D]SÝŃx­ŔŔ$Wη“„1I†]XTÉĂxÁ=Tş@tÓ‰¶*ĚmZ›Ń}ňÓăűh©B2{3~R#ŔŤńE©Fž?~9¶Őä¤í®ń§Ŕ`<‡4ąíĹu§6 6ô#|ş4÷’7ůow‚d™ň—§CtÍTčL ęmÜ[›Ě[ůĎÍŐeűąG’%ťWď¦@811áÝťĂ<÷ FfbA[äj&ß6eł„ę0LŔ{\WBŔ§Ă¨©¶yőżáJ’ź`ěEdÇë#3‰iBLŕŁő˘Ç†Ű $𵮾ČÔŐËčµýrľŤ†› [ Ő¤ÚňĂ“WŤ WsÄXaHécEĆ1!>ŮŤ/đT˛sżî7ŤÂaú4°ą„4mĆý}5v¤’îY­zLv`ŹÖÜ^Łhd@­ —™EíhqŘX w•˘Ű,ç:9±0•đĐFĽ+‰GáJĆw ¸µ•Ľ]2ěA$°&oB»ů‹Ř¤ >r >ŮTاţMé?Ţd±ý_»‰’°ëĹ–®űvHZ·ĹdŢÂä[ÇH™PVŔ—Ź»”•ăŠÄłŁ–|*śĺ6‘žĽńyF –y~iîqu-ĚCz€ŹČk7 ëÓG¨‚Ćĺ — g6Rdąšwç>ŤËW(Kűcö'Î7řý•’mČz~ĺ,ŰĄO;íS©a…Â’2u[|Swé@8ňbŔ-9íhĄ­ŢrÁ»V—úTK{(ąłÎłYŤSË:Ö¨•‘‘5/˝+!0ľ°Äčbí¨ďňÄÉľ”u›ňÔľ‚¨™ˇ^´żŽ]$fEČĚ:ëa‰} ¤ ”Ż Ĺ÷ç»><żJĺN@68ť™Ńš>„@I9dZô–ŇŻšyţ«Ą%ˇPqäă\wĹĎÇiĄ'ĚsĐh0g‘ Ŕ^Ś$ýµŤ‚1_É1zÁ˘ˇ@¸H—J@ŞζřýéVĚŠXާ^<˝jüÜľ˘W~™˘ÍśŻV󺼇4zĺpG˛J‰«sä)âĘg{ă˝ŮËÄ~ĆO_q€ďřhuŐ{Ćd=`ÖźęŤůmĺ&K]÷ëŮŰßoŢ )E,Ť¤nýý±=$LLšěl…sž‘{(n?ß!¶…3C[ˇr+ží°ĹŕqĹá `‹ çś-2@l­AčˇZ W˙K¶Śâ^If ”Ő€™e“H0…W"čLý'łÁË}Ô0ćó ŢĐÉ6Ăb¨–ä >J‚Ů­!Dfś€9´ęA=.˙őĄ9 JPóŔ‚1irŢl]NćRřXëS)ń'µ)Űwőޤa©MLyJĎ4^nĂŞĎdĘđ·w˝%ÚÇ]bŞČ>wí*îd(•cĆ Ü‚ ißHčRÚg$Ş(>cS[·¬Âmü=«ĽÂýú:¨X2ĎjâoŰ›Í ţ‹,©o™»ć{U–†Ţ_rýd4Ý ôްÍ]#°I˝)ĂćĐ«‘îeXc‡ş2Rőqƨ:úŘťmř}k䆣dErĂ·Šž/ë‹úVÍr‰·Cě#ŻPÄá3듲°PŢTY _á•—'ńن| U{KŢ“xC 2OI‰´Á›°âÁ Îóâő|“%éň?WÁébaĹ1~ňŤ)őóîďÓti¤ŹďaŽ?Ü4—{,ĚĐĘŘár,ŕ”łˇ/ľu;.ě,]Ş(čl]|Nl|BZ¶ĺS§u@Np–Ďĺ¶ç,`çŹ6<§aĺßYĺEřúĆç¨52ąÚđăľ:Í—é jęRf÷‡ÓáoÉŢdPVţZ–oĆ.K$’8›ź¨ž3“ý˝ ¸ţ˝ µđŤä‚ąĚ˙yđ˙ČQMGendstream endobj 503 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 387 >> stream xś=‹˝KqÇg&W˝‘wCóA5Ú ŃT¨ąFĄKFĺĐ „©—y>žwVhqi/CŻdEDCQPA[sKă“ý†:zľĂ‡ď‡ďĂł‰0 Ó20č NŹĎtuŠýsăSU¶Tśg-p5Ŕ™Ďń»őĄĺąé±™TŹ9#䀌obf> stream xś­›KŹG’ÇďýöŔcq¬­|g ‹<¶w<°c5°yT7Őâ,Ů´IJţđűŹŚ¬¬Č"»[#- Cě`Tľâő‹ěę_CŻýWţ˝Űß ‹‡›_oT–.Ę?wűĹnoţý'5ú4$µ¸}wĂϨ…6ľWZ/‚ }2nq»żyÓý´Ô±Ô »ˡś jHÝŁřĽY®Ś±ýT÷ĂZ*˝]®´ÇHĘuŇ1}бű”îľ}/´ŹŰÓC‘ Şčc™Ă%‹‡NO}ó·Ű?cCQÉýččú"öt{ÓµĽýűÍ÷·7%Ełx8Ńąú.¸ˇ÷xÚ&Ý»PÚŮ^/Ž›Ĺ˙,olŻŚ5ań Gôgü˙wśęńlÂň#žMţÝß(;ŕ“^¸h Ť¶Dc=’zełg” “°ů`˛ÄĆ>zHBčuĚݱň…TęcĘ’ŕ{ěÎ^őÖgIúŕ&é­&‰l ŁĘŹ*öŢáÇ—@Ł{ŹG4ľI.K¬ďIŕpRyfç‡Ţá!ťÔ( ¶‡Ŕh,.o {é­…KŃyž–@’Ő<·Wľ7iá- ďňLŢ t°Ţ’S±Žµ´]ëő:oŇ»H#z§BďóŠ}Đ,Á:‡ĽmáśxĘS" pwčxü›ŠĽíŠů®†V6üŐ,Áî?…3H8 źŕ«ŮRÁ§žäŽ+đ8ŃĄ|0©Ď»"Óc1ÁĄ˛…¨T¶S8¤Ľ…U`Ŕ¸š%xË‹ĘĂEg˛Ą˘N˝Ď'}čÎ/âŚY*b¦!Ż%&×;hÄ©l)ř}oéˇhËŔI›lň¦śÝ`ąiđ|RÉ)(W¦IŢő‡™´%’$¤l&Äo9—żGz€$˛qőżWŘRÂróZô U‘ż×qtŇ>9݇%řŽě”pň,đ”H€uňŔp{2J‚gnßJÜ>5O)•jXÁńŁś–Ť2-N\$ăŕ#d¦i—°Aď­8 Ťmf3ŐÓŇ'[Ąž¨Öpü,)‡®5f°q4ŠÖŘ5ÂjZâd•jY­áôF ëcĐ%ŁhŻ×A8‘6đz˛Su4mŕőĘ _ÔĆ!ś¤żj–Ś>­ V6Ż×&Ĺl§ÚÂí‘Q¦ŕŃnźD|i‹§“Amáőщ0ŐÖçhY[ř|°"Öµ…Óű$ňvpú,s†vpz2SÍ+•ĄwQää;Ő;#ň“vp|˛ ĺ0ĹOÁńłdĚs9;›ŞćBíář( SşÔH®Ů05ĄjÇ'ĂÔ¬«=ĽŽ$53kĎלş)üH‚b dz×đ©lZtęź(:ŕ$S)ŃĂMµF1Ő#ŕřxxŞY:ŔfŃÖş¶»yŤšI ˇňâś±ŽÂHĄH•ˇüó|©„Wö­evO“řĽŇ"ˇI.µ& •uťµ6»r¨Q tČ›éFĐ™­@®iŇzź ŮŹ: O(©˝…ÇS! 8ó O0Óŕí —+E!čÔ(±Ybp¬ŁÄ_čÄ%ÁM— W`í脊$çĂě˙ŻŻiiD¬Ş©„Úť(?UĄQĐ(iř\”JEĐ(Y ©TŤR@Ä™(”Š Q*›™”Äî>Ëd‰™D!3#ţadq›lŽ•Ű¬”zdrc»•©?˝uÝJ埯ű”řąËŞ„=PęĂ€ČŢT°ŞÎţîP§•(p xQ ßěÖçíÇĄ&ߦŰ,v‡‡ŐnűżK>¨ľŰľ?î§Ĺ˙őł1÷ ~îí`h}8mdÁża÷źżěeĂ%ţ¦ üMsüeä¨ř«‡9űběëĚŚ}9 üUeę SaľŠżą6ř‹Bů"ýfţx~né•ÓĚé׸9ýň6%ýŞ0§__¤ßhćôËLÚĐořú-\=áŻS/㯵3üeŰ}5ţ2zKüőöüµjÎżń‚yą˙j*3ţő~ÎżS˙qÎż\¬ţusf†“ěü€Y"źjŘÍ'—Ě ”\Čz"`ŢçDŔĺ,¶vNŔń‚€óą?‡ŔŢÎîëŘ™9ó‚źG`§ćĚôĎ2p10Ď$8ëł ś#ľa`V20cžd`î‰&.¨aŕ ç ěôśŮ'žc`ΙKZ\2Ż@ŕ’ť_@`6žDŕÂł#çRŃđ/7d˙¦ ţMsţ ü[héM)…E—˘OŇ'K‡-Ąľ‘–Ťq9VľäfÉX¸k2âf ^¨ť(ÝX‹T«ÉË3—O´o,r8ö4µĆbµ0öÔ2‹9¨*Ö¶Â88˛W˘ő0î鼰Ťqąś:ăŕÉN49Ş–Ť„|ꕌ'SU¬ľdü›Î©ç2žś%ŁOŇ mEďfŕřdĚ©ż3±\khđt”Sźh<óËÔK"ěĹĆÔoš@üB:)QB% óËÔµš@üDgkBá—Úüę,˘ąÁ„‚05XflłMT9ďNť¸‰…`(U±Í#Ś˝‰aj×o"3 eĹ2 1Ś™Ó$2µŮŐ¤Â0ő¸Ç S/* U ˛ §q“ ŔŚ7&~©—!HšĚ/őÂÄ…_ꥊ ŔÔ‹4N 0őnŤ“.ś}żqĹN*eCŤ—@v(řRď‰ě@ř˘Ä]R¸šK_š§óKW|™¦¸¬ÔĹ)†—iůŠŕĹÉ-ę/Ó1č/ÓQi““Útś¨/Š%ĺÄQl$ f—j2«‰]Ś0«5Ä.QŢb—(ÜĂšÂ.µ°‚â™]Ş—YC종'"Ż1»ToEůcv©mma—Ńé‘Ő]j\XËčBˇăYPĐĄ†Ś.5­et©QjmA—ÉÖt©Ńn]A—šPž]jÖ°Ô˛‘ˇjfAÖez©Ů^j†BŃő+ëí’Ąź%c¦ł^qGPł!Ú ¦—š1­'z "©ZOEV‹Ä €˛¤ćfë ˝ÔôŤşŔôRSĽ D/˛ ŘŔôR+…%%YMl`|™*Z5—©(Ů@üâDá˛ůe~˝d ·ű‚ë%CM%UÇZ•mŠQ^/]jM’éÂĹ$’ĐŞˇcN†B«J&-«Đç7WL“Dhn‘„V•-‡lâ”ÔŞˇ5Ű·<‰Ż¸Ô2÷„MňR Ń3!Ąĺ  Ăx–¨Ae‰ˇ›•"1:nş HiĽH%ňÚçš»Ľä´úd˝ŐµäµVŐŞ×ZUKÜkU­zŻUµÄĹVŐŞ[UKÜlÍw$´ľřjËĐđ˙«®¶®cŞűň«-P2‹‘W[oşóf˙˧%ň‚Ůtë#ąC·Ď«¶˙DĆűąďú<řţçî»(g”P.ˇ<]@yšCąI ”ç&¦!rćxIäÎĽ@䥡šĽô\‚ČK_69wn/y˘€<čČKłŮąqs ç]J ĎŤmäąů­@>öÇ Źçşáq.x<| Ź3éK wjä<—rkç@ÎĆ@îÍ—9cĽň|mň[5'ňxAäÖ¶D^.y"ĎA ‘3'OD^î“$g€hÜÍ™śÁR2yľŢjĽH“óS’ÉÝĘyň ĺăú•ÔTÎŰś¨|< Iĺ|\’Ęă•çcË˝ťc9Sĺ×cą3s,çK,·aŽĺNͱĽđós\ÎKĂĺaÎĺ<•ŕň­•ËÇ€n°<Ç|ĺ<®ÄrćN‰ĺܦMX^rPĺAϱ<ç˛ËŮ+žĂrN›‚ĘKbT^’Ż r5vĎR9[ORyěBĺąT4HÎMbäiŽäiŽäáÉg7^Vń˝VðY2żńş í+Y#%Đ€ŘÚŕËŰe˙µ}oŚ7ËÜ ßë.ĽZ®Ľ‡ŹĹĐ˝:»íť|¬Ľ†śčbw*Ź+ÓŢńçduwć÷Ě,â%ż®6Nńóü=¶iŘĆŹ<˝ĂWŘ °G‡îç%=O¬ăş‘I()ŇôÍŕ1řč61 *${ŰĐÝÓXD¶{'”?7ßä ›Ťź·‡Ç˛E‡eu§Ăn{/”yˇ–ř©üp,O%×ý"äëăzßl }ďx*kŤmŢřĽ4HkŁĐçňŢ»}~ďâ-=¤V3(VzS–Čsa‰4ěŠ8+Á˝W”Ő€r¬9·¦Ł uź¶ó·é ď:y*ëóšľ S„î#[NŰÖ‹ŽżM*wň‹ÝáT‡í·ňqă’Ú™m÷—ż§Ç“E"´Ý©_®¨uÓ}·>˝ĘőîËěÖÇžtĐSŃŠäĆŤšÜîötnľk˘m‹1‹Ş\'Wł~+ĂmÜŽ‹ŤŤŽ‡}ůBŮ'öďŠOňBuşşt^au‚»’ÍłĄÁÖ·?ŢÜţë›qclë{ńyŰfMľŞŃh8´_?˝µ<Ť#‚únTÄwżE ÇĂ’<]Ć?¶űu´éË @qಠđçKČ“8˙9"Đ;˛ŠÜ!ĎaÔ—ćü¸SÝşő’"Źç9Úçąv~<·yv˝+{B/˙¶I§ń uýĽşćźđ+ÉŃŰš†ŤĎg8 ·ĺäLć/˘ň"rżäڧAůŕd3CˇG·ýo´ş67Şčz÷›ó9× Ž"×të»üUҦ»űPÔ‰[^}™YŃ{,iůŠ{"›AÍ˝ §śĘvŞďQłí›./]Néĺłť)]:TşöŢüîą[źľ_şÎ Ŕ ô>ÄÜüwßÔ÷µź»Żş>žz' ďÍev˘ósݬÚÍ#‘|C»zF×˝řJbţ…ŁŘy×]yiýɇÇH¦y˝B>ˇy˝ Ös<Že JĎJÂč®ů[kŻä´śQ>n—ŠÂŐeϧ@-cżř„rďß śÚ×đO§ýl‡4AŢ?ŹNęĂŞF.ęÔÄ‘‰V5Ő_-ę‘~ż«(Z 2p÷¤‡×ÍWż•Ç>ź¶?!¸‘đ?˝ĎŰuhÇŕń˱öÝĺü§#UAÖuWJ:Ť1ţň#}¶™˙®źľHăBtĆŃ<´żR-ËĐOĐŹuIcy8–¦tg ÁŹlŢUďó_d°/7Ł5•ř‘Ő ?žôńŮbňIjßí)‹\ń§ű2¤Łż ˇe!<‹•.ŁI˙•ű8ůý‹°ůůܰÁFŁßŢ T©ÇmăP{ ]¶zÝľoŇ&=‡śUŤe4˘ OE}kcĂgŹŘîĄwÍÁR˘=Ěű˛ [r2}Ćą]9¦)¦ćü­ÓŻg™żďŹ7LJÍăÝ懣ŠÁŤţI‘ű–Ľ0C!%Nó.—ií8’ŠĆUôÉ©€Ë÷ŽçlŠőř§GźĘźµ·»ťD€ÓůČĆ ?)BĘ%ŢAنółÝzüŁŁĐíÇÂŻžÉÜ»'tń4Ö9ż*…ŮčŮźőţ6:çO˙ Ľ×67HâȦţ§ŔíÜN®š~˝˛Â‚•Jóxx{*CĄÜcţ¶Yą|î»Çm¦ GéëôGn™×ŇĽ÷ý ú`C•‡űďł;_Áë@o&Ó«Ž8íUô˝MÓDţçn ’ĆępözÔ=MĄű°ů7ú•OÖGšůú ĂgYu0‹Ś°©$řďkÜŚ‡ôú|O+Ł2uÄ^¶›Ç3™*ÚńÂË’t÷íáŘ·ą›ć|˝}čżŰ>p·čMăIę÷ĽZ>ÝęŘé`+*¨égô˘ž÷Ç‹IÜ)AbŕŠučŰúŮ,G<ŐżCÇ!„:"5%ç°&$9‡Rí®4TĆIř žÄünË$ô;ëĐl$…8Ym5·TěV©7óYTł­qz™gÉÉY2ą†µŇ6łhőYłä_ ­ŹűéËü»ÁfO:†fOÎňĐu6˙9{*ŢŔľŽŘ8ŻďÎżm¨_QëŃLŤĹ‚Űv`ząËl±ä_´Řč÷<ń÷[$ŽŘŹë݇ÍiÚQÁ?lN§íúńŐµ8E†4LŽŻčJ\9!I•ť‚Éőp3í~Ś’{ŤĘ_[î·˘\ÔČŰcqë‡Í4ß»Ü˙ŹIęn·uyâ%Ś6;}¸»Ă0ď>ěÄb˛+˙OŹÓů¬ďď·Ô~ĽE©űćíé°ű sĘúń~šđČżDÜ,e~ĽÜŰÝ‘Ręv=©}ÚLJPŔĐżÉß2ţEÂ_endstream endobj 505 0 obj << /Filter /FlateDecode /Length 4286 >> stream xś˝[[Ź#I±>oýV¨…(ÖEŢ/ËYX 4‹ÄŇ< iĽÝîžb}™uy¦™—ýíDDf–3ŞĘî8¬úˇËĺĽĹ%#ľ¸ř»kŃĘků˙ÝöJ\?^}w%éíuţw·˝ţÍÍŐ/żŢ´QDy}óp•¦Čkxë­oٶ×7Ű«F«ĹÍ?`°šŤ®•*ÂŚ›ű«×Íď˘V{)bł](´ię·›Ő±{źľń±Y/–Z›VÓĽęvŐ°oń ŐĆhšŻö‹Ą ­.6÷Ő‹‚ .4›'čVĐó҆ţˇRę&ÉČH7Ç@ÁYâůAGb«@q—R·ÖD•µXj”„}MÓwŹő‰şOŞ™CQĂŞMÖăr×( 6ĆÝî±;öyĺ`ÎńP ŮĘ2˙Ü=¶żí_Ćòişě´ŹQÍSÍą.]G}3 ™2ß /ůE>¬¶™…ćŔ$ÎĐBYVĘΜׯ#[í°e+ ĺśňl‰v±ô"‚lmóű]&vattEŻúá` H˛ K‰FÇǬŔúĘĄ«]Ńž„}dźv)2Ý "JđžÔA(Óđ±`#ŮF8˝µN8®K諾+ÎčͰ@řhަŹld˝Ä§Čś‡nú}Ţ%Äóޢčµ21źav-Éa!Ă^í˝Đ \(ÂŐ†Đh’$÷eßlö¤­¶z";)´šBt-Ćŕös‹l­›…#őhµG¦w»é]OăęQ¨Bőxuu󿯄 _6µ$P&i¦ ŰĽúë›Ëš›  ĽT6›ýă«îŰv}8ěsvFăŃĹpôo°ßJ7O„ą9ÎÝŐ1}rłťŢSăÔă9ŇWŇŁű„gNöětSß‚Ny¤Ľy- µ®ô»™t¨íü¦ą¶Ütß&˝°ŁK˛é8“–«f‘ĘV NFĹ&VăŃN‘Ť.~IŚěCVů`,¨|†HÁ1»ŻZ«|¶ŹöÁ4/ Ń×ä9#Ůłćň8Şq®µlÂh-®.x+˝ëX­öM…vh„¦îĹ{źň&ÓŞĂîâŻ?ŕKMN˙ů™<MżE#ŤĂ¸<}©Eţ8ě*g´–vkHĘ÷­şAë„›ň^¦9ɰźäňč; î+§v#ÇŘ őQőŐ‘ú‘“KŁ@˙Ѧg˘O˘Zân!łÁ>‘^d‹‡¦qÁ!dWçZt9ruä·(R°č“*mdVŻfôÉ+ÓEvеAéb˙¸Ç1Ôý᱆ŕ(ř‚żÄÁž¶Ţôlůľçţ7a-usĚ;ä[ŽĎŕa¦ÇŘgŕâEĽM+ČĽ °QŢ&ŻMçDÄŤuŠ|ĘV+˙NÍÁˇ“Ő#2ŐyßŐŞ•Á;;N6˝>‹tg–+H4}1ăýî+‘fČ« Ă„4Ř/°°¨ä§qČú<ňŰĂnőM=pť°íkô®ŚĚĹqŃ&9”Ó°›}_–l $ťGNmWŤŽŹÝ6kFš•×±©Fěňł dV\mş1ěHڇNŽ*˝ˇťä‚>ŹÂRÚ”fő¸bĘ…!0}7vő .”/ őt!łU»t!)}ˇňCÎXX3ąéÉÜ`˙¸?těŰmY#˙î>ݦG€vÔłXĎÂu»„őčpŮűZfwgŻń¨fůв€y`}›ť¸·×#J«(P­F§šŻŚi`?+zţ]w<®‘XŹ( ˇŤ“”OxłĆäňŕ=, R;¬ď»;”sź"€ésů—‚7Ăeý3— QçŤÓ™kÓčíaµAéHˇŹ0¤ůPĺL¸ÉĆ÷6Ą'ŕŚ¬];ą˙ŔHÉŘHĺ%87¶ôĺ3ZÇń{5ó¤U»Ń…Űł›‘w+ĹjwÚ†y íG1Ę?Źăk]™ýűĚ0:5 :ě·ů pű«ÄĘ/^}U¨vç-‘Gq.v'—îԮ˛ńŹY`»Ľ±iF‘ę¨çÓÉč#€HzÔK®Q'+Ź™FůŢwLĚOă»X¤ŇÂ1’h~óańsTc‚ĄoŹ ŮŹOPť,Â7PRĽ–PZó~µ©hŔŰ3w' \ˇ4µçůÍMQeS&~,žç‘ĘĽj“™ ú”"’VŚSĚ^•Q—ˇ=çŚ> D}ŽR d–ĺ™ECş8LřŐb)ťŁ4Ăgřh Ű~6z›u°›ĺ0Ř;?äoł^‚)„ëĄR­t*ŇŕżăXřěá˛:|OÚ0:;°ĎzŻM e~\v0,ÚQŇGŕ·uÚyu‘y†Ô Gb€TX¨µ¤ÄÄ÷gX([+­zń!ňŇgˇ[ćŮ«‘ 0Ô· P[¸†y„óŁ0äŚÁ+i2µ{=»_hťwŃŽ¤4JŻ+ 8­Ö6gL§ŕ^#ÖD[€I%ĘŰ)Ú×ĘŚĹ?ávb vSgŁb)tël ‹żĎÎh Äwö9Ei’€ŇJ@#Ąů<Ĺi ĆDnpÜeÔĆ˝ĄA®ů˛2ßŐ„Ż¸B‚żĽąúÓUŞ`ŮëĂÇV®Ä ľ2A´RęTľBšň˛˝žŹ­>Vë˝ćVŚd P׌LÝŠ§&ﳪ€cJj tLÂ7Ň×|őŞŚ±#Ł |”(íçÓ'\ŞŔxwĆI¸:ŇۉIj'ÉžMä5}ˇËëś9¦ÓlĽ¨SŤ”0Š'–€ŮR´m”g–0 ŽÂbY`żăw”A4,A4–Ä1Á×2›Îś­r€7˘ë‡„xçîčYĺ”FXŹÝńŕEBšmŃľOz.-[ŹŢ'ďô ‚Ă”&q#ŘfËĆf6ä0d6?XD‰ŢI4Ž"Ň Ďű1fÍܧŘ1Źş¨)c~,•ĄeÉźđ%Ôe&–ÚSđöggę’F!ŚhÎĄmI´Ú pwSŠâ<şH(r™ż$8‰xr®¬1îňft‹(릤GÓ#%Ĺ%©űŚGâް‘2F~<"ůÇśŕŃęIůĐŔE٦Uö3‰Ţ˙˛źQب®Ťv-¦¤ŃϨ˙ÄĎhJ4ŐëĺrqŚ)ţMźCÓťÉĹ AŢ´0 (Í„>‡žĄĽŕsŇŇýéd©ć@Q· ĂŇţ\}µŽaŐ¨¨ÂHŠo›®Ą<°Ł”Č|ÖĺIh(¨çďç± ?ý˙¤ŻQťŞÖ× )—(Loó`EŹ)ˀᵶCd$ĺÍ,D©šď°AľMŰ”Cbžg\ Ô_H¶×)‘h,ͨ‰ĎSĎć'N•&śmä‹â7=»TĂŤÄŚĹĂ÷ÓĐŽĘ,™tdÉşý¶[m(‹I‡ćá|˶9ů“ç€ńm댉iůŻ ĄRçÖ›őęţ–NVŢĹć˙–§ďó™o›‡­ü_[RÄÝúé~u\ĺ>?=öďľé×0ă©Ű­«)ýzłâ‡ĎĂ Ů,±Ć¸{Ľ]Ü.~ ,é3Q—vJžčXRĂsFpĂĂŁ¦uEcň›‹ă› ËţŞ­ÎG8|&<z áLô…^Ppśú•PÚÉT=Čs”k®€¤~ mq/]ďŞbŤ˛žˇ˝w`Ăę…Ť ů^pM•†í×UQH´Cş˙Ü´ĘŃZ¶-Ě Ţłm\i_Á¬ZomýJ a˘śŻŢ‚Q'ľşhŻIyµßĆq ÚLqB*AëşęuJLa§ZµC÷8n:M«Ť2đtŃi5đúĽRFۤtnjy ĆóĚ:óö÷y¸ůÚŐńBŐŰ3Ď›něëéhڦؑşS§Î㲙oDÉlŰ6g¦m+í®Y1ô\U¶’ˇV â7Ă–ŘÓ¸7ďDëě)}9}b@+ ŁŽOk÷9¬5ŕÝYXK/˘ż¨QÂa¦DŤ<&đĎ%Exf>EbÚˇ*Ń$ű?›"1­v§~óŰ !'SŕďŃ-GY:I8X©j|†ö^ +Sl(㓨ťU r`9Ô´6 ŠTRŻ^š#K1yRČ1ŠęKëřaai˛oÖýzwśŻ&„6D7PÜŤBŘ #uK!Č󺋜tC čąâĐňt©€rv!Ŕ łm7Ň’©a›řć8„©űÎw"p”š =oOĎ›Ižö^ČÔ}Í#©ľś˘Ňż:˛ÂŻ E+Ľ4Ęă ,îO˘#‡©ŃŮÎ1/©s °†ş>§-§´€/Pú¤ž§€ěđžV vTŠ-ĽQÓ6˘L3k4Ąťśmx_č1ʦv¶Ę ¤Ţj ĺŰÂ7˝vČP{9Ödę9˝˝Ô‡–‘ÍŮ {8ż‰)ŐgZЇ1ćăś‘§)ÜťÚ6ą«S–‰„'›2.qmđăź?±\lć=5¤<ßSőBË–»űĆɤËpX@<ŕ‡ź-?Ľ]ź˘ÂĘ~˙ôŹüÓYł ÷ N;D')‰—uôÇńOnJ*N«Ô¸‰Ě¸Đŕòľ›ÔĐOÝćOĄSZ»ôą—´ŢůTlNcQ9ĺOW˙Î5 endstream endobj 506 0 obj << /Filter /FlateDecode /Length 2992 >> stream xśÍZKŹÜĆÎyN K€ş¤{ö»[‰ ;‚8‚XŢś´IŔťÇŠŃ<Ö$Ą•Çż=Uý »93Ú•%â4»«ëńUőWÍýv^•t^áżđ˙r7«ć׳ogÔŤÎĂËÝüŹłß=3FJ[Y:żŘĚü:‡Q-uiąś_ěf„‹ââß0™V<›]©’2 +.VłçäŃ«˘*+É5­,Ů Ö.H:ş­ű浣-Y ÎEY Až4űdÚK|ÁJkyz(Ě”U–¬’)°j”!Ű𲪠ąmúţ—UśŔóé5˙¸ř‹3Hf)YVĘŰCžť±ąT†E“oéőŇ&P˙úÚďĄ*Áİ—N Z2Ęh”th˝uŢ Ěő¶đňX-8‹ ź/¸,ŤR©FÂ0kI{¸JĹ\%ŻšmÓ;u-Dčm±CşĄ÷‘ĺ  ěĽN–A[ĄzXĐ‚3ĽvÓ®WͲ/—Űť÷_®´2%—ŠG«űúeІŃŞD!ě&a3ĽP¤N˝ź>·Ś…řN^ăx őę*Ž“eşńa—JJ±ŰźT°ŇGsă`P×O6LbŃŰ‹Üđ¶=´á•m6űFe   ~h1_P^Ja™ Â?te(ŘEPa„ˇúeeÄB + ’IČ+—V¸™Mś™í­@ŐlžĚ|N>tŐŻśl×MIh¸íĚś•T”F%‡'3ňCń›“JK­5ŹJ˙ęŚŇT[}ĄyÉ Ă”Nf^§ ŞKŁŤôŞŔ2$woCŮ‚8ľu‚čĄőË(Äś†@Ŕ¶i7¸ŔJα~5…tĹs0Bµ<ěC1ă Ńŕeqs:§‘|WŤ,0ĂŔµˇHg32‘±ě2™‰|Xś„!µeĹŚ…RĺQZă]ÖeN$,¸Ëu}’Ç Ě­ wÁSč{GÔĎá ˇř¤žV¢›`K®­˛~ŐĹB*Ws®ĎŘOÁť4Ö@°Ąaŕ˛cĚżčNáźčŹ/f_#Úůüşi­[ š¶ «ť+SÁbć»0bŐ0˛ť}s–HLÝč[2 B•-eĺéÄgʉŐňÇV™ô‘±TXÖ,†´b9”}¦„˘xµšţ?EřŔ™-¤1Ú?ş§9Ěó‰ŹbŽĄÂ›Ł8żĂś ‡’™ `!ďE©Rtr^Y8‚î‡ÎIŚ#: >ˇçJĂ®Ú8t~äsɨ\µ‚¸Đ8×dÚv ؤßůgçP,ڦ›C0ď6'szĚN¶–Ą›92CúűbA©RxHť)ąŚÂ|6­¸ÔzÄÂqw>†'‡1RGw¦{ó XbÍ‘’iţW—OH;Ŕ(É'Áé=Kýéd‰ŘŇdĄţ4€3jőľľ_j~PťÍĺ “ô@äfBnăŃA󙤥†™ ˇŔBJ=DiK U…L‘<őŤˇćذ,ŽLź ˛Zo‘ ×ő6«őľoúć×ő•kظk842P¬ŢĐ˝rvŞ5dU .˘č˘‹ß>'ß§ťß †č ÚŢ‘YĹ îx®qÄŽC%®” ;$‰Č脼ďěÂBŞ ¶8\`ż®˛+m—@O$ČB)‰ěú2ŤZjh8íi%Ă5Ă:ČWy‡ŢÖ‘ńzž·tmÔŻ/ę"Ţ: Ý̵c)AžtźÎĚęÜř˝×Ăr‰-˝—#)yôäiŢXE’oô pÍpH+(e`÷kŻ (WşŢFż Ňz?Iˇ$©;ç? ‰O=ŰĹÓBj"Fşş†SißiŔéŠ]ómÖűK¦6Ö~ Ç®ýě@şŕ Árxe7 ŤSw«$éîů¸§A‰JŤ8“ę]8 ňhŢCmë®ôKľÂ0T p?t#š’f(ÉÝ()çI™ÜĐšˇ¤&·ľ„8^äçuí2Ims•ÁÇ/ÄtÝ«ł‚wŕ,©ŰCžCh“b`Č**ččB.ŢĺB˘! źňqŽŠÇ"ń®1Ü-a]Hšĺ:-C«ĐĘĘ<«ĺ€ĺ۸p¸` Ň»x9ź±…áynž»wŮfö:¬»?uÉĽ˘”4ž(‡vŐěëíÇçoą4‹ü¬Ä cL08oT©šó´îłi}^XcŰLήnŽ]E3쇂!&\.ŕ&€Ł+7Ż‘¸G> 4nü=Ş˝ž”Ä3čJ¶}W‘TXG±´Ńý4¶Ż ףS™‡™ŃŁđŁ]b Amáé¨ŔŔtW°&`órŔźŻň3!‡ú+MĂPŃoăÍ*c,% ‡4v¨ŃŹ»›íĂe±¸)†Nâş-¤Ł*ÜÝ`%dď $ÉŇ7»{nßâ,ę®ÖńBŻëáđ#zŠşëüg×9H¸=¸<ŞîN†:UćܨźáöÓŤrŠh 0~oč–…t Łńw›\µy—aUĄÜąM2“qn KλÍ*h4Ć+D¶3ÉŘĽę'HŮ`»—űăę†O‡ńxBReőbšyŢ÷ĚŤZ»űGTĄż‹ýQxz‹)ç|ę¬]` L]Ź ZąIqŠUÂř›»,Ŕoęě˛Ü±.e”‘făźń=¤ ÇwÂ,ůy»±<ËňŻűEÔFÍOsfń¸wm6)ž›m ¶6“ťHvE/JN©e¬€YíëÓź/VÁz8ÓÝSOÖăfGĺçDĺ1xŘK_ĄqW©„ľÍ¸bÝď&aw‡¶îfÚřt“\@×Ëbxîm92Dü˘0Ö Ž= „7X€Ýô<âŘŁŔytśŐ,9 ŽiMďĆŃ­rÂuë6h`&• ‘/§ Ě×Y&ďŠÂP±c ›¨.8ĆsŢ—ěÄq*«śŐÇůPQsT|\OVdýE< ˘ÝŽě ěÄ˙Ľ>Ŕi`°9vŠ–ćĘ!é¨h ćéBţ1qŹ,íł$^ĺ†ř ¸ŮfąŮőmÝOťĺL>*wىu¶‡ň|ÇÇßśá1 ft¸PşmöëSĚ´V`P< ˛ozřaĹégř„(őÁH X˝L~|x/đé×H—+$ZŠ­`°ź×Nżŕ¸qę¨l†…űë·l¶ë7Ͳ°̉ÇÍÉ‚3čÜÇ˝uU 3îČŘ%©đ–?ŕµăzQŮQ_ç'|ŤÝzłi–Ízßwîfş)„ťňÇĐ|í\UŤ‘ú¦_•Ł—ű?‰Š|7ěu˝}µßü *Úçß÷}Č"ß.sڞOF«Š0Z0Jh'“üőKě©|j»g…î2řě>;:ëd\Gx™íţHD”\ :QăC­FÉî‹Ç׳˙‘M´endstream endobj 507 0 obj << /Filter /FlateDecode /Length 2693 >> stream xśµY[s۸~×_čNFo…Ň‹;L»3nâiÓ¦iâh:ë>0˛,łˇ$/IĹqĆÓßŢs(ÉN:ÓŃxÎő;ţ:Ą›Rü…˙ĺfB§ëÉŻćžNĂßr3ýÓbňű‹śÁ“ĚR˦‹ë‰ß¦đÔ(“Yˇ¦‹Í„=[ü3*’ŐTgŚ[ر¸šüB^îg4ŁJF-ŮĚ8ěĎ…$ńÓŞhËĎţŤ±d5› !3*%ySnŁeźđϬ•äď»ŮśçeÚ’«h ěĹ›śĺ:'UDFiNîĘöĆßY-\ßóŻĹ_ť@*H«Śj/ą8!s¦sމ|Q/–N0‰ük–¦’Ëţ,’,㌳ŽŇ®öŇymŐĚS°4&0çÖäb:*˵ötΛ¶Ü-ݏDíUî¬"çu˝«ń$Ąś| —LĎEµ_ oŢ՗䧇Ż—3wú\ĂALdJZîOZî¶m±lďW |Î(đÂˤVłą4Ž&y{–`Šö×Ú OxŤ4A]ÔćÓĹ›Éâů/dqSŻš›]uŐ±náŐőuą,W۶yá¶X–iˇ¬gEY~§ČNĽ„°ĚsOš=đ쒼޶«ząşmAs¦Ś"s0žÖNĐN XP¤ŘëĘKÇÄŇ 4FĺIĄ!-$ ä)"3™ÇČuT ·Oˢ:IP'íjs{WÔŕAsPg`IŐѰ'ő‘ç±>*¸¨dL‰Géq¸37OďD pÎA4ú(çc8ŇÜt‚śůP•9·Ş÷mąô0cD3ď\8Ż7§ń«]Ĺ[’ýmąŰ J“Ý5^+@Nî<´) Z%Ąn ą Ë…č(ůCHa‰Á’Ăź%«ĘäÝv†Ř+đѲ€ÉM éżI6Ôž?Ę8ąŽŐ»M`”ďŽq®<©φ†ČnËbdüoŻĘÖ§PÔ}ŕ¦Ycźž ŚÎ(„@»ë ­cCṵ́>ż-g ÜśIv›Ű*BëÚOXĺ°§YÝşuŚs.ˇ@ë¸ř… …łň1_,("e—ç8VHrŕWíî6ňAô?·H«`˙1ĐeUŘ?ŹuŇîQíV1Çz椅”ĺé:±K“ܵwBţxÎŚ±ŤŻşÔĚN§ćŃ!±íęUN™“~T8.,lý⌊‚Ű˝0'áCĚ)©$ v Ő …Íîzđ oycËk“±ˇŇř–ú`ä:"Ó c¨f2_ÍpÎ§ŚŤw5„„UĽˇAkaüag3©YRMŞ˛#K‹,Kg=Ť.¨LrWŚź<ó©ú8jRŔh#zŘô”#]9âC"@„- N«%IPňY˛ŞLŢmѨr°Ą|¶OqyŽ“‚t%¦Đ©śö°×2ďA pQj0DŐ˝äS°‘Çç«‘¸EĎńZs˛é$¨ ŠĎ™)B9çĆWą  ]/ž˘řůxíĘŞ×/Ľ®‹  úH~jĘu´j­şü2đ’8c˘łjź„ţ ˙]«Ş2Ϋ7FBM_ úąvŐţ&dµ\Ş'ÚŽđ vďŻ%ąóA –KĽÇYŃ-ŃÉňőNˇWQ•_ă^Î}ŻĘ“4Í "¤µGDĚŽ6 \ ×#x¨6FM†íÓÜŻűëŁäˇv<ä'˛>N"ßÓÓ˛ ňSoĆęq ě;Nţ9De1î!ń€ŔÉ8p\ e=„Z€“pwŇżď}z…hUŁôޱŤđjűhí}YbÖ0ě©€ó»Upîđq?ŔC“ Ě:¬Ç+É©”4Os›OcŘk§îXŤ6#Ią‰[ŕ*ٵ9VJBęh}ąăi %ŠBѸV>“:®Áďß_Ěu¬“ąŔŹCQ¨áÉ®)»“¤‹¸rć 3 ¸}ÜŻű†‡ĽyýöÝŮËżÍ~{ŕÖJů(lĽŤ1Ę5J—:_ŮÄ…Z Ŕźű&l°úŔY„ĆśŽdLÜ$˙×JźbÚŇJ†„)¬Ď—j‹ć(ś°ÜdFu菎Á ˤRa°É–ś/&ď'~(Ą¦őéa“ů74FŔdĘČ©„ʉb±™‘ýŢá‚ꩺŚI¤÷ ÁyŔĘÉ"ť]śÂÖ7Aăę0ŔĽ™ĐUĂőcŔ“€Ť÷YAµÜű¬ĐÜEGŮ»F‚C»6`ŹâNtn±Ź\čŔgxαÄ?Ňů u’z×a(¦LűÔÚÇqt.Ĺ)śđ‘FŃ˙źŠ4ĆíĘ\˛<‘ˇ’RřG8Ćâ1?m8`ĄtÇ3WĹFk¤ŘśŞŁjŞS„0 ~¨ăî;ş›CĽţîĽĺoWţlĆŽ°çaŚb!€ąx"€“$ĺđJąt8žăt¡yJęKqąťc1Łĺȱ†ÔËęťCĆů|¬Ź÷sÚ™–ÓÍŘá|›z…=ĄŁžDĹŕ%¤ŮíoŹ#¤‘G‹‘˘-:á$6‘X‹+ŽM$b\C'ůMCç´ĎcÔ ‚Ç}^pĆoéóLUŢ÷M¤É‹@Jp6š)çN‰€+ĐJć‰^ü4Ś“Ż7™Óm?DýĂ|x ń{I>ü|qţöüÇnäŞÉ†Őď.ţńęő«áŐóáŐ«łţ8LmŻś9ş»?Ëđô0”ÍXc6›ýfSÔ÷—żaÇA›Ěň®wőf_/˘áy$‹ŇËÂźĺXWBuN±bĚ˝“â25®­rm¸‰ŁÖˇč‚"–QEÁŁfăŰÝÇfĐOµ[ż)?ą‰®›€ž˝~é'ś8ÇÜpGđMń%[×ĹŐ0/_î¶WŮ_ú9)C`…őäşZ})?˘Ł3ꦄĺŇ çÂĐ-h)ś2=¨B_ć†Í(Ôl2¬·™\ýŽrźÍFzŠx™|č ÝÁ,Ű]ŰÝά®ËíęjXúqµ,öÍjx€5§_Í~Ö`őŐ?¤ă‰Ý˙íăJz\'·÷/hÎĽżPIüľ†uĂj Č!ő`u@Ş˝¦Ńî8 aą¸xţĽ·±§-Ú€B’ĺ1mfr9Đ4Tv@d’!ů`Čçş«ť©ě\Ţ$S!Lž aM,•4‚ s Ä(˛ü1*–‡1+“c$ĄĂ1ç]±< “ęCyę:¦. u!"!Ŕ‘M¤-“)ÔíqęNŹ^`@iÉ„ ((~aÍuĚ1ÉŤm,ĺ#6ć/<ýŽ5 /,MXW6R Ë4~ʉ°”Fńś~ ÎÚôߡđ›ÔSźG(ć€k!hâ5Pčkš‹knrëQŵ 5ĹtÝL°mťŢA×đçIÎ0Xži3ÝL¸2đÎôOŞÉ‡Ó}ŠâSčŚŃq_5©„Ä ‹SCź‚ä4‡Úę)ě3P†É§`ËśćÜ—8 ”ÜI{ł é šŐh'Č»˙hÜ!W¶űt$UJ˛¸řůĽ§sm\í^GçîżÁkU>ö885-şjϱ$KpĂ\ň€-öU› ú}?ů/x–Mňendstream endobj 508 0 obj << /Filter /FlateDecode /Length 2696 >> stream xśµZŰŽÜĆ}ß_°a ôâ¦âaú~â¶% 8–ç%Đw.ZÚ3C™äj˝ŽâowőŤěćZËA ‡ĺ4›ŐŐU§ŞNuëÇ.É Űáďöt…WŻŻ~Ľ"ntţlO«/7W|I0ˇŇ`CV›Ă•˙†¬(“%ˇtĄ„* «ÍéęzYP]b‚)ş+p‰StNž÷Ĺš1^bEĐ_ŞtŇM±¦$;‡•FkôĄÄ„˘Żn“ŮmÝő Ęh˘ĄkĂáŁnéÍż6 i’î‡jQjĄaO›ÝbŞŘ|s Nç¬9'«5‰RÚiŻĐ?^~óüŻĎĹłç_ü“k"u.™VÄn„ÂocS®Ç÷¤$ĆNÇT"đš2FMaŐ"¬ÜĐŐćë«ÍÓ(_^ČXŞL>8•/Kĺ†vňŃz˝.>u˛ż«_źëCY¬0ŤˇmłŰwĎ’ď o(FsĎcp„!ÁRźÎJ”ŠJ#”§OźúISAŞ$šľO!%Ě„) &ł’ILňRi^Łl˝e•Uš×đ/™xݤ‰FłběMŘŮH,+¤>ŔDĺ˘BăśßdˇQűč'˝A…=ęrˇétä$®7ŕu¶ZSxÔÚKÚܶűî¶9î¬D p˝?ęm˝?÷o+=H[Ńfż|Ńőő©˛éÄČĐwý® żŚ@/Ú¶ižŮ~çmuĽŰ;ÁëLrÔ‰ĽŁQ¨FkŽŔZBřŚ­}°âxQ aÁť8¦ôK>Ć%ŕ\©ácl¤v©Ś‘ż–ĄL2‰y„˝ă™F¨‰Áe"„•Té1Ůmx1üťČÄ`!9OĹ`ť4eĆ}wĂ6cI"m·Á‡f,™1Ĺlš†Wś m|1ŕššPS 7 Šşć.yŃn}!0 ŠÁPz„AÍÁ>ËBý¬(ş:­[ŻSąÇŞ­ű–+­zß`Ťę.Ö+…Ú¬ ˝-­Ćp‰˛áę~úʵ •O2«{%‰*&ÔŞ¨Đ!nŽÇĆ® gč>×=HҰŮę&yqĚty6¤ýÜň¬Tđy´üË?Źqr_÷·×Öćo>Ă–8îŻT®dĐ׳ë⺍ňPÖ—!Řý'.âăë,laiaŮřČÇG‘€Í#=d­IäƸ¤I3â×đq÷6XÇl|Ö:żJšWx ,ŞDŘŁÉĐDJžélś¬‡ýx[úíܧŻ·‹TqtđĆ8ęŇ)ŤG+ ßw<"Ź”Şá„ĺbeău»ˇ7 X†ŞČ F÷O·Čt¬÷Žnb&PŐEmXF7§%CoRîˇ~J­DÉ@÷l<&Waă!ś3şM4©zQ,C‰mP5°č‡BŰÄ@)}™! ;­ $|ˇi¬}ąý9#NŤşëîr9źÜ'@űl8…TWQaź)A-NŤËŽYbnqˇ ʦ’m°ž1(Ä4ę»°¤™äŔźć|´Ďř>ÇXąÜčDQľúúď]Ř1$ŕľ ŞëĽíhNYF¬ŽA :[üŁeÇ9ý­hC'µ!›ÍĎő:śúÚż/8€$›µ%0€>L!<ŰxW ďyŮŚôĄ­÷tHcąMr´´!#MîŮŞŻ›sF­Î‰€]+Ů˙Ó¤÷őq b7(4 *łűbJ2ኺ’áEQ}r…śq±ÖF]uâA@yDÚz®;iIś4ę˘~83k=‰C×3Li–Áf@g,RQóQćús‚‰t#±ˇÁ`ŔŢĹ„EĽ)Ń9¤ç1Ýř'(ę,wçůŮŐ5@ç‘.÷ÇPçÉë llm:šĂ&¬gx(ĺ@€ŹYüt}[ÍÔdęň•%˘_fĎY0*UB `<śĘss˘s€äŔarDä)Z›˝'[ŁIŃÇÉ”~íL"gĐČódÝL’ţ‹ÍŐ·WţO¬ÚĺĂ»| ńěŽU*ŕŁLQŔ”=şCĽt›r?T ÖiOáRş‚—FęOŇ áÚ™ÖvÜHăŤůÍŰ=¤oĆ}•zS¸s( PjÝ#¦Aşî÷mýłG×l‹¶ŕÜ,¶Â¸ŞÜĺ”ćŤw#…Ŕw“ťŠúž qđ4Ô‰÷zZ88X¤Ţ]–ż\—°všŻśŠ@ŞĐˉ%ą ]ßťşĘ,S,ĄZúx¦ĹP^`W?Ř— úY÷NYôf,ÓMgçBݧµíťo’}Ła…ăgNµS0=R4ĂB Ô‡$I>D+ëßѨP2ďł"z ¨Š·A#HU›Ć`H»€h9M»Ţ;¶ýÖ· ”ç)×’,l§ťGŐ:Ň‘Ŕa_X®ôb€íÉiENČ­8Á=!ŔÜ!3ô?ŔŚŞ"ó‡.Ľ6ęcŰŽĺ»lĽhK«/ źźÖŐjVn‡ŐÚ¬.˙VĂlŮ;_F‰Ě\ !ěŃBXMÓGrPyb<ĺç9§sęó)«đöfľ9CHŃy\SGżHJNfś'‹#,­‰mHʨ·°Ć> stream xś­ZK“ŰĆľď_H,•Ăx‰`žŔ8Ź*[Ą*Ű%»b…©–>@$wĹ$VVk%J~{ş{f€Ü]Y–‹ÇLOwĎ7ýřŔwł<ăł˙űżëĂE>»ąxwÁééĚ˙Yfß,/ţřŠçe6·|¶ĽľpsřLH“q!f….2+őly¸¸bŻć˘Ěrž v7Ďł\˂疣ëí|!ĄĘň‚ło«xĐëůBÄ5«qŚĚlY˛oÜeÎ{ţ&ÝěÚDá’—¦ôkh«`R{îÍĎËďÁ ’ÇöRgeQ‚MËÍ“vľüڱy6ŕí®ş –j¨É®ý\=Š;/G‹‹ô‚J8|5DżŞa]í°!,fŽ·µ/qţď_TČś8 ‘(‚ĺ!ĺç%«·¤ŚŇ"aŚÜ®ę“ŠŰupŞ«Š¬`űÚ;†«BX–‘şô4ďËŤďĐÂŢ]ŇO§Żíü(9Č_tM{뮥`żŹUě’]żÁQ‚[…ý7IÔâPtjĆ]ŰŐ‡©p8ѲYĎ_ţŕ—ĂďSô^âIş­ČFW–´§Â˝WT˙¤%bŰ5»28AmÁ- ÖŐčpŔpŚQç¬F#>“ÔŻ‚ ɤu<*Q5Ř0”>˘IG“#iOjB1‡s+Ëq6 Á6WÎC=đ©V2‰ŇiÍôŢ[ĄÓ<†ÁU`hŮ7n¨H.şW~•|Fx–sXňőŮ€BŰăDiăNążîĹBˇ7ŃP%ůÖžN’źoB|üš[çUŔrmď!ÁęxFG§ĎŻ1zT5^GđGëÜDIĎľ( ÍÝ&hś ĺ'>Ö‹Ëł ęĂŕťJײ°Y‘¤ësŐôyĘ hŞ|’" Nźj!˝Ź”(°”H•«öPÜLé§ńRň§”Đáň2čůOIěq ű:T7.bbšQ澎T¨qkrEˇ>YŰUg}dA:˝w‘Fęţ!€äm<łî †{?b˘¦ň/&˘ >h§!ëfÁZw$Đs¶>őřHŮú% އ“§‹´s6¦GʧHk˛Bp> .PÂŢśT5>wĄýŰŃÓP’‹ËŔ˘ČÚţcŕÎç×CíHc›sA`h1á’oF>@Í%ŔDćĆË”.M990űd©>(RLî÷µ «Đ,ÜźäUÇ$šÖN; µËY+dB¦ }ÓţçĹđâúî¸Ć“ĽBBär ¶Ç÷»f5(‡˙¸Z$„·Ä— kn©í§ _D¬ŠMÖÁ(`rVOŃ„UŁ‘ŽV(Ůű‡±]JxąŇŰŰm3ÜĆ\ČÚŢ®ŘwÇëhş)“čŻ9ÉŇB.wüÖÁwㄡçpµp\‘O=üŁ€| ňś‰ŹŇ_ÉŹĘ_©ŹÚ1 ·÷Us¬u}ěŞu÷aŰúĆÄ5Žl ŽŠĘ•—ĂAQ• K·ÄÁÁŮ.$Ľňř*!Yř[¬×đ_?]á?ë BĚ8–šHČ]_,4Wc5‘şBHoăóúőëś¶Â]µ;nçHÜćÖu¸DâH t! ¨5ÝŽŠzP°ŰĆŤS5]"źÝŕ9 qÄĐaˇ 0cłi§yş<Ú8 nÎ-2ČĹ2[jöÁRÚĹh•—Tă` ‡×g>”aEy>`·~Ŕô>©M]É* %«—éaZË4muAŚ‚Ö-ΚűdąĂ¨– íIÄ'a‚z,w­TŘă‚«Ę w¸ž\¬îĽ3…ÄršÖ°üŃnű"#Ô¸[wRźÔ­ŁóÇtVж;źn6“Fčś  i‘äÎ^Âzü®©Cő˝ť;Q·ífą®Ň!Yš„ăk­ăz čş¤8­ThIF8„5 ĐŤ{/ôČ‹ĺĹOî;šž5çżźĄ~ źĎ¤1”13!l& ă>źýŤ¶Bh6®2±mŃ’eÓÖGݏpÜ˙„çßBdçÄ茋Ý}đ1ÔÍß7Ylɧš/î,6­öźç€'<+ąʱHň§Š€aŔOUťg(zIďŇNk9Q';‚"J,ůÓ¬(P12öQ»v˘4lcĆi”ľY=%QP¬± $|˘&Ń2moëĂ8DąéĐL'J˙.ąK›bż|žŹÚśTÇÝ„C\´nĆGŚŚŃŽ#mTř†ëy›Gľ }&ŢT™A*ž ŽUAAŕP™ř ¸)Ł3nL,ń¤Ýw†ĘŇŨ2tŔzÄEď÷ľt‚a(8 ămLďN['üBŔí”-©„ŮD¤jKl—î1B Ä1ű8'7§í"Í×đőH=îÚ*&śöýĽâ‰štł\qEčߍWŚź°E'#Ú 0Şz"żAbŰO¨µăb5QtÁęÓŻ$“ő€‚ŇŇíŻŻŠLç=+4"/Q} ămu“śü8ÁK˘ţ9§ś§4™ĂKa3ŤenŰ’ďuuĚąOÚžhpAڞŽ;˛Ă·"7ć—ę¤đ#`ő6¬ŇÔ‡ß " fł°ź@I}ĹĎJH §yÓ˝ňsó&rËĽŚ˙MŇ&ň¨JČDîg¦M ‘Q@Ąšř[w—2âx}Ň9ě8vnD‘ś÷]ZfU}RŐČvwÉłg;d«.9Čń„}5I˛XSU O98ŇžŠ;¨6ű_żŔʇúí)aDß%ýÁy2bŠ‚:yŰ|hŐŘT]•]#۸bđůÇ L~+s }uÝx’ ˙J ?XI™JŰf»€ XľúÇ <͢p‘C7Ťž@Š"üŽéś ë{v¬ź]Ę>¶˙™×Ĺ­·­Öo‚š2VD»źÜÄl -~ÝlßÁľó|Ľ4¬[u9¸ĐÚČfHégµŤîd „ćýrPHćĹĺ$!ĹK ĘHĄc&¦äŃť)úź,őůybß7›CŐÜěŽíŠý(†?ÎBżs˙ nö}9Ľň¨¸hÄĚ Kä&´Š9&~ÎDŇÜ~şř?“—endstream endobj 510 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 242 >> stream xśç˙LMSans10-Bold‹‹ů!ůJ‹ ‹ °÷TÇÄÁR3÷¬˙ľČ v÷ËÓ÷uáć÷$‹÷$÷÷,ů!©ű>÷¶Ęšę±‹÷÷Yűm‹^ű„ôg€füęg–°»±•®÷›÷÷8űł™s–‹ˇ‹Ćźś‹©ű+řfP}Uűű÷u÷÷ ]Iuˇř^ś÷i§ŽŚÓ ÷  To Ŕž‘‘ŚŚŽŹŚ‘ŽŚ ˇ…_Łendstream endobj 511 0 obj << /Filter /FlateDecode /Length 3100 >> stream xśÍZ[oăĆ~ň äARtÔZĚÜ/iIÓ¦EŠ"·}°S€+É6 ÉňRܵ÷%ż˝çĚ…śˇHď.šE€¤fÎeÎí;göŐ’VlIńżřwsXĐĺíâŐ‚ůŻËřgsX~uąřěŁ>UŽ:¶ĽĽY„=lÉ…®çKŁLĺ„Z^WäĹŠŰŠ2ĘÉë­¨†QGîłçÝj-„¬¨aäŰ:_ôrµć(1EޏFTÎZňUx¤Ś“Żď˛Őmsę€~°Ějy('aÓiî—/˙ Y–ëĂ­Ş¬± ÓĺvA„X]ţÖ^,ZKÉ–k+µĆu é—«µâ„ä~÷ř‡ş«ńQůÝzřq÷ôPßo«Ű¶Ů^“nwx=‘ůbر߽ŮíO×䱹ß}Š«®W+—‰JIÇ——ß-.}E~łZ3Á¸"›ă}WoşÂ±¸đzu˝ň‘J.üćes’E.Ň’´Ç×řĂC»Ű6°źÜŘEäA-®ß:gü#­ëŐ§7M—ö€]ER*j"™sŔŠ|˛Ů×§Ó'´ř4{ý>ě3Uş·»řćTľ4r’Ćúě…Ł…ĂłJ*…ć§•ÎűK&’˝5¸۰ř—Çż"ţ•ńŻđü=Űuϧ79ňaĂQlŽű-„“phTÇÁ†´âÔř…đ¨LÚa1îxţJą,^q…j€ĽÉăTň7>°¬ŰĂ{ĘYbĎiÁ^Ń‚=§´`oôŔ^ om@Śő«-y»;% ,RR2I ŚÍyH) –NŻ‚Ž%@¶r¬÷[ŞŰ$A$,hůŞ‹WnäŔV®¦Sďná ţÖ…ü'-w>Ť®őI’lË4;üţńL.nşćżź†Ľ{ĽÁgůŘM ĺĐ#Ţ_ă2Gň”Ľ§!9peŤĎ\pҬčěŕi“Ë4ĎşXVßG9”öjŤfˇ@UŚÔąůóľ)Î ?ś‹ÄL”çTÝV©ŢŚ‹V&R[Ľžşpú‡Ý¤ÜZ€Týa„3JjuvFŚŽ“gÉ@(<"\Ą© źG‡U)8ĎŢcň,·«!—×ű·!Ą§ěč4a}¦däćőýŮ^“'H‡˝ĂĆZđ¸knďşÝ¶:ějXÂ>WYJ~ÂÓ—™qEo–´ŻcYZËRLěYŞáQOĄţ.ZsŹsQ—Éů]łYˇBě’»čBB’¦75#EŚ6§ř<1Tź R$5Ń—Ăî‡ŕíÜśP‚™Ţizę¤;ĆGk¦¤™M ÷¨U4eŕíMQĐďî&ŔśróÉç&fđ1i8h×+PpN&đeł„›gsKĽĆŕYô^óCvÖ]ťŻßfżÔív°î.7bŰŰSÔ"$R»ŇeKĂóEź±ś´Ď dˇc˛®áč€hD©Ŕ:e]xłR ÎWh0gď.2&wđ^pŤźă|SΔ!7ú…,Źń| MűȱĆIă‰LÍľ~™gěŔ^s­ąé“4řpˇŔűŘö^SHűTÎiĹ?<_FŘ Šž†,Ăú\zÚU€$‡÷ k^ľřű7±ćľŰµo0ĚJ­Ť‰tÔś'őí±ÚÔűý5€Y„ňźô™=Wb6/k[nFŕÖ«€PM—T’ýh2†Ë>iţ®B+ńëlóP¨qę—‘Ŕ°©ÜňĺĎŰqF˘FyěÍŠŰ’Ć~Ź|n(Ł]äyývTú:řŘtwgç\Áih+ËLś¶řAE¸Ś ΡCâqŮ”•Ű|TtC‹VP¤ …~-$eąČWü@âŰ3?áVésGńߡ–žŢ Ű ›DÜ:ďÖXiý:(ÁąOtÝřl5†ĺKçëĚ7Ęv# ČŚ/…áY˝W#¶ń0ŇaŐ?ŻŕؤI(B1YQ*µ@ŕ»ä3Ěú2Aţ…–ë?|· ?­~…;Uań5¦}í”6˙E°÷ľ«4¸L˙Ý E2@4 ¤ĆSĹ–¨® Ő›äl×™ŠKă±Ć2>(»KW]c+j—ë|ír’“­4ę8­¦|ÚTš7>řtň5 É#ÇA]Ýś7ź%OQÂýh’·‘d˝gÚáMN§.= „Ťź@…®‚ĂŔ~xBÝă|.äJŮÇl“"g1^0…©‚VmśÉŇđ#c‰{,±üÆo®B:\ÜN»2S•1Ö^ˇ*éÝŹWHŠÁ+’OŹ\ÜĐŕŕĹĐąç˝ĐTVZŞ’Ý±­ćƆůop4p(H9 řu ::#yďL˙Ąú(˘wtÇŢ?(âÚ ŠA ¬9) Xn ËĐ^W4Ь‘ă—qa™ ß[Ä ë|éo'ůâ1ŢńŻ ‰kľd‰kEq…qÚů•żźńHç ş RúĄ?Mź2ú—‡ÓĹâ÷đŻhĐécv)ÎŰËYŘë›ËĹ÷ÉÄňö´Ŕ‘ŮňqA—Zb敲KN5@7ľ<,„±ou˙eżřaţJit†ńJI@· €w ˇÍńJ©?ËQׂ-BŻó2…^:,v:F‘wH j®ű(„:”#|Áú‚Ű˙/0\NT8nfĺčĂů©AÇ8¬I´ąŹŔ9BŁ#°VRq^b†˝CÔP±4¬\NŐČÍ Ö`Ř)°s!ěźÂ}şťĚŁ—QĂąíĺ˙i)OĆAsÖçŹ+?s“Fű™Ű¸`áwjD ŘN]s¨ xkI•+Ú¦€cŔ>Ľ¬‹źŽ+¨¶ďOQl^@¤¶A¸˝#“ä)JdťŻČţ`âyűÍFużnëÇ\+&Ň€(˘€ö4]Ă~›•áUž;€kz€>ęR†©SŰëneFđŁb«!ÔŘ|Yëu?C ©Iň×ďâÇź1nü4ăÔ aˇďíżqéô l‚¤Űă=“A[€ŤămóĆ·_NňqK‘Ş„w^S4ßxúŠ•+ńă©đćöM?z;ëç°KôůÇćt7×o´IjKţś;n>Ö=¶‡€'EaĽ˙˘ÓYiHóĺ8ꨂ˛ĐőĚÝPŐűýŰa÷D§|)Ţź‚×IýÇF`Řwqi2;5ŰşęéŮn6Ő,Ö=um]NF'[f)‚ő=ą #zĘĐpľ*˘Ąg ŰŰ„‘AšcGXSLrçČćş©o#ě3ř~Ę?§–s‡C¸ˇá–Đ9§[;»c6¤ť®7Z¬µ“'^A> stream xś­Zmoܸţîżpiáo§M#_E2h¸ ZäŠôЦţ–Ůk;j´«DZŰIq¸ßŢľ¤¤]'EáÖjÉápć™á<ĂýxN*zNđĎ˙żÚť‘óŰłŹgÔľ=÷˙®vç?^ś}÷šŻ*C =ż¸9ssč9ăuE;WRU†Ëó‹ÝŮ›âő†éŠPŠ» ©äŠSě“çëMÉą¨˘ĹË&tą)Y ’¨,zĂ+ŁuńŁ{$”/Ţ%هv<€(|ˇ©®µ_C“Ćcßüë⯰!MÓý0-+­4ěéb{Vpąąř7Ś1$S AĎK뇽)诬›’J%Aą˘¤•frS Ĺč]üüčM%ÁďŕץĽ’°ó‹WgOß0ýW0^qJN X(n*¦¤_†M+Qób€OBSřlŠ3śĐĚXű»÷Ĺa¸Ëýbß‹şřŰ+|ĆĄEá…‚‹ńĐîš`voj? ÔěoÜ4ĂĂŠ3Éş¸Jý^fS3ý>ŐÎ|‰ř\‡Ńݦyq“¬ÖŢXą™ä• ;/®wśźçX¨¨”ÔŤzS4)p·~=ytwv5«k¦f{]•$rQC6Lżę»0IȢ™ś+DŃě~Kź5 ˇDśI§»O˙$yöď™"˘hÖ¦¤6ĹgŔś„4 ˘1.~—Ě<ŕY™%Ş8ä@UÓÝöC›}ąsb áA#+wÍMTŔ×Jy7]u»U/ÁÎkc‚—ň<0ěŇ5Š&˙v ęÓâaćĹdÎ béj»xßµď]¦«gs»6s[„8>âˇĐ˙V YgČ˝K2Řeâ“a$Ś)b4ŘĽírśí +‹1ŤĺG"ýzşĎŃżËlV9LŃšV °Ă”Í]hď‹Ô·VŠ  .vY˛hRđ…QĆ3h4÷…Ńb (ś x /ö;&d™~Čť‹vEpVÜo$B15é8ŽiË>ËeŢr*Đ˙wŢ ű’ĽĄ>?–·ęŠ~4o9«¨#Ű«ż&qYQ‚˘¨r‚%xźĄ¨%Z“2Ŕ|‘żě\¦]ţšÖłHăDTŚ2Ź4­ý>†Ëj‡ˇ˛€Jcę`[˙ľfĹCŰuţ“ĆÝ ł8Ń™>ŮÜ[4EÍ@!HP7~*@ma.;fŽçZ űşw‰”ňĂíJ9â„f’¦dţ˛i.Żm‚¨łĄť§‰ß+5k{un‚Ĺź·NxD»Ćąí7N†„K¬+ĽB´.úÉt(Ú˙¤›Î˛ó`V$…Śâjš,A„|ʤĄŽ)‘xݞ tĚrHş© ŽR[­ď(¨ŞôDxúý¶ząVἾÂC †”T ]ĄP4Ő•ÖµrEÓĎ}ޞg°9I­[sjbŹO řÎ-@ü3ýďm1a bĎmäł,ĺ'¶k“q«Źüϸ6đ=$Ń]ČN0f{,(:?žčcaë= łŃNűŠÜ¶‘ă‚qäťÇ;[íÇ»ŁŠ#Ä™©Ś9ľą/Č ţxMELŢX®ÖTBD®*fgČ*WĹă!㪋sŘfŁŇţEĚŞ+ ć܉u=±ăÎŹ'ŽFZ™ĆŹŕ±łĂµ-ęs‘6M xýÄ?5x2±âB\-h’{xĂJ"çŐľľ†Rďť-0ý„ŃőbÓRŮ)ŹŁ‰ś­]éUĄ‘xőÁj+Á„‚á,řşîÄÂăÓÖ˘§ÄĹ»$çćDŔĘÍÉďDźđűčú ¦żl4$Uăů‡íôÎüţ©É,ÓÍ“[hg°±i[ČĽěłŇnëzÍfŁ–Ž ]m%Łí{?pׄGůĹyĚŽ7ą›D|6ţS†”¬«qtŤq˝ť ±u´l'p–ť6e‡Î¤šPw´Ľţ~SJŰź†ÓW]ő»KţËĄgdńÇ2~ŐíŢPĽýí/v`ö>JKąčł0ŰćĐÄAŠÚýőŰÍ™T‹fßß7o'e&i&ŃĎO]"oźżjß_Cxôý6ę€ę÷V0Ő´ĘŞDŤŚ ÷ŐÝ÷×qf×îßÇO»~{ÝŤĎ­5?G€@]ělzÓ8ýů¦¬9!ŘîÇąĎăR‡wĂőř®ď¶n~‰’ďšćf—R©Ů¤”˘ëoÓa©›îúS{ ¶RC…uě•.óř*^Ń$'ÖšŚ˘|łď«Č˝1öÔüá§°0ř$·â’Ż^W@Ńqámâťżo‹ď_ĽkÇŹ“§†fjBNÝ,Hc…–4.W RIC7 ŠM$ÁJáQŠ"•P&‘ € vĄ (âařŮÝúĐřÔ~Š_—D†méâéÓ§ŃKÚ˘¸(Ëró­Őäźííľ˝©˘E®ŔI8ń!ÁY~·G Ń™Pe~»v&+Ĺj#ýTĂ'\›±Sr€ł 9e",ę誤Ľđý"•Ö5ĘÖ;®R¸ýA•Ö5‚c¦ćň¤¤™F«bpڦü«l$Ź+¤ľÂDŐQ…â/˛Đ±Ř˛~‚< )<®&âdxA×ČOÉ!¸M!i/."đJL(ŰĂ]ëYöňX+Ö ›„)lĹŔ3ž†6…•ˇ¶ZÖ§§n~hýÜzYP!cĹkźˇjó{đřl;Ź8ą†Lvh›îŢ»„˛BćČT˛ŮN]I«Ůëkgŕ7Ú ˇj˛rżéMqş+mEńJEěOŰ­Ai”´dl‰˛Öĺ«éҦÍüwp4”qĽť´#©+Lť!—E0I/0®Uöo<ĘĘ–ˇćuŠDNC1jľŮ˝âTşé´d\vý8?zç×=I?t3QľP%Žţ—Řa^±Cl…}÷šĘ<čěˇí°z§d*Ędâ¤97żTłş%Ęď«SDOĄ¶X3°ÚçTŰ•ď@/›÷›@QW´^˘«šÝŻER´5YK:¸DÉ•˝¬”Ďţ”QäD×bQf=ń0­ě=Ú*ŹđtăD_±Ěo'f­ wçë rHî‚ÍEÚL}«˛ďfüg?Ő`dŤ˝,»I—ń—ŞÂĚ.1l ¦µŤą6hÄ0'ŞäQEi—®AŐű6CÁ×۬ŤďĽď?Ř.=ĺĘřŘ6Émd®łËč)Ńe;űqEŘ…žµtç72ÓŐa űˇ]ô· L¨kÄăWßRřcůU…ÍĂ ăćnţŤŔ =ÎÎQŘ<ŚŃ2wŃ^)¤žO5ô¬X\A•çÎJ›UîĽďw,–çGó*eľę÷‡ćę0Q]d Ü‚ľCî<ŁcĎ"Kév2…ž˘ŰăÝn× źß†ś˘Öu¤ŽĹ râöf¤‘…í-Ů•ße"ĺ7‹‰ ¡¸µç<Ú@u43T¸wT‰Q¤Ú±Ť°ď/ÇŚĂfĚÓŇRdŇČ©öP Ńľ»ćSu;4Űč'ßÝźę’‰G2> stream xśĄYKoÜČľĎ_Č éY{~?Ś$€łŘE˛p€¬W@hi¤ť,2IYqâä·§Ş»IvĎP–´"›Ýő®úŞz>¬iÁÖ˙â˙ËzE×7«+ćW×ńße˝ţÓŮęwď,•ÂQÇÖg׫p„­aŐ(S8ˇÖgőŠHş9űlfTd»©.wpâějuNľ˝ŰĐ‚*au¤Ţp8o…$éjU‡Źá‹qdżŮ ! *%y{h’mżŕ^8'É_ŰÍ–Ű‚2íČU˛Îâ‹eV[Rőx@”Zr~oN ĎËg.Î~đ ©L!­ Ş>äÝ:ÚňQĺŰ„zyé“(yxi*ąśx™”dgśŤ”Ú.hʬQV›@ÁєņąőV¨Âjí…ľ:ôű˛ßŁč[0­Đ’­·LJ:őuűËľŁRçŔ„Ώl~äóŁ€GF)‘›-Ł–,ůé®ö"1S00F``m`Đ€Ç2ҟҿ(âÜxř0“Ľ(·:Żá‡Qô·«łoÎɧ}?ď*9 hBSH5żHË" [Á,¶p:5Oí¨8Ót: a$-w1l!Ř'í†k §%¨†(Ą\ŽQć8“teUĹíL1–…Îbů*!Ţo;Č‘vLFÚëÍŇ».‹Ś›q'‡>j#x¦Ş+Ĺhżw- Ču=?˙~;?_VőnŠ#XU¨ůo|-B˝šî÷‡›ź‡~^řĂüxÝí?ĽšÉ\•CY9•î+»aß}ÚmfŻc<ťJ˝˙çíDń~?”q÷qbŚŽ{»Š˘bÔüvĄ õSY:^PěYČőŁHNxŠ"ĆwźĆBësŢA™»?ńڞ^â!Ý_đASo‹pÖşGbG9řćr2ű¸®ÔSŇ,ÄTxîănŚŔë(JŘ  Ńő#EÍłŁ‡>+´>$ĽüPŽ» ăj.DlŰ/¤VAyäg0,'Ţđ3]¦G¶" Ź˘9CŇŞ ±?HE®“"ŮvŁ‘µw´ĎE Š˘P4mů;+IƸ­łÚÝů3s.Ó F5†â0f&°iŇ8Hťżí˝1,—`M/X„ÂÜ˝}‚]FCŇFoŞ*†p A%Ń@"Ú!ňîćőt{[ĂHŘć-”ň›ĚĹ— pLę@Z%á‚NÚJ!äňđ?ťŻŹz™Ĺń„Č~şj'őě“‚z*”ńĚuŞzb’ĹŞuĘB˘ŠÍµćB˘ú4nd$`;÷ˇ‰ľŐ\pRfTłÓý¬°oHN"*µ´ü/梇a¤Ęá.… /‰3Čä•ß6Jľ_ĹPźÖ 컨&‡aěśDf]t6.ňN+4Z¤oçcúc»U6‘'¤jYŐmÉc¬2'äjv}Ľímîec·{™×ş#E. “yHIęĚ[m÷úůxY4m=B™~f˛WsëŃ`bb6.ŔĺŻYav;_n¶VB÷öđ&lúĂMSä2‚¶É‰Ż›ý öńűŻ#[ę˛Ý_v›sőÚ^<ÔH~fŌ׳ĺ>óĄeţY,-‹Ď2Y~°GŕN8ŁYhná,Ć^IćŇ5©Ąv‚›tŤjĄ¸•ÜÓ˙îlőă* \jÝýŠAKXF´ÎÉß|‘ÖNo$Ž1Ů[×·gTéÓś7‚üąěňÔđÍ„1䇮H®Äśň‚9—ŠMvű§˙φI)yFřĐ„ňłI‚-ąÎ !ë-‡ÍIźŽ¦7ŮČĹ63Ţl×2Z˛¨ŽUŇ*ý…Ů4žč¸ĎÚš RĐÁ\—6Iď€hÇňŚgiĎ:Ś6U_%ŃĐőĂ,UÖnuyŹ’~j«TeĚn°mWy—s™‚SúŞ˝ “ĐďÇČQʦX@baO'Ä{đ^]×Ď”űgůOU=#bŠććŮ-ÁÚeÝa3}-vü{éÄĘ@ľÔ˝Üßľ1E'´X!‰Ž®n Śq®´ô×p,.E»n2F*éUĆß7ÇÚxŽ÷ŘŢbQ„łˇ…ăŘ6JrCR0x•Eiť˝5XĚS1*ýi·Nü ëTkô3›ˇĺ PőS$0'?(QzMPZ˛@…ČŔbeŽFßŔVĆ ˙lóč÷ł(·„O.Ý<¦xű¬,eĆI >ÜĂ4·•ŇëBŢL'|±é†“ůĺ|Ü(ŤÁ(^Ý=$F?ďżcŤöôÎËćÚiËűT÷fs\RBXhSź—]YgĄxČŢpĚŇܧC¶Ţ‡şĚ·öq+“ŮđÚµőbĆ0t2ń.6öŢ —4ÂBĐéú¸X Í<2śLť( @Ű—‡’p‡‡1꾀_Ë·´ŚúafÖŁZTâX mF5pśÓaTHŁŻ’ĺ|Ě÷3TôJ›!ơ>ü+E€Ńňô˘Ůı|ëŰB§RXĹŹjR…Yďç3ÔłvĽ'ŰĆË®¬˛GL`ŮŹáŠb.݆OˇO Ěl‹ŽĎO¨Ń O®˛ŽëˇĹbÇÉÇC—uKuS ¨–ŕ4[Ö ľ eKń¬©*ľ d×wÍ%@dł#·e:IîjĆ2Mţ=Íq/狿ëĹ-ćA čň™×S=gŻĺErÁ‹Kęb¦ür抟tňé›ůӄꛓ·`Ö.@ĺݤĹB»ńrţ­â?‹#ŞŻĘž¦Ó]Ó@˝ŰˇnGč?©é×HZőOn Ăřb36MÓőű]"ń z2±ĄWp~MFđ»[ç÷ŁxÓÝ‚$Wí÷éŃFľóö§ďµkďš«JüÂ{đµľHäâŹŢ´#˝sv‘ü¬˝Ę”Ř©Đyęüqő?Óh‰4endstream endobj 514 0 obj << /Filter /FlateDecode /Length 4493 >> stream xś˝;ËŽÜHr řÖţ{P·eS\ć‹™ś…á•4ĚzđjzíƨîV‰3U]Z˛$Mď/ŕ?đŃ‘I2#™¬nymŁ]ĹĘŚŚŚ÷‹ÚTĄŘTřţ߯ŞÍţęOW‚žnÂż›ăćůőŐo^:OʦjÄćúÍ•ß"6đÔ[6Ęl®ŹW…®·×?ÁbQ)¶şŞK!Řq}{őŞxń~[••QVTMqÜJŘď”.⧇öÜ}đżŘ¦¸Űî”ŇeĄuńmw-űeÓčâ»Óv']Y‰ş)nŁ%°ż8ájWÜ ĘŞrĹÇîüÖkjUŔçüžżţgşaŞMYŐţ>ĹË•;—µ“ă•ßEĐŰşFüŰ˝?«®´ÔÓY6¤E)…#¤Sďoç/ĨѶçŐNI¸±S›ť2Ą«kçŘžűîĆ_´QŹSjřq»Ýi˘­+Ú×řSŁś“˛8lĐŻQ7hd‹1Ĺů„ź”Íęźďâăn`Y#ť5˘8‡Í®ć|č†p‚Eßô6ŕć‘Ořĺ†qŰK”i´s)V¶^°Ѩęšó«oŹáęĚÎěgßD»úÓ1€«tć<˝)Nń9çîŘýŮK¬ki ĐÓ} M-N=J{ 3˛`wľ‹Äw޵«g(Ij„*ŤnäćúŰ«ëxUüMŮŔ2§ž‰}XĺTÁd©Ř2䣄ŻÂޤĐN6žřÜŠâĐýĽő—í=tńĽ7(OS‰bTxmI ­ĽĚŕçF‚BOĂyţţ÷1WĎ#NµČŻQuqşOX…kŔđśz˙ąiLq„/Š+¨„_#H bzwýVpád|"ÖΫ‡r»ł•袸^3EĹ0âLaĐ&r‡uăŐPxÇ=µ.âOgb;ňú}Dßűčóx„Ő` OÇ# ŁdBÉŐpÁl“k¦&F I¸´ńI·#0[tçpÓÄKz4Op÷p„ĂI j‡ač^Ç>äÎCŞjKö‰v€2ré_ęWňT«&H wŞŐŹZ ¸|!ěçű ‰[Tw<ŃÖĹëé† ńŘŘśú°¦—Ť óűIRµ”hą4¸ç pN› nµDýA·`‹ë­#›W“~"Qď¸mHm‘$/RŻ"±zđžórÚRśŢŕG‰†ď8ľc:Úq5:xOt«‡Ţ“ť2 “çîďbĆÂ×@‰ppŻ‡ŕ—›*öËŇéR5:D7‡ŁŹ#’@«)­´Łóç× ˘Ż Ŕy7vÍBF‰(©§đöLľB΢—µ`@Ńż ě ÷CQ*\[‹şH·`WÄ´§»ď7ŚbvčgLe€IJŁŮ^˛^™ŠÔíkîG†®˝›Ŕô~dÁ‚«$čâŰ®· řqI‚‹÷Wą©Ś®‡-‡¶ßs{›ř°ex1Žíá‡Đ$Űí3§Áß~Ř‚Çiď×Äu˛QdgžÍ°ę#"$"B;«ŃdT¤`„âůJw^űĹi̠Ꚍ:?˝”€Ú’ůËKn±ń‚[ŕ‡ČðÔ$á–.$ó|Ýcs¨CŰw‡‡ń&ł‰ †dBqűEŞ1ŢDŤ•`Áîđ¸JcľÔ»EfmŢňü¦2ROTuł]‡ÄkÝ®¬A#VÄgÇ2wgˇ»žC :5TCî}a%<[QXkMř“°Vbx5 _Ż,”8ńř!˛Ţlů×­˛ÂĹ @”Ůű3Ě‚2mFĽ¬™$Ôűz/ˇř¬˘l ¤ˇ–ĹĐ&úCŮdě@~sIJ:ŃpnŇ ňĄçEČ ]űeL IDp4˘ ůŞvb«1]…ĺ…úÚ8Z¨sţČ•Z ©d´˘a‘ –^+Ű|ę±uîX]Z%+ĹÎ}ĺI+(ośXžĎĺ}đCžHW ˛`ĺ=0,ř˘ÔüĚâŰĎ5„#<€%?é“VZ/Ľ&“OÖĹ>“ą¨ÚoÄL2Ü#Ęł­­ŕX–ń.ÂQ<dŹ ÉyDUÍG›âăÖ”‘bv«J‡4÷Q@śDÍ:i¸éĹÜ%úćÉÓhN‰Tz-|Hś_85 âÇ’ PqŐÚĆ)o]:eš1ĺ}†\ÁA>­dâąp… T2g˝(Ř–ă¸E…€=¤±ýřÜŤô?Ěńúxµ…áâ:q3ŚůÁ˙U‰9­„†üˇ‚‡N)‘iDÎçÓŚĺp>˝ ßĐŇsŁH˛´â źOWO<‡É„(Á÷}đL€ô.ÜÁ,˝)=·r-ýâ…§€í0<ĚČ{¦ý¨FŇ:JźXĚęŹ]EH ÷7Ëz6Í‚ë+jËÇHIZ2úKHË2Â8•˝'«âłĎ›ŮËÁÂGxA˙ŕË>ß/LĆT¦óŕÁů´ü˘ďůc©ŕgĚČukIW¸°IĘĚvł“Ż{ř'¬r×o‰6Ć:­Ů]C!•94]ŮRÖS2vĽ;ż=m –'ĚÁ»ř5»©ž†K»űŰ»w´ÔA‚~ßî±ü¤ Ů’»ľß̞њb™IűBĐÝrŃ‚ ĺŞşrf'2ĹŹzÍŻ®ŻţpĺkúfÓj-_úĘŇĆ@/¬çż*ľŠÄčp}ůOÎś™Řŕ“µńUĎëÎg®“rsŤÜ}Cö» UQzŁŽéíŰü‹š°Ä řľŁXÎ3KţcB…x÷a5$¶@‰ů>•n$KŔ‰nT=— …­IÝvĽÝ‡ő Ă6Wݸ†A|śH°‘ˇöű0Żcí3m”a“ř¦ ćFÚj¬UyÓYJ\ńÂ8¦$Ë”\CŹ© 7|=I,ţTY_HĄ|N,kŢ´Ý|jiťr‹”>A/â¨2`7Ą ?¬¤*ŹŰ—3&LëtmHy?á4ŚäńEş’Č”÷qÉZh„ŇźygiŘYŕščżg1ęÇ3+'ď^¶1Źc°Ź”•7żÜ‹˝ ń|Dh3!ášt•[6q|“îq.~1%0Ž÷ҨֻŮI]Č^Éäý”M:Ŕ(‚ÎYějâJAK˙#,ĺő70 1ÜěŘâżÍĺ)4ŰUfç«FD61ĐŃJ´3»Üĺ€ÉŇ9%GË˝ˇ°+ץ„Mzł‹OüUöř(ŕŤč¤pôk8 ö7Ůs1ŃÜŘ±Ň LC;yĂů´wc3ÁR”FË·9ş€çt>‘ČZčÇŚŔ*†”*-‘Ž]÷·y*›Ň÷8ţ¤ţ_ IÍYŕ$ňʎ˙Źyô‘üp€‡÷u>ae-´`!Ĺ.Ą–bĚę7ye©mÝĘŁ­ńĚtîA!i›ŕ6\Ĺ?®zbg5bJ`/¸yĚÔ"‹¨P%cK˱łĄ«˛ÝĽđUČĐ]ěDçÄŃŮeřőKŇnĹe5µ~,üІź°H*¶KđÇl®†•ʧ ťŹ>“¬=I!®?Ěb/@YO ‰)@ ë`,ôĆKu…Eo©ÇţÝ·a˝`±ú@§:lČPYY Ď:ř«žŻ}JcKˇ ĹČGâň1L‹/Ć—˙—ő‡KKŤtrMZ–­*OŇ&CŇ Ăé¤@I_ŽŞ}%őÍÜúÉ{ňĘ•V(®‰ęátŽEuŹÚ}Tť6;’ŞťIŐÎÖS„ÓĺNTčť7F#ż¦ŔLÄÎŐŞ˛„’š—ŽĄ‰ö>šnŠr˛ěĺ±b%¦´{5 Ź×´˙:ď7^kE6ŕ<ŤÁŻŤűŮ ŻćË™ĚOÄjÁš.5şNL ňtąŮ¨‰Ľ#ϧřz^Ě\Ô…ď‘}˙rFvŕzýnćŁ L•¨î=[·eá& `b©+ýY'. Đ\îdévŻ”Ł"oś{†’`ÜKڧ;jš4»Ü¬ŔÄ)mUěűö6Jć;&Ü>ŹU`źŃĚ755±ŇV=W+­UúQ+o°›|.ŹĎ«úBçtďç7)w·Óp‡Ó~GŁ^Xަń˝ÉĚŹ^s9;$ť|ĐËăg.T;ççË‘«p÷Đ%ő_\ŇMŢůÎ5’iy-•!©LŢĐ…2”˛Ô§ů´ú4lóĄÁnZŞíˇgŃĘ(ÄTl)M•bĆS@@é¤@ËM"Ş".TË®BŐéxÓ9üŕĽ_§ĎąiósŻŮÔzÍa=X€¸uŹÇîVřśÎ- 8™JđžADŇtbED’Žk¦ÝtáPĎ p'ŹaHˇŠ5N µ‡ĂČ §ÜŮ@ ÓR+CP˛ öÓpŢĹÝ%Č'lMCw4›bµ7 q…(-÷đŠ ßľäŻ5xHBj*ú©_¤k™ŮŽPĹ'ň“ŠĆ ŞÍ=Of#or ÜĐç̜ޭNĹ(şŰ%,&G”›¬ü/ÎSŐÍÚ¤őµRQőčłI¦oO=—öŁŻoj_SľÔŢž‘¶É4·9 –ë°xŮőŘbIž¨™ę&X@În˙ÂćěřČ^ cMCäD> ˛ďÎĂxß0L«.˘Dćr·ź¬ĆcC,(u.šĐ§ĆÁŤHŢÝČX3#Ťüă⵲k5¸Ng©TE V;$sه˘đç°© {%˛YiaóAcdX5O•ĺYť©{ˇçCTbű~]–H”•ôŇh, *žŔËČ0 Ć~š$Ó&`h*ĘXĺLDÁDŮ_çdŮ_X…ÂzEţ9Šŕ&¦ Ń˧ăˇk—łŇޞ‚!çűŚŮŽ\¬YŁg FKE~¶Ă÷L´Ua ›Ć‰3I Żźżd¸ňřäś‹!´•Ĺ(Ľ"Ä$ŕ¶x›…Ô»—I'šâ»v}ŠÂîń⣸Ąs‘K»Öę]3r_ś#XY–K ľĽţ#á:ăă Áě[năü’M"CŇ›ÁX1ďą„ŕë.^DšâŹ,Fń6EȤšĐţĄă§Őcî~ąJŽcŰ˙ĽśĽ{ŢŰĐ °ĚÇôăL-Üç_¦¸ôR(śŞň|ďiÎÔ¨ŘOňIÉŚľ>ŹÍLw`F;>a? +©g˝ů,PUŤRd‹oöśâä&ß>0ŻéšVŕ 1Śúç^Bž@Öt\ ¤˙6cu­qٶr(‹Đ‰ř¬ž`~¬~ŢŹ$ŁÂ%ŻÉśO±ťKŤí4—bsˇ-PY™Ę˙şu8ú,eń—ţđ_\.>—‰‰¨ËkODEđ_EíŽmwř"+ Ť]¶Kş'ajLHŘŞÁqB<ˇť˘×ç_ľżż+Áł˝>ýnŹç”7§c4×÷É} ¤¬a'üv÷?E\jĄňâż{ń–$é~¸»˙a”ˇĽýy:ňW˙ ˙QQ/endstream endobj 515 0 obj << /Filter /FlateDecode /Length 160 >> stream xś]O10 Üó ˙ ˇ] ]Zˇ¶Ž2ŕD! ý}I€ÎŇůîäłěú[Ď.˘Ç%°ŽM¤ĹŻ Fš‹ZqV&Î:ŮÝuxÁf »ó‡žI>/uUVőBoh )jžH4UŐ6Ö¶‚ŘüIG`´‡SQ»C]UńźJŽćçMŔ5FâTš–&ą€cú=|Č)Ř ľM=Sendstream endobj 516 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 258 >> stream xś÷˙MSAM10‹űvůeůp‹ ‹ ’÷‚ŃÎËlessorsimilar.‡ŁřůťűvĂ÷ Ă÷& ř®źçřő§ů7ůF—‘’‹––‚”€†‚‡‰‡ü˝ű™z„‹‹Ź„›„ř˝ű„Ť‹Ž‹–””–‚Ź€ü ÷‹řĎüh˘„”„~Šs…‡5MOC‹K‹\µ^łTĽWąE‹"N .t‘‚“–ŽžŹ÷۱Ŕ‹Ë‹şa¸cÂZż]Ń‹ôČöč 7ź ‚!k–endstream endobj 517 0 obj << /Filter /FlateDecode /Length 5740 >> stream xś­\[sä¶r~×_S™:OśÔMÜAźĘĂZɱ7±OŶ’Teíę˛#z9™Cí®ňëÓÝI$G#ÉĺríâŇčţúëFcţX9[řź˙÷jwV¬¶gś1zşň˙\íVß^ś}ý3+<Ęˢd«‹gî¶âBçŚó•Q&/…Z]ěÎŢg?ŻąÍ Vđěa]ä…†ev|ľYo„yaXö}6ş\o¸†žĘöŘF䥵ٷîcÁxv~´nëC]áˬ¶~ UJxé°ôÍo˙ ˛,\·*·Ćš.®Ď2±ľřýěß.Î~Âvbµ=śáxąÉaُP9lňżÂ.´őeđm8LWďď˘QQü$ŰALłÜ°PţÉ1A–ĹQA2Wř ňŞŮ­7Ęrh^fWű»O7íöćî VĘD!čałăÔ„eďďŻ˙h·żmv—7ÍÚé “0§Ľ4Ť%ÍŤ‘+xSYP Ô+ÔtR›ľĺ†ćĚ·lv;×8î•s|ďéNÁĐŚ«MĐđ}vhj\Ž”Ş_¬gnî¬=×ęEĂ h¶ż5Űj·«ćV Ĺ)")L.x(ÚźüCÝ®·G×íţ>żÚß|%Ă’8<şëÚ}ű¦]ĂíhěěBąy*}ÂŚú–“) ŁYS€˘2'Ö`E©łmłßÖ‡…)Ř\ŰS„Ň·L§° WLŁ]UW·ŹóĂY™KƦĂEƦ…”9Ýhlý“çŁ<ŐLĺLxŔşX[éBę¬rh 9ŘaÖ Ú+hŻ2ö h)Lˇü?<Ô”ŕ&{ôŤ@ÎÜË–—eâA }) ¬ > Î ëżRŔ؇ľ#ž…čéDfĘh!Üä`s…řľ˝‹·ę‘ ř$]€ÚűUnJfż, á=h4l™â10·1 ·kó7°¶úžV¦Ś“ˇ…(Fń/ľ˝suqK.­Ś§­'ˇŠýćˇď@gżf!ÎWmWĂâťDČ7,Ťß%÷~¸Ä¦ůu=¶JÜF4ę.ńĐČ$uV±Ó@ŃŁäÔ0;ÝđFâ—KşâwČĆ;ś[Đ0ď×ĎťőĹ›¨Ń‚óMr×$Ö“ + 5Ŕě8 §¦űmłű2×#6ŇĽô×l0BÇ·ÔŞ]ćY ü‰*ÔJi›pćv^µ °9˛C.yĆ fG÷zŚÍ-Ś0ÄŕQ0JöëúÍśD¨ˇĎć5˙ÇóĎ#µąZŁš -łŹł–Ły®AF˘8x,X,˘QCRř¤j!űé!x5rh˘„ĐţXPlVNäRf˙‰ë, W`)H°d°íŹĐ§ {Â^ł'˛‚ |ęžÎv´%¬áYVÁÄqdqł&s Şô'î‹„}á*QÝďëöŁ“,â\öýľ ĺ[ĂwdóÂhz—l^ąeůťp®vB Đ<űoâ°–óˇůŹ [šB@Á ^ĽĘ<{µ+Ą@HĹń­(rhÜoĹů…žîŰY‹€ÍR˘řSAŁ”Ŕ&d8ß÷Ů»H“#×Öű7(-ôá4Ť€[ŁXV“?w›EN$úc߸·Ń·Ű‰˝¸]‘_¬wű4&ÄťzýF @—˘LŽ;ĺvP-xÉ9’ D†=T˝ŹM(e Ű]şĹC  ¬ü3÷\‚—TŔŻŁĄżm2ÝĆ(I}¶s|ph,@Ü`‹%őűß˙˝ l- /ßôˇ#ĂËđµ—Ž ’/Ţřp´đ‡ĘaWɲÇЬŁ|űE¶í§Mľ›ˇŕPł®}ô© °ZľFď¸FˇVKF°ĺ˘gjEŤäPel BŇăŘ:ĽĐʱ1×ĘÖ¦d_„O1ôzŕ©ńh0Á8ë;¸÷,Т­AW…Ż…@äܢETo-Đ—ý„ŤKŚý¦ýäšC `Pß|ž…˛ @=0sXŘł„©ąa/n§hŤÔbÎęŔPąd“5?›Ăk6póv><űHK–2OMd_3P…¬Pď8kN.ëľ#Фó~¤ż`KhCáIYJćČŽN­Ćf45ű4Ű˙|®»Űţ•>4 ㊞˛ŚĎ,˝ŇÜLÓ/D] H›ˇ4hŚe˛ľ.DŚ=X,fö¤‰B‹`©Ýޡ…ŤCRŁĹá!Đ€ű賉!†9°{ÝŚĘ8›?P V˘M¶Ű»×­TŃĽâĽoFvÔT‡Ă$˘áAD˙%‡Üv;đ–˙·»ö]HŞę?÷á±P}x<čóB€Hh ±’Ľ?ü‹ ÄÇňüţJ3öG‘®D' čp‘¸·) 8€±Ůg‡ŢÂgsÁŢ* ěqÜňĄ°ňN©ŽB<ţÂŮ=ű<ĆĐriúŞö&{!ÉôHŔrÉĄ·‹’÷)Áą0ŔS >@`âÚ’•Ĺă€#/ĆđjL9N(§Pĺ0Ŕçp'k‡‘ÜČěvD¬ŻÂÄn]Ľ›E–ďÚŘě<Č21¦evő'š—21ďÇż®g%‚6˛%Á—%‘HzÎHÚ‚ćĎ!q <śíIś„9—ŔĺdŽěµ,1cqCÝG`ˇ?l÷ëÖ?Ő €’GÓ2ÉÜl«Č{ŠČh $Eł ‘ţe ˛jđ)ČNŁ™×ÄÍŁűBíD©şŞľ[rŇݲ‰Ľ*Ą¸h(–…0’kŕ=Şö:ťĄE—źRe˛˝gRô3XŮ(¸tt#™"şÁ4âVG¤(H“Ą…°”\Äp™Ĺ[ü2ÉTK™Fż:«\TÇҞĀ…ví‚‹ oä÷ĽfMP—ł=•[»MßęX¬Ď5&· č€HG›‡Ţ˙—±kŻ“,gßćGRĚăó¨ŻAߪÜ$ď۱_"ÍqD쬊« ďEzşGł+{úH}]q ĐÍâŽwžNŢo`ľŕâ0>=Ú¦ÍظĄuďĺ9#·]Jâp) Ö]Eüe!yČćÚŹľčôíbű JÉŕäfčĐčĚÇüšĹÂŚíŢ`*Ą>-ÝŢiŢťPhäg˝ â7"1qv±ŮoCý$‡Éč¤ËGB錍ÎŮ@ę˛ĺ˝6lÄ@MC¸"…“±©ŞE"­ZśKAĘM’¦7–ă#Đ®Ť– ŹUSNŹý@˙Ň +5 Ď>.HýëEunć%Oäŕ—W¦ôŕäP”§Š™©lďćXt‡çmÔĄAgî4ŠI:Gyüűaµ„N{źeťńřĎe’čÚΔ¨DrsíČ~P«ŚóGMř‚’EQµĂÜŮ—óQâEÄ·@ŢÚ3_W€0g|‚Ńř0UÇeɨ°Ąe 5ăKÝÔĺĺč Ĺś˘\9Đ&š5ĺs(˝‚'䬂hŔҧ h¶Ą7gŤĚ{¬Şm†yÉ=,p±°[çű6ŚŁ®cuĚ«Çp{5L8ŤHwö "˛…Ńç KŰ%ä‹pSB i÷;×)ÖWřQ“[¶Üz{绀ßU][é».g˘ńËM™Ű>J@f”J1Ž” łtÖežW‹Dd…†Őbń)}ř9NMőËůň$ŰSň˙Š<…ܢ” \ÝG›}$†R:3é»yI68.  Jˇh‡ľ ;Ůa’h4Ô˘N ř\‚űŰo7®‰áÁS”&~V].“2~Ô;8Š‘î$výÄ|kE­·mŤ=“%6°×ÝaýśßB‚‚Ld4B—ąŃT}“ń×d G2 ý)Á\‚\ž[¦J‚vW5ý™PÉč=ŻVÚ©UDuXo"%‰`B®%Vé©ěĽ uÁÇׂěóŹľm˘oíţ2$aá׍‹žKôŹ4…eŔŠŔżgŐđŢ«ůş—päŮÜXĂm/ŚŇe©˝Ś gcşŇ‹ĎĄ–˝$SţŽŹ <¸ŤජüŞwi†vúe9˙™XíE©žićś“Ę_@@É +źäţ–˝,…Ęr>ś™-§P]ŐfP;´a’Ă›čÂs‡ Í·Hk Ä{ăčâQ‚óß(BŇŮ9…b…Ë€LKí"‘Ó»Ż?K`@™@žËĂ˙ŻĆ+13Ałő:—Lh“zĽgśţah2–ö=‘ítf=‰Bh»ä48Ćç*f™ŐŽH«Ű¬‚™ ú M™ě‘šŔÎ!ÂŇŢ “¤ş6ÎŻvDbqX¦¦ĄŘ¨DśŤ˘÷*CÄš­‘:¶¬3r,źâlĆČ7L›ś%Ü!‰Hg 9é'ě“avy8™Ţ÷5@˙>%˝Î$⼕.˘ďĎ>†Öí7™Éě3šŤRDżSz;7íŇć¬(Ć}nÚ¡_7á‘řpÓ`»Đ?Ü„SżĚ•Ʀ‘y °7^úô€)rU$#,ˇh¨ŢSú ř“ůšŠJ©eśćtsQµ°7)‘QůĽvĺ|­)łÇa%ř`0#˛"ĺBŤn?~/#rŠNKKřŰĘ(|Š–J3ý¬ýŘěŇ•g¨)Ö[L]>—ţâÓ#nËĐÉéÖ—ĺűˇŮ»Jhęa˙á¸&·Ě5ë“g»ýőM“ű mFX%oÇŚÔBCă¦%G1!jš„‹.ŇT˝” č>tţËTâg0†Ó~!ŹźöSGĘšOťYl8jYi§‰?Ú1lÔÂI`PGÜÝ´»ĂBq°ŠŹşj˘y‘aŇ„ž+™¤ąSůúfďÍD% přJź´!&¨mµ7‡™‰ Ö1F4y×4WCÓ¶ÉéB˝`(BŃNעUö‚Ü:ŤĄÓ±vĘ׫hdŔ^ën L’˘Ř)rěP—ì@L˝#Ą[Ś Ň‚ R0eÓDă𔊠äŔŚŞZBP¬â3ž*GQ ,ćM_%LSç ¶ęĘ:N­°N]fT\nb*­' eÖ<ÍąMO…ęDAXŞďϧ5ů?uX·6Ě }Ş«ůC+Á%ô–rßî?ÔÍlTŠÂäfX­Qc"÷C}7¬˝”czS¬TâeÇŤ‘愍Ao-ś@ŹÜĄ•&.°(Ťů6Zsr©juß°đôš9 p}ŔxOřĆOXcéVZÜJŁŃÇ=8ć4†ëIŹ÷aIýŔ&˝{ăw şç˝t˙®ß;Ót&1Ó’–ť˝óèäŁŐ<ü¦ĐJśJŐ„‹Ţ¬7}!Ö¬ öyąÄw3g'en=ů§ţştĚŕśPx_w¶8ŃćBHc’+ßsVĽ}Ó¸cN&q’‚#÷Ć“AB|§b5€…AżĂ+=oIĹ’X„€Ői,jqHřî&XÓZ\Cáť™ Ş»ř4oĽ‹Hęç˛íłâct„ôkö¬#šäÂi¤„Ó*»âŚŁş»3•çŠîâč|Ľ‹VÝŐ]t–uăĹdüÝ4¶đđžű%xS´xŐMQŔ*O V×ßtdô]LŢáɰQTGô”§ćHIŔźu{÷™ň©Ý uö1L{íűVĺäŕëΊSr!Xţ\Ǣ6kČ‹¤ćC“Vü5—źý‚âU䡇hm´ˇžM‹Őş 0«šK»·4ťň“ŔőÉÄ‚ćieŠqŞ…+Ák´‘Ánú”r‘sťÖYĹa­ďÄQcAEcî?Ř uľN#˘?¶ţuF~ßôĺą3AÄܱ™ľl1fבkž¤bSY(Ç­ô‹ž‰âg1E`š¨bĎ6¸żDäđžÂě)ŢÓňMźüw·;űŃŔEĎ;z5iűMpfI/p€éˇ˘¤óaĂâ8ţAŐÎźuůnZŮč îpq”‹Ě?©bFŇýbČKtĺŤ+´EŚLăU.%­®Ž‘¸z"—ă˙ ŽůxËA°Yţç-›*Sp<TĚÎ8GIż”r©h%dŕ(==̢6RK ˘\Así;eňKŐnb9AÜtp©Ă:¤ůŮ™JÖ»©Š¨^Aâ^·É gzx+–»0sźJŤ«ô¨NV …dD= SÖ·˛ÉV%!Üć°P+ÂWńÎ öLT cŁ4˙Gt$™ä fęV„ĆŰŤą/‚ ’łý"ýĄ©´ĆU1а:fnűnlä.Gř“G*GP|±H>‚ˇ9ë.ťĺ,nő&,ő>©(®KÉ)ý–űM—DINŁD+Pý{î‹kW”ů€>>(…üéě˙”SĐendstream endobj 518 0 obj << /Filter /FlateDecode /Length 4512 >> stream xśµ[KoÉ‘ö™Ř‹ ř4cŁoS˝p§+ß™#ŘŔXđc´Ś=K`±ĐřP"›tIÝlNuSŹůí>lDdfUfUu“µĐAĹę|Ćăű""ł~ZÔŚ/jü˙żŘžŐ‹ëłźÎ8˝]Ä˙.¶‹?ťźýţÇá óµç‹ó«łĐ…/ŕ­Ő–y©çŰłJ-Ďß@[^ˢq]3ct8ż<{U=ż[Ö¬ÖŇňÚWŰĄ€îNé*»ií»Ą0đ‹Őzą’R˛Zńęe{“5{‹?潪ľŰ-W±š_]fM /ţá¸3®ÚěăHµ«Ţ·‡…żĽ‘<Ď÷ůçů Ú.6d4« Ş~8˛if\íÓ¦ołń› Ú´Â4×a6S+ˇúŮl>’âLpŃŹ´ëÂţ– y4›%Žđçół Ćäâzűs‹÷ ÚżžqĺÓva%H Üž)­,SŞł9űďG׊ #XĄrhŻŞ?Óš`6難öKőV]v]T›ÓU“/˙2éW§×Ú+çŞö޵ÂW‡ĺJyäŐ·y׫¬}ˇň®ř+ďr‘˙€&¦%hUUĎŹ™BŐ¦eő¶űő ő^Ä\r ČDßś±ŻOЏćĚÔ"řb·ľYeP· #ŤµĐěŕf÷®?ť¶Ő~Ó^¬iÜ0ˇýâüĺŮůľŞ®ÚĂaŤ瞆Řßm·M÷^XA\v»[ąŘÝĽ[w×ë›8°Ů]żlßlw—ë »ęš-Ť›0HsyÉű7»×űa͡ý¶9tíčP{Ť`¦+ÜKęóîb÷nčsw{ŮÖô7µľívWí&¬©úćŰçËŻ¦†jw"şęď‚«–r6Ěă’{ý FYyďxëú˛˝«Y ÉŘ×b•‰Í×dßś{ĺ”Őţ°ľ]?/D0ÇýCWBá°Đ®0-íťg–g¦•Ţ<Ţ{Eí™^hWóGß=_˘{Ő|óuŽČ „Á9Ĺ× Ą@@şúŻÂC>F\/ŢđŠHma O‹2B‚Ü–G_Žm»(Ë‘k5ďDI]l¶Ašĺ&ÁAŢĽÇÍ×4Ż—ÎToŽ»řj’ĂžEÍ[°>kŕŚ[U˙}ÜUŔąu`3B#Ý ü±Ç>öjgP*@çć®@ËáyŽ~˙őĄČ@a¦'áőv».Ŕw?!˝Rš`jÚšäH?V˝]†B/şÇĆBćµ’Śců˝á5ż®uEd [đĘW˘őąŹZ$X˝É&®~\FŹI lHú!ŻŰGIŤ3Ą?«Ô¤1LóSB+ţ¸ Fo¤±P§— Nîž"N…ŔhÝĹ)Eçőőú‹uÁÇ{Şâő稼“ŕĄD˙}ÄÓb´&Ś6Ö@$ІZs9 WŞ4ţŠK¦!há$óaéŹ]3H° D.ČŞ†8cÂđ°Ë¸$;ą ź~ÍśĆRFu(HbĂŁ+^ĹGŁÜ0RÖMż8ΡÝÝL×ÜŞrUOąŠ¨ČkX-Jý\äöBsH'tigż-ÂĐ6·ˇŁ)śś„@™˝Ş®ăXҨ$vi ±ß1Ëjż_í®˛W_f˝)QđUiýAĐ!ýÖ Śüi¶A%#9NLŇ\í¦Ë÷’®Â¤/‘‚đdôĺń@ţ ÝĽpđ%Ő>€ď¶I đ|˘”r@JrbV>—’  ç\]Ć…›–áęŁů0WŻÁ‡Ś> ĎҰ` u°Q٦|Lwśö§»RpÔ°ˇEµÔ50‹Ęç÷ vFžŹ°‹‚űwŰbŘbG K…_cáí°…ĎÚ"…pJ,ĂßďCđ ňŘuoă^ą+şąŇŇyąŢI- ]Śj±«kŹ"zâjkÄ̱0jŞÍ¤LË1×ĐÁ¶Qůüľ2měPŕ‡†ć’žđˉÔ8,±U|›CšQoĺX†¬vGË”?QSíwą}Čî}P‹­2WhY[ńŔ"0A®’«TĄć!ńmýO…OÜ-çmé4›öĐ'-‡Ý»üPRŮM6ĎѤč2ŠOiäu0(éa|ªǬj†2đľ”mI0 ŐťĚ${™GˇńÉNxą2…ĽL¤Ňs$Şá‹Á[¦=–ę/zŮ—×ZŕX+ΑEü6Ŕ¤42 Ę™dË•®ˇ?8ü÷ÝusÓţśřI°¦'xąNÁŠŞn›[tëxJŇÍb´ŕĚ9厄âžjz]!ňmÓNÓˇ˘î°‹K$§8ÄÄjŠëÔĆňR‚±2ˇü¸bÇq+ča˙:r:”üóŃ’ÇeŘRiłŹ;,ýe·ŮDĽW˛z [Y0<:9<­Ü¨Â«Fg€ÎĄ—)!)”–Ąm9ÂţPZŰýż–㝥P2íF ÚšŇä{gĂjCĐ{ ±ßĐ×uČyŹ"poÝśSMR=ůz)žz›‚Żä™ÔĘkÔĆ>ÁżŐĄ|Úć0ÖačĺńśaµißöWRE;­,÷!g$ô4–‘3 XţčąĐ8čĆ× ͆Ú=÷[>*áýE‰xŻ`xɤ.Ścy=™„ŻőçAlT€H±Ş (¬?!˙ö`żŕ2AÝ´Fé%2iúÜ» +Ǹ(´ÚkŢŽ¤—’Á‰IĐ`ş°ÂŮR·±xRó„¸1q8»ť+ČG =° Ź"9n ‡¦Ýô˘RxîŇTěň zŃšd>Q Ę“~R#˙řbTŻ,ŞT`ĚZŐ€]D”Cľ†nd9…"V{丬ÖůŞ4>$¦Är_”79ŃŻ)şPGwh))WŠÂŮ2ŚO¬˝ëzď ś{ő™ž*60Éúđ„«žI%q^píߥ„vrp†C!”MÂb’žŚIŚ~)RÓM¬FĐŃvi’'Κ5„(I‰ëŁ V#üçúP'R*”ßg=ﱸƉĺ¶Í‡vŰ‚Ë\e%ť'şIäŔÍ(:Iä&µŤ˛†xňÇę»—ˇ \Ź şÝ¦ +Őą‘ą ń—„yÔ sÇ"üDĚŁiîÇ<°¤áśű!—D&'™GI€QĚź*Ç”éeąµ,HëuvTÉś—˘´5JXÜoz1M¦'ů¸žÇňeMÓ,¤őšb˘¨NúKÄô ˙€ô«¨BÍÄ+žŞ=ĽĐ!č;MC0 Hµ.©94qvČŃŠĄ4e÷ŹűŮŐhČÓ–-ť|‚áX¦Ąú$®ś™$^S9~|hvżĹ”řÍ-y$YGNŕeÔĽťę»p^Ďs“Ć«LÄQÔ#…»%J¦ńŚźĄäŮ,ĆĂ›3ΔU˛ĆˇĄ˝[jZ6`÷ąiŽSÚŠl„‘$ ŕŇăµÓ˘&{o8$>ĽŠ*PÔ4PV âŕ§ŠćďŰ}Zě¸Ř1ˇŹ^ Çh.IÇu0Ůňě¸îqĎuîŃ1řµĐúiÇ`é2â«ę›żg=ľeé´KÇëÎşü\çäů=vĄ†C+Ę©îÍ× ózÚí aŘB¸šIîué'\Z‚·°jćT¸‘.ŕ Şň=ßĺEĂą[ŹŃ&h?Ű“Ęt?Ô×bLŔśNwuEŞ´óęůÝv)1ŕ˝ _`]ë†ú:2ocĄ ˝„ÚŁń­7űPU€U¨9Xőó Ĺ€łx´ Ü®§úÍQ_ßöuΙď!âu•u‡RÜÉ÷Ž%čÖqA:pöElĄ×ĂY݉Bq6Âôt<™OúÓj.jĆŽŔj»]ÁĆHiÚCş5*ň„˛§łe…·0ú©YÁĚŕ±ŮěŕCZ·;=?$ÉË"Đm6›ą“/rhc(%iŇ3^莟´Ś8ˇŹĄĐkË„Ţía!Ę”ę!Îč"ŕłV%Śęń×»ţP.R1ú’ Ęßw3'ćáŹŮZş }Ź>±Ř`ôTźq€zĽŔ$7‰÷‡Â%WĘܨµ§E3‘e:T™Łz=şÄs™”$ňCÍ(FOcBžÓă{H8§°8c°ÖµVďUż ŇĹ%x°dÓłÖ˙Rkâxl @ B±uü´@âĹŰg~EgžíÜ™§aV€é/˛†Ż¦%ţ@öŃ4o,;-ąÔAmM˘@—o÷hž0»Wg™IWů«7sëvLU÷]Ű«8«>qR3;~ •j˙ó"’říëKeDc8•t÷yH$ţSˇ-ÎăËÓL™ţCÁÂÉŰ`“ŤăWmÖúSBÖŚóáS™Ż†ťóűĐăă°Â÷'.UÄ0ó^%At-•ĺĄę¸dčTJŻĎţ€XA}Ĺ—Gä~îűÓźgř5SXů×ř¨‰#ż˝ ŹĎ†/ćCE@9ŰŻetPZÄnS»¤Ď“ĽH{ÝiČntUżž•çxy9}e$ćŐ¬´Š%ÁŠ=ć.<€ÎpÁ[0%!B3 4ü "Iů”ëďŢâ%Ő‡$ŮŞřEÜ7ËôQî\Í«Râ9:yőéaaWř u&ěRV<´”WÚîçMp)©ć/‹ÔĚî‰wIź9°kf”5& ;^î$ŘšwŽßy™€í©ébË‘ ‘čô™Ĺ_Ž8–†Ń’±…[ěS’bB źnŮür~Š[î´Ë„QĐ;o®KOf¶ ”&s/^ ‹#Hp/nĄű˙cďlżšß>xu=Úţ›Y÷†ä©¶ř™qÖň±ĺč9zŚÓ~HMD6-~é/!A`&ŚőÇąőČé)v:üj:P`¶] hă,ŤôǤ!j5§“¶×I!h!Ýő»Ĺ)ěF = »o˘CĂéGĚ›cCęţ—¤U¸~!µĹ,łŮŕ]*Z„íÍĹćîr}Ɇ/Qţqöa(zŢendstream endobj 519 0 obj << /Filter /FlateDecode /Length 5069 >> stream xśí\Ëo#ÉyĎŃ} ä$xs3^¶»ŢU6Ö€˝~­± b[€š9ôJ wHQۤV3>äoĎ÷Ő««Ş«)Q’ c)˛şŞľ÷ď{ô|»čZ˛čđţż—Űłnqsöí±ß.ü.·‹_źźýěϤcđUk:CçďÎÜ3dA™l Ą %TkXśoĎ.š?/©n;ŇŃć~ٵť`Št¦ąM>_/WŚń¶S¤ůCź.úzą˘v"˘ŮáÖ­›_»ŹˇÍď“ŐĂz€­đ M´Ôţ a8<´źűĺíů MRz¨­Vh:ż:kÔňü›łßžźý ×±ĹÍţ ď±xýţĚPÓrIŠ•Ô,¶g‚t]+xüfsö—Y>ćÇ6ÝĘôBQÖîŮřźýHPĽ#m§›Íîf}X®Ś„ł:ŇÜĄlŘ}ťü…«$KűĐ ţżD’-=ńňDëî’\Ţó‚Ëw¦…MÜĺ˘Öé˝R1Ö»ŰĺŠK ÍHKÚţ°ľ\®4×´íx¦+»aŰo–+ˇ8EÂźîłµšÖfTP’&űfÔś7Ͷ˙řfątâ'HnŤę,)xŔ¨Z€…IŁ|ŤJPŇĽ +WDµ˘SvéEó—äNNAcšţÎ]‹…÷RÔŔoŞŮÚnłk«€zŐu@Ťű™S‰&ZóŢŇ͉l#űK´ Ę’=ý`I& ¤lčâü«łóżhľZ§<ţ€»ĐÖÖĽK®?5_÷ýĄŰŢ08ÂËŇšŞ`ŔĺŔ`ŃĄŚS´ĄŠyűúťc-ëŚ2Đ­`Ŕ€L˙ŕrť,”­Đ`Č~/RoĐłXĄ{čÝfZfZ ĚHăv»@]\®2TÓć˘N žHNÂ#oĐN jČuóyTŻüŇ‚uřż wFcIQpĄÄoI/޶ĂFC•"ŮRÁĚx˝ĺ[¸źŕ˛ů^¸\Ćw%Z)Ô3Ů^]ĺ{SĄ„·”}%‰3¶IŮ˛Žł‚m˙Áh;°Ú‰……\H#ň±m©n;gD˙R~"áo«ľÚ ľm[{_ôĺ­u˛“ÍwÎ=R‚łŘaâ/zČ©# ŕá9$…0ˇsKÎ/f-*Ĺ–‘ŔĚÎę”%Z.DÎúĽş®I´ýtŻĎ`ËĄ2tóÓđ1wŚÓ :G.DĄA§Ý~8s ˇ °8NQšďÍzD`“ěŃŤŃŽâĆÚ•TO"#Wg ŇJ©SÔůôChęťęL·\ "źÎN :hĐDýe+eP mxëßdŞžęöc üä ŕŕyKDű»ęE ś‹çúYŘ;iGz|–Ц« Šhđ´U˛pθ ŢčÎĽL’ŕ%Ź*uDié ŽD‚y#ŹŽŕUŚ<'×ůăÔžŞ¸okqT!ęD*nZ×Po­H&ď› "b‹Y=UTYĘ îÂŐ“”!|)C\ŵj!LVůožźXHf@‚¤–]f`?ÉvJ„OŔś%är)2é«Á ŚZ’a‹üś,c˝\€˙>OÂ&9—d\A’™˛ĆóÖP0e'ç\/IŁ2Ä0“Q%-ŕ4ŁÂÂ&¬ŕ÷žÇ„CÎäy qx ź:fŔ×NeÖQěÔËjđ ŇXHîň8Mź•Çm2&˝K™=/0-C…,Ó˛•RČTÚ|H…1v6Ž+cö†ď˙ł·Ół·WöšÚô­3Aă˙.Égšt›C˘Ř,”žKM`šç4˙÷Ă•?Lđi|u·ŕ|ľOúx·Y˛•ş~„®‰;k«)Hfůx⇷d‰e+v3U`Mě`fvËÔ”¤ őr &ŢU5»íÝf9q˝˝ľ=ôJ cMúën):ËHl'_k]Hv 5'K¨đ5gů/Ş|9Ŕx~^Üt€fS6Ž}ЧÂĎŽM•Č`_Ë`҉Ú±Z٤S!mrštşXµńBŇ™jS’äNóźäL, [€álö;üË`$ţ5c»ú!< †Đďýꑞ(yGOY†= Ůß۰>·´ "Š×HuűÚź!9ř5Ť ,˙t—rÄnÂYó%z{{=3Ç٬ß2DxóJ4X=XEif°!˘¸d iN2HăĚĘ4Tś,Öۢčđ· Đó¶˙żµpeKwÍ—˙#Čĺä*/'»…äyWtB×ůßöAn„+˘§SŞĂ4őLýîkF),É%tĺN5’6‡]¸ ł’w瓉äíЬż.µĄ±hµÎŠał©}“0F٢$—ř \üŻččŤéř“÷őő—˘˝{•ĘäQŞűHq†O´wĂŽ”U@—¤ě<"ó+­gŕĽî\ÖEc˝'T(l˝‡‘flt„JNŐ}[ńÎŔ±@Éf°6V8Üp¨QČ0v2¸ÖŐUbÍOş Cš‡µ ÄLŮëľf˛ŮM†dőWůףbÜäÔu·­ÉĚŢ?XAŇÂĄ§ě¶.ś®(A`€ř‡a×R=‘bgě5s/±żsĂ<Ž0‹C´¦ÔNć0uذľuź ăłŰî†őÍ­˘ŤĆZn%)Ł †°ÁUł\Đď ž‚Prž•i÷ţP«ś“ßĹč”ď´ź¸ĽĽ™˘wyŔEë›[I‰B‰‹B/>G®`ţn˝ţ ¦ř‘ń,ú@i\y‰˘x» +¸_Ťá®~aď Tç/0ťŁš*ł˝J á4ČM@R‘U­¨Á¬RfÁ'&—ÇĘD? `ťg >„˛V2,âăĘoŞ•…a}şň¦Ćn ě="2őŮSíő®młţŕ†4ľY§Oě\Č×áSGe¸5a>z54˛G`·{žZ iĐ;D§ĐĄ_Ç)ć‡řĽ—ŽĄrjşäfÖżďÂ1»Đ 1p¤(Y8đqč×›čşŮč×j÷d·ŹcQ$/wď¶ŰŃ «ąbźxy22Ö˙ű!^mŢŹďłÍ0ŠXm`Ä”.ÚÇ3ÖD{őů!X~źĆź¬?űQnęS,†ůiĎzVĘER0/Ě`¬¶×°›­ďÇ; IĎökqżüqjˇ|%÷ĽwÔç[”É<)m‰ˇŃns‡•‰‚H-‰bhcĹ(-ŕôŁęčQDZô†°°ßlv.p€÷{@% S}˛ččřÔ ă÷Ş@{@˝˝ÇŮŞťŕg!ĐâÜgIËŚ¤2;őĂ˝Xˇß›~ÉQŮńٲJWQäßn€’¬€`I–SÄý5Zł÷ŚŕgŻ Âúa@C)’4Ş1n’Âűî-pü}X2­P XMŞ&5­~Ź=:ű‹ŻČŹřĆXÁ_fŤ´ă-ŽŘN¸˛…"×5x¦5R¬_R™îç ŚxkM-XrźÍ«č™c·Ž2ř±,b°‰oôN5 éLźz7´PË}7Ł>jާ@Ťą;ČŐţ~†ě‘Ż `ŰĂpź í˲6ošFvd!_´OÚmŇëě?súŹsß(D«˙"ő\ľ‘=Ö4»1ĹbŚÜ—¸äऊĚĐ=ĺ˛âˇ”ěq«á>°ZY—ǶŢb&<^ÉóżdĺŃ5ú3EBx)N›Ď©ÚÇuíVÜÔ|µęý µH›p ´‚¨e‹Jsžř»¬ăè6(k©Zđ}¦ —ËX×­`+(Ükły¬<­(+űW‰C,ŠV—2Éů"Ö)ŠyŃGÔúP™˘ETĘ=ÖŁ7N#Ą=ťň ZźěrfŢ|ńŐ„Š0x3¬¨ ě]+©6´e -ŻU€ýţöŁ»&x ČT×·űĺř'\o§¸ övř„vyż]2ëYsďBţ)\ţȰćEPÝ>ř?+`Đ`č4˙őĆťC€BZ}AĹúŕpç_aý¨łZqSákE0µ_¤"Ó)‘ݰuŞGÉ$N;¨¬-˙ť,Ś ůÓŞX‡!ŁŠě5eň¸táRÚ¤ýX@wë±]–›óó´Ý NfóĄÝÖ_—śŕ—0@Z¶ uG _y2Ö¬·w…3wŰa4ľăQ„Šř|e2(­ĆÖ`185vîź…Š)au–\ő1iy€~ăaXfý@}¸Ë 2zě§€Žă(yň/ąî„Kţq—®ż™kŐR¸Ű"]z¤]=V[~g/Ď% ¸ZˇíkĚ[ZĄ¤±¸ů§ąö(ÓT/Ň•§MoćĢ`áő Äm‘6]ú„ŃÜ‹ćË…6ůĂzŻŤ´Dń§ÝŠ@¨§T–ç0ŤsI©«g)h‡cjŮńßź›•87™ńŕ÷Ih&?^w ŰŐɶu'MęĚ/^lÁâd;ŻfăUkÓ Ň`ěćĄýĎ_Ö­a±Y/2= ”[3Ř ĽĂĆ~Rˇ,_6ö 7¨Ýě8(}ěć+7xAÁö#¨x33*6ă ßľť˙ßŐ®hK:¦ ÜŘUF1/¬ě[ĄŘdŚ|h5[Ŕyp<]lĎxv§‡oŽŤ”†Ş1ŕT @}ŞŽ(¸|í)C'f~čäouĹř«eaŐU–14QĽn˛ňçćÇ8ŇÔßđ =Ä«đ(Ş7Ťr‹WQ Ü p–MËłd›ő&ęS#˛ĺÖż|…I?9îÜă©sź”č.’uIűIĎ–Š×>ćL9>ŞČlkˇR˝t#\'LWÓĚ^¸+ &™ m¶}Ěż?…R©®Eúüőä~č˛qYT^.Ö+ZXy5Ę–j “uÝŮsIÁŢ&š‡4ÉvűM?ŚeŮ™z~U…Şľ0…oŤÓ™Q„;Ç‚şž–  ¤R*Ó2şMćÁýoŕĹpĘ>ç@]ŕ˘čÉ˝›ÍĆňĂnf¶Xµ2ÎZÝă­@Źy| \Ĺ· IŐ«ëŕ~UęlËĹŃYp?ČĽ¤1ĆXěőó9ß^ŠĐćÇ××_o e®±¸É 2š™°oK4ďîo/­ĺÔ€˛‘ $ô’?«B‹ĺ ŕ8Ă»¬ 5Ĺ6Śü=° y´ĄF«‘­m|K­„6eO IGćϢA!WÓő>ű‡t¸+EeN5ďg+śÍŚ{R4˝08ߌďĎăBŰÝŞ1o¶VVű‘XĄe<°.óŠČ Ě7'ăJČ!©BL!¬9’Ńî†:NP0$ÎGżŻţŹ“šűékRͱĐn/Ęů$c®Ďšv`"&đyŽ'\Ĺq·BöîOČj‰őwÁŁ8_Ô‚îćĚĺ1ĺĆQ%``w­Żx1‰x\׼|u®ź”%BΞücŢ ‡XeSÜ5łlH-´ęŰTúëbf§w@G(ÚÚ0$ýT•IÄl(›ŕ;$ ęP xT˝?vÖ1hęa¸ż<Ün¬R!%a\óĘĹśf8ĽâÜĺőţý.Ť Wűz÷«®·9M3Âę™ÉŔ\.§qřčur9|w·’ËMlş o\d˝ě9jJ~ř,ë! vËI1ȴߏł[’ťPŹű¬î˝ĐT(‚ÇdfI;ý›˘aŢ{>í¤đ_?í„löEiç4âj;ć’,ôŇ´Ż2dś‡łN@"2%÷UqxW±wű#Ţ®ö]í[łn[6Jď3¶ŇÝdÓdVÍ=†ťť˙|¬žZ[FĎ»‘°'NĎÝú›óéôŻ˝!¬)469!oÇD˘ eíó,ăf7|šI4ľĂBSUľşĄšłq(¬JÖtÜ`¬*ň±Báü,b…3{XUňŹ<*BQł.ݱ@ČÇPçÎz_Bb»˛|8ŻHCČ €Ă‘ăŽ,śWщÝînWwΕHĆwwî#'×ô´ť,sBŮĹ«\͸xb'űĆŰ'éŔ?wĚBŁb@ˇ-ľ˙_6`2SřÂ"QÝ[§ÉítÔ¤OŠ#ÍÜ4č‹1čt6ůŹ8*i70˛!`{é ÂÉó=ŘŔ;etŘ~‰}¦ąK(TÉSQ}멬Ç6ŻZ¤ČţßJcÇ"@ĄNŇ ;•ăĆ?…ő}Ú&ĎŔĐş˘Ęn™íňş·WΗÚbŰw{ĘçĚ\űŰňÚÍľpâf,Ýý qŻđ>MF‡c¦0•±Q|˙H–š˙#;ȧ X¨p¬“¶PqŇĂ#ĺg– éFţÓŮ˙‘tendstream endobj 520 0 obj << /Filter /FlateDecode /Length 5064 >> stream xśĄ\IsäČuľó$]|ŃČÁ›AGW ąa źZŠňÁcŢF:@M6Tٍnýëý–L _"Q,Ƭr}ů–ď-Y?ß–Gu[âź˙˙átSŢ>Ýü|Łčé­˙÷átűÇű›?ü JŹŽmŮŞŰűŹ7ÜGÝjS•Ö·µ«Ź­q·÷§›‹îts,U©‹Żwĺ±t¦Ve[|Ž>?ŢŚ±Ç˛VĹź»¸Ń?ďş‚‘”+FlcŽmÓ䏥ŇĹ÷ź˘ÖS?źa(|Ш¦jü®µĐiŢ{óŹűżÂ†ďG7îŘÔ ěéţᦰęîţ_7kŐíÁŔ‹ŞÂÇ?÷źhgÖ9ż3Űč¶-fX^mŠó§čŮ#=ŻU1ŚO‡‘÷ŐÔ®x6đ°6iD±‹üĄ5đ ăoݦ¬aĘţNÁHUi`ăШ­´Ń0|2Fëşč¦áĹ7/mń1¦éxÂúŘ¶Ş€A4~Sđ­ÍĆÉ·jlŘřz´đĽtŞř.v>‡a›â d,žď`Ło­$]zyxëŢŞ:ĐŔż‘ç˙4N=?¨tUÁřs_kŃŮ©Şv^MŘGU|áCr°%1ęt‡,ŁĚŃŮVßŢ˙íćţ?G—].2,đ·8˛eąü–űr×ŕ™Űş8Ţ1cÖîVŮŁ±•&A«šcă,đ! XÝ2#şăÝÁ•0*ľ?ľÎ´ôłE?~Žľć¸ý°ŚŞÍŃjŐ.ěďÉË_k0ëŃtH%X‹[yÓłŁ—iU1?tsxŢěóő,»÷j@·FÎńŕ×dÝ–ép×JöşyŮF1~ ˝•l+ q Î?şs˙í·ÝÔëlÖ‚ Ĺjí'˙˘lŠÓČdj@ěn{Xhł•-^óŢ.»xÚnx™×ăŞ×ŤKČ•ě¶Ě·éÎÝÂď.p»źĎę„ć·VŇđ©ÎĂçe Ěś¤Tee 6¬F›Z9űÓ*É:ŃtóÓb¤Ĺ¶ÚĎ ą\‘´đ¶ţé;ožhtL‰„\"•!„˝»‚”6îă`Julsµ‹ëźcłűE|&i3 ÚătĆí8”Ăv•Cë.đ¶GŮA˛¶‰'ë‡]Ň?ńl¨(»€<řQÁň‚’únÎ uwöY˙q0ß˙íżĂ¦=÷HaÜ.ĘÓ6íY`1Éď(‡YU \H/Š NŁxçŹKUň¸¦sß ®FĽ›FO~ ĐČŹR,Ő /śĚ=± ěh řóünµ¶ x^˙Ěçék¤„ą8ÇşaÚŘ‹¦Ař#5•l5ÇŻĆA€2 ‡-5IĚď÷Řç—>椿iZŕć&cÚ2Őö_#–‰[‹SMh:ű}Aa –ýŞ}!Ąµ˝ÉBa‡Äd¬<“cĚ^Óśaç¶’­ÇYśŃ©˙żى Ă,ÂČõ­+fŹÍ,h« "ö#őŚ8·oŁŤ>KkEŤk[ůE0ŞLÓ©ßĂzTfy5Z[ě Ş„$")$¦eŤ™J¶ůĄ;}I¸)Ň4€ÄWËŮ~cč˘h74ŹÝ.„ÇI”ŻÄ™âÉŁśvŻ Ë~âMd‚ÝNôaŘĺ¦dvCŕ|%‡{˛`—˛Ţ`?–<’9YŰȶF,",ČôĂ)gҡŐaŃLhE€GErŰŁ©KÄWh,qŕŚűUu¬­^Ľ‹űWYô&@‹ÍýSĽˇţ»­Âđž†gŃZŁI±F“ţ}U…c׋†` 0ÖKčÎL‹źAWIĽ•s1żj8ÝE{ç4[¬˙¦”?h6brŹ˝żÝą Ž_WE×]Şw™L’ir¸J7öXąćWŕŞćh´Őa€~]*r„5ŕ0›bLB´:p’]ŐvIłť}oĐŰťżŐ‰Ż#ߎťÖB2f[Ç«í"SĘUHĐĎHeś+Bd¶©Ěďa˘łoRVEż|n6|/ H7ĚŁo F¨&zfŁó­ ä{Ph»a su„ŚbËzažç=8_,‹i6ŕf×#€”Ü«qWͰ łëÔ{™¬Đošyąč®Iü–.Íż|× ň > â‹Í`3C”VŮz¦‹UĹč˛Cşá}˘öő‡ZÜ–ĺe_-DJX1lÁŹŕĽRÂϦڍ7ö»ÓřMb+·ÉHµ€C‚îjŘDĘ Îzđ+‡Ó“xšQi%m:ŤX×ňá:öôâ›(i…^ř!$±żĐ*ýBÜ*çKD%K @Yô ˝—jŃŻžăbö#‹^ql7±čď02ÇNéV-BÁťI™ŠÝŁQ»A_´Ĺ拎9âcduŔeŮáI|q p­*–ŐiTZ¦ŇôQŘ‘ß×)Ëjmńó×=.š™ŃilpćÄYtëÖĄ99u}ę)TĹ‹–yc~C餱,Ś„3ţťWě…ťcť2-1Ď*uŻdptbÇߥă eaĐ_pű5¶®iůuEËÎÉó ±ëzs ±{ł ŇŔ€žgë†"Â_ňyšŹŰ69;˝¨&&4‰2}Ç~ ˛çĄŘcŤÎµ~%öű+mÎąÄ-¨kŤÔěGR.ő'ppŠŇźđ“^t(ĽŽ ‡¦Żřzę.ß:ř!0€ăH2mŃÄĚ°Ż 3Vpę}üÍ ‡Ěcćę(ĎYKAć[Tm_†W&#Â~?s瞼 ZšŢ#řyágŢżqąŮ/ž–9QĚQ3—5vÄ+IĄ& »M˙ E˝NDř¤E ›Ě 5™ßóâź>/‘úq]ţiä<ňuKQč@˝q:lĂÚçÉ´a]Óń^ËÖ‰^O|ëĆŕR˝i5)í‚='Ŕsţ/h@1"•Čw˘D×ÉŻ$´;»‰ń‚ć)ýzhh‡jś"ńuiЧÄi™QWµ®ÁŘKkxH‰âÖˇ{Xpü#ŹČx™'¸1gń5›‰űý^P'çÔÖüÇ `ÉLÂ)%FRŤŹ˛Â›Ä‚­*ŃĚŁď\űUiČ·ţç 4¤9˝„F6˘1 Q%Ć;OeZžkß ×io2Ż+ý€GŰöçă,ý3BĎŃÇxlˇ+¦ ^ÖÉm0”ÍJW·25Ń%p·€ËYüE`l‰®Ůs[‘Ź&úřať!uoúĺdH,™ÚmŇŢV´Ĺ\웺’ů˛žô„yö˛Z…8î Š+[kŹr-+w>DB÷2N)“Ĺiösaxw©Ż< ‚ŻĐ zż0$"Ä ĎžýšŔüH7uÍFšTŮWnÁč$b)ĽŇ`#gv‡ĺ0=mĚ&*SśdFéq+ ´F­ˇH K0ĚĄd.1‹¦3Çq`d˘ő<ą:·a¦€Xí Îë7o^“éƩӷ\T!ÝS öŁf62›kPíe{“NŔç€-8vZťF$!ç©\ę$Íwąpű;Ї,e|t)ăČě_Mű ­G /(ÇŔ€´kČđgRiřŞLńTšJډµŁÖěż8Ngt{ŻŢK•PifěÓq¦ăi ǵĺł|^2·2ă)»9gśŃejyp ±’řËr”G ›¶+Gbíhq†Yű“'˙^ď(p]QDäʏÉjKö #W>WA=LČtë¦ćl+o%‰›„ů|]šČ̉´ňě'ÁTĹ^&fö“¨ Ëß–ey,‚oĘÄĹ…Ńá“.“«Ĺ1PĆó6›°Âś¬ďžr Eť“ş=ÇĚ«%Ż|uM&ĎĄlpř´-BČÁę×͸´M%Lńŕ9Öěc”)¬­Ş6©~Î5űbžB»Ť›kŘ2rJ ´{e^+LI’ĘkýkŠEęŁĆŕË›ĘV|ŕć ,żjoKÇ ¨8ÄŮĹ™S€Řă\ČČ*©śEAŃóap’PQdĂkü4g:Č´jÜ[nŽ4MR ±—Ű Íď¤uąeIq€|ů®"WwPSÓź„ö“?˘™:ŘgEuIJűşfW W¶P…ܧŘz?É<*BMEžť0–› »Ž" čËPĘ4Á€˛KŠűBé¦˙š©…X˛§\ßBđ‡Koę$¤yxă»wÁkz‹ĺŇĹíeř=âöO~P }čl’SSvi­í7ÜS=”€˘ĂoC«ësKLUĹU[ÔW‹RŰó9U-ÔĘ´ŁĎ»©ÁíZë«•—…?椬OdL6“6–Âv´L`”1#§eŰŘ‚„_Ä~¦éÔ-r·¤tk%N9űqŃ%‹_`í3ľ@i‹EeÉ]K1Ů:I.•zôُ$ćwL+A˙Ü/Sr’J¨K/Ő!~S~ku÷0°‚¨ér~‹wb® ĺřóÍĚ…ÔĚâĹłj˛„Uw*cd~P×?úľuµÁzŇQ« Ýőđ·Ó­ďKX…ôĽűßmŚ|ĚšÔ[7ě.s´–J×#÷Éǰbž¬7~ů‚’ &ć-ˇzżđ­Ŕ‘6UXŘzSi°'ă˘Ň`K,§_¨(ŮRP4)8Aj]í°ľ ¨ECVńýÖ[8Ť¸‹ĚşÄ ?y`Áč•V…‡¦ ]#í-á VL4rą('Ďş©rC°UN˘QśN”Ü´ęu%91{rý°;ě|îâSÜ0-Ƣ=Şm.—é–É“A‡Äië§@C#«(†‘3kJ"éyŁbV&‹‹<×@nZdθ–’î#7M‚*B–}=ębřnËuA~_V%ň׺Bé+‘ÂbMµV„UňĚޱöľl‘¦Ň9ă1ëGě·tĺKP¨ć Ü{ÉÂÓ)Ă„~z ŢĐÝëĄwľ oÚÖüůËZK4«l¶•a„€†(׫đ=ëSĚÄ,«'*cžłg\ĹfúŚ)łÝŚpđěcňâĺş%Zó8®řŤtťń•Ŕ˙·8BłFŻ© ˘Ą+ŔřCřFuT…cµęJ]´ülĘJ–VŢ슋¸lSŁB˛ś ÉëŠúŐôŚßÄözNŽ$rż/f™ĚY˛ŻÖ±ăSśş“8ígN_§źŢ­Q÷mśź=$ă‚ZP Y<›ĎqRwŤ!ꏩĽMzw§»D4:Čüc†‹(ß$ Gú´:zCł7@‰ 4ÁÜ»®š`ěAz~'MćÚ"WŤkůĆß…‡‰ůŮżß!T7†g÷sŚűČń€vš"<´ö†#WCR°őěÇEĽe…´éëI1p\äOÂmX«ĺ?űQ@Ş˛éÚnS˘Ű>ÇDŔk”4ĽĘđx*4ŻżČ›¬6ŐwŃXLź#üe¶T×>‘Ŕ^^*ž<Ź`Şnç.Ć®íś×¸>×sô»Ř«Ăǎò˛/©mĂÍ5.ŔRM€.s˘Ď× ç~IĚrśş`üu óią j—RŰoě—0l㺀gżő]ęÇk¬ ÖĐźĎCXfýÖ°ŤŇ¦9c‰¬ľÝˇOŹ@¤ŰPrsň–ď7ܧNlŘx?o‘y ¶ŁúŮ8 çu”żkL‘ ` ‘ŃyäKʵ:9Ž'Ďpżj8Źăćď*ŃČęş»JQžÖ/ôš»J`1±Ś „ű(ôłEÚ´^@Ú"’ ŤÓĚľ?ůW VúeŻMŢsŽS0éYÓě¦|uŚcą ›‹Äű€cCŐě—ĹŹFĄ÷Í‘TŤŮąŠŃpq…ĽYĹ‚j,ßBb>“¤Ó@©üÖďş?»÷¤ÂX–ŻĎŃ,•JłWJť1Đţđ%š‚yĂß2ĘóFĂIÔkx#PˇÚŢím¸Ţ5˝@ϫ݄Üđ´ě)-'żŕ_-Ş:Ž %µűF7\ď»|6ţÖ7bÔM$Ť›Đž†č‡~č–m› ăkpŇsšĂ›:WÓęr=šŃśşőQsüćňÚ_ˇ>žüôp2żŽ/bǨܯë> stream xśťX XW¶®¶ˇ«DÜ(h‰Őŕľ‹ŃÄ-Ć7Ś(**. .l ĘŞĐ`łtźn}G6‘ĄQi\Ä%f˘I4qy“¨YŚ3u٧đ2oŢ-ŔÄIňŢĚ<.|4Uuď9ç?˙˙ź’1VÝ™LÖŰ}Éň źŕńŻŹ™¸Yúč5 ë_d·yX­l­Žľć4ĎŁűb÷Ţ—ú0Ň×äYÁłCćěę¶kÁî…á>‘ľîQ›–Do~gËŇ­~Ű–ű{® zmô±®ă_ź0ńŤ7'Mž2UpbĚRfăÁ f–1COfł‚YÉŚ`V1#/f53›YĂĚaĆ0k™ąĚXĆ›™ÇŚcÜWf>3žYŔ,d&0‹‰ĚŚ;ł„y‡ bz2˝ŢL_ĆŽá™~Ś’±gGFĹôgśd=d6Ě$cĹ$0Oe[d-Ýćw»(!O“?´Ęµú‹őëSÖĎ^Šgl4םÓq-Ýçvݱ™i“ŐŁGŹC¶.¶űměůNŻń˝*z/ě]ÖgEźňľ+űî·›l÷>oĹ«ř·řü·ýĽ”Vʵöö‡8”9qôQ˝­ú+š{ýCľLĎ€]-â†Y[ł˝e4K˛ŰzéŠőűĂ@ ú$]1¶?wÔĹ€>$%4%vĄQ4}ŐP7 \ĎYŘݰBrRłŔdJkA{G,U\&®Öc4Š:S+4@ü•zŽ|ŚIJ˛WÝń„uŻ6kşu•ĺ%Ôl‡r”á”9đYb«˝Ĺ Ů|ß%Ýć,Ů6Ó_0`7˙=™ľĎZĂ~›ŐäS7 [nş‡čę<úłü dn·\9Z6C Uż˝„†«ľ(…űžË-2‚˝ń|M޶—(á‡É×HĎ,\uč.śćLşM& íS5ĎÚ[]4âjNąs˙ˇšLĆ/•ó6Ď!Ý2Ëqˇâ§Ňékԇȥ»˙T ÄßCo`a6¨{ýŁŰëZ&±^ěo–Ő˘-梭\¬Â%:Ť{LĆ“I{âđ` ŽÇI÷Łť@lł•“pDIě»ß= ď•Ô eÇO[ŕ"Ôď( 9ŕ^ŕ-3ZËÄY0 ĂÂ1Â"ű]DcŁĽ-#•E‰Ć=ńń 5 d4QzŤ‡E0ˇŘóň¶†€ó€<*¸qú•[O˛ĎŔ-Ŕž>5d®)! r+S…ŮrHÝ-ĚśăyfAĹ,P‘}d,B¶_Aף˛Ř mÔ´d•‡EÎRo÷”V1mř>â—¦Daě}âä±:"`“p–ĺ[ɬ_*Řžů\ÁVîn ý8đüKŞ&¶ödČśŐ‹5š˛Óf°|ż3G[ Ź9}tÉ8Jé˝$´Ń‚…;ŚŽ8ĄG6jřm«°\éŁ'#¶N'ł#®ŘxIń0Űw†şk|3ă}F X® ţŽó˘˘äÁoÝţ3-üM›µ˘×?dW´Ň&˘„Ó§OBÎwg¬˛Ůë÷[ţn>{)@ĺ ţ™ü[€Ţ˘ÁUè áMÄE,?Üś°»°W«‹†(Î×]Yi.:!ĐP.Ś‘v©–ľeˇLhDgZĎa˘‡˛ăL÷;Ϥ¨6ˇŽzę-D…Őçه™gw5{ßĆQ ¬ĆA ś•łóIO Ů™&ŃŚýkp@ÍG5˛†«sU.Ž@µÎě4GűöO_™˝8giśá>şĄ(Oźjڱ™&J!µ\ý [{ő°GHNŃę’RB ·¦űDF±}v×&©«’̉ip<áx(řpo»Břj÷ÂÖ!ń€Á \8¤ěR–Ť]A† KNn;Ĺ :Ź}sQEK*kěčÖ‚žv?˘Ě§{Ňr¶Š6ŘGŮâăĹ. \ ź” x[Č`ôôa Ă˝‡Oá¶S¸Cj.ww]żŮtá&M«<¤TJëI wĄő6:ĘŰîÚ[\ÄÖg6Xď ~t9C°‰Ó<#Ĺä6˙ţs‰ŘjÓs¨§ë9TÓzşŕIĽMNţösÚ‰ć\4ÍŻĐÚ ‰ÖŘ%:8¦­XŢLÜ~ĹĘjvƆw¦ĎL®–ćŃb;ŽĹf˝K}rĽz É#,6X_´(ÂôtŹÁô—ŘÔ}űcÓRłĂ )9ÎqYF,‘®ÚĄźOŻ o˘OşÄâöľQiş2PĺPśfx†ĹŽĎHaÖnéOU¤¦gSšáQ”šńľtşnż¦ť°ŁJ`¶«¦Őń•jsRl(S–&Ŕ^ÁÝ…PÎa ű`ö‡ÄĹ“Ř$Mň©‹ŞŞ©.m(ŃGç㬠(îę‰-SÔ›Xň:™°‘Č]‘‹¸öçw›¨ůŐ[Aó7ˇYQš ejâ…Ý•c&E¬ő5źú 2µŹö ť5 |AkpĂŢ2Ź%ÓQŞrň˛2ż•…§ „T¶¤”Ö$)AŻWO1{Z7ľLC¬¤WpšĎXt%Ë©Ś ‹Ű«ÓMzĎ÷¦jZđCzú¤Čđý¦ŚLő´F9q˛öŃ(*LźP^ŞzM'^E®y»W6S~Éżť;ů{ŔďČżăë"}8<ĂľJákd‹JŠJ 4Ż:Ż=NY[xöˇ¬mTÂX¶5Đ{]|̇­gö–q}>sälqŁöÂ/”ř»âÓ…ćÁR[r”­s‹ˇ‰]ś3¶Ę˘ žú­@´U]zü>Ű™E˛Î,~d‘•ˇLŢg}ňK8ĂMII4¤HpŢOúaŤç0š˝ gŹ8_aqIű¤¸˝ÁIqŞđ nó â@›n2ÖäBg+ ÷_×äóÁÝs7›č/ú¤ç§e^U/1…2•C˝¬jű|´‘‹Űhąsµc0Ä% şČ ĆQáq}ň’Đ!ă’> z˝Ať’»B9źĂŃ•Ą y§ď6}%q›GĄź%Żý0‡ářZä2(\¬F |™¤a§Ĺ§tźŮ]ôEüŮpH€„p˘k?âHt⑊ăp*Řţ4Sź(`·Á°39Jan—FQnúĽCpżčÜ]ěĐCXjpšÁeśxŢČbeűóýÚôř"PAzöţ¬iëćh”’®¨2=…Ăt=…* 1ęĹÔ×Säâj\Kë¶Ďe·'±ÎU5˘"+L®*‰‡Hü·BKfZ7*Ň(kB9pß)Hm;› ĄűëTYp@{(ş¨S´ˇP”ŘSJkşÔ ‹Äo~!O‘ĺ-Ż€l`w—l¬vŁi8tq&ż‰Şó§KĚÇÔ^,?óą_őŽĎęX?'Ň˙Ş˛uí…Kéĺpš˘Ěą—"Ń ĂÓbâiŞmL»ôÓ)VBŕ-ŘE±RÎVŃ*RŞ“ŤŘ͵żÉ¶Ăâs Ćšđť˙Ź„›Yq_ű÷9qFC¨* ˝\-ŢaˇĚh® [:ř†ÇÓRL«Äx%2Łż&S„öŃťü˘ř­ŇŕŰ,NűţëźÔÄĹ~!L"ă˘ĆT+pL™ßeôÉú:|ýÁ­:Ś® 9lW{wů3śý,ý®Ď1bŁ8XYUçŁń Ź x;¦ÂwsÖj'"¬x{^`¶oŁż::2jJMůÖŇŽ¤ K\˛kyŹŹ ;NýęÜ­o—U‡ć Ţ‹a„ÂFH2j2â¨e rňÎ켟˙ó§ÍÁőqŮęꊴ"SJťŮbąđüČóKJ˛e¤r=¸MřLf"\;u ®Ý»nëŐÔ/ôVn۶Ś8 ü\-qô»Đpĺ2¨Qˇ¸ńi¬—şs\+´\íjÎ_­Í˙4± ];7H2ÄŹ˙Ô§íď˙áÄö/ćµůÎLś9Ü‚GÍXßađy::şTˇ‹_Ňö_”EűRc# şX´&0<î“}[t7 cF§zóu8Ç=řY"´[kž)řm]FîiGyî*ďQěÁ‡ş¸˛ť5ţtŔ]@—oł?Ç7o;{×PćôcîwůjR'ŽU®0L$ÓŇ뱇'ĄNńëä®ů@Óü ¶ŁH¸§|%ÖŮ[–ŁXţ"y[ĘĂĄWktv>W$ôňŽkÄź•'ük·řlßě{8°áDťů@óM§»ô:ŽnÇe~‡ß5~'/á:%üuÉwDVIÔ:/Kąů\łůRkë˝uġTH CI—iGŹ×®K1Ä'šµˇĄkŽŤ¤\5hĆx"[Pż.Żú¬×ˇÄ§»žěÎŐ—…çĹV‡ŔjNţ±š@Ô58tź`(†Ô—ÎÝŁÓąŤYŮBNNV^eĺűëďĆJóšëÇĎžŃTČ{m•ô[Ú_źS«=JŇôHŃ]Aç—żSDxŞY(Ëüw§ý[2JŁŔ é­-d”řím–ţ#sRéĆ˝ôIľÍŘÇ‚ -č-Áî)ÍlŽxťĘA D€Ö¸759U›O¦a #Úý›ť“uMrP;ő°v‚gsłą)ű’“©‹"‹ČPkQĂň†ß‚“źi*§eqâK«ŕZ@űł…ąyeĹŘ“¸:ň33öA ôçµńÔ+vÜQń±t‡¶ňˇQBl'¨’HbMĎzŹŃćhSłt<ü]7|FQPźu˝¦FUćíŻĽŮŘůăŔ_}1¤łÉl>K¬†®›#Ä|=ż`1ŚŻ%áŢ\Ç;’¦ăÉU”Ý9{ůhŮîéĐsťMů\ĐI/,šł7Đvĺ¶4ăfh™¤ŃnâXꓬy÷d2ř K-§Möńśz¨ăcĂ`'Ç÷ŮZvX௚•7śßđţP˘ ŁýIOőĐ_©ý•´ĐóĽŔyleşa›šÜú}Ҥ|“YḠËľBW9ę*”W‚.¬Ř¸cűfżJżÓŐĹii‚!$iň”yşD:ę$q ąńéyŹżÂţB/±Î} ËĹ9~„s•HË8¶«†Ď,ÇČëĘŰk7oŢčëkÖr1‚|¨M¨ÖC€0k1‘Koä"5%Š#Đ’~<Źk/#j ‹«LÖ]wŁ ^AUłEvUčýä˘ ¨[K ×yě‰ß§›{¨5§ ěÚĺ_^m†‡*´qţŚ8ë‘‹Gݞě)Ż­/=ŐX&?Ő’V ܦ™s¦Żšă«Q“ ź@]M”*ZśĚvĄćř1ĐîČWŘŻ±ŢŽŞ,é†ÝöŁË1ěFŁäM´bÎW»ˇ?qUßVýéCř‚»5ç2Q«)S׋9X}¤äTyüáuB㉫Ü}p J^ŕ«ŢéżSżEg0$ëS@É\t:µghĽ7€ a¦öV[˛ jˇ†;\í+đş™>ÁÁ>㞬ÄŢ8勿9Q[rö$G÷Cn%ž¤x˙¸%fýZ­§ÓrđÎYW¤3ĄR€‹řh5i˘ä¬=m2fg ąůőM_Ó2Á·ćŔ Ň{«{ţE5ďĚ´ä/Só-LýÎŞ­AŰŁÖMüböxç™8¶ő>öQż<<ó9´9$Ź'<ŇŁ˘rňü Z8_%:ŹĽIzD,†77 U,5u:WÖŘ|ě#jGęS*B·$Ç„ŔÎŻjWÝAsQÓ›ţ4ô%Ó§“ü@ ň>:>úťŐ„7*‡Ă´A‹CĎe& {Íp˛8ěÝröŇc6¬«Ő˛ÂĹ#hSGKä)MYŤmŽJâ§Đ±?Κ¦ĎŃgs>Ší¨şĐđ?-ĘÉJ˙’Nň.TĐĘ%6&ĐĂp ăa-· 2+óó22„ĽBČ…&Ŕ1ůhuůŽÄůŽYŮÔ᛹—Yď×ËNßĆnËiÔîJ@٧Wzďŕ…Łđ9÷Ó¸&"#Şą3F®¬Zzsł@¬×DşťßžxRí~ď6RĂŠź+Á7Jł|;qţÂ1"'¤ś>ţösSů×g6,ĘÚm•Ó¦…ÎîŮňĹŤ“§ÎT (ĽeŽ´„ÁjŐË3T Íy3ţwG%pöŁŐč*Ă]ĺ'€y$†#¦Q+®~8mß+ř¬Nfçq'®~™…áBuzi)Ôqő;ĘvnŹŢ8ďüęźčŁĆ~‰9é÷H9/xř¤ápçŃC¸‡˛+ĺ˵io•dZ˛˝˙/\®żđˇČýžI‹Őd— ˝°lz÷öř‹VtČE…ö…ę˝XŞý_×v)†öĄdLsŹ \©öiZtČ"ÖdäżĐŹÍ˙©®´űµ9)ö„C„gF–hąqÄ˙ {˙ÖáŰEuú¨* –űgţ:­t„%Í+mţ]óJŕŠä µÂ¦ĂË šц ő#=ţť#ţ§S i>¦Ô&EDÓFĄÇäkĄ·ô¤Čü\pöHĹľ”LˇW\®č‘…dç*,6(ë!ŘX­±í^ťjLM5šŚ™9·lmćá™~iendstream endobj 522 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2930 >> stream xśť–yT÷Ç'2âB¦Aß ZZ—˘EZ¬ŰS‹*ÚŞŠ*‹€!€ĂBŕƲo˛„%€AP@@@­{«}˘¸Őj‹µÚjëúű󝾉ʳóÎy3ůgň›ążű˝Ëçţ„±!¬Ü–Ż Ů,›>y•˙ÖHéćí†?GVżxđ"Ů,„`aĽ̰ůbdo58â¤%a¸FË·GČ#7ÇřúůIC>pśęôŃÇÎÓ¦{˙}ÂD‚řŚXE¬&܉5„áBx …Ä"b)±śXAXV„ ‰w 1’°&lx‚!L 3b ďaL¤ Ś‘FöF Ł~ˇŻđwă-Ć?›¬3é‹zI+RM^§|LŤLךŃf­ć+ÍŁĚű,l,˘‘~řF+– çýNť}?ümMwq'FęÉe Đ΢Hň;˙ľqĽçG$0™?‹čř˝D“`ň|NŞ'‹KHďXĆ“‡ÔmP up)©ˇO—t×Óë]§NorcpĚ_ľË{ŕř%=ôč7¦A€®żňAČő`ÉC\_(đqpď†}n`­°Ń$,ÁVŹÇŁ;Zę«XĽŕ/Mă‰hP ذÂ#6¨Yn@˘K7®ÝčśéÎ˙CPfőZ}p› ű‘pĐĄßš¶ăŢá†K·é|–úx®Žb2źŠč~<î/dP…*8»á/;štÉČßϢ $\n@ÄĎ»)šÚ•ž”"·•VĹ•WU”Ô1ü–U¶D’Ž_-hěC©}BŽF tĘľÁć•)»WçĄ4{c´Pő•ď#cÍŚĐÝŚ*%[™ T d—±÷ČČ‹OS‚BÁdd&'+@ »˛ů˛|o °ťtî†őM2µ’m Ѧťp8ůJ,¦ü½>|_vµ7žI/ĚÔ$Ą€”,¶$Tř…JU¶‡Ńhň 5šö-‡3j€Bt[˙W†íůHjŕ†é‘[´ HN@5ý=CV’cŇ5ä"i€ż+Ü.aMÔóAw#é@©(Óq‹Ă%JŇýwpŤ›Ţ‰é`hŁŻ[N^f_—]ҡ«m(­Mđ¦ě„ŻŠnqJv‹ž’Řám¸]HçµnóśÓu3č曕P:±x9¦ Źďíż«aT3EĽaz^y3ň­Ő߭щ÷}‹dýĽĂ>\ţÉQ©;ą%Vů ň#8t;N˙tŰ’Š]YymUli¤†iŞî>ÜÇŽůÍ`ĄäJĄ«rˇě#˙ť+!˘ť żĐßŢÚRÉĐźúkjüŰFçÝĘú‘Ĺ®G$tí¤áľk};ż:}9j7Ĺ˝IÇ©u-zAĹmTv[Č5răřĘTfŔfH©©`˛.ŁHrŘ•™š–`‡ÓFa §ó…•eSŐ Şdô¤·rDBl€m†z (ŁÔ9áßGyŹ Y¸¨íŠ`łwkóˇŽŇEGFËăĄ>‡ú;źçe1ČŤs®>Ţ”§WŮđY˝2‹Ď*jľSÖ nDN÷¬iŽ[Ž,$ń LMËLR2©QˇłÇµÜ©M@ö—úús{!¦‘ MN—CV­cčÖšŠ=ő§×OĆěd,Äć~2‰ŃŘFdV0”f]ŚžłÔ!C“ń›mîWó=¶„;2”mîI·á‰oó˝• lŢXľ–/f+,4ôú_ßCâ]şF=Ë×˝´Ł—/´ŰĹÝ›.ŞáĺT ĎajÂę¨q‹â‚!•D=M<÷ .Ŕ7ůG+]Í«†}pagąc;Ěăůüzs>{őgŁ(áš[=RH:( šX®‡¬ÍP…1[|="€oţZ>}_ÖR/óČe‚,jU߆vţţZ•CĆľEż>} ÷>]~ßç)yßš®ĺÂŃb‰T¤ŚNYź°cWĘ\~؉sy°Ů«‘˝ŇD/'ç(ó›Ř›ä<˝g‹P6gb2¤űéÉ·I}§IníŤ?×Ü­ż[vךîąĹ'aŁQź<Ćfë7*‚ü´†,LoI:ČŹ]«ŠóSŐiüdHKfýb˝ÖđµäY,-HŇF=‰1,î c ˇ$Gť•Ła Š›ŹÜ‚cPë•»Łtën/đ€Ě5ˇ>;B|Ą°–µĘĎQto˘:3ŔVWৎIVł-iÓÔ«Ždi;;dőěd9ÔőPţĐݸŰR#n»7ů$żçĘŹ‡nCÂ|$ČzÂ],śżÉËSÎŔÍěţý§ę»Ź´žá‰ŇˇÔzg¤A"˘ÝYµ§.żů¤w×TĚňô…Ą¸ ‰]ač-‰ťĐSŘ~¨ĺŔľđ=5Y%uŕ˝5Ü+0Ƈ‡ÁM±:y{Ćyh¦ö]şŇ]XĆTđh^G 9řÂŚwíxX7jě;ľľŰš6â}›-3AĄ;K2UÎ}˝îXíůî«¶÷'őMëě29 0¨ZĆ”FeeśöŁčjléć˛Ú!ˇ o>cfˇß$°ŇŰós¶ş<Šľ"+Ť¨k´=sˇĺWĎz,d´/Ĺ’937Ě`h{§ą§ľ˝|ěÄ…˝,=˝$ąg|fóÚ9N…đ8šĆŐH°š†đ´Â8ÄňO&Ż©…†u ™‚/ÖĹI´ËüÓTÁ3ŞŠŮV˘âržI8ĐXmXłĹFókU†5SQqŐ+^g8&ę÷ŘhÁăsBô 'K +S_˙†$Ah µ"s4úHGQˇJJ“žť¤Xż.9…Á¶Ř.»¶,ż‡]Ѩś(řO»HÉ>Ícî+h92óĽëx#¨$ţ ,˛Ă6{ń2ŔS·đ'€1ëĽâůĆ4*MťšWŇ}$7‡A¶ČN‡\YPĂŁ*¸ůĹ(4/§B¤70gĚŚÝC-Lu*åѨvç·° * Zčendstream endobj 523 0 obj << /Filter /FlateDecode /Length 470 >> stream xś]“ÁŽś0Dď|0ěîiĺË沇DQ’cV–Aěě!źŞ"“C…Tw˝¶éËËë—×m˝·—ďÇ­ü¬÷vY·ů¨·ĎŁÔvŞoëÖt};Żĺţ×éYŢÇ˝ąĽ|÷_ż÷ÚâşśţŰř^/?ŇŐôŞ;7•Ű\?ö±ÔcÜŢjóB~^–ÜÔmţo)^ĎÓňřtʧ†©Ë°%ź¦žvΧ†i€íP—‚5Ú.K°NŰg ö‰6f v¤MY‚ťh-K!L‰öšĄ0”@ ˘NTEą ęDU"mÍRfí]˛„Ubô@čO ®c–Bč+-ŞR°…U©€Í´č•ÂęB‹ «ÜŃ:Ő÷‡‡,… ŃMTG‘‡=K°¤ŠhŽ‚˝Ň‚(Š*ňp"B˘‚"B¨O#!$)(1(ˇLR©ÄR e’J%–2ěŁú®ădžűˇB0ŢŻˇŚ©”iĽ&f#ł×Äld6„‚ŚA†S)§h:Iă…đM-[p ¸Zp¶ŕ@pa81÷CÁň$D.*'•㯡`yÝ"•“Ęź˛ËßĚč‚tB:]xr:gSő˘¶|GÝî=Ť'jÝężéÜo;wµPóÂŞó endstream endobj 524 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6692 >> stream xśĄxt[U¶¶Ĺć&$¤€)„{L†HH&CKB(śNé͸;n˛eY’e«KWÚŇUoî’{·ăôBśÄÁ)$LehĂ$C€áÁ <Ţąćřń˙GĂcŢ[łÖżţ·ĽäĄ%]ťłĎ·÷ţö÷ˇ`ô(P(śşjőędyćryrNVĘüysÖ§eç$Ćżz`/ć~L2$Ŕ8ŚÝ=ť®Ś.OB{' g& & …ŁÇŚżoęô‡™ýű§>˙ň˛×R2ł’s 2“ßH“'§eĺäç‘wÉąąÉ9Éąo¤&ďM.(H.Č*H.”“'SłŇÓ 2łäÉĹEYą$ň°šĽrŠR ł ä`~ŢÖĄŰd…Ż%É—Ż(IVŞRÔkŇ×fdmČŢ»hásS/aî÷Фńâű¤/ĐÓďźß»âŢżÝgG§Ľ8ĺŻSs¦~$‰Hźž–2ířý3ď÷N}:Ź:îů?ٶ,č˘üś¨ý8XqQÄż ŔęŐXč’¤ě Ű€R›±˝?ĘÔô@Ł`€şĽ§oéüm+ĺjÚr捶ť°”©zUiVŮZ°Rú@Ŕáz誫µÇşŞ –g+X]ůff.e5f9X¤Şˇ"Tí«őŇg訧!ú‰'ꉺcá’жţĎżę°?={ő6|_éĆ ·kAGíčĘ<úeú­Ź&ˇżĚ  mHŘ&â†}—Q–ÇBť ™Ü^ Ěĺ Ôěno‹Mˇ–ˬkp-…N#ŔHëŹC €Ú XOf a5WRň»]Â.CˇźAđÇ–Ó+6?iQ•o´ł‹ě”ŇH‹0h2‡îcĽ!˛’” §šQ8ÍN×ßĺ®ëBJÜ5ÎçGÔ+‰DZ[;:ßqK?@5ENrá° ¸mh9ÉýČ$hĚ›ŃFňä/żşîŐ «Ô›š˙ŕI4o =ő-Ăś»úĺ‰[@ýý­%Jaí gôAp…ÁYí¦/ _góX»]§Ł_Ybě|‹@Š‹p1–žEc±Íůó{}Gú™/>®ú8…ÍŕMmčń‘rŕźş&âËQ—řËő—žßş=#5›ÖźÚS—>’iJ•Uţ°˙3ÓUcšśŐYŐ =ĽÎe3í©VJŁŰękjá ™é€N¶(wे˛­¤Đô´· ç5gľ ˘Đ$ô[ô'ŕĹâ¬W¶g§µĽü€‹ 1ÇŃoSSsu…´«­Ĺ[T_}ćÚµŮř.UC°l«@'˙Ár4ň‹ÝVŹÁ`·*Lôn<}űRĽ(ü|"f(ÁárşÁ#ő[ „^Xv»Yą/“Ř,v  ůť^ÎI÷˘±'/ˇy$°§‡ĎügBX5¬Á Ő ź”X‡§ć*’I.Î ®8ofý Čľ«"ţ>ü’śµt;9«×éqúiDóý .ÖcŇĄ¤ä©éâS©•¤dńXräYxćě·V_?¸Żľ»›Ů…“ŚůFë»´\%$¦p{L'tłw@dŠxN ćŤ8źµjň7¬ÜÔkÖ÷«Žµ aŐ¦íĆÉűz;˛ĐDĐž™%(ĐǷ¤á˙ú…_ĆŹwímݲb÷¶|%m<śŃľă˙!Ă˙ş—ť®N4ÝUÝŽ¦H\áćŁőQź·Ąń PŤ•Z`r-ĹE ŁJJ’żXwĽ‡Ť÷FGŰĐ‘NáP/עą& >.O,!gÖůˇ¦§TV°YT – 7ęSmĆĹ U“ŞŇ†€c„CłŮj|fÖa9YřDZ.€ĎUq9%_'ľë+Í3Ö”ËD›I˘Ť«'iśÓ(— ‚8)Ř‚z˝ÝRjĄĎÉUO5/ń""Íěp)’$˘ ±ě%r°˛Ś­l' gňI%8É©„×ű ©ößDł®%8ßń3ĐbčV6hCÍyîÝţ _ŠS-őçn6ś0ĄVĐůö’b(¦Ęüšh´ľjßá=űźÇ’ô™»ź»ˇi1Ó'ő'u°‘’ÉźĆăĘ–@żśîµ4´B3+ )dąŠ]ëR>COíCă“ýE“_ |‚ĘÚř™¤ ŇP…ŘKČQľ–9Ťgp -ŐQh[ŚidÝ,”A·KźžŹGá)şL {hÍi  g˙MaN˝óőąoţÉfá»ĐS‡ű+ş™µ5uŐµţÂĆô)^§ §3Đ뮫y_âŞrWąŞ‚‡Îĺ:jâĺš5=>ť¤mhs‰]ŽŹ&#X vVgˇ÷<Ľ©( (…>ÜQďôşŞčX—‰µZQ1 »ŃCîZđPUÚ€šÍ·gčTĽ aNĽŞ”Ziś›‰KqŹU *ęőŢ´S¸3W„‡?ĎôçqČĹ* 8Kh…Óę‚ řś>§Mă[%ţn.đG ę}PŇ•Ô&‹Ą\‚©üNŃhĄl6ďî6¤łzR´růr¤h§rh›ŕ#Eg­GŤ‚âčĐ ’®ńd–ůÍś±p …4~ä—t5Ć`k`ęY/ e`¶™lF|×đnIŃŁI›6 6JOrv2R€Ú×ŘŮÚ^P«¶i“V÷ďřăíď/}ÓŔ 1|†ŻĂé? ŇĘŕťm/~őŹé/|Ű?ř÷‹hí—˘ˇ$žź.¨PĘŠË=fż‘ęd°˛ňf˶Č6efI°Ł u ŮŰćŠ0Đbw4ĐC¸´šTŻVe,1ѬiŢ`’™rm*Pl‹|SnN*P‹ŕFU»{ßQ4 ¶z"PKÎîŮöx:ži¸C5ÎJ7ÝôĹľ¶. ü•ö˝…ş|“šŮŤÇjwB5ďrć»UGáJݸňćVx]hěü McńI:1ôóâ´ků‡–±[ËXZ˝Bµö   ŘĆÚ¨Ó<ÄD˙ŇŤfx›IĂ»¤ń)Ňł´Ş'Żiˇâ1x"~˙vÎéĺÔžp]d|É]ŮÇ  b±ĘöŞîđ‚3ž^oĹ[,*°iÔŇÝß(ÍjkŮé}'Ú EaÚŢ:ÜÓgßgÍf›Ůn‰cľČJB ßBÉqnąŤ.ßń¦ź#5ج&ť=#©LÔŇöN˘H¤ťčOcěöşˇęĘó-%…P4B¤Ńöęľ“k#Yë27ɵtáĄ×y@=Ľ‹ ăpú8§ßÉtţp©ˇ¨š.Ăşő˛t<)]ť™ĽĚ„&áw´Ž0IS±O“[(Ű»óDɡKÝW<JďNę»$n7ăWË89zŕćR.‚‹ÁAŻć'‰] —Šç^_jÖh›ĹcU•,’ěÂˬš=Ż,éݡž#Uç;o2•ű]ÁxÎ÷ölýď9˙˛Ż•é«‚˝…z™Iɤ<¨Z;¨ß]Č}k_gUs3]ľY»-e“,+-o'i€]śz_%ˇöH(ŕ„ˇ†j+péĺ٥۶J?˙ÝwźŁ„ćx3÷ś"hŁÎ›}Qáţ"ţĄ˙{Ě^˘®lF3˝x‚¨UÇ÷×~Ýyži8}đ4tBoy¤ ”lRVVޱ©ÁDUëjZšęűŽďčyߏĄřaüŕüł‹żGúC(ľĎ•qÝe_…˘ľËB>‰äÓmu 6ł‰Ąĺ+V*łÉôVyެ°ĆĄ =Ş{ęlKCwŔůSÝÝ_}=FÔC@`bm ť»]QZE ­ĐT)cęÚl ^Ř9WaáĚ~żÓíq25GÎ:|P5¦±O„FČŘóôReéü§%IË2ד G*Ŕé zčXWkS;Ä `hČ«RT—¶őÍYtoI«čaĺĎtGĽŘďĹD«g˛MgM65kGä°Ź°dŞ˛6ŤťŤ‹; –ń5Ćj»CNŘ~Zb‰áíą/aĽiĂťúőŢ…¬Ô¬ł+MDüýÝ08tĚ:§1 µŕu¸ą ’đ —ln=r&ńŞ9›ź0.pîj4?% ôU·}ČQîĐťáđe0^Ź57ů‚64óVuTŘ˝CšéřĐDń‘ť±7˛V©fĺŇf«/“©W•qÁ@"d.%ľ0̨UĎŰ R+‘Ęę#śż*¨*¤”ĺ§í:T´˙tß[˝Őtű…ďđ˘+’Ďţ1[ÔĚ3‰Áłv[đ¬«.rŐň×TUÔ‹$ FµŰŞĎ %ŻÖÖ4¶D{é{†¦}ÓŰ.j·đ-â÷—ßŔSiüţ?˘© WŰí!¦Ňća OZí,«Ť'ą#r¨˙9÷ríQÚę@ę ß±éůPíqşć<âĐ’DôbľGŁ™ąőbH-y25cë®×Ś» O=řjđw9ą ýkâ'ýŻĆüŹúÓgQţˇ¨đú5^&F"~­¬ ŢRÔ2¬„3SČ:‰„gŕßĚ:·öÚ[GŹŚĂžŤ%VCÖ¬AŞ„lGľżŐl„*ŞRWSPĽW•ňFOÉ_Ѥk VĐ-üńvĽÁ,“+Ą UŽŠPŐVÍÉ>"UÇ6˝É4?Řw¨K‘… !Kk<Ä-Ć;|ަÜ~8xpP„z†ĵe•ň‚Y2˘®ŹµĆZi˙°âW®Uµ*{Í–ź]«';Çěű÷P 8MR_­;B¨"N?sŇţý(L «ž1ĘvaŞtŹ^Vž jGgć1bvĺ‹ţoâřQqNüK(ŠŇŃÁËgż{Í_ë’—ä[Há*ËÝU®«’qU‘ ŔŰ«Zž ¶U··ÇęŹő9x<ŕ§=ds€Ďě´ÝiŰÎRA;2I îk•wěĘßi\´”ÎJKMIÓ|Ď/”ÄINţ’Ń&ŁŤvťťč?ŇÇś&=Í–ŕ™Ă×­eDÓ›ĄňZ‹?\áyh·˙0Zíičd?.…ĺ`"Â_oÓÚâ7kűRN¶6UöDé†CÁ’‚˛xP€_P ×˘ĺQÚí_*Ü—š]R_P+ë…]ţÍ9ťŽ¸ËtÚË^Ě|-;›ŃéF|ˇJwđĂ÷ŃúÎBđđłDhcż¸Ą¨>/ݍ(/Żľ¨ĄĄľľ…ľ‡g±Jń٦DČŻĘ ~ťÉÄšYűÓjK9ń? Őů Á0ç­ňĐč«—Úu“I ¶9xł%GůĄäçř—B)tÔ×Ĺ4#WčuUHݱ@/QÔńao‘ŮłŚôüšl¦Ý˛}ŢBn-ę8Őâmö6ŹHÂ:ň¤[ú_Ú˙fř=V V˛ż&¨­Ş Ukíň‡Oö˘ąí‡­µpö®oöďęÉ?ôĎ2‹ ©1çźđH4´˘D A“[ëŽ"‡„'˙BŻ‚ŇřéYĘéá7qDg1Z@+­Ď´đäIŘD|PAż?Čüz=DĽsČčÖą‡ßDIą—ä(ťÁ 3¸ÍĂG±cĽĘL3FŕäÜ Ó-(Ý1_ťŁ ŔeݶÄăűg‘ˇ‰¤ě_ľ(â5¨Uě®ćÂdż·SĽ°xóćĚ"Ú2Üşëu§ôß_‡ĂĂůŰÎt6E+Űju0•a•>…Á‰Ă{~Ĺ2mŢ– 9 Çx“‚˙řšýÔ âűřgG®YY3QŰôćÇSIů­˝Íţ^ę×EçRŽżJ”ΤWđă9z?—{ş A2J ⥋×XÔ¦¦řĄ\҉2Jç6ůÂľhoŽ}pµ9Ăΰ+ÜţÍE4»ďŹŢP(:r'8*éuO1´ąDŘĎDüa»8›“uéć S-ŢĂ_’(ÎľŢ!nťŃo¦ř”†¤Żq·ŕ&­Öl†r©:˘­¬ô>™QĎţ‡Žá9•rieqš€Š&T=#—ąŁ^ź±źŢ˘oŢńQ|đź(^ůŞ|#1ą ]¸«ÂUOęÜé'i —önpvT·75ĹŽěk©ď«˛YśJë•·µG[üÖĆŚ5k·¦ď¦“Öi2´µH<ŤˇŁŕţů–2 ôâ‘jÉa«§ľÝGşÍĘhń§ěźŐ°‚ P‹Mo-µëŔ82@Ű«;k醡Á¶µ0QPđ÷ť˘[ÇEüEţ1q˝”4ľ™X i°{GfŞl' *N‘>§Ë硏ż–5¸ŹŹOžgÔÄ ”•Ćp«Żą'DGŽ€3|â ’IPBb6žeŘËP)đev“U[W]ë§9Âä]·ˇú˝§‚')”î†Î8SMľ-(nć_Ś^şůa°ďý·‘é]ß)F ć~‹'ŕ™;ń”ü2ź˘µŁ®5Ö•ĄôˇW=Äk]ż˛‹SÍ[Š2úóośyÖŔŠŇçž{ćÓ\ȡVš ߣ[čaŹÇsĹKWâb<Ź‚ďM hĆţAşoŕxűy Đ‰G—ÄŁŮpC€W)ĐŢ~‹5–ŹżÍÓo‹ř+¨B Üt33¨DÂEHŻiővVmĄIsáü–ž.…ÇŻ,F÷äs$Úú´x[zín·ÓÁq´Óé©ç"˝h¶=éF3Ńý€¦QXŽ3üÄkÜŇ.řV hÜg$ęŮa -Ŕ´đŘ'ÉŃľăŃÜ*8–sAŁî,€7â©bŘQňlÖ–ÔµŻËRÚ–Ň}­5ôq×[Ě? FřÔ·<'.™oČâ]oGף—Pç%żťgĹ—T™‰’¤.¬šÓ‚EźŁŃă¨ÉéŮř1NK¬şXűaßŐ¦ă=gČT<îYą~›qKŃ,ưW¬Ű©x*mifRÚ¶=@e+Zľ8ŕ9ŰřońÍčâ:bHC˙!złÁß/âĹO‹ˇWYgô©k”žµµ‹šJÝEuÉ˝d„ŐzÝ–ţíTµ*o€†‹ĐÖâLŃ€^ĆXB67ÔQw hźĹmRÁNVÍ©|úˇMřwxŕM€ü<÷ZQ«Î -ú:Óţ2ŘA(SÓeˇjmňŘVBI«I0­˙üы̅ˇ§ĹFVoŮ ŇÇ:o…·šL¬Ž_fB]›@z2*üâm”S/âs¬?~?l4Đ+WĄkéŰUzňŹóçfś8kk?ú8×çČa¨*8·ö™ńłr=˝ sđŔw/yIbcY¬”Ĺcô¸9®ą™öykk|ľŔâ–ŻCtĹę*"Łű @ř¤áĹxéö­ÎŕAT8€Ć4ťŞëkŞ2J™{Љć Ă(7š;x7=vôĆüqc˘'Çůť•G…cÜ8ŕ˙¨¨Rżendstream endobj 525 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 908 >> stream xś=‘}LSgĆß¶´÷EX[/ř‘Ýf łÉ¸sYÂŘdAťn  ÎeVĄĄŐŽ­•–Ś]čiiřRłQE°°Ňâť™™HÖJg¶l&[g$cS—E6”Ľw{M\ÍćÎůďüń<Ďů=”&E‰DµőŤJł©®©(żr_}ł±îŕŁăJ°‰ńżŠĺ ”2měďtuRőućÔčŃ(Önxţ…"„ÔHV eˇlĤÄPz Ĺ$ɤÔ,cI8ăˇtďj‚xZH’ŔśLôf :&N†µâ&ȉ«Ř’ ő€őL®Al?đ28–ĂéôŠËľ$\Im.óř?±Űä7‚n ’ď "}ČÄ(ŮÎîWt8\Gť¶m`ş]AVÜ‹ ßJŚWç'ŕ;LTT~ť®¦ěú˘üęĎŰŽźýÔ?vćXh78?÷-ŕűW^ŢřÚ»e›¶h©‹š\.·Ś«Ä×˙şÚĆfC´aĂŘŇýɰz~ÉşDň‰,[“Äqň ׫~¤Ë? ¸‰oäǨ’¦î|Qn9öGG›ýwáŇč<‘°–h5*;ŚĎćµaÍśÓ}ŘŇŃşĆĺvşá(¶‡~nZńóTe.•Vě.łätM×jß'Ćë Áb:R·–H«†¬˝;—{L™¨ŃxH"˘Y™'%¬@ÓĹmĚ t<ÜŃŢŇĘŃ…5r=IĽ”âŰRĚ5é¤ĐG yąĐÄɰöS"°tDAFČCůăÇE"™w ¤&ŮÂźŃ,dkŚ)č5,QÜŁěć]6K#G¶2áÖ(3©¶f˘ý}WĎĂÖĚžtuňínŕť\˝ŁÚ±Ţť˝µý.ďĺ;Ŕi×ŇIć´ř{;}=ÝÜŮĐx$ d}¦Qß^exOkÜWc×A9”źłNééŕ¶ [ë>ÚUđˢ&Oü;Qq˙ÇÍ %ç=!«gňÉÓ‹Ď-R‘?p¦zұáۦŢí‰Á&¨®oxÓsŃ;˝:ţõ` á ~ČĽż­íŘńs0xęÔ(§ń–Ćk.ćŇşŽ®ˇ ”'ňudĄđM×Wq.>_q^”w44쵚í»kĘJéS@J…ą©›·/mŤCÚ=ÔÂŰ8Ă6 ľú11÷ő („ełËąei;ĚĘôÇëéôx»=ŢžR‰Đ?j®endstream endobj 526 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4115 >> stream xś•X XTŐÚŢĂŔě-"Ű‘!mŹÇŃ´Nz<Ą–©T^Ň“!(ŢPDîĂý* Ămfľąpîwá˛ĹR D%1;iłÔú;Yé_vÓ,צE§ł†‹Ő˙dçü3<Ăó ß^k}ď÷ľď÷-D”­ %‰ś7lôŠŠđŹ\şĐ+08Aákýr:`ýŹÓ†Uvŕ ŰĂ3¦ú¸ µÎ·ť˘¬Żą«"Ł<Łcbăâ“ü“÷nذqßß‚CĽB˝Ă3<ňř˛ĺó(jő2µ‰šM˝ByQ›)oʇÚBmĄ|©ŐÔ6Ę“ZHm§ž§§^ ž ^¤ÖPk©uÔbj=µ„Ú@m¤ţFEPS¨HʉšNÍ &Qö”92eK©DN˘8Ń-›d›‰Cm¶Ť°=g·ÂîžDG{Óď2ĚéIł&őŰoµoňŞÉŻ9ÔLY8ĺ ÇőŽ=N>N…9Or~Ńůçą,s)rąÍnDŰđđh/ěH ÇOăS荠4e6ă¤aZ–[¦.J…TĐää¤âđ‘›˛Ś°řZFA14A ;µŚ§˝t)<Ô€IźŻĎďFR*•śÂŹ3ujČu‹Ř 1ś‚>n8 '€Á2T"ĹJ ˛GŘ9 '›ßäÓĚ.Čö2 şěĘ*…צń4ëí ± ĺäMĂGĐu(ľ9°l<{^L‹b´_IŘÝú]ô@™¶_Ăđô:%śŁő4kúὓçĎ–m™Ă©żëřłŤčJŮ,Ě7‹Z®ŁĂ×ĹB2 •"×Gďb'ĚşĎÄS±ó]ä„ŘŰ·‘·Ä$… x%vwÔ®]Iţ° üÍńŻĆtjűIš0`>ÖÚ÷zĹa€cᵡ ţ:_đ·îqs •Ŕ/äEw„Ü&ńđJt@Z ¦´tČVią,Ľ;¬š Ě_ńş~tµˇőý}óýJü×Fą>]—[L%ä×ÉQ:]¦ŚlµZ•Ăů® ç˝Î¸Ţ‚źĆK°Ţ‹–áEČ-ű=‚&É Îx ŹŃŤć:>ĄŮĺŢeTÝ•ő"…ąĚűŰűlKŘČť§Ů{ŘĂ ëPAÎůHČÂş”¶Ä´‡˝ šŚlľD®ň%Ó°dÍâe~–Cq\z-衆AŃ4k˙FűéÚÎéWźÄ”ś€ŔEQä@QÍäHÂěf—öë¨řú*Rűˇo‘Ž//ś‰ĄďĽće !©ŮcŃcŘłw<ФξŠÓ]rüüŘáXĄ‚fWę»É§ł˝ăGÄčc)쇼ѱ{üĂ·łjçČ1C]ązâio‚‰;aŢ`g-Żčtą7tďSWv“0IxHÚŃę÷˛ż˙ĆxN{WÂ~…gýÉúőeş>@,!˝Z]Ň!Góéc%h.’pZZŁMÍ€8&ş.Ąˇ®ˇ˘•süYTD)ÍHbF–zQ{Jď 4U Ç“šB®*ŹÉ_]L[CçMD>«çtC ^…5ň/Gëť«ŚtNŁQ©rrőŠ‚P« ÂVű†—Ç4$ČŰG˛űT}™Uęú”â,s22‹Ý!mNĚǧ28u±¶ 4ČÚ/ÇSéP•čt5Őś± ¤,?żsď µ™Ň©ëŇR!‘±Ă*–G’\~¸Ő“ž‰ň¦•°-8z*9äI˙j÷;tpGĹ6`žzÁ˙%E]ŠĄ©¦ÖŇĺ—ň&KŹ©ľŔĹň0ÚGł2wm¸gHÂV`XĺŇŻ˘/|täts9Ç®öĎo îšn>_ńŻ>)eÍóWFěŢą»ýő·ţpc5$‚<Ç·’*š 9 š±+Z&Ë6ČëęWEE|{{ă9± Hu4"h|í MYA;UĄĚÍyéŮłßd›4zR`(-)m°Ćjb´~d‘M°Ď˙č5'6}‡Ą˛ůxҶ—˝4‰@@m!]­Ú MŰfµąXş ŠIÍĘ+ŞyK«ąőš»¬&4ĘĚô8k#ěÔ7ęşČşgáU5cĄą}aî0Ł NŃ˝!d&mdÔdť=nc‡5;C˘ă8tóŘQĆŹ|ŢLwśăwżu Üî©N ;s¶Ä$„ďUl?lŚëH«ťŐPwÓ„žş’Ęö˝•G  ŽĆYü-{ô› ÜZ]Ő‚ă°ˇ™7ÄÂ-ŇnŁ$J÷4ě‚×óÉNMa»\ [KormĽ$Dýg€]°ü, ô˝2H>ROi”+¸x…Đ2®/ěoŕ%ďRűqÖÇ®l‹P5ĘůpµŇQÚ C(ó2ó˛Ü±J†mQE107K;ÔY),V«Á‹Ô€ }j4ĄŃhŃ-‹Ý”°%rÍzp‹…”2µžao隋ڶ$WĆÇîOŤöë :ů÷®7N7rhť°ĽÄR}ě-˝ń©soźB‡o¶4‹HŮýąXxM––*A­MJ˙âć_`^Zzy ?Đ=XvJŰ!OĚKJH&¦6Éb©«âß|áČb<ő±™ŘKďÎ#ł‰Ľ M1qŽ?®‡r?Ä ë>˙8mOŻĐÇęé}É®ÇĎH!˛÷ăř‘·d8^ĚŞŐęŁIÓzFŃ 4—ކsHë8­/×ő’FZˇ=eeŘči’ m´N‡´?QůéFU)¸•@ľÉhB†a™Nk7ra˘’AĂ"ó¸ çǹ۩ŕëÍЉTćvÂ9k3í¦Ďą˛3ó…Ž —îŇěÖMż˘Ąs üúź%Äić<,ĹÎßşŁÉď磌–żDłrµ%ÚRHdXĂ?Ĺ®ä€é{  1¦3¦Ks–H¤» ßr´ľíßťp4±)°4´ĚLŚ”cä…•Ľx8zx&኏ć€vl‡tÝf+WîŔŽhůČs4ţY¨Î*UCň(`Í’K6ČG˙!`e´đěČ˝˘Ś|Č·J(Ş‘ Ýtôܱ6Ű7X9ŇVŚNrę‹c¤(Ě-PeŞłó´\čśEš°ö6Ĺ·‡őjˇ“AG$őůP÷Ýć[dĚsXř(~»~?9"ÇŢ{ ň5ča)ΓĐă7*›á4 úëđT’©h™=ÉT°ăQKFX»!řĚř™+;[°v” <čͱçž]şi®ÓĎ(®á÷˙`€¸ŚOFv4;őfďń.ŽťU Ĺšb˘$2MÄ215űÍMŐ5nĚŔńŢ&´áüM(»ÉĄĺLÜ•ô3hĆ•ö3®ěTJČćJkŇř€H?ep]żŻÜžkžńm ®< ×h˘BŕC+›ö3ě—JßÔ€ ť?˙ŤšŠśľďżr,ůµ FnóˇW`1ÔpČŇG$7‘ŠWćWĘĚ©ü2ÇßştńZoT{ząüčán(…\uV.ěg”…É ĺ•Ĺu^Ź)i<Ě’c‹©Eđu}“ľ˝ŞQ^QŰTŃ Ě /GâFęµÂo!Ç®WÎ[Ő}ş˛říëň˙•´!'í2ůÄÝŤłú˙\Â~˙z°¶‡(63ZôĄ„íúµÉVţ‡űÁq;ř~żµAő™Q/:z>;âáěϤPJ†wU––ËÝ SŔ”µYUŞzŐĹśăYoŞ.`ńˇ[MWĎÂUć<ĺC<—Ă—î»Â}›•t^ëfäSÍLX 2 ú´óZŕ39l÷_ý Ś'|-ˇ» Ň÷Ęqýŕ¶Ö ŻLD>ˇőf1 ĐK߉éŘ’]}Č\QI&űĄĎyryą Ŕäd–|xŮs÷sÓ[3CażIě':(G Z]™vJu©$/ ¦^v—˙wÇ{@ö<Ą8‚ ôőGÇţQW§É©çҲUÖÔ¤¦VŞĆ3’ͧ#ßSŇ–83ŃlläŻ4;‚Âď‡ Sîk;˛1–Ä™[8üľížlôy´Úü€ç #“¤f¸öŠ"!. em1ż€8íň žY*21䍂izď rŕĆ.ž89ńÇÔ$ŃíóbôVI!_mČ)ÄRdż­ä č‰V´ ý =l4ę Ďćł3žôÄ"nÇcqłOO–śĆög±Óç«K)Ě7Ęł8Ę «÷!Łţ'ŮlEâMČéńwÉ9S“ĄÎŐ« łĺolE6xŕ#€ŤÁ;đ<]ŁÎË\F­Ď*.˝q ‰Nq=_6~ČqL¨<«PdIA˝„·ż1™ł·őŽrÔ¨Ó“·‘Ü´ ßpp ¨ŮŢŇ%endstream endobj 527 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1064 >> stream xśu“űO[uĆϡ¬&Nť–µ19ÇM4s‰—:MĽ`$l#cĘ t+ rí¸ő Ą7J/çí9mOKˇ”V Ęm#čPt0ćŔ ÉŘ’mYśÉ˛ ]BLóm=$zřüńÍ›÷Íó|ž÷Ĺ±Ě ÇńśŁĹĹ*M]‘FŐTúÝźŐÔj›Tm;…YhJʤ?ŘŮČÎśůçęއĎŢyzý™ť¦´VĄV«0 “*JžÂ°CŘ~L‰˝Á]Řâj,»‡×dPW$E’4˝çߌŇ &Óř$.®}Sěń;Hht+ëXh"ťf0ZÂt€ň„ ÍjÚ#Ř…¸\ČB?őDŔ ™‡PÄzí¬CŻń€ž,¦KĽť^Ť·Î.0šĂĐ·ěłiBĘîůÍŕ§ŔuZ8č4šOĐ®÷i˘Ó F;ç R×!/߀b•^őěâú!ÖoťËL'Ąei„€ NůăëňČE`zżcYĆŕMË7îžgçؠׂ !ZË/Ä´üňăTÇ$~ eHŇűDý&ň„ÇA7‚yۡťŃ€˘[ôfî…„ Ü<•đp0ĂÓC;…¬íąćő²rh€Šé†f€â[ţÜř¨>Ú¦=Ůyôđĺ/o?zĽ¶ĹS(+U<Ë/˘OÔN‰*>őaV~ŕ>RŢŕń‰MtóI*€re~7głŇ.““ÔW–q¦%6?Y ÍRÓHŃ73±x1»l_9¬Ť`" ‘>9–8wA9Ru¬®Lg! ?žä+xń¸đ|«ťss!Ö`¨É­µÉY ĆG Uµ§„ćJŞ»I]\*Öq¶Ŕ˙ë%xCŘp¦µ­ľâ’~îĘŮů±’/Z¶Ź°źQNbGą?O< 4“D×ÄëxűOI:śJĘî|rCŘG żIŤY†|1đD©ÁdVpŇ.·Uxa{FnŻőŘ? k z81ŘUď*ýë˙dĘ㏭ §˝'EůHŽ$SŻ%d ł(ŻÔężPç!Ľ,˝Žˇ†ťĹ_ŇŰWŰ?Uâ|.&¨řŢßS4Źdp´p]’z%ť)‹wĹÚ[›5궸%6™OŐŠĚ…(±T=űyn‰kÝÖëeăA2ą:ż´Ä„·Ů w[¨ýŰ2]~Y…:p3_śžîčš[4ő§ľ×_Řx´¸Ĺ“"©˝·0ˇ\—ş{O-¤Ţ‘qN_7ءÇEjŞŰËuUN[KqÓ!÷ Ó†z­a˝*Y&šy®@xµÁ6Č2A–šÚÜŚN‹đóüBé‘c®.gŐúVËKĐB8ŔáBđË 9ú»8ď /˘ü¨ppjçű=ÚáTA8FÍĂR~wňIrwfisvϲâ'ř#–ŤfgcŘĹŘNendstream endobj 528 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1969 >> stream xś}•ypçĆW–1 HŇŠZÓv—+-”$-ť´fBą}l,×ŕ[˛,˶ËŇJ»zuß’%۲…T‚ěŕ'¸śĄ!¤ĄÇĐNšcČ'g=M׆NfúGçűsçŰ÷Ůßó>Ďň°ÔŚÇă-Ű›™)’ß%Už(ůĹ‹yĄeő•"Éě“ď×±–iĺtëZz÷,…ÇKKUÖUŠŞŠŹ‰0 [R»[TÜXr˘|Ŧ-‹–‹­Ă¶bŻbůŘ6l7¶ű9¶[Ś=Ă3đhl)7KĹ&y»xŹRZřëůžÔ5©§ç¦ý,­2-1űü3(±ä›”ew0öµZM’Q^2ëC~2b‚O÷LmĘ.(®Ş&d7w‚Ę@"m®”i94Ţę08}&k·đŤ….ť<âÖi uŚ–dSgrµڶ„J5Č[]z›ŰjŰä-8I;· ěW‚şě.Gčf - }ŇxŮEŔŃRô]´=OnŔoë—Wĺ-|Gó‡0űLrĺÚ‚`„„g†;űżÎ?Brß°­“E/>N6$x÷ź?˝rzŚ~%Ą˘a!… LjSI 8ĄąŇ]ĐL„ěaěPÁh¤U,>SšŃđË]ą9 }vŮ(~Ă2a‹Ö¤u"yNćxÁź"ěĘż"$“Ç\§Íη@č÷AxVŔĆBL3păC«vC­f( E(÷Ë\ÚŽ]˝öůÂÝo˛»B[—glx§Ü©RH4•z˘5X=8»ýK˛kV]Íľse|¬=D†¶_cĽp:Ď8í}ţ °âléqÁáíe€ż.xk¤ç«Ž!ňÔä›çź oU$k)1©*FS„/ů†w™z˘•óŢĽ†Nçާ>ď+*“××QÜd¶ř„6Km¨¤)±ĎPĎhŚĐ(TúÁ; T+Ą)ˇ¤ÄFö3í P@“pőű9wţkńżĆ••E˙ĐcŤxGÉŽű¶˝aďŔp|ŕ[ßż„±EŃÄssěŢ{”¸ÎO’‹V?ÁGěj˝Ô(VŚľµL/ËfuFşčW[Ďoęžčý[çéŽX\ÂÇŹĆ^_SĚ®P?YN»ŰBt˙eđ4·$—F*ÓJuŤdńЦCPŻ˝-ľ<Ň{˛ł‹PîÓ+-(/.&(µ4Ä޶Z‡ÁŽw5údőÇ›ň Kn~ŽćŚÇâÔ"ŠóÍN91öÔ*ÁŢ_Ż'nđŃŘtŞ ŁąM*®®«Şokîě>Ő#Â3ő·Ö˘S3: MH7—®VŰzş!_śŚß‹ßsuză^(9}č'"vąę[6чç{b€űÝúŤQ©©"k·×î¦ö7B˝B݆&<˙LŮŰ˙<‡–Ď)ęíźő)yN’â!’Ţâ'7pšÂŠp]•¸F,Č»bÝŃnBÄN ,^łś!gsWd>ę1Y"v}lěŕ'˝Ęr%ÍňĹ™…ЬüÝY l…•1ĹÖpÍŃŻ®•”—öK.M˘”3(}–~JąDň«7xÓĹÉjAĘ™çWC#1s?M čdYě+ŚžÖ…k”Óc¶íÄ%´ń”˝řٴɨĄ FÉfĚt´–Ň-«@Xˇ9€2H˘Ą–yNCĎŃóśłŐµuZ0‹É ‹Á >°š¬7&Oe¸úLf®ó>HűŇ[~XBő$ÓblŔU.Úî±ÚĂ–Yµk=»+ĚE.âJá‰[TŁPŠwr S=>“×ÖIš¬Ö6đŔÇ«C‡ý˝˝^ßřĹáţQn°—vjč €{}PŃŃë8×[×w8÷ŕŃĽ<"7OŇҬű4ą*ăIvń˙“]}#Á®śů˝A:.çM~e¸×ů;ż•AyăÔU9ä AzFC«%čńśˇ˘‰îxŘGtő·˝ËĹ‚[…ŻĆńy(;ĘGÁ•şˇŁÇjjkÂ5ý]ěVćefša¸űZ'ĺđ~ňZ0Ëă;[1¶Qöµ˘w9ąžź¬®ř4nUłA­1,űďÍ”’s‘ŞÜ_›Őë¶ýzł}¶ ,Bî~ĽüiĹrÉ{˙Źüé…ď Ľj [ZG͢Ś”Đ ´äź'Đ2pâ.ĘÚŞ2dQó|öp®ńŰHmcÓúvp5»‚+ٲ+Ö\ĺńŤŰ‘Ë‘›'ô!Ŕ/%ĆÂ${pD°mĎË’\Ŕ‰Ý=ÝöĹČUňŤw.vťqóevh7Ůs9$)SK6ýZ/y×,c1XÔ~˝[fë“×2taůčjŔ5 PŞÝF›‘l§ĂLgî-vgĆٱgŮP‹FŁĄ°!¨ úý·‹@ď_?Éľěi%íÜż ?ĺ/ąDv2ůŞŰăAµ'Ó˘ o-"¦îŻI_Đm6›Ě^S»Íî3§§cŘ0źĚendstream endobj 529 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4349 >> stream xśŤWTçÚžeaglŚ# fÖ\˝±aA4–h5FŠŘ.ŇvéEúŇ—}ŮĄI‘ľ°¤cAŔŤ†cĚŤh$jl±×|K>OrgŃxs˙?7çž9gÎŮ™ŮďýŢç}żçy^ˇŻG“µë6JݬfĎŘčĺ.qŃ=X5x|0ÉF a¤~óř1¤ r5FĂGkDč úĂÖűř®r—JÝ ‚ľ:Ň}·§—˝·ĎF_‰Ôişól«9Ösç}8ÁÂEą,‰ź2•â?¶'ÖbáHl&¦[‰ĺÄ6b%aKĚ&ěŐ„5±†XG|F,&FĆ„ Ac†Kf„91ް ĆńK$Ăá‚tśÎgBč2â¦@"¸Şz×…+„ú¶úý•"H":F¶Rł©§ĂÖ Ëľ`ř¶áÜđó#>‘5’Y2ňĹ¨Ł†k [G/}Éh”‘Ź‘Âč[ă±ĆaĆ_›$™ÜDŤ†żéMWŔi 8™Úé]@^LézmĂXŽÜ! ŘG!n'iŽ+ő«ŘËa‡[ŕ:ę%I_ŔďË $ä×y)ŰŸ’t‘+!‘ éË 8ŇN‡Äh-I׿¸xňüąÇŤ,ŽűĂW†ZąLŁť­Ô  }B­?ňcĐÉŻđ(l< °1f^LGĂШ§ŹÍ.ČcŔĂ]Ă]\¶¸V9gˇÚŕxőÁÚĂ]•íp„׸ոÁđ˘Ţd‡7sČR­5çâ4&Ż. ’SÚH[†$ ˘§=ĆúKÜ]Ă#Ů>’~'éňą›ę*~íón§ú*dđď|“{ČěNÇď€B#^ĂW8t†ż™j3Mią¶Ż9˝Ţ˘”aőx˛1Ű×ÚÚ]]Ă5wweRś!U6+ă3) IO¨ĚČ‹Ź1‰ńi©ë–-yš”Ď—cĹĹ{*2)şŹGŔŽĚ Ň_C¦˘Ëţ1fĚvŘCĆŽŤNÖgDżRŤ’ˬűr3>ţ˛pUJQń8P×7žýć»Éfy˛˘ľII±A Š–ógťPŐB›b_†9ß\ÝÁşCŃx·E#Ř?€¶Üj­Ń&?äIé©lŔĚ5 »€Úl}ÍCóŻuŰsNáÝ$ö§J!ž .‹¬«©(Ý÷ŐŇ¶Ź±ń,L`#<ćńDˇq hd>ű.€´-˘á¤ľ·’•iI©É¬Ď$+H„mŕą/¬Ezú ™B "µ *;>ä)šš5‰żŹ{9 ‘Čđ–‹W#s'ŠrĐÔ4űzžŹ-vň\8ě ^3¸@#8ů\ëú\8č…î2Č OGâ5xžçběŽfâŮČ­AÓ‘5ra'íep~oţ¬éxÜŹh/*D|5pM\‰÷°|çaŹ*´ńôˇŞ’*U U&ČúźŔ_¦4)ÓFi§0Ą ;#]S=ÜYËÝÝUá3mm?vU{i"Äń±Q~ŕ’"/.Ň>Úß <©Ź7!C4üEoS\ďÖ:vsÝřŚ—A7HÉôĎŠŕ ˛ Ş´˘-°C^Ô˝ .·Ä´„T‰›÷7g—E›ĘrAĄĄ§É Š.J(É/Ď­bńJL0¤đŹ IN ôj.<©ŞÍl(Öéó˛ÂĽŞşv‹›09LŚô^Ź`Wn›úmď±Ă­-Uěç˘Hć‰ß‰µąíú#ź]ú ˝ž®ö1Ţ”=ý®pCD÷şôż*öÓëßô®Ź'ÂŐü±:¦FG9“¦ç| ç¦tů`ĐŹLÄË )EÁ¦®ô‰ íÜw/ţŞYÔů퍛ĘV÷ź…~ęý€'łř’jŃe夼3dłˇQłę"OmpšĺJ~<$u9$Kxîhňmő ŘÁđěđ˘č^ű,úKŻŐ‰q¸Öš± ]„§°X EP…jUľ˛*€şŤôÓńßu"ĂśyŁÁ’N$xerýçE}¦´Ţęôě6±VHҧđF_îIĺĹ@ý.=U4eěWÓf›´O™Ú°©od`HPUđľýuö÷Ĺy%ĐFČ/Ü‚ňĆľUű«NÚ˙|ˇXˇŤă˙1aCuí<ţ—uŤöŠ»iSŕňOöý˙čÉş˙ĽĆ˙cčRĹŞö_,Űhx»ĺaÓ>íˇíř˝_cÉ7‡}]ękG}‘­A»î´«ŠÝÇâÔ(Ú ĺ‘‘°›˙ŐɸÝY{Ĺ˙%ŠÝPľ—EŤ¨Ü[â˙Ś8‚ŹhÍGü%żçůđWËiž$OáęA3µ mĺńVŇ ]bŕjÚUźoť,,q{Xě1Óß6m |˲¬:–Xt)˛ŽĂw•ď7\Čî‡+Ô‚B–Á*٧±–Ą.Ľ^Ż×D=ť»đ9ś‡ľĽăĺhÄ?÷h ú˘Ę§ä;ŔRX«“?ľp-ÜůH úV¨ť?–ó'­ä-bíi˛”aěşO­Á_'ü:Gk¨×ĹĽđ'X±ţ:áż íüusHřů•.?ĽŚl_>ĺLz^>z wx÷ŁuDË™Qš4Ĺ516%y5„óîËNôę9šŤŘ3Çá‰9Y]ņŘŔfÖ‡P•6vÔDŐř$g€BÎV}yĽĺ4Pw,Z(¦ż„ʶ-Ţ´oÂ~f2d@(Ą%E:ěę.ň˘0© ú…F€fŢĺsćµĆ-eŕÚÚţ‰•×jOÍ#tÍúäô–Ú/őSď®ç*Ôő=; –ĺşűŠšę8n•±!ŘU,uň•‡(’ˇ)¬HQ@"%Ë…Rö čZËŞ©xĽm€«Ű˛ŇĎ}ÄMiśZ©ć Š€P˙8×Ů÷V#2Ľsç;„*ÇiĂyXŹ]ÔÍ n˛Ö‰1'&I É,>óÚ×@‚Ęç’<}ذQ‡ę(Oťp :xúxë”o’+9ËEH®f0”+Ň{4}mS#ÓOÖE¨U‘&=Ź#n}ř1·Lé1F<ćÎ ±đ &śÜb|ĽY´…¤©ĘÔŠĆ” 4úë;E9ňě1=ŚCš<2i{¤Oţz„'8çî¨LVĄë,4Ý:%’cĸ›Ś‚佹JUN[PŇrü{8 缨’]ĘťĽ´ú€}¨{čÎ]ÁÎüAŢx,úsŠ^¶LˇR) ,K5ŐŐŃż8źg1]i6ďÂ4¤Ź¨gřh(íߪî´kL:o#›Ű·Mé×|ŐÜřÉfÎ,\µk«S$[Mň jÔÜ[Ý™ę«fc=ÁER«.Ů·§íŚë‘x ¶Ŕ ĆZyOLź@Âű?!3±U&N°-Ú[jďśkAz&µ8Ş ®BŐßđävÉaXDZe»`+l×µ®"B{ăr_­•|ăD š18]„ !Ł(˝ś ůaŤHU˛ç\QanN?o-)ä)Âúx޶đĂbř»y"¸> ‡ňŮ^N¨NäĎŞÚ{ăŕČm4ŰŁ3¬•ÔPĆŁ5‚ΞĘ$ďŃučbše‡Ľ:wWĆäÚţMK÷QčŁîÎ95{ň"›™QJ—ÎlABK&zCŔ<B˝˙Ěî%2¸?đ3»=c`ăN'{ltŐĚy_ú~(ĄÎ~ŮyńŇů-+ŘĘ× cłlËÂy+ľ8Ýpţz‹F/©ŰÝ%…Ď̇öŃ|÷‡Şs¸‹¬4­:ü+o##˙'ÇřM]c“_ÍŮ´=ĘĹŤőp s‡e6ţq*Ň?ŰŃyşŠő'qüDç ŃŽĘýAěÁĽúR.´8bĎť0 ¦Ŕ$$ś¦ĆR¤/ÄY˛~:‹v:řëŢEó#-ˇ¨I|’Dłř-ܧ~†?eđßĘŁžÁp4źg«iRňÁ>vžEi HÄĆÔÍ‚Ą”á /žżr&üěěy íŻ5ĄŻkŻhť@nđşěťG¬$wt¶Ş©Ú,:ŕÎŰ Đ†¶ ­%é­ŤĘÜ.öąM„Ęő%Ř‚2 WkW”˘€‚µ~a;\SŕČaęLe¦R™™«TŞÎŽI˙©¦×endstream endobj 530 0 obj << /Filter /FlateDecode /Length 261 >> stream xś]‘AnĂ E÷ś‚)b“l˛hUµ˝ĆăČ‹`DśEoß™qSU]<Ä33`>Ýérľ”yŐÝ[[ň®zšËŘđľ> stream xś•Tkpçݵ„´±=.0U#eśÝŔ4 .$…@=!ŚqŘ„Ä †€qްŐȲ‘lKĆ–Ą•őľ’veKňú!;`á) Nš`'ˇ†ÔJĆ!¶t\—™ň#uż•?ŐteCč´3ťéĚ>fîÝoď9çŢsIBšF$©,Ü´I]SńÓúĘÝU:ă˛>S¤)ŻŐ© ©Üă0ýÚT^Â>2%)=–-çć#ÓH? $GňÄ<‘!!%Ú‰«żJ{5­>íO‡dBZ$}ζ9Éž–ąĐŰY÷Ň\ pƇ‰ ’ď~Ť˛Ç%‰‰ç!źßDă2ž8sĺ΢›]»(gĐŰÚ74ĐĹÓ±Ń÷ĆĐŁ@ˇÇdXľl;.,µƜ—źz ¨UFnö𿎠Bµîµ5é&–m†*ç·›ď~zíŔĹ/čńë=7şFßA…gsů«îľż/žxÚ¨,Ľµnęy‰Á-IĚO*ZśíÖé´:édń4á´úĽŕV9BM‘P¨-D ĹSD¨ÍN•uŹT\ Đë“ä&%č5T űőzŁQŻď7ö÷ŇY‚×× ý‚E¬ˇ»,ÖŕfDśŔúsů=Cöăž(ŕ…ľ/‡CpÎiú¬ŕŔQ”~~Ú ‡+ë«««Ż”ăý!*Ú ÖĹË·ĺyi\ ‡g ao•ĹR]]č¦ˆ âcÎzľ®ĹŢ.‡WA;ĽçlĺošŐÖ Qf¸lŞQD•— gqĄbjµĽşM&0[čéŐr {z »ă‡–:ˇő‘ę,‡]Á˝p—Bb•ŹáčÖ» ÂoŲ`›…1ć:Q.ÚŔ IV¶۾ńŇŢS6ś®…uPEa‘dÔ őő5Ć|·Ëçv“˛E r÷öą+‰$'`˙ŽŽ/rTK‹?"r<ňkí‹“‰—D8=f°ĐÉ32‹L¦nč`„3˛Žnča˛¦#uČGNy˝n*Ó$™ĘKÁçÝśŰ˙ÄÉÜq3’úxçŞ^ćtąš™ý9Ă«~ż…ú§Wfq°,ŰÂv0 ŻěĹ-[W5äPÍĽ+DwÉxŕ9?ߍ¤că˙8ÉĄşÂSłFFľ9%ŢäČ€09 Ih„mŠ^GŘÁzö±>Ú˝>_]›ˇôĐúˇ]ĹÇ €ĘY›ż´¶Ąą%ěâţÖÍCďĂŞüĽôlŐůŠK@Ť_ý ›¤˝ŽĂćÝ×čŁ]E›v¬ű˙~2qĺęíű’ŹŁĄ©‹ˇ˝r_·;tëd„ YgJ·¤R*ćé䄬ń[MďĚjŠŠĄ˙qîaN4yça˘,.v&Őś›§%—¦Ů2řY~°üŽ=F /Ě|źJ0Édm(ĄO lŃäĎ=Lŕ•2ü^„łp.^ŤžÄsŃJ­xP(Ĺ?>3S@»ťcůä9Ôˇljń‚(›Ýnł†<íNFa˛ěn»šT¶°=Ę Ą…aÔć"<´©’e÷ůĆeÓĎí :BŽÄ·b©Ň)$Éq^´/©m˘7Üđůk»ß<řĘ™\ 0µ“8KF±e E·Ń’X;syµß3©ţD=&˛¤®#Ą3µß[śź»rçîľ÷JéŞĂĄ«ŽžüüúßŃ &?X¸ŚI–Ô*4ë×<‰ĹŔ‚-ßüůîčŘ­wN×lbtC…ZęßUřBmŽ 5”Ś!żRčC×ĘA»*jŰ<^pÚčäyÜÉşfDkÄv øSuŠŰ ¨h8epń˙áždíbzÍĚÚ¸šč•$&zŃć°Őęq¤Ö叧 ü!ŰÝę 9@ĺ-oo^ň˘Ňf÷ů@\Mś; @k>…¶'ׇ,_Tű!Ŕµt %Së”|Ôď˙ÖGH5‚˛şýQŃëŠÚYOč"עĽ/C!ě>ľöł‚Ź~Ö]ÔÂM ~`ś1@OáőĺÉópN—_Űx©č—ćwúćÓÉż2Yl$Î'朊Éâéń :]˛5'ó‘X0"~Ţ[™™ń/¶¸°žendstream endobj 532 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3310 >> stream xś­WipSW–~˛lńǬJ¤”ó^fB‡N „†Ě¤CşC&tXŇÁ,1`Ěf¶eă]¶dÉ’-Y˛–wžVŰZ-Kň†7,ŚíŰť¤¤˛:CBҤ!=éšizŞąr_ŇĚ•ˇgjŞzŞúÇÔ«WőęéÝ{ľűťď|çH@%'Q`á›7ćVÉ6TĺřÉňç^++>x˙ŕ˝éÉďL˝•©BHMŽĄĎ‘ÎG+çˇYsľźK‰ѬÔ9 %ąĹĺ˛ÜýyUąĺ…ĺňÂ*yR“›˘¨…Y;×dŻß ¬Q©ó d;f§Jźś?—˘^˘VQ‹¨—©g¨g©,j'•Mí˘ÖRë© ÔOfE`pđ” Ł’©[‚hŇ’¤!áż&—¤Ľś‚D˝36͸L—Îdf˘YľŮý©«™ý5íM4v_8ü"ăńoÇS_őCµ ×ę×0Ç}xş!Aôčű y˝˙ÉKŰl]v—Ů[+Ëł@‹µ§”P¦ rÍl/×eppř-ĽEň<ÚÖbës´‚Ô‚Ăţg‹—ZÖňU ·U´ˇĘj|äp~Öoĺ9W=bđ¨;0ŻR++8©J ĄF§.ĐqŃ,zԒ҆ž JĄÝ]Ă"-Ň ¬KÂFąľJ-Ľ& çěqíĐamiâ{6í~R{ó_OxjąŘeňÖ•Y „ɇ<{ĐF%”ŞZˇĄ%l5XÜßĆ ŃŘaÝ mmĺűtN‹ź'đĺP™€ŻW‘~čöyđ˝V¸ęĐR|G˛ď7«9NĹIŐV5¨ ¬`67šĚu`¤WE:»lĐÉ|ĘŁç,)͉ăhˇLQĂó ö ŞFçĐŃööŔe>ÁZşpů(őř”h\p±Â©ď¦ţIĚ;mNpŃ~-čeköś\Y R|żŽ­8oAKVˇ57ľî:ó9űűOB·Á™ř˛ˇ†łŞMĚ~Ľ?ş‹ ¶ů÷÷o1_!Gě ˘M˙ŽčSżúýJĄť|~ĄÎ˘=«ń?Ęó'C$;)8˙z\peŞZ8•…śb»ět Î®7ę ÎÄäŕ»—á­@ăE˘řXüFSłŰ~©_*ćžRTf0Ę3ń:‰I&˛RÝĘą»ßÉG ®ž@ ‰ţ¸čŢŘ˝^5Rm „™¸EÔEąŰi‚âę’JtlyÇö’lúôÎúĘ +T2ŻrŻđPn« ňJdÔ=‘6Ž‹°żÄ-)ř Ѩ)ęH}‡˝ĹÍ·Çř©{—͵$­V©šSB-T$Ňj­7’G3  Š>Hëçü5® ş­ť m&pş.[„ I.źN2ó1:š‚ľ­Çm˙?űˇ§ă_ý­CĄÝÜO(úřRÖjP3 ‘Šř:ýcü’ÄŃĘóa[€÷Ač(<ďt¸H2¶Ľz×CJ^ć~:MI%Hu Í!ÄFD“Öż2RĂIë­*¨Z!R’z­ó<ÓŘŮëüW{×4öe(\­¦ ±¸$&@s…^Ľ‹–˘E©!ôń­uyy Ę"őÍ&ćX•GŐ ©\ZśY¶óPEĐk¸óá.GŔ{‚íü˙Ś#ŕę§4Z-®Í7ě­c˛pŽAFPÔIˇÜÎC#m*Ďز .FF˝ăĂw¦pK´Ňç¶ôgţĂNś®Ô Ůëź@ÂS-A ]PTé+ë‹ŮĎj˛!—ĆIßW|3cLwáńę_Ăě»9|µ͇÷żIM˘‡§Bič*JĆo˘‹ýh y¬33ĄË×”ě:OęŹř&›Ź˛(=pa°o¤Nh‡°¦@Ż*„JşşU>0x´çÝÉí[ósTuLĺč[m‰"šżĎ)úo¬lĎ­OzG€ ©Őh3 ŘBü„&Ł ¤¤&¨e Ö:ťtTÝQ$Ë/ÍŢ>)»xöčŰ!Ó™{¦ć,©­ůWĐś„!f¬ĄđŢZ1Ť˙côűŽ0®äÄż‹§9C`ű4µ;ęw—™Š§rń*Su±Üb•ęŚruĐ›ąíű~}ř¶ĄËîţ?‰=ÝB”ĺn!Äę*kŮ‹[!‹Ć˘˙¨=ßyÄŃu”)Ăs^}c-I[™Méí÷»ˇ›Ž•¶(óe‡öeM\G3äšŰGÜ'iÉc” ŃĄ ކ–Šýj0Ďi°0 5úĘő,×Kww®ˇ˝hYôCpLŰžĆ úFF.«©’“«VĺˇĘP>Đ+·®(Öˇ©Ů>;ëw»ů^ůyçç‘Ř%)+Ż­}z5Ţ‹—UżAjRë‡ć Ď·¸™Ř‰Łî qÍvu@×WÝ©"Ľ&ŠŇ†Ľ>$š@[cčźc‚w‘u^Ć›n‹›jC ŤV‹ÁČlŰúóęź9W źms xFŘwD—áCר˙ë˙Yč§Ďe˝„7ŕ…x~ϸö’t}Ä·_`εŹ€—^Ť‚â§ńx– }ÚŃÝóô©Ý›˙äíé´®ŠĹç&â§ăÝqŘ᣿«PŞ4uŚ6PÔµ™čëő§đ üžőíŢoŢ{BlÍ«ĆRc‰¬Lš++‚r“Váč‰ŘČň„ŞŠňĘöl¸iţř·‰ Ô^fzMlÖ‚ą^·}×nhú`itrbĄÚż9ëďúýh¶ŔlŃ%đ=Jm:-gÜNĄýŻŠ9„…™úZŇŹő‰zş]A¶íÝ14ÎĐ·_éXSť×1—QÔáO´i˘)›9ଠ7jIË…2©*M¤sZ} ^tď3ÎlŃ€Y*oSô¸ŽĂ?séťm` „ĄÁč‰+_ÝŐˇĎ޲ϬÉfuĺ#¨é-çťţÓ ”&˘K~=•r(¦Ť ÝrqłˇY_^b2&Ř‰Š dč !ÝŽaĐu±xôŢžMńmŽ>>ŇHzB /¶ü’O)ÍłűpĐÂçc}‹ÁVNŠ+đ˙ga{‰ť.§-D|<±śŘˇü Ůa:bZěpý‡d»Ň¦ď Ń ŮímCŁń}’ó÷vŮ«ěFň2 M„ŤřĚř·o›7ôO{LIń®‡Ţ5†f§2Ď‹ĹRgJôđúR™…®´":ĚţQQ”v:‘$2CÔšő%™ŐĹÜw~Ű©“o´ě&BĘÁIDIbśôĺ›hŢ÷_Ž M˛ˇÜ‘ü‹@_:2FÚ§ćŚę3d•şMű,r ßÚß}i  {ϱýżzżç$|śäx†Żtěů´ą§đż(PF }ë!yl~ÜöÇŤ·[˙7´]ěęp´Ő“÷› M÷h_Ďqď8˝ŕĎŽđ?Gô}Šö˘ÁţLŔóĎÄiEXŠ—˙"át®Ć& ŰDnp:l®[ŇłëTɸů/źŠ ťöź%ţďëöhv”Éí®#huÖä'>›ßîgßGĐčŰ(éO í˝ŻŇĄł‘Ţ SUcµˇP_PYVŢ\ě(†,ŘÂér83™{,tţ)ó»NßĆf!—™^đ‚[mWŐ<‡ ˛†B:e‹•új“’8U!ŘšŁDA!hµ”ôP^šú^0µ<ţŚř,1S=!R@lß%;t0 ô´Ö žĎ{š™ˇńKĐôQĺĎĽ´íéÚ‹ ´tyTŐ x\n&ŕÎČçč= JU/ÓeŔfz]hőÄ@l ßkq5=×ᱹhq Óh®¨ ‚¸ÝdäM bIw·Qx"ţ—2)hJBwÝ<ĺ=ť_ÂIúo6őŤX×â9´bj¶„T˛ŤXK ôJÎŞ01ř…ţČŁ;CRč°w“⵹ţŢÖ-[©Î‚"Ŕ´\;fnćx"d°¨ÖZő†CšM]> stream xś]O1Ă Üy?€@Ô.KşdHUµý1!C_ MUu8KçóŮgŇ—ÁŮ„É-ző€„Ťu:Âę·¨O0[‡†µUéĂjU‹ ôŁ ĎWśŔěü* ÷ĄµŐě&ĺ5¬A*ŇÍ€:JEgŚ@ŕôźÔî†ÉüL0Ö0‘)™ž3ĺY)`”•¨`L¶uů±¦Ü)‰Ź€Xm1‚Kő­»¤µľźŠ g 7Á‰\Îendstream endobj 534 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 457 >> stream xścd`ab`dd÷ńőM,É®ĚMĘĎ)¶Đ JM/ÍI,IIvw˙śüÓ‹µ›‡ą›‡eÝkˇďĚ‚ů_ 0032ň É$—¤egçőeć¦ć$–”d&§–ä000°00Ř10,clgě`ěd`ÚÓaŘÎđ†Qëűľ˙ĚVi ßËw2ţ,ůŢ'ş¨´»VîĎe¶ÚŇî’’…Ý3ĺ\f›ą°{‘<ß&a'†‰ß E»çÖOlě˙­zZâ»Ęé©ý3&vĎ“śŘą$CƬďÚ˝s:ĺwKVv×ÖôŐr4˛Ďú­ó[ôiÝ”Öîv h}uMĹŚÖ©íňßU|~«x7¶×µvWH¶ö­“ű®ú®ć·k{{Ë”’ĹÝËşűvΩý®-ńťÝzieo÷änÉąÓgĎ:…QÁáű˛˝˘+óç&7fŐwČýţăÖŐŮ^ÓÝ-Y·ŞiŇÄţţiäľ{˙°ęť0aZ÷4I?”ý”ŮÉřCj'30DŤ!ľý+€đí÷Ý~°Őv—.ZÔ˝p¦ÜŹßwłC|ß8uó„źBË7-dŰɵ“[Ž‹9\ź‡sy_ď„É=ű{&ôLăáa` Âüendstream endobj 535 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 508 >> stream xśUĚOH“qÇńßoĎăăă[6vXĹóСČĘ‚ŔF4ACŠQ;”ŃźCćčĎł)łÍ6ÝžőÝ|ćeY”;ÍBë˛K -ZDŢĘ›t ¤$–á÷Y?qÍcź÷ísxQÂ[Ą´ĺä©®ŕőîŢC{ş._Uzşo®źn`Ůj5Ţ6lüŚyeă|ËśŁĽ¬Ź?Đąs!N"‘&b% u‡đ$DJT˘|aŻYčW XY®LŃŮeĽöŤ3/â1WPHGľhd8î…0Ě+ü\ÂÜöá TÜŘضŔ¬±ł˝ýl19fĎBFOR…{))˙iîy ÄĘt›·őpGŔ/łěÜŕ ¤á¶Űt ö'_ č,âÁ"}W=ÂUűńŹËP`@Z]PBĎŕˇl® ŹžÂ¤ĚÎó“}pGZ]˘a)LČćŠ0a€!ŰkT{IX_čo$L}äp‰Ĺ]SG†ućBë%<čÜW@nĹMš–ś¨'µˇŘ~Łg¤Ŕî[;€5gŚ o™ő=s|?:˘žÓô˙qŚŐőYÔ\đ%†?r>t읏x7ťP“YU’Ë~´°-Ŕ^Ű~X+ŰśVS)HŠj6q|ń3Ň’ôúGţ7 M´+†éy‚˝F aĘşŘ,YůÓA[S>“­§Ťf2zŮf#ät?ć2endstream endobj 536 0 obj << /Filter /FlateDecode /Length 4713 >> stream xśŐ\ÍŹÉußŔ·±/1|°xs3Y¶»ľ«ÖQ{á8^ěÁv$‹Q‚pgf%®8C-I­<9řoĎďŐGwUw5É‘"ŮŐUő^˝Źßű¨ůnѵlŃŃżř˙ÍýU·xyőÝóż.â7÷‹ß<żúĺźX'đSë:ÇĎżą ď°şeś/Ś2­jńüţęşůӒ۶coŢ.»¶S°Î5Ůç»ĺJŮv†5˙şÎ}˝\qŤ™jv4F´ÎÚć7ácÇxóů«lô~s8b*úÁ2«m\C9‰—sOţóů ȲśnUkŤMĎoݵ|ţíŐJJ¶X ü®5ýzÝĽ kKËť'ÁĎn¤Í>~sż„ů™ęňśnąr‹żą~™{ZC­\€}¦ó#U«ĄíÔbĹZ-°a?tómŞ‹cčZî4(Ɇ> #9“ĹHÖ*&¨ÎĆkçxó˘‰JBdË%g.úŞFnqZÎŽ(H#mą¤ÄAĘ‚€źT×- ¨łCµŚ™´·ëćĹŇdHÁ”ę©0Űk1?«jÁË*1ŘĎ0’·ÖrËâd¬şCÓ2eH•˛Éţ±NŻ˙Hůląbçălř¨đQăc¤j$ŕbéĎO˙ÂgäжĚ›“uŮ3eM;Í—¶Ő`Ů‚ńV»ŽűľHâ«ňČ5 \ÉVuĽ]qc]Xá?˘Z&Lm~<őě¦÷ô[ňBxŠÓ8=ÚŔ‘g¬Î5lTŕ#ţ÷‚v’yĆ™÷Uâkl]IŞY¬•ŕ¦5†LT×b)Ţ[“)F“±knŔ~'8ë,,1v ŢÜ/ń¦sRćy»>nľ÷O MšDšćMnpw_g&pťŮl7ÇMar~ßż}~őÇ«ŕhÔbÂÁ§Ńű&[©íBČ4=şżj$q1N;?_É­a>×rĚĆZF€Ů>­´•“ţ3úѱ˘8âŃ꬚»E6ňşŮÇPd«š\Qďy“*ďĂ·uţ…xż$żéxóßĆĎŬëcy˙ýRýŽaw›ÝC|IŮć›ĺ0j˝ÝzNIoň6i752`/47u2JT︪çDţCçTÖk%ÁíO\´J:†Ýä@`},pÁËÝţqi ą@‘>­ű ©Z#Y2<_‡Ň››Ş5‰Z}‘#KL˘ĆĎE­1܇iŐl73B›_w˛”ČbÔm†˝67ů“ă.M€Gë|™Ű‰pŁ3ü’:ňćĎ‘7ŕüŔxT¸±$8AřĎu}µš“çř’„ř5ÎqĽ€]vdâGŚ“ÍzB¸D&íxS+i]§“\­ľ÷řzXđŻĆ2áőx÷Mřě¤ńüeůőpđZäw,h©;×8ŔMa/¶ą˛4‡8;Ô0×»ţĐ0ŐXÓüÎ 4ą4¬÷ëű•çŃŠs×jőÄÚ@vˇĄšě˝n”çŹyŕż’nühƶ-łÄÜt4»·™´“´Äyp$|„ŻKĚŘ˝Yßćv5—Ő—ôŠń:TŐnű6“üű‡8łĐ‘›q#űôş!c`° ´O‚q,‰ŹÂ9׏îÎhV)¶tDŔ‰m˙âç—€˙¦6€wŚ,Łw]ÄI¦§®Ë:ďş2¢Ľ3Q üţ†ăKi~^§“*]Á\8y“‹ł÷$ĂłvąŇ ¤ëdóü”Ű[qŘiÍÄČşćr_Hí!´ŰŢfß?‚{•zvŘĹx—±ćőCţV”™lŢ=ÄW8dđ‡w#QËé?®ŢD$!ŇÍ.rŰp<čçAę|->\ŇOů8ű 8“ľ¨ćpÜŹ ţöqŢwűŰ9ÇRs aŘŮŘRM«ŚśÇ‰čÝ>a+ĂuV%ť¶‰6äÇ5ěŻ(‡Á#”3Ě˙¦«¬ŔÜšľČGžX?·.¨-×ełë’÷şp]i/Ťí(rK{ľ$˙qŻ tyĎ—vĄ÷V­@Ü(âdźÔ¤[蛄ŐSî0Bőë}Đî“4Lv_® Ţ1§ňuŻ!‡“Đmb|[ÉUÜĂgafY0 $ĆGw.€ßV’˘CńÂNŘ3Ő‘=ă°g)T€i˝_ť:`—ćíö¸yŘÝoÖŰ6ßÂd“v1(o Ż_ż7˝ľ~¸M_`óŇĽ0šŰÝËŐvóÚĎ®´nî¶›WdÎŮ-ëłt´.LŘm\Î&Ł-:§dóöáĆ/UM»!t•ş~yőü®“î±)BW|5˝ ‰‘fnA=‘ŕ'q»N…[ź„ýŔ:¨c†VŇˇŻ‚w„ZVË3 Ż>¬ˇ€P€E^F‚ďrżKJVť;ÓĽ pdąńżÚ4nꉉ{š„˝.PĘů°V+{*X˛€xŕmâQá<Âá”p`>Ąkü§´'©G–>¨'q1S§´K,şü۸š¤˛wr&ŹI0”G{ôÜĄÜÇČ—’ÂäČ—t.,Ŕ…°±Ă‚BÉ˙ĺ˘W¸é‘‹âp˝@v„€Î—Ś>JKa=ĺi~8/‘i;HĄ©Ëdlaa1š×ńŃjfoĹ) łę#ĄŮ´->*ôKÍOëÉ­Ü ^Ď垎úŰÝ/WŇÂĆ˝hę‘ÂpĘľśHĐVJEążÜgnŞ^A´Âv´ńl䯪ôHÄŁ6I}É*ŞÝő.řS:urÁŞTőy,T%YÖ2>ÎĽOŰ<ěI\ě„´ÓŔXŰ Š5KaűµYˇÇ¨üÉ1±WëBśľI>lcTĐŔ6RÔ’ĂŘafÓ1ź$cá>-»¨űŮlr)+NübŘżiĆV¬Đ°úÇ}4BÂ9JŁ:|’›.x_Býp—]ßđśµT_t‰ď6ĄŹü4Î`E?ł7gýĚ6qť&‡=Rv2Şýc !*Ă©ĹÉŞäÁrq^‡"Î ‡2.zíJJDpŘIµO®}ą j_UsK‹dĎh iy×[šŰq… š[˛+&/óŤfEĐńXŰ!^Ü]°Ă®•X{Á!Ý>ßm±Z€+ë:©ţćZ¬ÉĚ|IQ0ŘuQ”q&…-l}A…Fł›10]L©>¦Ú“],Łă҆"ëKą¨Ś_śwŮŔ%ˇKŔ ç%ËŠŔ·’âXD+pŰ-FŽR-§Ň—hŢ;›Ç #C­0©Dç´’špP4čG4ŕ¨íCyŢĂ}zî÷n¨ ÷ç>'ëcŐ¨I¦B¤Tâ=x€Đod^źŠŃÉ*`Ň i¶i.—P¦ŢzúĚŤR’EĘćÝŢ0lĄŮÇqS‚Ň2ug§D"…Ř%üQŞQ‹ć]Đ,ˇJąÝĽ|ĺ(§bQZř˘Łđî0T’/šéĹr¦“Š+ŕáŢîż«k©í¨WňB-e®”ô’/EŻČaČžý|F|Q!rŤÁŘÔ©đX~!zŐ}ďEI«yôjzÎý˙CŻE„ř$ôÚG#$2 á|ăË9ů ‘ŮyäéýS)`˙đfĽŤq§ëDÎgŇKҸAŘD˛¸‡™—®SľIBިpŕ űró:TŽ1 ‘Ýě–TÂa<ĹügÝ|íěČ*ĐP§e>`óđÍÝ><0˛ą{¸ łňęµ3U•?ßĺyňź™í™dR%éŚć]<©OôÓĂJEľ5µ®†ă´~gÍý.䤬Ňó;ÚŇx_sź4Ý;Ł­¤ĺA¸ďŘń_Ŕą"[\oň‹3ăŠ%§ż¤B.,śĐcüÍ!6Ď7’µŹnÇN‹(ˇjŘq—¶ç¦-†"TŠ×‡Çű˘ iw$Gě_S˘8©Ýţ~˝őbĐ×jC_ÁĺŐÚ…¤ŞŚö}—!ůç+Č"ôŽp—‡ăććLfpć0öÉĹ ixd¦BÜČ—¸¨LE|4\4éTŚđa=´qJ§˝]÷iů$‰LÍi.c/;ˇLe;ŔqĆ$ęÎ÷…Ť|Si™/đ&q=ÓŘ (cv ăö±Y…ť“Ć…XL›Ë.ű–-«©ôˇZ™@áçË•YÝü~ćń÷ÍŠŁŇg¦"5L7Źa-6ZGÚ#U>ôÉLž`–ĎFţjFćsŕQϱ2™®ÉÔ‘}ŮM·9zMg.&·+ÝlRÍ“:^§WS”ő-ĺ˙4´śý‘ž5ňŽîŐP7ťÇ<ó…n–ľ§®ČFcb¸őIťze‰–0ä‡)íU,)3}—PĂk‚苤o"$Čhŕn&u'}[C!U°˛ň:•.µćC.pÂá)ÍűÔÜi6+r˛ś˙ŤŮ<6ů·že[Š$÷íˇç’@Ł8Ţ´fH‰ĽiĚdţŢşńˇş!Ýüpą˘řČtz¸´92mŃŠH,ău‡A˘żyťj ŃEgٍÉcC!—TŚ-jÚţÁ%lŚäţgŇp}·aü^„©a˛g{şďCř«ěé›y~»škg°&ďˇČaŤ_^łŹ•«`BAvIU«éŽe¨+űëN¸˝ÁľşZQŞcP+o¸! Býí1’őu÷^„¬ Óy^V‘éGm&úă‡$ü;±ÄŃ…µő–ľvţÍŽ<Ő‹IŃ­zŠoý…¤ľM÷Lçť[Ú…°”ťúlµ®q˛F—'Ŕ|‹ĘYR=çĄű6űŁäYúÔw&Âż8¸3@Żő˙W=ŁĎZĺ›xVŮĐ÷Řî¨ď]{׏¬[Y*ęu–M]ę—<Ď&eę`ć” =«ÎĎÔőy»kđOCEşÉuŃČpŔö×c÷Ĺ î¤í8“7ôV%30˛r!ľ–žc»>F9éípĺ;‹—‡+ŠŢ﮺Ĺď®,‹x ÷”-Ĺ3Ó˙˛˝ú·ůËŮŠgŤNé2µ­ÄAą9\Φäj˘µ |ct}±­íb_ę5%{é…o]ŹrÍ«uL‡[cÎ2—?>Ľ}ófw8Ü‘!íDĽś47»‡Ű 9«ÍĂËřŘÂů>¤×ó‘~r×±pKŇ9©ü-ÉăÝđb¶›ănź_QH#_,Mg®ő…á“'šúžś˙ëE6.gDŰßcÉGĆţaŢlÚ»vČ|Ű|@DĂÔôgEĘ]H*)Pf˛ÜE /\ľ G-tTR·öUm[Ś4€îâ=V®.,Úpꦙçµóˇ*ű{ ďÁxwŽń™IˇjX«ţ®»ż7Sá Ł{j}ěř‡Ú’KÖbP;"rř“"_Ő‰>ť^%’ó|E…âNĆbäOćŽučf© űPźŽ)z«|’öYUH)mMÁňG`‰ŕcŽ”Ň ünÓ,UúVđI-Młňť#.'łśŚČěúÉľ­I"G`ŘÇâMI,ĄŁĄ!Ţô˙ńęmDěĚendstream endobj 537 0 obj << /Filter /FlateDecode /Length 5667 >> stream xśí\KŹ$7rÖąˇ“aßöP·Í2ÔiľÖ€µ6ü€ďj0=2¶Ô­iĺŞzj¦Şf¤ŃŻwDĚ$™ĚŞę™‘W6sîl& Ćă‹óŐŠő|Ĺđ_ü˙îńŠ­®^]qzşŠ˙Ý=®>żąú‡Ż‡'˝gžŻnž_…Wř žZm{/őęćńŞ3ë›?ĂXÎd1±ŢX/ÜÜ_Ývż}˝f=ÓŇrć»Çµ€×ťŇ]ţt»9oÖÂŔ_´čľ]_K){¦x÷Ĺđ"ö=ţAôŢ«îËÝúZ¸žqă»űlĽ‹ż8îŚë¶‡8sÝĂń»đ›7˛źŰď|}ó´!]lČčž6Ô}µ°éŢ8ćÓ¦_fóoîhÓ w°y«¦„WłůLŠ÷‚‹q¦Ý>ě/l©ŕÇf»3”‡u-ąí Ěp-uďŚ óŢ>>Ćťz ÓuÇýp·ľVÚ§abä§rŔś‚‰ű7k­€ç–;ôëk“{o»ĎËÉŞ—âÄLtwůó]NţݞźĎ0Ľ ˝r®śę[\ÂŢÖ–ňRŔhŕ4“ľ± TK›ŔĂŠ 7/â´ďľ邟 Ë cT·ű&#ň¸rŇŠĺîó‰"Aoă<śwA¬źKá.,é…ěv‡âât®:ţCܤĆŰmҲʵä;ŚByá˛×Ę‹ŐÍW7Űm‡ď×I•Ň6¬%Ůaĺ„ésá'ÜĽŹ)y·ŹŹA»Ý1>w¨ĺ>QÖ‚VŰîYwŔuĽ3^"ëŕG [ ÍWÄ삡ýC˙ ‰úżÜ\ýţ*X1˝Ú?Őz ĹzÉÔĘ2×kě¶űí]zŮm‚i˛m  P ÁĎW결dołE»ĎĐ‚ĽßV$ç˝4˛ŘĘçűÍO™qé~*¤{[pô“xÜv˙Ľ Ç/t÷f8€†âŃ€L{Gˇf䚎”ţ«Bţ†űČ2‰łďĂ1eyďy~PÝłő§ŃîjV;ŕ®+NĘŤ 2.u4±Îä/éžsĹL4čĎşćĚ0­<Úáîă8ĆU˝·Ś†ž[0Ţ׼7ě ܤ¦śĚ{î!y {BťBŢwźFK^ŃŔÁ%źhŘ7§Ö°}8żoĎl–b7żI?‰î0<€DÁ6„ł©Ă}*°@čâDď¬Ă)aĄ˙n/ďµÖĚÁůfct~—Ďj{Ĺq«ůČŹšë‡ĎÉŔň˛ç؆\َ‚›•‡Ă&’%Č´u4đŐh4@käęápŞćV?€zýëx|,]Ż, ‡Ő#°XzëńÉöę‹JXqg˛1#pR‡¶F‘~ÔÜë•S6I—¸m˛TYúQéţ´Ŕ!­ĚČď Ëş·ŕúdSXü\X,ŕ˛BXţ¦IŤé•5^Ç•>kRR«9·—¬,zÎ8L×SS ź6vTĹĎšó©Ţ)Çuo¨sJÚ4&ÉQu–¦7ĆŽFě˙SKĆńXTm^.ś …TĄŚżŹM‚óä—*—¶ĹşËĽőŁ˝\ćíDÚłő×aTŤłb;ô= jÂ`ČQS¨ö9dnŰ{€©ZŘ/XH}ú@Lmt>Č€ŐůůŚÝű »âcLYú Ć‘ĚăćÇäFa…‰jîz ¸nu ÁňÍĚBĹW+™nNCD/5 ÇÇÉz»Öšč‘Áj“Ô2+Áteş'+FZmDšlł`©¤fŕ\/Śł•P̬'nŻB5·…’2™á§ÇĆ©9YKËĎfęĆÓźL]I´Ť–·X¬ŇXáDݤŤU˝bQaLxIá±R^|ά(âůýîWŮ -Ť‚ EóV(ÂăSˇ”Ą đ>ŇáŃó|čžžĎ:Zč:”!ěvCăĹë/ Éq1FK´‹ôŃe: —7Ý.'ň8<?Uٱ2Ĺ06fYdsÇe›í6’ă\)a“…ěWeCi[ÎýcťŔ›´ ŘLŰIËzËfg)G•>ˇĐJ+ąĘĆn Ńnb˛XÎKćÉËJ*YX9fgM‰xtá˘búhM¶…Äh´Ö´ţ:>|˙mńëw0#ňŃ]ü‰‡üڶ!öŢ’ĐB€9îpwĆŤ­´±€ÁÇ\b°^X٧ʵ†¨päa;Ü}Űôď ® Ď!ý—Jd\wNDd ZU µm#0}jHüBî ™2!măĺĹxş 5­TDśÇá€ĎŻ[„áqčyxP§€fđś‚čO٧źďŠvąü=ŠěłN…©®:!Ś1Ö¨FĐ:Ä …U:_-ŃOÜŃ,©Ľ€†E@8B.)äšŔ;îŔ`EŻ’rąWĚĘ ¸„r›ú:+´äé黩rp pH­,u¬ýpí5˝-®»9RĺAĆş°2ísłŕ~#ßYÇ*[Ű ¶˛L ţCÂ)Rc\aşďŰľşř%÷ uů·ÍËB4żŞćă¦x}>W~s@€a4 ѵxTůT€4W?Ů’±Đ@gJ 'đf7ě'đúĺ©T\Ž9PÚ”hĺ ăCQěźŕ}ctŻrä»ÉÁ~ĘZő üýËl` !×QÖÄ娍•Dyô>Ăět ąĹR«tuěI«Ę""¸ś¤VPŢÇĺ@#ŃW"DË„ëf±`s/Ą.ĺd!h˙ŕ üĺd_•Ŕ7ł¤ÖBr“CäΩíűŕ…Ń@W(ŕ´)í†Äř‚ó ç:ú›…RŹ"^˛Óá™ę×uU +ČDÇŃ-2 &sŔZצ7”ł:®˝ÁęščŤ·Â6Ś[.Ś˘>ŹŁ‹şuŤ¤ń‚M;˝{˝ł9ľŢđět„ą#ŢöŞŔŰÝëñÉ>!{©dĹ=ÇąIşQĄ )%w‰Á7tČ…ÁR wóÄĆ×€Jół›cÔbĹ}—ůΦ+ó> Ł3Q¸qÍ <·€Ăć!Ćä`gu¤ÄĚŻĚTébŞę<‘®;&~„DH¬żĎě"XöߊôpBŃ>´#4PUą\žŠh¬ki~ľdU']uďţZ®ş¨\UJ]YrďĂxŚ8ŔÂg‹ŕ ÔY2LG!zŃŻŻ5cÔsôĹđ{ŬFˡ$Ř9!@ďďĐ˙†ţë}+ Ľ ă ČQ˝ËńÉîń1Ę~L ˝M EÍm‡Ś3čşgÍmÓL‘ÎgŠŘ×­ŘW†TŕdTlCsTÂé%„ąXś˛y\,‘¤+lšw0ĹžU©x”Ć´"ž&Ęŕhµ Â×sšÖÎăBČ+ĐŃ©1JÚ·ś–î Ée‘ţĽ ç^E•j÷4Yq‚«B~u/@\m/­7”}ě~·¤Şä8ÎőSĄćŹmč|uĽĚr •`ĹĺX¦‘»™4˘„°n›[ŘA3Ő•6Ss‚§8nĄpôĘŻݤń2>9݉P ĹŘAez“‚ —ŇS'_†ÎZ[Yőꔊz÷ňůřy%íýÎgŔłç“F~Řó™ĺ”čÁą`jŹ[ŐU–ôqě!˝™ôĢ áë2N­š ›v\yÖýçW¨gÁÔřĚő/zţ*ľO!OUv\Ę'sÔŃŻ-žž¬â‚ó‡—F>áđj¬hµä#<;6].iBĘJýŘŠ@lĎ©hUĎŰ ‚ŽrU‚Ó2);´‘Ń!Ż“:´)€-BóŮi¨Z^¨ĎËT(3Soňd"ËĘTlŔ–N–Xn,ř –ř€Pg¤Ďýé”äx1G›UÖĚqA°……*ţ->ĚÍČ/ĄAI@^8úÇ»ÔŮĄ}¶­ _WE#§Ú¦dä2)ˇ8´y3J-%8Ë…/‡o»[@€ dÇ×mĚOőđ'tCýăôףźć°X!Ť‚ĐŰźűýĆ'ÝtŲč¦aÎ^ăś¶ŤÉ„Ç˙•Ő_ §IVÁ]*ď\Qż\ô”kĎěâmUmÎS°±ńxEäl¶„’ł¤ţČŔ 8f«}|Ôä_qp‰}uŠŘ—'ćţ±ĹglĚ!|¦ŕ×óµŔ—Rs.0Ś8vi¨źzě~A¬4 ©w™µhz„+Ş»î0ü\'qňĄ'¨‘Üz‚–ş/:A±t‚†BĽ*BBő 'čäă3şdc:6‹f—Y6Šşj9ϸ_’!ťĐv ŚTr™ €3L_el(Çè W†čů}Ç3öĎ•TŞf3s˛˘dt §,ĺ%§Öě5Ö¦çL§rďłÎÔQšďąTîl1—úr”#T«ęę^ŁŮ%$­^‚´`vQVĎóô×}ÖkŔ4-2ͬ@D°kTC´žJY[ă=ća•v‘Ľđ&P["3=­NČ2Îd®BstŞű÷ç“Ŕ¶ýÖIe©ŕŐä¬çSµ¸L™ć»l9i$*5¶#cw šIĽŚ ?ú 5űŕNµ" źŐN-¦ŐŠ—Á `]_nł6ů­őĐT„ËéôEí¨1ř8ĘËÔ»‹y]Ü i;ŻDž¶ŁŻ-Í´ČŽŃýíki0˙[vWo7Ë=ÁŃ«`™iŰ»±ŹÉ¨Ęű$«MýÝX_Sí$1.s/ë’»Á}Zź­?‰ťg>htÍ“|óîv=ŢćizÓ ‰Pľ(Řf,‚©tIµľŔ0Ë)#–=ł,5o䓵Gž°kŁ¸ë€—¬"„›ÍĂč {1f7ĆéH h ۬光fq#f˘_Cgb»¤Č ô’Łv^Z–'P„–ËÓÍ׏ۼϺGŽ‚p˘@ľXc>î"´7!±e !8Q;÷6łsĘs‚ÄČQÄă°Ýě©T­‚޶ŹäBlŔ6żi’UyZUťŞŠTéZ,6Lńi®´'Ş:,ßÔýôÇĐżpÔńv–ŤçŘ·\˛Ń©¸\˛Iˢ@¶4‹2zmďšę¨{Ůja›zŮĆ2ö(lŔľ(š­Văµ7"RšňÝ4˘Ľ<[ĎD+€gF×%¬¦¶Â``hiúˇoKß›b©ý}żŚüŁ%)„®Đ›ÍřÉ2N1€ ÷BŰ© ţ0dZó.~µG:'Dl”d CY~hßhĎŔWFKŁÍIKű럦mlx(íâËěXj\»źŚÁ!Ľ3„K­¦–Rľ™|şP;“T®ČżË°đĺŽ_„’ÉqŁ`· 8ÇËÖ.ŤzľXßScÖrą;Éźn9}jI/Âĺ’7Ş„Ź'JzĽNš ťłnłIŕ µpkĹ”2Cţ°”(J¸ł'T/–P­´ó%żK~uvAMbĆ^L(f5‰—F†V}Čô†a&/G\^š$Á{Ĺ.ŞO,Ąfëĺ/™T·F‡Ë“Ú規m,_ß?†řż_â~‚>ĚÄfúŔŞÂb›ý&UrŚă%™Řf“=·Ŕt4ůů/Ăv8Ž-\îöńgî҇ůŔîÎ r‚Ű4\.ůŐ·cKŢ®NŔ‹ŢT_…¬nd=AąDx» hę1Ţj†dxGßM&ă!µŻŐ÷ććIť*ÍŹwtgÎąÔiţˇE”śË_HI†”[‚pŮ0LĎš†˙7b´*A!&×ŕŘ„©bň\~F4@ } ¨9ë |—}sd„2ó-¤±ÄU†fQl…$±%0Pa›…€6$EnĘÎ8y_9ůůĺ*%ĎZ#kĚ/¤áfą9LŠvgÓÜ9Źqţ˛o/É|č΂KĚ/úK‚ ŕ0gEü…v&ĽĚo©}Ď}š’f;úoURňˇş n»Ż×%†Pmş·0» …ŃůYÉź®ţ{Íf­ÎďĐŐw 0­®Ňa¶‘ĄÜŕ§M<%…Âď•xęřÝřáŮוĺՂҶ3›‰ĎíÔ>®9†Ä*~ŮCó'E{ř ~Ôy©±ôĎ‹Zę— Ž‘ňT±]Ź ćqŕůsÜ®ÖŮ…ˇ’@řłÖňl7Ŕ(‰Ŕ…ň{ŔpŮR‡*ë8]/˘,1ĆĂi\fŔć”1Io—°čĂ-é Ś*´Ť´GLăݧ%»:Óp xe¦ŞźÍżyf°¦ĘŻ’wƦE†Ž^Ń´—"×´)?.°n(gŚK12v>\QźKËĐWľKy)d% ‡ôŐ“Ëţđ@śçWoS;L¤ÄĹ e¤°xűUÎý”«0ľţČr,V` 7Nęuh I«ĄŮ‡hĐ?L^÷GZ_'ĚĽ%ôĚ6îŇ4Ü7¤Š’3)ˇdĺďŻţ3¶endstream endobj 538 0 obj << /Filter /FlateDecode /Length 5591 >> stream xśÍ<ŰŽ$·uübLň`AŔyčäE5‰şÂűecH„؉ ¶5@ĎćˇwV;n©g{ÝÝÚůësÎ!YE˛X}Ůť’¶§ŠuHžűŤüÓ‚ő|Áđ˙řďÝĂ[Ü_ýéŠÓÓEüçîańo7W˙ü{ÇáIď™ç‹›WWᾀ§VŰŢK˝¸y¸ęÜőÍ70–3Y f¬7VÁ7/Żn»Ďľ»f=ÓŇr滇kź;Ą»üéfuXż˝ŢhŃ}}˝”RöLńî‹őëlŘ·řBôŢ«îËíőR¸žqă»—Ůř˙pÜ×mösÝ»őáŹá/odżŰßüĎÍç´!]lČčž6Ôý~fÓ˝q̧MżÉŕŻîhÓ w°şł¦„fł9$Ĺ{ÁĹi» ű [*đ±Ú\%±–Âł^jłXJÝ;cś¸K/T÷óOwů«Ă>59P@śŇĄU˝Ţ>¬_ĂüKĹ€ Jv_H ĂťÝÝŁX5˝B&Ďq7Ké8°ÝˇXŇăß"Ý*ßóËđÜÝĺ ? ˙X=ĎĎŻăÇÎt/ÂxíT×ÂEřc•3éůŇIDÔ<˙ÄQ°p[>ob<üqŘÇOx·Ú ź‹.ßöö1ĺ,b ř‰)ëi€^a4—ÝýéA+¤¶ĐĆbŤ0FX¤Ń’¤fá˛×Ę‹’ë”Ţ'® Đ,$UşXâęc‹6",hó* ®´i1T’t] ńę°ę#ń’ —°qaĺb)D/˝+8ŰY’ý$O ËpXăYFĐĎ(ĎŽňěÔ¤Ô2a†v•ŢŔ˘8Ť\Ç‘%0Ůa(ŚläOĚbő¦îw‘˙‘iP)#ľ7Ţ ›d„˘ŇN%PîzmFĹłż#1ôŔ@¨‚îҡ€ś'ŞĚ„¤}@{ĺ*ćE¸¨µ Ň ż˝âOë°¨Ü ŢîĹ­ÁqăŰk­ałëŐ‹Ü,$ŕVvo×wéÓ#ş<ȢRu™0âś 8¨TĐ\IuÄČŚă땤µďď2ˇ˛ 8ÓA4gú„zŰ[-ySY?—¸\F« Ú}·ůľ0!÷ɤęnM*“ZX0ÎŰř2î'˛CŘlYLĽŢvëśžßág^»šî°ľć0—UŔńą»Î» řŁśë& ›ý/2á YwTÁ"Qŕ)Un÷±ŘHA·ÜBÓdhfqłłŔÖrÜ—,ô]&,…ü˘ő"ČŞ"wľŮ篶›§űO‚cAĹe|Z©ĺĺ‹ÇZ3ȉČńĎ Ë;™3ŕÍi¦ľ÷ë»řďł/ľŚŐóŻW¤8 üÄw0U­ě›ôĹŐÍ?Ţ’Ńyç©TúŐ¦Ŕď1ą‡¨_đđ~=/"Ĺ_/#4Yş^źż]çĆ2ç‹Őfó}ŕEPř[sRŕI3.˘BTÜt•§ý۴늖»E-‚€ěl peáŻ]!Ş%“Śß—BšÉEZ» ţ-XMő>W•»T Úî>ŢGXnvCűlşo çgŕ”w›\1T¸O °•焜„ěó&ŁŇ®` ·ëµČH5°ŐÉÝ żaÜj|<§z×WjŚ‚•čcPŻň•¬*ÓFŇ€»ű¶GMë~uŤ®«Gd¦UTś˙¸zȵâJEúŞGv‡5:q tţn·}٬‰Í¸)|ĄĐ©Lń—*©đ˛T!i™gČ}X©™cŽ‚î‰" Ę € ´xKÂăçµN†%Fy$Rđî{bžżąúÝUžőbwiĐěuŻ…T 0{˝R #çŰî·äĂ[ˇK9”ŞhŹvIXđŔ4®J žßő«]ąŁÍ&ľ6ý|×ç[¸tí‰ö’kGŻ×Éŕ4»)ŕrđZ3Č”®WŞD3†|âNÔr«ÜĎHřx_Ć|$6řÉÜ8É9śn‘ňj6­­‚F“q‡±xkŔÁ…Ë”8˝ˇăwJŔ´;6âĹ`qž‚ż•4˝«˙e "´Ů¬î˙X Ý{’\yşĽ~rîTŁ[q§űîÔřj©.ř*Fŕ1_“¤ťŮĚżřpzCö‚Ů…ö˘w>ŇëłmČż=xü…ÁAŤCś’pŕXg}†ţ’pđi ąĹRŻű•[č9+‚ň†âr»XJL­Ů@"Ń+°Ďšˇ;.ş/ Î}}-ŃŃ˝‹ľŚŐäôľ˝6C\ —đxR[L|Ě€i­řť ^ť… ×ŕEŁłŇ3(Q ­č]°Ţ)Ă“Űüź‡˝Ř}î#ŮJňаčúáç ]‚5ľđ`‘´ڰĹÔ+ÄmŔ®héËGż'ąiY†Üá0dSřŮ…6[íŇbŚÍµ9›TUĚĽMpśĎ&ÎÔk•±¸ßîÖžuF^FčF60ă]˝#]ĄË÷˝ŠÉ<Á$z8čHtÁqP­ ŚS&Á-ŘţzŹ*ä&ţużĎ=܇!fWŤ”ś"‚ćNęvłŮ^§\Č»f ţí(Óp>éÂđWYÖ€(‡Ëć–Ě9 ©Š …óźG6ű’(ˇŕŕ±Ţ0ţe,Ŕ&ʧ­h b>m5˛Çł”‚ÔEÖ O9Č%čK¦›R‚_µS‘ĆyS‘őT–ЬŚŠ ÎůČOăČjzŢO|Ý_¤Ä¦ČćĹXĎsµP˝F yÍ5§µ¸L–ćC˙©™,Ĺź`⼏íy9í7öËb,X1f ŕăăéd°§@i ĐÝĆ‘Ňîţ˛=Ą6ÖŰ3·j„noUO¶ĘRµű‡Ö@4¦Ś›¤Ő“,3õŚ#o»ą^rn‹~Jç!P~†w\Í;\Ę‚wţć ŢůMO%–Ą1Ď;Ö„ä‰0Cš·C»g{HÜçt‚™••M2ÁzĆqއ›8»h®PőVrŁJJ¶sňĐb•6ă’ă†:Ú" ĆöUé«ÍđEvZâ Đ$ŁZUQCMŚ› Ľ-ôöjŠ ˇj:‰­cĐ4»±{°äĚďIA‚„Mɵ¨ á«!Yqű6ľqUŤç’Ôf_ 'VúYK~uݍ°‚)ĘBŁüć…•H&,ăKŚY¤cżi•˝srߏZ|1¬CY Cx“ÇÁí7ÂyPBž©Hˇ_ YŻšrËč6Ý‖ÜZ‘ł@÷Wór«ĹÓ!RbŮ«…Č’I]¬#lwłąëFÁ«Úńľ?IEÁ3äGś°Úý´ÍFČ›Šťµ{Ô¨ĽfőK¶{4BBPŰVr@gŁ…Ě­PÁ?k«:Ě9Î[K`é|-mfĵ( äÜZžˇÖä‘?•ńł€Ř“kV ;xsÍsÜ“Żůó6QŔA~:!ĽśçîgJĎ›ëŕֶеüt\ odąÄŠloÚ  Őýč~}Â8§F‹üßô­‚Źoé)ÓÎQMYqÂ5e@Ą|ä×4Ůî…‚ĄĐˇŹdťÚ|¸KLă—ÉԢè¬đČĐIJĘËÜéąžVÚ(BŇUŮoZĽAčŤ6'´µvl~PĽĘŔµ´Y˘/”L1„ܬëŇ®&ë+«–ąř“M¨_–’÷s]ÄV»¶— :éʉü¦Ifř)Ľ¶­D@,1kŤ~;Ă4Ţ@„60}“_@é(ÁýE,‹?Ď%N<›F1­KÜFŤîÁNŹë ™iy@PXhŤ!ŕsLy= †Ľ=Űĺ<Ť•:Č<+ł&W ŃŽĽŽ™ nŹ˘š‘˙/b3͇ \ŹuU0–_đĐź€ă3ÇĹĐnů‡&>KBŰ„ĄLŠŐÁÂőÚâŘ“řĽÔCăXŕÓ•›Q =¸DĄŹÚ Í›Łi…ć «Yą¶ śŕ|hšvšV¦=šUČa5ł 6NgFdÍ*LvJůj0jrqżżBĄ˝xwĹżľ’ÜÂ2ÍÜT±x¸’ěŃĂ“ÍŐWłIîš1Ë-DŮ8 T”ĺţyką €$ =ů/?jIř!AČ?ěźţýś-đ™d"p ˘78:?Űó*'D’“PéŤĘ&bUbŁÍĽ@Pfb^ůA\äÔĺ¦$‰Ô47U§śë\u˝$s.ĄE”Őđ‹&—vĽÄ{'lüˇťfIöl>[LťžJ «đ“qÓí«iCMLZě^ĆOŚ*Óą»*LF’ÍfY/JŮŰôI»ąÔRŻLÚńŹ›;¤ë¦=ĎfŻË”IŰ ®źO›©5Z¶Q“z7Ôđ&j ćgŠđ!Źz¦EÁđł®›‹áýÓ.¨XÖbś:€_͌ʻʎôšz wi«®–ˇŹ&¸Ä‡Şź ú,žŔőhę´6Óý¤ ¦Au¶,VÉRÄh(H‘Í[wâ­©Ý çuşŰfkp~­\« aa† ¬ŮÇ0ţ9—\ĂHň÷Wµ•Ş×˝ŁşU—âş.<ř c—0Rĺĺ1>––sÔ%=c1ŘT.&–&°ˇ»0uŘĺ1Żs¤Y‹ňžÔ˙…C™ÇŰł^-‚l»V{qQGƆ˙Ř*:dzĘ2±”•ÝúŐ6˛×07Ť1z´ Cä0IÄuęćxĹzĆ%7=÷¦L!Tľ;Y~‰Ů2/­ĎaH*ň3Ń̦ĂŠ|<ąEyA9=ą%ĺSpŽHgńc:Şýŕę€ŕpT«Ů Ď(gĐ1ťťőC÷(Ç ĘýDé<—âEĹ0¤3űďÁćżKKŢ,n¶÷Ëf·HšÔ®ćÖ±!(Ž»=‹hgIť Ř0qŠ üö›˘Xqu&Š1µ|<%}ŹeȲyYĘ×y(Ă4Ż03=¬Ë\ó°î¤_†â˝l`Ş:: 3këŰ^‘ďť5 %Í%F¶ăIÚŹĺvTnÜE+‰I˛řÔŶ_ü­E°–”ě¬éŰŻď_Ç/ŔxXvëÇ6ŹqJ&źJé9§‡"y™=­‡Ń’mXćŘ|MiĂ- ţuŚVG(¶›üÔäCÚ‘Jů˘8Š şŽs¤]ŻŁŹKGxWV_˝©÷â/‹_–‚áä.řłú=˘Iö$4)”aĚ` dé"=ć§ŮŽš%Î4 aě©óéUµ5xŇG\ä×'°¨dŹ]9KIúÝŁ ýŞů‰ój~OźĂšźŻĘ\˙?5?j%>Żćwf+ń¦č'4ă˝ç”{ˇAĺňáÉ{Tř^ó!ÜB01:?]áłTV=Ç}%Ľ”µŞş^ 7vĚ%÷á=«CM>‡/đ2p`NĘžÇz@‹ěѧŞĘˇ.{®/©VAřD”BzO˛žˇ:+ź˛q”4 řŚŁßÖąá(é0Đd¨JlÄl/Í„ŽÎŕ& ň–ËůdâAbjV.–šQcß“T256Á—®ţüFęë^ćŮŇČ3ŮNyâ”<˘RiÉcť[öFcsË)đjú©_‚fmy±[â§n‰>ě`Łj¶¸ůpŇ[ÓÖU­XÇ‹7g„“3žhĽ1‚Ě»§ą¦˘šZ_ŕA„|Űnîć±€×M‘\ZżýşŮ *Xi3řxG«€évŽMěöŠy=üđ¦>ĆđS]˘ńđj• ŹLUľľŤ/Ľţ€"oěg|v˝T”?Öą>P1ŇüRŚ[jĄăö>Ś(Ťe|—Ö۸c ź+{ä:°SSTÖ±¨‹JßTgô÷ńž©x·ť™ś^"0®ňgö”aóöçRÚö.W›ĹaŔŞ?Ń 8¶'đą¶‹ąşżâŽŠ-S–¤~] 5?U?˝‘Aů"ÓoŐ¸‘WiĚ´9oÎĐËČ*űĂş-{ýëF+/`{¦´yA÷ăóëŔ™ €XNš;đŹ AÂôíÉŁ1)RőłČ•á xĽjP ŕĘńŚ?7ĹŁČ—‘.+± IŚX^Ź“ŘXąę¶„Š’o‡v rçß_;\¬ORIg”oŽßč… ÁćlŚ6BаęŤtHz~¤6n •Š—smâLtĺ˝,ńBˇg/äI@±@ő*ţ–Ó ĘĽvă…[şľv°Zě˛qŘDĐuóâř×ĂËfŕfŤ/ Ť‡rMĹ®đhŤäe7×îa&‡*ŃR I×_…Îë#™f-üĐ_u^7÷± bLĎO®ÂccבüĹó'ˇe$h9rüHśă´iâĹęŢZ3›u™´”1­7˘6Da=¶Tgsäfł<¶>(p/dPŤx%—mÝGÇŽV9W=çU˛Ľş0\Ů«“ĚÍĎ+и´(WĘ䯠Ä®ŞţłÉąuĎčƱQ»Ó[[,RŚaÁuGj$µkÜT΄Çî5çé榢ාĎAˇ—şbuŠE“µ<“EXď2žťŢ‡ęéöIŰ íÁZ4"»kÜł4`ă_Ľŕ-Ťł9ĺ·ësřśó¬)ŕř/ś…=čîo±É‘tčP~©`®7ž’[ž˘qä«7CP«ziď®ć Ŕ~qAh˵ś¦'GCŰJ7ÄĐ﫵đď5ŇácŮâg Nµ˝{°NçtĽű¬ČÇÚ4xHŰýäZ$L¸bÂúţ2r(řą¨Ě]fPHí2J^”8HFę©H÷đÜţ4’łĄ-/uţ`¨Ş>Ś-±’đAń ,ŮČpŻ—9ě‹bűĂ•d¬C }˘'WšÍ¶Ľn½!‚‚‰Ëz†ĂĽŞu}h·đâsÝlČÁfMJ 8.†y˙†%šÓŁ 9ď ÔJśIŇ~wőż[É endstream endobj 539 0 obj << /Filter /FlateDecode /Length 4914 >> stream xś˝\KŹ#Éq–®m]×ë0EA,ĺű±Â ° ŇB[j@‡^8Ý==\‘Í祻#"3‹™YY${Vć02‘‘_®qőî_rů GúáER Di=Ĺô˝ťjí¬ŃËg,-´l˘d8NV(@¦”Án‚íűxě(TA$Mtë\Cľź%§šŽŘM‘>FÂjíż`ĐJýBJ€­…z iá¨ţqĚë“ÁŻő µH'ß˙kÎpÜěÖÇÂgç$€†Hă{ÔQ8žL[ śG iď ¤Ş.ŃĚ{üw‰őĘPGżđ®ńa˝+T© áCść, }Ś»ęŠ˘Đ ř6Uč“Ű[ĐŽyiPŘĺMŻvßü­’xÚľV_úŢČô}śţ‘'®mmÔ+Ý Po 2„BČŤ¨/?Ő:é˛,!í.DńĆOŻ[ĐźCŠĘÁk)%Ú& â,g÷/˝ŃşČÓţ°)Ů3bk_xkĚôé¤űC„ Â"şÉ7^oŰE÷*’w=&× ż7•Ó &őë2§ţ‡J3†t Ű}ܧ9R>—Tn± ©.HIK~YJ)l˝FHw(%8Ţ(Ŕ›í€Čŕ´Iňß¶˛"^3̆($Îʲ"Ó4ćf±Ę‡¶ 0,…ă.—1¸Ë1u©oŔXÝK 6ăp•2+™vĄPhS»Dß‹îŰŇ˙î_ç@n=I‘Tüô$`*~Vˇ—ě9ř„1Ť2§ö9:ĘsŚ…D™ź: Ąé@»uî óĎ5Ô‘J’wČoŮaż‹?¸†?Š[ĽÄŐb„Čą6s!•`ĽOiRžI6ó…•Ap5C ýbŚÔ¤Đ©Ţ&ůµőŇôĘŻł¨IYKęö팸2Ýđ¶Në±Tń/ř8§#Ť.(×ýč9+ć(ŚÔk›S78ÄöÝ×|ÍäůqC^Gj5›|Ż€ü$¤/~NÄŐył—Äp´€wÎugR¤9©űRaJtSg%Ä8`A“¨˙őńÓćő¶RBËA8¨ś19 Aŕăđvź{hg*ÁĹ3)Ó­”˝Ş ë˘ý Şs\·ĽěI#ČMjĐÍ>GWŤÁôúŻ˘yjű/`Ë/Ř?ťý• “Ó&” lVסQŠŻ7Ç1űk>¬ čܧ€ăVś™Ţ8p#‚CJţ}rýßµĎ[% Y/™¬Î[ű:Ö+,Ä4Áţh®LSčNő'Tř˛;í1¶ŻSűĐ-bZ¦ĚA©»-Ą˝˘ئÎyEş{š>3DD™ŻŕŐĹ”‰Ĺs›dŠĽ“Hźľ7|Ţí »L ŃŻ~śX9Ţ;+«ę´ęR (#W›}+üĄź‚ä+„Gąç¤MŹďŢoǦ“1”ä˝®VůXp±\¤}uÄ®Ć.°¸că.›„¦ÖĘNVőČĚÝowMË`‹˝VëĂS6.káLJxW$ë$Üs9q •™˝ĺÂgH^S}D!h"yŐŰ<ż»*!ęą«M˛äňpŮś‘#“Ş8-±ăFÚ""Ľíťčý˛Ţ‹ŻgRŤ€W='SGé›ëĽŻĺĽđľ(Ť7żí~MĎŃUeóĎř_Řű"@âtĽ Ki đ“zLĘ_ë¶ę*ç¤úĺîńśO4¬ç°ŇUč‹ŇžW˘/{ |E<˙µŕËĽ@úżjđőeŘË’ÓmÄNëT'k ĄiSe5+uAťş÷jĘ0­Ą*YŚ<JŞAŇŚT#P7Á8Ô­ą­sňS@e&q=é ŁDŃ™Đä–e`ľŤ»ś/3ZŔĽ×˛VP*owĺ¶Ę}ËĽfNęvŔ˘ýuŤ›iCSůÓçř–ŕö±ř Ą6„ĎÉĚ2ź†[UőčdÎĽQřmÖ«bJ–-2…6´uĺ 9lMŰwJßĚ#Ě;5LťaĂU ë1/Ő#˘ň’ËŠÎnµŚŮv4:K-ipT:¦Ôi#÷ 1_–R±ŤiĘIiit›­A«GRç2#l O}‹wEičŘîű\9Gvnv€ş[Ţdýź˙˝”ÔąçHs©`CżÇ¬‰ĘŘÜ»?`Í!ü®©űkäŞ{xâ<@–ë籕´{Ţď6iR÷řUŕCh*}Ľ?^ÓS*ĆľŐ‰e`xçM™¸ßm&u&¨íąŔ._µ=ö¤Î”|<4‘jßŰURĐw]ď8PeeěνăĄŃö`$±Í\SL|Ů˙5‹Ą+Ńs&9–BcţöÔ…_R`Á©[Ńî'­ëů†¶-Ň SSÄ(¤, ­n^ayZąüNš|P’wÜMVÖęSëIFÚg˘‘.).&őRFŤ!ĺćOUźLZ /šŞmÜĆ‹l;iĆ#ť´' Ő90Óv 3Ť‘eŰéŹäAĘxÍ#YęWĺC9`@ÎË”1ÖSe>¦řď—¨/XNx›FŘF»§¶Ý2üxŞ˘‘(é©!«`aó¶G·6ÄőAě±NH!š˛|Ŕfě‹D2A¨3 ~‘xíb)šQÁěĂR4˛–ţióWµŤ€ďëU D›÷˘4n‹®ÜÔ¤]×—éxuła'‰:ś1jj‹o)nN3¦Öye;ěźUGT…É×'GűE‘7 BJٻղ3e0\ +Ń#ŞWÎřT–e¦ö‚VP! B+h71‚p§úâdY[řÔ™źĘ?oÝTľ`¶ŹćĚ·¤— E 5ąř  óm<4µő•[‰11Dé0}&a±‹łáš÷i‚›7lfi1_‡Or„ ˝ĺčń^ámݬód™›qâÜ;RÄ%/Ž ›ëĽ8¸[Ýôâ1 G. ç×MwżRŇbO<ĺŚńľpřĄ˘ăd^züYŤ6•*łůľIđFa<› ˝ę‘Áß•ˇő“şšFĚ€đěI]ěusš÷żiß-ŽVÚ~áŐŞbI Ráš|äOš\ÂŹ§ľ˝ —rđ«„g°#÷úĄŘń¬ńÁD¸łş4>”{—ńuĹůňqm}ďNU»YŻhĆďŐńmÜëe:Ě‘rÚÁ §.ŕ<ÍÂ,Ě›°yŰ 1ćx‹č˘Çb(2A,.đěÝ&WVxÂńÝČ 8ęĺČúµáÄŃÔ# ý8‰Đ%žîXvL¬ŹÍR<¶8EŹŻúH^×7ŞţšŞĹ9öř"}§śţ~lřÖÝv},Ýö©/řæřác‰©»g¬F˙á962Şî©áý[í5ËS˙65ZšälRČŘv6ÖK9ě 3„öÜ·˘]n{2ĺ—zB'}jˇkµŐř(©7»Ň°yJü˝ÝQq'Óä™ls ^ĆŐs\š×Ą›n_Ľ€ĄĄ)GŁyWĽ.ßŘL»]CĎh˘n‹ŠYŐî»ÂÖOĺ*$[' • ĹĹPĎăř7§§;Ř‹ZVzŞgqč,ŚŃĹK’ăo–+­0q8}J…ÔčóXĆ㫬Â9á:­Wµ _ě荳t*Csy.—,j?đ¶aďzîţ.ţĘ8wE®Ă6Ä@ąČul†(ÎFós}+ł˙çˇ:XQ§íč™f+ěáŞĐc3˙ě˙b ©ŠVÚ•<–¬Š0ÜŘńůGóŐ ?>:Ň€ő ¸¨çşO§U ™¸Všóa iN:żí†ŮĚ`h:sĺ|r#_™‘éÖ»—1=3ć-¦Źu†ÓŁî @š¬źć§3}YůSô…ë) çőŽŞ-·×Ů-Ń.…Źqo« śLf­¬•ŞÄîZg±´ăcwm4’g&0ŮŚ‰ý«<&łr¤„€%¦ż˝ź¦¨ăX^ô…8Ýś\!­ć¦®9q…ř,ÁŞ‹®0.ű"WČì“©Ôń,\ÝÖ=qt´Ą&7ɡ6yÎÓ6ŃŻůwS®‘‡Ťë¸mr1‹‹B ŰSF'·/~iK_ůŰY“6KćˇtE5ĂŮ"L÷|ÁtP[ $Z¦«ŠÁyŻµÂş÷EG„- _*]‘t/ł6…#˘“±iy)ś„şÝÇ˙—!ä@é{#_čËQXó)Ą7÷^Tń2«p!=> stream xśÍ\[Ź$·uVňdLňâűdčřE5Év…÷KH‚H°ˇ\ě ŕ+?ÔÎjÇmuOKÝ-Ď®ňŰsÎ!YE˛X=WmO5É"Ďő;öw+ÖóĂ˙âż×» ¶şąřî‚ÓÓUüçz·úç«‹ż˙Ťăđ¤÷ĚóŐŐű‹0…Żŕ©Ő¶÷RŻ®vg—W€ÁśÉb43=f\˝»xÓýË÷—¬gZZÎ|·»0ßIŐĺO·ĂióÇđŤőÝ×—k)UĎ”ęľÜÜfĂľÁ/Dď˝ęţmą®gÜřî]6ćâŽ;ăşí'Čž1×ÝmNży#;řÜžó»«_Ńtq Ł{fÂyşß,śą7N¤#›­>\ÓÁî¸ ď2L 5ľËć )Ţ .xZi§ *¨1l/Ă %ŻÖRŔ‰ť\­Ąîť1a‰äR@şS:ŻU@‰ĂuřËKx’HţČOqz ÄSŔfşM_ ëé+‰ĽHtUNřŔG%ॶ|~(¦óŻöŰw8‰˝Tw·Ä¤îÁ‘Ąźq2ĽQu×ůř=ž ÝýńRën8l†Ó×áEŔ‰nsŚóęţ”Ď+^zŘ÷—keČźčľDůł(ЦŰSđĺ&nÎąn8EÁ9Ź¤Đ˝n%zg>ąúź(WšÜd˝óŇęŐ:űWq¬S+Ře4TŇ,­yo¤öŠnţFď·˝0Z€gCżęâP_l@őB oŁđߥ1"{±ďĄV®@µ´óŽţ˘µC8ŚdذZM)ÂŘÍÂ%hä™’AŠżşŞ{`—Ýg‰´%Á¸ď™gQ— Ś*)5Ęĺ«á6Ť+čôI“LřŃx~/™@/_–LľWp\ąŇ˝uR’Tî㪥$ýek¶çŢ!Z*ŤŤ5ń,ůŔá#×JrXDöZy88Dît·ŤZ3‹IŐ†C4Ő^v;Ô43ř9KźĆ‹î}nNéuvnšĐ1hß6MaŐcn[Đ4MÓ U|áhěłů›íć4$s ä‹pL.LĚ-mČ’©¶`—ŕă©4@Á ‡…ĘťÂk6űÜő¤ÜôVpŕÔ—Wű¦űeN°ÚĘęf­•új5#>gĆvű–» Öűg;Ńĺc†śµ9Ý^'­­Ô„Dy“ĽŢoĂ+hJËÇq×k°i8ÚoÚ…ç3ކ3čeŃ9nnFčn7ś›Ór9s÷tX Ď5Ęq˘KO3”,»Ů6ĺ÷۸%°`Ł/z›Cˇ´g+Á$‘\%µ8bé#ŔęŢ×'ŘZC;Ą/ŁG –{©HŐÂŘqÄ\B”8§\ĺu9 s4ÄLŰ é:Ľ«Ą p ďv MĽ‚/Ľpţ@ p€łěUśl+@ T‰"˘Đö™¨7]0ÔŤ C/ďł›ÜG‡>Űl1@/ło–%ôŰ5”w5 š&Ô¶ )ěT7‘dnnŘĘW@)ŘÍ€9‡KŽV‹Ž|·ĺŔ^®+h¬łĹfșēLţj+ŕJ)÷`+ {Ţ9tf' †.@JđĹ(LÜÂ6@ÂđDÇď3\˝Kô0¶¤¸@? }Ăaڰ¸·5BşŔ|twÎ…=]ç’?”Č;ł A†É6 1áe``§LÚĚ@e"AL2ĄÉ=ĆçđYĆŹ\Ńđé dą:FBG 9!űŰ(Ęąž¶:9ßkë›öś>˝ЧX hŁ[ 2p˛×ôQwbBM„îĹ ą“ e«ŚŰî—·a>𖙇–š€řŁ’!<ĹŕD aÁŕS­ w(bŢSä68óÓ!Ě`ޡĚíréę"€ů”8lćZëPk5¬4OkňkÁdoąŞX!’1Šq>9Č c3íµŠ‚#ZţüŚýL÷łëýíéĐĂ™đ$·§ź5đޤAt$3,ďz)&‡ôh,_Ű\eÄ3ˇĂń3Âߌ3$üÉTµ_[ă“uú”ŇÓô;”±Ćśa …ŠĐsgç†Ýj¶?Íßq<ŃAo3»7 ŔđŠVŘ=ł¨1uHĽMÔăhÜĂ\©;‚1&©řęë\ĆAŰ^·Cĺ5÷Z@t7€zÎËđ‡f®mZ€[“ÜžĂZ"Č şbÉ[¦CqsŽÓ¶¬Ł ¸V-áóŘCďĺĄÇüI ¬]ýrÂf|Ł.“b^Ž8…$¸ąčkX§YyQó(‰-.€ů·Zz‰ —Că­K/}¦x(aOŘ!Đň¸lË÷ł)@$Őqô˝Fĺć{_XtXŔ[í yL?$Ăó(ˇµŁ±KB+–„%ňˇUÖ. m‹3š2k-ˇŤj|źĐĆaµq]Kc)c\‚§$ĂL•Db+çBÜPŠŰ©ëFvň\ `!;9ý5†ňĽ‘s@.FřsË,gâSŐU@»9Ľ‹oťĽÚeIŔF) €ŠüĐME©YČm"S¸ â‚;‚#LĐđh1tÉOz;DËý¦Č§{tףýó–¬Ŕô1SŽřWF¸†Y&Ař™zTgő{zŢžęµWđCŔt‚żj&}/•NŮŃOš:řheq _€Ż‰Y Ń‚ńÚ~źĄ}v·Ąy%N:1—AA_¬zŕ ŻĆÇÝaśą@ý ť.|3‰0±[WyąPËŔ`n\¶Ć˘»1Ţz;â˛pQćŞVŔM𲥠PŮ*-’˝m!ިŘJ‚©D©ž-Ş Ĺ Ç ä^‚¶pC±°‡“Ěr(u +xď^>*†ÍBXŘ A†«BíÇíŹ *:>D3›ăôyKh!µ´AÁ÷ŽŁ7’WKÇI„´yÎ[ť9®Ž ˇŞÓQzaă_ź†f6 Ô)«lUR“ÚčŇ]ס&†¬§Sgělä8HF|Č!Çşă™r äUď„­˘¦źf‚rĘě*łÉ®ţűĂ{Ĺ|)¤łđq5ťcPO,˙Ţ%Î8'Jóřů–CŚ?OÝͨĽW^FüwÓ^ęŢx×$a=ňĎű¸óa{ÜÇĂ7.Ŕe8±,kžšň÷§}8ĽőŹHţ"ŘIIÍ÷ńMó°v¦ĺÄ}€ç*´ ¶M$<ćhOűéy‰nv* }§@yޱ9îo“»ĂYÖwšŇÇPhR$N4ÄşŽçS…X ¬)j* bi{ˇř( ‹;?&´´Žce˝2ĚdްxšYnÁľ€QÂű“+ěÓ˛ş6*@"‘ŚJ°Ź Fe vžČ(ÉŔe+—ďăEd ×Kx”ŻűLŁ"üŔEA2*î JĎÖĚś¬9üˇ1i/YSšo@©qe ĽM@(ďŹÂžlzR˝†đÇ•* ŞťN!v;iżĆĆ$ްY·Ő«v~Fôó3˛—_ň^¸ňXe/ÜW‡vAĘ(ÇôŰđĚ.JRÔăf±]±ű,}uÝßDR nVÓ*†pŹęŤŽĹľŘ|Ý(&BĄ űđa,o¦µ€&Ş'ŔůI“áăIŚ©.X ±6—7Ň}Ňz˝‰m¬äľ+_ë ·›[«Ő‰ĽéŔ|Ô8Đ+ąş9^ ä_Ý~qä…P¬uuvµ|Šť||˛˝řŻE5­é<ę)°śľť’Ö’ęÇ3U2¶Ú­„}6ň\…Ű®lkťÉĎĎ[(2ř{›4šE|qWÄ~i «(;©$)îmkŃuKŮRëŘŽ“ˇ­?«yÓš78ŐÚĂă›íf8|Ś“Ę—ÉŠaW´j´Ň4qůčüYŮň ţ|ěEKbOÍłaĚďX“M.ÖjXΠęeŞw¤k•U\–ŕ7Í$]ĎÜXíŚ IM‰ôß>˘7¤2›‘ú™šEJ˝!Ăax3ÜCqÍŠëŘ®Á—(c53ĐÍ‘ á‰i ü‚•Qű5ęYŤ|¶$…ňEOÜpŘ” čőtźa„Cőç\|ťU+©ŽCX~ź€JŻxň¤Ó–¬éŹěcíNEĚ0äuóUá{lÖZăí%űyß|cąÜyĹ_ÔEĄšę\TzĆEŹU”Öŕç]Ô„e–]v®¬›«5|Ť\Mމˇ7M•,ř¬˝/Ž&g´JËŇŁ&ĹF*±ź Φây)+¦˙Źů JŐâÄ Ł[ýćíMĆcVľÚ’÷uرµGÇë“YXިm«d÷ÖDuLŚ6‚ľĂť™¦f‰c)–Ě:ÖcbV¨Ş‚|LĂ›†7îb9ôÄ šĹ{=X$;ž(bŤ hL%lNYBvŚ6Tśń¬tăe´Ř!HŰS<ä"®Zv7›…ž¨ +YG¶ ôĄ{ĚçLťGIĄ°bÄ2ëř€HĺÇ fÖ±éĘZv„üŚXTĐ€ď©zg*şĽËT‡XXëlLě–iŇĹŤ­‰3ś–íă !¦ĘQBŕm0Űý]üČ;Ź[Qk$Şp¸Ąô;/ŕđ sÖš@ O=¬Žr4÷ŮZÂčl ĆDź3gm YěĄĆ.[š3—ý- ŕ*UÔ~(‰Â”Ąwü T"\l»ďÍ^ŽJqąpG/Ksćy7ˇţSęq'-fáďLć¤gća2g“Ž2WůF „ }lőb ç(«ĹfŹďqo.g3^÷3|Ů®5ŽMěÓ,2ĚuTâÝěľÍÝnę<%ŽĂŰ*oÇćŹńĹĽUs†1F6\b]«$—HĂm#ÖWO¬ëŔtśß1îż.RćëžÖÇoĆ ˛Ťt;v ŹG˘,ż×aH}Ő•a>Ěá“cE˙ĂéŃ]żJ%~vŻ•­Çř]ă:(>Ǧ…˛ÉłŃg2öF-p¤őś¬Sß>ß}¸§ľ3 !]UCüvjĂÝŹ›ú.R ’ěéŞ÷n±­ô8öŠĐĹEˇÖMÝĘT—+cg v[%ÄZöqAˇßÎä!žxůľ¬_ŚwĽŁß ŔęfŘí°ÍÔ}›Ç4žúźÓ &H٨¦ę6Úçň˛nőwqŞ)śŐ TŐVŐV€z ZÝ®ő¦HłZ/RŤÍ÷i§ŕW?ż¤+Ü,{uuEáyĹ^‰Ő~«ółĽLa«ý`°óuźYěE'Ž Ů©0GŤż[­@Đ\ÎÓµžhŢEiŚ×A˝m_ŇÁE(ܱ[ dÝ“›ß…âŕS—Ś7 ^VHą•˝b%ę´î(Îú` Ä0`·óöB®`gánţLVéĆëţ3ó(őeR*\›ß—(( Ř™d<;ÝËô(8ă¸fËrŔüĎ)'3Ěk•lŔ…µö†ěŔU-xŽîť—N«úÍ ŘQ~ţ7pcékĄzbÖ?N÷goADG×+ÇzćŠüôE}Ű«ń+?PÎmaYÖM?Ą7€ăŹXťí Ć‹KYŻň&0ŁĹš÷z}i®”–îyN#Ďä4ŔČÝ©[7ÂÔ"©Ń*Č­¶/BL&‡ ŘáĘč– ÖMżÄź}ůô•Cďô7D8źb]ËÓď˝, úř_#e†U€OĂ OśIýŰŢŕ¨wËąuđňČPX©—’‘@ś´ŕąÔŃX‰únĚÂL…‹ź/¬ăŔ˝jĺ ¨™zµŠůgzHÚĄY°_sŹEkŔR!]÷\Ź ť,>Z[‹ř˘âµÇČ;ęß1a÷Ł’ňćÄ\ůSó:H© ş Řw;.&g©|~’I’IW ”0^¤©,xFĆRů˙‘ 9ţ A’yąőŃ‘vł<‚X,F nŐÍ{7 ˙S\lß~ç˝JíÖ ŚpXôÓ źµĹSęůĹ1e;ŰŚ0X‹Ďąđ¦t™ňLŕ* ŻÚş‡ú9ß«ë ¸–¬v;Ĺs># žwÓ =ÍJ×ý#ą•ţłć±2Č17ţ ĺú‹…‚+ă~ě;X&ŹžňđŠ3öeđI÷#yó&.¦ŘŤęľÁŚʆŤ¸°žnX jv*îÂ1s"ß ÖBďŃxçÓ׋ĹÎ#–=Ý{M®4^Q˝“źďs€†zömđÖ=ţć#WÝr/ô—bńfç@·k1‘Á»ń,)–p3|f ­f·$Ú?+U¬$K?j>ę)1ůD)ˇs±Fź«îxZľ”px†a&ŁxÉa‡·¦‰ÄÎ=;¸ˇťGK)íLňç¶4ĹôE„żľř_c•endstream endobj 541 0 obj << /Filter /FlateDecode /Length 5437 >> stream xś­\K“7r–Żs˛>íZŃLJş\x áĐÁ’^9$Ĺ®bn¤%r8,±›Mu5_ţőÎLUH5$‡ŚŤ őtW‰|~ů˙Üu­Řuřżđß'Ç«nwwőç• owá?OŽ»ďo®ţý7Ń)řŞuť»›gWţ±“Şo…”;klë”ŮÝŻ5ż]ˡíD'›××]ŰeEçš—ÉçŰë˝Rşí¬hţ6¦ý~˝—=¬$LsÂgT놡ůŢě„l~xž<}žć ,…_ b臰‡q^š·~ůß›˙ "=ŹL;ŘÎtóôŞâú揫˝Öb·WđCßă׏šżą¤ g˘Ślžřťś‚ÝšÓů|›ţ=ż‚3!wTsz™Ľ˙49Č”2ç–­sž…\/•„íŕ“’˘Ăł,ßÎÓĺ\ó>ĐůG•JŚę€¨Žš-Ö·ŞW2jáǬó˘Ććhݡ47đ3¶Ů)ÔňäŃŻ6ř,DŰőťËwîů : Zž>ű‡śLČCy‰Q÷UxNěf°BD›ÜŘĎFýن™ý»W«ĘÝĺ,=H®Ź,V=8č˘Ńęç–}”Ę=ŠŞÔ˘_Wu@čÖ8µů«ęnţcÔćÍ#U•Éű |Ů +Ő"ÉE–ąţëAŰHî]]qPݵ¸Wő]«ŔučđL_%©‹'ţ.šŻlşú ÷bPŔí\MßJăhŐo¶TčĂbű˙˛Ş}Ć‘Ş+ŘĐo˛ˇzP·ö ÂĺĐK• /ÎGÍŰ,N‘zXÝ«†…¦*ç”hŤÖ÷[ąC ń¸ßmy #rwÇüj…˙‰Ž@úG8tkx2îČľÝwbđ_m¸uďëâ ˙©ş÷ÄQčś. ¨Â©(ÎiŽ@Bn%ő˛ąŹÇ1 €Á><”Ăë€LĆôą§…/ĚD˛[ţ¦vř(ToËŮx đŚkćËÍx~H•žÎÇń°â™uxj0ČVpçËő̸ßKë™·ţÖ’ÍíĄîZ­-ůŁA+čěßĂFZXL3^.#Ăp9 ×"YHťľď]ó߯“ź ÉzŃ04yxÜÇw`ü’Žś/çé÷BeügŻD˛±@ňFl@q,ĽîĄŔ:´qCf˙™)°ZˇîŤc<Ô˛Ž¨)Ć^Ó Qáľ…XC1×7ĎJűA}#([Ó7ZB źČRfT 40˘@ 2,•ŽĚ®úHÝ „™÷ňşkA“€ ;P §7„Ř}Aş#Ď8öDç´+őž¶…«śícZfÍŃj#SuRLÜc0ź¬řš6S@ŠÖiýfIĐ­Mf-Á¶P(€@ť†CžîöÁ+k|ĽňúE ޡզŮiĘ»ŰÔŃĚ+›ĘmQ޶ ţ§‡Ą¬W)㉅_Á „m›óťOż'"ż¸W‘ďÉuAA–"Ͳ×ă«ä©ó=Grľ ÓŔĐ—čo;ÂĎďâ'˘á˙´xÎĄ9l üăÓRBŠćMŕqERŚ/»řz  |ýÝsz·ŞąěçK `Jú–˛¦™ßŹL –OůVçᾇŤYřŕLĂĘe˝Gj„é›H€Ę¬ä-}í¤â_gáü¤›źŻnţ <ćĄ ,ŞNb+řŔ ó«:*˙S‚C¦ ŇŚ±ä :Ąµ”»C¬vpD2§ĂűVTszТ4”ÍÍúŰěŁ2ĆbŚ]żž.D"BÓž»·ńâ@c{B˘ŘÖ¤Vwš , UlF ä¤^­Řc<ŁU8H‚€G&3.ÁóôéźcDj@™ŽĽ¨SB)TOÉͦ˘KÁn8÷Nço7"}ďÖ y^Ă 6ZV ď,NNÔ®ě ¤‹É“­•FŹŮsÍoďÚř“+`ÚOkŽíް€Á~JŐ°ĐUŕc4Ȩ,đ(Ťă‹ţ«’×Dčôű1V,µXÖ†ßQfĆUÖ?aß ŻŇĽ¬ Ľ8ľ× ŃkÝf1NQ.C&xJu*·C˙ş‘X^řçđ¸î”ƕ۰5hÂď¤,0ýö´‘Y>Ĺdć3rÄ·Q#hyÇů.5Óe#p }ÄH ĺM|ĐÜŔ˝Jđ–Ď#G€†…ź9qórDvč)đSŘ´ňÂśÄy;D_BŔ§54řŤ IţWľĘâ0LtѤ-˛&älYŘ@xŚŇťcSIň`á±cE_Š-8Ç­¶ xš(żŇ˝$8ˇ_KąŰ+ŠAÂÇGNŰt¶Z~:ľ:Üo_^+J˘ěÂ…=¸> 0VÓŢżx~ôŞ^ýź‘ÍŹ3Q"€đ7Óńž%~ř9,ArŘ9ü˘¨:NŕŇ(ŁZŮő1<ť˝ćkmúĄ˘ă˙ź_ŻĆÂ@Ş˝D7â~B5ę]9¬ô$FŮZddFOĄÂ´AHb)ŻjlâJ/Iů5IöĎ“ôc<Ľ)2w°ĚÇ™J܆ÍŔłrx1žëqŰŻ‰ß Ë•»á ‡ăáýeĘ’…xÜ,/·íĂç9a1¨§ˇ÷t^ë÷›eţóř4­Óän•|đ¨™őJ&ŞČ˙˙Ť#yZ‚!U’”˛nŐç_nYáÝbۡtA”`jŹEžéĹâ¸íN5°` hˇđs«k1€ ó>X˛9Ť)ÖťśXKUĚ˘Ź żęhT"s›Ş´€őĹM§vfQ4žłÄA´Fš=ťyĚ=“đőéś)jLáňÔ›\cŤŃ“¤Űuä6ý~!‚†UßnfYą2ĄŘeˇĽĐ8üTö´ eŰ1 V ]š”ź^&ă(ű5Ż–BĐŇY+]ÚPr™ćëR«ú}]±y˙ůMe@¦,Ů”OúÓéÖc|}Á’ăbM‡cĂ=©"Ó‰żddµ |Ç;tň:áý9SĎŰđ“ý„•˙Ţ1]5ŻŁµÉ3K¤Ě9ĐÂý)[)KęiCVkSf)ţíÂ×ăăÎ}¤J­î:7]×üëÖďXAő°řË›}%ŻO{Ž• N™×űŘa€ń1ĹçÇŐ|ĚóŐ­.•Ü!6Ř\Í=Ť‡}*f1yë! š×Rđź¬v2OűTĽâRYcö1Ŕ˘  ś–Xá6Ť/¨Pu=&#ee0TˇĘX ˙•bZ<ÉĐQă‹r;2ÝÓaŐ©1]¨áŠÝ°QjćPçnę¨#W´ě…o)M™d)Wľî«Ův>ţ8̧i¬]r(¬©Đ@ź+őBë(Mřl…K¸ţSb­KBŢÓ‰´{ľR¬¶9ü>TăÂşU]e·Ř)xëQŚ^ÂdČŠűßó‚…˙…ĺáب÷uÁNfĹ\ˇh3/éţax ]±VžAR$N„χçuľšŁŽš;,Š÷šÇ#,řî#Ä/ 1Mo€Ăié±˝ĄŚ·¨Ž¶„_…Ę Ü1ç.M«l­ü ň͢(Ă*y§PRnK%ÎŰ®¸¨éľ?°ÚbĄ‡@ÚŻ—ôĐżĽ•ú?ËôpčČĐÁb—Šx™’ JĘÇKDE%Ť^˝ $<©Wůáç_ć°5„9»ÁYĽ™Î—JAžĽ™ĺŃźć<(O˛@U­Äöî5|L ÂmĚWźă{*íŢŽyńT)CĺŢŕń(x ™Ă‚KpsnÇqﶲ¤RĂóôtąéjĺ•.¨2„żôyőťg"—{3Ú÷çYoĆOä|ZwI;č#‹ÓaşŚˇĚĚśŁ8çéčmߢµvRá ¦A¬fĆ!;ő“|˝˙—SÚ*šŽŻďs:G=3˛ÖŇ ˇý,ě~Ŕł¤"‚…TXäy÷ŞîőÎY{.‹•Ţ^ÚôŢj°n”€č|:ĺ;aáF€ŃÓöë‘o}ď´!Ĺ`ć0Ů),;gíŽjĂ˙ćzP<ś†E=Pež.ĹŢĽŐŹ@EJźfŽQrĆdŽ›ăuěHGµCę ŕç<9Ľőßc¤áyâ×ÜjqpUZ¬ëD¦ë7¤)ň„ţ‚č—]ŹIgŁfć=âvŐşťTdŻôŽu;ꉬ/Đe ĺ11s‰1|ţĺŁĐ‚Ě‹µ•š%4/c-f1/™˘U6Ř™ËxGĘ÷ăÍŐ?®üu)ł;o_“ʦeĂ-)Aíał“Úö€·¤š˙Ä)аě'Ż ÂWş^9ę»8ěűŤÚ%[v-Jrw™ćXyO›Iľ<ŻŠíáŤ6–´ąîeś‘Ţů|™ÁA[pśÇsű¬––Ö)űT’4Š}`ZäÇ×?ď¤ÚXşĂ—®+;!?CA5&ŻZpRŻ[?8$a/ś}4Fú¦™łô0ęÝů˘¦ÇßĎצâA×! >_¦Űl /ńă(6^žß†[AŠ@_wŞˇĽëR¬đ8ö-(Ä’Uˇâ?{ýňI¬?aĚÔÍ3*¸ĐVŕuŢ]n_>˝Ą5+Ó7±ÉH~SŕŘÍüś|‹ç2¨Üßy`Ľ\†úµC˛úQZĄË ןăŢčÎ%gE‘Y·g&ľ€Łî±ŔdŘÎß3h‡zýź,ˇű ÁČnhkľ´h$„DĐô/(IiE_ŠĆu4Ü9óbF¬č„*K^ÎzęeŠ­†ÇYoýÁ ĺwĘÁ¶irć勥~ąé±+/§ó%=&­%äG´ëôN öŐqĽĂŃôŮ7§{&=Vć %€§÷]ŮHˇŚMFÄ…Q$—ý’Óx(:‰>»‹Nˇ]jçn©9©Ţ·=:J+iűוIć+·žÂdšQŚ3Ťdă/˝äI0úŘżNe ˇkÓÎą§~GüDĽRů™ŘB÷­´z'AW¬Ţ0?Ă*±ffĄK×óf'.)—[F\ÓŞÂfÝp\ĆC5+o“SöL¨düÄ,Óđqč1/Ňl°®$®ôĂ˝]ĆÜń‚ ;âť ń8ç‰ád=U–ţůš*BÚŐ/–f5řśSŃCXŔÁ)Í..SPË\Wi%ç‡héŁÚ2kůEúë~ʇ–‹ÉłÁByS‚V5%ĺ ¸gĄŰS……ÉňËě Ż9¤~–°JJ§ď6tó|·ż›Ífd9rwŠ­8›ŢŚ8xžw8r]Ô|‡J|śRTT?ˇßm\_4“Ôă”ŮhAł;ĚĹŐz}(Ż|Ń&iUHh5ôqĽś!öw2hüľś÷‹«O.Á±ČËKVţp‰čéJý4Ż”Ďţ¦ĎŞ‚ô«Męn§yZ"żČCĎô÷¤·-ĽIđ„—š~Ą=© Cü~ęË$N—•ţU<ĽÄ‡Ž¨2ăÇůâH%ŹN ’1#ĽJP9¦/UBůh\kămtť·@VDőŕą­|ů0Ä[ąËŹţĘ‘‰‡Ü‰;Źš_""’˛ŻóMwŰ~)Ľě슊´ýíBâëóÜ;G÷ţňűtT«šÜ‘ß2Ě \RwHtµ‰A·ĐT·=•If^)Ą~˛ń…˙Ń_«ÝŢűç±{ĂşjĘZşix‰ÖŻťÂÚÇĽňa kýÍŰĺ!€w™Q¸ĽNő,i(ůŽ%ťă ُăOy¨ŕ·€pH#ž)ąSág‚hΓk͸,ŁĂĺ6\FÉ*ţ°ŘW§â×q¬wq>ăÉD1Oß[›Ś0dłâcy}x‰;(ĹÚ˝!śsémúŐw— ě§e/0Ł9iµ|Ć‘1~בî§źţ9Ü‘vQüC>·1—ś«Q}Ťĺź˝±"F’$xhŃÔĂXéĘ25H Ľi˛·ÓâX¶H!‘˝ÁžÖń60ĄďůMoĘÁ°ÚU1^Ôś§p%(âó„j,=_U6µ,·ď©óŞúÁŰ–NçEKȵăŔĽA î–‘&é’«•T¬ÖşZßx­ř\LeČ™cĽĽÖaűĐ S §MčUłÚ@XZű%« Z”Ěv—6üs}Ę4ţ;4)ŢI¬Ńó¦~“—{˙˝‰ĐL8ýŽő·>> stream xśÍ\IŻ$ÇqěŰ¶ŻŚľąZP—*×Ę$ˇMČR†Čgř04ŕšy3ÍâtO»z†üŰ™Yť‘•ő.†0‡é®ÎĘ5–/ľ|ßmşVl:ü˙qĽé6ű›ďn=ÝÄ˙^7˙v{óŰ/ť€'­ďĽŘÜľş Ż <íMßze6·Ç›FČíí·ĐXtеîl+¤‡7nďnž5źľŰvmgT/:ß·ŢwJ7ůÓĂp߇_z߼Üî”Ňm§uóůř&kö­÷şůâ´ÝI×vÂúć.kďâ'śuÍaÂTŰu®ů~Ľ|ľy«ř\çżo˙H 2lAÖ´ť ëiľ\YskťLK~›ő>Ľ …iś˙°cŮNK=ŹŐçiŃJ!Eęét« b»1¶ˇ~V;%aĹNmvĘ´ÎÚĐĎt9‡ ײďtó",Ů+čąąäGq~™˙t[ć¸N[¦ťôe«)˙ét¸Ëľá x ' š!}˛ů~‹‡×)SŘ!5±YsŃäË>Ë]Sô‚÷őKöíĽâµµ2ĎI2Ń9ĄÇžŹwąÎc(;Íľ\â<ś^H˝nűćŔfEAZ+űf8Ź—Y>¤]sz»Ő¶Ţm/™´ťŮóĺŤ|¶§óo˘řÓ1IV­Ń^nn?żiţqű/ŘŔé ̬ďčwÓjŃ żŮ‰Ö*ă5)ĹřmĐŠÂlŕÇÎm˛–ĎšáM&wQŁQpz``‚třör8żŚJlଧSŇhŰěße gčöŻł 6ŠmB±#q@h5ŹŇ7ůÎÔO×Űć}Rˇš4-řˇźňeż ô®^,'Ś’őr8íw‡ńuŔ“<ŚßpąDÁđťA.¶ËJ%›©Ą“Ü Ű*á6řżłZ„íľÍuF‘,k/J ľśGnFX5öF’J­Â¶Ő:Ôňö!.ěCčXsŃ…#<Ć×@Xś+ŽńĽ¨0) ®są´ÉN·Śi0ÓŻ˘™ć Âk@ťb›Šm ů†íí ůţ6µd#ęV9%sńnö5=p­ŢĎŢáy8P[,föqĂťĺĆ(˙˛ ę6kÝ0q“0LËq4·qÂĎfaůë‡ËufÁ§Ň7éç¤7ŠĚ=ób˝ź_e?äó)&WµP; gŕĐVÁ™ŕÎ˙O:"ËŹČhť¶ľůş‰Ť|ÇI-}_HÔ¶ş·ŢÄ6ź¬ôă`¬4ŘGŐ ÁĚm?ŹőIu,ěÇui¬Ő~LŰ+°ŹI¦ľŢ‚msů»Ý-`š$÷˘j¬M+ˇÇÔá÷k)?®úXľ˝W꡶ţ'ÔC‰xě!Eômď°A\cđ-¤¶WźVŰ‘Z†ĎŤzh^B„źA+iaš‰µűîÝňTÂH«Ž˝ßnw°EäX?{×%]YŔŕÁŐţtŮŻGúµ.Ü:sK~™˘Cďf”‹zŠw=˝×kâď·Ć ĄŔ±ňµ Á^W8ÜŐWOąßŕZŐ$tPu<˙ŮHDĎ  #Z´qv±rT1p@#7ń…ćëÜ}“˝?ŢÇ3 ß÷iH}?.ÍAŮG‰>ÄóóěŤ[ÄĆ3؇i/Ź“ŕSżvśÔła=Ç EÁú__c¨p"p Ú4—3¶Aµ€hěu@ 3đřüćö×Ďš˙(ˇBîĚwŞC¸?ŠNhuŕRő’`»ÄŮĽIîĺdă:Ů)t†»Cp;çúéç_Ä_Đq}Ű˝ÍOî <â9𹎥Y8çe-V,¬증-Űß”ősŕ22 ?˝c&ÎŰjŇ#Ü3S¤‚q3†Űpî!ŁX |jF1ĹDÉ(†Qˇ:AQ á+ÍĆz†űĎj'Ťk•H¬ź™éÜ˙żÇRNŘŮc!FS¶Ł™™¸<¨z•źÂ™ÁúEpo<_ĎÉîhčőC­R}éąqOí ;ą›+4÷7ŘiOč“O:ÎĚYn6ţ20?ĂŤEŠg9&“şCtĎí‹ý꫏?~{:śk›m%Ëź1UŤÇQ€tŹCŰbƢÄléSđ`¸°F}«Zí¦‘gTđ›ă‚÷¬9˝Í(šËxL›7źâľr2h­lRD‰¬;ęQFŠ:‚ĐöDŁAÔ|wu ąF•Č$iCŁNm1rł é:­hł˙·ŞH0+ḉťl]ďĽ`Ą]©QÎqŤ+¸ş·R¦Qż«N@Öŕ0ÝýăBQ·Äę˝*5ů“ę A•iµůŞ˘-*ŤŽ|ě==‚`Ô‘ó䪖Ë>ÄMŐH °€–桝\źžăÓŕL]Ţňő¤ŹO¶.8µ5­źu'>cŢt5ťm>Ţî„%–'|DLËž~R×Ü@ć#EBő¦. 7ÔŮĹ–ÔđŹ)^•¬ˇęő®ţ˘¶Źâě^qcE¬DO4Hďç«UWűđ"ÍCKścÂ{Dł22ŹöŃüSWNýŘóÉ|/ x™:0`˙…!Ó”ÎX2@„§ }–ąéőĚř%X*ôÓJ‚EőíśžYˇň8\NšÓWŇ’6ăĘ #Ó  :`,âť| >C?c,X ŚN>]÷ó®@P¬wô"„r˛_'.#1®¶ť€ ž´Î$Ŕ©fĎđú2ą‘ Đp‡ŰQ8ĚF9ś&ÖÉ9RÎh|dÂ^_ŹA żcÔ~€ THd+O47řÎ5çwMÎh‚x_I)u$? ëBtN;çdłąśXĚBĂ-ěd©5i”52nAűĐ´ĺTŢ`,¸1Šôp>ř˛H nvăaĽ |ˇS:‡žżĎE`V.·KkźÓfşZęD{©Lł ôAÂÂ>¸ZjÎť÷•Ŕ‡m@%ÔiŁ&ŞŰţť‘€ď2N¦żş çËřMí‰${?Ţ˝śŞfŐAş™ěř÷­ĂĚt^´pÄm\‚†Jײô¦3‚S- ¬&Ýב´ oÂ$ůűŰ›?ß„ä˝Ůśźš´błŃBXmCâ­ěőÉÝy@ ë/ĐĎZ„­4k´[Śg¦HËu¦ž¦S|ÍËŔě†Ý.Śúx‡×ÔŇŹP'đe1Ě6.¦MTZ‚ľ§L`ş`©B¤Ű.-,Ą TÚ|)Ö–eĎżNf '§Öěe•מóč~µä#*ᎀe0ź‡đrbĆa8ĚE\«sŠ…âď{Äk3ü$űýCť&u ęśŘ› ż¨Ô¨_…Ї8KŔ¸ńťkŤ(-Tp}ż¤EŢi]Ő·|)ćü¨üĄ]&S­3ý÷uV_Y}í˛–ĎXŮĚSý_Hńô±@]BÓĹ©%„Â2ÖČěFv™˛Pß!¨’ďËXś6÷‹±˝h¦·ˇą–Üb0)µě(–Ô‘ ŽBˇ˝–ĺ 8ß«ô®(j·^ÇG¸۬–Ű\]ţ{E‹ĂçzH;iźŚâÜ ł7‡äű:Š&Äľs{ń@ř\©– gáRňT^MŐóđ!‘$´VřśŰâ4crŹ^Qt¨"XÍcbłU^E ÜCč~^;v¸ô(ôÜđ*»ÓóRL0Ş€–b"BX0ĽY‘€ßžćť5™ůah€fR™ť$l611.Řqˇą\·~ŢSé>ć,8›ŐŮ$8WÉňvý>Ge:J˝=oń“§ç‡—Ç{b°ľOýŐ#iŠ›esŚnÖ€d €,ŠŠm×2ä˘đEŰn{iОŮ)ŽVD ~>sćCěł“\bÓ.Ű$°D¶t8ďfŞĎő<ŠŠÁ ±ŐbŞ»ŘÄcH­ W{ 1µ!:-öbęLôžvÝ.SĂ4Ş1OB­đ’ˇ"&¶IŕgŮyŔĆOd|ô¶­×;† ÍUR×5VŞv°á–ŮLę+X©‘* âqćűmá©îeáőeBáR«Ć6Ö<Ís .5’r˙™|±Š|ŽcĘůGeëĚjBtť-\0W8ă^/2řxâ ŻG¨š?}?cťv^č’BTřUŃŻk=<˘ŔSŇ ö<2颬hve1’Ż{µ ‡ŘJÁfZĹM˝˙nĄşŤ˛ďŔ¦žÇżÄőˇK/lM„ÂzÔ]éUł'Ĺ; ݧ´Í}Ą>„–VŔíX'¤,ŽŘĚÄ9ƆRa$™Ţ#)ĆĎóî¨y´spçFÇ:q͡ ĘT3-ŚBfDbh„š­d-4 Ć=ö`KEL˘/[˛ dŰ»"ä}VĄÔ쮾ɢď’D Ň⦑}»‹É8Ł€s•G˛8pLEf#ĹÎěÍé8çhLsŞÝź‰Út$Ă‹‡B•C ˛ŽD„ĚálV¦¬hŮ „ěócťPü«N(7Ź! ?=˝y˙ňĽ 5­˝|ó‚ľxMqxm˘$ć$‰¦”`~ď­ńi„ĎÎóń„Řóí#0Öś˙ ę)Ťźw/.,Rř© 4ĎÁËeqăßFJ¬r(UŃ5s”Ďu†?¨hζZu~ e…lŻ@Ť@Jt•ä.-Ź×˛ť1Ďě„˝],Őc8_E=ŇýT p­Ť#Ä+ŰňŠ5-Ó;%’ŤĄIËP Č „.Ňîc$,¨Y¤t´ ×â$•L¬š±ý\¨3NŠŞe µşŔ¨U\wFšČÄ_­˙ń˝Ń@ŤÁGóú7Áň«%ĂČÂĺđă$şš©2™jĄÉ”Ü&őµ}#T2Şś!,Ž%ŹrÉŽ†Żű$öž[Ű”3ʤщt‹<›SL©Ć\IÚŞřá&cő€¶×ˇ`'WnpgrXV“«‡őľÂi Ś'¦şQtĺPú†ß­eĘéMeLý$ËCÜo4–*Od§éw•—ŘKö´Â~éáe2L–¦8§ÎTčî.ŘiĆUgN¦!ńü‘ňL[éL¶­ÔďfŇrś˙ŘE´ä˝3ë„ÔşXϡÂJJ$ŢP.8»#“ô‚$O÷ĨĽ> stream xśµ[K“ܶľď_HS{1'Ąˇ‰7—vĘ.'ĺRĘňćäÍÚŮ#ÎrER–ĺ_źnzľŢăeĄHńCz˝?P ”(:ĂJŁuń­{¬-ţqŤî›aRřB-µ_C“†­/˙˝řlH“x?T‹R+ {ş8ž„í/ţ‡cx<ćŔ9Ů ”Ň;?,!E>:Jż߼ŽřşÖm–kjLĽS űâ´¸rĚ Ýýž*řEXń«•eEyqŹčoWvçI(…ä´‚›Đ7©ŕúÖ„ˇ´4\—Ĺ©ţ­995J“¨ńä‡ZÔ«{s?ÝŢPŬ¸íëcô©ÉXÇUaĹxą÷Ü‚žß»}3QÔ§TńdźÝčGW¬ę±ţşź©ş%$•’Ş"^ĽÜxĄ,ű±)5CŘ/N uĽč°Gë!¤dŤ°RpCťŞÇ»H·ő6 VatúáÚ˝ĺu{Ű"âŻ'üJ`O&ŐW˶=n¸Ő~ŃŠč"5‰–Ňm»!0$U±iSÉň·wžĹŘ…AQžw"‹a…t1…ş˙0łđŕĽ\h^tŤłuZ ܢ»?š‘ ľ9ěOŕýöĐ6oěôŠŃ”űvoeO@ýÍ~0‚1$,­ĐÂ}D牅Xý˘ZµŢ]üxvń·_Š›HAKDsďŻËö^î=ä¤p|PĹv`v%QÜQQ­" )UQ~^płÂAóŹa¸‰X‹ ´e˙D0šlĹďŐ …iÇO ĺ"łŞ ŔŞ(~ČöŢÔsZŁń9źÇüMD3ŘBŃě­‚EÝŰ·’Âăm"©ş÷TŔ/‹¦Lö_ľ€ŹŤRZŔ%€tѦ°2¸OEwżÂş$©97ąQ\ŁJ„D•ŔR]ô „wŰ4•…Őßc*ič.÷ŽT[ĚZ‚#nW‹ÇÁŃí 4ńY'¤ ČĐťkŠÄQź^¸źĚá5Ńäŕ0™nÝ_űg«ŻłŘđ®Ő¦ 7oߥ8=/Đ~đD+ťD“cý/§€ţÔܧúGŕ0‡ôB»żělŐ7ł.T3‹µď1‚Ŕ/`É—®«q%®‹řŽJIőźťlÄ.$łŔŃ9×Jl dÍż ä‰B°g­9¶)™@QTITŤÜÚXŐŶ3b˛‚ćž'+8RQŚ(VHܬЄŞ9  ȉLgmOraÄŠÄĺč–3<7Q2˛•_ĹIĘč20äP‰÷ ž*¸Ők·¬ETee´Éٶ ěÇ,t[Cu™Ś‘O@=Rôľ] ŐÉKR ąm íŕ˘*‘Ą­†<ţźÖĄ9Pé#~ŽQ0g‘-`ŇąçŠEAeÁŮ8{,§Y´G€çGdˇXdoa›r,`8çĚíŮq­‹—Ż<ýJ¤ęQÝW‹‰ő|ůJ™8ł rxâx×'=€¤6l÷k=¦KŠi 'Đ'[ń0ĘŔ:ş~Ľb!»[ÝT‹I4lŰno­2¦÷iäqéăUÉ´ĚRĐ <­ C}›*˙ď«5MHé~Äňî‹' ™§úEÁ!ëűÔ~­ APIť±…2üW»SD„Ą?§¶I~l Ńę“mÓ® ÉSí¦zÎÇçVO:fbWgEÇřśŇńą•ăsţçŐÄNbŮ ë :+2®˛îĂF–KéE±x,C 8śş—7iÓ´I Ojőią‚_ţ4ěšôi7Y ăzS>La?5ž¬|{x$v§ę++ATq·ŞÇcÚ·yŘÓLgťíĎŻdI;ŞNűN]”Ŕp–çIď1Ć•@Î’˛#F—D&EqJđ 3¬Í łg+?-+ß­öĽd Ó+=¨Ó!{ŰŘdZ Ö&ŽS%e-9ť¸ŮX†V%ŘŕT´}ÚÉ—ĎŔ—޸ŕĎłęĚfĺ`Ďů` iˇTŻb‹Rm*!ęţ6 ęIő‹ MZ*šřx;MŰď ˘Ëâ¦ëO`aK [öŞb¸ŞŰëé·,î;ČxęÖľáÖŽő8O Ĺűëćön˘ĂX÷cDbx÷z¸†Čđ*™0YĺyěľÇ&_űy„Żţóť#SÜ×e}…ŇËŔvŻşű±Ż‡yixwęŔögŢ&b,"fżŘÉ] ÎţőüŘ6ĂxiűŹ+‘Ŕy]X/âöę˛8o»Űf<Źř9č»×Ń+Đ×ůŚ‚˙“aŮ+;¬~wug§ZąQ{í"Űů7}}¬˙îŹőď3=Kîp[źNőąí˘Śwýőp×µÇy™HB¸›öú·ću{íWĹ źN§ë±o®Î#3™ßŇóh…óë·ďš#ČŻľĂÚ–Ą˛,/÷«} °%nRëüyĂő}K%omošjéú:}rś™ö{}i ľ<ř@Ë6ůěEĐ|ăŽkŚďută°lČ;xÉĆ Żüm{x“”‡<ČßßűÉb‘î¬"ťŕ%¶ýŇ­ŕŻPzj.e¬f]Fľ*%X†'» ¤ Í-úł(šÖęE­_oÁQ á¤4±Zü‘._V¤űŮÔ¨<ˇw HąhĺA ¬J2Ýp Ç@Ç-›Ă¬é«U]¤K®C4]j&ÁnDJ ŤJRᇠȮ žÎׯ¶é¨×::KBK?ÄÁř%le2úIĆFJŽ÷ÎÜ ĘŻ-"DÉ ťnžąx‰í5šî:]zęŽnη˝[áâ(±l[RP LŢżŕßyżĄĹ}ąęř8hE—m8ú¦%}'ČęNxjj‰qŻ•ľĹ’ŹZéUMG˛S¶yĚćŐšx ± ‰rÍxÖ KÂ^ÂÉš& «Ve…Ń™Y„–îSfˇu5™…KAVmňLĂ3Ł0Üžú«WËž´yŕ=-‰ÇBAs‘Řä[¬6 [ž,ęÝłx¸‰ĽŘ‡žGr®¶ű@‹äţ„e$ĂP?†¨ěňMEF?¨bé±{~|f÷I‹ˇŮŢ@IŻĚvĄĆ௾ńJ¬u|±Öl^e K@:µRćşA®;cđŕ;żC“†4Ë«¬ü— •DŹMĺyĘĎmÜ0ťŐň±N.¤˘"+ż $Hkp6_îĹŽp÷ĽÓ>O”żŇľÁ}ş}ĄşôŕÄ(Hşý°·l ĆF:ˇöVeÚ: ś*ţXŰoŃ„C}wqöÓ™»-výö˝ë,kń×®™¶=޶{Ž×®ˇ^¶]eOřc)ňŠ@Â"cŠŹŞĎŰ[3ţéçđĎ Ř®TĘrć×Ďf˛}łňa=‘ş`…S¨Ç nµN‡Ś—łĚÉďŰ+†(U÷Ś7 â“ôüʬ ŮƆl}kł_fw4§»łHźiÇgr?â60b˛»qłpň/ÂţşTˇ%Ń*äd¶J]ŹtB‘) Ą(Äa(Ití~”Ě\ËŢ/!®ĂŮ­ň$%äA•Ź'Ĺ÷ßüřówĎŕÉ^V°‚‘I‚Ô‡ŰéÉTfÁ–Üę­’© ’Çؤá·HÍŤ*ĺ˘ŇĹóTĹl¨›@“oßÍ+¦#w™d `»zţă…ëű_›~/,ŹŘ¨?]ߏ«%ŞĐx25µĘ0ńšÖIÉ©˘®Gň¨ †ÍŔĹR=p?¬¨‘ĄäÖŕUJx´"ŐgŔ#öŽHBň«µ”R•0tĘ˙]÷fÝUTn¦7Cćă}ěč A ćăzč>én–ý»$Y E…Ů®Ś7RŢŘ»f«ÝNĄťűNç°yý{5ŚVö%…x‰‰Mły^”üÁĘŠAÎç HźŰ¦Ż{¦fůGŕŢX–Żş˛Ď¤7;ţ¸16zvĘ|@,KŽsÖAšUR>őC°?·O›•šŕi*Ŕy$yJ °E2lY\^·µš&»‰ůĆË|ęÝYgüŁĘkÂE©B µ˙Ö;đ¦ä`id˙„BuŮ w·{m$´çËňéÄŔÎI­0;iKî¶Óq>ţuNżr`Í`ŤľĎŇ“}?÷áźDu’ľDućţTěQT·7ó [ůcŃVŚ˘;ŁK]aÉnŃť¸C„6$ĄXNô~:ű?®YŮ3endstream endobj 544 0 obj << /Filter /FlateDecode /Length 2606 >> stream xśµYKŹÇö™Č!ró…Çf,vúý-¶ň° %°^mpÉŮÝ‘‡™3ë•Aż=ŐŻ™îŮáJ‚ěagšŐU]ŻŻŞz~^L—ÄýĹ˙»Ă‚,Ż?/¨_]Ć»Ăň›ÍâĎ/(á°„-±tąąZ„=tɸ”±Ą–[.—›Ăâ%z±bJş]L$×”XtĚž«Őšs‰¦čŰmNtąZ3ś¨D­ŁáŘľ Ź„2ôě&Ł>Ő]¬Ü‚ˇF™(CZ›şsżügó=(dh®3m@§Í~]m^ gŃZş\s TĘѦOWkÉ’Ł«>¶¶ ě-)Řk,8Çç‹Íź^˘«öt¸m¶ŹÇͧm_ŻÝ»Ä„(ô>>‚Ć}ux ­D_¤8ÚµÇ~»ë˝@ʱ–%pú¸m2ďsjG˛ßöîŚX č®>Vţ7‰5SV.×pfbMĐł©Ź?­Ö”H‚ú›SŐÝ´Í>ń϶—Ýx¦˝~^˙4ŞňőwĎ@ %`ŠŽu_ťŇo ¶ođői;đN©=ţvĐI&Ť€kÝűŤčŞ©ŢÔ—Mĺ$ŕđiĎR;ůhm˙ â©%X°ń]] r±ŠĘP¬DŹŁ|MőˇţëY[tL(fBŤŻ.nČř*°Rd.K2s…pľŠĘ1Vŕ]RVĽ+]ţN$]Í d<ł:‰Ú¬ ŕ*ŔKJTbW×G”#đK@9aÁR1ô:ż`ÄXˇjOđ‹µB˘öu{̶o›¸LÂ=4 Ťö«üąKX«Ń¶ërl>äҽВˇ«ě8JÔ84ͨÔ/+)öö2ŁnJägB•˙WQP©¨ )%CBýĺjDÍԡبźżŘŚöĂé=}vSGS¬sĆC®~ulŹŐSWżŮÄlăѨqÜć1h6ÄG5×n 9 ˘G“pLµĎuŹţĚ•C‘KÖ:OxCˇ 6ă=©KĄtÎŽBÎf{ yúÖŚ0‰‰yÖËŢÖe݆ č2â•I&GÁ*¬$–F˛Ř·Ú_Ë|ëRžŇ‘€éŮË–Ś[X¤:Üqń)Xg=Ű\H‰©U4JŹ<'_0¬Áć‘°oMÉŚ2ĚÉĐ‚ĄÄ9ÇŚ şçlÎZ š]5.nÝ­$8±µŻëX3ďYJŻ"öÓ,Ç>ŃrÝn 88ç7WŮ4˙mě¶ÄżLň6…ÓD P ú\®>q‹Ţ&W¨(,­MNëűĘŠNęUčí ŔřŢÇ»bĽ tŻ\FőP“¬Ą…»ç KąHŰî÷tÎŚyCD§®€AWIŤ«­¨żW©‚ľP›j¨ĐˇĘ–~»+«ĘoUhę|ZiCą¶Ó:řpęń>M=ÖaĽGâš®ÎĚ}ßĹ Öš°W•r·;Ż7 ÝD~\¤p eÂÇ€×r ¦•#.J¨"iü7`Jo#9htŰNš[Â}G㚌}Ő4ľdńĐŚw^}(âŚ!ăń¨éź‡CßAŕKâđ:‹°Ä%ý™~J9žĘ%g»ň!Šßąuěę~7ĄŚžŇ.śl,Áhţxn 44Ţ´đl%=»˝ŮN‡OçS©Ásq3”Nhz”3™ší|+U4`0Óžęśđö~ŰĺCŕő^yYl/Ž”:DkĐĚ4ś03đFkŕ-mH?.•7ŻÇtmVÔaźTľűr$ĐuBZöíém4ŕÄC­^Śż.ůM§NO–‡śkŘăĎZ(»ŰĚ-n@áÚÝđ˘ČúfÔ­CČĺ ÝvDL®Ô ĚĆÖX<05ĂĚi? ţ䆵»…&śüţ-,3Ła ĚË=Ü’CÔ4Ĺĺsšt\iÂgÖŤ ±Uŕčoőő´»(fŹá ­\žÎ™ťŘ6}µ e¬H   >ŇC_zçůqp%rv÷®Ţ¦MP~IęĂčR4ôéJň¤> ć ßqcŘďŻ]F‘ŹWł—űkĆÜŘ€ânůŮě—Ún·/zżZgźĐšĂEvń.+ŢŹ—Äşx4~J ·zĂG«'#í„ߣ‘Č}•Měů¸ĹʆUúXĹąfÝíá°=˝˝*Ć Ţĺ?.ţŽH)endstream endobj 545 0 obj << /Filter /FlateDecode /Length 15643 >> stream xśµ}Mł]Éqś×Xzk/^h㋸:ýÝ=¶a)ôĹĐF$"ގŹ ę૴ŃowUfÖąç\ĽŠ–,†bpÝ}úłşş:;ńÝÝvIw›˙O˙ýćÝłíîÍłďž% wúĎ7ďîţěĺł?ůEÚŠA—µ­t÷ňŰgĚ“îré—”óÝhă˛J»{ůîŮ×÷żxžçeK[ľ˙ţůvŮZi[÷ď~ýüE)ő˛Ťt˙×ÇDż~ţ"w+)µűž¦\Öś÷Ć?n)ß˙ůo©?ľýôŮŠr`¦Ů§ľŃVµLź~ěoţáĺĎ­A3Ű“g»Ě1­M/_=»ĎĺůËß>ű‹—ĎţΖ»7ź¬_ršéŇó]++]Şĺî˝_ƸKÓú`¶»ŹŻďţţîýłz©yĄ|÷őŃĎí˙kÝúWĎr®ĺRĘ]«˝\¬żŢ9Rí“BćÝŁ#ýR;‘˛Lţl‰?ץ©6€´d˝H¤3KË•1™©ŐKŞB”©]†ŠYü˛ _F1–Vąće°ę:Đ·K©Děż@Ňe*ŤUHńž˘úőĆźúŐ/Me¨r}ŞţŐFťČşt”ŃlŔ€Ś¤´Kb9ĂÚ8‰¨.ŁŞ-ę2šHc#Ǹ”Fd(ÍT š˙בąŮř9Ňăë6ę«Ń×§µr)JcuťDôőŮ1Wé¬áś—¤r&{t.3 ‹ilfeä¶ŞdŻ+Ěń]Ö˙B*볬ö‹Hg}–ý]!˘o­yYČ…f–m» .ó’+|Ů ‘šŘŚŇë–áó­ô÷Vr¬KŇg–§RQŹ’ŇEIz'/‹Ŕ,*ë>6ź@Úe "J2P{űÝXű´.[%2řĺĽů 4ÄÖŰ“łOm ą)%©ĘÔĽ;€ V7w6Ŕ&Ü&d^J"Ĺ,_ţ@‘bŤśD»¦d_i†ź(@Ş/j E¦Î*—áSȲ|bbÓ@Ý.XbđŰő o›ĺ(ĄůbË&©ě@ł<łB¦Ű C¬V*gůBëTĚřŔ^˘\­¨ #r™ői‹Hĺ×›-¤B„ 7ăÓQĚôůd]2ľbĆË,'EĎjĂ’ő,nß:.ąâĆŔ€ąi-_i…RL_D¸PĘŘügň™Śź ÖÔM?sŘX ö3GˇÖÓ}á‚,Ö™­J±¦Ô¤řÚ˛hŻ ŃZň*©±&˝ŔDd°,őB96”ě^űöűŻÔ>ă A7™>10ÉÚh®<)?n†§ ŃÜ[¶+ˇ3Ö ĎhD"M÷ľ7dąD–f-š+űfF®j¶ŐΚjĆŤpó7T_o@f'ŇŘ3ś}uĂÂ]¬š‚ÉZ±=VŰâaP­îśZŐ ZÁÖ)nZ ‰Í¤š B+ YüVęjE×fRÍ!ÓĐL©fŞŽz͉6ŐlocłA Ĺ„…¬Ů*F`*ICšőRU’áŹ!I^Í ŕďâ†Ń~‡Şf€&k›mîSD–ęFĹęK Hws`H…jČÍV3;ŻÁ3Ô‘…Sk‚]m6ÜŞ™ Žr¦–|5W'ˇś%o˘š ž+ĹÚ¬uŔp92•Ć»—“bńŐ¶Á°¶”µKU3Ah…˘Ň˙Ş!6…ŘR3Ah…!‹ß2Ô˛#MűE5w­°îʵ`Y› te»ĚßA+Ҕɮf„ĘYŃĎî/y.Űhlám,G’L˘ďĘnşŃÄ53´€äčUŰÉÜ´¶N›oJ ĺ„ďäŰ‚{-‡?ăć{C®~Q&_ňö{Č‚ŔƢ”)_ÁÍĺ@)±%Ăúy.›Vdw›M«*ĽŮfűš&hGĘŽ 6ˇÄNTÝKiĄĹ’^Řż Ůç’-ĺ …Śč™…ÍĐěđ@ĽÁf;ý1_”nĽZ «í+έkł™H Ě"í‹§ *÷Ć—ĎDš¦Ýß—†`óN.JŇ`şĚľÉđYŹ6Ôu°`[§Ş#6ˇŃ›Ş­Ép­Ďe|ú˘ -h…™VŐĐ ‘»…=WůŮ>ą:Ýj €ŮOŤm°UŔ´ţwǰ›‘äIÍűMpç]Šţw ¦1ş™ÂYC˙G˘G˝˙Ń›ň´(Ţ˙>š5i{÷/ Ůť Žm·)O÷¸'ś„ ‰ł®wC®!˙¤'† z ˙ĻߝŰn“žsŇ»ßĂn“ľ*ׄwŰmźĄ«čÝďŽao1K˝ű'r ąw–ÝďĹť}~aďaĆ˝űÝ/ěn—„,ř…Ý즉÷ż›®ŢĂx˙w35Ľ>hź •«Á-ě~¬Sś¸ ‰¸›r·°sŠ;b{»…ݦ8Ă&>&ąâŚÜ+Łť‘ ŤŤYîwŻ0ˇ†ŕî; r5MRw »MqnÝ6”„\S‰׾bťű +¬«Ź‰ű†}ĹV1A®ő1K„Lá ů¸ůęľ± aŔ /ś~Ŕë6ł‘äöů$JŚ0Ł!†Ô§6& ™zÔŘ Ń@®]ôÁŘ–O>Hn^GÚbŘĆŕîípÇÓËÉĂ‘Ş¶ęΨ!-ÝÉĂ‘â´ęäÖk¤ś  ·(Ěĺä_Ďá–ú ąc8rlX>Hh„MiîĚ>HŻtłCn˝FŽ3—RA9+Ň‚Chfvź¨fĐŠÎcç)Ĺýn¦­(5¦®Ť’›Żav†Ćil Ś®á0˙'ˇś%ÇŮÎÝŰQă,2Ěr×př4ŻD:[aÓ<p ‡o¶ŤŁ6­ż‘85ö¬‘ &˛ŹZ˛Ô‚aŢŹ»†Ă'˝áľíhq ÇPCJ4)3l0ZxţĂśźŚbş64ďs_,7ăhHř >f™–lňČ“µaëb1WŮüg–×ďĂă¶uěÁ]4`Ź–úđtöć-ŘŁ†><ĺ,ůBĂý^/Ç·p!ÎíđSżnŁ&ŚĽ#öwěá&·]cÄĆ8Cc„ďâŽá°ŁjÝźPL˝ű;ЉUĺÝź‘iEÓ­˙ÝtŤąéî˝íŢíŘ1ŢŰn\Ç{ńwďÖ‹AŹŐ˘•‡îu Ęţz_şé{Ĺű˛ Q ,wC3ńŽó^7w˘°'¬—r!˘ţóŇLYqď$‰ăˇ÷ [°˘C­ܵ~01Ą ó˘7®čl€5Ĺݱöéf‡í]YqŻě–™yÚ-ŻÖ  Ađ]ĹTú4ţ4ŔŤŠ%.‰ČR¦JŰ»GK†í°Zî’`ÔŔ˙BĂdć§%"\«Ó6‰­2[č,MŰ$Ü'{ešőÍZúžŽ <áŘŽ= 3m—((gĘ®M3?łˇŻ;n\€Ą©´Ľ+\ř™4{8gÚ.±©úźÓLPS9ś}Óv Ř6wĆYC3AîŹćž2ń‚挽ú”™ ŮOô0ĐąľI”SC v} ĽaEý§^/ CUęTÂKśfúĐŔ°.~ň&Ŕźf€FŐđ˛*•4B1p„ÎÓ´í@S‹‹yšýYBX»†ť€ľdćÓ ĺ´žfZ#ÂŰlĽžńŮ<”‹!Ghž§Yűś¸‚,x„đŔ;íě•'"˝ÚŮav€p›~;Ö¸śąXggĚŔzëÓon&Ť@U9 !–({Ô=ÓF„ˇŐéW‹ö¦*M‘Őę:ÚĚÁ #ô䦇ć-›ć„áĽh5“̡f2ąŁL?Ëjɸ•éŐbś ¸yÖšöŻšpI§ŐŐýZ7r¬ŽGŠą0†5˝ź 7 Ć€¦µA„^ă\¸§űMÄ\ř¤ľ±)4 ÷©@&Â!·dš ZÜíđ{ą—Zą!rXďh`ú Ć |ce7¬­ÓŞŇČ.ŹyjżćňYۢ+Řc/3?păt%ŢĐŚýw%† °›5"Ť6µGD|™őYň8Ř +Mz‚-Ž5ˬϒ/ĂÜ2ë›Őş<¸•.¶&xžšY,p?CŤ˛SšPĂżX ”;Iďq•)W0FÎÜř˛5ޤ«â’Ć=ŁŞ$E®lüU+-j Ďjy-«iFŻ:ŕ –¸9_ć}•ő¦0Iă%ŤűăŞpc¤Ŕ}v.ćż/G„pYGé:ôŻ6č š•ßTȤ'‹lěňpr…«ł:ŻhܧĺćĽ:C~XáQ`ů˝úÎ3Ľ7[~EŤ“R“źşú #č׬¬Ž_Îâ¤a§5xCăn:ťť5*ĽĐRiSmżĺ™gŮrD#¶˝‹ýXěĺla­—{€Čg•5yCă§F:”k2Tŕ'Mż6k<}v!­đ“Î&¤ĂôÓfş;fŤ]šµ5yEă§* ůR°ŔÍëěTćˇZťĘ»#C"t±ě]‡óˇ\đQ ‰ČňÝ˝ós]¶ ·4~ÄD7±E[ )pý¨Šy`H…;‹ă¬I5?ńfešđýTÜ•„—4ŢŔ¨—-)TĐ•3$»Qő(IW’Ę&8ó!ip{ŻÜ; hB—i0€W4˝'îáełé‰&ŘöY™ÉŻ9C?¬pźĹ€N÷ŐĆ&4Ţb€{6™ÔY™4ôČJĂ@F{ŘCo h-ćňű /§ęÜkHeśłŇĐ權R2`|=–Sů©ÂűÁ S(đűłfF9‹–ą!…¢ç!ŤQÎR˘CkW0©6•÷3Ý Ś:´2L࡯FÄş€ANÝ›’äl1ĽÖ“äś­)Č™ą˝2äÜ.¬Mc” '¶ŃlPSŔµ˛v=3Ć™C4¤(L+V! 1Τ» :cśIN’! x˛«ĹlrwĘ㬠†šY7?¦"O‹ęŰ @s+1ţXp[ŽžĽ›ń¨kăg#Íď_ŘběÁs­ť‰ !űäô+záU[[÷Ař˘ÁźşšY"އ–Uî‚+ëW“Čďוµ±ňÜ ô›…Ĺ-QpűĐ8K73Sç:C"đů`ßYóІąi:$ë‚Ńx‚ĂŞ!n Gçĺ0¤Ŕ 4‘!pqíÂ:§íz5Ó„L¶ÂƇF,ů•nć Ďä×nľp Ô„Ý/‰ňaHĺ˝wďÜ ŃÝLWĽÎĆü‚# YlE/ÜnK˛ÉŚ«ďC‘lÂŁ]Q,CĘ—daw“­Ü/µ0)3Fŕ·4ŔäÝQkŃ_˘„!N%ńŢŰ  oî[Š6]ÍŃ• !żfjü=xuäü}gńęŢeęĆ;ď–:™ń©şĚśşZxç]Ĺ/1¤ńvÉďř©ĘnÎTňd *ů1%ą7yýZ„$¶Ŕ 3Ysqĺm5×X6ŢËřEŢĆę4Ćü®oăĽń®NĽÖČůŽŃx§¬9ęŃ5Ý;’yq_ů5¤ęĘ{íŁ~ĹČĐĄ÷>ĽNaËĽ(bł—Ţ9Ö^ňĎ"˛±śAgËU<Şîíc1¦ŃuoŻ{C†îíťHC–îíuE\śYŠ{ďł`‚ÄéĽZś“73ÎF =O“1\ ł “$NG4/&Hś~—L›™IśN…xmźt`ďeü’ZóWŢ)Ĺj^$qú˝¶zjMU_׆Äé·áôňFgŰ4„×2~…>•†1‚¶)oIśN7)B[ŕ± L„$Nż­‡O^˛ŐŁŠÚÂÝ$'’8, …vkÁF áŚĚ‰$Np’8ťťÓYçD§#ěôśEâ\şŻ0D$ÎçÂ0A…‹i?Ĺŕ\±d›ŞŕˇFĹ18#\R˛-‚*â×o.bqF¸Î±8WX©\Äâ\b çpśÄąČiľ0wť\Dä\şu(ą’ČąÂGĘ5« [ g“sĹ6”ý “F?*WR9#BZśâ *§‡BŘ„&*甫ĺ g09çŘ“É9G¤‘Ó##BDäśşş.Np‘sŠdČ‚éu„Ĺvń8gěŮěĎIOcŰĹăôŕ ›ä´Č~\Rą‹Ç…Äéq]fbqÎŘDóŤÓ7u~hĆé±¶`Ć9·íŃIEť[Ě!ç 2›őY"NŇAs†sB#ď gŇ8g ÷ çľ|gĐ8c#Č3xśű‚žâqęHJŃĄÉl‰ŤYśäÜT;Ď ăÔM-gÇ)ÎIĄ¨«jŃ“¤póťâLŁ•˘·jד¤„8Ĺą´3˛ö6płsŠsU9ôŠ«™źhOSNq¦Ńş"]O’"XŰĐ“$Ĺ®‹Sśů gGú¦'IáÄad‹E/’v ]”@ĂĐ»lę™zŹÇ^·öKĄpűĹ&vŠž$m1RŁĘp]‘ľ·€ť5Ćeś~Ż˝ú•u™›Ţ$]‘ ŕq ľ\=#mo@ ]f5ś[÷OŰ Xdo:˘ `ć'H‘Ńş"UVu‹)±ČŢ<"do:˘I˛H߼"~ ™íŚd™^]!ĽČg„Q‚#Búć™tg»n4‹üR>#¤oŢÉř¤ă„ôCč¸AHß<"¤oŇ7 7ü ođ€đRćT¶â€ŔéČd˙d28Źś¤€ÁyČŕ<"zélˇâ1ŽhD `p±·!28,Ůá'ďd€°‹«^zŇ7Źé›G„ôÍŇHß<"Ľ“ÁŁIDO=HĄW{@Čß<"“^í!ó€¸ ;çęzîy@ęŢŠ@Hŕ’‰ŔyDHŕ< tpO/eŽHą¶B śG¤_[!„Î#B發•©ě Šş·"8ŹČŘ[ś`ńZć(Vp@ ˝Úçč{!óđ^ćŠ8Ëąś8Ź śG„N ]Ű+@úć03ÔNY’"W€ÜÍ@ęćč×Ú qó¬ÝlČ \|SőLŇćh7UϤl€µ,E1‚+w*€tÍ@¶ćč7U/s·UŘšvS* Ó‰˝äj€Nö €©yř˝vCK m»@šćKóđ›$Í@ަÜÖťÄJHßÎ?Ón@!GóŁyDúnd»y díŐ2¶Ý€’÷BŽći·Mäh‘yŰŠąí4tŰŠI’ć!Ió¤yDĆnžQ\ŕŠ¬m7 ¤yDHŇ<"Ťě»} dŇݧ¤~F@Ó<¤iŇ4ŹHżÜ$7mpâC=§ńđ÷ůŰ <Í#@žć!OóŚÝD2ošÉÓ<"é¶ ™DÍ#RwHßíT Š µ›P!ţžâ\N!UóÔŰF”¶[«@ĆnG!Uó€Ôm÷˙!Uó”Ý˙ ¤î6+ľ[Ó@ćnNY»˙'Ä©ĺç\-ďţ_ őr“¤í¦+qŰ6w˙OHßnŃÓîRvËČą;ş)dî†5uŰ‚‘nZ0ňî˙RoĚčŢ7ȸÜdš»ű'Ä_Ľś3ÍĽ»”ëVö Ňw'Č/w9•îz¶ Żr*<îr*ÝăŻäbąś R8r*G„r*@ȤśĘ €“MDŠ+@H©“śĘ ń›8EÂ'¸‰#"qČ©śřŘ@ŞÄQš~ňËÔS9!soůsŇSÂç ŇS!"8Ř'¤î-ŕcXé©9ę©!qLz*ť˘Ź»śĘŔE)Ąŕ}T÷ ¸F‰j*D¤Ę‚‹8 äwJMČQL…N1•ďFb*Dř)Š©QźSL…$XpDŠĐS ię©‘V ‰@HΔž )¨xtŔTą¸‰"2đHAĹ˝ë^ö‡NělÔ` ¤ é4$«”ÁÄKSiŞ9jŞ‘l5U€°ľTáo¸‰˘~ ¤ ő%U°(©DAI !…‚i÷¦W-I"’]A NI j8%U€”٦ ¶ś˘*@XjŞ`1ÔT"ĺ jŞQC©©B䨩DÍ"ɶ—ť±)MCúYS]¨©$+.〄Z‹_Ć EU€¨UBöşDU€Hâ˘*¦2uµ!žńKUĄă‹™ĆĆźŞ.TU6/U EÂ+0@T]¨Şh’YÁmu9UU€ ¨ ÉŁdŮÔ¨J÷ű5©¬€B @ŐŁ¦ >z‘¦ UŹ˘*@ÚQT’(Ş䨩€ďk¤©ŇµüwM ’Ç!łK¨©¤J/%«+´P¨©DBÔT"I 2/€Hů„|Ťî‹źŻ4¤©DbÔTÂęPR@S’ĘFä ÚJR>Ië(©ŇýVSߦ¤ |”T"I°sčŰ”Tž ˘ €j™°[jôT:¬3POô$¨§¤* ,µz*@¤hB] C$¸˛hP÷wŁSÂçS˘QL$<(¦D*2S1„5ˇ’Š˙ŚQž>D% |"% $}KIČIIĄ»ť§$% Íin"ŔKHdI(¤dJ$ĄŞń”EB*@X0uTÔŁŽ qÔQÂr)ŁŇ ˝Ź»Ś "‘ÜÁ‘ tTH/†:*@¤§C•î»?MUŠ(N`އĄ’QÂ}N2*˝ěO€%٤¨ŕĹźŞeT€Hg…2*ÝŻč7 ˘:e ˇʨQ1ťÖŞl!ŕB KJ+ (ńÜI**@L°Ä)‰¨‘´ UTşďŕ’ˇŠ ¦‚­iÉQeT:„ …dú€ĄD9”QŇ„4+ÔA ÓŤ-zô(*vŃ,ń˘L*@ÖQCĄ;ťAŞ ÔPŇ„tÚŇŇdडŇĺ–<î*@hX¤ˇDę"ÔP˛„ú±%^FRC€„0¨ˇd5Tşł+BUe©»J 4T …N ť¤Ç]CHŇŐ†µç°¦5ü$˘¤ET€H\"*݉ĘD !ŇhPkčóIDĄ»ą&ťŔg&‰¨G•î^™DT€D®J›ZĂ9—J/5Ľh‰¨áŕQD׳DTş»‡RCÉô«ř‹ˇˇ„ËL*tÖ†*@čęHCĄ;e;j¨ˇK"  ó¨ˇŇÝŐ ¦† Ívj¨Ń‚Ą†J5†ŔR#Âq„J/ű‹0I¨ák@i¨YRHilD‹Í[**@¤D•îś)D@E€ô¨˘Ňá)S%**@$rA Sş*Žl‹P**@¤ÝA•î|žĐCIô[číIEĄ» .őڤÁţčN**@–r z‚mśUT€Hi…**˝©ř¸«¨G•NçţqQĐŹ**˝đIŮ㮢¤+ע'Q) Ź#dT€4‰¦4z‚Á^ •î ©SPFŇPFĄ—]A2*@hq%ŁŇË.đ* ‘¦ÓÜeX%ŁD<”Qée—O•Ś ĄiŠą,dT açPCĄIĄ,M˘KC€’pĐK0ńBCĄó8ô¸K¨tg_I$*B‰ĄÓڇ­RP 9Aţ]÷#T9(¨V ąÝ)\Ң‚ Z!)¨ô"f¨ô˛‹{J@HČĄl4]# ŚT€đńµTz ľi¨‘` Tşŕ4”PéNŰT΢éÚĹ9% ŇËţJY*@ĆQ@Ą—]‹S*@$'C•î´3 Tz™a $ DĘPéNM“”T€H#‚*ÝO”ˇŽŇŐŠyP µ‘MQ‚ PPéeT>`5÷WçPée—Ô”€ )w@@Ą;®TşSŹú)8vŇOé~p­ \Â%`ȧt'ÍIĂ„ň)GŰŁ| .9—Oé~ŇĄű"ů”î¬:iP>$:(źŇý4ÜT®ćşź†5H”O"±ʧtçâIÓ†ň)ÝOĚI‚*¸š2”WsÝůzU‚*¸šë5Ţ„| ŤĺSzÝ5%źŇťÓ'ĺʧ9ʧt?ŠkX(źŇÁű“ć nć€H‡ň)Ý©€!¨‚›ą®ăúă.ź„>ˇäSşŕ›„»ÓCtĹc^4T”Oé~Č…Ć@)”Π܀î”ÂM:'~ř0Žú)ÝăÜĄźŇ= €~ © Q?Ĺă@ý”Łŕ´@+ĐOéÎU<é§tŹ&!¸—ë`/ňKÔO2„ FŕtFndŇOé8°ŮP˘qˇ€JG ‚ĹP@Ą;ĺń$ Ň=,z)Ś82T2îĺş*Búv°;-’“]*@hÇ$ˇŇë®ä) •ňäQBĄ;yRš”PÂn—„J÷¨­–$TşG=˛Sp/dI0÷rÝ)—C‚)Ś 2˘r&[Q"6(  R„ „Š!á˘JBĄ×x–& •îLMi‰PB¤&(ˇŇ=Ć"y J¨tʱHČ„*†Hé—rţsWCCŮ=Có1±ČjŰV)p@c@ý”^k©I?Ą{Fß~J÷0Ťä+¨źdI…2ÎíB*@(Gr)~'×=’#ˇ ę§‘¨ Ţ@vgҸH?Ą{°G2'ÔO˛”‹2ţ9é§ŢôSş„’ĘÁ Ň–ˇ€JUBcÝF’'ˇ€J÷¨Q: ¨™G•–§Ę€JŹ–5¤€JëĺP@Ą+Öô¸ ¨t§´j ( ŇÁ*gÉP˘‘ €Jˇ^ĺ,¶˘÷ ¨tQIÄ„*@$C•r,ëL•^wµT ¨™•í{T:tí%Ź‚¸Ą!R>Áť Äčů±ĽX‘ ÔSşÓkŐĺTO˘.‡|JÇóÔ^ú)Ý#cҡ~  Ş0TPă‰qȧtŹžIX‚ *@–$V`Ď:dÜ%}‚AŻ3$u%ˇŇ=ÄF÷G*@$ÉŔŰ›vŻS ˇŇťŢ+˝ô<Îk)¨tĚ…ÔI˘Éšzö *@”‹ *Ý9ÁUi:1Çž "*@ĆQDĄ×˙ä‚DTşż†“l ET€ Ąa´Źę”¦±+ţ©‰¨éJ•őti›@E{"*ÚélET:ž¨4©+i¨t&JL*˝®¸«’†JWxńq×PéNçSCČ’hŠŹĺ ůi¨ôŞwű!ˇ@c@ •î´gn ’P˛$ŞÂ ŹZž$Tz ŃI¨^ ¶éŢČ#zÜT€H⇠*ˇN"TPÂm@ *kÖŹ *Ýß¶JĂ„ *@4nTPé •JT€p}KAĄ;-[cK Rtˇ‚J÷°Ş–T€HɆ *Ý­L*¨‘z TşÓ»ĄßB ˇ—•îáY T€D(¨tŘFÄ2D(¨t§‰KI *$Ź@•ŢB$8T€„^ Tş~%łó¨ ŇťlηWRP2$}’ÔťH¤ `H/ĄŞ ÚşBA$*  Ňť˛"+Ľšq¤2T€H)‚ *ÝăС}‚~ŇĄ˛Ň؆率D 4ÔP"€‘ż®‚)ˇDş0”Pé`Đł‚”PB†Ž4T€H…*˝ĺ‚ÔPÂOQBŔ •î‘s)…PCH“b 4T€ĚنJ÷čzäâĺŚ#í(˘Dą(˘Ňťâ/ Ѝ‘ě ET€HË„"*Ýăö‹ˇ   4† ¨ĎńŁ MJ ©tŹöëëR˘© !_Á)šţÔQéţAs’:*@T tT°ę¨FuTşß3„pJçO-ę¨ ˇ ˙ĎĎPHĹŁŠŠ˙ i#ިQ±TQ"±#ʨђâŢ„ŹLĄŁŇˇ!ýśäč[ÔQ"ťꨩJĂŰGÔ(ꨑşuT€HV:*:RMÁŮ4¸/ˇĽuT:oiwU-SŤh!RB |Ü+ ]ň'EŤĐ©:dTPĎ2*@$âBŁvBÖŢ5”ĆD4(ŁrB\Fĺ4Z®˛ PPFĺ„LZÖ+•€xŢ ĘńSR9!š@%•%•cĂ)Ąrě.J©»”R*Çn§”  ĆŠJ*Ǧ” 'dRŇŢľX–”Ęq2QJ…ޤ” &ĄZN)NSĺ‚” §2A)Nw~‹R*\¬!ĄT€¨>”RáŇRšAÓZĘ.®).ZÖR*@¤ B) Rˇ” I†PKČvÔR•áF--Údp: ‚)ĄŇukúZ*$ăB-@IšPKH“" śŤŹLCK­¤´T`ʧ©Q1S˘bŕP•-ęB1l QśŽH•‡b*@¤´@1lLë(¦$äU0p¤!Ón^SÁ¶ČgTS"ÁŠ©Q.Š©` B ­WŢeZ(¦d“Ľ 9śľÝë[S"}R“ŕGđµźÄT€t)ŁđrĆI†PL>  ¤§„®ŹôT€lŇ\!‰łĺR.ÔSR¤°Â üK=1#ŕ(§d“V HśîľEą$q6ňřw9ř…\3”S ]Ę©Ŕ˝äB“ś éŠPNĹţôkGČŠPKÄ?¨Ąß—bS’X*ÄTŕAë7)ś˘R<îb*pÄ%!Â+J ‘fŃú¦i¨¦$K%ÓŻM9&ŐT€Dš®6¤= )śmד“  Î)šZT"F ü¸CżVz*@$D=›řMz*@¶Łž Ž_šYÔSÁˇmIő„! !…ÓŇ€ˇž Í ę©ŕČH›-= I + púÉ““ôTáϬäТ ŽĽ´uRS’•‹N±.TS"ˇ‰măi[ ›‚ä1†š €\!łîĘzTS yŞ© 4 …M—3KŮPSé˘+=†š ‚¬ĹT¸XG1 YiČßô`G®LEBěIb*š Ą0\€¨î(¦ä$¦‚MU9$pBŔHiHŕt$)Ťîfvé?©© „$ÝŞ©IG5ž4 TSA¸Š‹Lj*@”Iw3S×!¦‚ŔW”ÄT€đ‰·ÄTNÓĐPLA8IßPLČ&D·3CQ†SAx/¤Q1FęPL4k ¦ŇIş{ÜĺT}”Ô ĺT€„ ogF8řÔSASĂ@= ę© 4Şa€ž b©ĘÓĺŚ3—äT€d}±‚ÚW(šPN‘Ý)„,NG¤‹B'8ŚŇN!‰˙b, ş™éş’5 ’(bLáiÚ,É© ¨-y=î}’SA(\s}ęf¦G@Ar*˛/•L"'XĺTšWŻSN}u;ĺTáO˛8ý K9E÷2M˙¶bh©ŕvN‘´T€$!äqBů‚@a ZȶHJ—Ůx9ÓvµJ©ŕ‚DĘÔRÁ­Ęä yś~ó"% h©ŕ(HK×5i©ŕއbMŇR˛©Ü4‘ÍR*¸9’Ţ Yśuu”’ $•˛8ý‚ŞJĄëŢKě¨PRÁ˝×˛X˙Ř$Ą‚˲*Qň8ý†M’2”R"—˘‹™2C»‚R*¸»“Ę µTpă'AŠ©‘ś ĹTpO(q Š©ŕ.±K:E3%¬ĽÄT€°/¨Ą‚kËŞ‚—Z ŇR˛I%«j•” nQ›äV:w†h©ŕţXýG-Ü:O!äqÖ]sRZ*¸ŞÖ$†– î·%ŔB-•.ţü㮥‚[qÉ•PKçÜ$)¦‚Ëvő9ŐT€HódŰŻěŐçSÁ­ţ8Š©ŃĽ§ ¸UĹtÝهďC1đ‹J*]ď w%Đ4Í—®eŇ>Í©¤DóśJ*`@ĐÔHIĽ ő/•T€Đ••’ Ř 'JI Îj)© µ ę&; ©€ 2ŽB*@ŘP ©€CÂLÔQńD™’®e¶˛gbŚO>”†N7’SiHá¬ńŹČ†Ž ¨1ŚHG„Îsé¨ÉJSIDŤ‡$tT@ŢYJ#güű ˇŁľG‹:* -ÉťĂ˙®L言ZÔŹ:*@8…ÎľŤdTŔi˘,Hs…Éo$…ú“TT@ť’ŔL}s—­lUôÍyŁ˘„[ŞTTŔÚŇ 4Ń7ý…€Ř›S˙2]¨€Ć]W"*@¸Z$˘Ňő*éqQ;MăÔDßś’u•† (m\PŇP’¤†"ö¦Óc”KěÍKH*@µ•† yܤˇ$5T@çăV,  Ü<¤ˇZ 5T@&\G  E彩l*$Tp’„ Ś’†™"oŽ}™Mń7GD$ˇd“8‹ř›B„ ¸ô\%ˇ„⏒PŁS™ÄߌC…TŔ ŐŇ\AŕÔ$°KéCQ@—ˇTŔPŤ$âoö¸ź’€ x­J2H@ícO"ţf¨JA€’$Ń7{‹$boöHCd].T‰¨‰4boöHFW¦tT@ć¶%! ])©€–< 45A\®R»™ĆYZ*@č`HL,inmRS"ą‰"ňf[šŇSýşU€l*YěMľż|Ü%U€ĐôJStpú%UÂnŻâoş ĚęPUHU&ň7[ÜEHWvšt «áŞ—˛ xđ´ ”V@k-měw•¸ †ž$®„Wmź^â*@4“şś-âĄW˘L$pâY,ëBm ô¤­Ds‹Ú*x°ŔęRZ÷I«ˇý‘´ ŢFtĺ"ÓM6J«ŕŐ-’¤U€°`*«HBČßôçܱĄ¬䤬„î”Uđr„Ż”U€hbSYORh€¤¬„vLĘ*@¸ÇHYĎ_X «L“ď’Şä BX/mÄ'=ˇ4+] ‘§îOz¦2ő‹^ýD¦ˇD$Tş*x<¤LÔUŇ„dľJZ\’UÁ3%žL%«¤ ፌ#ŚÁQVĹüb,ďŁR7 /I I©›ţ‹Á4IŞiBp„ó^’*xĆ`˝$U€pµHRHRŐ€8ńJRŻĐ¦˝ň,5ľNI \’TÁ8jmJR͵$U€p˝HR’TÁĽĄ’IÝt„»Ľ$U€0¨!I ›R7ý9 ­3%UPm„žFI{1zéYŇ^ ©›7S1”T˘r(©DŁNI ô_¦Ć. I \†’Tr’TÂď@QŹ8ą,Ą¨„ţâ9Ť;‡UşÄCQ·)ŞŕŤé”ĘFo6Çć"E tA¤¨D sę©§ßŕ°ĆTTÁ«Ř)Eż8;¨+˝{Vfťg‘škŞî‘Zó ®©ńTŰÝ›gß=KŰť˙O˙ůćÝÝź˝|ö'ż°™pgŐVý—ß>KLrçţFq- '¶Ű&ńňÝłűo><ľzţň·Ď^řĆlöńÎ˙˝u[˘/_=űúţ‡ç`–oĺţáăóÎ}ÉsÜż{ţ/ţě/^>ű;űßwV[©wů]}7ąY3›śť†ŹŻďţţîýď©ny˘şů»Ú ‡l÷đę>x]źVwúIĂěIň­Í*źśl«Oźö«×e ä+úçö˙żµĘüůÍĐ!ă#Ćwd9ýËg_[UüvŮjřöÇWĎü ń´!˙áš\˙Ćäµ€îőÄaÂ]|ľ^˝ż»"‡T_«ôkUoËz:xîRrWźJµ§™ń/Á˙ľÉóÔhř=Âć»ţ…׌Ńřő>1ĂŻŔíoŻS6˙ę˙ßéâë®ŕ…ŰCÎî"\¶mf[_–Á ˛ĎôNĺ]Ţ”WĎîS¤<íěöÍţxLřŁE&[ő§"ó“EúµśŮKw‡íĹX‘ĺ©"±-{‰9mfö~˛Ä­ß”X˙cáĹWp.ś©á}·#Ł(ř÷KçrRéęšHČ!.}Ű1Q ÇD•łýHČ!Ń0íŘŽŹ¨eőKíi{Ű”lî}}˙ž÷íţ+ł›N ěĂ¦Ř <âIÝ¦Ć śbÓ°!}+ä™m,^äqűv¶±O×Ĺüwălyëb¨GŕVf-ţňí›ďźűŁű|ëţăëç/<»Uű´UήUî˙ćńńěÓ珟ß~xĎÄ«Śűßúź]őëţÓ7Ď_xŇ™fź÷ŹQdĎ÷ŻŹó_NżN™>ň<Ĺ-Ęýă)ŮĂ«C5޾Ǐ¶ęś÷oô™”î?ěĺţ”ţüÉŹ§_ďźű¦ß˛}]MYă©¶\~Róç:4?ßţÍᓯU“–î>3{÷G§#>¸?ď˙éyk¶•ľ}řőˇ€ÇSžźYJ Í›űöăň3ĚgőZżÜ˝üŰg/˙ű×÷uÚÚľ˙îűĂäţ{źXLćó˙Älz†%0\űťť­F°´éjH~Ęt˙H~a{ę±Ŕ MŘÚŽ^x ›ăőÂůKiŇMůüúÝďléŕQöôe†L*ĺűN¶.+€rźśű8ő{ë÷ć nuŮjLţŻŻY_ą–zß®Ýë«Ýű͇÷źľ±ôO|§´vţÎHÇďřÓĘířťnóßńűŽÄaôŹ|űöýçç˙í‹®ň§‘nł76ůá0 ÇŕŢvš|Ě“gVËůáźŘ·ç/¸—UĚ"ę ď´V±)xžň¶ř|b›ĺ<->[-8ů[{~wŔŹ~üOdŁmţá­•ú«×ű÷ç0QµEŕG˝’Öý±ÇÔo^ëĂľ4?đĎnŇŢy=ý‰_ë§zž–řcÔڬʹB˛ Z—° ¨T˝ůü«Č’Ďmx÷öřóáQ3úŘ!?âr~á—$Öß¶?ÇĚóqřőa Ź«úóó'ÇzÓ0żúřáwé©au­iÍÜ<±ĘR$yxőę邜SW×˙㌴}7éź>żţÝŹ~Ŕ¶ű› © äß8!ÝNŘů凷Ź>Pł+÷ŢßNI?·Ż|Ęm¨­Ţř¨˛lǶę…ßá¬UFßÓŰ”Î{Ď»ýóŤÓߊ3Ńk%ééţW÷ŹŃŚ-źm˙Ő€łfżzţôŘw„Ř©ß~řřîűÇ'şżIZŃů2łvĚß°eŮ ¶ĄąČx©YdgÍí»Msş’Uń—ź?~˙Íçď?ľö.đ{†díüÍÇןPSsEÍŤůŤť.żYë›Qö?ÚńKföoŢűAÓÝŰ~O&čě?ü‡oi~O×î<˘— Ďšő’˙={šÇ*­¤C‰_˙>†Żyj÷S^Tßj®ô˘\uۆťŐ}îlĄÝá!Io?nĎNĐÇ·ż¦át«űúąOugvúTGíĂ?üK oŰĚÇ$ű×lÉÜzIŔG˝řôéčiúÖíÜ—1«ĺyű©~ďPÇĚ]Ć÷͇Ó_|üđé¸ń>>ĆŹučúŇźNćóń‹mÜŕí0§öoÔ›Ž|řçÓďcQwf˝Ź°¬ŕŻ7¦űí^pŢ×űSç 'ęUoÎ'˙˙ĆRr×đôo&ČçŹoź¶(Ń á¶0M¨Ać~đĹŕ:㹯óLý¸OćÓ(bŰ<Íř˛ď3wíX™Ç3­HŰ'âcvśx ·—đ‡O7ŁŔ¬µßź¬Ě§ód¸-©aµzyłvŮĽ|:…|x´ Ëť©úţzňȢâăßč„á 7#ôÝŃJĽýx:%}ŇćÍaĚm;°|a€ŹôäŞbbUüL{®»ęGs=%Xď¸ßžÚiWögĂm ďű?s»MłŢů Ʀ$ć mîřÁ5«HůŰHyúś«çÍ=×”ožÚäý_l)kîŢ™7ÔYŰŤÉ9ťßľ:ţřôůA'Ř‘a¸”á A޵)‡Y˘/ě:˘Ä~چŚón‚plËaö<élś; š>ÇňFúÖ]nâc7Á"Ö´ÔłU>N ‡Ű\˙Š+µ¦®ˇoX7;ŢO ±ź̧<űÎŇĎ7>ľ=Ošź!˘ §ŕíĺôWüUűr¨âÜzc&SÁ5ÜŚ•ô×;?¦üOJyţ¬?'ÎküľďšoűôwW>¤töĂns÷ÖyHâäë¶·3Ĺ÷ú±NÎQČsťj˙§OŮx©šÚ:™Őł3–śóĂCe´ÓvţńéqĘmI]5ţí“5vAť‘÷“úźúŘă<~źd´ÝŻ_{ěŕ<‘:Ź>_}ő•~ąűó§7]<‰«é¦ŁĎuň‘µcéą§ĎýwÚšż†˙Ĺ€ě;ÎőPËc¤'ĂŰZŤggY4θż˙ ×ćK“M·i%ż€ů6nv‚“]ßWú¨˝„Ăż 7Fk]ንhÁW°ŐűDô˙ aZzĎfúËëqíÍ÷‡ ČŽ/ ů÷źŇýß#1źŕ˙‡Ç Ţ/°ţđ3:ţŮ;őĘűúËŕ›l€÷cîCôA7ž9d“Óý=: O÷d/Ś7^~ĄÉ^ň©˛/ü]Ż×Ň/ŕgŽ`Ě/ţ—‡—+âYßľ»Ľţîű·×řó˙|qýËoßýęŢosŢżh'»˝¦eô<ţ⏯ˇ÷Ϣ¨z˙ęáóĂ5éź^“šű˙úg_ž¬°ą˛ÂB Š˘ć1óyÝ_aćţ#Ŷn‚ďÇĆ~úţÝ»‡Ź˙ň«hőŹEĂ<¬îd Ї}u-çÚ%ŚŃ˙ë5ž˙űşä©ëď\ö-ÜxŹ Y»ŚĚŃó7cĽÇ·ď˙ŃoÚvě›ÔĚ/{˙áן®ß~üđćoßţăµ’˙űoţÜ/ =—îßżýüúcü]ľ÷đĎ—7^]ÇËŞűęň×_Ž‹•úö32ŢúţZŇ8ÜĽ€,ńµÉÉÎĺú»ýę~ł!`cęenŻ_lăZ…rÉŻ˙xăMÇ‹'úâţĎ?Ľţö۷߼}ýţó§Ż—Ń˙{ő62endstream endobj 546 0 obj << /Filter /FlateDecode /Length 6187 >> stream xśĺ]K“·‘ŢóüŤ}sÍš]Ć(Ë:XŠőJZGžLJÖp8,©{šęnrDüŰ73T(TwghoƬéBá™Ď/3ˇź¬ĺ †˙…o6lqwńó§_áź›Íâë«‹ß˝äLÂOmÇ:ľ¸zsáżá !MË…XXmŰNęĹŐćâUóňR¸–q&š÷—¬eZZÎşć>yľ˝\J©Zfyóí*môĂĺRč‰ëf‹mdŰ9×|íÍ7o“Ö»~€®đÇťqa Ý)řh?÷ćoW˙ r<]ŹpşuÖÁš®^_4J_^ým¬^pŐJe¶Y*%[Í»ĹRBcc°é«ćŹŘ±Ô’ó®iažVµ]'ŕg˙¨Mł»˝{ż^íúżßľĆuóçۇĂö~ů’ćgŚ+›Ő»·{š"‡Ĺ©f{»ęšŐún»ëo7ń'Ő<Ŕźń/ŰЇĘŐąćpűn|ńvµţ@„—ýýÝeuő¸,®K 4¬ó+»ň[­śčü‰uř§…őřŤí$lns÷>iEËL·=kŠËwě oţü2<;3¬/9ŘM|«š~ź´ĽŹ=4}~đ»Őˇ‡ď;XW͇K$˘ÎŮaÚĘ4›ěl8 5a[Ć`qŽŇćMV‡ĐsÍ»”ý·0~;ţžőM±#~FĐg«‹´j„1Â6?żĎYĄ¤â´×đÉp<˛Ůľ Ý*žĽ?ô›Uľmű@Ľcw¨ţű‹fqůl ÜVi˝w­±¦Ó ŕNí:G%Őwž´ŃŬöěútj‡}čĚąŚfé~{)áś8ň­ÍTlÓŻö ›ČmĆtó§K+»í&tٞ ž±ÝgĚŕ˝39©äGd ­ăńěHZă"Ë­©đä ˘`aĐłĘČ0QUJ@®µ "Ĺ6UŠE&š~Ţ(y'ŔËů-´°sĽáŔU•ÂZ{żř í€ÄąRv€ ­˝Ŕ'mĘĄQn‘[\IŢ8PL"fnšŹu1ˇ`¦ť¶ ÝT ŻÄqiaĄZ¨Vw<]XHÍoů /Š#˛­Q`@-“1ż -»RŚjnN ; şó¦zňü鏓w9Y®…Ě&˙ou@Ź‘Ľ8Pl”pbŮŘŞµ‚ÁyńÖH°Ř¨[^Ýh DµHľ­­Ć¶‚č÷3îLE °üXż¬«&Qş›ť=¬ňů©r†&M뀽í”&a®µ›±ÝĐ‹TWúĎ’â]¦mż­łmĄ”*OúU˙ywf›đŚş'ĎXµN949©™MW2jűqH°ÂRĆQ #VŘ-›ľiµ36Z*ó¬,‘ÎţnffŚAńçń\ç3µÄ¦Ç–ŘłťÎ(âąĘ[J…]IŻhăďaNeçŽT]ňWŇ€(d­ ŽŮ˙-Ž;űDĄ4'O´sgéYR•ÎÔÉ“g:ĐŮ+ĚW.@ŘŐݢ̜zâÖ"˙ąĺ_)ÍÂޢĹČ,ŹUŁšśťŃ`<ĂD[ÝŰ(ęp*˘:•(čŇ–GLáHňź6Yť‚mą¶ů#şŮô`΂#4!qjUâkWqń¶.ö™ą˙l4âišA#?Ą™ëËQwe p­rŁű]őL«„ضN~K öľä°ď]Dáţ9bî3buÍ•řyUđÓl üŐ}˘˛§ĽŽÂ°ÖÉA*ΛŁ8~şTüth$Ŕ1´Ět‚~WÍ·Áޏ÷ľGśTtšU ‚Ľ?+ŢÜíV)ÚŇ—řm™ş9„/:Ź+úNíÜDîçđ›»Ő!zňBѬ·wËu˙ąđd_­ű)HK@+>˘˘VvX’nŢ\Ž_ÎĹ2Ě4Gtኮ]<Ú.ŔŞë„+ŕď}˝”›Ç7Gk7Qh/o•2<źÔ>wÝ =zŚÉ®)Bľ©´|Qw-”CQ=É®çµY‚;Č…ërł~ÜA>b´™đ\­W»řnNŢ{±XČ{˙!ł PCOayC;%I|dCn˝R×B5‡ÝvMłÄp™{ŁĘđuç@ÇÂŕI Bě]¶’M]čď|˘ÜIŚŽ{ˇŁsëEN°.‰rŞg'x+·g8;í¬ăçBǢΉŁWF~,}c,/±ëŁ3Č'ö,ëäTĚ™4 ö…?ô@3Ţ 4QnO CĄî€wű1ŹbB30my!6#ghÔŇĚ…1!šđ UI“ÔˇókăĂÖŇnµ{ĂC7č52tdž­'9 âEpôA"óĚđ2CŢć’ÂNű™)‰™(>t …·©g´ţ^ŔŽĐŽK8yŠMÁłR›4ŘŻ;oJY §*‰ů3G"»÷ˇMewđw¦xÝ  Źt\„-"©á˝s1v ›ĽÝ÷ŃXw°ú8Ľ™ Ď~1cnÇ$Ť`˛Ľ€®‚ôÚoë˘ZZ×rÖMMaańB#w­ŃFčśÁľ‚IhF2™×#—šŰߏIéçĂ/P ×ew@{8°ŐÚ~fň,´ç_ę Ď„żŔbßWÍ€…Ó󅟎sSÝ|Žćó€É@¨ŽśŐděšą]Ź#Ť ŶťĎnŘ=ôy~fWŽxüÁ[ě˛ĚbH˙ŞCpjŇ “˙˘´3ňĄR"T7@¤ŢnŔĺkźç„Ď$”Jú<ó(ű«÷At\şťľ]ůS78Ëě,Ú^.5Řg¸{WłşAťŞŤD–ô“,'šJ=Śům óaËň3*Ő8^r|şł/w–JŔś/śˇývµŤ9]ýrČţ Ţ—pčâzť ćŢ\űĂnµűPţu‘s–*Ç»·AůQş ©k™ÄL°A—ô;ĚuáŘM´GL…8&ÄÇڧIą)ířŻ®-áŮ ęëé.ó±Ęi<­ô™aÓË}ćÜL@®Śöq'´Ďeó¦×Mˇ˘ѱňţ îüöPĆÜpBS—ÚXŐ"k‘ž jŠČ¤3Q ˛ÔżRpÔËÁâ=ÉFts É‚č%uđ i ’‘a[ő•ó> ÉÎ&wŁö)QW&eő(źsâńÍRi[ŃN’“đČ&šą٤óv)‘ĚG’%Gn´MPIhéR¤®.RŇ›X8WŹLďšŰŻš´ KlůUŤ%ĄÄĚÜó$¨Ë˙Ľşř ž\Üí/Đ ^<\°Ĺ]H†iÉjˇ¬…oôbżh°üÝđËúâŻóŐůŕˇúçűd±bđLň Ó­"é&µá6GK#ź@E\— _—äpŘĚĄ‹ŕĆűű”EŔVęs\„š[„Ŕ`ÉS!kťH!śląyĘ"K§>ÇE¸ŮE¸Ž§‹řä|m04(ż4°A.ńP< J˝_{†Ç:Ž©™ĹŃŞ<­˙ …ąě¤×<Ëtő̰ó˛*ŁN=é>‹RU°%¦wń ‡Íj=ěŻő×'Ö7Ę«NHí#%¸źe#wd°1FvŮę}!§˝ˇŞUP‚QßWT^pXo'Ú)vŕU5VrĚS1vĘMwަ¶z˘©±{p•wŃP4Gé‡ĺ÷ LgłúĄß j$íhw}őÖÇ‚±–ˇîlÇ©i‹¸)ú‹«řapz&PyXA‹Ö•řf<řÂËÂsé¸WU¸aH8IŮĚŐĽŞ3±G˝ŹŰď±-\ěŐݧ‹®Ř븪J"ó.Ľ›µăS­ďŐÁMń«›V‡9ňš3ѿ݄·ě´‡čPľňŇA ĆÝyb7Ä–^A«=˛mgIjĎŃ+ ‡Đ»X[‡ß˝¬Â ^’N^ř2>ŻoýÇ̆R,ěHÄś ™W†ĺ±ý]_‰đkCtĐď÷ďcÚŰů¬Ó>Îś›ZÁšĄřÜfĺÍycČúŁ>3IpsíďÚËĄ @řź.ťđu :BîĆçlf¨gě/«MąQă żQŹÝ$š(­$ŕ©"ë<=GYçży"CYç^ś:‡7ISżĄŔ$ÂóIwqĐĆWe ĚÔöTIÚSś#Đw¨_ŐN 3*śť+Č6żľŁiŐ´pŢkßgó«ňDqôÎUŽÚVB¦ÓäŁ]c®LÁGř«* §ő6wŠwrFA¸ oE`F‡]‘/CcyüĎ÷ńŰ®ĺ,Ĺ!ŐtŰ }WĐ6V4ů>p š@™´éWSŞÂŮH…@”Ď-đČrÂBAjÇ˝[őT˘ě=Ľi!‚ýő‡řąÍŔó"vO0˘Î ţ¶ű}źbŕë:ţP(Mze –°É¨˛¬(›#áĽ|Üü9F"« Ŕü,}®\Ä^Śl-č0/ń¤3Űű‘ö•PŽĘرržžůŚ©E/™;ijq†Ął0ţ¶–ie’šQšŞqŘ$4ó--źf®˝,óŠ7$ŕú™\ąÝݬWť¨­ X´Ľ, _/ŻÝ®©†ľ$Ż…t=KĄ©Ţo×Á^č( ëŰ1;7ZäEŐÔĄ’…HźŻôi“cúŢĆűVâE ‰Ť•ëČĂe5ŤIC†xiŃIĎĘ9…@ô,¶ú± çčs2Ű{Č–;–í=ĄŹVô=[„űü"çË÷§5SD›oÄŹU” T!ă!î…ńtí/™ÄÓ @̶=š#]"©TjÖߌqÝ "b¸€‰ŁČI{=¦|ÔJ'XsA¸źĚ,!¦&vrť989îîĐňwČńf€cĹĽź•¦]IÓT4—9OfIJÂ@f.’Y„ČÎ!łjÚ’Xk9™żĎ‚Ąw1,H>ě+ÜO¬<é]™YŹ? BfŢúÁ—Âű(Ňţ3Źsťd1’QH!^\»1“3˘QŁĚćŚLP\ălťź+ˇ)\5t2ąźEó1=öŚ)Đ]A§óŻ*Ń›%PüF×CÇ)ţ=Ö)FZťŁ˘•—[>Żbnńż›™íˇ–J0ę[ž˛üÂÝSHÇA¸3ŽI7ˇg>M‚đŰVAüäRAíĎäFFAcÄ ¸kľŢú eř•Q‚—$UY;Źp„ =â9ÇO’’¤çĽGŽBO| :~ŻŽ?•h§Ł |Ëo»źe‚Š$;a†čóe%×y_í];ä&Ţ64” ţű\‘’Ćd\߆͵ś›ßϸŚB÷ˇ`ĽščtĘ RÉXĆ 0±©Ăö¬WtştpÔ×MRt1żrÂiT—˘îÇÖ?ÔŃqřąó64ďtĎfˇŰâä; …ŮÂ{,ÂĽPWBh¸ŤÖĚ[vy˙»M”65mţŞ©Ő92žPzಀĚagŕµęL­›˝‹«‡Ĺ͆<¨žîČڅ¤Ü‚AÚJ4sĄ“…±·»mNĎwŘNe˘ůŕ ×!¬BčRĄéŐĘäıŽĺ%,m˘´żËJ ľz«°kfśm6Ůţ®?ěĎÚ¬Ćiy¨Íę9ś ŢśĆŘDËÝS♯Q.^;i'⤨ĆţÝ.ݧŽÎÇđľ,ďĄĺÖЮ܉íΰ„ő}bÓv–%éˇńCŹ4P›!KŞ^‡ćŮő~ëŹ Ł;Z ÷pfŰB–-‚˛ÜG  •őťsYäm$'¨6?÷'v 5Óâ¬ÍĂ‘ éKš†Îh’2Ťp DďI™«źŇÔjݧ©#~Âöh®_ěüý˝Ëł ˝Ć»I3ˇKó#ŘËy1É•«˛SjÁ/ä4R•ŇHĆ“EĽ1¦U’Ą˝ňół¸0eĂ@ŘĺĘ«É-Ô\…26AS×ă·GŠVLň· sŚşŠP%+Í(ŁţŘr¬ÍŔ›'yó ,BRr/Ţu+ “–Í-÷7„´iĘdx‡Jf ”q»;ô·”T¬¨N`u˙:´˝NĘüp» ݱxýććýnuóŃĎ/$3W<:Íř›`ş§"/Ôcí×!ŤE ‡FKťň0°f9pV,+şÉż›¨ŐíĹ;şˇ÷mDúńÔ]yŕ4AĐýă ¤űřŁŠ6ş¨’Ío†¤Śę4ĘÜćbëüvČi-¦ßąÓ7|ÄŔ_ÜŘŕ aŽIĄOFÁéS|`Ž™·úč‹@P ű××Č9–ĚíĄń:Ă#Ńy6GyČţ÷Ü’ "—éâÍř°Iš>?V?żËBŃ3VbP"xö^ýv)‚Č^Ś˛Ď†Ę«%ßűĐ0&Ý0á<ş|%?ި(ŐŽÂÄs3¨•Ň»šŽs¬¦:ÓO. ŤäľÍ(ˇĄzQMVgă{ÂÁ{ľKŘ_Ɏ‹•2Ý.ä(ÔVŁ´/síjČVĐ—"‹lL‡±JŤĆ¶0Ĺ +{EpdĐÍ ˙ EÄč-Ą*™î'öŐŶ™żŠy·µ`a=ßUÁĎČĎŮ2Ľń&=ĚŢë×`cĐ”´I§”ű,eŇJbR…"iLAy|bYďxt¦Ö‘`&°żFĐB}Z¦Ř(\(čˇĺ§ ú\zn•D$fšÇĄ˝Şíc{•»´}Ő«É z#ăźÉ:5XÜróÂ3ČŚÍv7lšx¬LŠť\g]®ű©ŠľŠÍŔ×â]MͰłÓňŇ€|_%,éGű1`ĆQ*‡őM§¨K}Ä­­Y%sұj•ŚŤH ٬ôŘX|Ĺd*ăúŔűÝú"€JřčH¤ű>^sđXµôřŧ)J)-éđż ×ŕ͇A–«‘Ě*ö9€˛ŚµÇkWaô41ŇwŠ…tĐ6őϵTȇ˘Tťô/9†ä381?–9'<ú×9y"˝+Ş(łŃ”F™Ťś¬­CĹúşZ0µ÷ő…4ůý2ţ4ň˛öźÎcµ<ß®Tď>IűÖÄĺĽq“#S¸ŃTĎô—‹˙٧dendstream endobj 547 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 190 >> stream xścd`ab`ddđń NĚ+¶Đ JM/ÍI,‰It7ţđýĎÚÍĂÜÍòţ»˛ĐIÁcü‡@€1™Á…‰‘‘Ĺçűľ˙Ś7¬/|żqý#ćľëE[ŻDf‡VúvKę‡^}zcóÓďŚçW×fqŮeá ŰnÉßZ¦żysüć{ý›é»ĚĹă –l“ç+[đ#`Ö÷Čs°ťĺzÄ-ÇĹ’ĎĂy¬§·§§·'Ěŕáa`ZXGNendstream endobj 548 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2751 >> stream xś…ViTW®¶›ęRˇË2*™*'.Ǩ˘‰&:Q!jŚ‘%Ž ¸˛6 ÍÖ‚Đ(›¸Ť¸ Ę.4B#‹5 ™DŁÖ1¸´KbƸ cŚÉLĽĺ<ćś©îFŔÉ2}ęĎëzőľ{ż{ď÷=Ą@) —EŢŢşÝëî‹CĂőŃ«ă­˙ąm"ÉRů“…ŕ¤'UăóÎŻhđ%×{CNąPÖźŕŁ{3v^|B˘~upOhxÄbmä’(˙čµî“_š2ă ŠzňĄü¨1Ô»Ô8ęŻÔĘź  Ľ¨ąÔ<ę%j>µ€z›šJ-¤Ţˇ^ĄQÓ(oʇr¦†P.KąQ<5JŽŚRQQüEŃ4`ň€&ĺpĺ1ŐźUۆ9Ä9tŃôu!ăĚ8r`ń@”1č¶ăxÇÇ'N#ťś.věŹfg©Äű˘46Ia’"”Rv=gŽT~=MI%Ů2 ´0"ÖBFVv4Ô]2|=m…¨ČjŘ+ ‚.®zł"„ňű8™.wwĐCdT ?}+9¸„#®t5ŞÍ89ż…1Ňy‰»ŤŮŚ ŰE_Qsß‚~–çŘŁŇ9€X0đ+1‰~řţŃ×–§D†ňl‡)wß~6ť¦“±­§!í+űV8Ť.2É‘Č_ +Ń“fk¸z°­­(ÁŹ' Qę´yźÉşo‚mź #ońĽ¨řÔ‚ĄĄ¤Ĺh]Üâŕ>ž¸—® ¨BU×tá=wp/űzyyů^ľsűÜ™Ž g˝§đň颢ć?şę)‡Ţ)%ă\C,dl^ q9|üBN:0/żţÇŕ‹ßţ|«âf&q)ňă÷ĂN`š ˛T@A] 5Q<űH›6¦jKWÔřC†%yž, půG‡ŰßvY&ń"NńTeFw¸´ÁĽă«Ź*huJLĎ>hܰ-沺Ë~—¬ şnmËú#Ŕ ňAjĎaS.đšră$AÍ=uŞí‹ŽSo˝ÂŰ‹Ąq™ Zci¶Ľ'Ă˙[ĘýëT—BeX$&óóČÔˇF ÉMÖů®žwɡ<Ńŕ2š=Ś™ţt2$Ú__S›ł ´|÷@Ú`ŹoŻPŰ­Źé[IÍ0ělúµ Nˇ=¤T‰áJ7}mń˘˙@ľNÍvŘ#ŞľĎż&í3űVXBŐĘ©ëäÔ‰ivÔŁó·â·†™˛÷SYľĎdoŽ/EÄDQsIÄ]˘•啨á -ş.ˇ8xü6÷âŐŰß.„&¦şŢt÷îV­ŢČçéj¬ueGŮ*+ŞŮÖŇ&nŢýZú>¤Ču}Óࡠ8”°;KhXgÚüsjő–Ż6Ŕ2&:&b˘Opů©$>»lKˇ™Ę$ÁCm€Řú⢦ťüÇźC™\ŁU÷Zzş÷”C’48Ń–«2$ä¸qžš”•ËçëµŔxB{•€É8UÝ[s2őm­ Ď^¶áĚ|MťŰ3´7‰})ââ­ŽÓކăkĄ\®řË%şß€^Łml?3”a4Ű6}ÖFí,¨­ă±Býëů´űů¸km;ĐĘłsÖć—A‰ŰŐ~Sékíđ{˘ć¸ő2`´×ĚŐÇBŞaěHć1\}Ý÷:µ|̉©X_µ·nűqŢ´µ €ůęX¤Ź@fćáAđ"æĎîđ~°ű*´´Ë8ÚŞv0»™ŞŔlŐ#ŠDXśÄ°ć”đ°ĹÍoŤůPŰŁt1öIĂE Fw*Ą0Tpĺ†ý†4Đgňن”Őó€™6żă»uŹq辢\ČĘrŚąĆĚ­ÚšŚ˝ŔÔ”•Ő\ AÄÓ‡¸M%Î?ŚÇ!8şîaqo~rĺšűüú•ŚżÁč$Z_\ 7ŹrâDâ*°ŮdČť HmÝ×Ř(g )ň=’Wp:ÇšýWĚ3ßďËďn‹ç/źţř=űěJzQq÷4ĆźVJ[¤+v™'TźšWuksé@E8”Ňš×FĚí˙VźĐOů)»ňËg ’ÖH'Ł#RQh9TÁšăaA2V©m`g”;‡EĹ'×q×UĄŇCjÚ+© ‹ßtx¦7$u1x”.«€fdţpÄyŇXâH\ţ9‡âČŁwŞ„Ů8†#»čŇoζ|ŕđňs¬>B’ĎáŚ/|Î?‡ç4˘ĹűŚ·ĚíMi»4”«Ń×$®ÜĆëJ´…Ŕ¸{zM ŰU’ d¦fÄA¬.×ĺ張ú…``¦ţâ‹,jźţG“EĂĎĄŮ“Y°˛¶¦ÂHßťYđÁŘů°{[AŤˇ.łű–Ëß×gšRŞ…ŠÝĹyEĆíqĺYE˛š”–T d!Qpţ«V-]şŞµ˝˝µőĉÖUţü/Dâ‚ç­÷˘×áÖ¦úĂ'ňůÓôTŔk=*gk…Í•żă‰řÎŻ§«[˙¦ř-QĆ ±>š›ô˛YŠe »¤Ň.®A™2Q‘ąü¦śpC<|Ôv¶gVńĚ1•[¶2ěżNšśřtä­Y'yňÖďvŤsż®Á+tTĺÖĆ1lg…ěkF‚D–D1ěă¨ŇÚÔngjζ d:ţČ­ ńťĚĎÇúŢ!ż˝F`ůI?Í–ŁüBZ%s$«:˙ÂSY"cűÉľi'Îýi·Ů€ŔzqR9gJ¬ÔéuşĘD“©˛Ňdť’$Jű­Ç;—w~óÓ䢤^ĂI^vÖÉ´~y ëOC*„Ć…ÇicdiIM`0¦ćĺa'Ă2-ą‘ÝX}|j”ŔćÎúáŘfô%ĎŽ1J÷ß>ŻŐtµ>Jił”Î=őĘçhmfV„0[Ýë˘íčÚ­_ÚŻ¨sű|n©¤G×~Žű”=T‹ ¤d5ČďąóEÓd,ľ‹Ž¨r8ŘW(âŃÇŁ™&“Čh|hämşđx·>°o…}đWčk—ĺŚwJM¦Št˘ź |‰J—,hs,·ĘR¬U–†Ó6G˛žUKîĐc˝°čäĎ<Ţ©UŰ{ZŽě™]÷iâzŰăŃŁŰwŃ•Çűö}B/“˛™(Ą¨žLɰ§Rű?eÔ“aýÖßő†ůôŢqâ4ŇÖç9¶Í6•ňÍ—Ç u jJF ,[Ăçä'ó—[ 2+Fněµ[’`˝[¤ýĐ 8(vuď ůNßőçŞŮ¶›‡Ź*Ű“ćÍ“ufLOŻ^|fÓl±Ć‰ĺW“<”R~Î5‡ÁFžś§ÓC!,´ v xž.l†&[BČ*0Y%~u–kŠ®‰ ‹ŤŽ «‹­oŞ©«·¶÷ş'%IŠĎĄI˛>ĂU&ŻOČLÎŘĚ“ë˙ńĘJ…\Č‘Xj(©*()ÜĆăő'^;÷‚vڰ3ž.jNv.·[ř5)úC®¶ç¸.–'zú“c¨ş˝ż˛©ńŇyxČ ăřëÄ…gG‘3gNX—ŕúŚbží,«Ţw > stream xś’mţLMSans10-Regular‹€řÚůJ‹ ‹ ŻřÓĘÄraPVSB170–Ü÷¬˙UŞ vř[wÝÖ÷ŰřÎ2ŠTZl]ćEüVÖ÷j‹ďÓÓíŤ˙ŕŽ€Č÷$Ŕ÷/ĆÁÓ÷aŮř-÷µńBŃ/J^{p\‘Iż°˝Ľ‹şłcA`ű*‰űa‹3`¦:â™éŤ¸Ĺg÷‹x‹rixnyeŠ€‹[^˘µŃ÷6’¶Ť˙~ă v÷µĹ÷·Ăëá÷ÓÜřÚř€ö(ęűűŤýJä÷µ÷;÷őć÷:> stream xś]=nĂ0 FwťB7°üÇ.é’ˇAŃô˛L" Š=äö!é¤C‡'ŕ‰$@~ŐńôyJq±Őw™ĂK1MďóZÚŻ1™ş±S ËËô 7źMuüňů÷‘ŃrŇćgĂę§wť~ŐŰP'Ľg°řtEspD`0M˙JµŰ&Fzµ¶ (4 k ô!ÚÂęDw °Ž˘=(> stream xśuU{Xןa—™ IŔHÇ]Ť±FżZ|`@I>l0VđTÔPAV%ĽvaYŢ ěîśŮeyżQ0őQýÄTŤDSiű5Ąi•|&±)­ íťĺîJďň°ŕ×ţwĎ=żsÎďüΙ;4%wˇhš~!<""FwđŤLť:9->%ůgK—lUHOŚIuz•ŔŹhyׄs®ŕ.wů~–ÎSJz^zýYÉď9j.IAyP?˘ü©UÔ›T$µŹŇRy”@UQíÔއę§>§ľ˘ľ§)šĄ=iĄ^í,—ź| Q­‰IU''Ş÷ëBă7Ră·bScö%¨uSÎIs†[=Ý©~âҤ¦ÄĄďÓĹŧic˛¦gŕRcââ÷Ĺ$’SZzRRŚŽ4ţtN3ŤE¬nšˇÎśf<Ť§~‚·žÇ­ ¤zâRý߬ăǤř8Š˘ćşĎ_đâB?˙¨äíÎUËW¬\´š˘ ´‘6Ń ´H›i ]F[érş‚®¤«čjş†®Ąëčzşn¤›(oçPäÔ+ÔEzťB׺¬wA˛ťrůů#× ×]ďą:ł–ů%s9Ë8ŘxtĘcŚŽ¤Đ˘dhł}P!Ý`á¨>2˛•öl菶‘&ĄÇĚűĹŹ”ęůŮç3htč;™ÍÄŹä(Ŕć’ŠWŚćlF*썮î@Ł …‚Ň#ą!?4xyÝBn_!Ęl1›ˇŚ«> ąą&0™”á×`Š…e¸+÷¦áĹxŕ@°»uŮ=ŃrüđxńC~4\’ŰÉ/GŽ/Fóü~(ŞÄlŕňЎĐPVj6Şţ†ą»xÎU¬BŢřj{(ŘCvŮݰÜ‚˝^ĂnLFąÂJ¨o0ŮL¨~zí ä‚B‘0„ş. ŢchE%Z(ósYIŘhűůŮÁý4:Ţ/“nSŃŹóÉ ĘďÇ=üČzöiś©_†>qâH¸'ĺó#Wp~ÁÉ•MÓúßDk~Ĩ€fA4÷vbď;jč3Ôq¶JËkh BÔ¤@łjŃ&±ÜǶž…?Csĺ{Íw»‡‘×ç•VQ„f®UÓłLŁQböĘÇá çŘÍÂZÚńÓ·_ŤŚÝ›śW$ Y˘PYú×mZq %LPŔ9ŞXúŻF‘‹ÚňÍĐ\«(¶Şţ7ăŃÔŐ`Ůó+<÷K-Š2¶ƵśŤ$ŚB«qä#]ť rÓ  Ëc…A…¶b×: qśô…]ná5(t¦¶`žU€7 %>Ň׫U¬Î ŢíOćU\JŘfq:ÚšĄN%Ň!Ż:´~ÍŮH_„ÁľŻĎŃű~÷ÉúŞq<ĆäŽk?jĽÄ»ş_˘‘-‘ŽŁ%2^~…\*.±Ř7ńâuŐčeöĆÉ ČGy‰Çi‘,ň=ńöŐăËě/˘±Ź2RJźňňé8Źc§<ÎA7ő´-xŹgî9şoɤóĽm…ęÁRdŮÜĐ•ýŤ©NC‡ľgá:ÔO|°ěŁőíąü»ćß[jÍÍ`ĺ¤í,|ů٧ߞk¨ ̸AĚL~}â>eĽfű6a‡KXĽ”…eđÎŽ‚ĽäİwňKą# GŠţµ«g%„söĺ,ěM˝;ZÓŹę»Sk÷j:kĹŐÓ•zže§:ţ©€0›Ę2«|^ě‰ú \ç$’˘ >ŮŮ—ŢŞ?ş»˝Đşý]-p™&!3 UŐŮDE7żd>ń ă0éiäU§śX:´ý3-fwm}3ë c) J9;é)(<ü'1ą‡ťLąLłĐŇů§3'ßWžîüč·âM•°ô4§úúkjOśľy˛®|Ľ{ŹŃ\""aĘeĐŁÖ#ŠšâŞ‚\C~ľAiŻćmďâ[VáŔĆÜ›wQ¶ăS Bĺ1_é"Ď\ł6€Ŕ×c̵]ëśü}^ţ¨›&ż·Ç7©LÜÂë0›¤/ő×â·€ł˙‘ĘĄo+*Ͱú€őpµ}żíyé^€yU¦KĹ÷łďDµçÜŚ>ĵ3řtÚ•lŁA0–FČ„CR‡ă Ź˝ÁţCa”⇪ YIv…!_Kć%wkr—ŮbSm‚ŞĚapćBđŔ/söPV+ ťĘëL§(v¨¤Pň-·˘m( yÖUOnńä’ đĚÇdtwd¶—‰©ŔMä&Ś—l“‹hż­—†'’Ęţw…4f~˛¤DPćăÉř$}ŹD:s˛OW86 Cß8+] ăm!¸)ě© ă˙[a2~ľ3ß CM$;!Ƹ’Ď(P Ű!ĺF#Zn™ˇĂú±‹~J;ÇŘÄ«hIl[Ű»çë¸[·á>Gäšž„ Řď6Ţ‚0Ë52í˘Ř¦šQ·ÍRHAä!}f'Ú‹uGz4ŻĹrăČýŚdÁ,fá8Žçr>”Y·˛¦¨#c`{÷ŹĎ €Ž€fĐ.¬–^˛JŞj‹Čśs­t“ż•â>«µŃ\!–‹e–Šú߸»SÔĹysýendstream endobj 552 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 338 >> stream xśG¸ţLMMathSymbols6-Regular‹‹ůŮře‹ ‹ ®÷¶âÝŮ asteriskmath¦‡,Ĺ÷¬˙Âô÷tżůŮ÷ŽĄr‹}ý}r‹qq¤‹™ů™¤‹Ą˙~â÷˛Íř©÷1‹ ~ű.Č÷)Ç›‘—’‹źˇx—~„‰Šű$1™÷%Ťś|yz{~zŤ€‹‡™ű ű$ĺ“‰Ś„‹~xuv—†š…÷*Oű)O{…„‹wuž’ŤŚ“—÷$ĺ…N*z›~śťšś‹‚抅É÷:–„ś€“‹ž—ˇ•łů§˛ˇż ż  W/ «ŚŚŚŚŹ“ ü>‹žendstream endobj 553 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 583 >> stream xś-ĎMLÓ`đ·l3üÓM“ö˘1ąz0ŚĆÂü Ńá‰Á§¶±Ť}ŁŔćĆ;V¨+ŁŰ:°”dáT>Ś !3ńz# &ÜÚĺ%ÁţŻOň<ż?”ðS :ťÁţě–Ý`6µ^©}đ¤Ía6Ř-DÍr©tY $”yyöäć‰oÇÖŹSLϸnúĂ& )ě*¶,ÍVďWd~W˘|ZÄ6·rI:§†śŰé÷ľ&˝wśz#ÄMá|r”-09ę˝T7”aç!ŁM{FÜť«/Lú3¦9ÄQ "Ńt-Ývqm‘ç©TC±/ ó07‘šá Ü8„#{@rĂßרӿ´AĽŐ8ő}aňʏF Ëç>@|3U×O…ýŞę}l‰ű'“.:wc’ćÇÔ–BÚ-)ŐY÷ÝŇaí°˝őĄE^ŕÉüžýíą‚¤WßrWqwo";1śťˇľJ—h6žĄăÚXśfá8ľÚ4Ótţ1Ň8Bt/Çņă1rzçsfâLŔŢ,żO=B5=00iíˇôŕúŶ•Ý%I“&˶} fQţů—ŘQČƲLčb˝/lć.ç‹Ď Ľ@¶  ő ‹C®\ďY(JÄĽDdµsRľÁŽŚH–É#bŐÜQ˛JŮŘIT ŃÁh,9ÎFßĐŔ_| endstream endobj 554 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4097 >> stream xśĄXyTTWšeIů4„DM%T’y/1Ń,ÝnY<1鬚¸‹". "›˛P EAíŰW µB±TA!Xʢ€ jŚ{ÇdŤ¦Łs’¶ťdNş3sn‘ËśĚ-$iŇ“Î8Ýüš€÷ÝďţÖǡ&O˘8ÎôŐkbór’sľ0wEQrvfjř‡Źĺă¤ďwŽ$F@$"'w<Î_0-š~çÓRáŻ'ßÎÍ[’˙®°°¨X”,IY-M]S’¶3f׺ôŚĚ YŮ9sŠšEĹP먧©őÔjGm¤6Q›©w¨xj 5—J –Ró¨­Ô»Ô{ÔjµZN­ VR/Q«©5ÔZ*Šs5‹ HM¦8+9 “~;é6÷ăÉq“/E¬Šń„S&O9B/§/M-›zsZ˙}9‘ŹD–E^ąż *"Şö·řý¶éIÓ?ťŃ?㻇ŢC­Q?LşüA” msF×ń=(KĐ9šŚĚŽÚTo˛ĘA VSŽoŽ^ŹÎŽË+Š×)Lj”ĐĘJ€Ćf ěaš!hlÚáźKmÖ˛…y%řŔë¬rŐ|ŠřѨ”çÁ/›e–ü5&\Ąl­hc[ˇÍŘ´˝ęXĽů8“‡bŃͨЀG+9Ôp’ş„žâ»T /7JőŚ*3á KŐŽ@ŁgżÓĎ6}Úv> ŹycͶôÄÝŚˇ/»c;AR”$ŮU¶€VW]ł9`gŞOůNµÝąĺ}±^Îľűôr0^Pî,Ż ¸ëjmĚd˛7Gý;ú!ľdÍY’ŔŞ„zč­űsÜnAĎ٨áî hŇyTyžҢţw«>x GářIü,¦>Üř ŠB3ĐShłŞ‹I…8"+.eéaĐÉ™űѤ֓lçůÁ}ť@6m‹eŁFÖ‰‚#óôě5î0´’ĚVł@@ö •†YůZÖ©-űV‚'â \„•ř 4i.š‰8×®:śě­›5_’»Ô UëM*“ç⩯ĎzÁâóčń˝ôć×čQvđŁŻ.ühÄŻÄěŽRc‘ˇ”UMQ9ˇÂm1׌ťo ˘ůţĐ|?'´ü7¤G˝ü[Ű/Ľ·zó*ŤŽQIoČĽ§U‹ôĄ,ŽŤWgk´;A P‚Dí0V4-ĐĚîcđ.šmf;Řá˙F@)70â7Ą…‹~…w™]ís ĐtŠô¤¬UX—łΨ­pAE%Xë¬L#zČč`xÔPÂŚnć•„Ůᄚ VŔH ‰íQehŐkA ˙ Ąńü`6Ű«˙ ĺFŰ\`%+ŹúS« Ć9óÜn¨84“?¸Ě‘·}gńć]ŚęTRuţ?ĚÁäµVöˇţ‚ Ř ňR˝¤„´¨F]]×\ŐApň´G„.ž˙DĚů׫hŐnč!4ź7—ÖlőäŰÓťĐG75\Ľ~ (Ęr0ézcči…CîÔÖµő§v­Â‘ł“vůD.%S+óé*÷čË!ŽÎ/|OJŹ÷(Ă8H&Ż—:ËÔiú¸µ'3>BOBÜăLşJÎľ 6&N;ÁEߎ †ÂdTčňě´çVÁ;Z«m[5{ E|Ϋu°i „ýŻ-4[Ěž0˝4ŐˇŞČL^±÷ÓÚŻó–ŕ:1”“˝loN>ńÍQôl9vøĚ=éâ†ú~R*S‘–ż"ÉČşXWď»űŕŹQ§Í ‚śęrWYžZHł÷F+Ś:8yWĆv U}­§ŰďÎłÎ@EřéžÂ®„™ř­* łŐkcśűšî|tĄGW(TÖłY/”m4zá©Â#˝íţžĆ“¶_ÔÝŕVkŰ+O‚•Ž mvŢÉş!t˙ nHşź?(®’J„’"•EG¶Č·î]°Wâ©[ä‡z>h»8Ă8ďy”TĚŐ§C=űЬ˝ÚŹţ»éŻ:ůÍYnČýë;ş„Z¬¨ wáQWIł4iŔL’ĚĘ|˘t<…¨ŘśV_CŢřÖËDýŔÍţlübHh})íJČĺňD`Ą ß˝˝1tÎŘ`2RÝWĺ~ľđ‡Gý%Ë·sŚťŇ$U9M¶˝ű-$N˝Ě©Ě{9ć<´Ń.[50č±PW„™÷Áč÷‰ĹP âtÎŞĐ”‘ÉŃfž5úáÄ;tµŤäŔv¶:Ťíw#¤[ ĄŔérš+Ě1ˇĂ®6»ó,j]$$“Qž®ö#Żżú4'ôz‚ďÔZÔ “¤›Âe±â<(R{~UVM9Ńi(@cěîďíëëąóĹMDCíT9Ž©LĂäo+•‹AJ‡tŹ, ÷g˝$ež„\»ŤÖmc=űÚ|AđC­Ę«í»ÉwŮĄĄJ%ž…gE/[–ř6¨i5‰Ě•¦ş±ą« ÜP YµBŻt?Đ:ŽfČ̆qÂRDűüOűŞ*öZ«X4+tŢl·Ř~•żj“žY‡Uňa0é^%ńm1_“óň/Jâű<ø$*ýHčG݇Őĺҵý22W¨®µrěuwłĽv´ĐŚľ]]ëžÂělĽtÎĐ’/Ć0ČîDţřUČbDÄ^_üĆ]tO /“„[•(0ň»šs#”~•;â ĹňŃěE(3x;ŢUX†źľ‰'#% dTŠĘ™×»ůx3fńĽâ…ő7PÔ™zĺ:šÂ|ř§ë˝çţüâ ü…ŽáU˘®Ë!e˝ôqŻ“?Ś>ć†bGćw§R~#ÄgjćD¬ţ)k±§xKGąĺ1F•l­@‘\ľ-ô 4—Őu:lűŔ9&ÇEEŇÝiťE®˙ň~ć,ú$âę_ăĂ›Ľô˘ëçh'¬°Ş%™m>(h‰WYÔµ2?ŃŢFtŃ®sG’BmüĎWś{‚ÁÝżDżżŃ;’=Ű;-ĐA¸ŇćŠsWXKőäŽ@syh:ŠţMc_mäT5wË˝aÇÖ$ŰÎŕ]DÍ®.´‚ŕďF÷î°‘ŕ$Ză =ă#BD°É‰áŁIˇµĚ·¨LTbdLQÓĹî9Ű7t¸˛ó%-4FŐş\«~ţ{®~«’weć1—Ńq‹ÝükŇ•„@xÎčuC™ÉA™«ĽvŻ˝Éa!k¶k˙ŻÖ‡ŽŤĄýő 4sđ(±šatĺo-X ´˘Ľ˘±ÉŰQw„=…ąö´_'ÜÝś67~V7ÁaZšn‡i‰˘@[˘‘˛Żáu1”J°ľ[ÔúDZ§Î|˘9”Îß+®çäćĺć×—ůö›÷; ]qa3%śEÉg¸ˇRňáZj_|ÍóÁč,×6/\¦o^»ő xrv”čs#A‰ŇsĎXÍBić»eÄĄŇŽ@ˇfcv}ü6H‰ÄLĹ“ČŐG[R:ŇŘú˘:ÝGâ3Ňč^y]$Ň ^zÁK»˙ě¶4Űł3‚4NťÂh’é™Í8Íd0ŞÉŽU¤şÚĚćJ7Ówş9Ą/ë©G÷“ŘńzxB¤é=}qxB ÓHy¬dmĐŇrĎţ°¸ÚŮ ŘŔ—ŐowküžŽC=˝ýDź] ł1S§BéX* |-M’};ÖíŘ´=ŤŮ°\¬–Ş˙Z}˙<†PjŁaXË  ×9Ňt §—*ěěllj©e|mUďC…¬ç6é!MhźĐT§×€–É /5¨ĘJb2˙ź˘?>ÔŚQłQeP@©`S[F›?°×ËÔµz/„łýČ» {„ćÍČů{eź—Îh/n l…őť˙ĎĽ>©¬qřL?ZSŃ`ŻŻh¸;O ©·î‡-21ů})»×’#čÄ(śe^·Üńţ‚b‡8_ ŕ˘/Pixµ2ÇňÄ@.JaÔj%  stA±¤$[Ŕę±Ří>°“‚ĚMTP$$˘wüˇÇčůë ţůĂpőň0Z?Ś^P ç )7[§Ě‡2şĚ% Ôď©í¸„iČťó’˙&‡‘<Ő<ďŐę+ŢΆ÷OŰ›ÁAŠl“D¬+)˘1—ŘS_ZćIŔłsçľ'cŠń¤ź[Ô{©[Ë· ”éeń †"kyÍ‹bf~ůÖMuőÜ:„žFłö˛gѧHÍ[Ž˙Cą©ôÍâ˝fgĚfĐB&ü]NâÖ±żŠDąŰNČu|ĺCŹö3žVw›Łý#ô]4Ú5ˇó†×í«ۤ¨>´ÄŤ -µőĽŕ´ˇűi“ăň"§úH‘&L·őx]ćČHŠúŃČźűendstream endobj 555 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 294 >> stream xśäţLMMathSymbols9-Regular‹űŽů\ů‚‹ ‹ ®÷ŠŕŰ× lessequalj]‡/›÷¬˙}ů‚w÷ ¶÷8űkú6™‹ vu‹x{ţ6{‹xˇ ‹ ™˙`ű.¶ů\Ń‹„Ź€ü­÷—ř«÷”••‹š’‚‡‰‹…€üĚű¤{‡…‹‹“‡•†řĚűĄ„Ť‹Ž‹š’—”ű_ˇw‹|üŔ|w‹uv ‹™řŔ™ ‹ •łů§˛ˇ¶ ¶  W/ ¤ŚŤŽ–ŚŤ‘ŹŤ” Ż®v:endstream endobj 556 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 272 >> stream xśúţLMRoman10-Bold‹€ůŃůM‹ ‹ °÷rĐÍĘTheta‡”÷¬˙~p€±÷•÷ ÷”ŻË÷"Ěş÷•şťş‹÷"±ůŃ÷č÷^ű÷/űűŹűű4űYűb÷#ű%÷÷÷÷)÷^ű"‹J†3[F\H@sI‹S‹2žVĺfʆڋɋԓ̻ܳÖئ΋NŐ‹×k·C°N•@‹:J1÷Q\iű•­\űQş­÷•i€–řP”÷^ •–ş ÷  To ¬ŽŽŚŚŤŹŚ’’­Ç ńÁs@endstream endobj 557 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 195 >> stream xścd`ab`ddôń ĘĎMĚ3Ó JM/ÍI, Jtw˙čý©ËÚÍĂÜÍòţ»¦Đ)ÁăüG@€ŃA‰‘‘%đűľ˙LÉR Ý›~Ěßtşśńű҇Ě?zĹ6%°«tĎX#˙cűĘöî\9OoŐîônŽöĄÝg»Ź/çřÓËžŐ]§"—Âv¨˙f÷a ĽŮ}¨ťŻlÁçYßó§N^Ŕ¶‰ë·KH>çęžŢžľžŢI=˝“Źóđ00ľEăendstream endobj 558 0 obj << /Filter /FlateDecode /Length 6152 >> stream xśµ\ĎŹ·rÎYČ!/Ţĺ˝ !@zMżćoŇ‚IذŤé˝ż¦…IśçÇŇťärˤIÖrĆYěi8řŐůeŇčw—ľ‡|Ż6‚ĂŠ­¸ŘŐZ­}?? # -a&ť‰«—–;Z˝äţŮô?%ŹAt Ä‹›p Źťŕ ¤xŹÓwš Ţ\ĎO§žy3ĽńÝ9Áš>ýusvßůéŕöýÇoĆŰCeaĽa¶Ä6w‡ţćjŘU×Ďn7ťN¦]~·˝żMşM‡‡öę»dš‡ŰÝÜ1ĽťĚ3t§:úf~[’i9ŰÇýíńŘßá6®`ű ¸W%ĘeçčŞ`(&L_ŤD8D,˘ňpęjôB +ŽÓŹ’ăźšĐOˇÉ@ ¦PO8ů›ÉŃ»”Ôšk(0Ă>öáR'RĆXÚ7NÁ쟢;ǡr:`|HČ—Cô’ĐYî…˛ůEČ\ĐíĺFRȨâ~Ë‘ëOjŻű,,Ł"ńÔá"Ľ{¶ÚÇ-AyÜľßxLŁ»VčŽĆ Ü"¬Ďű[]W„˙4‚OÖĽnކ_ŞsµÍń޶I“`¨?őڰw{ ُ xÄ6Z»v—GîŹĹ{Ř·R0ąÔ§ŃDç^6?ö©®ĄÓ8Îr+Ř€#¨dĺŠ\ „Éy•ěµ}\Ôë*qĚNŃa‚îLeČĂp„á<Rź‚–8×rÄ&ą—ś˘)ÉM'??ä…SćH]¨ŽH y˙ĺ3B^Ď”1iŻš—ČÖ`03Y oÄĘаŞÁ’·VĄ örĆUڦZ ]ôÝÂäÔé»–Y± Ç0Ő“›iTŤ;? űĚ®®§C2ŕQVĆM§‘h=a)~Ä>röQ­&ŇÂĽuO’Îë‚îůäűEb§({®FG SwŢĆm„±…AěE§@BAX†k–*Šyń_Ž8$óé/Ýá8 ŁšwKç\ ʱ_ť3q}˘+Ĺší}.đZŚd|¨Fł]ZR\†[ßZB:f˝îÓ<Ä.NŞÔß0©č§qőžwKĎ$šL2‰ó™<\7|•YÁtf&útG·NŕBbN âj˙ȹϹĚ/ˇ®ťŁ#QKŕDŬ˝Í­ŰÝrW4YŮŮCżŰ¤łLaÄ!đlJ«fŔ FôÖ ž5ď˙č„§ćC–»đ¨€“~Ö Xb˛-€{>yźĚ´(:ĺ^M¬`G([ EÇ8ťzžÚąÁFŇS=CxˇcůÁ‰ŹĹ2ů î§3f>)ěTF9öنžĽ¶Ĺž`•qŘÓ—Z+‰Ô'ľŽ™Ć´¸ąŘŻ{RîظLŁ•€3ĄdVí}fDŢĚ‹¨ĹgpŔ`Ź˘ĎL<#™ßš0şŐp´%7!Ś4?l‹Ě}ˇßa‡U @üsđO߇1C€÷}É{“Ľáŕć.Ě÷Ôµ(&!héZ Ę)C%ý­Jąw<Ü K ÎÝgkÉ{útóŔFŚ«Ěd‰+ŻJ”GfŹŞRšÁÎU‰a‚›ł{ŞéÇăâő‚˘ć­ä˘{}IvKY¶2R,ú)Šm!`Ź^ 'Ş*ĆÚ¸–qÍVĺ-—ÚĄ#EŢŞ6?Ą´—<ćía›Bv­ Ä7p´ŘáHˇ#l0ĘëćC}éMźářß§–ř=ýť*2–ť b™g“ö=YĎ!ÓŰK¤ęߦtVL­ćÄx@AřşĎe'WHĚWąě ˘Č“¤2ĄăsUť!C{dĚSluŘ‘¬0Xŕ`ž¨‚ҵÂD¬’ňfuBŰ$Ą9âPɰ:Šfab_(qاÔáçr D\ŕ´ˇRq`m #3SźîW©O4Ńť¬çśfÁ&±tŕŤ™Ŕ=wľ»Őî 86ôëT“Ú9őÁDSŽq0 «N’«°]Ů30ý†E?á3ő°Áh=[‚tŕô÷n›a–IŢýuZŇ5Ź^¨·>ŹŠ’Ĺz†'ˇuŻ„WSĐ˝ŕŇŞy?=ů<Ťg4 uŤŤ:ŤGJi×h–{čµŕ e€vŮ(ňu ŹŞ×lĹrřrQĽpĐfÓ Ö ěHąâpŢáŮ14t”0ŤYů‡bŔbĺ3ˉЗ˙eDfSx6(/Y˛ű>«ľ:ń„¬q‘‰CÔţŹKÖ wSýaH“MÉ3bÉ“$ď•dĂ|~+Iú`«Š e‡©ž”—ä#r;$/¬řFKŽC‚_čŚČ«Hć~–U~8ą_·TDIdŞ×ú­jÝcI«Ş2ń YˇÖř)ź!N*Ż3¶Ä{?ü’Ř ĎÝpŘf mRß̦^ó\d?öˇ#ĆTĚ({dg5h –ěvÜS?öiýŘMĆ=ď>‡„  }2Ú!j0Ré$ËúeN}Ćє´Vą\0äp/Ľˇ@Sp8pŰťŻQ VwÚl_ćEޤôéDĘF@ov*‘™ĘŢNg5|4–‡Wuć[´r¦@ëŐę°řDŞ v– rÉÔ`‘8Ü3Ąŕ`ω­x_¤%Vî‹ŔÔu7a§}ďxî•ÓCŇĆFp:Ż.-Vfˇů¬#ćÖ —/•7éňs\„-ç"íďÖ3hékěő #U±!č%ŘÉ 8OŁ÷á'8Ź´~¸§`Ö˙%ô»8xáŞ?.$K (Ű}AŹŇŤ$ÄăŘŞI¬Ç,Ś“śrĚ’ú†>?• ;E1ă*b)ÎýIüK˝±Ą§˘çĐYŞv۱šâ«&š§¤R@DôbÄ…ű aµŁ dÔ â~‚Źţ:v¤šżÉý\ŹÉTߌťžćďće–4™‘5Ş>â~‘őAb ů»K†9g@(H†af  G8ż`l>Fši†)‚P182“ŘŹ5ÎŔ [öŔŁĽÇÔ„Ę|&R˛ľö±ţŰ5ĺj='‹*ł´Yr‹Âű„ŐŔ˘Ďőč‚ütNŢŻˇną;ç /UŠ˝ŤÉu_.o/R• @e6łyč¸V+ż*+÷4Y!§–Sc-Wś§ěf=;Ić"ŰÓB‹ pQD§Î8]ČöşxK0,î•ůŽ`ÇźËě;ţ%)âN.2„±ó[ Ú‡ě§BÔ¸“óě ÜŇՊ¨d¸„Ą.«®[âŤtťK1îžČżu‚»'DüŘÉx ¦ł˛äx!ţDZlłˇE+lŹŇ– öştô”3=)–'K…ŻJ…#?tžTř”öĹ~ýőX ĺ;¶˘ŮUÁdŁ_VWMy LO¤4ĚJ·ş5ÖÎźůzVpVWpđNĎMyyąax»áŻđ§"gýUńÔ˙|97¸Çßţ9č~¨8|˛ŐS™ţą3˝üĚ™};ÍĆ´§Ń˛Ô¶|Ć™¶±ę­ěĆŞ şÂ©zbťßHo`w;}ŽCžĐ:>śD˘“›¬Šť‚~Âg¦Y-żYds¦Y-Łöç"v­pČ×ÇRŠqěË^V˝o-ŤHË0•°KŻwˇVUâ cΪĵŁO‘ś%qÁĎřäE݇ÝMÝłóDCĎ“ßɢČŇůá•Ló¶1şzÖÚ9~5ëĽĹĎćöCŘ˙ÖŐUXĄ€q°]”#ž„@ńÉ’8áxž ‰ •ťéxbźŹ;žiôuŐaňńŁWý Zš|Ă‹0]yiY5ä)ť‚Ĺ©oËGáŃ|*Ďa?ÎÓ~ÜużÁZ9}ˇcE¶ś!;ó«Xĺ©dm7]ßűk錥OéÓí±ľt üH˛ P.‹—Lĺźe•\¨^· ŻtĚGÁ ÉŻâÎW… X'̱3í?őCť•EBÄĄ0újÚŮŃ!ĄMMxŐ׹mwX¸Čt'šÝC’ň;Žôm<ä ”Ôt7YZcÉ”š?oďʉg‡ďóŻ O,-–Ľ•Fű€ĎHĽ*[m˛îÂ÷Ľđň)>^”}E†Ďé'ó_F O-?űS[ľ˝->“滤¶˛&ź+“ł‹ŻZRęě$Ç@ýu˘p8ˡow[ź?qR7źđuNŮ;_´ÖŃ'ăűea948ôëŹîˇ(€ó‡,1ĺI‚2)ŻíqjٵţÝnŮ¬ŁšK*ŰŔnŐ’É”·ĺËvŞzzW[@ăűt´€ârB^Ö7>ĹŠidĺeíűH’U]^b&}^„» xç~ý+XŹb}şÍbOn–iĄeóE›í ¤)JłpzţřBbé]x¦ÇŚ-DŠĄâXBqű:¦Łď7ú`ÂbĎX+&úéľę7ͤ6†2Üx‘„_ąa¤¦oyÄ+W5N¨›\Vť˛€#XÇ—ŻĄŕŕĺgĄĹŮĂ‚†ąŘ˙±í őóv./čpşŢsHśČü!Ť´˛»Ľ,GoýŘ‘Ůú»ŤÖ:ŢLµĺ¬5ń[1ęQÂqůß®EŕóH8Ѩú—"‰ĚÚű´>ăODXŽŔô#śßíWíÝŃC—77|ĺÝř˛ăZraýŢúú÷ ł»‘WŤČ-b‡‰LŁŇ+y,ü6őŚ»›Đ“ĐZŰÓďOóCĚđVhů43î§ O2ýçxaϬ3Ď—5ĂĆóçUęŠ1p=˘ţĎ$ĐmüÖĹyc•AGę˛î-tüqÚňË0čž@ŻŞĽ´“ďÄ\üËł˙N-wąendstream endobj 559 0 obj << /Filter /FlateDecode /Length 3574 >> stream xśÍZKo$·öYđ)ČÍ> ćŘžߏőH6`cŤŘA°Ęˇ-Ťä±g¦µÝł–÷˛ż=U|t“=ieA zşÉb±ž_ůrA¶ ř˙_îÎčâćěĺóońßĺnń—ół?=· Ţ4Ž:¶8ż> SŘŢe'Ôâ|wF]ž˙ĹhŞĆĚ8ż:{AžľZ҆*aud·ä0ß Iň·Űö°ů%|1ެ—+!dCĄ$Ď6űlŘĎř7ÎIňm·\qŰP¦ąĘ†Ŕ\üa™Ő–lś J-ąŰ~ żśžësţ}ţŤß*6¤UCuŘy~bĎŤ¶ě.l¨F»] Ą®V‚ĂŽ­X¬„j¬ÖÎłÍĎž ’Oű5$±ÝQHËť#(UÔBxBů ň] ¦AnŚô ¨â I…¸‡Ă>VHw‡Á‚siű1Š•Ęúő¶0°S& ‡ťşţ5Nłä—ĄŇ O®IŰoÚň)%/‰EîňŐ7Űcm[ťËŹkŰ‘´˝ąŮwýf”^JZІ 3Úů©]öc»¶Pbńă&IV?ĽO͵ć&ěőda`ţ·źXăŚ\¬h”t<·Î đľ[z5KC~ŮTÉ `Ü[zěć?^‚†_'çŇiëd>3ŘŃ\lĆ6 Š(ßöęŠŐdË50¬G7Řě’N†ĘUžDçĽôpíFh x‰eŇúĎż\®—™Čőަ–|ľš>\nwŢŔÂK§Č|Tč(„}šĆ2rŐÚiĐÓ »Í~}±ô̡R >;;˙¸ä…r|Ś.»Űµ'3Qăůę‡őîvZń“éĂe·?´—‡‘şíp¨2÷ÁÓ7DîćjŤHÉ»˙!l×q&ZŔşßM$aűÁS‚BťĹ™¶ŻÖŰ'ËŹÎF ä&©ro¦-2OC*o4ÁmÔÚ_!ĆpF)ůó×OáIűäŮóó%¨Y:`…|×_/aWqS«śŽ T>ßwűő—~>rO8S°S?Y r -p31ć G‰‰g0(ÉČěˇÔ®WTOćôńÇŹ„Ł^ŻmNá ĂOŠâžLُŇLĎĹ©ťÖŠtÉjµé Ýě7×MnWëáÉD“Ž2ËdŕÓ.zů(8gi Ş1\;‡ŕžü 9!Ó°”ët :I%bő{bUJŔeĹRťŁb˝Ó,)6±Tç"Žę^J3ŽŞdpŚeâQ2R§2ŹQs’ˇiĚ[Ič„€8>¦đýQ˛BŹŐŕ’ 'Ő„°ŕ$B¬IČcË.äOÉ •äý, ť…y½̳ ¦lXj‰Y–TfqzČË QäeŹ.Ą H=XŞŁDŞömJgĘA,›/gQIfčjłkĹÄ!e:$ˇünŠŐ* >L.c‚—ĽÂ[ÎçwOýA¸\ęRp×h•˘Üőf8źĺóަxŘCbT® (›+N˛×Śőr–;"Žá,ŕĺ4Mc;׹ţ^eٶ‡T“°Ňšş]łňbç°ŽŔiÚćd/ČćdčV—ůúív{¤/\UÎtýţ (úu €üź—©Z*+¤Í\ÎX#@r‰×ăĂÜ.÷¤|á\/_A*íÜ(ďz¨+îu˝đÎ:]ĂTŃV±Ç*„ŠĂ5eďSvÄ™ń໸H ´Ťřá®Et”ć˛FQgŁOč&8Ĺąqˇ·Óg9Nx˝¦ˇÚj`î ŢŔ’’ĘjQX‚·óąŐ&ĆJĄ0ŕÜĘw^'ÓŰSU;Ň1hnóŞ?PEv©ľ”ꞪÇťđ Aí«Ěx^ćl`Iş/}ţ«ółďĎB·C-úÇv9 —4ô( RZ,´:(F°H÷Ń-ĘWç_vŠĆČQůJŞ‹HŘ’0ůq˝éµ¨Ë÷}™0 oßć*>Ť†ĂŔňň=‹ÖŁůul~¨˛D@Ó?Ä1V.@Ő†Ć! :ú†NŇŹü)Ť,V°g9vW˛‘Őúęt đ)%KSÎ#¸‡PFŰýXÂ&i.ąÎÚ,]üYhÝ©f ±¦iáz¬Ó!µŰWÇ\ µ©CŽđ`ACU.ŮqđGšZŹ: “jčĐ{l/¦QČ TjĄ@ĺ( ˘sANဲÉQ/AŻÎDńEU˝ěÇ–UŇčľžUŞô!ŞŠB¦Úކ:čTŢĽ XArĂ>Ńy'ĽÎDüĎ1đԼ ť—ýIQ€ĽŽ¤xc­šAŹľ-€-:s}?OůÜ ź†F],µ‡đŚ=ÎÚ0eźËʢŃxŰ/9™îÁ 0®¶hë [lăua]\ ń5 d»[„k©‡Iť®tRđÂ^LJYű… GB P’ Ű, —@»ąkĎMĐâCÜ@ů˘L®~)7í.­WłG#^˘Ň•aĚ1]Ě›zŰöרÇĘř»’%°Ö.cI6wZż ‰‘Â;}xÖ@˘ą YjÔđ‹UÉ>cÜŘź°´Ď4Ç$BŰ1“żĆ.äŇ‹%ôÍÓâąŃw»y;†ˇ ¬Đnň^!¨Bž‡!ÍPsW *l{•0x§R,?¸ ő¶ZFɶůQňńÚóroÁ‡pÖv;a¸©ż•+#dÁďRĺa AŘ锕ÓńGY6–7ĚtŤ$µp3Ě<– :@©tú‘›]źKľ‰NcÔ[Ç Ę8¬č(„ aŇf p`ؤÔĂď–č@ Ť6Ţ]M@oí×7!żî»ýę¶§…Ś‹KćĆ„U?2é#ŚOZŔ'hŹűyč€ŮĹIdý^Řmµľű6ŠÍ‚Ř–>őýT}•Í{™Ër‚˘ţ÷ ěJ)Tbőö_€˘ŕ $˘Śŕ 2ÜXˇśöŁÍű§2ž?fsi“čiő9"*}ňUÉűQöÉLŃôlÝß )ü8iâ{2rć,73ß|pőËčS­™Čg™Ů'<ŹL:­ ďÖ`¸s˘ÄŞÁŢŠzmjŠí'~Ś<»eŞĐ§P=ŞÁfT7ٱ/ž):bۧ<Űfí’#pĎ(k¸LŔí§@\eé»ë§ ůe”ŽĘGÖó6ŹfGŰńIT !;uĹ`¶îQĹó-÷¨NÝP/™8„«Ô˙cÉäűÚ™˘´řÜ GéŽF‡Đŕnlç4:F(—ęô­5Ř<ŘMČYrĹŔ*ł’ô]xŕR–K7ĺĎčë~¬*ʵűkHpÚRßXůz\Ë™šäJeŮěF·ÝÍë5?ÜŘ QúŢVHŻŹPe` Ř›÷ŽQ$’€Řg…şďżzȦ„ÚôSďÍaYż«5„§cçö)Ş’ľĐúPÜ=đn5°€{ ăůo‰g‡8 …á-JMl×ÂĄPÇ–‹sÁ6|¸ÄgwŹFŽíôřTa܆#óĆÔQŐ x‡Ť‡)Ź«Z•O¸•ŞUÎŚą-ú¦˛Ę;IŞFGTcŞít‰§¸”2o „áéĘdŹëܸújË×ß â-ĺź+ŹÂHŇ0WĂΠ<ŐxY?m»›Í!i=ëPŠNk]j^l-ÇËßUéŘF,”Óác»ĺ_µü˘–•ůeSÍ/Úźl—ůĺŹŐu±Ľfş 3ţ!Ż1=ťű\,/–¨~‡|±¬‚ĽŇ4uw~CşÔĺv,5łtů Ž„¨a ŕvcŤuAˇoŞű\!.—O ˛±ďÖĺĚ4¸ŰŰ0ćó8^62)X”wŇĽ‚YµßU.#G]ËĹęV§ř*_}y ´6ăęďÔMfgşďžP¤qĚ};­tËmĆdP‡ă,D™¶™Ź·9ײĹŕV˘da/ÖѱwůĹdÓ¬nÓţJťĎČ?[®†WYđ’†V>=™˝ ŹźMöřŢQ%> stream xś´˝]Ż&Ç‘ť{ßÁ0°/w‡ďT~EfđÍxćČŚŹŘŔ`@é‚CJęě-жŽ˙ř“±ÖŠ¬Ş—-Ť(ŘÓ{±*ßĘúŠŠ\ůäď_ŽGz9üú˙_}|wĽ|óî÷ďÔýżŻ>ľüí‡wó‹t”%=ć1Óˇ߼ă>é%{¤ś_zëŹYÚˇŹďľxýĹű<G:ňë<ŽVz:ćëď.˙ţőűĎJ©ŹŁ§×˙ôĺuŁ~˙Y¶ŐRjŻßů6ĺ1Çxý[ţóHůő?ţËeëďżýĂ«)F6ômÖµÓţÔůŐ‡źŻŤtíOí1úX}úđő»×ÜŢří»ż˙đî|ĂňňÍüĽ”´ˇľ´2ÓŁ®˝ÍěŃűK}>Jůţ×/˙řň»wőQóLůĺŹëý|ýßo×iýŮÚą×Go/­Z]?ôňŃ{äIeΗ7Wúc WÚ:V*Ó JęPĆ:čF%sŻ‘uR)•Ę:µ™J5*íŃŚJTú#©5<¦fF†2ŹGV3;­žw5ŁCžEťX÷A˘˛:X¨äBĹÖ9ˇRŘ­ąîŁŇô[óŃ(úPŹô8ÔL7*ůŃ:N=ę'§ëtŐĂ;!i‹î…g«Ă/”ŠŽ×uh“ĆMRzŚJĄk“âWŠ~:­‹†ß^w:/{0™=H·‹+E›Lő`<NMÍÉO”ž¨d?P'WďÍRfüTnęĂŚßĘýQ•š© ubF·Ęę§ÚQ·Jb'úz6řëë)«ŤJŇ^¸ˇ¨ë‘oŠ„±b…ÎłSćðSІkňˇd^«š=S©<µ>ŠcËuÝyj‡GSW?ŃL~$öĽŽÇĚT {տ롼iÁ]ZńÓż”ő<óxŰzĽ¤žľf~ P˘‘ua) v ­óťj‹­Îu*… ŰúQ &ˇŞëţááúł„fšď Ą«xhˇLţ9řç:ŃÍŻíŠ ‰Ç˛:wt*UĘ:p)ťGç?ŕB÷Űţ”ÂÓۇ:Đ=@™Ź[dÄ^#y˘˝VBŘZJ珯TŃÎÜ{™ß P$¬Ç­Q<ÁcúĺhuE8Ćşşe* ufF­ĄčA\qu–žđąú9¨¨óÖü8'ćđHEA`Ĺź1©°á¶˘ÖX÷…¨ş>«mĹôau7i›ŐÍI…O][Čüň®|hŻůHFĄň§VęfŁU×YăMÝVbLwqKÍČć'˛°á؇ľ·ţl-ečľn+!ň.ĄóWBfl’ ˘ęb‹Ę.¬Ë›_"(Ľ%Ű @’nŠ–› Lî´â˘Öş†Ť\2Ăę,şMšżđ)4ö{…źŠfŞź4(ćOŢmmĹźćG<ăŘęÁ 5ńlAI «3Ţ8­†Ő/‹¶âOOT W¬ôhŐü~©<ä€:öb/ëdČZ·CV[ŃÇcj;Ý6-#¤úý¤ yVC%vj~TKÉq-ŢiM7”á·”Ζí@Ôň۰˛ß+u´ÓšôŔ]©:Ú1żŞP ťđ[µHéľőRVd§0¶\<5+M(Soě¶b‡Uż›%Ta-!én+IÚ¤ł ë†×)_AÄă–ßđz‚Öłž±WŐ»mĄtUý ໤ů3ŠfĚĂ ¤YP&ű˝žśęBŹŰz=& ~ĘD\ő‡¤±áu÷z\můS<ńViţŘčdMÄ˙Ą¬‡–gkÝvćčO|ÝR{UťĐ‰Xą„HőĚoJ…7—­űc Óé˛uí+š‰<ÄÖµźh'Ň[×µbŻéy”ŔĺŕP;“ť()żFŢÎz$ŮĚş"č?‘‰JE:ŘJÝJc'ÖCĘ—™%äYK‰—Ś­ł‹NÝJć§ÍLť[§}XO-C¸­ç)­?µĚÍĎ“_áŰÖYń”֟㦽ü'šc)mó4‚Gł:śŃL×ce«ĂÍ ˝Ĺmő›D@´Ő=ĎhýŃćÁ¬ŢyÜZ7Š^ë¶zçaŐv>fV}ă%Ô8ëČ=ôg]˝¬rKdë@=ô§źŹU$ÄKŃ.Çż}ŢúV‘Í5ôů6±uTŘ$ëF·†Ě§ů“ŻN7$(KiŃÇuT[ž€KéčŔ SÂd<ëä/­ŁđLĐcA“’ŮO¸­ä©`ëzŤšĘ`§Şč‡ď(ż#ş)Bš§Ěh¦ëýgëGšŠ~¶~}đt§b O=<0o˛ő˝ë­>y€˝1ly†Bˇ3¬Žř챕‘$4Óőcë'<lţ‰ÄźZ z:Űćˇ7ż „ĺćż˝DŘšÁÍßÝPŞîŁ1Uç~~VšhĄëiţ±‰ťFtÁ7đhˇ{Ć[«®čOCDőPÁo [můŃŰz08Úz[eڇÚWcűÄ3Đ׋ČAŠAĄxĚő8Á ׼m› ma8vŹE­ ¤'ř^_íţgסőŐŽ=ŧMOČÉ›G “R«ĚĂkŁb¦%†”ŽLÖŁ„ÜŁK螏ą˛Ři(µí«AO­qĽŢ ďUâîí9ÚR"ČtoŃŰ)ńňé«Ĺ†vڎłŻ= ô PĄ$$˛xŻö‚WĂR’ÎŢŠ:«<(TmÂú€‚”Ž$ĐďŐľ‚hA3Ca±Żźđ$ĐZÜ™ÝC¦_—řyÖ×ox´˛Vâ+ëtÔÎN¬ŕ¤ť˛@kC·f÷źđť,öî?áBŇ멯_đxĺQ@—Ľ±<ŕa@çoýú`qţĽ–ä}zőyĐgř‰Ô×OzčA€OE_‘Ç/‚öđ‡ Ĺŕuu×/z(µ®&:rXëńéÝůŢüqç§n÷ô]FÖŁÓ;NbÓ㥠VůóΡwÖlě›Ď?ËĐÎĐÇN_aÇs@›‡J4}…Ďbmć¸Ü+Žy¸x˝Éű:V6ăÓˇü!×ĺ^Ç^ĚČđ»˛ŐŽ?ć:Bf˙Ís!sűćŹ9łęľŹG+ÎąÓdm ëL¬¸ă=đ‡Ü´Ţc+öÇË©OTGš?çúT#š?ćĽóĆJr<^őwŢ8XđÇĽK©Ą}ĺEJcŇTdL^Wš‡çŞľ×zŞ\2Ó%TńđăÂN¦rÇH¬ řcŢĄ l.%ň‘}—o ±Ž ˝h“!}¬Ăđ,Ö}¶âéďcqŹĆę@_ŃF÷ÉŠ?U=0, OżĐL5GC…±! đĽ{©{Eĺn4$ÓKÁ‚+Ćň€‡Î~®ăđ¨ÚŁX5ÖŹzŰwťi¬çY¬GíÓw{ŹDl¬_đSł 9ŁŁ8ŕC×eĄ9ŤŚčÓúŽmćC›4Oű d¬ťŽŽ3Ý<¤„2ĂzHŃ•[{{Ř꣄2Pđ+ŕ1<\/t Óűz T‚[gJGŕő¨Ł‡~Ą9µşxf&‹‡_ډoáćqH—×ă`ĄÂ”třż·ł¶eÔ+ˇ^AP;akĹ+¦­sĹAôbĆ·×\A¨ *<=sĹAO=¦U)KézŰÍQ _Çs!„®Żăy°@ବĂ\Ah4*|ďĚ„°±Y• ć BžČşŔç~&Tň›GËŞm ‰¬+üŔť Uĺćń“§yf\Ń6%‡Ą”hgEÇLąÔ\a¨c§sEGO]á‡ňôďOš.ÍĚS]—ŕ\Qh*]JV,öň@áňCz®Ô¤đdúgd§ÂP; ËîŐ5R`n0Wę• ˇąňť¬ťřÄĚ<tĄk{íĄźŞ¬¸Âc®TŃNCgCQ Żĺ AěĂ*Ú‹Đ ^ŽÄ\[eqŕňËţ˝7¤đÔxŽĄ~k“‚tť”R‘ şÂgaGbĆ®ôLcmŔľ¦ˇřs®źęxy]ز—Ö ťâŽúµÓ13váivÖ\ŃC]W˙dć…;Ťoß饞I…‘bÜş¸cuSŻ4uS3â̱í4Ô…+ôž &4s˘L…'ŠízTáßü,ťB*źKľÉćl [ń†ž“µWx†ýĂŤ!IG>†ąÂ?RYŹ"E v!ö ´¶”¶#ŇťĄ°.ŕJ–2S×A"b-±ź<ůH‰™ŕĚĽ¶KÉČg]9´MUÄJ| –ŇS•?.Ą3¦Ę–2 }źç#̇2©Ą ţŽw…„Âl0 ßKá@LŹjůRX迼Ňô`(©[Ęd*8ءő©…Ăł–Ądć}ĆÉ+„ń7h(, ř[–WeE} ź,e2—íŤŃ)^â™|›óčW¦Ł÷O6S9 ÓýťMU#cK1ä¦rÝ3YŰwĚŠ;Č­33ĚÇŠ;~őÍř.ZBfčÉlfd˛¶Ż~3¦¦4u)™¬Ą¸ř+ĎAŘf\´y6˝Ľ—’•ę“c)EY ęlKi; ¬<µmţE¨ gCY Çi–0•ę<=)•ÝŞsĆ×ĆSŃ«RY‹NpX °i›®T¶č2¬{Y`MLdňáąvŇÇËR8ăůxçÖü;<ó§üŁ/3«ďě•ßÜŢNQş±”Á4°(IÉÇzЉ˘bĘRóŔ¬zËR "–WOĆd…Ŕ?VřSÓćý°řČ…>y*a_EČvsňśŠŠ­Ká(Ś]ńřCkó˛J’Ň &†îőwg"›T^Ę`"4„‘S:É&Ur–Ŕ1~¨Úł–ú7vJ•őP9n)†ZBgxhi)“iŕˇ/˛ś2GaXé‚ŔňŔTRşfń)=xĽxäFy(ř"Ŕ'9ŞKÁ3‰ĎvťĎ•çŕ|ŕŽ‚ÂA˙ü×ń•łD ă[w‡'6ŞŽo}l•ÁJłTđŞG5‚UZ¨˘Ćˇ\2§ĘA/bňz§‚<“ő˛oČTń!ÖĽĘŁY!őŔa ůWŕd}…w_ŞA›,^ćÔ8 cÖăú6Ľ’Ł Ľží2Yía:¨â?ľł–âkĐŻ+P ‡xNsĆ0@k:ÜĚ!_ŇPđLľôóşüđ}0C'xÝ/ M”8ü·EňeŻ\Wśh'CŘúdşĽ”sü…Ů\.,řMᏯW§§±>ŽĂ‡=×Ěqí^âWěiŘ+˙ěoéĆ!#>ďŮßäĂJM-ł:ĐÜJĹăYOq×čÔ”’9®mM!+ŻX€qmÓ—ÂRǵ­DżšF`LăžKauŔÔš”É^4&đ9[âŕ|“Ők)…ťhŞĂ/Ąr©É_·ŽĂř Ű5Ö|ô_÷ľ¤‡Ő+ŻőLŽ4JČŘ®S©Lv˙‘Ć+ugő†íŃ%wĸ{!i–| ”™B^˙Đč©n·‘06_UZBahť€R96_5ř´Ĺř`.?:ň@iŔ‡{őpŚÉqí˘oÎu›/¦/Ś<3ǵýÖäń­óE檥p(ƤCauŔǬC{\›=/ëÉĆŕ|9¶’48?·R48?ô^-GŐ輼!K1ŤÎËŐ¸”®ŃyŤç.ejt^`ą¤CŁóEg٬ÄŃůĚ/çĄĐ¬ ŽQi\n:ŕ˝]ÁŔç±$ş5ÝĽŔS2Ýš®đ•]2Ýšnyŕů)™nMwEíĹá÷RTíĹŰ-ř—L·¦[2xk”uî0>ź2ĘV”ˇ]Óť±uUšĚ|¸ă×OOŠ7)(¸…dđh íš®j—vM7ž0” »f‹˘Ćh×tC‹¶ [f,ž­ZeĘQ™u)¨¸uĆ$Đ­éöťĐJ·¦+ܤѬ٢Ŕ¶š5ÝÉĂxRÇcÚ±ďŔÖÔóĄÉ¬9㓯4™5猳g2kNYE—"łćěqÎMfÍź#ĹX'p—/”É«9eĎ]Ę ătĘĽ™5gUŽSVÖCkÔľ‘»ĚšSĂCŮýĚE ĂYé2kÎĚ*[.]nÍ]\(]nM˙Ţ0dÖś‡Ŕ—’ÓÖ]m(C~M×6ŤŽÓĄÄ6ňkŽý< ú5GÄÉ2ä×]Żŕ2ĺ×=¶™ôkۛȯ9,®Ţ”_sČ­ÝÍ\ečÓN“ń¨‡ěšCĆ”\Ů5G|jÔu“ńř5Ö—ÝË,·aŐN˛kĆ—W“c‚PäŐń ş“^Í(ű/…uWÔl’WsLÜÉ Ż¦Űxt>b_©0úą•fÍ>uÓTŹVrxňĺŕVć$‹'o‘šeÖěÍneÎňŽ2Ö,·fg}4»“fͨÍÔ,Żfď±O‘WÓídüĄ"łfWP¨E^MOĎ)ČŞŮMďśş˘ě¦=˛ĺZdŐÜ5źş˘Oq‹y5{S´©U^Í^­ÝÇ ŻfTŠj•USAąV95{„źZĺÔ¤‘וF§fŹśŇŤĚěBĽk“UłÓĆ•Ýǜ ­VčÔěy·"§fÔ¨ŞÉ¨Ů#Wus‘ҵ Ťš]®ŁŚąőĺ4xg÷éOíÄĎřŢĺ7g¸„óĽRá‡ĚßRřBBď:µÜeÔ ßzĆE„ű>BŞß ]n÷hY^M‹ŹÜňrÍs§Aݦ zv˝š~čĚrýą†źÜ˘,äáăő_Oâ WłÚ§ĚŤBÚKOĽĎĄőźY‡‡Rv""<<®ó圉=ł]ĹÁĘ“sBCö·HŃ^|óú»gJadđwXS;‡¶ˇ[—­RięE¤ąţŇMš”aÚf0nĹLŽěŻ÷,…}÷ `Pŕkʉ˘fř%ăÉĆĐÜN‚]SîxŽŮóS2lšĺeOaÉŤ¬ç,—ěi–ć«đe¦ZaV2íŁŁËôjî97ŮĂ®ą2|‹6z†Îą;VĘńó{ ÍÝ© vpNj6ˇWÓťĎ24u§Ćů,¬¸˘>ř\ ý8_Ďž´›Úa–ä&Ȭ˝X–ňÜ?& ©µď H‡ÚęDщ‰pîN‰ëĐ’:Q˘[´AarŕźA‡öbíG“˘v†& Éëťý‹ËÔS;˙NËj‡‘®FµĂŚß{Ř kš€TâdX×ôť'Æ& EöŁţť5˙¨ÄÉéEłwrśśň“6ŰM“wNeh’ŚˇŮż˛»ša+#=´…ÎŢČšş“ă썪©;§Ňş"ŮBť€‚Nçš´•„˘:Á4AŃ öÁ˘zWšćE˝Đ+]{ń“Î݉ĺIˇaÓ~äąť9: ›Ő˘–ćv檽x]Ľ ĂĐu*,Ôđ}dw)¦|SĽč¬vxőܦć])Ěi->żÝ§ČĐu*¦ŕz*CÁ5ę)FŇUÉôlşÂ‹nąÜ˙¬Š\§bЬôf/â™Ý6ýoHˇXî ]›WĄ0ôʨś˝âČŔu*¶?Ú6ˇŕbZ=îҶyUŠ"ď©T…­ř¬u×bľ tm^Ú6ˇ@htm^š6/BQČÚBSLÝ›.T)tl^”•ňă®Đ˛yUŠ–ć¸,%ćtžJĚé<z6Ż =›ĄÓłyUčŮ„ÂóŮ‹"Ö©´Ý‹PčŮĽ*4m^”AÓćUI]:=–Ł<â~ %ćtžŠíN„×ćU»Rř‘wSňC]PšŇy m÷ 7ŻĘxÜĘő®$EÝS) Y§s:O…ľÍ«Ň•& ŤůhVK7%%ĺ§’˛N%&užJSP=•®|đT†ňÁ­äCů੤˛BQťŕ˘Ôç^dS>x*ăąy*ŚáâÎ:ŰMÉ;¨†Rw/Bi»ˇt%„§2v/¤ÔăQďBÚ+”˛Ăj(MIí©ŘăIĎ}¨S)áVVÎsďTËWC¨;®†Ň”ŇžJWBx*C9íVěŘŃ+”ĽCk(e‡ÖPš2ÂS1e„I_Ąn'Čé®Ěľ¤ôtöBJŢá5”zöBJSFx*ýě…”©Śp+ăŘá+”Ľl(幣)#<{îĹ;‡2wü’2U1¸(yŘPŞňÚS1%…§Ň•מĘ|ÜNŹ»…lŢ•Ľl(Eií©´ÇÓ&¦¬đT†ŇÚS™O}p‡s» EYá©Te…§bĘ OĄ++<•ą”|ěJŢ!6”ň܉ܔžŠí0ĘŘLJ9ž{Qұˇ”ç^”ެđT칥źLĘ|îE=”ŰžJŢYa(Eąí©´ť†bĘmOeśŚJ‹ÂÁ©¤ť†R”ŰžJÝąa(¶sŰPúăŢő6ź;aÇbĄäçN<ÝÖvnJ?”ńÜ~<îťôJÓý—{ŮÉm(ő©ÝžÂ×čý °RćNnĄŚ´óĂPňsFÝůa(í ÂRúSřn†»·3Źťŕ†’v†JŮ)n(u燡ŘSřr›óń¤Ě§ë6çcŢ•ĽłÜPęÎCiOńËmÎůI;Ë•’Žť †’žzá>çZîJ} `îsnOʸ÷âóMW1 CM§«üĘŰ&@5‡›â˛¨4¸*†äő¦x2p0hpSPĆş)4¸)÷]y¸)Čn jĂ7Ą=u€Ć›2ž;@ĂU!äᦠ Bd!77~«›‚«BĘĂMA"pSĘľľˇ`ŕঠLyS0rpS0tEł·‰y¸):¸)u÷" ÜxËo ® 87cT8)ťś‡›‚±›bg'¤`ôঠ¸*ŕ<Ü/uA ‡[ś‡›‚íMéŹ'ŁW…ś‡›‚á(|ôŕú7®Ć®†(pJ=7C7ڇ›‚ˇ›‚ˇ(&2†n †® 173*äIópS0vpSúî§IópUČy¸)‡Âfy¸ 9¸ ¶»  Ü”ąă–R âAĘĂMÁŔÁMńP üqbnĘPäĘţ ćá¦$ĆŐß%ĚĂMAµŠ€Ŕ<ܤP„g ćáŞó@…(bn F řŢŁ›‚ˇ*<@r.Š8PŞČIˇ5Ŕ(â<Ü Pá$nr pR‹87eî^T@Δ.@CŢ˝cP´S۝݀ś(˘ópUz Âvz0°ÜřS=@˛ٍD‡@%k›ÁŔUtiÄy€R®ś*<íä<@Ńiç‚Î19TŘ0APtF z "$ĂńPźş ¸ˇ°Űä›çÔPŔÜ&DaÔŞÁ·đa)MóI|€Ň¤tä5ć Šř`nÓ0Ä(âc€řˇ đPń^¨»@â”"Ą3ˇ­1IRĐ“˙ďmC h/B Ž@čąG0öŞŚ«U€;1 ÄNťů OăŰf>@aóŠôw™»łx•qµĄx˘É|0÷#2TůE`2 ¨e2–R˘e2 ‰Ač•=ť_Ü(M`cVŰq'î=X?@WđĂR‚q'đ”q?“oü…0Íe5÷PňéřJ0$…mŕ(±Ia^kÇަ1)´cocČk-mÄ`NhiŁ &óÚ>đ”)Đëa|ňĂRôŞř‚]ÁćϬVóÚd@đąéł^ÁK‰WŔPDyhęÂfűej§ˇ.KT܇•E,÷Š.pUĹ k>­°ćfR])b LmÓهÍÝ÷Ád8}Űŕ+Ḡđ]*‚¬ČîÜsOŞä>@Ń…!÷ÁĘYŠű`%LŤÁ}07®ęBű`…ŹîŰ?@Wđ9«×ÄŹčŚŔCSőD~0‡÷˛SťŐ‚đ‘řŠ. ÁćîW= ?Ó}íJ~0·Ă Ç@ň•0ĎůÁĘ<’ü`0Čňd‘ü`enŘÉV6ĽQä(‚˛ü`%¬ĹA~0wŃńT.úůÁĘě[)ěÄ VŹČV6EAäs·m(60G wń0l`•‘ćm“¬nŞ˘ČVĎ9č$?X=ÚV@~°zr H~°zNĐ'ůÁĽě¨Iü$?‡Ó•ü`u…~°š4c&Đć ⪽0l`îÜeúa)šOčs//ď ˇĚ˝Ľpc»ą•WÓď‰~0·ňŢĐćśbMôúÁ€)V»,¸·—×Xč«›m(ôą·7oô9µT(ˇĚ˝ľ]Ť`ÔŔśZ¬Ů÷D?›}ąČëďÓţI~07˙ň"ňb,\>XĚíżE F Ěíż"Uü`n˙‘äsűoą’ĚÁĆ<`’ĚÝżÄ ý`Î5ć[Pěs?°şIř9ŘOąŕG0đ#XŔĚÁ‚^ţ°”|§?[‚Żđ«-ľšXŠÚŔ€y\wÉV[¤Ő"?WÁ%ŕkÔ`_Âíçáü`•s2ß6ůÁ€ĺŽĂćnX»’ ¶_.É2Ś—ÁůMBđÁ ¬M{ŕCC&;Đ’+îÁ,ŞCFh~Űŕ×^ ® y\·Á†YRśü`58‚A~0Ŕw9=›đZWĐ”#¬î‰‚‚?Xť%` „?jŕŔ~0”Ŕ) ,*ŕWôąř˛WĚ€ˇÖŻXĂŚíĹjA;b’źĐćđ¦˝ŕ St ü`×#¬ňRkIž,‘¬í‰ "?śŔWňÁ ¬műÂ2-řµ´é ä?—»E`ŐĘPďĘă3^đÖ’˙`^đ–Đه<âÉ0pUyńČ0·ţ6Ń2;QJ\r Ě­żśg'„y‰› a^áx€sçďÔ/á7 nţćnş¸€0Lńc3@¸Ĺ˙Á0uP ç?łm‚wµ`˙Á`ňĺ/Ń­i-XÁ°Öâö#ţÁZ‹YÂ?jŮWü5Ʋ·Í0/f‹^Ŕéć–^ˇ&Č0/g 5AţąĄ·^ůćĹk ůćXR ůćž^ ůćµëăĘ07ő^ńćµk‘Z0÷ôęń ţÁÚHşş¤?×®ŮK Ąká 0a(]KÁÄsŕčq…?XcřzŰôóÚµî5ćKćµkÁ(@0/]3şţ`í¤ţ`^şx€ôsŻćţţ``ŽŞŕĚ‚řóĘ5ŹŹřs˙nĄĂ3vÄäá ÜQÁ¸Í לJAüyÝZsщ0Ż[ ĺ@üYŞqŔÄ?®«P(ČĎű¶ů?/üs?݉ţWixŰüóÉň"B˙`ĆZŇŰć?—˛Ĺ‘ ˙Á,ČÂ?›|{0v!Ď–OüąËW'ťřłť üĂR"Š ˙`¦roĐ̢0řłţÁ¬ěË@üĂRfÜ8Ä?ŞÝl‡řłŤPţÁĽ.ÖJÁć^ŕ H – ŕjĆ·ĆL`Ń̢dôâ”×›ôó‚¸0  ?`ěS ó y(Ŕ?µ'řs±‰ĘŔ‘Ż™ëć#ţÁ@žŕNÄ?cQEBđ¨á5tFGáĚ=ĆEÄŕĚÚľ¶Ä?\Çü!â 0ä‹a`©RŔÜłířÂlĎ…Âܬ‚(âk7`łf€0Űv€0 "b  >A„Ůžâ$„™mĽ Pě €0‹şA  đ .„ˇě/¸˘”q@íYl@@”U7N‹X@ţÍţ'˙Á|ř îĐ؉®Š¦řf{zźřPŞša•ĐnCţĂRJDţŃ Č€"ňůP„jÂäë~ ÍĄ' §tEd"  H@d‚L|&šĹ2€€˘vY$€ŔsEÍÚ'⦀qS0´rk§3híź"âz4@\ŹK§Č`żynČ€ÂČ!ţ‘ˇđ_ů¸ "9 ˝Đ®ü(j†üÜS Gf\Ńe J5b2¨Ćb0€€ŇsŔŕ2AH€Ŕm¬» 7†.+€ţ\ x¨´ rj†<›&ş (BKg\ ÄT! 3 ND !AH{‘E¸ ą› Â4ăm §Č ȡh˘: ¤˘2`+ Č".0ÎĽM„zÍ'Ę!rxA¤+o|%@ŕ-Ăź"/˘"$Ëţ˛LÓ„· €Ŕ;Ołö €Ŕ{Qđ đęĚÂ=pxĆ_Ż:=@ŕ,xkĎ+ovť  Ě»u€@:Đ.d ęH*AמéşpäĐ,F*E@ňŇÄmHLc¸8đČtüÄ?ÉĐ ú2)l©ŐÉ\«h˝mřR6ő†™˛:]ZÂĚxNß6üŮ!?i4” RDÂĚý‚6ĘgA$öąí‚áOě$´<˘ň zAöů<7»˛: NÁ7łŮ†´‰ý€ \ׄěóywÂC°Lŕ‰ĽX(D?»TL ‡Î\đk#ĐfGĚ3űßâ“ý`mŽ8d˛đy"Ş Ůř„‘ěó©‹LČ~Ŕ‡ž ˛Ěg@Š_Aö>¨tßý`GÉ~N• ĆľíÉ~0ÍÇ|Űěó9›]Ęäçß ţ€OÄ&ÔeZt–ŕřŇ^đĂhătűŐÔN´qú7­Hä?۸4ןü|óě‰˙€ďç""mśpډAgÓOţ€ő"=śš°ű¶áćv6ᨠčđrT "µüÁÜ:'Đá¨?đÇ 0wŕin=éÖęž%Oú :}EU‚*OKŕĚgJ"háÄlj!Ŕ@ÝEśŽ.âĹţĹ]ߪ*A©Á+ ţÁZ‰ĎpáP(:®ü“ŘňĚý•¦ź˘ÓKRâJ€˙€Şo>ń łÜůKä? ú%2¨é‚a-ő {aî4„ătÉMe‚”ăř@€@IO‡GĘ~:> ¬qpäm P=Ôů#FQH€°Ć/·M€@ĄRs?Ż.0 <ŽÚˇŤSČ„·M€0`ŘKĽ¨­Š AęŻz^‰€0ŕg®Ôq‹Ú8Ý­kNĘÁB’aŢžž," PV>| Źł›MsÓ¶vlŔCÎq đů÷ źq 0o÷ q`{WË&óf™»ĺ±íóMl™7K_q pXFÜ(|ý‰űď>źhqčďç ěro– –ŠűE˝roĆD‚ŕ>@Ńo‘ű€ůĚ·Ä}8ç,÷Šú5dߌ©Á}ŕ„ n3cşg$°â>śÓ,‚űŔ™üő)űf‰Ď;q đEOîĂ9ă#¸ç¬ŕ>ś3G‚űpÎ.÷ᜀ܇s’JpΉ,Á}ŕdI“=#MöshŚŠü›šUÔ‡sâMP8]G;Í=Ą‡ŻNQ8í‡}ʲo– á‰úpN ę§i/Űó’áD}8'&ő“™x<¤>ěéM}ŕś(v‚Їs–T@ΉT}Řs­‚ůŔ Zl†Ě‡sĘV0Îi]Á|Ř3żůpN äĂ9,笳@>ś3ÓůpN^ äĂ9Á-ç$¸@>śĺ„|8§ŇňáŞůpNŔ äĂžŁâí9|A|°=Ď/¶çńÁö BnBŇń+›đÁöÄDlĎf ŕĂM9g{ę6"đÁöĚÉ>Ü”Ľ» 3NŕíYš|¸)}ĎĄÔ5 đáŞř`{ŽhlĎ, ŕĂM©šá`<nĘ9Ű“Ě>\lO ŕĂM©š¦E(nĘ9Ý3”±ç©ó˘ řpSŇž§ÎŰ@Ŕ‡›R÷<őPbľg| řp*|¸cl>®­bđD…ŘAOTm‚otĽ|óî÷ďŇńâ˙Ó˙űęăËß~x÷7żXÝ}YwňXwî‡ßĽKÜä%s.@<"ż|řřîő«ďŢľ~˙á·ď>ó/Í• żŔ÷ľbô‡Żß}ńúÇ÷>&“Žňúĺ÷ď?sSôş)_?ľ˙Ő‡źżűűďţaýoA[ö‡üÂYz㶤u>ż˙őË?ľüî_9Üň‰Ău3Gr^<ŘÇűĄěůÓq2ýk|˝©8Młż`^Ŕę„~ÚÓöąâŇWÓ?_˙÷Űu0?sż˛čźśJöń˘t™O?÷Ĺ:Ϭ#üŐúç×ďÖÝÓÖKŔ‹Íą ŢążÍČF>§ł ź^ʧrŮę 5~9ҧ¶>˝ &žÉĚ„$˙S[ťŰKł˙Ú­ó©káÖ‘ęI‹ç …×âź÷µëĐÝ%łŕ}ż†ŕ?úö^/bÝŰďÜq|ż÷ăăł°^0yĺ˙kyů}ţ™×Žçz­®ý5Ŗצ}BĺĘy®ŰýÉÓŠg·ó'[\Żü¶˘´×”V‚÷›,źjŇGHŹő,ű'ů±BčOk˛ţďyšx~ń3N{s¨ź.ďÇ­ôR¸Dčçîí$‡zoĘu#|AŽëFR®ů:Îo;7’rŮč'ÜvěÇ÷?5¬&OžÖĺôOÔ¶Ň–uď}ńúOďíxý÷+hşQŢlÝbź•Ă'QŚuo|V űëš.ŐkŞi]‹Ď03iÔ×ö`˙˛ëň×˝§ôX}ŐąÜOÎýĺë?˝ü‡—üżüőđË÷ű.ůs—Ţ«ŐNĽóifą!&-ˇU4»ňsÎĂ"Zf‚Om…R6¸Ěެź3^Ç­”~érßHáÝŐ0٦{żjţäVç6}°ÖňůʶşÜp×ÖKBůŕŇúʶ:·ą´ţ´ŐĺN˝¶îs2ҵńm´79Űţ+‚ĄŹđ­ÜÎë@–,˙îSAcťďuŕQ°t÷óĽGËżĽÉOGK/§'o˛T[ßć?­Ér mëŃ;šűk…’°| ýŁ EtU}:.Ą‰Ż(~qűwžČKŃŮłvšb6~ř””“±úŘ-n˙îÚ ÄĹýßv|ń6®xůâîď˘V†ö"¶8`źr ĆšÖW)‰é/”7J*Á ×ÂhKi"ŞVPR p¸Ę K"ŞäPÜ˙ݵ—އŔ¶!ţ%Ő@‡ ô_ÜNľbŹóĺ..ˇ˙+ű^»zˇRJqx,Đą §¨CŃŻűdsŮT¶)‰Vę¶9XJ™Pĺź’XV†Ňx~|Ö­Úé<‡ś• eđx, ;ă·|Ö­ýůP*ĎŞéOuŠĂPÔ)oNKKüi·:RHÜ «b@Ph»ä’Á„ý`©±$XGąđ…Z†µ˛$®›Â4x|E)Ɔ,ŐjňĹýßMËt$vxŽ^ăęĹýß\ExĄpAWŚűsŻÉ]k¬J_ÜΖe‹3Jł°‹ŔŮ­^Ü2l •ġD(E-sEWWx‹g˛M u—R´’Lă×oÉ\” †®–bZIF€âpÓę-ČŚ—Â%]]©T|´V Ĺŕ±”Ě!Ąěµdđ­R2W‚bRL+±Ś˝×x´ËNY_ \1sĽ¸ś+±ĚŘ)-ĹBĎOqxçߨŠ- şşűÁÎ ŕ]‹ó0R¸\›đ1ĚEđđ!Gq8°Šó$‹Ŕ§– bśpxŁPµIç÷ôČ»].čęvÜ ąŚŞCp’+Éáţ2Ő&…ÜíˇĹýßě€ň’âţoŕT‡ü{ĹýßZ1Ż˝¸o†!6DqřÔĘLĽŹÝîöb)•ÄęŃ÷6ŤPXćéóq.- Őy„ŤKşş˝GŰŘÁ°:flc‰‹ÉÄůâp.uÄiUË_Ą¸)Ě´ü•jĹ-ŕ\ţJu¦âđ¦e´t›ôÄ^LŐ‹[ŔÁÝžŞW.Ą’Y=kÜnť‹şÖ/Áěßr&/N<^ŚuKÝ u-2 nk±K>Î>hŽuKÜJ­sYÁ2ăĚř~ⲚŚŕ°T.˝É”Ń-XW°FÄvÖD­ű>±Ć5Q«śĽĄp–,ÖýT/=\-”Ź•[0°6břÝŠ;9°&jŤXşVvm¬}wŚpMT™ą‹OЉ–ăAëX˘ + ę\t-ěÚ"ww EŤä^t˘Erż EŐ.†7;âŢ/…U]ůFq;WuÍq§ě°:¬úíOżľa\, ™`uXÍČ*05AŃ@|q+TB;rëPJĽť®É‡ĹMVX×µÇSîF,-Ś[ř·–uíUńĎý]\]« ÷„U´Ňő¬Xě´E?wš5­ăËXçö4l34ŤĄ¸ ˘ŤÍ÷¸!n ŽwÁářG|ř¸wa5ŔĹýu~ücĐXjҢ®Só€Š;Ŕ±ęäČxqk˘ÖŚî†@DŐIs[qĎ z0ăůq_áV4ť­¸÷=#zPĐ_,ÚĚ{¦§ę ;óĎÂĄ˛Ź˘OŚĘG¬ÍčüGă Ň<\5c‘i>•ĂăÍ×]á>«fsgłִ*ÎúŔÓáś.îĺJŮń"ëøv¶ŽŻr5W7”ńóĆ Şž ú¤Ý!Ť«ąúÄŢ÷îsĹJŮ9rňJ· Öű–`\(;kaq÷7ĘÎň)·Ü6.,®#ö!,>ľď_Î9mî)ăSX9Ăő& ľ¤1/qewĆFeęXý]·§Ú`ťyÍv+ž{Ŕ˛Vâř‹`˘ő9› lPtĘźš±Ý|ĘžfaÍ cĚn`š÷vzd†žcu´Óů'«Í>´Â׆’Ąf#>z‘ů.CÎâ™ Ž#˛1ä=ŘK.ˇâIÍ%î>%5ÍiüćńĆSA·‡±Vă ş05CŞxzâ8µ6jŃ:ČÍbPQ.Ň`ă69ł32}Ď<ÖĹěG$2ŤžĺÖcP<«đdÖ-bL¬›ç5żäĺ®sŔ…§›s/1pâű§x9iIëÖ“ľăÝöíi¬“/«¬mÜÜ–ô3¬8ú’_®ž T43â*V®äÚiB…‚)ÍŤ` Ś>#Ćs@7‚1®ř{ßs@Ż˛ëťŻć}ŚilĹßň†v"Oô—::‘##pŰ·ç€Îľäë^/őÖcě»hyôÖĂ QÜöí«—8źŤ‚V›˘—xëA-XľÍL%xţ÷ĐŤ`|5ú+ť fA!ÝŻmŐÔî‚W¶·S[śTŻŘ ť®€¤…ę›{ĂřńĺďěväŇ/nýF'Z$gţŇöťZäđţ’®PDM,ţ’öD¶·}ÇúKÚŻqĐ‹#Bü$‡[łř;ÚÓŔŢ87ˇ8!ÄóXw‹©‘ŽŐmßÁőË!E{Lu:¦"Âäj®}6ý=ŃLŹGnr9׾ wnýöĺ–Y!p`&ś˘3ůĽť(ZŮB­ďb“ż”=ěZů¶¸ń]iŃó ý¦Ř•7~Ł]sóŠq’ŃRdŁ,nüFÜdO‹ąşáŚT÷}Ł ±rń—˛G]· uíճ܂ ŽÝ”’Yv“‡śÁhťSˇ$}hľhqëwÇ^ńBtë·-·©±` ·ă¶‘De"ŞşqŤWŘ_ÔžĘö]Vp󷧲necÔÂÜWż4S˘ ňE;Â/Ĺ×—ż¨{ˇ˘łSń˘in«R°”kźrĎS{"č ßĆŚťâměojvAŚßbxÂÝWň¨îPÁŔßŇ~ř.đ‘¶#ąőRźť*~ßZă×őŮ‹[żs§ŰŕĹÓF̧(ţâ.• ł(˝¸›čŁP¸”«+üNOŁąŇâ˛K®đőâoîcPéR&rÁqXěŐ1˛…ßŇ>^g“ żB@§Đ^ڵţ.Púnä(Ě üu>&=EkąŽRÜüíÉ +şqF1züÖ`Ť`šXWÜýíˇŐ ü°ó×y˛°p@đ‡đň7!EWÜUŔxĚĄM"Š®ż;1Ą ĎĚűř±‰żŰuLKPř ř«˝u*<ăţvORřp÷wç çů>W]5<ŐRţ†/‰ŠšIŤ»řäîď*E›ŕÓľ›ż›î5ľ}ý Ď>D]ÝÍßmđžĺ}íp딩0Üř;ß•C{±>ŕO3Jçw=1LiÜü]2ź*5Ěu\Ç.Ţu® ‚‡“ݞNźžh>®ťty(<Çôł"*0ďčôíşÂ?±ä6 ߪîű6côa…Íßî YĚx:MâP˛ĽEç˛Ü÷=ڎ<ť`g„K]ŢĘ%\{ĐM‹żÜ#ěňyr˛5^ 3ŇG»Ł·Nyă"®@-óp|Äąó- ‹Ů°Ś«ż(ř·Oµ­|—°řÝ9{ŠÎ¸±8Đ™'t¬]Ť7“şÎŮ/ţăź\żŐ_|LY:Ç·đnÔ™ë\ÂŐßźˇ°0Đ{Kź ł“¬c†ůśŁ¬ŃĆGY{ëC9|ćeŤÁíĹrGYŁ=˘Ŕ cF|äeŤQФ8ĘcD6ôťŁł¦ žĹaÖ•CX ZsrÁVp¤`Ŕ°ˇŠ&Ąr¬ŚŐIÖĆá4 ˙¸ŻocîîkŚÍ7˝Ş¬1˛ÝTŻîĎĹŕ|“Á®:Č#ŰŤMK`aŔK‡I͇šĘ×Káz­^‚”09®]5ńą:ČúĐx%n«z‹1MÄ•ę k #Uafެ1®]•(TYgŤźâ^«_ţcE¶S&M+ BI×®|ŞŽ˛Ć¸v™üâX k^×-l9{Źę(kŚÎÍ×ŻŽ˛F/X0v…łT0ŢśřëśŐ„1éPXP)JŰ#Űę;s5Ś~‡28¶ťg(śeŠQôÄ~a]"Śł'^ŠZ4:/gcu”5Gç5ž[ťeÝ4Č_x8uptľÄą¨SŁóšGUÎÆź ń 6ŽÄ¸çŔřă ĺţ!ĐŻéc“§«ŃŻéĘÁ.4ú5Ýđ “cÇç“ńľŽÄ´¤¨Y®Ë»Eă!K†n ú4aŰj™~MWtľŚ~M7{v”ö?8DôĐ–ÉŕńĐ<ĺ`Ë˝±‡A=´„aĄiŻÁ^¦ç††1OÍ_pÂvt°BĐč·B»¦[ltRíš@ÂS [łE‘m)tkú@ÓŕOĆ´cß‚üÔ†%¨ň§ÜšSß|Ő­ăđśÎgpʰ9ĺ­´>äOâyw˘µŢ‚´Ît9uţ-żć”E·:Î~Ç){đRhŘŚeJŞă¬awśq§C†Í©‘ˇę~fö âY˘'K3kJrlFUˇ¦$Çć$x°¦$Ăć÷·¦$Ăf”jĘ2lŽŰd6c—ĄČ°9âip?3z0"L¦,ĂćĐ 5e6•˛6‡Ĺ6……WxĺÜĎ|ČŠÇPę8k“ĄO;ÉŻk×TÇYĂŻ9äM©ng†_sč3Ł:Î~͡qľęvfř5‡Ö>©©ĘŻȬÉE˛ Č¬9â9L\HvH^cťŔ5Ű-§Q2©©É­9…~§YËŠÉđçVć,‹§n›&»f,TSŁ]łĎ¸GLvÍ®ĐęNć*ď(b˛˛ §Ú„vM•fŞ;™áÖ ˛mu5Üš˝ÇuŮ5ű­©Ó­©‘Ş™aÖdUŠĚš˝Ĺ]ÔeÖŚŠOM]fÍ®©ne®RjŇ8č7í"RŐ4dÖTť¨&®›­ Y5{„73§0!óôY5NSÝĚśĄ0§)«¦8ĐŐ˝Ě09öÍL95]Ó”SS5Ş%ȨŮS<SFÍ®jIu+3Śš]¶Łę,k5Ăć]ÝĘś´>"ŞO#49Ě-ÝĘ,‡9ľŞŁ¬aÔěÂ7Uw2mن“Śšá\ŻîdF˘¶”ş-ňj™KiĐ"ĎCNC&~&{ŐYÖMÍđŃu'3[¬V3ż‘Z VOu+sú'š5kŕÁ«[™łvâóž3+®0çp/łf/0şgZPÎyս̰›Zge°fNy:ç3T§Y7íU´ ‹{^Duśµi^ÄÁm*íš5XB“@5»i®Ű™łfe¶áPĚžËQÝÎ\ŐŽş^i׬Á$Şng®j'ńíš®čxíšZ; ‡bö•ę@kö‚ÓXŞ»™Uc˘KužuW3|Űą›9«öÁ˛úyś›™‹˝śÓn–ÂáФęfćŞ =S{Mő!ŢŁÎłn&…{ő¬>T1ť*tJ{cč Sužu—˘>ôńĐNE;Ń®‰e‡Řń‘4Gŕ‡Ąä¤.Śşg 1Ůr73g üP3y°Tx|Nőiš˝ąŰ™“v2ž›Y4{GĆśę~fýR㙦É;´­ngćäůˇ–25)ňi÷3sňŽľu—’5©čT8Íš“wŠN…š“ÚáűÂiÖщDaj’¬éŐaÖś»#7auC3g i(Ąú,KÎÝ9•¦NČşÓ $şćŞű™«šá ,ijRÖ ,tµÜ”˘ŘWˇ« Ďiˇ«ĺ¦ĐŻ …ĺ˘Px–}Ţë¸ YóŹrśvšZ¨đljVą)Ú€_x˘â\•JĂf5ŐŃ*ÁBtY¸ŠëM©»L+ —ϸ)=: KG$ŐUá Ł­Z||c­ĐtWęýĎöŘ ŻmëęŔ©ĐŻYcIĚ*ŠŮMIŠZ§RW“@Ăf ’Z-ś‰vSčŘĽ(ýPä•Oąş•™QëTX,¸*´lBá•ěť íEˇeó˘01Ľ)Ia+>lÝË\ž”޸z*ôlBˇ@ËćE€cóü{&­-dĹÔ-T…Ôwô„]ó*ô}řˇĐŻy* | ś99ďBŮ ýšWĹâđCćĘTĐŐŠ%Ó]ÉŹ§MčÖĽ*´k^Ú5Ż íš®đ©t+sw%&užJaB{Qč׼*Ć”ö˘ĐŻyU¦"–ĆÁŞ›™ó“’RO…–Í«BËćUéĘOe(ÜJ=˛N%ź˝R”žJSB(*Eu2®Ů]Ź|¦˘ÖVZĚé<•Ľ;J}Ô»ĐvBéJOeŢţ4V.B~>~+JhOĄ=ż™ZŤ×ĘÂěMQŤŕTzÚ!5”¬ŚöTŞrÁS1e´§Ň• žĘÜQKĘ8vT %+Ł=•˘dđTš’ÁS1e§2vÔ eî¸*e¦ç^ĐřSęs/¦)<•ľCW(*lĹ«HÝîJ~ę…¬F´S¨´łR,˘Wcż¤¤c‡ÖP’RÚS)ŹtęŮ)¦|đTúăIŹű>ůP:x*Yí©Ą§Ň”ŇžŠíŕĘŘŃUJ9vt %)<•˘|đTŞrÚS±ĽBéĎ˝(s‡W)őxîEÍJOĄ<÷‚”7Ą?÷˘Ž^Ą´ăą-)«=•˘„đTęÁˇŘŽ^ˇ¨fpQćŻRěPZ{*YIá©TĄµ§ŇOBWV{*c‡W)ś%pSŇăŢó^”žJ=#{îCjdî¤PĘH;) %ď¤0”ş“ÂPÚľ¤ôçpÚŔU™ÇsfÚia(ĺ ÂR꾤Řs/ć8¬”ůÔ #—é¦ä§^¸ż9ç»ŇÎ+Ąďä6”±ÓB)éŘÉm(iç…ˇ”§ř…ĺ`žŰÉm(c'‡ˇĚťÜJÉig‡ˇäť†RO›´çNäľÓĂPĆs'Ęń¸ź RçnJy `VÚsŠ=ž6Ď] $őŞÔ´ÓĂPňSürs}RÚNqCé;= e>w‚«Ţ”üżÜÝŃź”¶“\qîDV91w99w’Äo1ü˘‘ Ă“%ęĂM1qaOe {*S\ŘPD}¸)E|ĹS©"žŠ‰Żx*]dÂS™âÂn…Ô‡›"lřE)›LJ_ńTl“ CŹhFt†CXŘSIdV_”"Ľâ©ÔGż &,ě©tAUOe>î›”ăě‚”ĽáЎ"·/J‹.Đű,îĂMâÂn…ŕ‡›’OB!vű˘ÔÝ…PLLŐSéű¦2ŕ‡«BđĂMÉän_”JbőEiâžJTőT†Ŕ°)€!śR|S0špS ąŰĄŠ {*&Ş*?żűp&©Ű[ őá*d2·OˇW]brŻ7Ą?ň]7üTƱŹßD7ü˘”}üˇTQaOĹ„UŤŕÂ>Ü”ů¸ 3í>„’‰Ü.)-ŕ>Ü„&¨ę©ôşÔĘ s;R®'aaÓĆ@ˇŞOĄ {*¶Ă–¦svđM™BUÇLanJŞúTęĆÂjn<±7EŘđ@µöáŞdaĂů؇›R6VpbnJ`ĂUš ěĂM lxľcnJŢ˝("8TaaUK îĂMén‡•U܇«Bcá í÷Á6é7¸7Ą)rĺŔű`*,îv8¸ŘۨbalăŤű`ŘŰäŕ>Ü”)Vu‚ŘŰěĺŔ>Řć3öÁ6Ô9°¶ÁĎ}° ‡ěm€t`lC¦ű`DŘ(:ˇä>ŘĆW÷Á6â:¸ěŔ>ŘFgöÁ6^;°VʆEű`Áäđmw€lĂľüEç‚ŕŰĚđ?@iWđmŇx€lóÉüEý$řÁ6ç<ŔP4Őŕó[ž“ěD~°ŤTňvKä(š‘¨]» áŞĂ˘+ňÖ! WÝtĽ"?@ŃĽôČđŕ­ý`ŕŃsŇy2Ü6 b*' ‹«ĐPę•ý…&g± ôÔđ=Ťźě+˘]ü` őóP~0-ú¶ÁP޶) ¬ýÎ~€rE?@Đ/“ý°&¦rAŤKř ś?@s€ä(‚dü…ÓZD~€2µÍPF~v‘ p'‚ С)đΠřĘŐÁ Ö#$?@Éjg"¬aľĹG…ÖĄu‚ckPĆ•ü€ő-Ô0ź!đ€I~€ ¦QŠč ?@ X謽Áičry@ˇXč(:<˘ D;C]Đ4‘ ¨’  YK°Ä|:ą’°0 ›!ůŻÁşř‰`•&ŔP8·Yŕ(&Ąh–0§‹ü€%Yň•ü`\·öm đť$đÖŃ\ö#íUdŞ”ĽW‘áĽo˘°ôLčˇiů•±wâJ®®h§ˇĺW`$ňH~€˘©˙$?`ýś¬m“Á&‡U h®=ČX©G0@ˇĐţ/ňÖ˘\ä(íB~đ•„řWqő……Ô*±Pňš3`Č}€ ‡Ě`ÚZđ&~€ÂŁ‘Ë&qn’ĐP úĘÔ^“Ż&O^  °7$?`Y'F,‘ đj$?`y¨Ř¦ďŁb›ÉeAň”)bCf'Lź!?`Ť«C;µ˝ę• ´…c©,Ý!?@1Á!T$żF čž!ů u‰ BňV÷â Uä(v%?`•0ľ&D~°˛ŮĄ"?`m1ÝôćcE2!H~€X®ăZÂ%ňÖ>;®ä(] Âmä,˛ ‡‚TvĂ5E~ŔĘlíŠ~ŔznâYýEk°HĐc’˛ŘX'NO3ŮX[.‹ôPî™ b?`E:],˛°jťđ©*Á¦NŠý€Ĺđ üʸ°„ž¦ţ“ţ€eöř®ý‹ó‘` Ç)bCć¨Ç±•Ę%PO(¸X?Rg ܬ0†°Ą`ä>`ťĘP¸‚ëž!/î–»¨˘j×#Čhâ>`ŐL^Z,wJŰôŰĆ>ř"›ŠÓâ>`!NÝä>`­NćPâ>`=OušÜ¬š´ >¶źµ F°hĐ´†k>‚ł`ZĂ5«j ěV)Ő%1­âš÷•&öëź^©ćŁ˙vĄ>`ŃT=¤>`©U1H}Ŕr¬şëI}0ä¸X!¨A(ó żŞ X-šˇ*⋺!qéÓ˛A ZľµJ+ÜyĘHŕLÖ€·Ť{0·Ô ďÁWż D X3WׄÄóXtŽÉĹ[kĽ´4«ó ĽAäŐÍň‹üŠçŔµ[[|Í ů`˛ Ľmäy,¶‘ľş°^řD>`Ebľň…|0ω»6Ńň­¦ÔRÄu‘3Đ“Öoµ“ÁŇ@µ€nů€e–Ů `1 ´€kŹśFÄZ|‡Ěĺ¤{ĽUÄďHâVŹÎÚ˸(vßSŰI|0ĎŠ5!žČ,K->‹¦®Ż.ŕŠIâ9T-ŠÝŁd>`álťS2 Ô\ž bĚçHđí(ěé>DgČXsS}ŔZß‚30Á¶:Ď*ěaƉ@\żŐł`F`a DYA¸~«Ľoű€5Ěu8Ŕ>ľÖN\ÁµĄ  ű€ĹŃ…·öÁ< Ö]@î]g¸÷ÁlčĄĎ‚›heĚ­jŰb˝w@0wňA‹¸a–·!üÁä xŰđsg€ŽŹôk (úŻkĎ?~0Ď{»~K¸zâ«“Gö‡ĘsEřµ˛„?›ÄŐ üÁ<ĎďyĂ\= \µíIĘb?<˘A°8Đödg±¬í Ńb?Ň\ŢĆd?XŰóŞĹ~°¶ç^‹ý`­Ĺý'öµs7çGYłx¨Ĺ~°vÎ'űÁÚ9_đă€˙Űf?ç´dŕ` ±ľ˛¬őČbČ~0¤´Wö!ĄŐ&ŔjžŇ¶ üÁ|®+Ďźŕâčţ`mDţ+řůż&Éţ`žŇšöBMĘ|€? ľyN«Ă!üÁÚĎNÁĚSŘC + Ś úy ËL_ôóţ~Ą?f*‹Á•\}6óţ`>ľĎ;Pđóś–©µŕf'môó öĐ^ ?Źďkj?g¤šg°ęéćăűB)ţ`ě}Ą?Źď BúyR;ŻôłčkŃĚ“Z~Dţ`žÔę6%ţÁÔ öü!©ĺŻ˙`¶)‚Â?ŹříÁń†Ůó"DpWńçń‘ţ`žäęI0đ='+Ď”˙`ČsĄ˙`¶Ç)„XJŮP ŽČŘ®Ë ˙`¶«šÂ?íÂ!ůf»z'ţą%€ďWń̓ᡝ8 ă–€ Bř©Ű@âĚbyŰŔ?ĹÂą0«¶AŔ?[Dž ţÁśŇ .˙`ž1!đ/Ă"Ůś/Nüy­‰üä?çС€˙`Z6űmóĚbťćŕ?gŐě·řćT~ÓŠ˙`ËH˙Á,źţĂR/ţÁxs >ńć‰w`$X'°]]ŠŘ$@ĹLŠ @gç˘aŽćc(:_D@xöŠł˝T řFÂ,&:ÂlŻCBť? ĚvŐ@łM@Šfáaë¬ KB@m¸˘PÁ"Űł˝J‡Pş`\ÂŐ?9Ň…?N„!…EŰKrĄ Ě€h…Ăo"@@™W„YŹŹMA  ”+J»B  DË€@@ŃťCý!XVP÷)Pxi  fş:ßľ‚@\B ®{qSX'BŇJž  y B˛Su‹d°]aîbS$ÂšŢ „yą—są €@:ÝĄ4ćéôČĘűĚ=¸{—ÔYÉğ΄ČZóBxÝ|jhf< ćuÍ`'_,Â4pTĆëňÇź*…ŢMąźß6Âä~Ű|d aA„µˇWm đ±Ö®|Đib>řč+W> íJ€0Ŕ”¤Đ»éőJ€Ŕ7¨ÎhU˝ × oŮv%@ŕs—7­ †a ´núWsÓ&C_ă˘ÜÂ|DI÷&GţŰf@ŕ^' óÁ«,ľ˝›^ Đń‘rŽ ó9ÜǢX! PŘ‚ó1ş¤˝`Ýôú†.9!¨ô+Â|8Př jB PlŃýG „ů¸ă!žť›­ô¸Ľ¤@ °ŁËK Š?S4 U JކT8]T™ř€ a>+9¨Vé$Â4×ĺms Ěz“ Şäxm‹Úٸ‚ ĚgŢŕAjpÂu:Ý÷c2>˘­#ś*$Ő[‚’ ŹP$T ‹ PY Ěí›í¸` Pťł€T05«śF!‡­›5–K ŠĄ:R POÍW j®Á…`ĄŔÝ ÂTÚ­HÄ@ ľ;¤Đ»‰UÚDt€wł-0ćóÎř@ r3‰"Â@Ď_cH'Uë*öMŻlÇ! Şßbd ą0Ä@ Š.1¨´Ź+ĹxńčŢÄ:—ü)R PÓçC$ ęţ:ÉUc3dQ 0| C&C :Ą¤@űp$EŔH…@¤@űy‚ˇš¶Ď2)á¤Va 0n2EŠ {łj § @OĚLW Fh„8!Ł8劰ş9jÂ@`0H@b 0`$śK“TCŚ; ‡@†¦˛ČŤĂLĹ‚Ĺ@¸L Ü›+öÍşiâ@` MÄp 0ÖĆł>4F“‚B „ąM†Śę ˝ Ćý„­ c2™˛Ě›0Í'~ !»8ônú@Ą]!ĚÔ˝E„i2óۆ@ű÷ř­#†ImŁšŔ;A 0ŰŻ Ňš`4oÖÍ,˝U<š7}0Xt„¤š€¬cĘ‚qg"hŢôˇi ônúŕ5ŻĄ ć6Jő“Śx‡R9 v[‘w3 „Ź´‹#Fă“p ônÎH»esĆ ľ¸EŢÍŤ “Ić€Etş› Í÷Żňn΀ÝŁBÎAÖÍŤ÷ _Ű‚@Ŕ‘.Ř&xüUÎÍXy3p_đŮŤ! va M¦Í‘ăśc¬đŠč"~ba€€ÂťL¶Í>âDšl›Q×ě-BBȶŮă[@XbŠPrnöř<ff  đÓMxvš”Nď©V6 ţťî!ăć.˙‘ž¸!çfT ˙@'’¶‘sS7ĂmsĂŚ€ăIO-ůP¶Î)f6"@Ŕ]ĹLÉ”mÓŠÎď”kÓ"~‘˙§ŽüšÁ®üúĹŚŠL›{ ů0™‰*!˦{‹Iw‘jÇA ÁŤÍ‚ţ9‚čPřDţ@+ť¶‘głő˝Ť<›ÍtŃD mďJ łŹ?NúÝ<YžÍ¦§ ?@a§˛<›-âŻŕ4"r§"Ďć®{ţ3#'Á đ!ü¦H>´‚?Đ8©väÚÜĺÁŕ¶äŹÓŕA‹&{UeÚ¬Z7 Ř´zj/™6k|‘ý@è6‘iłjŐ´`?@Ń­ŐdÚÜ…˛ ÄNňmÖľw’ołjˇ°h“eFßfŤ—ŽŘtŰJ‘osW{Č~ iW‚|›µÝ٧ů7Řôóüvů6cŞ`?@Ńí×eܬZE-Ř´+_ŮŰŃč‡Óôč(ĚÜ„~ yúŠ~€Â('ôÎq3|Ú~8˝Ü~ Ý›gpʸYă,ôĂéô–H…~8Ýç~€˘fä۬ń&ůáôąůáôÂůáôËů–zŁBßf ԨȮŕĎ3;eÝěĂiďöáśŘ(ú™$Óf‰4ŘÍ4ó3(d65Y!śĎŔCËňkˇmä׌ą|ĐäŠŕ=pöąČ¬Yâ­"ŢĂ9‰#xçDŹŕ=ś“A‚÷pN ŢĂ9§$x缓ŕ=śsS‚÷pÎ_ Ţ ]ťÖťpçT™Ŕ=śsi÷Ŕů6ܫɬsr÷pÎŰ Ü§öđ[ß“Źć„{ ÂŽÚ±'±,«âžâÎéHÂ=ś3–÷pÎj ÜĂ9ó)pçě(áöü© =śS¬‚öpNĂ ÚĂ9U ´+±‚_ĐÎé^A{8§„íáś6´‡sjYĐÎégA{8§¨íáśĆ´‡sŞ[ĐÎépA{8§ĚíáśV´‡=ó.`Waî>đd‰ő`{Ž_°lĎ Öí©‚Áz°M¨‡«0ötH–ŤEz°=k1H7Ąě)“v%=Řž ¤‡›24˙(>GDz°=3H7%k*wTIz°=ď3H7Ąk6zŔîDz¸* =Řž†¤‡›R·bäJ¤‡›bm·łH7eî.čr’ôpSND‚.p­{6z(mϨĄďŮčş Hz¸*$=ŘžY¤‡›ó:OĄí9őţSźż+G;®Ü—ŹďjOvÇgś[ŮćAÄVˇřVÇË7ď~˙./ţ?ýżŻ>ľüí‡wó‹uN^|.ŢJë>üć]â&/^]Ę«jŻ„/ż|řřîő«ďŢľ~˙á·ď>óB¬­óçzÇ|řúÝŻ|ď÷äaóőËďßćrnůőăű_}řů»ż˙đîÖ˙~żW\ˇĚÉHÉ ˝+řfŔXçřű_żüăËďţ•ă-ź8^Ě‚uJšßČë©ńăýŇöňÓ:ź°ű§—„ˇŘţ’ÜB´:ˇźvĎĚ\™űWÓ?_˙÷Űu0?s'˛¨źŁŇ/JWäów_¬Cń—Ń:Â_­~ýÎ?7ĆzeţńÜśkŕťű›»Ađuř9Í G¦üńT.[}ˇĆĎ#}nëÓűÁeâAc&X>µŐąŤľ×ţµ{ç“×ÓŢĽ·űňZüóľqzfŚ=ďŘPüW˙ĎŢ,nwV ŢYř{?@> +Č+¬ü%—Vnű™WOç öëNM±ĺµi÷ ŘĘţ®ţĺMć?ŐäĘ2V“î{›ľIoM–?ßdNÇĘĐÚQÖ˙=ĎŻÂ/~ćó§Öőý¸•îĺ88·Ş:YîÜHĘeŁzp’ÝąQ(׍ĽÚꤽs#)—Ť~Â}Ç~|˙S#«“úzeř˘Ě+u÷›ď‹×zoÇëż_aÓm5Ö×=ö¦żiÝźĺ‘őuMýźu]Iăµ=Ç׿č˘üµ‡~¬ŻA,şę“ţ+ž›˙úË×zů/ůůŰá—ď÷-ňç®»§×ç~ÔÜ }(dpm(°?çĽ/¬;šÉOm…IQ#sm/Ľ~?g¸ŽűČÇgm\o)řw¬Żg¶űřuÍźÜęÜĆMővKž­ď»íŇz=|öęĄńo´79Ű~Ţčr“^Űöž•]˙ŃVç6gëÍ{ŐKˇë}´łwŢ­·î?_šq¶ýĎu+ţÝýVüôݬß'ďë‹đň+Kő ÁĚl˙˙ţö›˙ţŢ˝Ą§cľ~˙ëő4¸3ÜÖ­ż|ŚÍ×˙üövÝę?|˙ĺß~÷»µ-Šůő»ßčß5żţŰË–«9˙c¤aăő˙űöź/˙é-~ާ×_âŻsËß\¶űaÝél{ö×/wů/_K·r˙ťß_ŹőŰŻŻüá‡Ő‚óVb÷ú µußűÍżĽ÷a©µĺĺ7Çúă_žN˙µľ}ĆxýĂő?yĘv9GqĐm˝?ó –î‡ůíµ/ßčXŽńúĺ»č׿}Ëý-»khwżtoŠ˙ÎkwÜ>+|áˇ˙ňîĂżűâő+ýp_ű+OOëuł’Fďó±.áő¤˝­Ëű?ü<ÍĚü¨ůmŰÖ!\ú˙ő˙P<}ýř;9ÖF_˙©ŕÍ·Ď~Cá€ýźë¤|ÉVć:źëwo;üG×zƵňźJŻ˙ă}k+ďýöËÝLţßW{ßrŻ:Ę뽵ďy2yéľżý§x?ź >pý ůĎâ˙óť7uÓęľŕyüňQřőž÷˙đkę~†×ݲ~rú®ňg^M*•Ű ŃŠ í”ňăv0eŁýůł„ŤŽűEX·ý÷·gďz­ů ă7kYÂźĽzO'óăíV¸ý·Ż˝=”OëŢ÷§­Ě×˙‡VîÔ>?ëőó‘gy˝=Uß~um:6_˙ţŻőaŔÍŻüvť@nşŢ·? +Ă>–ţöÝ7ßţ ?×ÝűôŕĆöćŹ.ůůŁ˙S»§u}űöŤ!Ćę÷Ëë7˙k×Ň· „HR`‘KeŔëęEJl^śK-ŇÜꋲ^Ç‹Č^CZ#öżď|3¤¤ŃRk'íÁ€,ń9śÇ7)íL•–ç…¨…‘ e˝'pqhF@(Uđ{!Ą+VŘôĂgG€‹Í€„O®8ÂFĺ$+.ˇŚ\@‘ZÍź)…ek,ŠoÖŔš=xhÓ}ź†%mĆKŐŐ…şX° {hźyAÖ8i¬ż’©WáíA¦^ÚÍŔÓă2ˇ©1*É#ߢ°"µ×`ó"Ovgp Ž®zľYăó Ůîg™±v(±†<ĚŁrQ‹:ąő%¨nÓă(…-–‡ ?óE<$u¤äó5)eF4„'¦’űɦÓ9cŮ â‡d§c.vµe†mÔž·ktoóă0‰N-Űőšţ¬,9śqĚ*ř„’@Ľ,/y-­€Ü `"•Ľ_kV Ĺ]ŚJ곎ŚĹX¶řž E|VděŔ×H:'2 *)ëÚ—˘–YŁq=eSYŠ=ąTŮ^s5ĹPĐ•ýţńA¸Í™Őa»’B˙(wŮš B¤¬!Ő”än×'w˘•Ľ1ĺ4!Św g%âyGćTĽ‡Ď˛a$űîzRw®O1˙ٞd ˇé 4~A6đĄů¬B/Ż-ȢŮÚŇBqä…§+¬›EŢ)d$9iěĘÔ»e^Ýnfźâ6ąb=ąđĂă‘é‰vr7%yˇŠ] sŁň‰—śęqv“ÍĽÔÁW$hNşÉUł˛ĘÁ§ -î°(üŞVÇg˘ąŽ"U’ŐĆ×%ëšy|ď,ËĘjÇ»âü"ţ;ô±đÜô˝îAŻĚµ¸0GQĄń—$\˝ęSǤt‹‹MťrŰLÔŘŁ †7ˬćÄŚÉ §ßN\×aXdi©N5p×deŤ’T4ضGě˙úđçűßŢÇÂ=ÎŇY[‡ y ]u‘^T`ZÇ.˘x"ÇeČ…Ń át\1“WŹu÷W˝{»T(˛m}pÇá¬Yh·^ů)„¨xśjĺ"Ž*"ű`ő,vµ/-&ľĐ’Ő/ ç¸JCn”čęť Eyô‹\Rďw23c’űŔíŠĚ#„ećlýÍ.hnd‘Šš“ȲYPĆC[t˘áâg‹\‰oŤ—š [¬ÖxqϦNÄřáWJžńJiŕÍŻ8źű›Đ°ćS»˝âUỆ“EQ⫳«łłŘ‚ň”¤iüI `ĄřëáąŇD^yŞÂĂÁ&x†S‹¤gůxYŚ—ĺxiĆK Bx]ŰĐ €&»Ą8“ĄLY&UḖIұö+.#lűÇ-m!ýJ˝°eo]/M¨.§˙˙ÄŕţzÓD¨ÇńGČq «ßŻ•y’ă5ţíwŁó˛Ýú7^ó»u5î¨QšvjGŤ¶§Z“ۆťVFC{îý0…ţ’Ë|„¬E6% ”zď†á8J6öíÖwFł`ěŚ'ĺ1OĹ]^Yt–m‡Ç QŁýîóMIďĹÉM) ŢW‹°5\źĐR$·ő Q\%g?ľšś^Ř[ÇÁÂܮ𲿱…ßÁW8ě˛éÚ=ö „3ËČOYńoíoŰ×6źöü2ˇĂżs"Ţţ)2=‘?Ąăw»fŤ÷@Í]7GÖ&—Ú'kE¸¨’śŔ‘óiˇŤmĽĽ‰¬őx„Ň1+3Źvä˙Ž#HżżÓš×éťÉ>¬Ş…*}ËNG|:ŘáŞÜl .ŐĆ…âĺáFRyr§:ąlU©)M«»óqb|´ý+źŞiB^Í'Ýż#´XńĎc…;/ť†Éđc“8ń˘NĂŕ´9Ťw•ÁýWĺ¸Ń ĺ ›•–ĎĎČ2iUŻÖĹEťşbđÔňü BÂO›í§ońé󬪌3'ŔóĆl»›íćŕ‹ĺÉŰĂPŚÜÓŁĐP“[›Ľá"9o‹]ţţG?öá6~V&?lźvź8źó7·Ý¶żÝ·×C•ÜSŢ\€m?öňĐmŻwĘ|o®Î řm»a–É–¸˛yA8‚LŕzËŰ)ą“ĐJxK ŤÝă˘ňébĹáŚQk†—R*PRČ=p9°4Kźµ5ŇUž#Ě4>häŔŃKz”ŃD¶íŃŕü€˛L¸ p•ÍţAn‘Řw¬u´B”|Ü9ĽH•š° PĘfÎŤgţ/¦‡ˇţĺÉNendstream endobj 561 0 obj << /Filter /FlateDecode /Length 2533 >> stream xśíKoÜĆůľ÷Ü‚`‘Kf]“™79Fc q Ä…Ó&˛r˛Š‚ŇîJ¬ą˘MR–ýíýľy3\ʉôR†a.ů˝ßóŤß­iÎÖ˙ř/+şľ\˝[1űví˙ą8¬ż;]}}R2x“jŘútżr(l o UäF¨őéaExą9ý73*hŞsĆ `śnWŻÉł› Í©ن6đK!Iü¶©†ú˝űR˛ŰdBČśJI^Ö×ŘüŔsc$ů±ÝdĽĚ)Ó†l#ŔĹ%+uIšDNiInëáĘý2Zx^Ćůçé߬B*QH«śj§9ąGç\—<¨ü6˘^]XĹ$Ę_]:^šJ.G^ELH˛ś3ÎĄ¶sÚ9…kTÍĆQH}• —bť •—Z;:żôW–Ür Ö+ XRS¸÷;´* (IÓ^f—ŐáPůW^Í˝a?0Nn7č *ÔH@jr»˘şö5Áű6ŕŠ¬Ť|=w‡ ±JťW A>``H“ÄÁ>‚˛ţŤ•–q•FË­ő“á"}˝őDe‰aš|şF Ş ¬H˘±î‡®>Ź^ÄA?Ôm0Š"gÄ;“)š„EŐt‡Ďˇ´Ę> ĄŽ¸}ô±J]¬¦˘r©-ÉłÍ${Ý[˘™ä:Ĺ:c"WŇpxŽĽÁÁ …„\ęQyÉ-ţ& ¦8 Ţ:d!„t°˘@ĂĐá°@ĎH¦ÉG|É Čă•ß…J ] •G0cmú2R7 q㥞WÇaýP¬˙-$H…Ő˘ďŚŕ…÷ĹgKľ0čʱl€ů˝2M‹¦íX âżőBPFMů¤ĽľŤ5Ş]⊓+o ćcĄą5kšŹ‡Ř‰iVćąPÚ´ŞîŁ‹"` h.ŚĘŇ)‰uţ†ĘĚŹ«Š-ţ6{<AÎŁ ŞeMÜź"‚'Fç*g äéËŐéŁ×ääé&S\bW"űĂż@6_ö˘€Í&€‹ćpF^ýrňüďĎ_˝ šüÇ?B=űéäßżřţńôbkÓ€D˙fúĐ·7oOlŔoľůr,»_Bb˘řŁńŽĄío®űx‹í±ľ>1i,bŃP,PŮ·ÝᦩžL´bťÜ›Q'îuZ•*ś(cĄUÉ‚©ĽŕÚ€ď±BšPBPEđ)“¶HWÝ®żj›mŕiČu{ŢO¶ť^Ö€ŔTźÉ·/ž+m…"×ő°ëě7űóP}Č/»j¤Ô^oó¬4(iÔĎ·}łűPźcT3ęDbĄ,&ţŔ«Đ9Ń„SP'–ôŚ”Lc ŻX.Ů.ŁbÂbąŘý^جH-c“‚‰űĽëÚnЧ_'‘ŢWÍÍnúňSwFžŢýzçc%‹ą)ÇËyśË”ćHög”Â/Z–L×fŇrâ…Źî2Ć')Č»8oęÁ’ÓvˇW%Ůüqşj2@µI“)^Y7#”¶ŢŔ&'¸™ź7艒ń‚ÔWÎś zq1îb$ÜtHÜ-;›Ří:Ŕ Š©€ćĆĆH–,ÍŘTNO͵"‘k·ŃSTżŻő0ÝűŤBKâ"’ľ?n·qІ%d!I¸‡2” `—,ńl‰Ä4•€Ř4±őűˇ›má·>łŠ<Ţđô»{ť™&6ŠýütőóĘÝŽ©u÷Đ[1.ĘĽPĹšIžkÜ+Vv„ń„LQ%“P|M[厓·ĄĘüV ˘5 ‡ţÚ,ŤĂ:íh¶Bz}ÖĐ,©€Î;Ę@_¬Řć]ń…¶‡^z讆]Úm<$ű$0·!®Śď¶ÜÎăǵśŚĚš8ĺ|pY^ęřnĚÚZsŚOL8­Jî.5&B1 ĘI}đ—Ę`›|·q†J,0rTľ{ˇ‘Ëôqj°Ž@š]Řš3ى#&GcĆ®I/3\waťă&ü[ěqĘjâĽbďzQ)Ôć:čźj…}EJń„5źÂ·41T5öJulB…Wf‹Ńę`šn˙ĂáŠĘŕ ˛÷Ďü÷¶_/›]cFśř/¨zéf:űĎ‹'"Sć`N$v`ů…+$Ľ’ŞńÂxvů5»ˇš1€s\ŽžíőP] K,$ş˛YÔן&Ëě4Žrű[›á a¤9Ż8đ.”żŽ„9GčY®¦÷‘!ëpQä«ţß;şp]$á:v†źW˙D _endstream endobj 562 0 obj << /Filter /FlateDecode /Length 17841 >> stream xśµ}]Ź%ÉqÝűŔ~· ô‹nsU™ůeŘlA˛,P€%-ěŃÍÝár¤™ťUĎýëçśČşU·»—KR!lߪüŠĚřĘS˙t·]Ň݆˙Ĺżţřf»űöÍ?˝I¤ŢĹľţx÷ßżzó§›¶â¤ËÜfşűęoôNşËĄ]RÎw˝öË,őoţţţoň¸liË÷żzŘ.[-=móţ»ĂßďŢ–b—­§űż|<>ôó‡·ąyK©ŢÂ3ĺ2Ǹ˙ďúsKůţĎ~yxúéýç/Ţ#Ť6˘Ź:Í_úüÚżü߯ţĘ'4Ňq>yÔËčĂçôŐ7oîó|řęŢüůWoţ–»o?c]Jé—>ďjŻŰĄůŰ6óĄŘ]ĘŐ.ůîéÝÝ˙ąűîŤ]R±Ňď~ăKôWţ˙˙ŕ«ú?üÝéĂţîě—\ď>ľI¶Ą‹/آ|%_zĄ0/­ )ů$‚ĐDÉ+gJąŚ3ˇ^Ň Ą]j;Sś}&Š%QćĄä%o—^Ď”ěł=SĘĄ¦ ¨ĺl—1Ď”vÉýLé—˝×,ĘĽlůD)ŰĺüHI—>ΔrI1­ÚE±K-gJ˝Ě›g:¸HJÓ*—qéůD1ś†ébăLÉ—ŃÎßŃy7Q*6Ήâ›=V'^—ŇO„ąŻúĐ6©içç˘äťźS|¨eçç˘ÔťźS«^ŰĄ±ďµ&Ĺ˙ęgĘĽX Š–«m—QΔ|ÉI”¤ĺjľ FP4‹f±ěă’5óÖ.ež)ľ*Ń{ž˘ĚKŠŢ‹fÚ·`č¸čĄž0A4­^đú‰b—ťW-Fo—Í‚˘ItߌY”¦©÷q‰9?Çë>pLIIÁĎÁ@J~úËŕ°`č¸Ä#Ěw‚oqŤft—ˇAчŹK„¤ÁŚy#(ÍL—ÜD‰ŐrqÔŠ(E}OC˘Ä35V}^´ ł]Fô]Ő7–_„¦ĄÁ?EßšwݶŕćŚYÖ-Ç!š—YE)—î}ŹmÓĎzŮ&^RĄ]¬‹’ł(ÜФ”čhňbę(Qö’RŐ‘K@đ”ÖD)ä%(˝‹b”Ü Ś!Šë­č}NQ:ZtJ‚!ĹYVDÉjÇE`I˘µ“¶)U#tč\$%Ćă"ĐL”ˇ™ćĘUeF;ÔNÉX'RŮ JV;.·$Ši}\–)JŐ[%óŇă-WI&Jôĺ2°˛÷‚!ĹĹEĚq‡(5şšĐˇşůłáĂ@ÄÜIé85¤Ôxfęô¸9$ĺÖ y˛(=(Iśté ui8HY”—@ ¤[ ۝Æj˘Đ"Eb˘mCÇÇEŠ†ÜśĐµ#Ż#Öś=uŠ2’(~ĐŮW èůJ°Ĺj©jŃ]ělńV+ťÓÂ"°÷!Ć4ź19éĆ™öpóé •󿳎Ź´ä͇‹uŔZS+>,ăK9Ö¸ů°&ĺö›ö^ó.&ĺ˛KެyźRšÝ–ĄŮü/˛Ó–IŃü/˛łR‘6}äĄ[YłôżČËşÔBsч)ůšÚpÉsuT 㯹9su@Ć3›Ă)–ÚBNY©ą0„y3Ú-ÍEĚ›á˙•IŰÜDW.e©4}‰[ »č˝:Ü .ř_dfë!ךË>ˇ¶<˙ =ą”aŇ:䔼–Ü˙‚ą:ÜA)4WGß˙Ĺ#ä/čÖ ×_P†é&_ ÇeĆçâMЬů?‘™nßĹžđµ:\ĽInµAíé”ʸůÓ0W‡K´`ř \ÄĄŹÍź†×7&)SŞÖ­7S_.˙hâě>Tó÷1śIť„BŰiî–I›d€S 6/)•üś»Ölp ;(}­Ś[źÖL[0«Ă†CË»čč éÖÝŘ€˝:S ©Ô]Â^ť» íŢ)ÎĐ„LˇsŐg^Üë.ÁĎ™ŰŢÓ$?§KŮvÝ ^r#7ş' §”8BÝUěŐég˝dQ*íŐYx¸Hitú¦->ôD©á íŰ}ě0p&Ľ6Q ŕ1@xij9sQ\ŐäŮݧËiú‘‹I¸?§¬í4ňs¶%sz†čÓ/Úýţł­ńŔNYw÷€ą:ű2ôzˇ=ç”¶Zu źoúv–ôč…˙Vçľł»Ë?4ěŰ8Y†9†L´îŇşvÎĆ|÷U®ťűíVh¬NlźxË`/ąţ̡»ş‹Fg˘SęZsţoNáŽ'eŕຎÍű3>cÚj˘p€˛4r÷ĹwĂ©mľô’˝Ý%߆·rü¬ŕ¤ëé°şËAg¤ éÎ?>Nk_ąđkhÔöY»śčŘç\i\E§Ě8>Ýĺ`ÇŚ\ËŚę.ýfä‚Vzľ7źn¤p§zC4 ” ŤKŠŰŔNčT2»a—´Ąśé:vÉ%Ϥ»ä3t ‹Ló§:v‘çË7.;RqJ »ż{›űŚÝ37Elíg7±ÜÉŹ«ä\t-Ü8)ˇ®»K>đ1ĄltI˙íç%XärlLÁ"ßm~lZ*)Dewˇ·ˇŃë1ö:†ŞVÇľ%;šu–¨z>77x6Ľ¤pc;Ą†¨ě“bKm‹8#čÜg_ŢŻ›I[śY:ŠčĽ×P$tĚĐąŻP’Ě 5Ž}tîs‘eWَaťxĆW!oKőŔ˛/¤Ô8I´ă}t9m!‡`€c˝sj±[in{×9/ńO{ş‚Ň BIiädvĂ)fŕÜ'3d@uĘľÚ•N…›©ëüÁňËčxl‹ű0ý0ٱďßí¦4óÚŠŢ+şBĽG«éÉ7۶űRUމfp;DiÜ– !ä $Čľ†X°LBX~`Łĺ'–αo5žV5ĽFݬ! *1?|Ânˇ67ĺ[Âňs µ!L)_b¸čjCxqč-—z`%…±];;mđmńV%/měś-YŤąćébŻ˘÷ą”öp•éfťŰßiťSß.‡âV±K\ÖúZ gץNsM3"°]ę4„€â4žÇ†`NśžÁ Szl$‹čŰ•Ş ĚĹ }űfď:ś±x¤¶Đś°ÁÎÚ–ľ‚ýó¸Â˘pç5DdĹEŚÝößÂNŠ068ęňćFĽÁçV_a+Ěj®€ŚL0®°ě“ą‘INYQĂąŃmôFBçŁÁ±¬Ń×@‹NY‹ CÔ÷Uw§Ł8ťË?Móš?řšÂĺŇp]hđž¤L¦÷90>_Ż­tČúFeşŽćâL}(Đ­"$rîÁŹdr–ľöŔtɇC›]šcÂ3Çśśre`ŕş,j0¤µę0p]A8ĄííĐĆl0xcŤ}Ç$V jť Fh,hatÎ)+Ć1 wtë×ĺs} vÂÎÓĽá/Ło[äô•5ôíňIöüô“‹žtŃ@•Há$±:ŤźH»¦4moËŁ„)]0ľľTÇ„/Śńů ŚÎŤ.CQ[ Bl49‰Ü„úŹ®|`ŕ&ďc4+7qPUç8+”v‰f¸’ 1/Y0Ńa˘Ž´<¤éĐÝĽ5(űF»+˧ž|aŃ©Áâ2Ő“&ĺ–¸É`…şňmM Ĺ"›cú2ÁJ…ćyş3ZAr}ş„ť ‰»ËMAś!óŘ“˝PŐÝÝRiߌ¶Â°đ`§BěJ?LgěTYuäg¬Î ”môśE h„ŃĘŕj{5^ޱA@Äňńę¦M]|xă¦ŮFK•â Â`Ăé7 Ź?ýT§mUő!JĄ3s\ę8ĄÓXĄ3Ú1 çkž7zϱ†ÝŠÎ×VĘp–ŔĚY"˘á ř†cKq┊3„c»šˇ[Đpl{ÝĄ·1#™€Xź,Nş%m°Luô’+Z0tČ“'ĹČĐ]8ĄÂjĄľč"đć­ŤeQeD`µBí¬f&­V~Ő9<á,í5ô–‚“N©ňé3b0sŞV;‰ÚĄ!Ŕ-¦'ܡ÷žJfĽ˝×µÉY†Â{›zĆőÜÜlšE¦jźRÉţłđŤ]f'č¬ $˝śąóĽŕ tz~đĄW«C‹žĆęŮ7¸ ßž–FF¸„öŠ+˙ÍÄ#Ú8jNzĆ­•<]´”,(ťkWŇ)+2I”IżqmPah±ö)›Â)Ykě3š«}“ŞÍŇ€ŹĹÚZ“ąťŘ­Z×fM6e«Ö¸§Ě©2'ĘMÓ¶¶‡.B‚’Cí 0w GÄ~h¬–°őťŇd¬ć®0·SEc:v˘]·-"F`#bÎę©eŮŞ[Ó !F–˝š…Ż ÇcFĆ)MŽ‡źś¦Á4&D5\Ä9i<NIkËcáD¸äR×n§u:'›B,N)4Uyß“çŃ"ü”˝‚Ő„+˘ 3!Ę}§y‰—Eg*ŽśCú[ú•äꕥ$ŇČrőňX|Ś)4ÜŽ Tąz¸Ź J“«·§ ąz[Hś2/ô*ÓÚ™“öź{žU‰;NÉÔ±uů[N)Ô±‚W]!^.DşşšĚ†rJY{QNň–µş\ˇG­‰"J7č†w9NÉ"jé&C5ä9lńR•ďn‘Ăâ&C5dflŃ “ˇZÍ3´·‹\2ů%ÚÄ˙Áď@žŠ8‘S’óž"ć”"çÉ IfC1ŽŹP15¤ÉɉÉPNŮäř:~Cî’~g„šůú5uť™ Ől%{Č˙ŹJÖ|ý¤°rfHC~8“3=˙fµ+&ćž-†}tę2ďźZÍ0Ý„—5']ţ4d÷I´#¤ŮrÚdŇĺÂ\¨Ć|DőT‰a¦ŁćP ŐB)=#úŹXä8ÉPN)kšĆ ¬ź…ÚˇŇb µI‰dc2T+ŁÇ¶ÍĆ|(§¤°é˛n…[ńó,7󡜒tÂł1<ŐJ«ÁşĘś''lqŔseH¦•ZCˇ"( CaÇŘ[•:[‘I­Ve6”ŕ‡(W:; Yş1Ý·3\ĂaçxKЬ¦ą¶zc2”SJh,€ÝĆęłAçŰň;rc2¸˛1sc2”SJźyŚőVg2”SJÖÜłâäpOŐN7ĹÉű~t1ÜrŰÇÜ‘ ĹHuě®Î0Ă5í”IË+YEq>*L>×]*Ln Id ťŰ¶Ú¨ “—ň-ŹĆ0ąoŰXťŃ&Ď-¤PĆ5˛ďçéPŚţO Y7sNÉ!çłn“‹,¤<ŠoP ňap±ŻşrYťb‹ĺJQlĂ\ô˘Ě<ŢpXP¨u´‚ö: ;5őHŞĘEŮ_NY'¤l̆j©-S¬l]×Lpâ-†ă …%+JÚtË´nrś’tËT#†âfCµdKg—Ä §”8űť°rfĽEőÝ`,ÉA(ičŞiç v9Żšpź˘g2Óˇx§%«d¦C5ŘŚrćJf:TíąĹ[´Pť’”ťă”¦»&,¦ž‡îš¶Çü¤!®ľ42§´µđpTp8ój*šW€\s .÷’ŃćD5ř1ň,™őŽgÜ,б‚”HE·ŹŇîĹ6]öȸtJҵaëű3Ś`4¸‚ëäD9a‹cUŚ#o[m *:…ů Ľ=Ťys˘\` 8¶Ě{Ůeݕʜ¨˙[úľTĆ˝vhË4xúZ˝Ęx$ň‚tžYÂÔˇÚö2˘ć.ýLÉ>AÚEîĘ ŮúZڬڍ)µJQF˘żŃîÓřVŽť‚ĄDExĆŤ$ÓÉg\üeLeV鸲@¤+űjE)Q~H®˛@„ůX9TŚÓŞ´®hؔŻ<-Ş‹*ŻűDPFncžľŻâ6V"LqËZB…łŹWOF…HdŻÉŚeú†Ý"‚2˘¸Wřő!čŰŹ§ěcÔ‡0űxĄÎeÖ‡0Qn ~Ö‡D žě;Ô‡0Ă­Gú{f}ČPâžělŘ˙Ě%o+đmMQ¸Ž5nĘÂMqŹvş —ÔdyHWba4Ü•…+čXő®¤¨Ń–;úćđc ęŞ+) ·Ý#(Mě¬+ś„ŰăŞäČŕŚ’™@)·Ätű^qÓt(+ ѤCYQĽź×$†)…×ÜA©JáŻ+Ŕ¦fnkMÇPňĘ;ËF‹ěš7šQ Âtr‹ Ś2ÔÚšů41Ô"3ăľ› µđôX R•×{] Ě}ŐđP*˘ěX­ëC†2hµ—XŇ9µ™ő!¦ĽŰĎTĺ}—ĺň˘D¤Fţnş¸Yzl7TA•"CiÁ’x,iJÖZ±@„©ĂU?MhegT‡d%$‹o,éJZ–ŤÁâ*ŠÉ›ÖůJj%'e“—uồ‘%r^2jCjäTkc!1`Š‚Đ•}yŘ™•!U©ÚRC¬ ‰tîAIĘއ)ĎdeďĂ‘Pߨ aĘw]Ó”BĘĎ4±2ÇuvFiY‰ĚîčkF2y‰“‰Ú˛2/›µ!ě=G̵!]”-(Uh%ÉgÖ†Q¤.*ÓoĺĎ©”MIŐ-Rřgč%–†LQb§ÉšdšPĂLciHT7ÄKUßiůđ( ±(‰âbiČ%ÖJ‰i¤ČQdiHÔbÄ1ěůZ‹ˇyvS-Ć g°4„łĘűK])üiŮ, )˘ÄŠö©~ @)V}Ů`( a:9®+E0ýÚâgŤrŚ-ě–†TQB"ڎüý¤ »ŚŇ%2rąX%2ź, é˘f‘˘ÝÖí ‡ĚřŢÖŤ)ŞCLÉ\ä¶Ś ÄáťS©ä[äń榬=ţ(IĚÜ–ĎŔâ*JÁ˘š©‡’GĽSŐLQt”›rŚX4˘áˇ ţmŮÓ,1Qd•#’ÚŽON)bć)ÁĹ!µTŃ2RcDĐ bmHPd3˛6d•dMQ¦2ř·Š–Ĺ!Qę%™‰ŕoÔ‡©] ´x§ĘşÁeyĽÓ‚ťv‰GFp3J`2jCÚŞDÓśJ n–°§QŹÄEéű«Ŕ-ł4$ Üd¸ł4¤"sĄ!4nVĺ\fiH”Îił4$*đdM 4$Ęö$X2DŃm Ĺ©´Okc-J#1!Ł4¤E;9Ú˛U·ŰŐ!Ńą/«C˘¬Q*“Ő!QÖ(ă±˙xD:Ő!QŐ¨žp3‹ňX2˘vŰ܌䙌⋆ĄťY}ÁâĄĐĽ¬`ßŰ:B­ÉXÝÍv‡Dͧb ,Y5źęśQS•…Ş+~5ŠI%2‘Ć5ăŮ ,‰BQ™”¸^iŃyÎ>ö‚Ó]Í˝ŕT˘Ő!1‡ŐČq„6ý,´lözŮĚʨޕRÇĺOI‡*ŰŚĘ^•¸•!«tX¶˛Ěâ‘öL{é°\7V†´kpfaHTď†ŕí\9śY2ŐĹą)Nx­@Î, ‰Î%nXRuË•!«vXń8T†¬ÚáE©4T÷‚čĚë´y(šÎ, YuŐU,öJëĚĘr(Ćθ¦[Ű‹ÂP˙µ„;ł4¤ĘĽ3KCěP žQ’ú™2ˇQ?žQ2ˡĆfiH;TŻg–†Ř™ŇŁf[EđŐ!§ßeŰëďeâ˛6¤jë3kCć™b×úűh‡ÉQ' “Ł®•ýą3ŮůH0”+@fqH;SĘ^/-„âKgJÚĆŇ÷UW0éíLÁΕ§‹âŇΔě\ŽŠCR:SÎ>QuE]Ȭ©gĘŚ üť˛ŕ´4Ęę>Jpr'ÔK>Dd–†ô3Ą+Ż&F]ˇ'2®Ř{:Sr +…‰Q' ŻĆ®¸÷ćoKoż¨\'!ęW×~ö„w§čD)ĺZQ"ÔË÷ÂSWŠň:řr©aŢ\źÚ)×§x# +ňÚăN9„ÓCWéđŚ~ꉩ\ź9ĚíG­7Öú-Y4Y|ôś´ŕ®rŢ2'g˙ČÇĆ0ŠýG‹éĂŚëcn‰ĽÄ’WP~ě ÷M‚”,H|.‘8ć/ď>~˙›„IǸ|ň± ŁçűŹÉuÂđ=X2‡\›·ôîĂă—÷ż~€ęŘFąw÷ýÓ§_Ľ˙đîîĂű|€]>ĆĽ÷áý/?}úć:łżůŁ1Ťâ]$.ceÖç”E8mUćBŮńˇ ,)SpąŇěI1]/×4úJ ]’áé%k%/aKĹZťîgŠíÂvQÚ.lé D§{?SfčÍťR¶Đ›WJşÄ¦-PśgĘ­ąRnMHh,FčÍ+eěÂ!(¶…Ţ I_śngBŢő&•JApzéÍE©;<Ő˘ô]oF3cW›Ag­Y›®gJ޵ćcŞť*0°«đ‚Đôâ墌emZß:—;ß#–QAdş”aR™îéL©ˇ8ĂŔ)ŚL±Ś #Óv¦LFyvëŞ 4Ý&™ěľ[méeÁv (6_opöba\údTžG$Ł‚Ŕt9«…qé#’Qa\şĚŕ‚¸´Ťç‚¸ôHWűş ,ť—Á­9Ť±CmßÜv|aPzáip“^ńŐC(J';řAé^NŃXf T±đO ŁŇáŤ3ş:>)O[ ʶGA\Ú˘w­âŇ#zçMNA\:/?lŠ"Ŕ€Ý{+ L÷ĂW®ź° 2ÝËÁo,L§đ?‹zO+2iapşĽÖÂŕôđ¨ :ÝĆÁ.¨7ŰęÁe.O[ô>5‹śł _Ľ0:=îzatúčŇF§í(OŻĐ€FŞ—C4ˇ0:Ń„LI ”®0EAtzCŃ題č»ÄőŘ ’Č)Δ‚č´b-…ÁéµL˝diô$unZłđŹ í"ĐcZQ«{ §Ĺ[-=a9e(ä`!rž;㬠<=Ú!ŔUžÎv‚„§[ÎFĽeč©!şŞĘÖ®¸ÂřtĄĆ33=55 SEK©0@qĹh§vM`"ħ#†˘µôDt˛0>!ÍŘČmD §ŻŁÖşf!KƧ§Â§±ßzŽHĎX»«[Dzâ&®ŔÖëx/őKD€M}Łvł› O±saX”Ş<Úkhą0< IŢ0ĹyRRŽhA„Ú"‚--Žő¸»†˝ Ô>ŹőSˇŇ”—™Š ěIjrsa$•:ş&•%bf@פ¸í,PWF4ÜĹĚTב™SWĚ©†d@„şĹŤŁN ä„9DPhYEX^EiÂ:I‘ŕ[ ®¦4DP˘®]¤ńź.Ą4EPž+Ę㑢 IíƦ6©Ąę:2GYApšŇ›Tśnqű$9ÁŕtÜb‰˙ NÇ-VL) ·&G~i9pkr”„D§kŕ(őh¦‰•ĘŐ'ečz9G=OaxZ7züYµ&ĎĹ’¨50M”7’QÂRť&!ËÁ+ NQf<2t·\JŘgN—€Q’)€ŕt%ÍÚrÜH6]j§y#Y˘Ň˝¨–·°ŃHÓ…ţ˛ŕ CÓĽŢÝÖđ, kÖ…oi*ţâ5±¤CÓĽ}.ˇ4š&/M%|‘i˛ŇĄoŠGjÜ-·Míqµ¬â­‚Č´n–ĂŽB`:ĹeąÚhĘÍX×é…ai^ć§µ‡šĹe~Äő âŇë2?G»=.óăZ¤ .Í‹ĺIZqir˛FatA\š„đ ăŇLc\€Â¸4ÓR·Kó:˛•°€—će>¤s´Ů­­µęSjvˇ*ĆĄ™g1[FÖ}dŹĚž‚Ř4™ŮóbËěŚ^övš Ç;(áčőbޱić†Dzzalšą+‘Š\śćůA´…÷‘٬S8M¶ÍJĐÂŘ4ÓfZ(Ħąěc¬śC—Ës Ö 6M†Î¬8~Alš ťQÁâţlÁq¦‰©´Ľ ¦Ńőśş›(L'ĘŇŚ·”š1.ba`z’• #ÓDY±ÄŚLĘ’ÎTOĘÍ Ę’ZNÜgL§˛x†·LąjAQrҲF´Ěě ”–iý‚YâÍRa`šYbQ‡_îłĚĘÎŘsË ÓSůg1Q¦™VĂ @dÍ ÎNŹĄg UZ!Jpę´¨Y(Mď)tA!¸Đ›Cc24MĄeň24ŤÎë2Ůš®Ęń‹´M9tČeWË(ÚT¦ $:BÓ)˛ ĄršfB$Ś5ŚzD˘(Ĺ-QAhš íË‚dhş*ÝQ‚ż Ş‘:ů,b:@/†¦‡°—‚ĂU9Ŕ^ŞqUŽĘťuĐš†Ç‡ęć 1twZšFJń¶®ëJo‚ŻŮtűLŠĐPs¬9´˘Śâ YźFěJD(P3Ł8-Ƕ™(/IĘč4)K±2:Ťü×<֙骚Bů®lWD§™ÜZZčyD§QŽ…RÜŘn˝)Łiľ"t&#iXżgä/‡ŘE¨ů@áë”Äę7Tşu=Šň‰[äň•.,‡† U /Z ĎšćPŐ’˘ă ŤˇŚâľL×®Š$B2…@™°Aą§ "$a2Ŧť¦ŚbĄf‘R•R<#i¨0đ[…É´E_‚°IJ%…ĄS(ŚäUa*ť'$“´6qd™ŔĄ…wę‘ä®7𬴠zLźŹ,ň„¦ĎGąo!`)rîŁv»ĐĚFç6«¦ÉŚÎW®wńŰß?âT ĺł( şJ*ťBÉÜŠJ§P\ ˇČĚ"5)ă˘Ŕŕ¬jRą~9Y×čĆ#ř‰p­Öʦ"úFZ°FĚŘvCÉ—&)ŚÖXČ‚8šę0dáÂČˬŐXA=&ڎdGÄ3D‰h¨…’šg,Y.,8tĄl,¤ŃňJz/0ŘPĂ ¦ŐĚd cŞ˛Š¤YŰśB_ÔżHFÂC!ÜŽÔT`Ž‘š"g¤ŔCéę`˘VNˇžE’ÖW ¬¦XĐ* ›¬ÄR€Š‘ °X€ŐBS«Ui 6TqȱUY‡´Ĺ)§±E°¦şöV†M)i­z‹Ň© )˘,ť˛)€µ…UGÍά-–dU[ül-j˛"­ŔÚjIUZ1ćFuĂB®XŚÎš‡†ÔzqŻ?ł1I^ w˛Ú)+ †´[ô=ëę© Ăƶȡ*2b!ܵÉÖ áŇrŹh}±)Ť]°ľX —-"„Č%f%\ŮÖzá® „¦|™ÂnVá­h 2"FĹľ!«ËgEö3Şl "áv©µŘ9“0Ň Ň d!°˛c2ş!F)F[kŞXTl @!§ŞĆBhLGnvVŢYĹúąâ‰N‘\T`Ʊš4 ă¶ ÁśĹ¤ą…A…Rzâ7-dž(F(ů,+öŚ\ö”Ne˛@»!B$ťŤx”cŐZQH’Ď,7MaăŔň3oiAˇ\VŮjE6yX€9ą~Ŕr2 ęnýŠĺdpě¬Ŕś FcŔś FąŔś ÎyąŔśśbâĺJV1@•y¦4á‹-0'„QŞ4'„Q-4'9ÓÍÉ6Ű\ŃśŚFí€ćä”zI0'„ąąŔśŚ%»í€çd€0"7ž“¨Ąž“ˇôwN±łë­ÁÝ*<' yľfÇs2@ `,đś >íÎÉ`4´Ł«IyÁ9i2ÎI„"~ZZłš°ˇ*Ź—Ş ®J_[>šĐśBHÍ!¸¸bë´Î)¸¸`°´ Ŕ!.Jp‚Ćpއ(‘†é3‚RĹOär&Qb3ł|!Nv.܂ٙ"UßPýM„±˘ÁQ·,0'‰żÄO{Ě©ˇ†<¬űKMc[YłJÂ’†±«ľÓFßě«]$A™ŔśL„,čż÷Ł€rŠĄ‘ $”Ó¦v3Azcąń SP(Q‘2¨s6Í»Ɔő‚j§Çf´±¦P„&˝Łęňk˘ˇ$b҇˝¨%ŁdXj§9şqOÔĽm ÄEuŹzuéëŕ¶@ŤÓŐ†>ęE˝Ż}#ô[6EÔŤFa=ÄŘLhŇÄIÖ¬Q·g2Abp•Ü 1‰6Ŕnq‹ě Cd„p‹ŮĹ[°žâ‘F[!˘ˇÎ!y„‘?€‚Ńk=Ň„bÓGÍ#7ő‹ćÔ„&Ť°śÄ`Śh¨"?ŢQ$QĂívYŞ5rH 0F´TkYkÓ·°TçZP”l‚÷,ŁL°¦ąşę&CµX¨Q`KĐPÍ3d(‚=4Tó’-Ä1BË)°F î,ű;°¨hˇ3‡@lú8§$#ú3ŔÎ Řô;fѵ°!ŚDżc,í$#Şm”µńSŁÜď諝)›¶[hIźô"mRËP­í'lVą ĹÖ€cŁ ×m3ˇwë®S ěpŚŔMÜę„!GvA×ÄpĆ´×I–Y:ă„:€0Fp‹RÔ`ŚčëĄű“h#ß¶Ś$ŔŃ×ŰÖyŚQ#^S$˘e`&.ĘMť'ŘŕN~h€ú¤ÝÜh¦ Üx8Clv€;6ŔÁT€S4ś‰aSk[íę^pЉgAJ#¤Ć3‚”Fn BŽ4-’V´µ»×ÁbMÍ<3!‹NRJąl5DͦŨ,:)0c@1‚šEÂŃĎMU”ŘZbO‚{ŻQiYźójČľ—dËúśWęJÎĚ(˘5Ĺh:3ŁÖ$Ó(Fv@k2€u˘5ŤµčúśŃšbmô9/Ć_evıխ„h#ŃZSłÁëo†z§úĘ*=Ět€1T>˛.Ţ F •÷ľ:źYˇňČ7€1TŢúÓ*o_bD1B´şđł!ľÜ‰Ö”× ™B°ÁŢ”‰ ŁzřĘĆěĚ+†gEőb >Ç3°ÁÁ.ŃJS¤cíÚR‹ľaÓçZŔjúŚMSŚżcłŕ7 0FüMŰ7rúM S#ŚŃ“$D”ĹGj¤Đ żëuýŽŤĆ+\ůŘţM_VŮ‘Ś˘ŻčŠVľżc‘„Ä”â-n^őĆ ö¤ŹŮ”¸ 4U~Ě·gją SXL[P)ÍHMôe•-ÇĂśBž¸íŃסéS%Z9$#UX¤µ¦#ÇG‰Ćę|}”he_°ŚâŰFreDđĄe´Ë(6ł­cßőB„/Vg*I aA1Ŕ2â¦F_«3… 0h—AsµČ#ĐoĺH°=ÚU’Ô\č.,Łn_âJľĚ*ěĄ*JR‚GS·™Jš‰˝¤Yš[+âÄ:Đ´üT <§CLşI(#łHĚ·”&…¸„gńYŻşĽ\`1żĂ–;dĘŤäç¸$sXőQôÉ.mIŘ=)»DĘÉÖg˝Jx@2bZM‰,)c©EKP!€¸ťv-jEßQâîÍ)Uů9B®†Zrsĺ kE¦°–şSů92Í”H¨%íZ–ŠDNŹ´jEJ -é·’¤p?$ÝÉJ‘Şěˇčştq3­3ű‹ě\Ű2[öBW»b}Ř‹8Í$ĺ6UMQ+Íü§o(Gj®Tx3 řšąâdf_3#oÉLZLĆ’gˇH|O…"$¤µ0Ő”X>—ďmJĹc&E3J‘âĺd4ř5cçnťJDK¶™Ŕ®JĆZ‘Č]Ó9d­?-8Ct V„ůüqZSöw_4 Eż±ŇćĚšđk ÍÄ”ř5 ŃLyxDTŠ-Ü• …,ľ`nW‚b&l,™ĘýSÜĚz`Ř´ş–¸†M[f#KE˛ň őŇřMꔀhqmd¸†eVy]ę—Ą"5kWڱYJfJÖ€’(`cV>e ¤Ć-._‹i™Á— 6uI^V‹’9ĄşpźĐ\[Ie8L Ť-9ÄĆÖ&­[€ŘXŹ©WčžI”˘tţ•ŞfU)f kˇ)›ßVȵrĎZdY, See·U! \“gŤ•"ădU©âBKŇX„˛Ć<]É1TŠ”Hĺ•䅳ٕí;ă‘©lä7RV•ŚÍa…&Y(R”F,¨˛žU©ĆRô5M)k€ą*˙{ÁÓ*ELIÍ#^âfIáÖ 6+ąČP*Âdţ8—V•o(„$µSLÉü9>úe,éwW$«%PlrdďKE˛˛ą[ô5/‘đËn)RŔ—‘ŤR‘ŕťA)ŞÍČ+UőĹWćźÇ-€lr ‚Ą"‘µ®óP™ť|Ml7–аóeʱT¤‰"˷ֲٕҶȩ—¦b©HŕűjC"’ŐH6‘˝o¬‰t~´Şddű”Ś|ý˘˛U%#“"Ť‚Z¶ŰÖžTĄę4Ď6”ŇżjŚĄ"E©q”ŠpŮe?#ĆŁŇŚ¸ű7Ô‰¨4ĂÖ>îB±Ieí€(6 üČX(E±V}FiF  EĎźVPŽ…"ńl @VŠpN)VoŚÍ*1ŠDé$?*ETš±­őc“¶µX3)Ă|}ĘŰX)čF’µ¬ t#­Ţ¬ŞÍX1ĆB‘(‰DJóÝíČX(2î®pGÖT^v…;˛¦j-Á%QJ|ń=jz¬©féZ÷cm[@6ËÁl۲鱍Y+UH¬ t#mZ‹şQ+.ßőáäĄČŘ•2bĹűÚťŤGýHéť'J^^)%xą˘z¬igJ ±+…ůQ'Ę\ :±íÇÇçJIq|®”˛órQlç墴ť—ňŐP-bůL‹™A4ŕOfHť(Ě:QlÇ=‘‰Áb‘y ŢʦPÖ€ęÄ Ž~ˇ'ąé*tŞÓó§®”+ĆRáwľúń©ťr}ĘđÉ—~DuşROÝŚâ8®?Ő ř VřŐi{xËÝŚO8őŁŕ‰¦űrÚąBŰ,Ľ¦E9"˝ôT` `ťö7wX§őÔ×ijÇuÚź:;íOíŔNűSd§ý©…ě´?t…vşťĎáˇ?Ű©h‡<˙×Âvzs¨ţáŘNÄ÷ríôő§ďľ<~ýĺ·p+¶Ňďß}>:áţĎTC÷/ęôGA)­w¨“!hĆË„ÔifuÚşuzyéÜTŔqÜ\ÖrŕZ,Ŕ_Ľ˙öWĐĹďĽz÷đ–ß©ýľţ'ś3¸ĆćëôđOͲŐqŹ5{H÷ľlľĚńBo÷ßúô'üe#Ďy˙a=Őüo_X$ú%˙;Zř ą˙Ă/ |ňÝ„bî-ńOĽ`ýţ›ĂźŁMâÇźDĆ×—c‹űÔ*§yířŰóĎĎźßúĎ"˛–Nłz|züϢJÖ;8˝ů´†”ęýűď®ďaßüéßÎíČ~ňÉOÁv÷Ő7oîń1=|őϸ†b׹|ćďc–ęJł¬ŻĚWAůţ7Ç1ěÓ·vZĹÇ/Źně·…wČć§÷d.ÇŮé_~zz˙˙ŽĚ÷µ7\äÜyüŕŤâÓ‡>á·˝VOąŁ˝ĺÓ˛śĆńţëc'ŹXX¶ěLźő?ÄŹ­Ü?ž lšóđĐ×ÇŢ?ßř“Wş?ŤW/ç¦ŢĹDz˝˙ąoJÄ\Ú}:ž ×ćçk—Ű˝–Űe[>ńđ>ý»Ż~úć«˙č’éż>ĽE¸wşTúţ)­ăţ?ż=ţ…Őϰ~2ÄX»üđý/×Ď|˙_âĎTîÓ»·öł`çň ý}řôĺgč5}¶-áŰŰzó«_N:V™WľýžN2ăóŻŽňŕKěýü/Ůé¤ů°křq»ęçŽíŰ=‹™‡%~ýţ›ŰNüüFšŤűO­–ú’ěŰßŮE=…*lµ×í™—%m†‰çF>Ęý’›~.nď+y4ű{·Ç{›ylďď}/˝ĹÝáśc±áův~QúŕŔŐ’¤ŹöË ň‡IŰn¶‡z|:-ŘYJ,T…XîŃžD>âO<}úđ9vĘf÷gąŹT¨“ßÄľmŹ’¸ŤÜ ľłŹô§OŻ-ŢŠD„‹Ý)éř »:BŇŤˇŮ}|üç÷Ń»»?MÔF%Ť7ü‚ö ťřţx B{Ťą+ŻŇ¸ ‚µt~őó—÷%đÇů\ “ţ{©Nč?—R'Ő齣|§śÔ寎,ĽŇOśű"Ť×[ą˙|ęě¸PV'n>äšB-/ÚńîÍ‘˝ţ ěÖj?_f˙ŽFٵk˝Ď_žµ|ľs~űyń4ť¦ýé%Ůř‹gCŚOűţéËŤč»ň›”X-§·µIa€m»Ţľ N$äúĆ˙ëźţyĽ]Ęýo^;Ö÷ßiłd·ÄüP=~řŐk0&;g?óëËç[ˇąĆđř] Á·ăĎî^’!ČĆÍîľ„pHW-óöú§DËKJ…HÖŇzýgoĎ;ŕ×äÚ8oőëÂţ.¶#îph¬˙{ÓÝâŰCŢlĽdSřq5ň'/oŰŁŘyýh˝ śđĹâ|#śŢKvÚ´«ÍŮÍă“óəɗZ–nkÚ7ď_< ą~í=#ŇD~¶÷P´ąOwVÚáÁ÷´«éwú|Ę^–?ÂÔÜSNXzä=ů„ˇłů§‡]ť]p#cĺ uÖç­łůYĚ­Űűű[g奣ūŢzW°ĹŹO_ŇĐř*#śä8EżŃˇń]ą3ëţó»›ý&ö”ł4}ü˘EŢüďďń‚ź|—,ňx e&ôÖ—Ó¦~ ľ¸š;I ]mn\;¤©Í]5ćź‹ýmłűÓÎţ"]ÜËš•¶ŕuwž~řÉHČË’ş)ňx43ż şkw;<‚=”Y‘n¶˙ăç“ďđřóŁůíj"źWý°Ë?DĂ©-óWď~ú›ł/ľ¸ľ Ł‹[\7ŽĺymľZ8 eŢ˙v5ţ\-âY÷đoýĽź@aUŢ­µÖĹŮŘäĄü°6ŃĚŰ+Úä0Dn š÷ź×ČďźNăřv˝QĎ&áăç«R†<”\űđţËĘy˝Ź?Î2»ö“šIĹv˙ż):GÎ/ďě°Ţ0„Ť[iíät^ݵ‘çkĺ™ZG{ľ‘łfáýĚíĹ#ΰ˛zoá$a5ZzM{>ýv5ů»–­üč]űlŻ®ń˙\:ËZÝş/÷̆ ţÝlÖ5ŻüęÔyRű źćͦo6Óűoż°­´—ž+*Ę ß{ďě xŰ7ę˙:Ů'3ĺ ůľÜŕńŔWŘ1ő÷żżQ­×uţxłkÖR?ăCgťĎ‚dędü¨`۰«%ęY_ Aęę߼¤§đm—žűŐÚ‹ţÝ;€©ą+o‚nůţóÉNz¤a‚ůš_ f”÷˙öE}é>9®^ÇIë]%ńăyˇźGü8¨ Ď­Wb1qŢś<Ť/ZVZɇý =úţtŤ LÍĽó”ÜÄĂbôioí&pw˛đžN»úóiSřćđë'+–ĎýxÚŞ+î‡`Ń­Š-¬.÷˙ţ5Sŕźßźôč ôµvsţqE Çď]ńµ^ď`ş×šĘ ÖŘĂkvé.čQ߇©ţ·ĎěŔ…ˇËúĎZů-Ą„K„ëŹăCß}÷Ŕ*šˇxGWäíÓ/đ7®EŰýÇOp°5ÜŹx÷!ţÁOŃןôîpć×ü«ŕęáéŰwß}ý.źs>Ťąu·éúţy'ńŔńřËźp‘ťň.~)˝?Ľ˙šôÍ톸yĘCömmŻĆňů;B#Hś/F'~ŻĐóďń*Ä׸Cµb™Ü‹ ÂáÉĎËçŐk׊ăooĺ™jáčí÷áăµ$żM×ďďĽT8őL˝:N8Ôk(Ý^ÚâŻs·¬~50ýáóő…ăCŘiÜŤĺ™ńÇĎĆÔ_{ŮDx!üńőI#~ú|b.8‡śUw÷ŽŽOOă捡ţĎßż —”˘˛ąţ«ř?;|&Ľů¶Ŕt›Váý ű®k– @¸ązŁ-żÜşźŘ†ą>»^.Sş]ľ ť-Ťčć˧5ët¶×Ź7Vvt)t‰hsm7Ű7zwÚ<5~4#ľ,ňó¸'»m?zwA$Bdů¤"lpłŰź^ ¬Ţ?ýäa™SöÓżĆę9«d“"1Ăç~ÚšG>ż}ńî(|°'5Ć\‘Íô—7Ô5wÇ3Ó€˘µčdF'éuí¨Wš}˘Îňćž-3ú«hŔăkÂřZţ´’ÉĂŇPÓsyŕëx ˇ< ㍞;•g˙ţŮFä’5mD"S˝âň¬ŤđĚqňámĽçöŐ‰ŰGEٶNY¶ű[©ű)Ż™c˛§gB¤›.(řYÁÎŢ-ľă2˝»o´ňű Ž"Kaëý˙ünŤÇ÷Ü7§=whöËűS8á' ‡ŔţxîŔo´s?‡źeĺĆĄ<1˙=¶&çäĽ}úôa5ŕć"´#ö‚v\ť=¶ůiś#ýîł›Ż©Ô×läĚűgr˙{mg!qX†uÜę‰/OçëâŘţ°HKą×ß™:éőýÇeé¶×üö[ďlÝ.zzuS<=;2ÓÍi}\ôłôřď^gě—u»ţ‚eÜşůLťd ;ęńfyńF»…íŠQ•qŢ»…ž$ŕ"@+Cm“é÷’Bu™v#ŢŘz:91ç»sśGtîú~}m]ÜĹĎj®Ë^Śrő0Š$ »Täŕd¸ś4ÎQ}ÂRŃýĽ]X$ËăwńçC–ďŞÉÉ– Ń’˛3Źš}Ó=M¦ĎÝŹî7W}Âlútdî—÷aiŢšźxü6\¦ˇŽWwömŔ‰Ź®ěc,_S‚šŰŠŻ^B}Ă-/ÄŃč Q浤·{ŚôöÇ_بßů»ěö,„´Ó>—;”č QÇ›z1@ŃšßJěÍ‘_ `˙ éÁÄKÝǧČC‰§^R‘ÝfD­đ^š/…÷Ř–żóc÷çÔuÝ)ŢČ~{}.Őx? ß]Îńz{kľ¤Le彯řŤüî«“Ş‹Űm)Ł –•Ý?ęO— Ż[˘`BvµSŇÓ­—=n=ltâ˘`ß)zôÖFĆSĺ…¬2ŚËnUÜď¶e?R’ÁžBu@‚ďÁkЦ47úô\^{úü.ž˛łŻň\Öriöé|%ĆŰńJyůyÇ%ď3î·zçÖ9dýţó)}éqwBcs3Ź™×ěëĎŃáfĐÄ'SúĆÍHÚ•ł•Ł.zY9çú,ţrTÎÇd‡“rî˝[(g¶~U΀d ĺI˛˙4;±Üendstream endobj 563 0 obj << /Filter /FlateDecode /Length 2331 >> stream xśµY[ŹŰĆ~ßßAčè §ś;Çh؆¤ŘŢĽęÓnPp%JËš7$׎ #ż˝g.$g(rë ü`Šś9÷ó}gf\Ą¬RóĎ˙ż;]Ą«ăŐŹWÄľ]ů˙v§Ő«íŐßfŢ`ťj˛Ú®Ü˛‚·J(¬™XmOWe›í`1IY´:•P ;¶ű«[ôúi“âT0ERŤN ű3ĆQř¶Ę»ň˝ű˘4*6 c§śŁëň,{g>P¬5G­7 ÍpJ¤Fű` ě5?2’É U­ŮŔpšfčCŮ=¸_Z2Ďó{~ŘţĹ:$"‡¤Ŕ©tţ · >c™ŃŢĺÇ@zľłŽqc~tşdĘ)t©P'JzIuăĽsEŃČ«Ť“ ÓP@Â(xś±UÂΤtruszŞň›DPn€ůůřď]}ş§ć-¸*ôł$ íęs—ď:«„0,¸¦«íőŐö÷·¨ÝĺU˛PFú9\kěóÎ袩Öćű‡ň\Řo+*µX%řFťqUy†ÔBĐSHLS´uµď Őč\ß·ţ—¨ŞŹ×ĺ»Ţ`‰^~˙ÚÚ!й슦˙@Ń)˙ ›|ÄŤC{üÝ`#H*;»Şâ§ňľ*Ś,ÖHŃŢ;Ť.0MG•Zb¦GEüĄwo?Á,+BF­ ǤřˇVo łőş.‡rWç®}aŞKBň†›˝i»ň”wĹ˝›nŹÇ Ľiš:pýÓÄ÷yőTŚ_ţŃܡo>ú öZszMÂéńiüX@Ŕ)IˇÖx‰Ú$\Y‰čo/ˇ‹H‡géJžŤÄŢ­ë>ĉ­•1›»ČYłösÁ´w9Ë~c—çŐ…ž÷*‚‰âE’Ę_ćţŘ'ŰËjľô•*övß[(ąŻ%’ĐĎ,ă†D›ŠV-şépF(¬… ¨(tÁi(ňĚă¶ß%`~kŠë”‚şúT~* Lą śj#,× í‹ ú˙čuÄĽCÍŁĐ˝’µyFˇ/Ź ŹžëĎÝ{ŹçšlÎ!¤ 8=XŁ}ý-Ŕ€ĹôX9P—=çÍń)Đq • óĆp‘$ ułl©=#˘]ušÓGi°*2d˛ül|ęÝo xhIŚŁś;˘Śˇíš]#I]ÄűQlW÷áDM´¦s˛„†âDÍ`Eyź31!(Ďxď¤ZŚ™†Í"ůˇâüľl6Ăćőůý0[¶Y–Q‰;ď|”?ŘdLé<á)ĂŠe“>Ř_VL¦8Ěa‰ŐÝ˙*& Y"úZjęąĚč°ÁôÂ-a4Zía¸+ˇ3–)gĺŰoĆéţG†ţ”Śžo‹;t8‘ŻGL°…ýço_^߼ńŘ7ańPö9?íťQá×^”đ@\gŢónÉŁIëÇĽY[Hh}®ňÓý>_{r^Ž_;PAëăáé<üŘŰ=+ßĘHb¸ú?m»ö\k_ŠŹ^ś«jPúˇk×ŢŤjŕ– ö¦®e×Fšá>´~Č[lŮk=uÝ–Ç“ńŠJÖĆ%™h}Së!ʢŹń-‘ˇ†›aý?¶ĺ §¦ć5Zk2<ľ˘ŁDË ^&Ť¬~EÖóŕiĄôČEA]—­ÁjŰ—hÉ$EĐžu*§Ü:Î52=¨Mö¦!˝Qß ŽjřGS} §ćŞ‚–ݤ8jţqFâi?’V~µ€0öÖgo3 ĎÁ?ś zŤŃöÉaĆcÎł‡+ŕşšf¬bO‡ý±čŮĂLż!™W…–,Ž—…ş‡Pđ&\ćŘÇLŐ]SŚlg±Ci˙^‘YŚ$n,skľvKb1fR¦=Öľ˘żBŚ Ě/ą™•’\tňsT Hh˝xŚDŤc:.«ÜćZH˘ţši/f&›ĆŞ ÄôúvZˇF…s{ż¸…Ąí`k«€3e[/YîÖ‹T .ŹÇŤq˙E ™÷ň™J<–b:gwU ÁŔpđşě.37‰ř „ ¨Ľv…*}˙Sbo «Â)  ĆíŚÍĚ#ćCöLuˇÄMV“>r‚ŕdqR㯲źÍ÷{‡C0ËÇ5Řöˡq/ÁÇ*}ÜëpŇ[„€áŰěLdnoTß„†Ăgç]…I—›ĚFrŮµŢ  ß0xMŰůtş9˛‚ĹôŔ×Îr‡EĽzb Í$`ß3÷L T¤0‹’†^6v¨UŠÄ¨_[Đ(Ě´† K}ÂîÓĹY†fĘf0îĆ&Ň{VdśLíÚ"ćçŘsµu9ś’¨´ĂâGżé7¨ tAhݶ_Şiđ1[Ş—3‰ě P9”…DÍŰ$śsä0·—,ˇć±7Ä‚AŞéÜżĽ"΂Ϝ¤€Ń“´:;f&&'€Řw<Ś-]DŃM\bťQËíÁj™ź ·(ĺĚ43…gÚXÄ·™MłH7Ą=T –@)v·nfOÇLô+f㔑ńg*BÝđ++ŮŕđK ·ň?ă>Ś«­účŁN8ÚáŚĚy4°Ů »m ü6°pÔ_Ž5jĘP É\ĂyžŐˡ°z,¬Ęw›ţ2=*¬Ş K˘źRÝ“YϤŤ44¬f ݡů“#\wć„6—Ošôpń}·±ph Äq€UĘż¤ĄÍŕdlLíTâîţť™h7ąÎž«S/ ¦«˝$}ůW»ć®GłWKĘ€ËfâDĎwŽ­3bu,&RĚ "iC1JAj6Þʅşlă‹ä ľHô]®¶Ě'đť0ń$čÁʸ03zsL9Ő*đŔśç—=ŔăMĎt¶Ó Á_ŢöoB ¦/úÚż8ĘôµďŹł®L4c_ü@É{˙)8ŠNăęţŇD.âju ő ŞŘúG¨«-S‹RŰ.oş)Í[S2 :fđ r‚:ÓÉÓ)–ÜŢŮ?yţŠű)DŰ:úä*úâÖËöt·^:›˝őúťGŤçî§&·ŃĹ! \i±™µa¸ĐşĽŰÝ ęMľĽ~oÁ›íŐ?áßÁę´:endstream endobj 564 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 412 >> stream xścd`ab`ddôńőÍĎË74Ň JM/ÍI, Jtµţč˙ńťµ›‡ą›‡eýWˇ ‚'ůŹ0€srN. /Ř †<†­Ś ß×đýgbšĘĐzôű˝ŁBWĎ|79Ów3ôڏđ—1ßE—u7—´7×¶É•†Dµws9_z±oĹwöďâËtvM‘źÔŮÓŐÝÖ—´Şkb7‡đ‹…óf-» Ö˙Ű>ä·‚ůoľęßyä…YľK­{7[bS÷ŃÍGż—žaţ±BtEaw­ÜoľSŘVµNÍ”ű­ÎV[Řť—·´{¦üwľ?Íżůř'Ůf.í^7ćűůŁáG…ţÎBâÂ{~ôÍ+éΑűŢÉľ°ű;‹qFfuZ\ë¬ŇŤŃÝqÝ9yÍMÂwVw•uWJçBĚ]Ô˝Jţ÷yöěR¨÷ÁV€ ‘˙îĂ.ĽçţúŰ—OΑűÝĚ^UT´ ¨č Š"> stream xś}T{PTeżËÂÝ«’ÄŢV0›ď–i5’hŘ”V:ř-ĹÔp ]Đda—Ý%yÉăl,Ú,+°Č",„á3“ ťz1g\ MZ9bĺ«wsnóőGw#˙¨oî?ßťóťßůýÎ9?Ä(ŠđĄ 9Ů9ĎĚśľbv«.Uřůp5J. C T ˇÁď?˘«ţ-üB؉™ŔźťłEoČ+H5­Oß ËbĺĚ«ĚkĚJ&‘YŬa0o0‹8&žI`–1a2 Ě1ÇóÝA/5(c”}ÁiÁ„Ě q„\b·á{ăĄVq@LŐ·ýčŹŕŹHݦKf’‚öç5‡_z99Óh$Ľżד¬Yş¬vp Gč@Ęč g±Îvđ^ )Çňť?ťß×Ü™łśĐ‚tŐpÜž@Üôá8AF.ń’¨řÔŹżRҢNáŃ?Ň`ý §üͧ1nŢB5‰ß©‰Nť??áÂßť>}î‹Ď—Ě$rŞq†gî–˙• DJ–@ް;Ź%%›t™„˙±łĘąáľĘ˙ęřĎĘÓŘ©‡KşCĹí›Č ń˘â–ÄÍ͸ÖGUĽúÄgÇOť˙lÁłä_Ęát?*ýđm?S2Kă4-oš˝ćÓŇDŇŁâ/u•ż›IhkŃC–® \Âe:đÂč ťlc=,Ub8ËOąqâ>@l†]ŕZ[\{FĹúBÄ&Q)Ą`¸~Ł÷ćÚĹő‘ŮöĹő°źkďîşůµ3+·†Ř ß.ěn/¸[żĘž,C…µ¬Š¤¸SŔ}1oŽvĆď…ß[_éWEđ:·q㦙ëVÖ}©'Ű›*ęrË€üašĘ zŻĂeë­'>íńŞY”îŻűFĘ9#*Ěcäć­Bµ¦ Ü›Şó IuŠâ<ŕćÁ1Ź€%8[Őč‘ůduéě+l3´f˛“9ĎŢ 4 ×h%uF;xţňᡀ˛±_T¸0é&)ĄZiŞĆkˇ*ÖduŰ Í‚Ź]KűCŞŮŠö˘ß:h:UY—Ĺ2»m[+ËÖSRQŔUł«±?ÄÇ6µÉđy`î=wËăw’Ůój,`â¨q4‰žk6gM+gckW÷Ň1öŇúÂ&¨‡^¨qŮ[OâP¤× ]wy'ŠxNTäGłÉ4v9}d ˝1Ő(ôÜŮőOÎ"ď^;FÇűă1:‚/’r/rÁJ’ĄěđÚÝçV1ě¦Î4×›ňü+˘ž¦ĽŔ×ĐŻOűă“C{:;żL ÖduyęGăó~ďĘäŮó-?7tëěéłźűV&’al8yń$>$Şů-Rú!SiĄ±Śl]łŞ$b!ö#óUűYw3ô"űĘ:Ž‹z’† |/˙ó¨ÁČŁ×=dNÖĐfÖ9xâăłp ôŽ)ܰ«HVyłŚOôŽ4rÂ=B2‰Qßšđ—•jţużňŹę÷śéř'8.đEđ>©AN–Z‚ŰU-€lLVZQz±ôä4m‚Íe5lĺřËŢŞ0MÚĚZr‡÷ä}¨´ů#Ö}í®SÉI\¬â}CŹÜí,\B¨UeĽçďî úźaü¶:iaέł×±âX˙82681'tĚ>×[ŕÔ¶Řw„†2Ěßw'rKendstream endobj 566 0 obj << /Filter /FlateDecode /Length 3114 >> stream xś­ZKŹÇö™Č)@|J B7ełÓ%vŕ ±LŔoŚ–\j,>l’’,CČoOU?fş‡Ă•V1ö°ĂžžzWőW5óó”Q>eř—ţ_o'lşžü<áaušţ]o§“??áLÂőĚóéâfźáS! ĺBL­¶ÔK=]l'?'3á(ăL3F™––3OvĹőj6—RQf9ůŞ)7=ťÍ…J\“=î‘Ô;GĆKĆyô¬Ř}hŹ' … Ž;ăíËk»•»ËËť˘Bń©ežjo˘Ľ‹™'1eHĹK‡lŠNUL“ZĆćTúţ7áżňhż AdŚ §ćş| Ŕ­‘„‡˙h "Ň%DśěWUżŞ{kt޶TŠŇ{iĺý­aĽ¦FąhŤëŇűÍr6WbŢË* ĘD˝ďäŃ})z·ĘúUżjčéâ›Éâţm_cBÔ8B,9o:SaŰłsýŞ(…@ÎČîU$ în[ŕ%|Řp®ťGíبJnÔsâm<@(ď,č6iŁKf°•Źň-Ô‰ ŁYČŹ>6ňĘÝcV ä+3j$MĚ_%,Sd%QĂoKÔPÔz˛x6¨š ´‰â¦*ŻŰXtM¬ˇPŤ ŻÓđ€uö7p©Ŕ+Jc¶ĄÇÖÇĽM‘›29÷Ű$dgů@;¬ëQ‰‹ŐEU^–Ľ˘|†•c0"cp*ĐŚJ,r°Ç!igČŢĂŐ°Ř d("ĽŁ*IUEššÂzh“4jŽí¤ń#(ů0Ů€M1» V®ß_°Á˛˝95]ĆęśŻŃľĘ íŰĹa<—őôpů<ľPˇÖ©©áŽjž"îIł+•h6›’éťąAnŐ’ą"ÝŃůţZ€‰­ŻČrď|Ařέ¤†ůÚ.Wł +Hł^ęxÄÇ2ťş q Ö§y9^U™¬*Rq:mÎjoÂ4M>Ë{ŕ™÷Č!ü9‡*i3S °‚sD5?żH¨“=iĺ99=+b$Ă38|·űxx;^‡NĄË&É ÉňŞ=e+B-Ď*źpPË'¨u˝Ů˘_Ďđ\’ŕXw H%“XýČ>V y â7-^đˮϻł(‚ů9"ĆŰé\hj•ń‘Ď“/fs-T¨›öéˇ9Ľľ"÷ö‡e»k6÷ ^ÎR¸|âfËóGţ2ďo€ŽW±Đ®Ó˘×äżx©)FĎi…)ßř¤żq˝ßř9}šI)˛ÄBŇmýĽßúŞÝ­  TPŠx|±ÝĄ@Ö´{č°´Ft5jŘľŘ4z˝"Ŕ™™^ńVEzń|Ç5ę‚yʧ1ę¶iĂë)&ó¨zhÓîž#JÔ "ö°:> 0'Š-Ćţé±çżŮŻżiź÷‚~ůő#ŕĂĂŚßµ§Ő!ß0o~ˇëCłě- "/éWbí)ě'7›Ő/íÓM@«á\ ń‘¶Č–ĚťˇĘ÷\z×˙6W„aĺ :@Ž‰Őś‹ž­ vő ă1Ť6 óhżşąiŻŰŐît|€©xežb-ôřxj·ˇze‡}wZŇŢ*ʇ}ˇřŻ˝“^6›«ţÎżWä‹7żľIq2Ď|‚ďzűU€e/H„×Lňđ;ŘŞżp6Ű9µR÷ĺ~5g¦×ţţýűťĹSĚĽ^Ŕ€AëJĘÓ3€>‡éh[ÜÎBuÖ˝Š‰<™Ď糏—ďÚő®˝ˇe¨.W`ŘžFWAęAň“şy8–jlNI^&I{LG©ˇ\;H˝3n4v‘őT'©âëŢţŁjS[ÝKă&gHáé)łMÇÍDżpnTëÜšM±Ná)CχLą ŁY@´Ň= Zź’Ů2I«T9äÁňsLśŘHëäVäű™ĂᎅF“—ˇ?*'¦Í±jř—Ă®…ë*ĄÓ8Šů÷ÓXćy#:çÝË™ŕĹĄ ‹Š¤‰Kű8¸ťKŻ)”Ă3ČU” 0`"Ř< uć°;Ź$vŔŃ™ Ľ0:´ •+ʉÖĹaŇYv+<z25Í=fv•đÄ×AX Î~Wôq«HŠ](äĎ *ţüÓ%Ë@/s°łĹ˘¸ó<ɦ](†Ö†™‹ď-ęA4Ö±ţ^´@Ćę·”¶<ęcUŮ÷qśÜFcľn Ľß=Cć™PŹů1fĆÄ(ǢsäŢ—‡f·lć˙<,›_Ç™rhÇ…•™Tś8<:°˘…K,›ĄŃŽgĹŘ…OštétmĚTŘ<ăµ#?ŞvµŐ˝ş˛E°°ˇ•ŕßM Wa8 »Őŕ<ĘňŘó CŠŁ„ŕTĽPStÔŃ˙él´Ş„o.Cş?Ś•¸4ŮňŮÜŚc]9î“,wžK˘BčÁ)s]VTšĘÉ` G’űzÚÝ1éFŽI…{év; ÇTâzFťLF} W˛,ď›v ˇL(.óŃ.ůŰš$„y('á±ËxâÝB?ěşî/ä{źř=f˘ "©:—ň ž¨ű „®ś Çgá| ˙‰ń31ŔÚz#Ř‹7ÇăŢߥ˝ĘMAcËÂVŔ%›xÄ@}Łq&öň_ ;ăđş8¸Ş­B oS‡‘A˘čŞ\Đl™!î٤âežb3&[ÝVaą6T‡Ďó•HďF„ÍÇüQę+pfd9돽ôłQ:–ĆB;PzĺBăónÄ­=(~[âHfĚІu=ďmĚĆŰíÇ-Svó—Č+Ę;8ĐŐnq8O@c; U1čnFyčw"8ĐóۜͨóŇęäě´÷÷™Ş*ś Q0} /lüqTT§ŚÓrăzTNPÄÉÎ?źŹű‘§3‰Ü|p)¸˝ěćc|TSŤ#’Î}%ĽÉ~ę}“ őę…ľ,O/óĺŘŽ9íú˙‘GŮśQă!ř®ňô±¬ěEyđŚx›@˝ăÇőş»ĂŹ p©Ň¦őEfŞ#ô` ڞ)”íŇxüŠp|łŁ1€€PŹâK0.UžŚŐ(G…¶@žwŮřÎ˨÷jłŹH–„PľâM­Ý§{Cu7Ř oPĆއY*śď^]j›G'G ‰Î–_ÄŚ ŽôŻĽ+ş†Dëp’ľŕŃN‘ý±=µ/#v3&š@¶Ő5-áS;xó>lٱĽ9%öL‘r˝]?»„ĚIžÁw‚Pá$‹Ó&3xŕü¤¨ŚĽŐ€ą rvĐśWČ:}żůŰż”fp ŚÇ–sđíDµé€Čjż|K†ÂŚĘśµůHřřwa‰đ­źJĘ ,CĽ…QĘ«á× =ĽţźpÁw-­Ńpˇf˙ě“D; Cű;89č ý×»}ĐŃĎZÂs ]Űi ÍĘľ6uX·6ö'c€~ó:Ś–<*‰ FVÁV 5ŇÇ}ÝgßNţ Ôendstream endobj 567 0 obj << /Filter /FlateDecode /Length 17281 >> stream xśĹ}]Ź%Éqťż üdŔOě~Ľcs®Şň#2S€$›–HČ’Ĺ@–2ĐÜ]Î6Ů3˝ěirµ‚Ľ#âśČŞş}{gW’aÄNź®ĘĘČŹČČř8ý»›ĺĽŢ,ö?ţ÷‹÷Ż–›wŻ~÷juô†˙ůâýÍźż}őÇżč«"籌őćíŻ_á•őFŃVŰyäzóöý«Ó*ŻßţF^—|xz‘󚆾ńöËWźźţŰď_/çĄć¶.ăôţuŇ÷{.§=zűt÷ü¦ŤÓWŻßä\ÎK)§żşű°{ě·ö‹tŁśţçĂë7©ź—UĆéËÝ#ú®ýĐ×.ýt˙Ń^Čçeé§oďžľĆOCňI˙}ýťxűs¨’z^ňś~ń‚Ěgé)Dţf×úí.X±ţ߾÷d)©Ěoµ}Ce=§5­ŃŇĂ#¤@‡Ń¸˝m-üôí«żµ Ë7ď>ęt¦µŻgI75Źő\tEäÜô:˛çÜnżşů»›ŻĘऱ¦›oun®˙˙Ť®†żx•RÉçśoj‘rîíć˝!ţ/GƸą7DÎE ŃQ©@:~\~çš$ĽR×óŇ€ä$ťŮ†¶ĺ@9ŻHí@ęą±´«K/±kGú™źîxGű€#ě­¬ö;EtQ®@˛ Ś#)©ř1CýW-@*ľ#ťý—ł ˙2ÎÂFh+čLSýÓ-ŞJĐÎ+źŃ®Ż@8V­Y?)»uŠĐÎĎôEçHĂ3:ëońë]ņt[ĽŽč„u RtńµbHć3ýĽV ÓUR¶Ó0€ş˛ßęčĎH6 ŠŚřÖ(Ö˘#üÖ¨ö´#Ł:T „rŤ®ŰäĘËr¶î4]÷+€t^2uÉg!!ň˘KQ€ĐYÂĎ­č6÷Ьł]˙¤#É'+Żë™Ź” @uAłkŠ +«.;o$ŮZp¤ˇ˙É6ź:DŕËIEäK/ĄdkU‘lćH†ş=€jăęH4# ź;P™˝™˝IĂ~çHFĂyµ9"DTJ"]Ve\˝ťj«×±íHĹPäfŰÖ‘Ndč)`ŘŠ2¤čtT …H˛Áv¤ˇ‡Ş€š·Ól©&ł#٬ ¨ !ŇíwŠôůÖĐc ßRäjK‘†Ż×L)FĽĄJ¨ ´ó@Ç0«kF· Ô]®şÄ@[dUB®¸Á^Ě’ îRěň¬JČeP­&´źuEV=â(RřH·9ÂvŰb?ę˘ŔO«ëTý5ëRđŢ÷b˙uD§ąÁ–Ë:ôŢłAGµ …_ĐZŠ ôÍ$sDbY[/W \ÄÚŤáí4[…Žx‹ŽÄ3ÍľŞHŹu­˙ŞHCÇ­ĄzϨţ"ńLÖSS}6ž)6ËŽp=ÔŢŇ·ą"T˙ôdđ­­Ąú¬zź‹ę׫ú¬‘˘ ČĄP¤6 j¬x;ĹÔŽ#R ލ¤¶˛Fś€EU«-E†ONQ3Ŕőęs§¨ ‚q^”5Ű r˛¨‚ÝfŔˇ?6W[*ÔVQd'CUŮđá´şN­KhâH7¶#|)©p$ÎfQ $ţR6éi¶%il¸źP= ˇł}RJťPT˙t"§˘&Zö—ÄÚwD5‘»™qâXŠči ąŇ2 cXTýTofđČ.jZ™V­:Ě’ýJ•[ą¨±łv ĎTŰLФďŇ\gUť lˇ˘Ú§{;…'[©‹kժ瓢ÚÇeĐąYĐŽjźR H®ÚÇ…Đ Ăş.ŐW‚"ݶ­#ťB [aŽ ×ŞUʞš<.…N+ÇKőOłvtZLÍ9—B®Y3łlUřD;Đ\iŐvžř×–ž¨¦T«>0; ˝™0Dě@2s°¦0ěXü­a“ďꪺ<:›évĽ+˛Nd¸V­v>9`ĘÔ_Ę6´Ž$3+Ö‹ĹÍŮš+Ď2Óa¦ąÔ†Žý¬:ČEȱ–şwĸ¨1k°ęéÝmÚÁ¬ÁŞ Łéłk ]m»ző·ć*Ń]mZ«ęz¶›Ľť2ęőG·”íżěÍtá¶»?ęĐw—}Ľš©ä€ëiVžé¶s\µş±Ël[VŐv8¶-\†V»­ůŐŰ }dkŢe¨ˇ}|…Ű’¨|EÜś­zbáŰŇ5s¶ę˘ÄqbKׇŘ%ŢŇ…jćl•rëB5C°J )uYşŇ7YW©U×é ŇÜś­ftâ[ɧQű»đVaKĚĚŮÚb‹Ű‚2[°6žŁ¶ šżT¨ülýřBýXUą f”` tů¦SůŮrĚRŔX肱ˇĐ… «ÉV‡µ»ÍĺHÚŇ•‹Ţ©±ăô¸ôŘęđ'Ż/¶\=3ŇĄ`¶`Őµ‹ßfޱŁ?gč¬ÚŰćÝuŞžYlDÜ­#6Ź~Á ÁއŽG›gŔ w ól† ,aU5uLe ż#ľţőÇ̆M©Ů˛˘ëşŃ¦´y#ÂîęŚfiîťQ3eĹô;ľl6¶Î‰¬+•śÍ¨é+YM/8P]źŠjęĚfün¦HśÂ6Ő›iŃ?›@+n76fŠę\®µvL_IJ±đu›#aŹWł–¬Uźš’Ü8pd@Ő•0mm Í ”ĽD—UýÂ’Š Sś†äE4źäSÝcµ…·ĘfÝ{?ÝLMUŹŮ€Íü”ýoa‡5U>¦ŻÚtâج{˙u)sFTůto¦‡D:ë.€ń˛›±M×6ü§6éŢó׹­ĎI+~V)’©đ4;m‰Ŕ˙ÝtýSp=BVoGxZۤ‹·Óx‹˛YNţVś†č0ŤŐěHĆčč,›)ŰTÂŔđy¶vĆÓ«m¦l›>›h3›ůHń-sqyHŮ´şĘŇ}»Ő¦U‰»—Íă*@8<Í\G 5łÍcň—Ď:›ÇÖ€ŕ0¶ióGâ,¶Y#ö9ż286If öpŘŚTüŚýnĂov`_ÂYjĂ_\om°Mius đ-wŔGld˝™Íč8¶V” [öf¦ÚĐaënÉ6&¦´şY”řÔ€Ŕś-&^]@ŮXWKř–ő¬v ¸IŰ7Ě4×{_řôl_ŕ!čK›ít·gý7ŢĂľş§ĘlŁ®ę§ó-lš®Çʆ4>S\őÂo­đŁëů)ÂÚW÷Ż;âóŮőř1Ő¶’Ű‚;ŔŔţgÄbvŤ¦6ŕ‡í~/D04fłRO˝Ŕ5`i炟ˇî»ŞźÁ…†c·«ú)”D×fY±`±¨»ŞźZ@ŮôŠ@Ś! ß‚sŔ¬É®‡Lân%ÓUý´Š…†Ő‚M®Ą]µOOŘ8Âş*ĐYq4wwŔڰš:t ŽnaWbhĂ.ĎZÇio~śąîs­Ă uő[§7x IDİý ŤŐő€HŞ×‹RömÉŮŐó Sr7™›‡Z—»©Ă9`ú»»«®w•ÚĂOÖM× 4<,⮿[qp6őu˘ÓČďfă6ś%đ|÷á6Ýĺ}¸k ÁDč: nÂö0纎ŞĐż]G}ŕŘ­2LcňdÄŔŤ;=SŔu5ý7ă&Ăvj襡ŽŰŤ÷ůˇ*ÇÍ?ós ™á—¦Ó‰wVxÚ ‹ 5xÝü“pŐ óW®°<„ w¶řÖ€tő°xÝȡP n;1÷ŻK™@‰óuĹ›`q5"BÔ8ą‡Şq×ń3í0Q#Ă5`–vĘ0‹×ۉ©vU¦ !r§wńQÚ°s®ŠaĚ`…>%Ó„ŤSe0Ăđ>#4a3'˘4·µ±F`Ŕ€-qk13ĂaůŚ Ç@ËKnďĺ°†Š$쌡Cä&`ădÔ0‡eŘŐ™W ¨×!ŔÉ Í8Ž3Kń)K °źcź Ż{+™–Ç@¨Ú/Cťí€)\­Ł!üb—*öŻÁ/`–öJ¤Ŕ\©·‡íż¬…cx´ pŤčĹ0ÓÔ_ ÎčľŘĹ€óßáhË\×jłv–pĆ Ő<.ıźˇĘĂ-Ŕ%bHCŚ ±ÄMltD`ě „fý# ҡŞÇĚXAŘÜ‘ÂKuaH}čď„Wq8.Ćp§ _×9¦v˝vGŔ0ńî_ĺĹ­8żő{˙Ř<Ţ?EÜţR÷бvńôM¦ hwSßQ ¸iPĄŃT!żă6GVú—¤"éěŹ č ?Ш©nš[Ĺ—ź"ÍŔ)ĺ0" 5ćĹ‚!Á‡t•™ kţW劸ý]Íađ)[­tU|J׳{3+÷·"Ŕk"ń[đ ű˘â[¶wč»xĆö—·“8 şݡYÜÖ©ph†Ii®{ĄĐÓ«0ć§©h§Ŕ7`ľśŽ1. Í’˘A¸cŹ4o]‚ďŹ,Bo`~Qó?q |’Ńa»]{# f" ÎŔĽÄôŞz…?sp~k…;3ÍŐW1Ż(űRá0ź[B36!ô® ¤ÔIswfZa)’!E71yć˝#·ř3W‰ üć[lDdXË‹%€Ŕ­,s]›.ęŽ3ĄËךKŹíá{nahODĆ\Ü…ŤŔ3`.UN·n%÷f. ęF‘O಄vńuű8stÓšhţ]nŢÎŚ]‚Ř2\ć'ć«6t˙,­áńŹ°Ď xjˇ` ŮÁLg^’"p§{Ŭ†[ĎŔŻ*LóFčQÄ7 ÇEÜćS$»hžwľTݬmŔbΖd7çé 1)!Ż6A ěůu]×nô”+’!D -°®í¶pĎŻ+c02ŕáPÎj©TčŹ.»ÄřÔ˘:ČCۦ$H!Ľ-(’ĎţR±txI÷TÎ µT"1˘ >ŻyńŘ|e¦—+"Ű•NxE2bó•éuŠ c@4›Ý5`‘ˇ•­4Äę"ĺŘ|…+ŻŞR<¬]LEÂHĄse­Ş~ŁšP-«©/K` )߀…B¶Ó!B‰ý±Z´ #ČÚ0 f­Ä dĐÎ{X»0ú¤Â0Ť+«Â9`»Ě–¤ČĽu*2ś×1Iř–żKaôPUç3Ó«AĆŔ9`1Ć@Ú lSvK¬K~±ă㬠Îw®kC¦¦ĹlMłňůł5{ě…T™­ŮCMZ.łgkÚmV%Ô™AÇg„Ůš= ‹¤Jh0Źs'ĚÖěLVČ–ĎĽ0ŁŹ/1YÓBDlÉšťÉ)95&kvŢ6˛Ą3{˛fϱ(“5{¦Ĺ’“5ăAľ©ů‹1ŔŤ™š}îDs|07FŁĺ2W"l¶3S3Ü&Š0SÓŚ&tŻ3UÓîqřzgަů”01©š¦ó°aS5ŰU2ŞŮzlúÁTÍÖ©-•9ŇMůs5é É–Č\˘Šwô6„ń™Ľ WłQ%X3MĺĚ癩iů™+dj¶°“óÂLÍđůdKböLÍ×dµŠ©i)WHňDÓV¨¨óĘDM:Оe1{ž)Ł@Ů’ć#óÓŞyj¤űĐZł§i¶°(U!MłĹihYĚž¦ŮÂĄł4[šÍ0KS‘h†YštReKböů–ŞĘŤ$ÍFwI¶$fOŇlĚ:Ę^Q’n¶ünE¤Ůâ aIĚž¤ŮâR›sźąĺ¸Ył'i¶…çQ.LŇlK´\¤YëŠ0I3ÜhŮ’#A>Zn[‚<ú\SřičYóÂfV"HÔôÔ<|Ľz˘¦§ëCŞŠDMOéǰW$j‚ –«Gbfe@¶fľ{# 5-+pđ$jÎ"EŠgš* č‹ OsÖ2(Ň Ż„ľdEŕ%5ŮňWÖD,x¦!SÓj+řń†LMݶ@25gŤF¶LćÄĘŽĘgŕ(0„‚wdjz1§#Sł„ď2[&sa;ěOG¦¦—™`:â0ł6%[&3¤@ůŠHÔś.Ů™W6Ł.$j: P†0áň@žć¬·É–ÇśůŽĐ<ŕ'E;Ůň!CśˇeA˘¦#+LĘ™Ź OÓ iń„,0˘–ĹĽ˛P–Á˛ť8›-‹9ń-ŘHŲ ™µĚş#PÖ:ëŽ6ÓXw”y)řrć+¤Č@(QJ¬Ű ł ¤Ěşzťłĺ1Łn‡)9Š%`†w¶<ćÄv*[€‰PŮ™3›]rbŮN\t-‘ąđă\Y¶“c$rcńQŘ-–ÉBŕŰe™2phJbŐNЎ)™µGŚŁdËdFŐΆkŹš-“9ł63(CЬ+KŹR  Ş QŹHˇŢ KË™¶Ă!­ŤĄG‚\MG ¨,,=Š›ýËMÁ’YzC/2#€Ź‹P±nHgĺQâőÎ4ęŇľ4–©ąˇ›`‡dšµRĎëKF§YËhq®HaÚ!–ŇśŹ@šš5B»vC*M i4l7¤Ó$ś9’Žo­iŞÖ@2 Ű ©´ 7D.…X;ŤÂ SuIëT®¤K)RˇQ¸!őRŠÔhnČę‹H¦Ż`‡¤©\É´l7¤Ň,\y5µÜô)‘>X cDĘ:ők ‰¦í†š†"´m7¤ť/€1•0‘şL H˘e¸!ůÜŹ@Ąe¸!BŰvCúTaDd9ţ¸N H¦Y¸!…vá†ČÔ´©ż—´ejŘ@ŇĄ-Ó0Üz)B†Ň/ĄčËÔ°¬—RôLëvC Ă Z·Ҧţ „Ž ËÔ°$š·’inHĄy»!m*°@:ÍŰ@,úżĘYĎídš†Rhnś/i2XC9>cÇoŻé\Ź@™¦a uš†´Mé"¤eš†¬—"¤-\"e™¶a ë´pÉÓ8 ¤\¨/Ë ŞHß,‘1 D"Vaq|«¦i RÎŹÔ őe)RBÔ> D"˛\ !ë´É:¸]ڍů`.éÚµÁ¶GÚz!AKÓ@ ¤\¨/KëH;_ĽÔ§}HÄ5Ž/ő4íĂ@ň…ö˛4Ŕő‘iĺ:ňŮ$U‘Śâź÷“ő#űÉúáŮŔđp@ 78 ž0ąGŔđ„Ô y“‚Ç Ç Ç Ĺ ö(HÚ„ ’7!v@6öŽ Ú8?ZŕŕäŮ˙@R¨ąjt4ްĂNóŕű šˇiv?iYÉĐÎ|„ŕyp9ěäyp„ýŃ#{žČ9žGČ9 +ÍÁ ·#Ď#$¦Ő#™ĎŤÚ ·#Ő#p=8‚şr=8ÂŻ#=\,>ŹŞEr=8ÂŻěÁОGČ“˛GHh˛GYVšQ!I˛Gđ)p=8@’p=8"{˛G:ߢąÉI{˛GŔ-D˛G0:ŕzp óĄ“PWb4Ü!C v;=8Ŕ }=8‚О=8B‚JŠ"~'{p€eŢ {p„´ {p„…ß {» ‘C‚ć*QšD˛GŘČD ÂRf;fm Â)˛=8"$eXˇşJđŰ‘íA삊R˛=8R‰,Â傤{»«.tŽ÷;GČ€ŁN,ŮŚ {p„UůĐ Ži#ŚÂĺ—d|Ţ‹î'ă#¤Făäüvd|p„@Ącľ$0 ëBENÂGHZÂGČ Â±+X"QC‚v­ĚÍ Â±”h >8Bf>8-w·lkކAřŕů0Ŕř y–ň“ôÁ‘JVę–mŤz$’>8RřR‡e[Łâ†¬bWD.og}p ďYÄ,"ë#¤2AĆ–X’ 7ŇÂ!XÄošdkX ľfĄYÄ.źńL†˛Ěg*ěBY'„@Y'D‡]Aô`}p„D%^ČÚ±$ź=ë˛g}»ç&6Ó Ä¤2 ëxjĐžőAň¤I%ë#$kȰm7¶>82ř’P†`%énžĐ¦$}p„…ë+}ŤEµÍg r>8Âup>HžĚ› }»v“#¬’#é.XiäHP®Lř#éxŇ)*ĚÂÖ$}<),Iú 92ťôAěęN">e5qpÁúŕHßł>]ď…Ězë‘öA,ó eú "‡4XᔀőA,9 [´’‘šy?i„>űIű 9ŇgöAň¤w$í—€ŁÚÉłL´’'u#iMEÚÉ‘Z´biVť-¶#¨~Iű ć[$Á´AŇCÚÉ‹‚Ó>9đ¨X&™*@ű ć Ú)“S´Rf :iÄ\xÔ@ʤ$í”YšOÚ)Kw‘öAĚI±îi¤L~Dđ>ĄoĄ=ďעđ%Źy-HCޱŚ.Îąó>ą1¸,Ŕű îĆ §Ă °•î'ďX–×÷AĚłA*đ>y6„-Ăk`y_ś`đ>H™´†ä}ËűJ{Ţ1g +Éű îě@Í9xÄĽ,ďx*e‚±´bVŚöA,Śĺí }sd"4sŞ´âąaD:„(Q›LÚ1§z Ú±Ü0§÷AĚ'‚CÄâ.ľä11—ö9™¤”(¸&óX¶Ř ‰Ăę,ŃőX¶ŘúAJĺbĚúS\›Ŕü ßďč| kž´bÎÔ }óŤđg÷»FH áŃq×ČžőAÜ5·,Z ÎČŤöAĚ3"{Úń”_t´â)ČśíA vçýd}Ň‚Ş†¬R|wŢOŇńgŮńŠ)=.ěd}Ż Ň Ăä$í8÷.:ćq^]26¸z•e‚Áü ·Kv¸ Ě=‚Áńw„ŚÎű ćÉ{ޱ,1îJđ>SĐ’ÓÁK:ÄË]ČwyGČĎޱҚʷś÷AĽB€Ő˘ŠWőÓÁiÄrÄ8íÔ¨%íX†XßŃ>ůAHeć1GČJŞg~w„`€ťüAÜB'ga%Źb3ćAďHţ ć!ŕ•2âµ`('ů8ź*jëAţ –VIíŕÇŽ×ÓMöń”0TţAjŽ*~°?y=Č:öqŻ>öń"<~j@Ä˝î'űxyÚűßNţ ^7˛y?y9>ăäR'K ÉÄSŔđ)?Hť,$,ä~ssŕÜ ÷›cÝs?×aB*?ą9H`ň±|/ňL8ů—4 K÷*{ň1źűňńt/VE"žě…îüA<ŮkOţ –ěµç~shd>b3iĹ5üѹĽśúAĚ™Áü ćĚŕŇó3=De,©kŮ3?93ŕŤőX!1¨¤âŻÜOę©ř+÷“úAęFwę1g‡ÔbY]ŕ%ő8Ů(Ú÷Čd $÷Č~Rr?Ąu­dh@`ĆůF!¸Ä GÉôŕÜbţ Ü/Čý îĎŔ,€űAÜź÷?}÷?ŁĆ^Kô"?ČÄüÜA A…ßý$ógP ?%z„“?s˘„ŰÉD\ľźä"dîî±Ä/2=8÷{ĺřÎý –öE>p?Dl&¸™eôŕ~ˇŻ—Ô"á î‘  î‘pó‘űA, ,łYfśÜÍ€űA$ČS‚űAčH¦ âaĄC;ÍlźűĂľ7`Ř÷ě;ˇ@ţą3#™5˘$p„¬ ŔďÉ|ČÉ`äţsÝ“?8ÂV@ţŕK`AdĆN‚ł?8ÉŃ XăďŔű#•D~q„ü đuLĐ?8r đíĐH#ç™îé|OńĐ?8Âv@˙ŕ{SHíŕßp„Ä  đ-^Ř|¦:‘)¤qč\›eô®řčYIQ¦â"Őč\ą‘ýô®É©úG¸Ţ@˙ŕŠ””  p]ËIýëcŽ3č\‹w| ô®éßrúGČ7ú?Ö=ýź!iG˙ŕÇ ľö?‰2ů ŕ$°Ó*ó_Â~˘bě~č‘yě~0’Cě~x&r= 4c,Ç­©2·ŘüÜ{ö?Ű9`‹~`¬ČţŕAÝł?¸Ń™Čţŕ†EpF kO0)¤~‰8eP?¸ĂúrP?¸‘“öÜn‘BÜ"Lhę·¦Đ90?¸ÁĹf;lÚÔŐvˇ[m”ĚnŘ­ä‚H´Ëdu€ź@‚”-܆$Ä"i|¤Ă\Äb9h??¸I‹Ţ KÁ­^R^€řAĽbGüŕĆ3Y Ë ’¶ ~p#ś“âÄbqGôĽnĘ“ĽbŃK!ËC… ó6Čű 6;`.Ľ¦ńx(•ÇŘ V$üC2?ŐłŔ4 ń_†H<â±ŕ/ą+@üŕw*˛Â1Nµ9Aü V‚CÖ ?řý-“ ‰ÄKy ‰ÓË}0:`~đ›b%Ďâ1-ď¤h § Í1óřźČ ‚$N‹Ěľĺä~Ż%§ ČÄ"ü0`Hţŕ÷ca§«@$6"Č„Ů÷“üÁ®âřśvWç‚DxA¬˘‹SîĚb¸„˝ó{Ř»~‚0ŻČü –UAş 0?¸ßóÔ2‚áÔbů¬U_8:0v ~ć€ÜOî±*şNvdpšOe%„gpšŰ…?#ÓŠő$1ç ąV: r Şç~Ë…Ć"÷ű‰–=ůű’Đ{?§ÝŕK pŹ9%@ţŕ^+,=’?H…‡ů~’?¸÷‹¤`pYć3Hß´*KÖđýA,i3áĂ#čÄR™ŘCĐ?¸GŹ=ý{ýŘCĐ?eMiR8ÍwČýű’žĎĐÚÓ?¸ź’ ú±D/Î0褌X~¤p—(™: #2cs€ţÁ=«$Đ˙{_+äp:ůĚŽ˙Áť¸$X˙X}0güî &IED¦G <řÜĄĽíIś%(ŮH˙ –ÄG§pç5©;@˙ ţG1y p8§ôâý$ Hât¦Ľúqö ,Đ?¸K6.éÄ‹˝0#“ ěâü ě Č$i@g‘%ş ö3p €ýÁBř‘±*ÁëęŹep|Áý –*¤q@§ĹCpU"÷Xb)YV@ţŕqŚ9¸<ôÂ1"#±ŠÁýŕ!śLF†r8 y“©±÷“řÁ#Ed*óÇ—‚@ŃÜŁČĚ”bU=x ś0ysĚů&oŽŕ‘!íĺÉD"HŢÁ®BÚŹíSLaňćäÂäÍ‘‚¸ !{sLöĐ>xňÁ ł7­h 7fovF«IűŕY ™/1{s’y‘öÁł#ęŽöÁ(`čöÁł.¸@űŕ—Dgöfg`‡´ÂjŤűIűŕ)Üń }đD.“ÁěÍÎ\Đ>xnIÚó>xţ 7Ě`öfx9ČűŕŔ˛ç}đDVŐ÷Á“aČŞ°0yłĹťŤĽެl‡É›“`ŠĽž›ÝGŢG@éDŢĎďÉDĽŮ‡ĽŽÄ[ĚŢŚżUĽžoÔř ł7-m ̉ٛ¬ ~đd'Ř‚ä~p‡É8‚ĂŚ´Č·ÜÓ>8Âf„Äö%ë§vBŮ‘őÁód}đśQŘĄd}p„<)˝ĚÜS.›Î´Í×}˛> c•o!mł„'“¬ž ËO ¦m‰ĄÖGH˙1¶Y¢ ëçá6"LŰ,áń&ë#X\`}@Ęď €i›AÁ¬ŽŔ\$ë#p–‘őÁSŰžőÁ¸]Čú€Tf´Ľ2młđO-ë§DăňFÖG˘¦m–4ŰaÚf ĺFÖOІAKÖ$qH"N`’>8˛îI<w’>8‚MDŇG°%Húŕ ’>8‚-!™y›9n'$}p„-g™ąó•ÄĚŰ̡}IúŕÂ2$}pç IluAúŕ?U™»™ĂC҇­d!HˇT•É›Qú¤(Ŕ3˛ŕGě{’>l5Aú€Ę |YĽ™ăvGŇGpÚ“ôa+ů҇­,$H¶Ň‘ }ŘŞK‚ôa«@ ҇­J%H¶B– }@±‹=Š=ĂT#çjh Dgň&«j‚ňa+Ľ Ę”ëđĄ6+zpr’ňU?j,ł, Dx¤|Řj…‚ňF|«Îş$(8R>luIAů€b&ď)fyPŐäY•Ź7¶B*2>ĚR« |@}[,J s€„[U fÝWđ=lĄaÁ÷°•ŹßĂVtFľ‡­.-ř¶Úµŕ{ŘęŰ‚ďa+ ľ‡­L.ř¶Rşŕ{8 eI)!ßĂ¬Ń ş™e|A÷ łÔ/čdÖÝĚ Â {Ř# {(; ¶™…‰Áö łś1ŘČV퉅D¶™•“Áö°GŔö łŢ2ŘdVi’íáÔYKɉ¨ĹžÁö łD4Řd–ŰĂÉłš’S3«SůŁL pk&ŰĂSDŹÁöp«ÔĂ E¶‡˛ŐzҢʞ¶‡=¶™UÁÁöp@2ŐÖ†DągÜ Éö°!ź˝J?Ű1żĽ•{éGŤí)™śńT öÔróîŐď^­ËŤýŹ˙ůâýÍźż}őÇżPyoTu·ż~µâ‘»Vdă)±ĚRm˙íűW§/îż|ýö7ŻŢŘé¬*ňĆśăEmť·_ľúüôík‹Č¬K>Ý>ľ~cY0©·Óű×˙đöçŻ~úöŐßę˙~§Ý%µĹôĂ«i6=´Ó Óáń«›ż»ůđ‰ţć+ýu˙żqĄŮŞŐbý˝µÎî>Íń´ą5«oŞ_VËU!řiłŰ‡n‘oµéźë˙Łťů $8;IĘČŢďĆÔÓĎ^}®]±cF{řúĎ/_éžP;¸jcóqü%Ľí}="hŠ|†´‚Ľ%ĽßÝSźłń­§—m]ĎÓKĚŚ«;ŹŻ=µ=#đÎ~jí\› :d3KŤâ=c.~5ç"ćˇyě´îVl öŐ˙·‹Ĺ’†ňMőPbóţýÎú‡Í ÇfRă\ź·ăËÖůó=VuˇźÖxr߲ĺ[$=’öľŘä˘ŇšLW›T“Mď©7f‡7=¦ż·Éuąh2_kŇn öq»“/z;řqM–ťí„IřĹ_°ämĚé}?‘–3ţ>čgH]÷ĎŘ=âQmăř›Ď˛ČĚô§ÇŻtŘÍ XóiŐ92Gܲ”ÓĎîď÷Ź}|zĽ}ş{ř`›Cf==üš˙ÎëééëÝŁłÁŐţix_»ôÓ<üôĹţ‡'ľ˘ßÝšM§§Ăďż±eŁßÖž~ˇ=»*‘®´»čp­/vňăÓí‡ÝoľÜýűöńËx{ڞcŻ­ŔY:í»qŻăő‡×Öa]šó{-źîďöźű­ý"»čďT@óů,ýĐ‹°÷ěnŤ};¶IV3ĂôÖůöŻ^˝ý/źź~ęż-]Üéwżßý€‰ś?Ďýĺ‹IĹďŮ6×WŘęéľrcNxíŤo›u™;ĺűÎŻ´€›Ţ¬v ~~úőN„µŔpOi1Żř…ŤłÝhtľľ=Śł˙Â.rDZ˝}şĺkÁj±›ˇäÓŰ×7Xd=Ýţj?«űÉř—Ź\˛n;Ž\ů \˛ô|˝î°đö‹ôÝ×ÇŇNŃ»­Ýâűŕ+Ľ¶ä;ŐGëô‡×ş§nďž Ź˙^ÇíŽo-56˛Xz;=~s±[wŠ`[›řőŮŐ˙KL3ąŢŘŸë)ĺůĺĚ[Ťé±§htdŰ•·Oď?Ł_mi&ŤŃÉ-úĎ/öO<°ëyh[·ý1ËŞ¸| ©•ĆaŮ˝ó^ťľÝOÁÝ®’6÷5:­˙>Ý}¤ës} ÁŇËZ{ŁÝţ§[LđZš¶z˙Ä/ôöL_č"ęűE”¬ÇN—Kďщ_Łúňţ+’ézrŞ-Ą†ăęOţo>Y—ý“oĚ…UV5Ţěţ÷Ńlą1×ÉâĎZ˛żućŤńžëĺŇźüMމRżß¬óçőH˝41¬Ę='ULƬӖ YVť(Ë!='Ę4Ă€AčÓQ¬Źű_…fŻjf Mń)Íl×iS¶#˙pĹĚg_Ö˶ď÷ËýÓz9ž|A/[Eą}şľw,5©üŔ} _§6®…Ö–~ČĆ]ő"XżţÝWŻŞ%‹'öyşwŇKwš» ËΚ Ĺ~ÝúNYőŘŃKŚźëm®¬’NżÂš–‹;ŢĹEËj'Ρ»_ďtÄŃ4ü’Żčýň6ú%×ÓU¦V‡_Ý|G«‚ybďÖ|ş}ŻVî‹Ń¶^Ęi˙L,íĂĽ·A/ćłUí{GŘĹʵúçgÁéO®ÎłĺA- á™šŻŞ]cý¨ůŇ4ŔîÜ.ŹŁČĽÔ踛9í3^Ľř\łh~Ňx¶ĄVOFţ˙nŹý+íűaGě’>±ńMßćôŻybŰĆ_Fůˇ_ľ˙Ŕ®ţŮŮ®çĹĘKěbeÓÜ šLßw´¨žîíP3Ű_ĆńND/‘ŐÔ ńŇ˙™Ý˙b[ŇH/ÖŮ’ŢŤľ÷˛é-í(Ëǧǻý­sáŘ}^Ď[|RRN¸ˇ¬7”Ş˝ěqó]Ń^üÚK×›«jĆ*Hd‰ÉýŻ×ő‹ŐäŃ?­_–~ˇ_.ňň™˙ČGFÚ­_«•Ş7ŮĚ0\©O˙öÚz3V3;ŢěžüüôËÓÇĂŇ»˝źsÚ3ňá° ?ţň5[‹mŔ«6łQŚm¦Ć'v őčnÁ´®?` ľ±Lă"r¸}ĎÜ×ţăµřUą­LŞţHĹ#-ý@ĹOţóĎęgź9{¨E˘ëQäďQ –9ąčpP¬Y›űhľ1>;ŃÝűĚ—×ćzĹr2Íůü«Ăú:îČÇ/ÜgăëKęŕîµ]úŞvɇMŹĽ‹^TëÔĹţG§JwW˘çÖvÔĐŻĽ{xü.ŢăöMÎOöço^đĆ ‹śqń™S]3źĄ‹”» t8ˇ–ś?ٲîăë6‘WrµŤ˙Í/^Ű«9VvŻ\tŮę•b ýýŐ“ÚvÖTn˙áşŢ˛,üz”ű˛oćnžÇ8‚2—cŚ9m®S;.ň"v;»n‚`ăWĽxŘŃ˙řÍnyrF˝¤ú}ZÂ7đ×¶3­BŇś×ŰÚĽa¶íĘitokă1^W‹á?XiĐŃAňp]ZŁd)É7/\Y;…9žxm#Knzđ⮓»|eJ+[-˛ßě:ĘGóéÜŤVťű׺g ¶ÝşrĐ!?}Żîzfű’  `o™ÖńĎ,ýą‡Ňđ’~ÔŤŃ ŕѰeh¬Őc§ţÓá©»+†dÉÚŻÝPĽ ěżŘ_Co/]ŘXzĽl áđČţ‡ŰűűďřŘ8®téŐőâ,bĂXšGľpĹî]OżśŢßţÖÝ_«ĚŠŁGöŕłšq9^!ŹýčÎR_Ľ\~íÎăôÝ7’Ú‹öëëĎY¸Â<–v\·ókůŮÂŮŢ˙ns¤đ߇<ľ‘O˙ô˘E˙ř€KŹłĄaŇ·—îm稒ťÓ`˙%ÄzW˝ő<[GÔlaIn¤Xu™y9˙úđĐ·O‡ËŘ›_ÜbK–RÖvpĂ|´ŰŚ7"I—ßeÜű™+ÇżmˇĚř·Nĺ»0BŻ\q¬FԜ̣_ňa.´o©şĆ33esÝĐ.>^Ó^–vşnÖ„ÇđńҞ;áKiôńćqmô×/ěäG63ŕ ľş¶íý˝o qJtąpÎű?}ÍéĆö ź{şmšömß>^ěÉ©’^ď€i©-ĺ _ăň`ódü>qĄ{!´Ć…ž*´\*‘G副hnKKXź×kŐqńÝFЇí…ţĐuöĆ)9ô.syMłŇĘĄ”ĺ^‚ĚyüxÝ9w®‹i@&őółÁQë//îsw·Ń˝sÍ+Ęq Y!j—]0îËó_^UWžŕąî/čYŠËĂ«‰Nůň´fD×ýmIÜßÇYW^:8îyO+ujÚË[ŹŰ»áA‚ÍĺÍćîާS®[“ŮÓGźÎí~MɓתoánUp§‡ČĽ)Wm›5]h3X,VĚÝ‹«éůŤ9rwnăëő°Ň^LŇ1ý…WrlF¦ř<[Xnâ´-`Wĺ{vt šľX,p@ŁÂ†ńҤëŕęš÷÷­Ű¸}áÝ_§Ž-O—ŠÎŻVŐìö'IҸ-ZÓĺx3ŘoÖĂ-vk4ŮZAăř÷ŢűÎŤ>˙ĺ /~+yy8˙pÇ6¶ňĹţ_ůý”úĺéĎţúoţűOwŮ.¶5íK‹AćögÍýWüŤTíÓǶ˘Ń~­Ü~Ľ @A¨vrËËú]N÷ş{®™y9ź;y/nůŐł2úÁŽ8ýçë×ünWç°[Óu_FËé™öÍÓq§ů-g`k^îdÇ/l]ľPŞ ˙•™™ŘŘ}b|·VŹ»l†…» _,z|ĄŽËÂTzŢžž-?űI„ěÚég\µz:üŚ/›Áq‘4büŚ'xÉ/Ľřőm™§ŐćÔt˝ţ+F·Ž]Ž«ĎŹ=ëçŐEµő;VWwżh_3ŁKĎ὞¨¶ž?=.{7ĆáĘ˙´eŮ^ú:\D]°÷—饻Ëłsý‡ÉÇH€N‡Ézzć_ö^éu-©ęâ¶`¤b=h÷ď?éĐ˙<¦cYűEŢŢá˛}8 `ąW±Ŕ.ř¸ëűÂČ=Ë}˙‘bŤvÚg<>ĽgŚr8Ç×ń^öG»ĺňčŽ‹Š’ÉF ¤ÍÝß~|2ˇĚU¶^¨˘X±FU75˘Sö36¶\f C ¶}űô,=}7qŃÄşëOżČˇú íăââň,7Ţú¸<ż'ű'ÚQ§VĺŃ9v™ZĺÍŞu[ŰzXěřřîîxšß=ͰÁw|iĎ4łó4dy6ďŰÇ-‚X‹O|Í—Ëó•ńz¦µ›‚żćö×»;ŘE—Řj$ŹaľĄžY C¸Ş÷é®1CĄ_óÇ$]7ĚäÖ3ěîÝÁ~}|–ęč-¬ĎÍÝ»›Gľˇ¦ČĂă‹Já1©ÔEMŘKĐq­\čs]űe3¶Ô;$˝A]9š!ńvŹtńO`§ÖwĚzŚH˙Ă(ź´»LŘr¸cĆô×ü‡Ç8'|úŢ2ót­ţÓ~r3mÖ‘#äç©Ţ¦ÁĚ÷`©Ţů>Ça˘ł×Ý-WÍ…ů%¶’9…ü7?¦ĆZłňšGľŰG\ -¬÷Ëöl™ŕąö‰ĹdýZžĺ,¸úMgőńŢ˝ĎnĂďşř,OÂ%ÎÇ›­®¦^Ŕ÷ĄU\”ąÜN˙r™1ŚnˇN»‡§r±Ýoß=;Qí6¨w^ż=JÚ.Ţâ.|ł±ĂŻĹ‚âŤOíp˙“ŞĎLÎťűě=îŢc-ş›,¬n„ľŞj®Âµx˝ćXŻ‘Ů—´‚[ľú°Ýý¬ŰȤ‹r0kĽzzŻýJ,2Ŕ–ÝťŽçŁšAż… ´ĺJĽg·j°-męmľyô¬śßťrÝ1mTłyóô<=žźż˛ZOW="cgS>Љ=.Ss–CzĆăů3µŃŻ9`Ť@j—0n˝Ô]˝ÄŃü»÷_c Ľ*ŤµÜßţřű«FťŃ#•2ľ+o|<ßßŮ˙P˝p˙űăM®rlęÚ_5×ě˙Ýűu'×­Ěô‰ďó1X3ˇziŐxżú‹‡Ó®Rô˙PE iendstream endobj 568 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6842 >> stream xśŤY |ŐÖźR2Ž€ C§EAAÝRŮZˇ(”R l…Ň}ß’4iš¤IO›ĄMşďűNYDŮ—˛¤ VEá©PźOPźzÇwyżď»“–ŇÖĎ÷˝6~3wćž{Î˙üĎ˙¨(‡ËW¬ŹXş5<öť©o­Üş5Z¸32'ý1ŕO q„!÷Ś;É 5 GŻűěEJřY˛0<ÂďČEQ‹Ł—ÄÄĆyÄ{&lMܶˇ}q‡( ďE4ť.°ďŮóş´XÄÖ?.ş˝÷¸ëI0G¤® Ä ÜŽžÇj폽ŐýC¬S[ŃVP¨¸ _đáă0!ŹÇě—“Ń>Ž?”#'fi¶X:ĹÍm!,„ 7 ~÷ů§Wáśô”NeěGĺeV'¤´’zóŹř/ČIcÓĆĐRÁ„0Mhń$‹śćřZ4K]^`l46D“xôZVEŔ”Ó˙ŔçDly(ţPÝ÷LBµýěö ˘iÖ»}6 s˘ňî[‚I +źcuřΆ~µ9ňf4OljŽ(IUá1oÎŚŮSaéoŐhb5zó×ß:9xÓśQ™É’h}ąˇ¬ŤâôE†ę0HUŞZĄM]rtxÝÖ˛ő€Ĺ€]ńËaŘ3 ؉_F#1đSgá}asmEo[Ńe!üWlѶ=6•íWâš)ľÜîđaî?ľţŕź´#”aß ęŤPřçĐłÔ´'u}†UQŤF‚W¶C@·˘m-[(›Ŕ9ý˝±Ě’¬;5I2Çs±ë|H¸—s$ď:ÇWśł\:yÁőr—ľŰ?‡¶|Š!îjB§Äµč]/4»·őÚż zö™(®ďE´ŤFÎ-čµZ4l›źź‡‡aG`&Ńwx™č‰ »$`¦—nXť>·!‘­Ú¦%ŢQńYŘç)p6ĐůS"6ąTo¨ŘíÚdu`\ýΚŐvšL0Ź_Ľ5‘`ô2śh«®dŘ'»phC?¸Ě}Љ·řbĺęĺłg Ż»RxżđÁŰWŔ°nBÓ…G—Pś)K<ág #F=áMÄ…ťúRb¸AzĽ6Aľ„Ăeô^'Bδj›VŇ -`¨Đ—=äôĄz˛0tŐ6;Ó-(@„t4{XąN›×.­`(×—‘@Ó-»p#19Ęn˛Ý• v˙†őő/?ŠnłŮŘÄôbôž Éľqf'đ‡ůÁb}™ćŁY°–%y,7µp¬­ŃHŢďŠôőČm;ŁĚéç¦â¦.F‰ň;Ň„Dě„ď‹nţ€^pŐĆä'T“„­,2Öv[,|śĐ@ŰŘůĂ™}Č_áŐâĽë]'sy2Ľď!šiöwálÁý°3ĄoJűŇ{P°Ťüłk v×jí®ٵJO÷8–ý¶ËµĎč 9Y‘ÔęČǢáâââáĺˇFŹ<.Üŕ‘—˝ĎPÓÖřwřĂ2˘tÉÉŤĐ—eOúPË´Şmĺx.ěš­Ţ%yű—äNŮ‘´[)Ęuęť[‚§ÂFX›+żĹčJtąQĐ…ÉDN+IŹn3e–´ÜuRWhú[ΑnÓ.Ç…ŘĽm>¶‡Äk™|0rëK ĺA šxm˛b…wj,,ó C5ĂnŮŹ”"4«Ż“Xo<‹f™‚;]€#ČÔ’˝ÉeŮlŃ»=ţ­üËvŢŁ·a­dRÇ®ëŕrî,ěě2ÄG’ňBS*Ńg6’/h˘@Ěfú4şÓÇ?Ó.Ľ[Ä~ňŽt–<ÄušŤMź Ę§xţÓę-Ř,™ôi Ůű´¨cŘe!éĺPâzť.ŽÔřŚ‚H É'ä+TĘ. Rvú@T?|îí›3äľ,˛şďĺ˝ÝŹ ;ÇóHE@~wź#‘ă)Őŕçű&CŤßĂ7}ĐMQ]_ź“…‹Ç6ĐgńCÓî2(—R¨„âf䆾çú–!­Őé^'ZnOźřkü-»‹…Cxôµö˝äÉŮĚYšDpI#Ő!¦Ćh4IŞ’”E“ş#Ő„(–źÝř:áţ©ÂďŻđďŠzy1ýstÜęđ7ä˙=ňw${Ť%{ĹňĹŕçč$Át˛W%”s”ŹŹ‹2h¨ŃŇH»‘©č˛8Ťj9~U•ŔdĐ:t\t´GĹ’»˝_S `Ŕť\,H÷ď7š­uŻîż§/Č®`2étßü|Vš9ąň  LE9Ať\qT—ťvč]µ:±[řrr‚Ř JŁJż…rąW·Ťß€-0äîš°RIqO˝9»-+'3ł,« 3źäÖçp8Tľ/ÖbÎO2‰aK'<vm Ů'Ö-´řHĆ^×:»Ę`đä_ÄÚŘôř­IdaňŽÍćş‚ZLűĚG´ˇ±†VujBđ´ÁHţš68ł×y]·ÓăĐ 4 Mí'%¸¶źď%sjaę8Îű§űÎ.Ýw“üS-¶ź~'ŕIx†h;ÍÖ÷ą…žďA]<„Âďhw‹€¸.ŃiGYÓe@7ˇÜ°"Éž› vţ$1ç_&çĚ'&mBz|+¸´€ľĚXÝ%!z+É$" G>XÎíý´L÷g;ĆĺÓěłĚPŢU1´ńBĹTŰ3ąťfůľľ›Ů7©Ú왼łďE~HŻň‡­^Č)ŔĘű“ĚB~؇|g’ďĘ;^w˛îů×däGÄ–÷˙“ä”Ŕb •¸S™$đ^Ş)O/eŘáÔ:¤UÓěKT_ĘN‘·°©.ÓÖ‰ Óó\YăÉFúţCźšˇpŘń^rt ĎNť4 Űś•OŕHU¤%Ń®ě'ŻEBBRz”jkíöŁđ.!Δ‹$Ľ?ˇ –zństW0ĐDä 6Ö…šX‘ŞS$¤ĄDn\3aĺ•ÂďrŽFĎ!W’Yű C© *–U‘„­,6Ö3y×ÇŔfŔn0Ź”NOŔCľ‹śŤ‚c?ę‹{˛đ˛§k¶Úî‘ŕIű”€oxÓ_•€H<-˘>°h ¸`"É=FR żcâo®íp¸¶©žaÝw©u˛ýĎxłč=1ŰşFé=kë"đżZŘYôĂíOŻŔEŘ·Féó¬üŇŽ¬íŽüýgŤÄë}QMĎ{AřkŻU5Ëô‘಴o|«í0ę×<üÖżwř’ŹeŇ?=ŃfeÔ€KäëM{ɱąjşw(ŕüççŃK„Ż"ůřž`$R›š¶~Ť2ÜŔăî[§Ë ˝šÚJí˙#x0qÎřx<ŚaŰđĐ„ŻÇ!±+â ă>)ěŃh1.Ąk®_>}NŔŮč´7žu.|:+>‚>’Ôá@>Q‘ţř ?ţ¨(­´jkÉMf©YśşBľ(amš°ři0âËÓŹiŹÜ5źÎíČ˝\z¨ň\s޸ ÍJ“ŹaŁÜMáŐCuh8IŰu¶dŰ’» lhĐ]gv_Ëź[ÎĎ%Ι 37ÉŢU®ăĆ÷Ë~˘YŁ !Çő«µU}Kô8š]vuĐĐ~Âťٱ9‡óo]"%Ä%#]żŁĘ şČX×mŰr+ŇZě"<–Ŕ˙ď&.zč}?GŇ8öżËHÜ×”0ş-ˇá4iŃîÝ/|HH-mťĎ’IŞ ­č7úh\˘\g'—¤óhá™ÓçŃűçĂÎ;ž=`“ŘÖ©ö± ή˛Ĺźµ7qWyNl¨”5®%ĺ† ßÝ {iG®,¤t“ë[đž›l¦jK^pnbŠ$%N¦˛DgËgoV,Ő)d3ţî…^áó\GÁ7¦6屍µŚ"{GĹ;Ŕ,¦Ó TYR­Ôeľ·¨LˇŔdaŘ×´ş¬–ŘŁ®ŕ›kDŔ±ÓĽŤ éőňşĘĽ*CAffd…ĘĹPťG2űcGŇěřřÂZŘ}Ř|’a?{ńŚĺřÇ'\OAËFrŇ#‹Uł·Ś‡ń°ô`öÇú’¦ֲş"3\'›R; ˙tFw@ěá`d8ţÇ1F#ňúËJ#ężd=ľ˝÷8¸üwcŚžFäZhŰ2›Ń>„čTđ­ĹĆ&ˇçO;aiĘťÉ9‡w`Ęr!+GS™VźX.Ď˝ÖVoÍ>PđíŠ;xÁŘâţ\ÓE%}.ţy!´#·čR‚éÚŇřô8ŐV˘Ľ)…§&¬ „a˙®Ë«–´¸^€Öϲ÷2ăŃ/â´ >«¦óýÉk4ű-őZĽÓü{2ôĆc'¤·Ąť¨+ Ę4u0Ă>’»÷iÄÍ'9äbʰożžxa˙¶ÔމptżNţˇ¶:Ő <‹|_käďEţáKľl»3{ŇŤ·ô„0”Ć Z‡FŁçD­=‘qS4É]W<Ą/ŇŘN·6{ăÉçĐŻÝÇńěkéQ»ůhBM]×VK…jČ=מޚ¸Źj4ĆĂ"µ.¸ýŕ†URńŰ"6•ęi>…ö ^]“˝q@smHAr˙ß˝şq&^ŤżOzÍÍ×\ÖÁš%żźéî…jěsľżxh~”€‡]}ű1¸<†_”ˇagŃ#®á˙ę ůІ97˘—8ÁÓúŃĘ®nPÜďňť^5ýé ĺB;,|śŮŁ|‰đúxaŇ‹4śľŚÔđi[R‚v([˘K‚!Bdq {»AźI®!=g)‡=@ňŽŰńĎxę^O^Ů€–rěŃÎÂŁ‡¸VBn˛Âs–q‰˝‰íćź(ě$Ëá˙Y.ś>KűĚ™uă(X¬/Vu™qĹ+šc Đ s\~vA¶ľ4Ó`¬ßxäś©&ď3c}¦ŮÔ Á &˛1<ŐCőćNnÖŠ`A’¤•j-ę<Ő#oňNQÉÔÚR«5áűŤĽĆ± u”ÜCžˇT7C3š3ÍĆzËgY5í»w—]ŘZ%É‚RŐ‹Jô…‚ł¬Ś!˘&|]O'ÓhŔcDhrżŰCČTĄ&3˙ţÓ„R[Häľ7ö”ęاOéf¨ MpBvĎ4×ô°ÎTú._ÜUÜ\!M®’űÎ\«HĐ1¬M’ŻÓD¤Gk Iđ‘éřŢEOćpSű‰C•'Ľs@l¨é1E0XI_>ލ›Çö_k?s1˙«24dúM<@™2[6S˝łFQLšľšbC]Vž.?-»âĐÉĆÓŔÜŰ&étĹbďUn>Ř˝8EšZŁ•iB«íhzĐ M=ŽGëmg…$°Ć†ĚTÉÄYŮíuh.g¨Ëůdc}@Í C$wŃOTiz Wtę]šŕH.9 w Ů]á)›;gĺ{Dů­ČIvdźw üšäi e3Ţ_ýxBŘŃT«şĘT•U`é°űnĂGËR †XâůłÄ„Ϧřo´¶( Ň`7¤ÇiU[ą.‰Ř úR"«Q1Ť·ŕĺ‹pd “©[IN”ćëO 6ä‰ÜŻž«,ÉĘŇ<Í+ÚduşnS ˘+dÁD{äß\snqů×µ§ŽšĎÜůŕ–0[çÉć(W·ůÝŚbŘëóâÝ˝SÜ$oM<çżß+ú„ö‹SW/ p'¸ht‡µźŰÍ'.ůnÁQĄ/łď+–Ľżfąď3 Ö´çÚ,VŰ…ďŕZžj Űč°źÂ_[‡ä¤@"„*Ňâq§“B|ńnN‰ˇ¨2´ĺ?Żč:ŕěÔFhg­éÖ%Ç2ô©x?RO°MúüܬüB"¦ŻO#Őäś.>q ż8yÂ$PBPfb‘Ńh2é‹…,Ť"}Ä&“bbZ$tŐ 7Đđf´ńüB¬ôůpő,[/ĺß(¸{»ý„ŞŘĽ„š¦Dů˘î‰—ôŘby)h†ĚB3OˇíśĹT@Îc7PŽą­gŞ ’<<ŕëäRŠ?¶˘QčÍďJrs Y…™9$MÂÇcn 6'ŕÁŤďÔúp˙tM05`.Ë̱żë.y×xb\z?ňضëží1¤Ü§&d¤é¤f•Q‹Ća9žˇđLżŹÂ§&§*5:iFZVB50ő€âw™™ˇŠ\ţ\4?×K[Ůż:h OÄç÷™2…c™Á4dEý/îŤOendstream endobj 569 0 obj << /Filter /FlateDecode /Length 163 >> stream xś]O1Â0 Üó ˙ i%HU—˛0€đÔqŞ u˘4ř=MÚ20ÜIöÝÉgŮ]/Wv ä#z|QëŘDšü‘ §Á±¨j0Ó6ĆQ!»›ďO X d×ů®G’ĎĂůTVŐBoh )jH4JµŤµ­ 6Ňčí欏mR g˙®äh.±ßśc$NĄii’ 8¦ß3Á‡ś‚â 7S?endstream endobj 570 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 212 >> stream xścd`ab`ddôńőÍĎË74Đ JM/ÍI, Jtw?ţ“‰µ›‡ą›‡eýw+ˇ;‚7ůŻ €ä KóKR‹3óŇsRőJŠ ŐŰYľŻáű±đűDzď»Ę…ľç>¶?+.śđýřŹ›˘ť +ç•ts´±•tUUu–pOčö™âŐçÝSÜž¶©›cyďşňSŮ…zôšp grĎÔîÉ| Ó~8Oűn;­Ű ® Ür\,!ů<śgOě óű'ňđ00ţéM~endstream endobj 571 0 obj << /Filter /FlateDecode /Length 2471 >> stream xśíYKŹŰČľë/$„˝¸ĺXLż›46쵝Äy¬WŔěhŤf†1%Î{gűŰSŐ˛›˘Ć;đ)ˇřč®wW}UĽYŇŚ-)ţü˙vż ËËĹ͂٧K˙·Ý/_lzè€GYA ¶Ü\,ܶäBgŚóĄQ&+„Znö‹·äÍŠçe”“Űͨ†Ń‚˘ëÝj-„̨aäű2^ô~µć(1E\#˛"ĎÉ wI'ß]E«ŰŞë>ČY®sĎC6u§Ţü{óWP(g±>ÂŚ:őąĘ ×…ňKP»hJČd,ç÷Ńa,“J~‰Uj–ˇĺDš—(áwZ$ĹF‘ć%‚<Ł…ş—ŇD˘Y2¸&gâA6R§20QvR qÍo˛Đ qĽ ¸áQB—łY$ZN<Ŵ쯜 ˇcĚ8şp”_W\ ’$%ľ®°čŠKî®°HŤTćĚ–ś»ĽuX?…‰ś+–Ű2ť”€&®—Wž‚Äz·Źa|ßôUZcëúÎ.˙ EpÂlQŐĚ`QEž`lQ4tfv Ôź\ăHlú´ÚĎ´"LÚRw·I‘râ ‹Ţ'ÝSÔÔĄ¤[ë{LNiď÷‡¨ž'/’2ŚšRĚíGUS­Ň.ăc5Ó*w&ÓJ/)Ä)`4DM–ť'ůĹ Ęľ„\«Un‹Ďf¦ăöÁöËâ8Ě‚†z‚Ç‚,Ü™z€IŽ!MŚ _Ź›„ÇyLCH2MîĽÖl¶I"€MŚ.ÇM‡“şöÇĚ”i˛çQČÓ }Ý áâń¶ĹyÇîü7—Y¤3µĹ=séHs#BľÚ§ýję̌1Ť%šW™Śap<ăźI•űąÜźîňź„&Iťc˰nŤyĎ·©ŐŞ©´ˇÜÁ!\fCâł·Çéĺ€Ö»ą6Š“rI%˝™–™14řĂpßPboá‹Ç$×+Ä ę-‚u>‰áëĹžŹxęŰőřb[ďßYť—#üuÄ@ŰžŚňNí â…¦°:ě<< ťyťH߇ʱZ9”őj.jš˝z üt uoČŚlo÷·5¬üaÜş:|ďöđęÎ5ľ :Ěë-xŃ´H `.)µ›źŽĽú«v×]5őą#°¦*O 6űheÜŻG+sŹŽ•1 asYő#“‹z÷s…°~¦­>„şWúŹă‹A/ŢÇ|Î@‡&».q$ m‡çgߍMC°1HôúMÖőeÄí ůĺšś†;üÁmú×s]‰{ĄÜÇ3Ü5Óqe7M`nr“ąfŮ7íťßFyź› :iädöť,óß2tŻŞ€˘Lż])ŚŹš§CßÚ¦%ięŐÚ ÷AÂ:&`dî‰ÂŹT/běÝF6ť~(…çăÓ>xźxťLű-G,˙Ľ©B'b. €gÚÜŻmüŤ‡w]?? sďxSčk—ăPc­ÝŹ4ľîđk­kü2¬ńwD¶On$ŕçK0b<N Î…9xlÁ^!‚yýf3"Áîf'Äaľüíˇ9ěž…qŮ î==K¦ŔŽŤúa–ć¨ăc|·¦ć¨}v <†űĎ`@!Ŕ‰6_ÁŕW0ř? íÇč˙mź.endstream endobj 572 0 obj << /Filter /FlateDecode /Length 15702 >> stream xśµ}]ŹÉq%°Ź„˙Á.ýćć®xUU™™)ě°۰ ]¬Gü ůšáŚZęfK$Ą±öAż}#Î9Q·ŞŮó{-Ă{™•ź‘‘‘'˙pł\Ö›%ţ§˙~ţđbąůęĹ^¬@oôźĎnţîő‹6VG.s™ëÍë/_0Ëzăhoý2K»yýđâv[^ľţ­'^—rJ˝ŘeݦçxýĹ‹_ŢţôŹ/—ËŇJ_—yűđróüŁÔŰ#z˙ćăÝźř7}Ţľ}ůŞ”zYj˝ýůÝ»C˛ßĹ_l—9ëí˙z|ůj—eµyűĹ!‰çŤc6nď?D†rY–qűőÝÇßđ×´rë~>ĎżľţÔN ˛vYŚíąýěÚ|±±e“(ýÍçhXŤúżůŠß˛Ąnu˙V?T×˶nk–ôřž­cN˝ńćţe”đ÷Ż_üs Xąůęç¶ŽőbŰM+s˝TE3»t˙Ä(víćýŰ›ąy÷˘^ę6×íćkŰźů˙˙ÖgĂ?ľŘ¶Z.ĄÜ´jĺ˛m7ÔËčBĆÍ} v©F¤L"?ŰĘźóŇTHë@ÚzYT1KŰ.*c0S«—µ Q¦vé*fňË>÷6ăi•k\Żn¶\J%â˙˛^†Ňxµ”č Şź5ţÔ/»4•ˇĘŮPý«O~"ób(çFŇW5 ]V–Ó˝ŤęŇ«в.˝Ĺ7€46˛÷KiDşŇ µ Ĺ‹Ź_ –_÷QźŤľ>Ľ•“HQŻë ˘ŻĂ\ ÄXĂ1.«ĘěŃ1cĚ€L¦ń™µ!W÷uNd‹şŮ8ľÓű_He}¦×~1Ögúß"úÖľ<A3˲\P—qŮ*í˛"u%â3JH›DĽ˙YFĚ{ ľĐß{iČ1/«>3#%Šz”u˝(‰7;F!PY÷ľÄĚŇ.łQ’ŽÚűďĆÚŻÓŤ‘Î/oKĚ@G|}°=ŰSČÖ”‹’TejŃ@:«»ŕn2.e%’ĹĚXţ@‘âŤD:»&Ś+HŤE ¤Á”b¬ré1uL!3&†#>ÝÔĺ‚%ćż]Q/ú¶[žŽRZL@ ľl6"•č–g‘.d„ rÄkĄrf,Q ´NĹŤě•#ĘŐŠÚĐ3—[ź6‰T~˝ůB*DŘp7>†bFĚ/ ó˛ á+n|`±bÁrRئ6LYĎöÍpÉ•0ŚEkąÄJ+D”bÄ"Ŕ…Rú?×ÉřąÂš†ég Ô~lY¨÷´u"\Ĺűc#@«RĽ©5)±vLÚ+G´–˘ @j®É(p%ŇŮ žz˘JvŻ˙ {„˙W jôńŽ ›Ś@d.4W‘”wĂcB4÷¦ďJ(fäŚuĂÓ‘LcŃ÷ŽĚ0Đ@`p€ČŇĚIsĺßÜ«şíAu„ł¦şńA#Âüu"5ÖaDᑳŻ.c@¸‹U7@0Y3·Çęű? Ş×ťS«şB+Ř %L«#ą™T7Ah…#“ßZM­0m&Őm2uÍ”ę6¨ á¨×mĄMuŰŰĆmPC1i!Ý[ଆ’4´ˇy/U%é±ń8˛jĐ«Ű ü]Â0úď4@Ő ĐâMcłÝ=+ťČRè8Rci±0ޤY¨ĄĂl5·ó<7@­™X0ŐýŞĺty ŐMˇśˇ%_ÝŐYQΔ7QÝőȵćÚ¬µĂp2”Ć{”łćâ«mamë¦]Şş B+b•¦ÄW©áZ©l…#“ßrÔ¶@šö‹ęîZámĘ5aY›te»ÜßA+Ö!“]Ýu”3łźĂ_Š\ľ˙ĐŘÂ۬2‰±+‡é D×ÍвeŻúN¦µmé´Ĺ¦4QNúN±-„7ضôgÂ|/ČeeŠ%ďż»,l,JňÂ\v”’[2¬_äňi•ČÎ`ói•@…7Ű|_Óäqć«ůDK¤ł %w˘^J+-—ôÄţíČ>—|)/(¤gĎLl†Ž`‡Ňŕ 6ßůčŹĹ˘ ăŐjZíXqa]›ĎDzhX`ŮčX<ĹTą7±|Ň4íţ±4»wrQ’ÓĺöMî@Ěz´ˇÎ‹€ ŰÚ8U‰L”âSµ‘ ® ÷ąlPL_4ˇĄGS3,—˙źšSs ÓäÇDD9éřĹDD'‡÷Î*ű$ ‡¶ůĘí“,ĆŧsRaşšOgă·6ěúޤą)d(§ÉFÇ„YQŽe»b W×Çü—°Ů”ýĹü\śŕ@¬—Ďo®űhDlµěŚ2ŕ¶đr*‘ÉFô– őŃŹľč]~YŚu8…­ç~…±Ži[î#‹6ř”/*¦Ă¶bĆă÷d F„bd;’4™ĄG$é˛e1ڰ\cätkŤ¶Ő7Ć©4ݶůW”îŽ#[äÄ Mźź÷A —°ÍtÔb`ąb'b3­Ň¶ú*Đôň! ÇÖ|Sá ‰! §Đ|đă>Bá×Ú’†4F(üZ[Ňýh{Ż#–}žéH׏i@fVąŁ[ĽćKΊŽ#…#ą—Ç„_kľx Ś §ĐÖ<Đ5w~VäÚ»yŔ˛8’G”ć.NV ó+sŃ‘U¦>†­pÓŞş! ·Đ¶*?;† "—Ń­ŽX¸ý$ĐŘ_ě@ď˙p ÍŤ$OjŃ˙hB8˙čRô9ŤŃýČ”Îúż’=ýŹř”§E‰ţŹŃ¬«¦qt˙˛…ód±5źňtŹmĹIČ‘<ëF÷7äęňOle¨Ŕjú'ŃýáÜšOzÎÉčţp Í'}U®ďÖ|źĄ«ÝގµśĄŃýąş†<şżIˎÎ>_h–f<ş?üB »$dÂ/4·K&Ń˙aşĚŇD˙ŠŢ´!NĘŐŕZë”'nGr6·Bá§x ľ…[h>Ĺ6‰1Č•gd«Ś# @16ąßVaB)2Ŕ; r5MŇ“p ͧ8·ó eE®!w7Ć$Ś«Í\ç1&hĹLëcľˇÍÜ 1&ČŐ˛>n‰)ťˇ’0_« lâô ^·›ŤUn_ŚÉ@Éf4Ä‘šóÔÇdE&Ë»!ęČ•± ëôeęđ浯KÎß½íárzů …cŘת­Úxu¤ĺ ű …cŘ×<­Ć …őęëČ † zXćŠAŠŻoé–Ć …cطܰbĐźŇÜ™cÂ1ěŰľŇÝ…őę[žąb Ę™ą&B7łűDuC„V”tŤ§GJö»›"´˘Ôśş>JaľşŰ§ľ0pĐKş†ÝýźĺL9Î1páŢöšg‘îP¸†=¦y%bl…OóŤŔ€kŘcłmD8čµiýő•^sĎę+äDŽQk@¦ZĐÝű װǤŇĂ·í-Ď}Ĺ1Ô‘’MÚ6č-=˙îÎφbLD Zôy,–»áčHú 1f™¦lrß&kÝ×Ĺd®˛ÄĎM^ OŘÖľwcxĐ€=ZĂc($íI Z°G cxÂvőŘŻő!FşŻcxĘ™ň…zř˝QNláB śŰ§~ÝGMčŰŽěoßĂM1 a»zĎŤ±7†zO/>$ĂîG 6Ô»E1y Śî7“«*şC¦™M÷ţÓŐǢSxôvx·}ĆDo‡qí{ě%:<ĽŰ@h,:=VGŠVş7€*ű}¦«ďQ”čK˘ţęXîŽ(f˝îîDaOx/m…ú/BnH3dĹŁO$ʇŃ'lÁĚő×¶ÇaŔŔ”r ϋѸFŔŘ€QáöąO7Ż8lďÜw‰jÁną™§ÝŠju„Ř%PLĄO_@ШxⲙĘTi{÷hI÷]V+\RŚÄ_hÜü´•×ęđMbiD: Žmt–†oáö=Ä2ÜúŔfÍ }Ź…A@ş plű†ľK”3d׆›źŃĐ×+n\€Ą©´Ľ3]ř±2hĐ÷pÎđ]bQ9ô?‡› ¦r8ű†ď°mጳ†n‚Â-<"Í=eâÍé{#ô)7AĂNŚ0Đą±I”SC v} ĽaEý§^/ CUęPŇKn¬k`X—8yŕ€7@˝jxY•Ę L!ŚBçiřv ©ĹĹ<ÜţL!¬]ĂN@_różh†rZ·?­á‰m4^ĎÄlîĘĹA 4ĎĂ­ý¶r đŕwřŮk\ôj‡Áěá>6âv¬q9s±cĚ zë#nnŤ@U9!–({4<ÓF„ˇŐW“ö¦*M‘Ő2mFgĐ zr#BóŤ–MsÂŤđ6i5“ܡn2ąŁŚ8ËjÉ„•éŐb „yÖšŽŻšpI‡×5üÚ0r¬NDŠą0†5˘ź 7 Ć€FµN„^㸧éűMÄĤľń)4 ÷©DÂ.·d¸ šÜíđ{†—Zą!r ďh`ú Ć bce7ĚĹhUidgÄ<µ_sůĚeŇ´śĂÓÍ\ÁĽť+ohú~‰;W† °›5"Ť6Ő2">ÝúLyě…ąz‚-Ź5Ó­Ď”/ĂÜtë›ŐLÜÜ.čľ&x<šôQĂIâOc â,ÁOGô…¬ZşÓT4ˇĄS<ÝöĐ Ě šYxA>žšY,?CŤňSšPÓż ”;Iďq–!W0G®.ôekIgĹ%MxFUIŠ\Ů4ůłVZÔ’žŐŚZ WÓŚžµĂ,ys>Ýű„+Ma’ĆKšđÇUáĆHAřě\Ě~ß–ÂéMÄtčź­Ót+ż¨AOp+˛±3ÂuČ•®Î4^Ń„OËÍyCqXáQ`Ć˝ú Î3Ľ7›qEŤ“R“ź:­ÓŚkVV'.gqRʰÓ켡 7ťÎÎě t^č©´©ľßňĚ3}9˘ËŢĹq,Žr–´Ö3<@äʳʼˇ‰S#Ę9*ЦI\›5ž>MHE+⤳1x‚qŇLǬń Kł6ŻhâTĄ!ź „bťĂÚx¨V§ňîČ‘ ]L˙†épŢ• >Š#™±»ů0×eYpKGLtł+P´Ĺ‘g0ŽŞŽT¸ł8Î ‰T‹ď¦LŢ`śŠMIxIá ŚzYV… LQ9G¶0Ş%1%©lB0V" î YĺŢáHGL¦Á^Ń­ÜĂËâÓMđíł2S\st†~Xá |Śî«#ŤMhĽĹv÷l2©ł6^ĐDĐcS "0ŇŘĂzS@k2WÜOD9Uç^G*ăś•ćŘĆ0gU”‘㱜ĘOŢĎD®łĘ@AĄ؟uc”łh™;R!,:|:Ňĺ,%;´šB„«jSy?cn`Ôˇ•a‚}5"Ţ ręŢÄ‘MAΖĂë=™AÎÎIŃš‚ś·7Gş‚śË…µiŚŘĘ6ş j ¸VÖÎ6Ć8WĹ) ÓŠäHCŚsŐ݆Ćç*'Ɇ"Hi*f˛‹Üť˛+ˇfÖ-Ž©ČÓ˛úľâ\JŽ?ܲeĎuŢÍDÔµń3ť‚÷Ż|1Zgđ\kg čČ>9ăŠ^AxŐÖ×ý† |Ńŕ]ÍLGa€ BË*w•Ť+Ad‚w‚kĘÚxyáĆÍÂd‹&‚(¸}h‚©›™ˇsť# DÄĽłďĽyhĂX4Vď‚Ţx‚ĂŞ#ÜŔÎ#ĘáHč.="Gŕ4âÚ…ub^Í4!­đńˇ[ăJwă Ďŕ×WÜ|ᨠ)ş_ĺĂ‘Ę{o3îŽčnĆŻs„1‚¸ŕŘ„L¶Â ·Ű˛údĆŐ·ĺP¬>áŃ SË‘rÁ%YÚÝŐ× î—ZŽucŚ ni:Á»ŁÖ˛ ±DHCĽ–•÷Ţ!PxsßÖlSŃŐL[4—Ö‚A\35ţîĽ: ţŤľ3yuÁ2uáťwMK˝şń©şĚşZxç]Ĺ/q¤ńv)îř©ĘnÎTň` *ů1e ođúµYŮ‚0|ĚäÍĹ•·×\cŮx/y «Ó#»ľ…ó&şzĺí°F.vŚĆ;eÍŃ®éŢ9‘Ť÷E‘_GŞ®ĽçŽ0JW܉t]zďöŤĺB|¶âŇ{˵·FÄgYXN'‡łmUÜ«îís1®ÝtoŻ{GşîíW:‘ŽLÝŰ늸ł÷Ţk΂g\đjqŢĚö|ŚŕZM$q˘y1@⌻dÚĚu’ÄT+ŻíWÝ8Â{™¸¤Ö<Á•÷şćjž$qĆ˝¶zjU_׎ķáô¶…$ζ(čŻeâ }( cmQ<Ţ’8nR„t¶ bA’8ă¶>yŮĽUÔî&ŰJg٤Đn-b08Â(A ś‘ŰJ'¸ťIśÁÎ1Öy%‰3vú¶‰Ä9u_áHśÎq„a‚ ÓŠÁ9s+Ř|Ş‚‡šGÄŕĚpIŮ|T—¸~·"g†ë‹s¦•ÚŠXśSŚaGČâĚHˇ"rş/Ě]g+"rNÝ:”­’Č9ÓGÚę¦6,9śULΙŰĐ7Fzý¨­’Ę™ŇgP9#Â&4Q9‡\­`8É9úž„LÎŃ3…ś""çĐŐu ‚3śC G&Lo ,ÖÄăą˙mn¦Hz[Ź3‚'lR8Đ"űqIm&g"gÄu™Ą‹Ĺ9rÝşhś±©óC]4ÎͰ]4αähw#u,9#şhś#ýÉÍ­Ďq’Z0ś›ů`8“Ć9r¸GŇ8÷ĺ;’Ć™Á6’Çą/č!§ÎŁe›ÉăĚ˝"ÎäqćľżÍäqň9©¨«ń8󢿹ŠŔŠ$~â/Za?©€Ç™%čͬ~•)‹xś=˝‹ 7o˘ß Źł§W gđ8{–˛ŠÇě•Jd µçY¦¬˘qƉŤµ –xĆEhś]—ÄŽ ’ç» %HÎŕqöUgޞ‰ÇŮ×,gŹłŻYÎ&gĎh°śÁăě:ř$!˛/šćAr.ĘÄ­¤Ń8óÖ©É™ď&ŰĄŃ8#ÄŔ*Ń8Ůřń"gŮ;óś+&XÎäŧ-U4NSô»Í4Îä´;"§Ť,ąÚÎťçůĄÔľsçUç*§ĺčŮ[ô$)ť8ŚlB čEŇ´‹hĚdSŻČĐ{¤<ö†µź*…Ű/6±3Pô$iÉ‘ęU†ëŠŘŢvVď—~ú=÷ęWÖe,z“tE¶lŹcđĺęi{1™ŐtnĂ?m'`’˝&€›źl@"EFëŠTYŐ%§Ä${ó˝&É$}óŠÄd´3˛Éôę ©ŕ5ŔvF%8"¤o‘AwÖtŁYâŕ·ng„ôÍ#Â;™tśqíOŇ7Źé›G„ôM čŤ8GĂ< Ľ”9"•­8 $p2Ř?śG„ ÎRŔŕ<dp˝ôL¶P‰G6"08Ź@ßŰś–ěđ“w2@ŘĹU/=é›G„ôÍ#Búći¤oŢÉŕQÄ ˘§ž¤Ň«= äo‘AŻö€ży@†ťs™ž{ş·"8lDHŕ<"$p:¸'„—2G¤\[!„Î#b×V!óŔy@oe*ű"¤î­H„Î#Ň÷V$编9"ŠBŻö€€ŔyloC"$pŢË\‘`9—3@ç!óŔ „@§k{H߼n†Ú)ËŞHÁ wóşyěZ{$n€ą›-›ÂW`{RőŤ¤ÍĐžT}#eóĚÝ`(Š\m7¨H×<dk{Rő2v[%@ѨënJltbŻąšŔčÂ^05żçnh ´e7˘HÓ<`i~“¤yČŃ €ŰzÓB ±ĺüsÝ h"ähr4ŹíF6‘ľ›§Dć^}!}Ů h"ŰŢ‚DČŃ<"íi:9šGdőNý'ţ#B˝†˛î­ÎâüG îm`{„VK1ţ#B­†‚˙ ‰?ŇLĄŐpBć?!±›`WA¬á ÎBç?!¸·B©ÄNH§á: ôa ¨Őpć' aţ‚0˙ é4[¤6ßďR G„ď߉đ™>ĄNâü'¤îm UR 'd썠ŹŤÁÚ ˇTI>PŞá„Tµ"%‚$ŐpBşě–nĎRŞ×™¤NâüDXňĄNâü@ČæVQ!é~—j8Sf5_ŚK©H•čB„ůO@ĺFą¦Ę‘”€hžP©äćńuAH—r‚üD¤Ü€}Ž: @Ř”i83k/ŐŞ4X\ˇ¦ŕÂĆm~ÍÇłRi"…Ę4‘pCWRµI: @ŠÔ5aËůÔi"Ąę4!=]: @¤2@ť"Ň{@””%¨Ó@„ŻŇ©Ó`ÔĂşßeH‚ˇĘj•ě Ę4á»É4QÄř °ĆTi"… Ş4Q;©ŇDí„J5“* @ş2!ĘO„m J=¬‡J•ýU®THqˇĘjIăJ" ô`" Ča—JŐ—* @Ta¨4P}©Ňd(S“Q­˘ËKĄÁ₞Ď.¤ŇD’ ‹Zв?)Ň„ĺRŁ€)S•QmYj4‘L5±”« H>ü“H>QHŞ4E&Ëňë|ÁD*i2•fĐÜGK¤”&(Ň$…ŠŚVľúH}‹" @ô-Š4XPTđT#FŞŤPŁšEŤ |ů%‘ Cąš‘"’i"=Ę4áóĘ4H5…U–7ź#K¦Á‚‚ˇ—˙”i˛dH.€2 @řM2 @¨4%™ &‡ÄS¦ęG™ ¬ UHi‚cdˇz—Ĺ :µ[Ę”IĄ€•–K9¨Đ` ©4¬ű;I4B]Á­ę…ˇ$€H @şÔ6ÖýMŚ4€°`J4fC§'¸ĺ«])4-ě`*4‘ä€0,H/™©© ]ÖD @”i¨cĎ4é nůl\ú §NIPź¤<¨Ď¤K±ˇŃ,‹lşô€đSgŔoéYđ.Ópš•ŠÂF¶ä[EÉ3Xśoi;(Ď@ň|vn:ßďň ę®’í ą–ä,NÉš÷$:Ń4§<űg“CŁ3XôhXę GëUČ /¸?Ů’:Ĺa[‹Žę @šŠÚ\ĄÎ$µLm{šA_°Ě=ͤ٪yĆ‘:MZŞ3X‘4 ¨ÎDr)Tg°8ęi1t¶˘ćĆ.u+űŁ7©3X©ů Qę @8Q¤Î` Üďę @ôşśę Vjj4IžÁ‚ř¤·ă‹BUzŚRg°*ĐÔvXĚ:őLśâ şţŢč6é*R›ÁŔśRŠI“ŐÄgLm .U•đÂF›ÚRFÚ ôşźÚ ¦@Ĺý®Í`Aąb·PšÁ"rAKŇ řŮ%İҞ¶\Ý’f°BJčý.Í`ÚX”ËÔ€Ô;‘4•d,¤4•䉤4•äǤ4•dü¤4i]PšÁ‚Ý%J3XąJEPšÁ@ř:J3XŮĄb%Í`6YĄ˛PčŃž„âgęPÁMk·$Ě`eE•0•¤/¦0E´E]Ja+©K*]+»ć(u¬ěr˘Ňe°ż$˘A°X™‰ş V’«*a+WÝ 3XI˘l 3XDh1ج]ŹS V®*f0…lîwe ęY"š0ö™De+W *3XpŃ´n©Ě`Ő‘šČ`Ś`Šü”Ę AMJ3XŮ…,%Í`AN“ÂĄ¬ě* ’f°óhąL fęI›Á"đĂ9 m şÚrg°üÉ,`w· °é5:Ŭ’F{ż‹3X]ŇIśÁ"Dă#q‹PP‘„"ţ¤6=č§8Ep(%ń·şn)@q‹č^ŁSśÁ"<$™Š3XÍ÷)Î` *GqGr§8EČHŤ 8EČHŹţ)Î`±ég°ŕľM‰&,lÄ–Ă%q î÷7‰38˘QýmîbDüč¤Ě`A{[ŹĘ $NH*3âGĚDe‹ř‘:śĘ ń#~— á#Ő <8‚XżG„ VkIU 3X„Ź4‹(Ě`AŁ/&a«»ž˘„¬ę=Tę2XDŹ$źĐ°íX°ŕšD Ě`=’d…I{)a ś”#(Ě`OR•)Ě`u×J”0?(ů„…Ť° .áĘLÔe0Py•†A‚ş #J—ÁŔŚ&Y‹hŇ<Ę2tĄ‰P–Á*©¸÷»,URqďwY "\9Ę2ČüB Ë`x& y‡ŘŰ ďŘ9Ôe0č ÁX^G°ĘĐep€Ł Q N* e°©¶e0¨úŞPe°U‰0@–Á"z´e /a*"|¤Ů”e°M!Pf° éa7• š¸P€#gx8Ôđ>&žé­>Ą,8o’sŔ)ß"~4” Ę ”7đ› Ś7>i§0ăMŇf°Ą¦c,âf-a‹`Q*1۰ePÚ /Ф7@m‹h‘ËS›Á"ZÄů(mĂ8>W§6A–Oă©Í`ApÓcyj3X+©k-mk» ˇÄ¬í‚†g° ¸Ń˙’8ŕ¦LX:ÖvAC‰3XŰ )Î`m×3”8#-'(Î`ŞB"đt ÂóClH g0Ć„@QŔşßĹLÁˇű]śÁâąč"„÷1R})Î`Đ]ĺ§!Î`x*â Ń!ÍHľK°I˛€â Ń!ng°1µ,‚C޵¬ĺű˙Ôf°IwÚ †ŕôŰĐSqSÚ ě6É›P›Á"8ÄmVÚ ě6şŇf0hŞ€4Üv”f0ŰđBšŞD¨Ě`Uĺ·©Ě`Ueč YD‹4¨Ě`ń; Ě`-jRo€2ÝMďňˇĚ`męÝ—„¬Ąţa 3XDʦ3X°Ýôä Á#ał”¶Ha‹č‘oSÁ"zT D0Ć‚ýf Ë`MŇ›{ę2ËKĚ!t š«üÍëË ¤”e0Ë~Ę2­W‰)mPžÁ"0¶J°ˇ°Ąď‚ ¶6+#F(Ď`Áü“ ĺ€HŞ€ň fuźOg0HĐňKÔg"ÁČ3Xđ×]ž?%‘@yłš* Tg MĘ3e$ĺ€$ Ď`ÚIj.6Ş\Ľ’ö-;Źú a• LB}ZľÔg0ËŘIę3ŃXRźÔ"¨ĎDrÔg°"ęŮ8ő€č‘8ő€´Ł>Sč3áś>)PźČ<ę3UĹÄSźá„µBB’g8Ľ”9ća ŕřĄą·ďݤÎp¬ŐŽm€:ñ™TgR•„‘‚@¶Ł<»ÔĐé)˝OĂr)ĎDťNy .€<柲Hź*C} ĘDL7=Ö§@©:P yJġŃüV‰ŕHźŔrÔgŔ !KZ @v:°Đ2 ®ţ€¤Ôďd@îU.F b…KA‚ @¤Ř} Pź!ţÜhyËĐF‰3Ŕüp¨ÍvYÔ”ç‘0Ěś4)(ĚS8¤¨°ĘęćC? 3Ŕ¤¦ę#avU;*3Ŕ2KN„Ę °Ţý¨Ě›O;!eě ’ €4u8Ą°™H7…Ň Řp6ilJRoel[Gaělę *3`÷K„÷1±C&Ҹ…nGelł˛+TfŔVĚ~ˇ0vköť„°ÇK> fkÍWúf€g@Ë,axśef€‡ˇ§ńf€˘WífG…?ˇĘ`PŹ—šBˇµZňY¬TŕIŔ€×p™ÔŞ2ž€(2(‹l®DLt’ű]•1„w _3^ÖŃzJ•±i,,ń+mU ř®‰G~ČÖŚw€z˝Q ŢŤťS”Á˝§(A†ĎóW…Ö|KQ„qŠ’¬T!:¨e@4Hše@ÄHze0Đ’‹˘ <­\`p ˘SzëOQ‹wśSÉšxë©\$kĆ{P‰DP•ѲEąxSóßIUŠ’5#0ÇÓ˘T¬Ž]{€Ş d1=”§*âŞU ˙š´ŔżŻĆˇ *BŤUHQX“·í)Ę€Ą´LAͲ+0t5SÉMš Ž6é-¬ ̦ł)MÄXő$š †Ü‘ł‹˛ Ő–Ł,¨bp!K.‰cxżë2 n¬Ą.W1%*âšm×J .ĺQ˛Ôe@[˝G] ęd;ę2 NgCş LÍ U×,e0؂ʩ*wÝÄÔ’zÔe°`„J'‚ ňsŁ•0»–˘Ó¤0® čüJÁđ¬^itSj®r 3ŕVBÚ äkóU˝N]\nHp„ş q˙Áź$kÁ¶ !Y3®O¤P1ó¦f})Ę€kiP”W5zKMQ )ÔW(şKĘ·eŔ­”xłjVK’ÁBBAe«YShKŠ ¸ ˘ŮĄ"ŕ,€T͸çâş”"îÂ8&RdŔ}™ÄđÝĹôź‚ ¸sÓy 2ŕ^NO×)Č€»;žŞ%Č€ż©\Ś DuI=¬9Sn“‚ ¸Jä¶!E\7nR[[s­’".2iżĄČ€ËN› s€¤$®HĄPĹÖśůŇżŠ¬™ŞÚ)É€ËŘ"q‘5‡¨>)É€;ÝUB"k’6rżK2ŕn ^’ ¸?Ö`R’WĚÜâ%É€kčDŚôůďQ¦$nł5šMtÍ.‡]Š ¸—ú‰­ąË!I’w묟‘¬ą+I’ôę Ył§Ż(I\ôssŁ$¸Ś¤I’|ZI2€b yŇĹÖÜ5v¨É‰Ş™˙žn*2€Ü Y>HŐÜa¤ČŽ„t<¨ČfĹQä ‰Š@@Ę&©yUq  X¦4˘jĆ›-6qŠŞŮňÄ'A0HĘQ,uŐU3č\@$Č„13 2€ÍB«'A0^ŘÁdMfŞQ5[ž0$Čr ·G 2€3„ŞŮň´(AĐxÚQÄźqd˛Ŕ2 ;«YőĄ nĹd3IŠdB#$A0śô’|Włf@Z‚ @8‚d™Ş WłŠęť‚ e1ö-A Ü3)Čn—Rt5aÉÁ*˘jĆŁ V¸’CĆ?‹¤YRŹJb đ§(šĄď DŃ,ú)~fIŻL2 ŕČŃTJ†H¦Gł¤§!°ď4@MÍ"îHĘ0€ÄÇ’d€h )Ă2 ÷EÉ0áî/ ´_’aďđ$Ă„ËP2 ŕ/Jʢ/;ĂQÝŐĹŇ,»~eŔ”äR• š9É0€)•Ź~ĺijRő+Oó¨Ân§VęHšfžLĄÂDf¦ąYNĽŃwŞiBžfţ“O©Â@Ć*?5ĹÓÜo+¤Â„űU@–ĺ^* @šń43ž$†â'ŔŇĄŹ- śŽR`ÂďJüŕ©b:y¦Ű&GW dłdŠ0ţ˝íű]…ěd#É0Q9«HšŰş—#’ć–ç()1,]¤ą‘’R ¸sH‹´ěŤ8š[nĂRc ˝›ßÄŃ\Ó6JŹ,qEÍ=Ř&AĐĎiĄČ@B:14“łž’ @hJ¤É@î;kCQ \fRe…ž‹S˛ @x<“.©ř,‡Â ¤ëóë•<Ídô§4Y˙üTËÇśy "q†ëë©3hJ"žćš;€ô€ĐŔHźáúú Vňź*H}†ë‹Ôg¸ľšH}>µP5׼ý‘>hp X>ç”Ă$y†ë3Ź”g¸>Iy†ës‘”g¸>)Iy†ë«“”gŕË#s¦?.u>xa†hšz“â ×W2)ÎŔ§5ĘÔ÷7;4~g¸>ČIq>ăa«¦šů°'ĹřHąÚţđq0‰3đ ‘rŤëĂ#4Tâ űS$i3đůŇ PöwG‹’©™Źž¤Í€SÚ ×§S©Íp}^•Ú ×'XŇf¸ľŰJmľíšDÄÔĚ×^©Íp}&m†ëٱÔf¸>,Km†ëăłÔf°ýZj3Řţ-µlč–Ú ¶?†KmËçr)Í`ű»”f°ý^J3ś&Ă• é’f°ý_J3XľLeŰ ¦2Ă )z´“)3Řţ1•lĂĘ 'dęŃ $)Ě`ű[Éf8!ő’Ď2Ů9f8!×Çś 3ŘţĽ3…NČŞ‡GzšÂ 'DŻOĹ”0Ă ű3tîáf8"f°ýˇk 3śş?CçiK '¤ç3znőf8"f8!Űţ ]3€Â '$tĘG–.ĂüâĹ×e‰–‡eÔqVş¸¦şŠ7dŞ«xĂ/^,7_˝řĂ‹uą‰˙é?ź?ÜüÝë?ţĚýÍ7@Ă+öúË+“Üĉ˛„ HpŘ}đ^?Ľ¸ýüńţ‹—ŻűâU,F·7A0ňŽzýĹ‹_Ţ~ý2Ěýş”Ű7ď_ľ ®Ë6úíĂË}ýł˙úĹ?ű˙ţൕP\‚ůw×°knM·•^Ăű·7˙róî;Ş[ž©.Bţ!Yî´ďOQÝ7Q×ç՝öđŤfŤ˝Í+żŘמ>W#Ó×Ç×^ôĎü˙ë•ůGR™!fTaĎH×Ýő/^üŇ«D?Żáżúżx§ŢáKęëkrýCu×,p¦~AŞé Á x¸‡DżTáך>-ęů|A—kbăj&äń/˘Ą‰}÷ńÍçróîqďg¦ţáó;|ß´ă™Wˇoťßź óóóŰ{Ł–ńýć÷'E>?ż#ňě)ż×üŽ=ç»çwśZYżßüţdţÍoŽAĚď¸8-Çm<‘Ü®m<ţÎ.ÓĂŽSˇyPÇ{Ř‘SŞ`.¬§TBŽ©~Đvüťđůůń΀ń/ŕZLŔ_^'řź_ŹżŹőö퇳“đü7üDŕâ§±Ă7Ť˛Żb”ţw_ýńeD"âÔ2oßż}ů*Bçľ«Ýn?yů*˘´Ëj·˙tLöáăű7ďß1ń,ëíă—ńç8~ÖŰw‡”ŹwÇźoî#ٸőĎ8Öá?ţóé×çž|V3/čă¤ö¬·÷§Doľ8Ş/´YǸýJ X<űٞ/ýö”ţüÁ÷§_ď^µŞmăöŁZ7Ëí‡SV+ľ±©ÝÁ'wü7/?)Őâ-tżýđ›cźÜkłÖ}ËÇ.[ĎýsęÁŻÔĎŁŢľů}¤šeÎşŢţţćţîmt˘»łc[“&$5Ľźn^˙üĹë˙öËŰ/ń·Ő­Ş×ËÝP>ľîY/Ăöćó—ř·‹|śIâUYÝG„iţ„$łĎsÖ{¦_VtŐţ­¨ÉŹ?›Ëq†F¨bujUŃ´§:Oĺ)ŰÜN/ôŁďŢ©ÚŢooT=ź÷o>>7°}ĂŔ˘N^éÖÜűľ{óëcď˝Őß{ywĚUGą=—öţ÷‡9wžAą4®ţHő›ć“űđËCš UŻT»ýűCŃ8.»'ď6ëţŇľÍŕ1·Ćw'»ř‘k¸ÚퟯĂňřĺyĆýř3?śmÝdŁţÓsM "\_öës˝â:Űnď.';yÁ_ĹŮ~®˙›ŹYŁrn»lS¶ IŞđ#›˛?fď9“b“ú¤sö*D_˛"^íĆ2j}š{ű’ďŐJšw™Q7ď\đn\Ţ||÷oi•Ęí݇4>çi§uÍ^}ńÍ#ýŤ×›ç}â‚×®§µ˙——q’Ţţ·ÚÝĆťÖΛ}Oźľ źlGZ<ç=ăAFő5Nľű»ßĹ,k-O6„»—~Vń_Ż”nĹ÷|Ęw‰Ś-żĆ¦­˝u˝…ż?'ö’ł1ţ[µowĎlČ{?˘rődhŢ?Ş•Ő=žÇ÷»őĎoé®ÄDzRŻkźlĺ^Áé|řđÇ7đpüćŃs*ÚĚwŕçĚFAŠűĐß˝3ÖËşŚ-×ŮŻąy­±ž1Ż3SÝ ?OěĎŹSůQUĺđúŢřÔůÉ»ŚO,16/Ű8đŃOöÔ¸;-öúűĐŻźte”¸G4–Sń~Ě|Ínżq‘ܸVóW·/˙ýŰäoťŞ„ ÚV¸M.˙Žmr ’K[ŹţňöW/ÓŘb§ĚÉPs‚ŐÚý`xjÎżgׇ°X¸ź6nÖ›}4ËÉéyĽż§ť>ú_ř‰&ŮN_yµÉKyćîëđŮßřń$ˇÜŞľy÷ř§7żşýňaý‘@7q_>\Ţ=>x5ž[R’*3 ăĎď~÷Ö'čăă×ü29móÝâí‡púńoqĘéç§ÝzţńáŹîjŢýéí5çýÝ»ß]=<~ńö^Ť >‡W3~jů}é6Ô‹đÓÖ¨Ërű.ŽLoî’ź¨(î'ׯüÍű·~ă»ĚO´¨U&ÖôTďxWřJYńĎB˘%ďľĘěö/ú# ©Ż÷˝Ş˙=˙˘ěVfţ˛ÂfE•nďżşűx­Ń—÷o˙íî×î7?wŔŔ(\żýÝuéîĎýĺđyu·|ňÜ«ęÖwŹ—ß#°ľŕYţíßţÓO_ľZăͤ˙đŇ|ČŻµřůg—ßZűĹa˙Ďű_ÝţÍOs÷ášLßŇĺľm´[»¶iCőúˇWńyn(ćŘ=ń”ęvňWc;çó–d Ćmt­Çď†1.,#ţłĽjÖ?q-cÖ×’cóú‰ żîáZŤoq_0\ü›oa‹ŹnĘýź•(Žçw?ŢżUÂ:ź?oËxĆ÷ćaçß5ŘpÂĂ?óćµůÄ«Ĺ[Śč«Ü{â+çáîtţć2—oÜÔ?č{ň'đÜŮöĚ·Y?÷›‡ű™îż> ôĂü÷ŢŞřŘ•Ol>ľZű7|µ§”†ŹĘ1sĸPNű÷«çVč‡»ŻŽŁz÷_>= íľ!ü‰8B_|j‚VcĹ«îk˙ń©3ÄÝ쩯pž Тň2áÇ;[ďÎĂ…‚–'ú'^8wľ÷eŮřôxń¤¶Ż12Řv+N1Ďö[ÝĆhwxŤľ˘cAů¤9vćłţcÜĆLuŁ6ş{ÜĂš_(Ą˙ń{xš»Ů˙ëO}KÚ<ú <ÓďfP‡Ś°‚˙=YqŚdŐâĎ#‚‚WgO˛ÎŹ>Üýúh]˘ëq;oŚä!Çyú|řx÷€ö2a9DĐŹĂȦşyęĐńë/ź;"ŕ@0ň„đÄć<í°óGâfm›ĺf»ÄĹĂŠŹüEŐ9w­×8ţ‘ůá[ň!í_=×Ćg»ř·ßĐĹe¬Vżo—b߯‹ăjď{öń'#üÍ}ĽěÇ0(cö>ł…høů~óÓ¸öŽRżeďďđÔn‹Á-w·ĺ§ŹźšűW`5Ž'ŢĘ9¤­0ă3š6ß|ď˙ű}<Ą3cHĄ˘§×e{X Ěá;ňy€˝EQk„±ŻU{r/ł> óDl:h_k;miĎFŮB§¸W ľüéo8.×µ®×HŰńÇŽÂ2‹X}ç}<ł2Žs¶EďäÍ<毉Ż>YˇřZöŕŠđÖן†H¸?đN˝űY—NÚń´Ë3Ăv=¬üŹW׿üüţáW‡CĎuą¦ý®ߏ®G®\9{’˙y8 ~[Ć/Ţ||“ß8äZŁ«Ţîňó”ţ4<â.V4ä!áő ‹żkŘ ©ââG᤯yđ“Â)#‚H!ŚŃž„®čŁÄŁ»ýú#ě®·N~ŮŰż˙ű­—uńŃŮąŕ˘2Oşb*ŢS?ÍĽbÚşkÄ‹‡ú=gX–ŁŤhĹ9ęÔÖ;Ń·¶á‚ýôÜ^µálw˛“yÚĘŃŕü×Sš»gě¤Ď?7íÇ‘ą}ĂŤäó>âAO¨?żýđś©4üQIď”äIqáî®í˙ţŰçŠ ik™ć'ĘĂ˙ŃÍŠendstream endobj 573 0 obj << /Filter /FlateDecode /Length 3218 >> stream xśŐZYŹÇ6ň¸ČS€Ľ„ŔC9ÓîűP`¶a@ $‘÷%X%Ŕh—»˘ÍC&)K6ţí©ęc¦{ŘĽ"ű!ĐfvŠŐŐU]_]?L(aŠ˙â˙·Ë+:y¸úáŠůżNâ·ËÉ×Wźé7ŕÚžhĚČfů1>Ś©„‹$ °Ć `Ahy‘Hu‰Šő‹¤Ř R]"3-ÔQN#‰ŞlĆ2q‘ŽÔaĚ*"hÎŇĐq| D7Ŕ(žBŹáÔ•LsňĆsl`„Đ":±1Óő>zÝžŤÜ ÖÉ}měŘňBÇöN\0î1=rň˘ůzČx;{˝ëQŞe´B1|üGk.÷k9Jô@ÉĹp~€:.µô<ž©ÍP?1|ý4ŰF^ Í‹Ęa„i–ŞÎŃZhD=Ő)K÷švŽ™¦!Ę:ŞŠăő9hH J¶ÔOŤP2X§U±!ᮚgNöşúŘ M}Č»ŤÉŠ‘Z4Ý >(›JúŚr+Í|Ň„ÔĆôąŤđ“f”脟 Â>ç‘–ů6ëeüŕ¤Ů—Ä­óTl÷:{)>$FŁÝŻą:ÓŽ?¶o–ËnóSŔR/’A–ŃM°O‡ím’¸Z6]˙"Ëôrť$4ž~řőCůşÝÎ×I_ ŕŰüŰ:čÝq€ ‚"ţü© ™Ź4Źčă5„b1V ßĂŇđ§»diÍWßTˇrA°kR®XS*‚űMó\ÉzĄĽÜłl8 ޲r«˝#2ś6Żt%˝Ň»ţEĂË’9a °Ża‰ůŐ<Ľw‹´Ž--ť¬řü“ŹţGÂŐ EGĘS4˘j'r·ŤŇ5T¦_Ţ4ó|3©Ń\knP Ă7 9Öbb٨üQˇü)ô˛,8?D*ü’˙ý®ôą6š9Ä)kµ—ł  Öśç/¨=íO83<żĹ±ůńďTéňď›â\lóOŢ\ž±âg›ëgAA)…őólmˇ‡’Őë°„t{Đ+1Š'„żo©ö€'ě[޶äQäŮtŰ’Á;(ä„ŕppźXKSúÂČÂá—Şér´Íźóâ|%ą9x뺊đ3BmĘ3φ8«’ °Ýł=Ŕí—çŤa|“ŁÄ¨ţđĹ0h‹¸`‰±&ĺ€ĎkŇÁŁîÓĺ›ĂĆľĎ(ł˘™€\Ó10SqT»Ý˛xËyôť†dń@0¶ř6ő&tó˘©Z  ×)ň}fŘ—^í>¬íŘĚMÚ1fbQ–łŘ00‘‡âí(–äĐămĹ5ËmĄ‰a:‚Ăłs í:ř‘€?Dó±&3O ę稳2[Æü9”Öěůź—K™ÂĘëĹbí ƤŔ^Č2#§Ü‡şM·,ŔĽŚÁ›$©+Öy“5“ňE ,…¶X”|ň>–‰&|ËŃ—śó§â?á0UĆxČo!·@‹-)ćý«ů}¤-Ů‚QĄîk)8Ў<ŁŞđs¨*¸‹çŞń=Č«đIp~ĐvŞá?¨˛ Ź=´Čפ*ëA<ÇĺXóizâMJŹG›ç(l®§Uîp Ą©U§xU‰… ­îŕ ¬8ř†%{{H{@ĎBZPZĉcĆĂZ@ŚI˙xĘ ¸“ˇ±úf%jC™)=ĺwUI%–c˙5Ł|¨Ę ±Šé¸ďO«ÜÖO2éďţ*#ć-–é{{UŘč qĐXÜédq‰±Žlě˝äÉWď#Ź4ɧÄAy–‡ńÔQż’<ň <§}+3—Öőäe$z8Ľ–>ĺ€{é̢ŽÁé€ÚSëěDŇÂĎäŠ HAIÝü2ýč$ś:VÂiî’xpI}Ę%ŹÁ/KŞŔBU©ŽhÚ7Ď@ßŐşî¸Eǰ·(\2;2ŕo$’ň“ž{ާP›Ň˙3ě—«Ë|.Úś%óŞęŚÎ”yđî÷“ů2ÄÖć˙FĎýŮH]ó*lťD­˝µĘ$Ý" äd [F6ú=ÁŃ ‚@ zŘU Đç]ž¤¦ü°R“ąŇŇN*"ŘąIŨ,ÁtÚöé\YIÝď}±Kĺ$“!ű_ăłĘŰ=ýđďH~I(˶#c' ¤K7\#Ě„BAň?ţ¶˘·±Bp>)CÚů@ä@^=É)?­ŁµŔÖÍ^®Ľ×–˝x7Gű<{ €ĐŚöwÖEˇ_î®oe¦>ľ»śňŚÝĄX4ŞŕŃä¦o0l‹>ĆnWnŢ”Ú7»Ţćź/Ň)1˘ÖÎúB‡ř[W,‹R#¬Ú± …ď^ÇjxóŤAćo‡ť,ŤŰëUpÎÉâÜŃ=Í…“śň€î±Ü˛SG öőÜĄG Żdě…GK qb{xŇsĘ#ŰëŁ]ź0Ťv‡ĆŃ}{¨+űU…*/ŰÓ‘:ĎŰ`HĎ)ôíiPN[ݧ•8úBŁ˙%ĘŹ‘’áĄT-˙ýU’^¨AΑ.‰ň¬žĂ‘¤’÷I/ZČĐÔ’ŢţŢüHŇ;T uy…:˘.D—ýî=H:dě[4ßF1J(ę!aŻËÄŘtyÖźXř`ÁZ*Xj¬ľĚ[÷»QçjµýŐV굌®łÎ]µíĹ,čîb{\Ipmt;'x“zćbÔ)]o=¬7?Ő;=LŃD±ďŞąa …ÁđĘ>lÉ4]Ü“°şńÍ@4®ůŃwńI%´ăÓlč+®›ćďĎá'ľĄ+łźŚşS°ű>]ýסš(ël˙±ž=uSÝ×4 éQ?Ż,‹F[yš¦ńŢ× ďwbŇÝÉ8±-÷jáXÚ1sąŐ§Uµ˘Ě0«Rď"?ľ)Ĺ—·łQv@á‘ŃQt 5ŔFXsc#äL 6żEóá4chě/+ę8ÜJ3k޸g<@˛Ż˙ö:Iű5"ÄíÓŤ}ţáhę}¶Ë´Ţů»¸ˇy¸awYé«~%yëç2yD}cgĘ3˝ŢíąÜ^öXGóTf0,ĺçéZ¦öřăÝš‰áúz<[㨿Á]–—7•ă+ya1E]·—Ĺ‹g Ë{łMú»(Á±»ő˘qó*ŚC‹0öb0 ¬8#`MůĂEÜ3''8ĺ`Ń„­— ­HŠ3¦™“bmâ? ?†´wkč|exĆđÍHf®‹ÁFg‰îăÁďęÍŁ }Nâ¶°ÂfţnPKqWčÇşĐ9–c]H-G‘ř];Ťe-šŹć;v›®Űź*ÂM¤…vžöŔe9% ŮýŕÝóφ™čű%Y­—ľ~5Űuő«n{iüđ&C'ń&·B‡±föČqÄgźN>K?Ě.ĺđ"ĂxcŰó,‡/ĂŔ´ĎpÖ„qöRŠ~bÇ(%ÎTg"ĄĚ‡ČqľQšaîUçă`źřK,°„–ä÷Ó¨ q®˛}-eÂsk‡•"§ąô+}u}őOř÷_ Çendstream endobj 574 0 obj << /Filter /FlateDecode /Length 3248 >> stream xś˝ZÍoÜĆ/Đ›N˝;]ŠĚ:]vľ9c´Z7@R¸@j«'«(hi%łŮ]:K:Š#{ß{3CÎpą˛…â’3ďűýŢ›ŹďĎy%Î9ţĹ˙W»3~~{öý™ ·çńßŐîüŻg|<÷âüâć,Lçđ¶6uĺ•9żŘť1)W˙…Á‚«b4·•f\\ź˝dOß®xĹŤŞ÷l·’0ß)Íň·Űfh_jĎ6«µRşâZłgí>ö~•÷šýŁ[­Ą«¸°ž]gC`.ţpÂYǶ=NPçŽÝµĂëđË[ĹŕyyÎż/ţN ™B!k*n>ěů ť+ëdRůMF˝ą"Ĺ4ĘßÜ^–k©G^uNH‹J )Ąî´ Öh¶«@ÁóśŔZIĐŘ©óµ2•ł6Đąé»·ŰćÉjm¤F°Ř|‹żA9nŮĎńQH6lvoâ@oŘébWÝ~h®â+Te´—çĎÎ.żdýUłÝyaj¤Ď~&"8ż^7ň–Ü{üx×î7ôÍTµ´ŢśŻÁDđMa·í\ Nŕŕ¨Ă¦ÝmŻ“ŕží»Wý$ݶ»}Ö~7©ń—ožÁÁN‚íŰasHß$Ű5?V·‡f¤ĄQˇëęëQL Ö4žÝl7?¶Ż¶”CĐžŐ2içŮÚŮJë‰+x§rnúí.ż\EL%ÍfÍýÄVT|ó—Äw]ÚŔQ=í677íU»Ůý 8 ţ-Ž6úŞÚ]3l&‡ľ®«É._]¦úO“h¶o7Ó—o—ěË÷?˝qIśÄÉ>čƻ氣Z"ŔdeĄ×ô›l‘oůäyU9Ą&úŕAUOÚ?~üx´xڍw›žQW»śQ\L LÉ@ÖZĺ >[Ż×«Ď‰Í‹övßŢTy$_oú'ÁAČ“Ç\‚ä)ÓrÉÇldź‡Ô/ó-ą/ AÝhĐśP]‰„Ët„¨´Q5I)±H QYý ‘–%*řťÉI¤e‰‡­2÷RšI´HÇ8ˇd#sZ ú&ŞN 4Ťů( ť0ÄÇéź§(đ¸„ŕůpF× HafŚp'»Ű5áîŽWpÄB:ií˙_đQ˛K’N(’М獲«á@ŠĐŔňJI= ^ŐÚ’ˇę\—‡c D{ć¨ö©ę“Ş9ÝѰ⽜”\‹JÉv"ŽI©&ĚYK:7S7Ş%ß«‡€…˛V<ÇBH•cˇănDSő^ÇyŞ˛˘.ćŐu­§yş˛FŤóô{çA­ňNNó€?GěžćiHşµeŹ(-49S?đÍhx§kđ›5ŤťŢz/µn{lŤ¸ňlŔ5űae,\Ő¬9´Í+jv´“ Ć8Ń0» lý4xm(ú˝CŢwŠOt;]IőŔ BF…¶Ć«|z>$čnÂŻäiRM)\ÚÔ2)›·­m?ÚWŮ‹Ľ;NĽk2fŰGĽf}λ˝É:ĹČŰJkeÁ*6ťÎ5ĹńĘI!'uőf†Úč„ÎOâđ%w©Q¶j‘NxŚcĹ!7 ]Íi„…ĂśCŁn@_öŰ0¬ ¸şŇŇÁă:ů’]B'Zxn;oď×4UrQołhŰgĎíĐc'L}aöéĐíbL8“âĹ+`Ĺ‘Bř˙ş8ŕ㎢€kËBO_"wy—_D EÂô;E‚`͉)‹ŢČčĽŔ,z[ŤŤĎiw ™ęŁńźěî|Ż»aDpwů2ş#f|îŽ&Ϧ>Ć€ńŕn–ŰŞ0ü˝"ó™f§QĄźeřčâä!+çN'|€†8OŢę’†ęŇĹŘ^Ö#cë‹DáAq¬„ ˇő蔵D"ôv ĚBx#}” kłßQXDŕ8Úî€-.‹ Ťőd9TęÍÇ…Žó÷"4^‡Đ‰#_¦GŃý ěCň˘tö“(+vÔO( /Ü/Rz–ž<,D=ÓşŘóĐľdË"É<·ČĘT‘©8ˇĐ—»(şzÔŚšÁHĘÜU„Oě~łHÉU†ZŤ0ć ýµ$UŮv_®ĆkG[>ˇ+ašúµĚ˙ŰóŮ|µ÷e÷%ś9Öt­ą«\]öĺ÷`żáîC<Ą·ă"…2öß›ŔşŞ•äjfÎ?ŕ~ ‚4m«žŞô ÷Zřďá‡ô„źEżtűšP”U–QWŞ' Ť  ĄXŇĄÚ­L¨Ýéő/„Du­ČE_w˛!u'a_ÔC‘/{Ý?D `yŇť®u‡Ů¶*–_ö¬AEN8¸°/ŞĐbp*¨JÜ×ŃÁo–<ça€ŞMŠÍŘŕKh¶oKV¤ ôÖy‹k0’Y‹–Ć÷E±L5o’z­ ¬\´ś­Ó’1a]©ŘŁâWáP4 ”:Xw„g€yˇ¤MW°lź·‘»]sx‡ß4ëň÷Ă›“E!â¶lí»úÇ>ĘŕÍ‚aÍĆ…96 WÓ–oG?©č(ú÷5̬O"…•Gŕ]´:ÝČY±ľ˝Í?µźeÎ,ý×p– Űw‘Ě/2ćQ±†9,­¦°[J*C›Á…•µGĐ!^ĆđR4·ŔŹďsoµ´ÇdUŢYž”ŔC >‹Ť]h@u4řŢřE­“ fČěy‡Ő@A)hŹs&Ś GG^źźÉ,ęŘŃjŮI'Ä%'ÉEh»ą“Ć#~ąŞ‚ËlUs©’Ë^dF»Ęó”dÖF‚ J÷•2 łˇŹS ŘşGŬ~ô˘“ž˝‚ °-[ßCqCçVÝ0k”FÓň!°Ą wó#ś0ŚëÝ5€”ipYž4†6PTůŠuK÷7u°ÚAŘĎjŃ8 @%ť«Í6(ňgZ±=»;u’Ć’ őĚůŹőRŽľ)–Ř(7žźÁ*'<&.q‡í$8ÔňcÁĂpŚk.(Gay’o#ů—ĂâŃÝżĐX}Ü:°Ë ‡˝/ …y§”O €+AxâŕæWP!sžÖ¨8öşĚ; Ěh¨˙ꋸ»Ťs„]RĘ.dÄ⣀¤)ëmfâna?j ŇĹ(Ü <,•ČÓvÖé aÇÄKHŇ0&…KăEÖ\Ďb'ť˝Jhü ŹŘŻ!Đä;*-H #§÷`ú]¨ş™Ęóč8>Šž!’¦ľ˛˝]ź¤ôYHSQ(]GťU]l“`Ő ¬1¶qôşXçĆľlŢ(˛¦ö¦c°Ľg±łmJí°I"jÎG!čqݬ‘ ÷×ăžĆv…a+Ś] ú\Öh…z[ćî"Öô ^„.[Â2ÄÓíM>ŇxýY÷É­dáЪO;ÉBζăV2Íőf;wá=€ď¨âŇ.,dČO&_]ÚőčátDâxuceXéosN^Ća· ĺ=Ě(V´ ĐF]G–F¤–‚¬Š´Oőń ĎâţŢ–ŞUZe—y»Ź í¬ô‘BłrŐös ‰9±H;ĄłÍ‰aI5AE¶Hďv-ŞŠ$Ćó:Ôţϰé‡%mMŤ‡˘IYŚE%)/Â†Ž©dµ"(Ť3¨Ľ=*ťą+Óž;atđ“Mˇ°Đ ‡˝5Ą±6÷í0¤NéšŇÝ5Đx/ç ¶K_>JŢTnÜ|˝/’TU«q\KwTĄtá©%Bŕé¦Ý×6­Jńň]Ń_ŹËUsT Ă1‹˛X±•ŔV† €ÖÝÇ—úč=,Ż·íw«tW°´l[n˛¬S´‹ Ń[iű$:ŁÇ3ĺ~€’9eJ–'r‹×ô„3•¨uvqv-–lYndŻI”ÔÖă˘^ăš‚ßŕ~DSž ‹¦'ăU§‚ÉxťAâF˝Şłç_NW$¦¬Ľd7;o|Ý^)ď\l¨Fá•:„ę‚Vx˝ąąŮ\ ýÂíŽ_˙ҢiýífşŻ‘.†k'>^&Ś÷Ţž=żH‚¸píĺéë6]{É ŹGĘÚwűÍ—Óe ş5čĺ$špHŤ(|uqöOřű9ľvendstream endobj 575 0 obj << /Filter /FlateDecode /Length 2719 >> stream xśµZKoÜČľë7ä YlŹăaŘo¶ $†»pÄ;@–ô Gb<3”HJ˛ !ż=Uý »9­µNŕ‡dwUu=ľz´nĎóŚžçřĎ˙żŢźĺçWg·gÔľ=÷˙­÷ç]ťýů]AáMfrCĎWŰ3·…žĂ[-uf¸<_íϋտa1Íy˛:Wev¬6gďÉë»Ežĺ’kš˛_0Ř_pAâ·»˛ŻďÝmHµXr.˛\ň¶>DË>á–#ČߚŒYN•!›h ěŇ‚Ş »7đ,Ď ňP÷×îÉ(Nŕ÷üž«_ědr %ł\ąów'Îś©‚…#ßDÔ˵=@ůË+ÇK傉—Ž š1Ęh Ô´îtî@‰6ĘÝÂQ0yL`ɬ)řů’ˬPĘŃyÓőőľě˝d @~í7™2’ĽiۦĹG8iÎČW˙“rr_îîŞńË?ÚKňÓă×ÇË…ĺľTŔňL çľÚß<”íěŁ, Â2ˇ8łĎȌ䙤JŔsn >‹LëQš˘Zć*H*ČË—/-/˦(ÎWoĎV/ß“usčËu˙Ą+S©-+šÉĽČcVBS6˛âŻ`Ţ>ĺp<=Ôs!ËĺrńŁe&«_ë«C˝ÍƵëfSuŽňÍ˝)8›x8źńĆ$?:ĎIÍ%3Í”‘~ Ő.šŇ î5O‡ŇLHîÎn–WâY"ÍK”đ;-’¤ŁHóA+.ź¤4‘h– ®)(–Žäiô3T”ťh\óM:ˇ †?"üĽÂĎ9—KqÉ…«C¤ĺ¦p„V×mŐ]7»M4n]m·őş®=x7WśBű/Š˙ 8ŕ)ŕdU Áµ¤čÍ.Ş%h‰]D_Ŕ‰¶41T»›r]®ę•öčC31$0Đą… ”ť€±…ňŠLł¶Çô °r9C̸eT–kž‚}[î}:1P›ôÉS‹ É Ĺé¬5ٲO@?yŔS ‡(ŽšN°ô}ë)K¦$]ü Ý`|ę<°XŮVŽK˘ĹĚLky®yđ‡zBŚ?ÄRt}[=K>·‰rIfźKČ*\ěJ6ŞRă* 2™Łl4)ăF±+¨°ôÓ`č§nÁĐ-ę0ÇŘ«NëČŘŢžn÷•ß ˇ]/ n*Č:öŽdQ—8N˛Î[NŻÓR 9Jóžbc§¬Â ”J{«„𜱪&gŁYQřÎjęSČO3˛/cµŢ<$ ťM’ľ Ҧ§­» xu*šÓĐtOmý5~„¶9L\† •)9E9ËŻ06şľi»Y?­Žçpëř±—EĄIß.9č|=Žc gD<ŚAš.l€ŠşŮzšâ¸ vD%ů|%( ĂHóŃ‘…Ş›’ş<ŚŰ!´őçń(§tŔ‹ŕ=ź±ľËZE”đ’$ÓěńdĚ h¬ďD ě8jÎëłĎNgÎŽuą"űĆ‘ÇĺtcáibÄČÖÇ*ŠđnRŻ;wP&cĆ»t'Ý—ź\8˛‚$ŽĐů62h݇FÓŤ•OQ°kWŚÜbWůU’9WÇ^ ě’PýÜ·)őžÍŚJ,-ýČ`›5 ťhră{2@őŹÖdbđËضË$,ZUč @źir{gT1śl4řµ‰^v}‚ëîřŠ)»Łsv}{5[ɲţn˘» ÎcűĘ$č±~K]’'=Ôď~ë¦MŰÜ\’í>«nďę?ÚŘʦ^ţ¶2^.ŢŻ/É‹(Ă˝xöä…ÇŘ—‹ľK;Ę”ľ X%z"}d¶l˛e{äăăx”Λ*‘7űZMßeQ¨ľ(Ŕ>ŠĐ‚ đ×b|#ŚÖĐţŽ"ĚšKCiłźČ%~LŃ2…×.ţ<ÖçO$Ŕ]ĐÔlŽv8%ŰhýQŮ ˘Ë]%ĄăB…fť[äÂć_"p/Lđ[ęB îŘ%ÝŽµ@W˙­™Ĺ1č?ş«ëŞ/çP×z~ŔÜďĆY+)äYÄY«°i”ŞżfťAä1ĚĘ¢á´8H”LFÍ4ýnŘ5ü>W×ÔÖę©ÓŘő蕺\i“łô©Ě].0?€Ő÷V‡¸6-/ě´Čĺmť(iĐü¶Ęł5 nZĹ ĺßăĚeş`bawFVL$– őd] śÓŇĺ”ô{š—„ëĂ‚'x§ˇIa‚·ÝĎv ›ń2ďÉC’ŔÝʵ®˝>KmÍé:ĚÝtŇ-Äőză˛ú  ¨Jj÷ ó_˛ńk~?Ţ ÚOJ1'ťrÇ•ÇÄG©«/ń“ö56R2Ď,P?çňÚnçs“Ö±\÷ťNz€p\ăŔű[łźÍ‘#gÝůĚ{˛o ë.Â'YU'Ç1$\¬4wÂÇ•Ŕľ*—dSo!͇dO!ŃÓ YüDÇŚřž~Ë–QŞ 3§S©™ôďŢ™ÎE\—±‹Ü/$¶ELawťN`zLPHc6ŐQˇ'ŃŮş#8-lľ/ă¸Ib(í pÂíÄ‚j¨Ml‰Ç´tg6*Ä)ÇXž¨ůżgHb$“†îTcq7K§?ť4%ۨü¬âňóaHG.ŤdhÚ˙–ËąyůoŤ¦l»Ťů×L‘ĺ÷śü‚˘P›ŹQŠ[GťÄą“&¤ĆĎź‚óUٶŢ#Ą2“@Çž‚ P1é)J®Ź-dĺS‰+–P/ąS¸ł0’—.Á‚]d!:Pýui6ě|™g¨VľoÉqŘÄ„Ş˛h}˙ę¨]m[CżIßą>GCµ=ö9®¤˛«ĂíXZ8„i‹ŁŠĐNµ×ő‹ç¶1塹/-b˝§ŔCł2?°ĄĄ ÔŢÖźŞ]}Ý4›‘€S"äT]ߍ­ĆŚăMÉúngď«qç®>|źöͦÚůy¶3„o›I\,–…Čs»ůbä5tYŽŔ2PHKJź†A7ĘŽShGE‘˙„OĚ^ŤÂý)ľT˛Ză‹]sU÷Ł$Čackż~ďአ‹šáĆí˙Á}»«>×wŐI5šě¦lÇ»¶żüüzěń€x”čí» qŰD&µwŚŻŻëî6Ü2&JµÔ tNÝU€ŹI!áj>ň[g·s¸h5ë, “@ib*c'‹ÉVCÁ8ŢD°á†‚IţD7;¤ŕźmw§mmť€fm[Ń"ž~9Đ,]— _”8ÂYűK°I<{&›]m{šC1î.»úęő«uÜzM‘AFQ€T{PĹx×áź(I±XzrĹ0ŐÂ\ëQĎôŹ.y·ĺÇč »AEčŰÝŔ“ů~M“ŢTô~ż~ĎÉQM®J×®#¦[˘IÁ;ŕ…ł}Wş\¦ą?ş°ő3ĂF­9Ô4@¶xŢťÓ«0áŁä¤9fÚI§Ăh>–t‹ö%”,űŇĄ(Áă±]Z­őV1Vv1“~ýHĎŽ”‹=5xőĘ ĐÁŽÜ۸Ö*w»/ăߍt3W1ă$0­!ě\r¶8ô;ž*3˙oVg˙„˙J“Óendstream endobj 576 0 obj << /Filter /FlateDecode /Length 2532 >> stream xśíZKŹ7ľë/xB.ˇlw/źMŇH$ÎńÂŮMlĺd/ŤF÷ZR;Ý?‚A~űV‘ě&Ůjů‘{X>XÍG±ž_‹óËś–lNń_ř˝źŃůőě—sŁóđßz?˙f9űűĂ`¤´Ô˛ůr;ó[ŘFµŇĄjľÜĎŻË˙ŔbFE¶šV%ăv,ŻfĎČĂ›-©šQKö űŤ$Ý­Žők?Ł-Ů, !dIĄ$ŹëC˛ě%NđŇZIľo7%e•%WÉŘ‹†™Ę]‡DI©!oęă ˙e+Aŕ÷ôž/˙áR™@•*iĺĺ!OÎČ\V†÷"żJ¨ŻÖN0‰üŻ®ýY•\gé”d%gśő”šÖKçĘ´±Ú-ÂĹröăĚ[VÍŰßcQÎ#‹}FVţÉ5• Ř‚WĚ-É7mŻp®—H€V_z=JĂ­%Í\oa á”±”»Oe‹i^rĘsŢž/<}kěŔ§;xŕS‘U×eî–ůCř‰±€Ľ%Ő<÷ź·uwĚRőŻý„˛ŇG)KNšmŕF±l}ÓîÁb~ĘptůiÔ®ŽQĘÔł—¶ľLR9Źu“žŐ…s¬W,ĐX#ÍäTÁćŐn÷®·óˇ2C+Ľbm^0Q*iąwΫÄőťŚz;u«P8 đ`AgŻ  \µufĎ Zđ0ez‹řŹ®\Uĺ¶‘ĺ ś±Ę`@o®†uIuT&đ (˛oĽn l:Ź!0=[~ö„ 8.l(ň·Ô<ąęŻÂVÉȱééł!ÖëŁXl‹ŚŐŐq&,˛\PaÉ»(c}V°`‹öß&ó.;řşgŔç~3 ać˘Űy1óĺăŮň.€¬fäáăďűŮcݦ.(†U,ĂɶąLÝé6»< € (Ą]/GQěčBÚئFßíźZśkŹ„óś¨; ||´Ăx˘ú`ä„HČŔh•H>F)GX ˛óŚ€Sň‘W: Ş–‹Üo®§R^Ĺ«Šk4$Z/ŤŔ^h—<«¬|ś§0žÝ"v«<˝¬ň‰\Şóz Ŕ%­űmÜną!ĹBźd-ͲŚ!ź˙đä_ß>úÖ'ő< 8ĚÓ§â7©ëÝ&HŽ=6V/ XĘm·¨ŚE‚ŕë Ї'®â,!&°ůD8ĹK¨˘é¦dĽ ?â~…ŕŮ’BXS¦ç,ě6^ Oľ‚řăŇAŃv˙óe}gé‡,ů˘ÓëÝţ9yúÓ“‹^<}ŠĂĘyÓoá'Aů÷ă@·vjňK9ů2ÎŚvÝHőđsoQX«•sFŚŽŁ„J×ÜĽşé´ĽüňłW€=őń3¨/PĂ穦ňv7űýŞ}÷< öŚŤ€ë!ßő4¶°ňf·z)ĄZń#|ĽwÉ „uę2LiÜE~söí#Ą†IN-–NV7§J ą]Íf G;C˘ěŽ’ÓŘńE»é^4»«hĘCsŮE%îšëÇőËxô׏bÉŕX&‡ú¸iŁZ÷«·ĺu»hI˛nWĺw§^ăŃ%¶»ÍŰú-Ϩ´ĚH‡4fžH *)Ź–µĎ Ă jwJT)ĚŠ•¸^”rsÖ»r&WÖ. 6›í¶^כñs!¸żń5Źň:»čŽőŢá`ČăUůĽhŰ&ŃĂŻ‘˝×«ÝMâŘ?´ĎÉW·żŢ˙)Ňł†úĘűď•b\2$§ g”ÂxŐ˝I,AL¦ń Vj JŕQ wďŢLŕ‰‹HR‹ 2gđeSâPhEâ2@\˝Ź¸Ě8-°Hś)¸! ÄUÉąĚ8W›‚ę÷W)qËxĘ9W†§śsĹ#q ‡çľŃĎĐÄźRĄúaÂđD!U"‚)eĹ˝űaD|MĎá´DséigHQ‹ĎݱOëëC˝-ăîusµéDÂ4ŽŕŁ ¨@wţąGô”zŻ÷KŤű9!]˛ţ&;M‡±R*Ń'еë$%Č‚˘’źÄŇ4GŮyçYR,˛4ÍTĽ•PďĄ4âh’ ®1L|’ŽÔy†ô'¨¨<ËP\óQ:Ł ¤,x„‚2ř9™ćŇ*ÂQ,‹¨DźkBŞi®‹!łűä˛ÎĐÖe)ń í˙ołĂ2Ŕ]nşcLCŰ´Š[1ž€˘(ąŐńŚČ'öZţŠđż"ü˙2ÂűĐYžÖʧ!¨CUűgĸ‹çŚrĎ»jCŕ>eŕćžO0Ł"±ĂB°ˇĘŕ·"ŰĚ­ĐÉf)LRUYY3ě·2ŰKŤ+Ąâ^j“˝¬„KްWŢŞ~¨qx· á‡Ă]’ť–.ę¶JI€Ş~$aMŞĆěgtGĚ/1ßőwR-+á|BúvÄ×J˘˛"ý ,ČÚ9]Ö>hó^żDXĹK.vCÜyI˝`Řßś\ܰ0†sR§=µőű{qč‹•pýE¤‡~“5$îlÜňJ1qŇ›<ééú‰“+¸ô]ťúÎy§nřNţĽŐ)a> stream xś˝]sŰ6ňݡ/šľJ#–ř2×δin.7™¶çčžâ›-ÉkJtH9N^úŰoE€¤d;ť»qfŔ~ďb?>ĚňŚÎrü ˙ݶgůěúěĂu»łđßj;űiyöÝ9Í9le6·t¶Ľ:ówčŚq•QĆfZęĚr9[nĎŢ‘ó93YNsFîćy–K®inÉ.Zoć ÎE–kJţQć.ç ¦•¤Ć3<łĆźü2§ŚĽ|ťnĘv pĂPŁLŔ!­€Kí±/˙Yţ24懙m€§ĺúŚ0=_ţq¶‚Î>(…ŰďČŹHťÍňś“U®…â¤ŢŢ:đÂ0kIdŐ;ÔW¸4™–ěßGç}–G-Óđ[)˛­q ś IÖ©Ôz†Ş6€5‚´±Pę9ŢµŚ“űÖÁě°úĎĹ>0AUúˇ#@3Ň®bLEµ W$Miř*ů•\Ú·\.I«>9Őlŕ‹•RĺŠ-~±Vă‰qĹHÜW–Tĺ r FTÁMž[Ű©0Î…Ž—ë ˇH›Z_żn÷ĹÎٱf ·˛¨ŞĎs´Ę3),›-ßś-ź˝ îÚFýŻk0Z)A†Ôń>Ŕń(M?lÂľ”©i|Ú7EwEŰX—M± G˝Í§ŢĐdó…ĚŃD$Y¤čŔiAŠŘŔÖN’s¸\Î)Đn9ćŃšń‚U™3—Ö‰G×ŰDËEŐqĎN›LŽZP¨ćo(g—1ŹM=ďÔö±<ę m ĘrŇÉ*פ݂Úü9Ĺ”bš4á8ÍI«ŚÍ? $h¨÷EÂH+˛DÁ%2 Zź¶D&K®Pâ §I¬ ®`(Ü+bçvĺu¸gDSšÄr6!nBL™˛(`źfQ틹źŔb?YĆ5ďśâü0<†bćäjű{UŻ oD’y“řۢ?pw».ö› l «ç™±xĂ3lH´Ä\#·Jńž!Ďž=;®G8ädFEB€ČxJĎXŹDg:§¦7žŕ‡kđšőřłˇ%“Ĺb1˙Ć‘ń¶ĽŢ•WYĎŰ ś˝Ťś3?DÚ4óÎ! [2Őo0QF( ZTV†#(whHgÔ°Sp(Í„ä6AůŇIHÉs%žDŇ4E ľă$IÚ“4M<ŻŠË“M‚Á3†ň'ÉH'H?ADŮQ‚ú3Ź’Đ1\úCďP°B ËÉ7/:NÄ´€Zpđ®8D«î}DČżÔ@ )»PiŞ‚aIHăüěŇ< 2b8ă¶! •Kî¸bć|…eŔ*Nl|”ęÓ™Eň 3o…ŞŐ¤yŻC ém\”‹$Ăm¶Ő:^Ŕ]]‘¦\ÔX÷y™O˙8Ľ 4Ő@mÓtRjXGIlšl­µP«ŁŹćĂMŔmé¨~ňB}•Éʼn*ł#É}Cęň฀™¨„uylš~N–ŤţćJÂR—™m‹›޵˙„9ţ§H†›ÖĄ:]G;*Í  čŠúCběM (« ¤˙X 8‚ Jͨ@ŰŃrP–z8¶Ë áŮpyZRĂ@B φĄ&-ęĘNttPr}*NŞÉr¦Ş’J „ý¨ŔâÔ•’Ĺ.¬Ĺ|¶ż5ěĹřS`jí°*źâ¦··^,’j2e"ˇło¤[ăθŢăŐŽö' H MőýĐć:¶Ż’XĐďO4K`ÍěĺW.60%!x4 Ń éI @áíIIŠŐpăĂÝ1†wÎ.uÎSąŠRC‰úąBĘ…3°>L ˛O’ZŤăµv˛-‚˝SKţđ=×ň©_ÜRjťă ´Ą!Ě}ł×–›ăŞüXöa?o@ť«Dk ¦}VZŢJrl1ĄĽ?â ń žŇ ówĆëéPÇ"ŻÜ; Żc,ílÜ—íAä‘6˙;d{ŇLyjétk:8ÇČĂ€µě¤„m˘Ş­›´»nđđAŚÂŃ(GaÔŘÜuµÓŕčđâ3pSŹ5 F"ŻŻŽćŤŇÎĽyN]ż/qĄ:™‹LuQý§¦ŁvÜuwp…ô[źŕb‚´8ôo+źúZĚ ¶/Ź„\}_4ź¨#đ5čYoqcźÄ`‡ÄŻiś‡PĢJ}8QżoäCíŕЉ´!źČ+»đÚÉ@Š„„Äl§˘b' 7(ęÜE0 1?Q|Ôĺ!b%ÜČĂą ¬1ClÓÂÇĹ…ÓqÚť !ŚŽŰÉ‘VÓśűÜןoµJ˘qD6šmÝ$ćőHÔIÓş7/ǡňů3¦ĂjŻŤň篥ů3T ]^ę%%Ý<WVźĘďSG°ńő«·_Äa{óub§ň±U—r»zę0Cň×./Ľ Hě÷Ý;:©ü˘•·O'|ŘÖíá– ÷%îŃsďˇn_¦ňkîĆźNľÜËúČKiě±uÚ©ÉÓGF«Şú="čdö°Ş¶I/74l‡˝ÜçýĆŁFxëůTűŰůÂ<'ëb_ô}ţH[ßÝFlŘ˙ő ě ţ}ú´Ó|ö䇣W iµLţ5ZüOŹe€úH±ÚŇmß;>5—ć˙=—ŃÂ7O fŽŤa¤–ScČ ŽĐ…w:ćĘßyňüŁ›8ýDr==u™đ /~t]íÓč3FóüéĚNxşß ľIĺý/',‰jă‹w`­ĺ`´Ěp "&‡‘˘P×ăÁŠÂańđ‚k®z)Q?çrs ”>0Ě bÚŁ&9=B!N;^-Ďţ˙˙OjPendstream endobj 578 0 obj << /Filter /FlateDecode /Length 10558 >> stream xśí}Ko$Irćžë®;oJ.ÄTřŰC+é ­vatPw{čÖÓOjČć4ÉžÚćÇŻ™}fîćÉd=X˝łX`¦1¨Lه‡?ěńąĹg?_lÇp±ńúď7wo¶‹Ţüü&ôB˙ůćîâźŢľůŰ/z Éqßöpńöű7¸$\´•vÜSąx{÷ć¶Ë·˙IŤĂ––Ö[=†¸Óoż}óŐ៹܎[I-lűáî2Ňő=ĺ—Ţ^?Ýüiűá»Ë«”ňqËů𛛟\łßńâqßóáßî/Żb?nˇî‡o]ş–żôĐk?Ü>ňé¸mýđîćéG|Űk:Đçó×üÇŰ• •eBµ·ŠůľxaÎÇÚŁMů÷®÷ëodb™ÇýîU·ó¸WóĺpŚ!ëéţłĂ„–Ő¸ľ˝äţĺí›ç K?<ňvĆÜŽĄ\Ô´÷#Ť¨óÍk¸(ąëľ_<|wńż.~z“é†mă;ÚŰĄ˙˙'iĂ˙¤‹[?†ý˘ö´{ľ¸#I/t=Kұ–‹[’ěô©ł¤seIÚÂ1–ěÇŘ ŮŹŻĘń¸A*é K2‹%1kf ýĐććH’˛cI&}ĺ« m;®˘Ö´R$ˇů€?đpJ?Ć.’šŽ‰'Qi»HZŔpč/%@B«ĂWŐJ *’^y‚$éÚńžŹ‰/˘‹7é&ońxÄŤşiěĽN$±nrhÇĘs d´‰ĺx}Ó™gZËŔsčô/ÚdůIŠ®iÎýXx˝z.ő(ÝěGڦf^ŰÚ÷ČkÄiăkhä1@˛óÚ’„Żeuĺ˘ÎbÉ^xč•ôáĄăBÓl•%ńĺÖ…´$–Đ-;$ť·$…·%‘– ˛„šf“«öc‚„´›oEÝut“w)I"kKh–¤¦$IÖ†ć)à ņÓ"Ż-IŞjNˇµŤŇ3­V†¤‰Ţî4P MT†vU‹şĄcćIDO d~<‰޵BŇEo÷ą-Kh˘|óHŽEV°’łĘ’"¬¤ölF,ŮU»FŰ™J~´6Hú%/“ú"!=cµuW±éÍuÄ˝‹±$‹vUŢë‚w`Łm :‡ ý4šgĎ't§ŃŞÔ€µ€¶7ň)b›Ü«Ąr XdXZŁyö€­)é–Ží«č†íR64°±„m®A/®˘‰Ęp(rT´éAĽŘN[őo¤÷)AO+®Ú Ö妚Űi˘<žÎ.Júé¤X%ÂjŞ,j§ &XZÂEG`ź¸U§yеrě˘=Óꊄ¦'‚`GUî(RőCUŚš}K+p^÷n™Í›\^1IŹbG=51Ű7_wUAž_ă9đf±€Ť.óhIˇ^ĽÜlGť=$4Mňµíä 謶Ťf łł˙&ů;(öN®™öŁ6ň¨č&I–R™mU‰ Ş6˛lď^›h-…¤c–mŮiŐh •Té¸ăÖ4I¶!ÖgXŢľo<]RyŇđI#Şi•ÇM`Ih¶bhq r=™ŽÄ–°ťŇUÝR‡d—ńR.™VÜhiIŁk¦‘îč™c­E&ťßxEż¤úó›^i©¨˙">Ł_/¤*úĎűg˘ ±+Ѩ{Ç73 ßäy«))Fö%»@ěĂl5$®U „łŐ¸V˝ËÖąVC2[ťŽŐŹ~¶z\¤Č}ŃČ„7rÇ/R´¦@I7#Çł“Öhüęp•.ŻvŠnépőS9\…Ë+‚.äÝĘaŁŹ… @:„‰p®)´ĺ´9wS2ć—g[ml˛&XUŠ5äýf#,ŤíPtmđ}i˘mÜ>rĹxµ®xŮéxf‡N@ŰnKĆkҨ×^i©¶3ËrµöăÇ0vŤpSă]ă°AŽ•ˇ~řSdÜ;†ą3v#PÉ«DęF†ůĹw äÉHzI‡ď.n︺˝ůÝ%•-ĹĂw·7?Ţß;Ç˙ďYż"K¤9… ęľl„›ţĆńí‡lŁ-­Ý#ŮF 0Źd[%—›=’mäaĐĆl#†°cH¶ő~‚d­ĘľYR„ÎdÉ©!  K w Y˛cŔËdc„Ă›H–Öľ Y•ű‚dÓhcP6[?Ęđ= l1Č> ,-!ŔŮ€˛¬! ’ap Y +--H–P[Ů=’ĄE.P¶É<”%óeiv ľ ËRÄlÁcY†Ä–íôÜܰěDŔËnN'–MĽn –-ÖłbY‚»˝-X–rŻ+– Š#&–MĽ´ –čv`ŮĘmO°,КDz©ťbŮü ËćgX÷X6ę=–Íű)–UČůgÁ˛ű)–Ĺ=–Ĺ<–Ĺ<=–ĹZL,kë5°¬-éIJ¶ěËÚÖL,kŰ7°ěŘâ‰eM &–5U™XִɰěÔ8òS+–škXv(÷Ŕ˛Ă–F2°ě0¤f‡± 0; r€Ůa´Ě»`vŘţł&52Ŕěđ2ĚOd`vz+EłÓˇ)šť>ĎĐěô‹g§ď48;ý«ÁŮé ÎN?mpvúrłÓßśµ0ĐěÍŽČ2Đě>ÍŽ5ĐěbÍj¤cĐń•ĆF˛C9t9řg^ž’öŤu—#É«ŇF±Q\h şÉv(0~l)‡Ńżr6‹|`%c7 Ţčë|!Ő (Y!‹ۉŤ‡uľěbŔ,!u‹|t ýShä# +=;łŽ~:”Śľ›ĽŚ3^ědh<śJş*G±Ř9 G“ ť†‡"I—áT س%çUď&ÚĂdťor’Ť=Ë‘ŚH;4•$»¸ęĆQä-Yá[ŃSUěä-Yá[ŤGtÚ"ođéđŁJvŃWž˘)`^Xq󉂧`YV/¬K`§Ć“Ř:l2>é"ä%4ˇí ’ŇÄPŠô7˛lěrQä@[5žÉDŽň yQ‰($Ůe»ćS¤yJ¸ ? %‰äíÄA7Dť)¶dÄĄPE@ńH,YgÄhh–b=ě°pďĆ9g :˝PŔă! ‘=q†”Ě© H’ëádĄL#wůxÂ&CťČ"; …‡C ‡«Âi¶ÂQđpn™~Ĺ,…FrëyÉ"Ĺ?Ą%‹9ĚżBé#ě'e‘°Ŕă-Gť°[=&:`vx`KŢHlŰ XgŰŤO2 ®Ýŕ6'®%¬˛EŹkIyZ^qmž°¶ś'¬%§¸µÖnŠđ&¬Ť:Ľ‰ló1/Ŕ–OmA¶ąâD?‘-gęm)ölĹC[NŘ…Úö¦ó6h;⣶Öâ m189 mâĄ^°m@tžŘÖ];l[ Fl›t˘Űn<áŢVĽŤ:‹ oń„yA·ŘN‡n·˛˘Ű¤aŃŁ[„EŹnŔ&ş-Í‚n9<şŤĺşM§č6ö [C˙ÜtŠo1I‡o÷|kk5ń­­§Ă·Xň‰om[&ľµ­›řÖ¶wâ[S‰oUKľ…"9x«ş6ń­ŞăÄ·¦˛ßšZO|«šďđín×đ­YĐÄ·feßš%|;¬uâ[‡xâšŐOkžaB\sâš(×|ĐDąć§&ĘUW;\Ý@ąĂN”k.s˘\s«ĺŞçť לóąĂ;|<@®Ĺ€‰q-LLŚkˇÄ0î6ăŽ40îZă›őĚ‘9îâŢ(TÉIÖ¦%,1·|\Ö(‡í*Lî)t›ĚŘ““Ä ůă“Ú%)đ.r‘UŽgů79ůËĘ9=Ç ”YgYy’ŕéF-N÷´9ÂSˇíĘČĺć€iIˇí9’÷`M†Ź¬FŽIëfLĚ «ČpPlrä“EĹ9Kö#džÇŤĚ(AŇ‘łćsD7dďň¸‘ó˘č¦Aężq—$ ©WŚgř™| 8hN(c˘ädDĹíHĹU4ބӦ(CNIääĆ3é 8h6ŕ„+J@†ÔU;Ä–]͉&) ⬚śSËĘvPĎ@Ş cXĐцźťJ”T—C’¦ â]ož9'‘’T]ÎüH4!-$§Lۉ 1©5îEë—hn“NsBQ×*úL˙;]D†“™Ń‘b—\IŻf˘S„¤Šc‘ä}BÇdńň¤Ĺ™93Ź« <`ZyGš@2ď‡Ď˘ä˛U"ËÂćÁca DzěID>6Ý’=onNňG‰Oű«ňGBvń®#$g~:VÓ’?:ÓjHf&3.aÍ›­†Äµ’§2>›3%®Uăląg!M‰ku2V?úĎĘ ń¸ ¸O ‘łALťH‡äżĐÎÍśÁŔ.ÜÉÖ~¨ÄĄ`δÚö"E%K«’Ĺ\+•,­äYřŇ—J–VÁŰŇ—J–V#4Z}F‰Y!{—m!Źo ¤(„,†»ŹHĐ8ú Ňűŕk3H™ÁŃľňŇźň’A"äNĆýëd>Í~Ri€ÜJ‹<•ą¨Ä.Ży\.©NZ.ˇ“€Ű6őŕňŁÓ´Ü]…ŕ҆hT2€ËO€wŔĺłQ[nĘŠ:Â%@€K¸¶ŕ’ëF,·I'Ŕ%8[Nîn¨Ň.µ »¸ťÚ­Ŕĺ¦mܸŢ·)öź72®=1v·áŔě®Ň˙ÂÝ „« ߉p•:ěnѨ9n·&ßÝpŹoó3|[ę ľÍ'ř6 -ř°Ďă[ŔŹo'˙ßľßb-&ľµőňř·ř‹îń-6fâ[›ÓÄ·¶ÁßšL€kz2®éҸ¦o¸¦ŹŕšĘ€kZ=đ­éýÄ·fßű™řÖllŕŰa‡ß[řvŘó¸Ăć ŕN§`wúŤp‡o1„;ÜĎ@¸ĂE „;ÜŘ@¸ĂŐ „;Üးć1 äN§j w:^ąÓ9Čť|€ÜáääÎ8` wĆ Cą3ž(ĘÇPî J†r5jÄŐ°ćÓG™iŹË“Ç!9Iń7ďMx]Ď;˝—rşlŢw©ştŮŇ+3şlá\,x¸`Ë–Č ď‚-[)+ťlŮ’řČď żJ+[¶¤l%oĘ–-©#ľ‚-[)ę\”.[’í–ŃeK愊Ă@—-śNL®đ«ä`$F—-µDDé˛$±’ĄËrůZ…ˇtŮ"QÁÓe ź\0dˇË˛ÄtŮč˛EâÄĹdË–l`lŮÂŁ ¶láAhM™°eéX­b lY’ťUŃÓ?«Çř”-[8ڀ٩lŮÂŮKĺĎ‚-K’Śôł±eI˘\ cË’¤i‹˛e G-­ rK!Ç7©˛üU A•%&bŤ*[xÍ" Á@• Fެ´ TY’$ĺ6*UÖK@•őW*‹Ž=U7÷TY öE©˛"Y¨˛2«âËľh!4hTY, ÚUVVŻŁPee…}ŐWa…Ňú-0ee[`CĘ”%I‚s5¦,IlI•)+T"LYQ m¦,IŔ]MVôČW|-¨CK–zÔ4–¬¨'ÇĘ’%‰¦™Ť%[8—Ž2?eÉ’$)YTY˛b 0geÉNÉk-X˛Ó~”$K‚bDZdI’”aŞ$Y’lş+Ę’%SíČqK¶°wŔ•%[ř™AŃ"0fÉ’ ‘VX˛E| zK–$•Wu˛dKÎFÂV–l_…«Ŕ’-ňô|\°dIb•€Ę’%IT}T–lá§ W%K®­™4Y’děžŃd cbĎ’%ŹŇ±WĆ’%I…÷3–ladŤB±,ń–RđkÉWÎXńO)ůŠE¦jÁ‹‹¦ŞÜÄ$¨:m5%x$­˛TŐűVCâZŐ*ŕе×J„k5$łŐéXýčg«×”|ńSŠhYŞťä‰sLţę‡,33uŠ~ÜҡNi{^ÜD®¨łĎ5_Ó[~y¶•”a™Ŕ7*AÎhŁß—&Ś ŠoŁ‚ĄQÂsďŮHK#ĺlä†ýÚÂ0}aäf˛äf8SŤ©¨aĂŮać\„D;Ó4F˘ťqÎH´3×d$ÚSŤDë% Ńú«@˘u=+‰ÖÝ]I´nxJ˘uSP-¦ 2®°hÝJ(‹Ö­–˛hm9AˇEZ…Öm‰Rh±m(Ę…[+˝*…V¶żů1h®…V´*˘ZŃ4đXÁˇeÜ=‡¶(]brhE©+n%Z ŚZ± ˝8´d? ćlZ˛1“(‡Vě°x­Ř*x­ ĐŠ9_%F&/›¤üYń K‰ąŤn—€?+®kţ,yźźeüŮÂe8`á‚>[8‘bs˘9î,Éj·Fˇ%_hő•Jˇ-‘<Śr_ÁH$źŞ>Â(´äww]=ĺĐ’oNV^†ôąď¦`ĺĐJÚĆÚđčx’h 3$‚/+LdŔX„C[ŘX•† mٲ>3m٢ŐĆ)‡– %hÁ—‰˝"§D‘Qň ɉŤa[sJĎ[M‰Ëđpn+úđ>%®ŐNłjKkHf+ň-ň“n\CâZĹ$ʵ׊ôɵ×ędŢ~%>+?Ĺq–üΚź’˛ŔO+ ČôK?$ýBŘšůCgj¦ Ç-ôR‰Ëňśk…B/“¬­€M|+H–VéŃľÍ$K«XäIĄkĄ’ĄUJň%®•J–VŚś—’7“,­Fşk´úŚ|—łńó‚ě·ŁB”í`D}¸Ş—W{ă^;˙”Ôłťů5^zČcvźđúęđôÝÝďß]ň#ýăáúáňŠ îFçßĂťŚćYťŰŻ‘ űH0ţŞ:7 đäČnJ:!úRăVř€ßbřĽęyxâóž@•řśsKuĹç›ýŔáóÔ­ŤâsvľČŤÔ>âÁŕÄç8Mp®„Î7ű-‡Î«ˇęε Řˇs}X3Ńą=Útč(:JĘwč\cłCçŃ~ę` ó|L+8/ŁčÍŔyŃ]đŕ|ó%nrFíőścu<8×â9΋˙ÁCZ<çŔy<Ĺćąśbs<šqŘÝcóěKÜţ‚Í˙o`óôŮŘĽ•ŹŔćń›g_Ţć¶ßcóđ ›ë:8l~ ͵ ÍAsE ÍAs¬Â„ćjšW«ľĐ\-ĚAóbĹlšĂP4W[vĐ|`qCçć:W·áĐyä_ö0“ů+$„îkŰÄKařJýO†Ň@ĺţJĘ{źÜ_}€†[+÷W;$Âý=ÄsĹő˘,Hąż“›bÜ_rŘĚăţŠ›×Â:p…NÚ»]ÓíÝ6N©żM6Oý•€ĺSę/‚ČŔQîVÔ Ô_‰m D*őwĆ?ŁţÎiÔßGŤú»Hş>%Wa_}Ď ţú»úëꯛ„RÝDAýukˇÔ_·^JýťKZĺˇÂXreţşmQćŻŰ:eţb{/Śř«X%ţŠ’t_Ů&Š´yâď|ľ"Ä_ŃF°•ů+ ެ2E«±, ţ …QűőW,¬YĄţ’ő«7őWâ*jÝŔüťaŐżb¨ĘóWŚYyĘ`ţŠÁk›®[†ĆčlK‰« 2 ?ÝÇpŔü%ßłY%żâźŕ•ů[{h…żäçĚ+ó—|ˇů9eţ’żě@lFý%굤Yř9Z5ýgÔߞōţĘS męŻ<ŮĐĘ9ˇţŽgPOĄţR¨0˛˛R)ś$ő—ň{—;´@q”ü+c°¦Jţ•6;Ś˙kuNKÜ^‘űʧ¦i Ő? BÝÓłVC2óB™QŰš׊ş“ôť“¸Vg@×jH\+ůßČ®MÇOyşFCâZťĚÚŻĂgeľ˛<OkćK~G‰ 'í5 Öů ë®i0ýK:ž©ő˘Íßń«8&ńůž3­´BÍ$ľ•ŕżâ[™diĹç–ś|+•,­"y<ÔZY+•,­sŰ—V*YZq çR«g’ĄŐČ|ŤVź‘ů˛*<Î|щoÉ|íüĆÉ|F–[X2_†¬Ż¨ÂăgĘäy–Ě×7÷?=]óôÇ™Şz\3^V—÷kdĽ>żŞ.Źú”×5L|>µsâóh•ţźgeL|^őĐ;ń9źŃ|mąae¶O|NÎW«ě źóOć/đś7.đĽŽ2@ç]°žGkcđś«Áó ĎÓř9 …çŮŕă„çVÔ2ŕył€8áąýdĹ„çIËř<·’kŔsBzŃ˙řEô ‹5áy0č\=Сsű鎉γVeOtn?#1ŃyÖŞ,ĐC[zĐ) €Žü @Çůkô¬łô˝şâÜáDčć2Bnu ôázBîy tóŕ 'Ż}ĆĐG¬}Ä“ĐGĚ}Ä%č.v €ŢôuDĎ ô<˘…ä4ö‰ďĚQHCë˙ÇÍţ üRżČ?P•őď.ŻČ?ľôoĽůĆżąO_É·s†ţ𨗆r¸˙ž?3#Ú;üh×wĽ3P»˙úđÓú‡ŮÓă=´đ뻿ľÔži,J:’ŇOŢ)xă_Čo!ÔŢě…„ąľŐ®R=|ďc=ĘNŠqđ/ň[fţts˙“^^*ÍĺńţöĆżŕăäŐXúľ°áÇőí×wËřź–oŹzY/ËËńjÂ}óť}K ŻAüţ.ŕE«6Dyb·×~ď^^8‡Ď˝±t‰Ťo|Ĺ<óH†wř@±Lúzws˛Ż|¤ŁË–÷?^?]Y»?‡=ü÷ëÇ_Ň…oŃÁž+íéO/˝BňQoCť-Ťü=WŐ˝~rCűŮŰŔµżčTńnȤ†v¸ö›ć??ÜŹ÷bţď›»kQŹů×GíaŁ%˝×ŰnĎ—Wä-˝Błůľ«f32$^¶öîgO\Óö>Íľdµ%:°ŠË⓹^ż°¬¬ ABżýÍ›·˙ő«Ă0ěǰ)BĄĂĂ“­?öőúÖŢż],áQß+ň‡÷RűzúNß Jsż»¦ 8űúŇ;}±()¶­.ż—ôăý‡´Äop?)ź(á*ŕ?ŹrF’÷k…Ý–č퉶sŹľę^A|{{?fńnYčŠČż¨–‘śZţ`;Z¬atµţí7˙â:űořĂXĺ^ćݱ„Ă;‡lüOĺożeÁ$˘0ůÉ˙ţęňŻąá×€U2ÓaCńČ?ČOˇł~đS`çđ )µ_”â§-¸,…4Ž˘ŃőÓ3 ËQ¦ľ¬j7OŹco¦¦ë-.‘ĎÓ%Iĺ$xÜZó˘ÍI)źţz´ňa (Ö_ 4ŽşZ=ýr]ĄíâŠĎ[Ú±b_üăĺU‘_OýÝ‘‘˘ŠöĂß_ťüůkF’ŁÂ˝şűí·×ü˝‘ý~ä#ěű řűýţúáëĂÝ÷÷ďć ÇőńđÍׇčľtŠŰ9ÓĺíýÓ×s"zÁ©ÖŚ@/„ѢĎ%A~†Óś¬€ůłCIß±kľżŻŹ«{ŤL ĺ·¨3ŕ”7i¦őüuýÄ/9íO:;É âţÚłSdv>yĂ›G|fĽwĆUËźŢorh’śC^š,!za„ĘëÔŰáÔaĘ”ža]é·úŢŰyJ%Ľ˛ţÉÖ™ßŢ/ľňŕ'ř3ĐyŤ)žő 'g/&@µ ±]ë<Ç©6<(Ŕ¦yŢÝ?>MTýÂÁSCęňíA,żŻ›bYÎoL)ňáţw§Ř”źÖŠ|Âç}OϒҦľ¨‡ďgôłR¤ŻŐCbˇ5ÂVŇ VĚŇ’Ă3<‡n'{zÉX˘ÚÎűGŮ½TŁ©pđM‘äĚ8ćÄ&ő‡ăŽ=ĎŹY@ŰóĎD;ZĹ3!^†T÷~OźřüĂëłĹÓónÝ_ŰYpcçűx˛…gcxÚĺeŠH+ü’ ĹăAß…KWěüôjçç?Ćą¸žŕ1oy=îůżhĎą»vüÎ"ÚL˝y9—Ńŕw\‘s§0ç:Ł8@MŻ8ÍßJ±MSxť‹L…,scĺÄzÍĘÁ/ôKů$«ŁÉ5ű‹OÎ1Nź‡ęčNŐJřů?¤–ŹŰendstream endobj 579 0 obj << /Type /XRef /Length 389 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 580 /ID [<7ace3a0677624b0f636d52a9b3ef158f>] >> stream xśí–M+DaÇďŚ1/ĆĚ3ML,ŘËkMS$ ĘHVŠ…b!ĘBQC)K±±´Só ,ĽĄ,ذ° Č "5ć˙űĚöą‹_§óś{ÎyÎóďŢÇaéqŘ–ĺ‡ď–CŰĐđźĚ[áÍlÁvNJQ‹FQ†ÓO«kż śë´QŽa±Zę<É´tĽc´dX¬–ΤĄÜ¶Ń’a±ZJŹčŽ JK‘€čoݢk]Śß‹ÎśXź)Đ®ú’Ú}íbYźčć_čwÄđĹ ¸Dď71—˘çŠwÇE{Ői<bER ްú'čP=ŘÁgŮŐHç5n2\P7.ĆVÄŇGŞĎaݱ#/™ÇČ9$–R·Ož ±d”Č#ęÎRĄQŐCËŘtÎĐCŠąť˛Ż%±‹ŐZîśvŚĚÔ˛›čäĎ!ÜŁOöhŻâ™ÁnŁĂŞ[Ů+{ľ‡2óÔłš"ţ3"oAńÉsŮuaňĽŔ6Ţ}ŁC*ún!çâaÎnb<»bˆő ěÝJx endstream endobj startxref 390899 %%EOF ordinal/inst/doc/clm_article.R0000644000175100001440000003703414660601543016057 0ustar hornikusers### R code from vignette source 'clm_article.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### options(prompt = "R> ", continue = "+ ", width = 70, useFancyQuotes = FALSE) library("ordinal") library("xtable") ################################################### ### code chunk number 2: clm_article.Rnw:742-744 ################################################### clm_args <- gsub("function ", "clm", deparse(args(clm))) cat(paste(clm_args[-length(clm_args)], "\n")) ################################################### ### code chunk number 3: clm_article.Rnw:759-761 ################################################### cc_args <- gsub("function ", "clm.control", deparse(args(clm.control))) cat(paste(cc_args[-length(cc_args)], "\n")) ################################################### ### code chunk number 4: clm_article.Rnw:792-802 ################################################### ## data(wine) tab <- with(wine, table(temp:contact, rating)) mat <- cbind(rep(c("cold", "warm"), each = 2), rep(c("no", "yes"), 2), tab) colnames(mat) <- c("Temperature", "Contact", paste("~~", 1:5, sep = "")) xtab <- xtable(mat) print(xtab, only.contents = TRUE, include.rownames = FALSE, sanitize.text.function = function(x) x) ################################################### ### code chunk number 5: clm_article.Rnw:830-833 ################################################### library("ordinal") fm1 <- clm(rating ~ temp + contact, data = wine) summary(fm1) ################################################### ### code chunk number 6: clm_article.Rnw:884-885 ################################################### anova(fm1, type = "III") ################################################### ### code chunk number 7: clm_article.Rnw:889-891 ################################################### fm2 <- clm(rating ~ temp, data = wine) anova(fm2, fm1) ################################################### ### code chunk number 8: clm_article.Rnw:897-898 ################################################### drop1(fm1, test = "Chi") ################################################### ### code chunk number 9: clm_article.Rnw:903-905 ################################################### fm0 <- clm(rating ~ 1, data = wine) add1(fm0, scope = ~ temp + contact, test = "Chi") ################################################### ### code chunk number 10: clm_article.Rnw:909-910 ################################################### confint(fm1) ################################################### ### code chunk number 11: clm_article.Rnw:945-947 ################################################### fm.nom <- clm(rating ~ temp, nominal = ~ contact, data = wine) summary(fm.nom) ################################################### ### code chunk number 12: clm_article.Rnw:977-978 ################################################### fm.nom$Theta ################################################### ### code chunk number 13: clm_article.Rnw:987-988 ################################################### anova(fm1, fm.nom) ################################################### ### code chunk number 14: clm_article.Rnw:999-1000 ################################################### fm.nom2 <- clm(rating ~ temp + contact, nominal = ~ contact, data = wine) ################################################### ### code chunk number 15: clm_article.Rnw:1003-1004 ################################################### fm.nom2 ################################################### ### code chunk number 16: clm_article.Rnw:1008-1009 ################################################### nominal_test(fm1) ################################################### ### code chunk number 17: clm_article.Rnw:1028-1030 ################################################### fm.sca <- clm(rating ~ temp + contact, scale = ~ temp, data = wine) summary(fm.sca) ################################################### ### code chunk number 18: clm_article.Rnw:1035-1036 ################################################### scale_test(fm1) ################################################### ### code chunk number 19: clm_article.Rnw:1059-1062 ################################################### fm.equi <- clm(rating ~ temp + contact, data = wine, threshold = "equidistant") summary(fm.equi) ################################################### ### code chunk number 20: clm_article.Rnw:1069-1070 ################################################### drop(fm.equi$tJac %*% coef(fm.equi)[c("threshold.1", "spacing")]) ################################################### ### code chunk number 21: clm_article.Rnw:1077-1078 ################################################### mean(diff(coef(fm1)[1:4])) ################################################### ### code chunk number 22: clm_article.Rnw:1084-1085 ################################################### anova(fm1, fm.equi) ################################################### ### code chunk number 23: clm_article.Rnw:1107-1108 ################################################### with(soup, table(PROD, PRODID)) ################################################### ### code chunk number 24: clm_article.Rnw:1112-1115 ################################################### fm_binorm <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="probit") summary(fm_binorm) ################################################### ### code chunk number 25: clm_article.Rnw:1118-1120 ################################################### fm_nom <- clm(SURENESS ~ PRODID, nominal = ~ PROD, data = soup, link="probit") ################################################### ### code chunk number 26: clm_article.Rnw:1124-1126 ################################################### fm_location <- update(fm_binorm, scale = ~ 1) anova(fm_location, fm_binorm, fm_nom) ################################################### ### code chunk number 27: clm_article.Rnw:1131-1136 ################################################### fm_cll_scale <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="cloglog") fm_cll <- clm(SURENESS ~ PRODID, data = soup, link="cloglog") anova(fm_cll, fm_cll_scale, fm_binorm) ################################################### ### code chunk number 28: clm_article.Rnw:1140-1142 ################################################### fm_loggamma <- clm(SURENESS ~ PRODID, data = soup, link="log-gamma") summary(fm_loggamma) ################################################### ### code chunk number 29: profileLikelihood ################################################### pr1 <- profile(fm1, alpha = 1e-4) plot(pr1) ################################################### ### code chunk number 30: prof1 ################################################### plot(pr1, which.par = 1) ################################################### ### code chunk number 31: prof2 ################################################### plot(pr1, which.par = 2) ################################################### ### code chunk number 32: clm_article.Rnw:1201-1204 ################################################### slice.fm1 <- slice(fm1, lambda = 5) par(mfrow = c(2, 3)) plot(slice.fm1) ################################################### ### code chunk number 33: slice11 ################################################### plot(slice.fm1, parm = 1) ################################################### ### code chunk number 34: slice12 ################################################### plot(slice.fm1, parm = 2) ################################################### ### code chunk number 35: slice13 ################################################### plot(slice.fm1, parm = 3) ################################################### ### code chunk number 36: slice14 ################################################### plot(slice.fm1, parm = 4) ################################################### ### code chunk number 37: slice15 ################################################### plot(slice.fm1, parm = 5) ################################################### ### code chunk number 38: slice16 ################################################### plot(slice.fm1, parm = 6) ################################################### ### code chunk number 39: slice2 ################################################### slice2.fm1 <- slice(fm1, parm = 4:5, lambda = 1e-5) par(mfrow = c(1, 2)) plot(slice2.fm1) ################################################### ### code chunk number 40: slice24 ################################################### plot(slice2.fm1, parm = 1) ################################################### ### code chunk number 41: slice25 ################################################### plot(slice2.fm1, parm = 2) ################################################### ### code chunk number 42: clm_article.Rnw:1265-1266 ################################################### convergence(fm1) ################################################### ### code chunk number 43: clm_article.Rnw:1292-1293 ################################################### head(pred <- predict(fm1, newdata = subset(wine, select = -rating))$fit) ################################################### ### code chunk number 44: clm_article.Rnw:1297-1300 ################################################### stopifnot(isTRUE(all.equal(fitted(fm1), t(pred)[ t(col(pred) == wine$rating)])), isTRUE(all.equal(fitted(fm1), predict(fm1, newdata = wine)$fit))) ################################################### ### code chunk number 45: clm_article.Rnw:1303-1307 ################################################### newData <- expand.grid(temp = levels(wine$temp), contact = levels(wine$contact)) cbind(newData, round(predict(fm1, newdata = newData)$fit, 3), "class" = predict(fm1, newdata = newData, type = "class")$fit) ################################################### ### code chunk number 46: clm_article.Rnw:1310-1311 ################################################### head(apply(pred, 1, function(x) round(weighted.mean(1:5, x)))) ################################################### ### code chunk number 47: clm_article.Rnw:1314-1318 ################################################### p1 <- apply(predict(fm1, newdata = subset(wine, select=-rating))$fit, 1, function(x) round(weighted.mean(1:5, x))) p2 <- as.numeric(as.character(predict(fm1, type = "class")$fit)) stopifnot(isTRUE(all.equal(p1, p2, check.attributes = FALSE))) ################################################### ### code chunk number 48: clm_article.Rnw:1323-1325 ################################################### predictions <- predict(fm1, se.fit = TRUE, interval = TRUE) head(do.call("cbind", predictions)) ################################################### ### code chunk number 49: clm_article.Rnw:1361-1367 ################################################### wine <- within(wine, { rating_comb3 <- factor(rating, labels = c("1", "2-4", "2-4", "2-4", "5")) }) ftable(rating_comb3 ~ temp, data = wine) fm.comb3 <- clm(rating_comb3 ~ temp, data = wine) summary(fm.comb3) ################################################### ### code chunk number 50: clm_article.Rnw:1372-1374 ################################################### fm.comb3_b <- clm(rating_comb3 ~ 1, data = wine) anova(fm.comb3, fm.comb3_b) ################################################### ### code chunk number 51: clm_article.Rnw:1379-1381 ################################################### fm.nom2 <- clm(rating ~ contact, nominal = ~ temp, data = wine) summary(fm.nom2) ################################################### ### code chunk number 52: clm_article.Rnw:1392-1394 ################################################### fm.soup <- clm(SURENESS ~ PRODID * DAY, data = soup) summary(fm.soup) ################################################### ### code chunk number 53: clm_article.Rnw:1397-1398 ################################################### with(soup, table(DAY, PRODID)) ################################################### ### code chunk number 54: clm_article.Rnw:1409-1415 ################################################### wine <- within(wine, { rating_comb2 <- factor(rating, labels = c("1-2", "1-2", "3-5", "3-5", "3-5")) }) ftable(rating_comb2 ~ contact, data = wine) fm.comb2 <- clm(rating_comb2 ~ contact, scale = ~ contact, data = wine) summary(fm.comb2) ################################################### ### code chunk number 55: clm_article.Rnw:1418-1432 ################################################### ## Example with unidentified parameters with 3 response categories ## not shown in paper: wine <- within(wine, { rating_comb3b <- rating levels(rating_comb3b) <- c("1-2", "1-2", "3", "4-5", "4-5") }) wine$rating_comb3b[1] <- "4-5" # Remove the zero here to avoid inf MLE ftable(rating_comb3b ~ temp + contact, data = wine) fm.comb3_c <- clm(rating_comb3b ~ contact * temp, scale = ~contact * temp, nominal = ~contact, data = wine) summary(fm.comb3_c) convergence(fm.comb3_c) ################################################### ### code chunk number 56: clm_article.Rnw:1441-1443 ################################################### rho <- update(fm1, doFit=FALSE) names(rho) ################################################### ### code chunk number 57: clm_article.Rnw:1446-1448 ################################################### rho$clm.nll(rho) c(rho$clm.grad(rho)) ################################################### ### code chunk number 58: clm_article.Rnw:1451-1453 ################################################### rho$clm.nll(rho, par = coef(fm1)) print(c(rho$clm.grad(rho)), digits = 3) ################################################### ### code chunk number 59: clm_article.Rnw:1458-1468 ################################################### nll <- function(par, envir) { envir$par <- par envir$clm.nll(envir) } grad <- function(par, envir) { envir$par <- par envir$clm.nll(envir) envir$clm.grad(envir) } nlminb(rho$par, nll, grad, upper = c(rep(Inf, 4), 2, 2), envir = rho)$par ################################################### ### code chunk number 60: clm_article.Rnw:1477-1482 ################################################### artery <- data.frame(disease = factor(rep(0:4, 2), ordered = TRUE), smoker = factor(rep(c("no", "yes"), each = 5)), freq = c(334, 99, 117, 159, 30, 350, 307, 345, 481, 67)) addmargins(xtabs(freq ~ smoker + disease, data = artery), margin = 2) ################################################### ### code chunk number 61: clm_article.Rnw:1486-1488 ################################################### fm <- clm(disease ~ smoker, weights = freq, data = artery) exp(fm$beta) ################################################### ### code chunk number 62: clm_article.Rnw:1493-1496 ################################################### fm.nom <- clm(disease ~ 1, nominal = ~ smoker, weights = freq, data = artery, sign.nominal = "negative") coef(fm.nom)[5:8] ################################################### ### code chunk number 63: clm_article.Rnw:1499-1500 ################################################### coef(fm.lm <- lm(I(coef(fm.nom)[5:8]) ~ I(0:3))) ################################################### ### code chunk number 64: clm_article.Rnw:1503-1510 ################################################### nll2 <- function(par, envir) { envir$par <- c(par[1:4], par[5] + par[6] * (0:3)) envir$clm.nll(envir) } start <- unname(c(coef(fm.nom)[1:4], coef(fm.lm))) fit <- nlminb(start, nll2, envir = update(fm.nom, doFit = FALSE)) round(fit$par[5:6], 2) ordinal/inst/doc/clm_article.Rnw0000644000175100001440000032243614334176473016436 0ustar hornikusers% \documentclass[article]{article} % \documentclass[article]{jss} \documentclass[nojss]{jss} %% -- Latex packages and custom commands --------------------------------------- %% recommended packages \usepackage{thumbpdf,lmodern,amsmath,amssymb,bm,url} \usepackage{textcomp} \usepackage[utf8]{inputenc} %% another package (only for this demo article) \usepackage{framed} %% new custom commands \newcommand{\class}[1]{`\code{#1}'} \newcommand{\fct}[1]{\code{#1()}} %% For Sweave-based articles about R packages: %% need no \usepackage{Sweave} \SweaveOpts{engine=R, eps=FALSE, keep.source = TRUE, prefix.string=clmjss} <>= options(prompt = "R> ", continue = "+ ", width = 70, useFancyQuotes = FALSE) library("ordinal") library("xtable") @ %%\VignetteIndexEntry{Cumulative Link Models for Ordinal Regression} %%\VignetteDepends{ordinal, xtable} %% -- Article metainformation (author, title, ...) ----------------------------- %% - \author{} with primary affiliation %% - \Plainauthor{} without affiliations %% - Separate authors by \And or \AND (in \author) or by comma (in \Plainauthor). %% - \AND starts a new line, \And does not. \author{Rune Haubo B Christensen\\Technical University of Denmark\\ \& \\ Christensen Statistics} \Plainauthor{Rune Haubo B Christensen} %% - \title{} in title case %% - \Plaintitle{} without LaTeX markup (if any) %% - \Shorttitle{} with LaTeX markup (if any), used as running title \title{Cumulative Link Models for Ordinal Regression with the \proglang{R} Package \pkg{ordinal}} \Plaintitle{Cumulative Link Models for Ordinal Regression with the R Package ordinal} \Shorttitle{Cumulative Link Models with the \proglang{R} package \pkg{ordinal}} %% - \Abstract{} almost as usual \Abstract{ This paper introduces the R-package \pkg{ordinal} for the analysis of ordinal data using cumulative link models. The model framework implemented in \pkg{ordinal} includes partial proportional odds, structured thresholds, scale effects and flexible link functions. The package also support cumulative link models with random effects which are covered in a future paper. A speedy and reliable regularized Newton estimation scheme using analytical derivatives provides maximum likelihood estimation of the model class. The paper describes the implementation in the package as well as how to use the functionality in the package for analysis of ordinal data including topics on model identifiability and customized modelling. The package implements methods for profile likelihood confidence intervals, analysis of deviance tables with type I, II and III tests, predictions of various kinds as well as methods for checking the convergence of the fitted models. } %% - \Keywords{} with LaTeX markup, at least one required %% - \Plainkeywords{} without LaTeX markup (if necessary) %% - Should be comma-separated and in sentence case. \Keywords{ordinal, cumulative link models, proportional odds, scale effects, \proglang{R}} \Plainkeywords{ordinal, cumulative link models, proportional odds, scale effects, R} %% - \Address{} of at least one author %% - May contain multiple affiliations for each author %% (in extra lines, separated by \emph{and}\\). %% - May contain multiple authors for the same affiliation %% (in the same first line, separated by comma). \Address{ Rune Haubo Bojesen Christensen\\ Section for Statistics and Data Analysis\\ Department of Applied Mathematics and Computer Science\\ DTU Compute\\ Technical University of Denmark\\ Richard Petersens Plads \\ Building 324 \\ DK-2800 Kgs. Lyngby, Denmark\\ \emph{and}\\ Christensen Statistics\\ Bringetoften 7\\ DK-3500 V\ae rl\o se, Denmark \\ E-mail: \email{Rune.Haubo@gmail.com}; \email{Rune@ChristensenStatistics.dk}%\\ % URL: \url{http://christensenstatistics.dk/} } \begin{document} This is a copy of an article that is no longer submitted for publication in Journal of Statistical Software (\url{https://www.jstatsoft.org/}). %% -- Introduction ------------------------------------------------------------- %% - In principle "as usual". %% - But should typically have some discussion of both _software_ and _methods_. %% - Use \proglang{}, \pkg{}, and \code{} markup throughout the manuscript. %% - If such markup is in (sub)section titles, a plain text version has to be %% added as well. %% - All software mentioned should be properly \cite-d. %% - All abbreviations should be introduced. %% - Unless the expansions of abbreviations are proper names (like "Journal %% of Statistical Software" above) they should be in sentence case (like %% "generalized linear models" below). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Introduction} \label{sec:intro} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ordered categorical data, or simply \emph{ordinal} data, are common in a multitude of empirical sciences and in particular in scientific disciplines where humans are used as measurement instruments. Examples include school grades, ratings of preference in consumer studies, degree of tumor involvement in MR images and animal fitness in ecology. Cumulative link models (CLM) are a powerful model class for such data since observations are treated correctly as categorical, the ordered nature is exploited and the flexible regression framework allows for in-depth analyses. This paper introduces the \pkg{ordinal} package \citep{ordinal-pkg} for \proglang{R} \citep{R} for the analysis of ordinal data with cumulative link models. The paper describes how \pkg{ordinal} supports the fitting of CLMs with various models structures, model assessment and inferential options including tests of partial proportional odds, scale effects, threshold structures and flexible link functions. The implementation, its flexibility in allowing for costumizable models and an effective fitting algorithm is also described. The \pkg{ordinal} package also supports cumulative link \emph{mixed} models (CLMM); CLMs with normally distributed random effects. The support of this model class will not be given further treatment here but remain a topic for a future paper. The name, \emph{cumulative link models} is adopted from \citet{agresti02}, but the model class has been referred to by several other names in the literature, such as \emph{ordered logit models} and \emph{ordered probit models} \citep{greene10} for the logit and probit link functions. The cumulative link model with a logit link is widely known as the \emph{proportional odds model} due to \citet{mccullagh80} and with a complementary log-log link, the model is sometimes referred to as the \emph{proportional hazards model} for grouped survival times. CLMs is one of several types of models specifically developed for ordinal data. Alternatives to CLMs include continuation ratio models, adjacent category models, and stereotype models \citep{ananth97} but only models in the CLM framework will be considered in this paper. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Software review} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cumulative link models can be fitted by all the major software packages and while some software packages support scale effects, partial proportional odds (also referred to as unequal slopes, partial effects, and nominal effects), different link functions and structured thresholds all model structures are not available in any one package or implementation. The following brief software review is based on the publicly available documentation at software package websites retrieved in May 2020. \proglang{IBM SPSS} \citep{SPSS} implements McCullagh's \pkg{PLUM} \citep{mccullagh80} procedure, allows for the five standard link functions (cf. Table~\ref{tab:linkFunctions}) and scale effects. Estimation is via Fisher-Scoring and a test for equal slopes is available for the location-only model while it is not possible to estimate a partial proportional odds model. \proglang{Stata} \citep{Stata} includes the \code{ologit} and \code{oprobit} procedures for CLMs with logistic and probit links but without support for scale effects, partial effect or structured thresholds. The add-on package \pkg{oglm} \citep{oglm} allows for all five standard link functions and scale effects. The \pkg{GLLAMM} package \citep{gllamm} also has some support for CLMs in addition to some support for random effects. \proglang{SAS} \citep{SAS} implements CLMs with logit links in \code{proc logistic} and CLMs with the 5 standard links in \code{prog genmod}. \proglang{Matlab} \citep{Matlab} fits CLMs with the \code{mnrfit} function allowing for logit, probit, complementary log-log and log-log links. \proglang{Python} has a package \pkg{mord} \citep{mord} for ordinal classification and prediction focused at machine learning applications. In \proglang{R}, several packages on the Comprehensive \proglang{R} Archive Network (CRAN) implements CLMs. \code{polr} from \pkg{MASS} \citep{MASS} implements standard CLMs allowing for the 5 standard link functions but no further extensions; the \pkg{VGAM} package \citep{VGAM} includes CLMs via the \code{vglm} function using the \code{cumulative} link. \code{vglm} allows for several link functions as well as partial effects. The \code{lrm} and \code{orm} functions from the \pkg{rms} package \citep{rms} also implements CLMs with the 5 standard link functions but without scale effects, partial or structured thresholds. A Bayesian alternative is implemented in the \pkg{brms} package \citep{brms, brms2} which includes structured thresholds in addition to random-effects. In addition, several other \proglang{R} packages include methods for analyses of ordinal data including \pkg{oglmx} \citep{oglmx}, \pkg{MCMCpack} \citep{MCMCpack}, \pkg{mvord} \citep{mvord}, \pkg{CUB} \citep{CUB}, and \pkg{ordinalgmifs} \citep{ordinalgmifs}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection[ordinal package overview]{\pkg{ordinal} package overview} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \pkg{ordinal} package implements CLMs and CLMMs along with functions and methods to support these model classes as summarized in Table~\ref{tab:functions_in_ordinal}. The two key functions in \pkg{ordinal} are \code{clm} and \code{clmm} which fits CLMs and CLMMs respectively; \code{clm2} and \code{clmm2}\footnote{A brief tutorial on \code{clmm2} is currently available at the package website on CRAN: \url{https://CRAN.R-project.org/package=ordinal}} provide legacy implementations primarily retained for backwards compatibility. This paper introduces \code{clm} and its associated functionality covering CLMs with location, scale and nominal effects, structured thresholds and flexible link functions. \code{clm.fit} is the main work horse behind \code{clm} and an analogue to \code{lm.fit} for linear models. The package includes methods for assessment of convergence with \code{convergence} and \code{slice}, an auxiliary method for removing linearly dependent columns from a design matrix in \code{drop.coef}. Distributional support functions in \pkg{ordinal} provide support for Gumbel and log-gamma distributions as well as gradients\footnote{gradients with respect to $x$, the quantile; not the parameters of the distributions} of normal, logistic and Cauchy probability density functions which are used in the iterative methods implemented in \code{clm} and \code{clmm}. \begin{table}[t!] \centering \renewcommand*{\arraystretch}{1.2} \begin{tabular}{llll} \hline \rotatebox{0}{Fitting} & \rotatebox{0}{Miscellaneous} & \rotatebox{0}{Former impl.} & \rotatebox{0}{Distributions} \\ \hline \code{clm} & \code{convergence} & \code{clm2} & \code{[pdqrg]gumbel}$^{\textsf{c}}$ \\ \code{clmm}$^{\textsf{c}}$ & \code{slice} & \code{clmm2}$^{\textsf{c}}$ & \code{[pdg]lgamma}$^{\textsf{c}}$ \\ \code{clm.fit} & \code{drop.coef} & \code{clm2.control} & \code{gnorm}$^{\textsf{c}}$ \\ \code{clm.control} & & \code{clmm2.control} & \code{glogis}$^{\textsf{c}}$ \\ \code{clmm.control} & & & \code{gcauchy}$^{\textsf{c}}$ \\ \hline \end{tabular} \\ \caption{Key functions in \pkg{ordinal}. Superscript "c" indicates (partial or full) implementation in \proglang{C}.\label{tab:functions_in_ordinal}} \end{table} As summarized in Table~\ref{tab:clm_methods}, \pkg{ordinal} provides the familiar suite of extractor and print methods for \code{clm} objects known from \code{lm} and \code{glm}. These methods all behave in ways similar to those for \code{glm}-objects with the exception of \code{model.matrix} which returns a list of model matrices and \code{terms} which can return the \code{terms} object for each of three formulae. The inference methods facilitate profile likelihood confidence intervals via \code{profile} and \code{confint}, likelihood ratio tests for model comparison via \code{anova}, model assessment by tests of removal of model terms via \code{drop1} and addition of new terms via \code{add1} or AIC-based model selection via \code{step}. Calling \code{anova} on a single \code{clm}-object provides an analysis of deviance table with type I, II or III Wald-based $\chi^2$ tests following the \proglang{SAS}-definitions of such tests \citep{SAStype}. In addition to standard use of \code{clm}, the implementation facilitates extraction a model environment containing a complete representation of the model allowing the user to fit costumized models containing, for instance, special structures on the threshold parameters, restrictions on regression parameters or other case-specific model requirements. As CLMMs are not covered by this paper methods for \code{clmm} objects will not be discussed. Other packages including \pkg{emmeans} \citep{emmeans}, \pkg{margins} \citep{margins}, \pkg{ggeffects} \citep{ggeffects}, \pkg{generalhoslem} \citep{generalhoslem} and \pkg{effects} \citep{effects1, effects2} extend the \pkg{ordinal} package by providing methods marginal means, tests of functions of the coefficients, goodness-of-fit tests and methods for illustration of fitted models. \begin{table}[t!] \centering \renewcommand*{\arraystretch}{1.2} \begin{tabular}{llll} \hline \multicolumn{2}{l}{Extractor and Print} & Inference & Checking \\[3pt] \hline \code{coef} & \code{print} & \code{anova} & \code{slice} \\ \code{fitted} & \code{summary} & \code{drop1} & \code{convergence}\\ \code{logLik} & \code{model.frame} & \code{add1} & \\ \code{nobs} & \code{model.matrix} & \code{confint} & \\ \code{vcov} & \code{update} & \code{profile} & \\ \code{AIC}, \code{BIC} & & \code{predict} & \\ \code{extractAIC} & & \code{step}, \code{stepAIC} & \\ \hline \end{tabular} \caption{Key methods for \code{clm} objects.\label{tab:clm_methods}} \end{table} The \pkg{ordinal} package is therefore unique in providing a comprehensive framework for cumulative link models exceeding that of other software packages with its functionality extended by a series of additional \proglang{R} packages. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Organization of the paper} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The remainder of the paper is organized as follows. The next section establishes notation by defining CLMs and associated log-likelihood functions, then describes the extended class of CLMs that is implemented in \pkg{ordinal} including details about scale effects, structured thresholds, partial proportional odds and flexible link functions. The third section describes how maximum likelihood (ML) estimation of CLMs is implemented in \pkg{ordinal}. The fourth section describes how CLMs are fitted and ordinal data are analysed with \pkg{ordinal} including sections on nominal effects, scale effects, structured thresholds, flexible link functions, profile likelihoods, assessment of model convergence, fitted values and predictions. The final parts of section four is on a more advanced level and include issues around model identifiability and customizable fitting of models not otherwise covered by the \pkg{ordinal} API. We end in section~\ref{sec:conclusions} with Conclusions. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Cumulative link models} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A cumulative link model is a model for ordinal-scale observations, i.e., observations that fall in an ordered finite set of categories. Ordinal observations can be represented by a random variable $Y_i$ that takes a value $j$ if the $i$th ordinal observations falls in the $j$'th category where $j = 1, \ldots, J$ and $J \geq 2$.\footnote{binomial models ($J = 2$) are also included.}% % A basic cumulative link model is \begin{equation} \label{eq:BasicCLM} \gamma_{ij} = F(\eta_{ij})~, \quad \eta_{ij} = \theta_j - \bm x_i^\top \bm\beta~, \quad i = 1,\ldots,n~, \quad j = 1, \ldots, J-1 ~, \end{equation} where \begin{equation*} %% \label{eq:cum} \gamma_{ij} = \Prob (Y_i \leq j) = \pi_{i1} + \ldots + \pi_{ij} \quad \mathrm{with} \quad \sum_{j=1}^J \pi_{ij} = 1 \end{equation*} are cumulative probabilities\footnote{we have suppressed the conditioning on the covariate vector, $\bm x_i$, i.e., $\gamma_{ij} = \gamma_j(\bm x_i)$ and $P(Y_i \leq j) = P(Y \leq j | \bm x_i)$.}, $\pi_{ij}$ is the probability that the $i$th observation falls in the $j$th category, $\eta_{ij}$ is the linear predictor and $\bm x_i^\top$ is a $p$-vector of regression variables for the parameters, $\bm\beta$ without a leading column for an intercept and $F$ is the inverse link function. % The thresholds (also known as cut-points or intercepts) are strictly ordered: \begin{equation*} -\infty \equiv \theta_0 \leq \theta_1 \leq \ldots \leq \theta_{J-1} \leq \theta_J \equiv \infty. \end{equation*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{The multinomial distribution and the log-likelihood function} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The ordinal observation $Y_i$ which assumes the value $j$ can be represented by a multinomially distributed variable $\bm Y_i^* \sim \mathrm{multinom}(\bm\pi_i, 1)$, where $\bm Y_i^*$ is a $J$-vector with a $1$ at the $j$'th entry and 0 otherwise, and with probability mass function % \begin{equation} \label{eq:multinom_pmf} \Prob(\bm Y_i^* = \bm y_i^*) = \prod_j \pi_{ij}^{y_{ij}^*} ~. \end{equation} % The log-likelihood function can therefore be written as % \begin{equation*} \ell(\bm\theta, \bm\beta; \bm y^*) = \sum_i \sum_j y_{ij}^* \log \pi_{ij} \end{equation*} % or equivalently % \begin{align*} \ell(\bm\theta, \bm\beta; \bm y) =~& \sum_i \sum_j \mathrm I (y_i = j) \log \pi_{ij} \\ =~& \sum_i \log \tilde\pi_i \end{align*} % where $\tilde\pi_i$ is the $j$'th entry in $J$-vector $\bm \pi_i$ with elements $\pi_{ij}$ and $\mathrm I(\cdot)$ is the indicator function. Allowing for observation-level weights (case weights), $w_i$ leads finally to % \begin{equation} \label{eq:clm-log-likelihood} \ell(\bm\theta, \bm\beta; \bm y) = \sum_i w_i \log \tilde\pi_i ~. \end{equation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Likelihood based inference} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Confidence intervals for model parameters are obtained by appealing to the asymptotic normal distribution of a statistic $s(\cdot)$ for a scalar parameter of interest $\beta_a$ and defined as \begin{equation*} CI:~\left\{ \beta_a; |s(\beta_a)| < z_{1 - \alpha/2} \right\} . \end{equation*} where $z_{1 - \alpha/2}$ is the $(1 - \alpha/2)$ quantile of the standard normal cumulative distribution function. Taking $s(\cdot)$ to be the Wald statistic $s(\beta_a):~ w(\beta_a) = (\hat\beta_a - \beta_a)/\hat{\mathrm{se}}(\hat\beta_a)$ leads to the classical symmetric intervals. Better confidence intervals can be obtained by choosing instead the likelihood root statistic \citep[see e.g.,][]{pawitan01, brazzale07}: \begin{equation*} s(\beta_a):~ r(\beta_a) = \mathrm{sign}(\hat\beta_a - \beta_a) \sqrt{-2 [ \ell(\hat{\bm\theta}, \hat{\bm\beta}; \bm y) - \ell_p(\beta_a; \bm y)]} \end{equation*} where \begin{equation*} \ell_p(\beta_a; \bm y) = \max_{\bm\theta, \bm\beta_{-a}} \ell(\bm\theta, \bm\beta; \bm y)~, \end{equation*} is the profile likelihood for the scalar parameter $\beta_a$ and $\bm\beta_{-a}$ is the vector of regression parameters without the $a$'th one. While the profile likelihood has to be optimized over all parameters except $\beta_a$ we define a \emph{log-likelihood slice} as \begin{equation} \label{eq:slice} \ell_{\mathrm{slice}}(\beta_a; \bm y) = \ell(\beta_a; \hat{\bm\theta}, \hat{\bm\beta}_{-a}, \bm y)~, \end{equation} which is the log-likelihood function evaluated at $\beta_a$ while keeping the remaining parameters fixed at their ML estimates. A quadratic approximation to the log-likelihood slice is $(\hat\beta_a - \beta_a)^2 / 2\tau_a^2$ where the \emph{curvature unit} $\tau_a$ is the square root of $a$'th diagonal element of the Hessian of $-\ell(\hat{\bm\theta}, \hat{\bm\beta}; \bm y)$. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A commonly used link function is the logit link which leads to % \begin{equation} \label{eq:cum_logit_model} \mathrm{logit}(\gamma_{ij}) = \log \frac{\Prob (Y_i \leq j)}{1 - \Prob(Y_i \leq j)} \end{equation} % The odds ratio (OR) of the event $Y_i \leq j$ at $\bm x_1$ relative to the same event at $\bm x_2$ is then % \begin{equation} \label{eq:odds_ratio} \mathrm{OR} = \frac{\gamma_j(\bm x_1) / [1 - \gamma_j(\bm x_1)]} {\gamma_j(\bm x_2) / [1 - \gamma_j(\bm x_2)]} = \frac{\exp(\theta_j - \bm x_1^\top \bm\beta)} {\exp(\theta_j - \bm x_2^\top \bm\beta)} %% =&~ \exp(\theta_j - \theta_j - \bm x_1 \bm\beta + \bm x_2 \bm\beta) = \exp[(\bm x_2^\top - \bm x_1^\top)\bm\beta] \end{equation} which is independent of $j$. Thus the cumulative odds ratio is proportional to the distance between $\bm x_1$ and $\bm x_2$ which motivated \citet{mccullagh80} to denote the cumulative logit model a \emph{proportional odds model}. If $x$ represent a treatment variable with two levels (e.g., placebo and treatment), then $x_2 - x_1 = 1$ and the odds ratio is $\exp(-\beta_\textup{treatment})$. Similarly the odds ratio of the event $Y \geq j$ is $\exp(\beta_\textup{treatment})$. The probit link has its own interpretation through a normal linear model for a latent variable which is considered in section~\ref{sec:latent-variable-motivation}. The complementary log-log (clog-log) link is also sometimes used because of its interpretation as a proportional hazards model for grouped survival times: \begin{equation*} -\log\{1 - \gamma_{j}(\bm x_i) \} = \exp( \theta_j - \bm x_i^T \bm\beta ) \end{equation*} Here $1 - \gamma_{j}(\bm x_i)$ is the probability or survival beyond category $j$ given $\bm x_i$. The proportional hazards model has the property that \begin{equation*} \log \{ \gamma_{j}(\bm x_1) \} = \exp[ (\bm x_2^T - \bm x_1^T) \bm\beta ] \log \{ \gamma_{j}(\bm x_2) \}~. \end{equation*} thus the ratio of hazards at $\bm x_1$ relative to $\bm x_2$ are proportional. If the log-log link is used on the response categories in the reverse order, this is equivalent to using the clog-log link on the response in the original order. This reverses the sign of $\bm\beta$ as well as the sign and order of $\{\theta_j\}$ while the likelihood and standard errors remain unchanged. % % Thus, similar to the proportional odds % model, the ratio of hazard functions beyond category $j$ at $\bm x_1$ % relative to $\bm x_2$ (the hazard ratio, $HR$) is: % \begin{equation*} % HR = \frac{-\log\{1 - \gamma_{j}(\bm x_2) \}} % {-\log\{1 - \gamma_{j}(\bm x_1) \}} = % \frac{\exp( \theta_j - \bm x_1^T \bm\beta )} % {\exp( \theta_j - \bm x_2^T \bm\beta )} = % \exp[(\bm x_2 - \bm x_1)\bm\beta] % \end{equation*} % Details of the most common link functions are described in Table~\ref{tab:linkFunctions}. \begin{table}[t!] \begin{center} %\footnotesize \begin{tabular}{llll} \hline Name & logit & probit & log-log \\ \hline Distribution & logistic & normal & Gumbel (max)$^b$ \\ Shape & symmetric & symmetric & right skew\\ Link function ($F^{-1}$) & $\log[\gamma / (1 - \gamma)]$ & $\Phi^{-1}(\gamma)$ & $-\log[-\log(\gamma)]$ \\ Inverse link ($F$) & $1 / [1 + \exp(\eta)]$ & $\Phi(\eta)$ & $\exp(-\exp(-\eta))$ \\ Density ($f = F'$) & $\exp(-\eta) / [1 + \exp(-\eta)]^2$ & $\phi(\eta)$ \\ \hline \hline Name & clog-log$^a$ & cauchit \\ \hline Distribution & Gumbel (min)$^b$ & Cauchy$^c$ \\ Shape & left skew & kurtotic \\ Link function ($F^{-1}$) & $\log[ -\log(1 - \gamma)]$ & $\tan[\pi (\gamma - 0.5)]$ \\ Inverse link ($F$) & $1 - \exp[-\exp(\eta)]$ & $\arctan(\eta)/\pi + 0.5$ \\ Density ($f = F'$) & $\exp[-\exp(\eta) + \eta]$ & $1 / [\pi(1 + \eta^2)]$ \\ \hline \end{tabular} \end{center} % \footnotesize % % $^a$: the \emph{complementary log-log} link \\ % $^b$: the Gumbel distribution is also known as the extreme value % (type I) distribution for extreme minima or maxima. It is also % sometimes referred to as the Weibull (or log-Weibull) distribution % (\url{http://en.wikipedia.org/wiki/Gumbel_distribution}). \\ % $^c$: the Cauchy distribution is a $t$-distribution with one df \caption{Summary of the five standard link functions. $^a$: the \emph{complementary log-log} link; $^b$: the Gumbel distribution is also known as the extreme value (type I) distribution for extreme minima or maxima. It is also sometimes referred to as the Weibull (or log-Weibull) distribution; $^c$: the Cauchy distribution is a $t$-distribution with one degree of freedom. \label{tab:linkFunctions}} \end{table} The \pkg{ordinal} package allows for the estimation of an extended class of cumulative link models in which the basic model~(\ref{eq:BasicCLM}) is extended in a number of ways including structured thresholds, partial proportional odds, scale effects and flexible link functions. The following sections will describe these extensions of the basic CLM. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Extensions of cumulative link models} \label{sec:extensions-of-clms} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A general formulation of the class of models (excluding random effects) that is implemented in \pkg{ordinal} can be written % \begin{equation} \gamma_{ij} = F_{\lambda}(\eta_{ij}), \quad \eta_{ij} = \frac{g_{\bm\alpha} (\theta_j) - \bm x_i^\top \bm\beta - \bm w_i^\top \tilde{\bm\beta}_j}{\exp(\bm z_i\bm\zeta)} \end{equation} % where \begin{description} \item[$F_{\lambda}$] is the inverse link function. It may be parameterized by the scalar parameter $\lambda$ in which case we refer to $F_{\lambda}^{-1}$ as a \emph{flexible link function}, % \item[$g_{\bm\alpha}(\theta_j)$] parameterises thresholds $\{\theta_j\}$ by the vector $\bm\alpha$ such that $g$ restricts $\{\theta_j\}$ to be for example symmetric or equidistant. We denote this \emph{structured thresholds}. % \item[$\bm x_i^\top\bm\beta$] are the ordinary regression effects, % \item[$\bm w_i^\top \tilde{\bm\beta}_j$] are regression effects which are allowed to depend on the response category $j$ and they are denoted \emph{partial} or \emph{non-proportional odds} \citep{peterson90} when the logit link is applied. To include other link functions in the terminology we denote these effects \emph{nominal effects} (in text and code) because these effects are not integral to the ordinal nature of the data. % \item[$\exp(\bm z_i\bm\zeta)$] are \emph{scale effects} since in a latent variable view these effects model the scale of the underlying location-scale distribution. \end{description} With the exception of the structured thresholds, these extensions of the basic CLM have been considered individually in a number of sources but to the author's best knowledge not previously in a unified framework. % For example partial proportional odds have been considered by \citet{peterson90} and scale effect have been considered by \citet{mccullagh80} and \citet{cox95}. % \citet{agresti02} is a good introduction to cumulative link models in the context of categorical data analysis and includes discussions of scale effects. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Latent variable motivation of CLMs} \label{sec:latent-variable-motivation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% It is natural to motivate the CLM from a linear model for a categorized version of a latent variable. Assume the following linear model for an unobserved latent variable: % \begin{equation} \label{eq:latent} S_i = \alpha^* + \bm x_i^\top \bm\beta^* + \varepsilon_i, \quad \varepsilon_i \sim N(0, \sigma^{*2}) \end{equation} % If $S_i$ falls between two thresholds, $\theta_{j-1}^* < S_i \leq \theta_j^*$ where % \begin{equation} \label{eq:thresholds} -\infty \equiv \theta_0^* < \theta_1^* < \ldots < \theta^*_{J-1} < \theta_{J}^* \equiv \infty \end{equation} % then $Y_i = j$ is observed and the cumulative probabilities are: % \begin{equation*} \gamma_{ij} = \Prob (Y_i \leq j) = \Prob(S_i \leq \theta_j^*) = \Prob \left( Z \leq \frac{\theta_j^* - \alpha^* - \bm x_i^\top \bm\beta^*}{% \sigma^*} \right) = \Phi ( \theta_j - \bm x_i^\top \bm\beta ) \end{equation*} % where $Z$ follows a standard normal distribution, $\Phi$ denotes the standard normal cumulative distribution function, parameters with an ``$^*$'' exist on the latent scale, $\theta_j = (\theta_j^* - \alpha^*) / \sigma^*$ and $\bm\beta = \bm\beta^* / \sigma^*$. Note that $\alpha^*$, $\bm\beta^*$ and $\sigma^*$ would have been identifiable if the latent variable $S$ was directly observed, but they are not identifiable with ordinal observations. If we allow a log-linear model for the scale such that % \begin{equation*} \varepsilon_i \sim N(0, \sigma^{*2}_i), \quad \sigma_i^* = \exp(\mu + \bm z_i^\top \bm\zeta) = \sigma^* \exp(\bm z_i^\top \bm\zeta) \end{equation*} % where $\bm z_i$ is the $i$'th row of a design matrix $\bm Z$ without a leading column for an intercept and $\sigma^* = \exp(\mu)$, then \begin{equation*} \gamma_{ij} = \Prob \left( Z \leq \frac{\theta_j^* - \alpha^* - \bm x_i^\top \bm\beta^*}{% \sigma^*_i} \right) = \Phi \left( \frac{\theta_j - \bm x_i^T \bm\beta}{\sigma_i} \right) \end{equation*} where $\sigma_i = \sigma_i^* / \sigma^* = \exp(\bm z_i^\top \bm\zeta)$ is the \emph{relative} scale. The common link functions: probit, logit, log-log, c-log-log and cauchit correspond to inverse cumulative distribution functions of the normal, logistic, Gumbel(max), Gumbel(min) and Cauchy distributions respectively. These distributions are all members of the location-scale family with common form $F(\mu, \sigma)$, with location $\mu$ and non-negative scale $\sigma$, for example, the logistic distribution has mean $\mu$ and standard deviation $\sigma \pi / \sqrt{3}$. Choosing a link function therefore corresponds to assuming a particular distribution for the latent variable $S$ in which $\bm x_i^\top \bm\beta$ and $\exp(\bm z_i^\top \bm\zeta)$ models location \emph{differences} and scale \emph{ratios} respectively of that distribution. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Structured thresholds} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Structured thresholds, $\{ g(\bm\alpha)_j \}$ makes it possible to impose restrictions on the thresholds $\bm\theta = g(\bm\alpha)$. For instance restricting the thresholds to be equidistant means that only the location of, say, the first threshold and the spacing between adjacent thresholds has to be estimated, thus only two parameters are used to parameterize the thresholds irrespective of the number of response categories. \pkg{ordinal} takes $g(\bm\alpha)$ to be a linear function and operates with \begin{equation*} g(\bm\alpha) = \mathcal{J}^\top \bm\alpha = \bm \theta \end{equation*} where the Jacobian $\mathcal{J}$ defines the mapping from the parameters $\bm\alpha$ to the thresholds $\bm\theta$. The traditional ordered but otherwise unrestricted thresholds are denoted \emph{flexible thresholds} and obtained by taking $\mathcal{J}$ to be an identity matrix. Assuming $J=6$ ordered categories, the Jacobians for equidistant and symmetric thresholds (denoted \code{equidistant} and \code{symmetric} in the \code{clm}-argument \code{threshold}) are \begin{equation*} \mathcal{J}_{\mathrm{equidistant}} = \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 0 & 1 & 2 & 3 & 4 \\ \end{bmatrix}, \quad \mathcal{J}_{\mathrm{symmetric}} = \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 0 & -1 & 0 & 1 & 0 \\ -1 & 0 & 0 & 0 & 1 \\ \end{bmatrix}. \end{equation*} Another version of symmetric thresholds (denoted \code{symmetric2}) is sometimes relevant with an unequal number of response categories here illustrated with $J=5$ together with the \code{symmetric} thresholds: \begin{equation*} \mathcal{J}_{\mathrm{symmetric2}} = \begin{bmatrix} 0 & -1 & 1 & 0 \\ -1 & 0 & 0 & 1 \\ \end{bmatrix}, \quad \mathcal{J}_{\mathrm{symmetric}} = \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 \\ -1 & 0 & 0 & 1 \\ \end{bmatrix} \end{equation*} The nature of $\mathcal{J}$ for a particular model can always be inspected by printing the \code{tJac} component of the \code{clm} fit. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Partial proportional odds and nominal effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The nominal effects $\bm w_i^\top\tilde{\bm\beta}_j$ can be considered an extension of the regression part of the model $\bm x_i^\top \bm\beta$ in which the regression effects are allowed to vary with $j$. % The nominal effects can also be considered an extension of the thresholds $\theta_j$ which allows them to depend on variables $\bm w_i^\top$: $\tilde{\theta}_{ij}(\bm w_i^\top) = \theta_j - \bm w_i^\top \tilde{\bm\beta}_j$ is the $j$'th threshold for the $i$'th observation. The following treatment assumes for latter view. In general let $\bm W$ denote the design matrix for the nominal effects without a leading column for an intercept; the nominal-effects parameter vector $\tilde{\bm\beta}_j$ is then $\mathrm{ncol}(\bm W)$ long and $\tilde{\bm\beta}$ is $\mathrm{ncol}(\bm W) \cdot (J-1)$ long. If $\bm W$ is the design matrix for the nominal effects containing a single column for a continuous variable then $\tilde{\beta}_j$ is the slope parameter corresponding to the $j$'th threshold and $\theta_j$ is the $j$'th intercept, i.e., the threshold when the covariate is zero. Looking at $\tilde{\theta}_{ij}(\bm w_i^\top) = \theta_j - \bm w_i^\top \tilde{\bm\beta}_j$ as a linear model for the thresholds facilitates the interpretation. If, on the other hand, $\bm W$ is the design matrix for a categorical variable (a \code{factor} in \proglang{R}) then the interpretation of $\tilde{\bm\beta}_j$ depends on the contrast-coding of $\bm W$. If we assume that the categorical variable has 3 levels, then $\tilde{\bm\beta}_j$ is a 2-vector. In the default treatment contrast-coding (\code{"contr.treatment"}) $\theta_j$ is the $j$'th threshold for the first (base) level of the factor, $\tilde{\beta}_{1j}$ is the differences between thresholds for the first and second level and $\tilde{\beta}_{2j}$ is the difference between the thresholds for the first and third level. In general we define $\bm\Theta$ as a matrix with $J-1$ columns and with 1 row for each combination of the levels of factors in $\bm W$. This matrix is available in the \code{Theta} component of the model fit. Note that variables in $\bm X$ cannot also be part of $\bm W$ if the model is to remain identifiable. \pkg{ordinal} detects this and automatically removes the offending variables from $\bm X$. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Flexible link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \pkg{ordinal} package allows for two kinds of flexible link functions due to \citet{aranda-ordaz83} and \citet{genter85}. The link function proposed by \citet{aranda-ordaz83} reads % \begin{equation*} F^{-1}_\lambda (\gamma_{ij}) = \log \left\{ \frac{(1 - \gamma_{ij})^{-\lambda} - 1} {\lambda} \right\}~, \end{equation*} which depends on the auxiliary parameter $\lambda \in ]0, \infty[$. When $\lambda = 1$, the logistic link function arise, and when $\lambda \rightarrow 0$, \begin{equation*} \{ (1 - \gamma_{ij})^{-\lambda} - 1 \} / \lambda \rightarrow \log (1 - \gamma_{ij})^{-1}~, \end{equation*} so the log-log link arise. The inverse link function and its derivative are given by \begin{align*} F(\eta) =&~ 1 - (\lambda \exp(\eta) + 1)^{-\lambda^{-1}} \\ f(\eta) =&~ \exp(\eta) (\lambda \exp(\eta) + 1)^{-\lambda^{-1} - 1} \end{align*} The density implied by the inverse link function is left-skewed if $0 < \lambda < 1$, symmetric if $\lambda = 1$ and right-skewed if $\lambda > 1$, so the link function can be used to assess the evidence about possible skewness of the latent distribution. The log-gamma link function proposed by \citet{genter85} is based on the log-gamma density by \citet{farewell77}. The cumulative distribution function and hence inverse link function reads \begin{equation*} F_\lambda(\eta) = \begin{cases} 1 - G(q; \lambda^{-2}) & \lambda < 0 \\ \Phi(\eta) & \lambda = 0 \\ G(q; \lambda^{-2}) & \lambda > 0 \end{cases} \end{equation*} where $q = \lambda^{-2}\exp(\lambda \eta)$ and $G(\cdot; \alpha)$ denotes the Gamma distribution with shape parameter $\alpha$ and unit rate parameter, and $\Phi$ denotes the standard normal cumulative distribution function. The corresponding density function reads \begin{equation*} f_\lambda(\eta) = \begin{cases} |\lambda| k^k \Gamma(k)^{-1} \exp\{ k(\lambda\eta - \exp(\lambda\eta)) \} & \lambda \neq 0 \\ \phi(\eta) & \lambda = 0 \end{cases} \end{equation*} where $k=\lambda^{-2}$, $\Gamma(\cdot)$ is the gamma function and $\phi$ is the standard normal density function. By attaining the Gumbel(max) distribution at $\lambda = -1$, the standard normal distribution at $\lambda = 0$ and the Gumbel(min) distribution at $\lambda = 1$ the log-gamma link bridges the log-log, probit and complementary log-log links providing right-skew, symmetric and left-skewed latent distributions in a single family of link functions. Note that choice and parameterization of the predictor, $\eta_{ij}$, e.g., the use of scale effects, can affect the evidence about the shape of the latent distribution. There are usually several link functions which provide essentially the same fit to the data and choosing among the good candidates is often better done by appealing to arguments such as ease of interpretation rather than arguments related to fit. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section[Implementation of ML Estimation of CLMs in ordinal]{Implementation of ML Estimation of CLMs in \pkg{ordinal}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In the \pkg{ordinal} package cumulative link models are (by default) estimated with a regularized Newton-Raphson (NR) algorithm with step-halving (line search) using analytical expressions for the gradient and Hessian of the negative log-likelihood function. This NR algorithm with analytical derivatives is used irrespective of whether the model contains structured thresholds, nominal effects or scale effects; the only exception being models with flexible link functions for which a general-purpose quasi-Newton optimizer is used. Due to computationally cheap and efficient evaluation of the analytical derivatives, the relative well-behaved log-likelihood function (with exceptions described below) and the speedy convergence of the Newton-Raphson algorithm, the estimation of CLMs is virtually instant on a modern computer even with complicated models on large datasets. This also facilitates simulation studies. More important than speed is perhaps that the algorithm is reliable and accurate. Technical aspects of the regularized NR algorithm with step-halving (line search) are described in appendix~\ref{sec:algorithm} and analytical gradients are described in detail in \citet{mythesis}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Properties of the log-likelihood function for extended CLMs} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \citet{pratt81} and \citet{burridge81} showed (seemingly independent of each other) that the log-likelihood function of the basic cumulative link model~(\ref{eq:BasicCLM}) is concave. This means that there is a unique global optimum of the log-likelihood function and therefore no risk of convergence to a local optimum. It also means that the Hessian matrix for the negative log-likelihood is strictly positive definite and therefore also that the Newton step is always in direction of higher likelihood. The genuine Newton step may be too long to actually cause an increase in likelihood from one iteration to the next (this is called ``overshoot''). This is easily overcome by successively halving the length of the Newton step until an increase in likelihood is achieved. Exceptions to the strict concavity of the log-likelihood function include models using the cauchit link, flexible link functions as well as models with scale effects. Notably models with structured thresholds as well as nominal effects do not affect the linearity of the predictor, $\eta_{ij}$ and so are also guaranteed to have concave log-likelihoods. The restriction of the threshold parameters $\{\theta_j\}$ being non-decreasing is dealt with by defining $\ell(\bm\theta, \bm\beta; y) = \infty$ when $\{\theta_j\}$ are not in a non-decreasing sequence. If the algorithm attempts evaluation at such illegal values step-halving effectively brings the algorithm back on track. Other implementations of CLMs re-parameterize $\{\theta_j\}$ such that the non-decreasing nature of $\{\theta_j\}$ is enforced by the parameterization, for example, \code{MASS::polr} (package version 7.3.49) optimize the likelihood using \begin{equation*} \tilde\theta_1 = \theta_1, ~\tilde{\theta}_2 = \exp(\theta_2 - \theta_1),~\ldots, ~ \tilde{\theta}_{J-1} = \exp(\theta_{J-2} - \theta_{J-1}) \end{equation*} This is deliberately not used in \pkg{ordinal} because the log-likelihood function is generally closer to quadratic in the original parameterization in our experience which facilitates faster convergence. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Starting values} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% For the basic CLMs~(\ref{eq:BasicCLM}) the threshold parameters are initialized to an increasing sequence such that the cumulative density of a logistic distribution between consecutive thresholds (and below the lowest or above the highest threshold) is constant. The regression parameters $\bm\beta$, scale parameters $\bm\zeta$ as well as nominal effect $\bm\beta^*$ are initialized to 0. If the model specifies a cauchit link or includes scale parameters estimation starts at the parameter estimates of a model using the probit link and/or without the scale-part of the model. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Estimation problems} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% With many nominal effects it may be difficult to find a model in which the threshold parameters are strictly increasing for all combinations of the parameters. Upon convergence of the NR algorithm the model evaluates the $\bm\Theta$-matrix and checks that each row of threshold estimates are increasing. When a continuous variable is included among the nominal effects it is often helpful if the continuous variable is centered at an appropriate value (at least within the observed range of the data). This is because $\{\theta_j\}$ represent the thresholds when the continuous variable is zero and $\{\theta_j\}$ are enforced to be a non-decreasing sequence. Since the nominal effects represent different slopes for the continuous variable the thresholds will necessarily be ordered differently at some other value of the continuous variable. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Convergence codes} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Irrespective of the fitting algorithm, \pkg{ordinal} reports the following convergence codes for CLMs in which negative values indicate convergence failure: % \begin{description} \item[-3] Not all thresholds are increasing. This is only possible with nominal effects and the resulting fit is invalid. \item[-2] The Hessian has at least one negative eigenvalue. This means that the point at which the algorithm terminated does not represent an optimum. \item[-1] Absolute convergence criterion (maximum absolute gradient) was not satisfied. This means that the algorithm couldn't get close enough to a stationary point of the log-likelihood function. \item[0] Successful convergence. \item[1] The Hessian is singular (i.e., at least one eigenvalue is zero). This means that some parameters are not uniquely determined. \end{description} % Note that with convergence code \textbf{1} the optimum of the log-likelihood function has been found although it is not a single point but a line (or in general a (hyper) plane), so while some parameters are not uniquely determined the value of the likelihood is valid enough and can be compared to that of other models. In addition to these convergence codes, the NR algorithm in \pkg{ordinal} reports the following messages: \begin{description} \item[0] Absolute and relative convergence criteria were met \item[1] Absolute convergence criterion was met, but relative criterion was not met \item[2] iteration limit reached \item[3] step factor reduced below minimum \item[4] maximum number of consecutive Newton modifications reached \end{description} Note that convergence is assessed irrespective of potential messages from the fitting algorithm and irrespective of whether the tailored NR algorithm or a general-purpose quasi-Newton optimizer is used. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section[Fitting cumulative link models in ordinal with clm]{Fitting cumulative link models in \pkg{ordinal} with \code{clm}} \label{sec:fitting-clms} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The \code{clm} function takes the following arguments: % <>= clm_args <- gsub("function ", "clm", deparse(args(clm))) cat(paste(clm_args[-length(clm_args)], "\n")) @ % Several arguments are standard and well-known from \code{lm} and \code{glm} and will not be described in detail; \code{formula}, \code{data}, \code{weights}, \code{subset} and \code{na.action} are all parts of the standard model specification in \proglang{R}. \code{scale} and \code{nominal} are interpreted as \proglang{R}-formulae with no left hand sides and specifies the scale and nominal effects of the model respectively, see sections~\ref{sec:scale-effects} and \ref{sec:nominal-effects} for details; \code{start} is an optional vector of starting values; \code{doFit} can be set to \code{FALSE} to prompt \code{clm} to return a model \emph{environment}, for details see section~\ref{sec:customized-modelling}; \code{model} controls whether the \code{model.frame} should be included in the returned model fit; \code{link} specifies the link function and \code{threshold} specifies an optional threshold structure, for details see section~\ref{sec:threshold-effects}. Note the absence of a separate \code{offset} argument. Since \code{clm} allows for different offsets in \code{formula} and \code{scale}, offsets have to be specified within a each formulae, e.g., \verb!scale = ~ x1 + offset(x2)!. Methods for \code{clm} model fits are summarized in Table~\ref{tab:clm_methods} and introduced in the following sections. Control parameters can either be specified as a named list, among the optional \code{...} arguments, or directly as a call to \code{clm.control} --- in the first two cases the arguments are passed on to \code{clm.control}. \code{clm.control} takes the following arguments: % <>= cc_args <- gsub("function ", "clm.control", deparse(args(clm.control))) cat(paste(cc_args[-length(cc_args)], "\n")) @ % The \code{method} argument specifies the optimization and/or return method. The default estimation method (\code{Newton}) is the regularized Newton-Raphson estimation scheme described in section~\ref{sec:algorithm}; options \code{model.frame} and \code{design} prompts \code{clm} to return respectively the \code{model.frame} and a list of objects that represent the internal representation instead of fitting the model; options \code{ucminf}, \code{nlminb} and \code{optim} represent different general-purpose optimizers which may be used to fit the model (the former from package \pkg{ucminf} \citep{ucminf}, the latter two from package \pkg{stats}). The \code{sign.location} and \code{sign.nominal} options allow the user to flip the signs on the location and nominal model terms. The \code{convergence} argument instructs \code{clm} how to alert the user of potential convergence problems; \code{...} are optional arguments passed on to the general purpose optimizers; \code{trace} applies across all optimizers and positive values lead to printing of progress during iterations; the remaining arguments (\code{maxIter, gradTol, maxLineIter, relTol, tol}) control the behavior of the regularized NR algorithm described in appendix~\ref{sec:algorithm}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection[Fitting a basic cumulative link model with clm]{Fitting a basic cumulative link model with \code{clm}} \label{sec:fitting-basic-clm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In the following examples we will use the wine data from \citet{randall89} available in the object \code{wine} in package \pkg{ordinal}, cf., Table~\ref{tab:wineData}. The data represent a factorial experiment on factors determining the bitterness of wine with 1 = ``least bitter'' and 5 = ``most bitter''. Two treatment factors (temperature and contact) each have two levels. Temperature and contact between juice and skins can be controlled when crushing grapes during wine production. Nine judges each assessed wine from two bottles from each of the four treatment conditions, hence there are 72 observations in all. The main objective is to examine the effect of contact and temperature on the perceived bitterness of wine. \begin{table}[t!] \centering \begin{tabular}{llrrrrr} \hline & & \multicolumn{5}{c}{Least---Most bitter} \\ \cline{3-7} <>= ## data(wine) tab <- with(wine, table(temp:contact, rating)) mat <- cbind(rep(c("cold", "warm"), each = 2), rep(c("no", "yes"), 2), tab) colnames(mat) <- c("Temperature", "Contact", paste("~~", 1:5, sep = "")) xtab <- xtable(mat) print(xtab, only.contents = TRUE, include.rownames = FALSE, sanitize.text.function = function(x) x) @ \end{tabular} \caption{The number of ratings from nine judges in bitterness categories 1 --- 5. Wine data from \citet{randall89} aggregated over bottles and judges.% \label{tab:wineData}} \end{table}% Initially we consider the following cumulative link model for the wine data: \begin{equation} \label{eq:CLM} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j - \beta_1 (\mathtt{temp}_i) - \beta_2(\mathtt{contact}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation}% % where $\beta_1(\mathtt{temp}_i)$ attains the values $\beta_1(\mathtt{cold})$ and $\beta_1(\mathtt{warm})$, and $\beta_2(\mathtt{contact}_i)$ attains the values $\beta_2(\mathtt{no})$ and $\beta_2(\mathtt{yes})$. The effect of temperature in this model is illustrated in Figure~\ref{fig:standard_clm}. This is a model for the cumulative probability of the $i$th rating falling in the $j$th category or below, where $i$ index all observations ($n=72$), $j = 1, \ldots, J$ index the response categories ($J = 5$) and $\theta_j$ is the intercept or threshold for the $j$th cumulative logit: $\textup{logit}(P(Y_i \leq j))$. Fitting the model with \code{clm} we obtain: <<>>= library("ordinal") fm1 <- clm(rating ~ temp + contact, data = wine) summary(fm1) @ The \code{summary} method prints basic information about the fitted model. % most of which is self explanatory. % The primary result is the coefficient table with parameter estimates, standard errors and Wald based $p$~values for tests of the parameters being zero. If one of the flexible link functions (\code{link = "log-gamma"} or \code{link = "Aranda-Ordaz"}) is used a coefficient table for the link parameter, $\lambda$ is also included. The maximum likelihood estimates of the model coefficients are:% % \begin{equation} \label{eq:parameters} \begin{gathered} \hat\beta_1(\mathtt{warm} - \mathtt{cold})= 2.50, ~~\hat\beta_2(\mathtt{yes} - \mathtt{no}) = 1.53, \\ \{\hat\theta_j\} = \{-1.34,~ 1.25,~ 3.47,~ 5.01\}. \end{gathered} \end{equation} % The coefficients for \code{temp} and \code{contact} are positive indicating that higher temperature and contact increase the bitterness of wine, i.e., rating in higher categories is more likely. % Because the treatment contrast coding which is the default in \proglang{R} was used, $\{\hat\theta_j\}$ refers to the thresholds at the setting with $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{no}$. % Three natural and complementing interpretations of this model are % \begin{enumerate} \item The thresholds $\{ \hat\theta_j \}$ at $\mathtt{contact}_i = \mathtt{yes}$ conditions have been shifted a constant amount $1.53$ relative to the thresholds $\{ \hat\theta_j \}$ at $\mathtt{contact}_i = \mathtt{no}$ conditions. \item The location of the latent distribution has been shifted $+1.53 \sigma^*$ (scale units) at $\mathtt{contact}_i = \mathtt{yes}$ relative to $\mathtt{contact}_i = \mathtt{no}$. \item The odds ratio of bitterness being rated in category $j$ or above ($\mathrm{OR}(Y \geq j)$) is $\exp(\hat\beta_2(\mathtt{yes} - \mathtt{no})) = 4.61$. \end{enumerate} % Note that there are no $p$~values displayed for the threshold coefficients because it usually does not make sense to test the hypothesis that they equal zero. \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-fig2} \caption{Illustration of the effect of temperature in the standard cumulative link model in Equation~\ref{eq:CLM} for the wine data in Table~\ref{tab:wineData} through a latent variable interpretation.\label{fig:standard_clm}} \end{figure} The number of Newton-Raphson iterations is given below \code{niter} with the number of step-halvings in parenthesis. \code{max.grad} is the maximum absolute gradient of the log-likelihood function with respect to the parameters. % The condition number of the Hessian (\code{cond.H}) is well below $10^4$ and so does not indicate a problem with the model. The \code{anova} method produces an analysis of deviance (ANODE) table also based on Wald $\chi^2$-tests and provides tables with type I, II and III hypothesis tests using the \proglang{SAS} definitions. A type I table, the \proglang{R} default for linear models fitted with \code{lm}, sequentially tests terms from first to last, type II tests attempt to respect the principle of marginality and test each term after all others while ignoring higher order interactions, and type III tables are based on orthogonalized contrasts and tests of main effects or lower order terms can often be interpreted as averaged over higher order terms. Note that in this implementation any type of contrasts (e.g., \code{contr.treatment} or \code{contr.SAS} as well as \code{contr.sum}) can be used to produce type III tests. For further details on the interpretation and definition of type I, II and III tests, please see \citep{kuznetsova17} and \citep{SAStype}. Here we illustrate with a type III ANODE table, which in this case is equivalent to type I and II tables since the variables are balanced: <<>>= anova(fm1, type = "III") @ Likelihood ratio tests, though asymptotically equivalent to the Wald tests usually better reflect the evidence in the data. These tests can be obtained by comparing nested models with the \code{anova} method, for example, the likelihood ratio test of \code{contact} is <<>>= fm2 <- clm(rating ~ temp, data = wine) anova(fm2, fm1) @ which in this case produces a slightly lower $p$~value. Equivalently we can use \code{drop1} to obtain likelihood ratio tests of the explanatory variables while \emph{controlling} for the remaining variables: <<>>= drop1(fm1, test = "Chi") @ Likelihood ratio tests of the explanatory variables while \emph{ignoring} the remaining variables are provided by the \code{add1} method: <<>>= fm0 <- clm(rating ~ 1, data = wine) add1(fm0, scope = ~ temp + contact, test = "Chi") @ % Confidence intervals of the parameter estimates are provided by the \code{confint} method which by default compute the so-called profile likelihood confidence intervals: <<>>= confint(fm1) @ The cumulative link model in Equation~\ref{eq:CLM} assumes that the thresholds, $\{\theta_j\}$ are constant for all values of the remaining explanatory variables, here \code{temp} and \code{contact}. This is generally referred to as the \emph{proportional odds assumption} or \emph{equal slopes assumption}. We can relax this assumption in two general ways: with nominal effects and scale effects examples of which will now be presented in turn. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Partial and non-proportional odds: nominal effects} \label{sec:nominal-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The CLM in Equation~\ref{eq:CLM} specifies a structure in which the regression parameters, $\bm\beta$ are not allowed to vary with $j$ or equivalently that the threshold parameters $\{\theta_j\}$ are not allowed to depend on regression variables. In the following model this assumption is relaxed and the threshold parameters are allowed to depend on \code{contact}. This leads to the so-called partial proportional odds for \code{contact}: % \begin{equation} \label{eq:CLM_nominal} \begin{array}{c} \textup{logit}(P(Y_i \leq j)) = \theta_j + \tilde{\beta}_{j} (\mathtt{contact}_i) - \beta (\mathtt{temp}_i) \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{array} \end{equation} % One way to view this model is to think of two sets of thresholds being applied at conditions with and without contact as illustrated in Figure~\ref{fig:clm_nominal}. The model is specified as follows with \code{clm}: <<>>= fm.nom <- clm(rating ~ temp, nominal = ~ contact, data = wine) summary(fm.nom) @ As can be seen from the output of \code{summary} there are no regression coefficient estimated for \code{contact}, but there are additional threshold coefficients estimated instead. % The naming and meaning of the threshold coefficients depend on the contrast coding applied to \code{contact}. Here the \proglang{R} default treatment contrasts (\code{"contr.treatment"}) are used. Here coefficients translate to the following parameter functions: \begin{equation} \label{eq:nom_parameters} \begin{gathered} \hat\beta(\mathtt{warm} - \mathtt{cold})= 2.52, \\ \{\hat\theta_j\} = \{-1.32,~ 1.25,~ 3.55,~ 4.66\}, \\ \{ \hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}) \} = \{-1.62,~ -1.51,~ -1.67,~ -1.05\}. \end{gathered} \end{equation} % Again $\{ \theta_j \}$ refer to the thresholds at $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{no}$ settings while the thresholds at $\mathtt{temp}_i = \mathtt{cold}$ and $\mathtt{contact}_i = \mathtt{yes}$ are $\{ \hat\theta_j + \hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}) \}$. % The odds ratio of bitterness being rated in category $j$ or above ($\mathrm{OR}(Y \geq j)$) now depend on $j$: $\{\exp(-\hat{\tilde{\beta}}_j(\mathtt{yes} - \mathtt{no}))\} = \{ 5.03,~ 4.53,~ 5.34,~ 2.86\}$. % \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figNom2} \caption{Illustration of nominal effects leading to different sets of thresholds being applied for each level of \code{contact} in a latent variable interpretation, cf., Equation~\ref{eq:CLM_nominal}.\label{fig:clm_nominal}} \end{figure} The resulting thresholds for each level of \code{contact}, i.e., the estimated $\bm\Theta$-matrix can be extracted with: <<>>= fm.nom$Theta @ As part of the convergence checks, \code{clm} checks the validity of $\bm\Theta$, i.e., that each row of the threshold matrix is non-decreasing. We can perform a likelihood ratio test of the proportional odds assumption for \code{contact} by comparing the likelihoods of models (\ref{eq:CLM}) and (\ref{eq:CLM_nominal}) as follows: <<>>= anova(fm1, fm.nom) @ There is only little difference in the log-likelihoods of the two models and the test is insignificant. Thus there is no evidence that the proportional odds assumption is violated for \code{contact}. It is not possible to estimate both $\beta_2(\mathtt{contact}_i)$ and $\tilde{\beta}_{j}(\mathtt{contact}_i)$ in the same model. Consequently variables that appear in \code{nominal} cannot enter in \code{formula} as well. For instance, not all parameters are identifiable in the following model: <<>>= fm.nom2 <- clm(rating ~ temp + contact, nominal = ~ contact, data = wine) @ We are made aware of this when summarizing or printing the model in which the coefficient for \code{contactyes} is \code{NA}: <<>>= fm.nom2 @ To test the proportional odds assumption for all variables, we can use <<>>= nominal_test(fm1) @ This function \emph{moves} all terms in \code{formula} to \code{nominal} and \emph{copies} all terms in \code{scale} to \code{nominal} one by one and produces an \code{add1}-like table with likelihood ratio tests of each term. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Modelling scale effects} \label{sec:scale-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % To allow the scale of the latent variable distribution to depend on explanatory variables we could for instance consider the following model where the scale is allowed to differ between cold and warm conditions. The location of the latent distribution is allowed to depend on both temperature and contact: \begin{equation} \label{eq:CLM_scale_wine} \begin{gathered} \textup{logit}(P(Y_i \leq j)) = \frac{\theta_j - \beta_1 (\mathtt{temp}_i) - \beta_{2} (\mathtt{contact}_i)} {\exp( \zeta (\mathtt{temp}_i))} \\ i = 1,\ldots, n, \quad j = 1, \ldots, J-1 \end{gathered} \end{equation} This model structure is illustrated in Figure~\ref{fig:clm_scale} and can be estimated with: <<>>= fm.sca <- clm(rating ~ temp + contact, scale = ~ temp, data = wine) summary(fm.sca) @ In a latent variable interpretation the location of the latent distribution is shifted $2.63\sigma^*$ (scale units) from cold to warm conditions and $1.59\sigma^*$ from absence to presence of contact. The scale of the latent distribution is $\sigma^*$ at cold conditions but $\sigma^* \exp(\zeta(\mathtt{warm} - \mathtt{cold})) = \sigma^*\exp(0.095) = 1.10 \sigma^*$, i.e., 10\% higher, at warm conditions. However, observe that the $p$~value for the scale effect in the summary output shows that the ratio of scales is not significantly different from 1 (or equivalently that the difference on the log-scale is not different from 0). Scale effects offer an alternative to nominal effects (partial proportional odds) when non-proportional odds structures are encountered in the data. Using scale effects is often a better approach because the model is well-defined for all values of the explanatory variables irrespective of translocation and scaling of covariates. Scale effects also use fewer parameters which often lead to more sensitive tests than nominal effects. Potential scale effects of variables already included in \code{formula} can be discovered using \code{scale_test}. This function adds each model term in \code{formula} to \code{scale} in turn and reports the likelihood ratio statistic in an \code{add1}-like fashion: <<>>= scale_test(fm1) @ \code{confint} and \code{anova} methods apply with no change to models with scale and nominal parts, but \code{drop1}, \code{add1} and \code{step} methods will only drop or add terms to the (location) \code{formula}. \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figSca} \caption{Illustration of scale effects leading to different scales of the latent variable, cf., Equation~\ref{eq:CLM_scale_wine}.\label{fig:clm_scale}} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Structured thresholds} \label{sec:threshold-effects} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In section~\ref{sec:nominal-effects} nominal effects were described where the assumption that regression parameters have the same effect across all thresholds was relaxed. In this section additional restrictions on the thresholds will be imposed instead. The following model requires that the thresholds, $\{ \theta_j \}$ are equidistant or equally spaced. This allows us to assess an assumption that judges are using the response scale in such a way that there is the same distance between adjacent response categories, i.e., that $\theta_j - \theta_{j-1} = \textup{constant}$ for $j = 2, ..., J-1$. The effect of equidistant thresholds is illustrated in Figure~\ref{fig:clm_structured_thresholds} and can be fitted with: <<>>= fm.equi <- clm(rating ~ temp + contact, data = wine, threshold = "equidistant") summary(fm.equi) @ The parameters determining the thresholds are now the first threshold (\code{threshold.1}) and the spacing among consecutive thresholds (\code{spacing}). The mapping to this parameterization is stored in the transpose of the Jacobian matrix (\code{tJac}) component of the model fit. This makes it possible to extract the thresholds imposed by the equidistance structure with <<>>= drop(fm.equi$tJac %*% coef(fm.equi)[c("threshold.1", "spacing")]) @ These thresholds are in fact already stored in the \code{Theta} component of the model fit. % The following shows that the average distance between consecutive thresholds in \code{fm1} which did not restrict the thresholds is very close to the \code{spacing} parameter from \code{fm.equi}: <<>>= mean(diff(coef(fm1)[1:4])) @ One advantage of imposing additional restrictions on the thresholds is the use of fewer parameters. Whether the restrictions are warranted by the data can be assessed in a likelihood ratio test: <<>>= anova(fm1, fm.equi) @ In this case the test is non-significant, so there is no considerable loss of fit at the gain of saving two parameters, hence we may retain the model with equally spaced thresholds. Note that the shape of the latent distribution (determined by the choice of link function) also affects the distances between the thresholds. If thresholds are equidistant under a normal distribution (i.e., with the logit link) they will in general\footnote{The exception is perfect fits such as CLMs with flexible thresholds and no predictors where models have the same likelihood irrespective of link function.} not be equidistant under a differently shaped latent distribution such as a skew latent distribution (e.g., with the log-log or clog-log link). \begin{figure} \centering \includegraphics[width=6cm]{./static_figs/fig-figFlex} \includegraphics[width=6cm]{./static_figs/fig-figEqui} \caption{Illustration of flexible (left) and equidistant (right) thresholds being applied in a cumulative link model in a latent variable interpretation.\label{fig:clm_structured_thresholds}} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Scale effects, nominal effects and link functions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This section presents an example that connects aspects of scale effects, nominal effects and link functions. The example is based on the \code{soup} data available in the \pkg{ordinal} package. This dataset represents a sensory discrimination study of packet soup in which 185 respondents assessed a reference product and one of 5 test products on an ordinal sureness-scale with 6 levels from "reference, sure" to "test, sure". The two key explanatory variables in this example are \code{PRODID} and \code{PROD}. \code{PRODID} identifies all 6 products while \code{PROD} distinguishes test and reference products: <<>>= with(soup, table(PROD, PRODID)) @ The so-called bi-normal model plays a special role in the field of signal detection theory \citep{decarlo98, macmillan05} and in sensometrics \citep{christensen11} and assumes the existence of normal latent distributions potentially with different variances. The bi-normal model can be fitted to ordinal data by identifying it as a CLM with a probit link. The following bi-normal model assumes that the location of the normal latent distribution depends on \code{PRODID} while the scale only varies with \code{PROD}: <<>>= fm_binorm <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="probit") summary(fm_binorm) @ Here we observe significant differences in scale for reference and test products and this is an example of what would have been denoted non-proportional odds had the link function been the logit function. In this context differences in scale are interpreted to mean that a location shift of the latent normal distribution is not enough to represent the data. Another test of such non-location effects is provided by the nominal effects: <<>>= fm_nom <- clm(SURENESS ~ PRODID, nominal = ~ PROD, data = soup, link="probit") @ A comparison of these models shows that the scale effects increase the likelihood substantially using only one extra parameter. The addition of nominal effects provides a smaller increase in likelihood using three extra parameters: <<>>= fm_location <- update(fm_binorm, scale = ~ 1) anova(fm_location, fm_binorm, fm_nom) @ Note that both the location-only and bi-normal models are nested under the model with nominal effects making these models comparable in likelihood ratio tests. This example illustrates an often seen aspect: that models allowing for scale differences frequently capture the majority of deviations from location-only effects that could otherwise be captured by nominal effects using fewer parameters. The role of link functions in relation to the evidence of non-location effects is also illustrated by this example. If we consider the complementary log-log link it is apparent that there is no evidence of scale differences. Furthermore, the likelihood of a complementary log-log model with constant scale is almost the same as that of the bi-normal model: <<>>= fm_cll_scale <- clm(SURENESS ~ PRODID, scale = ~ PROD, data = soup, link="cloglog") fm_cll <- clm(SURENESS ~ PRODID, data = soup, link="cloglog") anova(fm_cll, fm_cll_scale, fm_binorm) @ Using the log-gamma link we can also confirm that a left-skewed latent distribution ($\lambda > 0$) is best supported by the data and that the estimate of $\lambda$ is close to 1 at which the complementary log-log link is obtained: <<>>= fm_loggamma <- clm(SURENESS ~ PRODID, data = soup, link="log-gamma") summary(fm_loggamma) @ The analysis of link functions shown here can be thought of as providing a framework analogous to that of Box-Cox transformations for linear models. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Profile likelihood} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In addition to facilitating the generally quite accurate profile likelihood confidence intervals which were illustrated in section~\ref{sec:fitting-basic-clm}, the profile likelihood function can also be used to illustrate the relative importance of parameter values. As an example, the profile likelihood of model coefficients for \code{temp} and \code{contact} in \code{fm1} can be obtained with % <>= pr1 <- profile(fm1, alpha = 1e-4) plot(pr1) @ The resulting plots are provided in Figure~\ref{fig:ProfileLikelihood}. The \code{alpha} argument controls how far from the maximum likelihood estimate the likelihood function should be profiled: the profile strays no further from the MLE when values outside an (\code{1 - alpha})-level profile likelihood confidence interval. From the relative profile likelihood in Figure~\ref{fig:ProfileLikelihood} for \code{tempwarm} we see that parameter values between 1 and 4 are reasonably well supported by the data, and values outside this range has little likelihood. Values between 2 and 3 are very well supported by the data and have high likelihood. \setkeys{Gin}{width=.45\textwidth} \begin{figure} \centering <>= plot(pr1, which.par = 1) @ <>= plot(pr1, which.par = 2) @ \caption{Relative profile likelihoods for the regression parameters in \code{fm1} for the wine data. Horizontal lines indicate 95\% and 99\% confidence bounds.} \label{fig:ProfileLikelihood} \end{figure} Profiling is implemented for regression ($\beta$) and scale ($\zeta$) parameters but not available for threshold, nominal and flexible link parameters. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Assessment of model convergence} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Likelihood slices} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The maximum likelihood estimates of the parameters in cumulative link models do not have closed form expressions, so iterative methods have to be applied to fit the models. Further, CLMs are non-linear models and in general the likelihood function is not guaranteed to be well-behaved or even uni-model. In addition, the special role of the threshold parameters and the restriction on them being ordered can affect the appearance of the likelihood function. To confirm that an unequivocal optimum has been reached and that the likelihood function is reasonably well-behaved around the reported optimum we can inspect the likelihood function in a neighborhood around the reported optimum. For these purposes we can display slices of the likelihood function. The following code produces the slices shown in Figure~\ref{fig:slice1} which displays the shape of the log-likelihood function in a fairly wide neighborhood around the reported MLE; here we use $\lambda=5$ curvature units, as well as it's quadratic approximation. <<>>= slice.fm1 <- slice(fm1, lambda = 5) par(mfrow = c(2, 3)) plot(slice.fm1) @ Figure~\ref{fig:slice1} shows that log-likelihood function is fairly well behaved and relatively closely quadratic for most parameters. \setkeys{Gin}{width=.32\textwidth} \begin{figure} \centering <>= plot(slice.fm1, parm = 1) @ <>= plot(slice.fm1, parm = 2) @ <>= plot(slice.fm1, parm = 3) @ <>= plot(slice.fm1, parm = 4) @ <>= plot(slice.fm1, parm = 5) @ <>= plot(slice.fm1, parm = 6) @ \caption{Slices of the (negative) log-likelihood function (solid) for parameters in \code{fm1} for the wine data. Dashed lines indicate quadratic approximations to the log-likelihood function and vertical bars indicate maximum likelihood estimates.} \label{fig:slice1} \end{figure} Looking at the log-likelihood function much closer to the reported optimum (using $\lambda = 10^{-5}$) we can probe how accurately the parameter estimates are determined. The likelihood slices in Figure~\ref{fig:slice2} which are produced with the following code shows that the parameters are determined accurately with at least 5 correct decimals. Slices are shown for two parameters and the slices for the remaining 4 parameters are very similar. <>= slice2.fm1 <- slice(fm1, parm = 4:5, lambda = 1e-5) par(mfrow = c(1, 2)) plot(slice2.fm1) @ \setkeys{Gin}{width=.45\textwidth} \begin{figure} \centering <>= plot(slice2.fm1, parm = 1) @ <>= plot(slice2.fm1, parm = 2) @ \caption{Slices of the (negative) log-likelihood function (solid) for parameters in \code{fm1} for the wine data very close to the MLEs. Dashed lines (indistinguishable from the solid lines) indicate quadratic approximations to the log-likelihood function and vertical bars the indicate maximum likelihood estimates.} \label{fig:slice2} \end{figure} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Parameter accuracy} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% As discussed in section~\ref{sec:algorithm} the method independent error estimate provides an assessment of the accuracy with which the ML estimates of the parameters have been determined by the fitting algorithm. This error estimate is implemented in the \code{convergence} method which we now illustrate on a model fit: <<>>= convergence(fm1) @ The most important information is the number of correct decimals (\code{Cor.Dec}) and the number of significant digits (\code{Sig.Dig}) with which the parameters are determined. In this case all parameters are very accurately determined, so there is no reason to lower the convergence tolerance. The \code{logLik.error} shows that the error in the reported value of the log-likelihood is below $10^{-10}$, which is by far small enough that likelihood ratio tests based on this model are accurate. Note that the assessment of the number of correctly determined decimals and significant digits is only reliable sufficiently close to the optimum so in practice we caution against this assessment if the algorithm did not converge successfully. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Fitted values and predictions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Several types of fitted values and predictions can be extracted from a CLM depending on how it is viewed. By \emph{fitted values} we denote the values ($i=1, \ldots, n$) \begin{equation*} \hat{\tilde\pi}_i = \tilde\pi_i(\hat{\bm\psi}) \end{equation*} that is, the value of $\tilde\pi_i$, cf., Equation~\ref{eq:clm-log-likelihood} evaluated at the ML estimates $\hat{\bm\psi}$. These are the values returned by the \code{fitted} and \code{fitted.values} extractor methods and stored in the \code{fitted.values} component of the model fit. The values of $\pi_{ij}$ (cf., Equation~\ref{eq:multinom_pmf}) evaluated at the ML estimates of the parameters (i.e., $\hat\pi_{ij}$) can also be thought of as fitted values for the multinomially distributed variable $\bm Y_i^*$. These values can be obtained from the model fit by use of the \code{predict} method: <<>>= head(pred <- predict(fm1, newdata = subset(wine, select = -rating))$fit) @ Note that the original data set should be supplied in the \code{newdata} argument \emph{without} the response variable (here \code{rating}). If the response variable is \emph{present} in \code{newdata} predictions are produced for only those rating categories which were observed and we get back the fitted values: <<>>= stopifnot(isTRUE(all.equal(fitted(fm1), t(pred)[ t(col(pred) == wine$rating)])), isTRUE(all.equal(fitted(fm1), predict(fm1, newdata = wine)$fit))) @ Class predictions are also available and defined here as the response class with the highest probability, that is, for the $i$'th observation the class prediction is the mode of $\bm\pi_{i}$. To obtain class predictions use \code{type = "class"} as illustrated in the following small table: <<>>= newData <- expand.grid(temp = levels(wine$temp), contact = levels(wine$contact)) cbind(newData, round(predict(fm1, newdata = newData)$fit, 3), "class" = predict(fm1, newdata = newData, type = "class")$fit) @ Other definitions of class predictions can be applied, e.g., nearest mean predictions: <<>>= head(apply(pred, 1, function(x) round(weighted.mean(1:5, x)))) @ which in this case happens to be identical to the default class predictions. <>= p1 <- apply(predict(fm1, newdata = subset(wine, select=-rating))$fit, 1, function(x) round(weighted.mean(1:5, x))) p2 <- as.numeric(as.character(predict(fm1, type = "class")$fit)) stopifnot(isTRUE(all.equal(p1, p2, check.attributes = FALSE))) @ Standard errors and confidence intervals of predictions are also available, for example: <<>>= predictions <- predict(fm1, se.fit = TRUE, interval = TRUE) head(do.call("cbind", predictions)) @ where the default 95\% confidence level can be changed with the \code{level} argument. Here the standard errors of fitted values or predictions, $\hat{\tilde{\pi}} = \tilde{\pi}(\hat{\bm\psi})$ are obtained by application of the delta method: \begin{equation*} \mathsf{Var}(\hat{\tilde{\bm\pi}}) = \bm C \mathsf{Var}(\hat{\bm\psi}) \bm C^\top, \quad \bm C = \frac{\partial \tilde{\bm\pi}(\bm\psi)}{\partial \bm\psi} \Big|_{\bm\psi = \hat{\bm\psi}} \end{equation*} where $\mathsf{Var}(\hat{\bm\psi})$ is the estimated variance-covariance matrix of the parameters $\bm\psi$ evaluated at the ML estimates $\hat{\bm\psi}$ as given by the observed Fisher Information matrix and finally the standard errors are extracted as the square root of the diagonal elements of $\mathsf{Var}(\hat{\tilde{\bm\pi}})$. Since symmetric confidence intervals for probabilities are not appropriate unless perhaps if they are close to one half a more generally applicable approach is to form symmetric Wald intervals on the logit scale and then subsequently transform the confidence bounds to the probability scale. \code{predict.clm} takes this approach and computes the standard error of $\hat\kappa_i = \mathrm{logit}(\hat{\tilde{\pi}}_i)$ by yet an application of the delta method: \begin{equation*} \mathrm{se}(\hat\kappa_i) = \frac{\partial g(\hat{\tilde{\pi}}_i)}{\partial \hat{\tilde{\pi}}_i} \mathrm{se}(\hat{\tilde{\pi}}_i) = \frac{\mathrm{se}(\hat{\tilde{\pi}}_i)}{% \hat{\tilde{\pi}}_i(1 - \hat{\tilde{\pi}}_i)}, \quad g(\hat{\tilde{\pi}}_i) = \log \frac{\hat{\tilde{\pi}}_i}{1 - \hat{\tilde{\pi}}_i}. \end{equation*} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Model identifiability} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Unidentifiable models or unidentifiable parameters may happen in CLMs for several reasons some of which are special to the model class. In this section we describe issues around model identifiability and how this is handled by \code{ordinal::clm}. Material in the remainder of this section is generally on a more advanced level than up to now. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Complete separation} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% In binary logistic regression the issue of \emph{complete separation} is well known. This may happen, for example if only ``success'' or only ``failure'' is observed for a level of a treatment factor. In CLMs the issue may appear even when outcomes are observed in more than one response category. This can be illustrated using the \code{wine} data set if we combine the three central categories: <<>>= wine <- within(wine, { rating_comb3 <- factor(rating, labels = c("1", "2-4", "2-4", "2-4", "5")) }) ftable(rating_comb3 ~ temp, data = wine) fm.comb3 <- clm(rating_comb3 ~ temp, data = wine) summary(fm.comb3) @ Here the true ML estimates of the coefficients for \code{temp} and the second threshold are at infinity but the algorithm in \code{clm} terminates when the likelihood function is sufficiently flat. This means that the reported values of the coefficients for \code{temp} and the second threshold are arbitrary and will change if the convergence criteria are changed or a different optimization method is used. The standard errors of the coefficients are not available because the Hessian is effectively singular and so cannot be inverted to produce the variance-covariance matrix of the parameters. The ill-determined nature of the Hessian is seen from the very large condition number of the Hessian, \code{cond.H}. Note, however, that while the model parameters cannot be uniquely determined, the likelihood of the model is well defined and as such it can be compared to the likelihood of other models. For example, we could compare it to a model that excludes \code{temp} <<>>= fm.comb3_b <- clm(rating_comb3 ~ 1, data = wine) anova(fm.comb3, fm.comb3_b) @ The difference in log-likelihood is substantial, however, the criteria for the validity of the likelihood ratio test are not fulfilled, so the $p$~value should not be taken at face value. The complete-separation issue may also appear in less obvious situations. If, for example, the following model is considered allowing for nominal effects of \code{temp} the issue shows up: <<>>= fm.nom2 <- clm(rating ~ contact, nominal = ~ temp, data = wine) summary(fm.nom2) @ Analytical detection of which coefficients suffer from unidentifiability due to \emph{complete separation} is a topic for future research and therefore unavailable in current versions of \pkg{ordinal}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Aliased coefficients} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Aliased coefficients can occur in all kinds of models that build on a design matrix including linear models as well as generalized linear models. \code{lm} and \code{glm} determine the rank deficiency of the design matrix using the rank-revealing implementation of the QR-decomposition in \code{LINPACK} and displays the aliased coefficients as \code{NA}s\footnote{if the \code{singular.ok = TRUE} which is the default.}. Though the QR decomposition is not used during iterations in \code{clm}, it is used initially to determine aliased coefficients. An example is provided using the \code{soup} data available in the \pkg{ordinal} package: <<>>= fm.soup <- clm(SURENESS ~ PRODID * DAY, data = soup) summary(fm.soup) @ The source of the singularity is revealed in the following table: <<>>= with(soup, table(DAY, PRODID)) @ which shows that the third \code{PRODID} was not presented at the second day. The issue of aliased coefficients extends in CLMs to nominal effects since the joint design matrix for location and nominal effects will be singular if the same variables are included in both location and nominal formulae. \code{clm} handles this by not estimating the offending coefficients in the location formula as illustrated with the \code{fm.nom2} model fit in section~\ref{sec:nominal-effects}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Over parameterization} \label{sec:over-parameterization} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The scope of model structures allowed in \code{clm} makes it possible to specify models which are over parameterized in ways that do not lead to rank deficient design matrices and as such are not easily detected before fitting the model. An example is given here which includes both additive (location) and multiplicative (scale) effects of \code{contact} for a binomial response variable but the issue can also occur with more than two response categories: <<>>= wine <- within(wine, { rating_comb2 <- factor(rating, labels = c("1-2", "1-2", "3-5", "3-5", "3-5")) }) ftable(rating_comb2 ~ contact, data = wine) fm.comb2 <- clm(rating_comb2 ~ contact, scale = ~ contact, data = wine) summary(fm.comb2) @ <>= ## Example with unidentified parameters with 3 response categories ## not shown in paper: wine <- within(wine, { rating_comb3b <- rating levels(rating_comb3b) <- c("1-2", "1-2", "3", "4-5", "4-5") }) wine$rating_comb3b[1] <- "4-5" # Remove the zero here to avoid inf MLE ftable(rating_comb3b ~ temp + contact, data = wine) fm.comb3_c <- clm(rating_comb3b ~ contact * temp, scale = ~contact * temp, nominal = ~contact, data = wine) summary(fm.comb3_c) convergence(fm.comb3_c) @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Customized modelling} \label{sec:customized-modelling} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Using the \code{doFit} argument \code{clm} can be instructed to return a \emph{model environment} that we denote \code{rho}: <<>>= rho <- update(fm1, doFit=FALSE) names(rho) @ This environment holds a complete specification of the cumulative link models including design matrices \code{B1}, \code{B2}, \code{S} and other components. The environment also contains the cumulative distribution function that defines the inverse link function \code{pfun} and its first and second derivatives, i.e., the corresponding density function \code{dfun} and gradient \code{gfun}. Of direct interest here is the parameter vector \code{par} and functions that readily evaluate the negative log-likelihood (\code{clm.nll}), its gradient with respect to the parameters (\code{clm.grad}) and the Hessian (\code{clm.hess}). The negative log-likelihood and the gradient at the starting values is therefore <<>>= rho$clm.nll(rho) c(rho$clm.grad(rho)) @ Similarly at the MLE they are: <<>>= rho$clm.nll(rho, par = coef(fm1)) print(c(rho$clm.grad(rho)), digits = 3) @ Note that the gradient function \code{clm.grad} assumes that \code{clm.nll} has been evaluated at the current parameter values; similarly, \code{clm.hess} assumes that \code{clm.grad} has been evaluated at the current parameter values. The NR algorithm in \pkg{ordinal} takes advantage of this so as to minimize the computational load. If interest is in fitting a \emph{custom} CLM with, say, restrictions on the parameter space, this can be achieved by a combination of a general purpose optimizer and the functions \code{clm.nll} and optionally \code{clm.grad}. Assume for instance we know that the regression parameters can be no larger than 2, then the model can be fitted with the following code: <<>>= nll <- function(par, envir) { envir$par <- par envir$clm.nll(envir) } grad <- function(par, envir) { envir$par <- par envir$clm.nll(envir) envir$clm.grad(envir) } nlminb(rho$par, nll, grad, upper = c(rep(Inf, 4), 2, 2), envir = rho)$par @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubsection{Constrained partial proportional odds} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A type of models which are not implemented in full generality in \pkg{ordinal} are the so-called \emph{constrained} partial proportional odds models proposed by \citet{peterson90}. These models impose restrictions on the nominal effects considered in section~\ref{sec:nominal-effects} and are well suited to illustrate the customisable modelling options available in the \pkg{ordinal} package. We consider an example from \citet{peterson90} in which disease status is tabulated by smoking status: <<>>= artery <- data.frame(disease = factor(rep(0:4, 2), ordered = TRUE), smoker = factor(rep(c("no", "yes"), each = 5)), freq = c(334, 99, 117, 159, 30, 350, 307, 345, 481, 67)) addmargins(xtabs(freq ~ smoker + disease, data = artery), margin = 2) @ The overall odds-ratio of smoking is <<>>= fm <- clm(disease ~ smoker, weights = freq, data = artery) exp(fm$beta) @ showing that overall the odds of worse disease rating is twice as high for smokers compared to non-smokers. Allowing for nominal effects we see that the log odds-ratio for smoking clearly changes with disease status, and that it does so in an almost linearly decreasing manor: <<>>= fm.nom <- clm(disease ~ 1, nominal = ~ smoker, weights = freq, data = artery, sign.nominal = "negative") coef(fm.nom)[5:8] @ \citet{peterson90} suggested a model which restricts the log odds-ratios to be linearly decreasing with disease status modelling only the intercept (first threshold) and slope of the log odds-ratios: <<>>= coef(fm.lm <- lm(I(coef(fm.nom)[5:8]) ~ I(0:3))) @ We can implement the log-likelihood of this model as follows. As starting values we combine parameter estimates from \code{fm.nom} and the linear model \code{fm.lm}, and finally optimize the log-likelihood utilizing the \code{fm.nom} model environment: <<>>= nll2 <- function(par, envir) { envir$par <- c(par[1:4], par[5] + par[6] * (0:3)) envir$clm.nll(envir) } start <- unname(c(coef(fm.nom)[1:4], coef(fm.lm))) fit <- nlminb(start, nll2, envir = update(fm.nom, doFit = FALSE)) round(fit$par[5:6], 2) @ Thus the log-odds decrease linearly from 1.02 for the first two disease categories by 0.3 per disease category. %% -- Illustrations ------------------------------------------------------------ %% - Virtually all JSS manuscripts list source code along with the generated %% output. The style files provide dedicated environments for this. %% - In R, the environments {Sinput} and {Soutput} - as produced by Sweave() or %% or knitr using the render_sweave() hook - are used (without the need to %% load Sweave.sty). %% - Equivalently, {CodeInput} and {CodeOutput} can be used. %% - The code input should use "the usual" command prompt in the respective %% software system. %% - For R code, the prompt "R> " should be used with "+ " as the %% continuation prompt. %% - Comments within the code chunks should be avoided - these should be made %% within the regular LaTeX text. %% -- Summary/conclusions/discussion ------------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Conclusions} \label{sec:conclusions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This paper has described the class of cumulative link models for the analysis of ordinal data and the implementation of such models in the \proglang{R} package \pkg{ordinal}. It is shown how the package supports model building and assessment of CLMs with scale effects, partial proportional odds, structured thresholds, flexible link functions and how models can be costumized to specific needs. A number of examples have been given illustrating analyses of ordinal data using \code{clm} in practice. The significant flexibility of model structures available in \pkg{ordinal} is in one respect a clear advantage but it can also be a challenge when particular model variants turn out to be unidentifiable. Analytical detection of unidentifiable models could prove very useful in the analysis of ordinal data, but it is, unfortunately, a difficult question that remains a topic of future research. In a wider data analysis perspective, cumulative link models have been described as a very rich model class---a class that sits in between, in a sense, the perhaps the two most important model classes in statistics; linear models and logistic regression models. The greater flexibility of CLMs relative to binary logistic regression models facilitates the ability to check assumptions such as the partial proportional odds assumption. A latent variable interpretation connects cumulative link models to linear models in a natural way and also motivates non-linear structures such as scale effects. In addition to nominal effects and the non-linear scale effects, the ordered nature of the thresholds gives rise to computational challenges that we have described here and addressed in the \pkg{ordinal} package. In addition to computational challenges, practical data analysis with CLMs can also be challenging. In our experience a top-down approach in which a ``full'' model is fitted and gradually simplified is often problematic, not only because this easily leads to unidentifiable models but also because there are many different ways in which models can be reduced or expanded. A more pragmatic approach is often preferred; understanding the data through plots, tables, and even linear models can aid in finding a suitable intermediate ordinal starting model. Attempts to identify a ``correct'' model will also often lead to frustrations; the greater the model framework, the greater the risk that there are multiple models which fit the data (almost) equally well. It is well known statistical wisdom that with enough data many goodness of fit tests become sensitive to even minor deviations of little practical relevance. This is particularly true for tests of partial proportional odds; in the author's experience almost all CLMs on real data show some evidence of non-proportional odds for one or more variables but it is not always the case that models with partial or non-proportional odds are the most useful. Such effects complicate the interpretation and often generalize poorly outside the observed data and models assuming proportional odds or including scale effects are often more appropriate. %% -- Optional special unnumbered sections ------------------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section*{Computational details} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \begin{leftbar} % If necessary or useful, information about certain computational details % such as version numbers, operating systems, or compilers could be included % in an unnumbered section. Also, auxiliary packages (say, for visualizations, % maps, tables, \dots) that are not cited in the main text can be credited here. % \end{leftbar} The results in this paper were obtained using \proglang{R}~\Sexpr{paste(R.Version()[6:7], collapse = ".")} with \pkg{ordinal}, version~\Sexpr{packageVersion("ordinal")}. \proglang{R} itself and all packages used are available from CRAN at \url{https://CRAN.R-project.org/}. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \section*{Acknowledgments} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \begin{leftbar} % % All acknowledgments (note the AE spelling) should be collected in this % unnumbered section before the references. It may contain the usual information % about funding and feedback from colleagues/reviewers/etc. Furthermore, % information such as relative contributions of the authors may be added here % (if any). % \end{leftbar} %% -- Bibliography ------------------------------------------------------------- %% - References need to be provided in a .bib BibTeX database. %% - All references should be made with \cite, \citet, \citep, \citealp etc. %% (and never hard-coded). See the FAQ for details. %% - JSS-specific markup (\proglang, \pkg, \code) should be used in the .bib. %% - Titles in the .bib should be in title case. %% - DOIs should be included where available. \bibliography{clm_article_refs} %% -- Appendix (if any) -------------------------------------------------------- %% - After the bibliography with page break. %% - With proper section titles and _not_ just "Appendix". \newpage \begin{appendix} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{A regularized Newton-Raphson algorithm with step halving} \label{sec:algorithm} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The regularized NR algorithm is an iterative method that produce a sequence of estimates $\bm\psi^{(0)}, \ldots, \bm\psi^{(i)}, \ldots$, where parenthesized superscripts denote iterations. From the $i$th estimate, the $(i+1)$'th estimate is given by % \begin{equation*} \bm\psi^{(i+1)} = \bm\psi^{(i)} - c_1 \bm h^{(i)}, \quad \bm h^{(i)} = \tilde{\bm H}(\bm\psi^{(i)}; \bm y)^{-1} \bm g(\bm\psi^{(i)}; \bm y) \end{equation*} where \begin{equation*} \tilde{\bm H}(\bm\psi^{(i)}; \bm y) = \bm H(\bm\psi^{(i)}; \bm y) + c_2 (c_3 + \min(\bm e^{(i)})) \bm I, \end{equation*} % % where % $\bm h^{(i)}$ is the step of the $i$th iteration, $\bm H(\bm\psi^{(i)} ; \bm y)$ and $\bm g(\bm\psi^{(i)}; \bm y)$ are the Hessian and gradient of the negative log-likelihood function with respect to the parameters evaluated at the current estimates; $\bm e^{(i)}$ is a vector of eigenvalues of $\bm H(\bm\psi^{(i)}; \bm y)$, $\bm h^{(i)}$ is the $i$'th step, $c_1$ is a scalar parameter which controls the step halving, and $c_2$, $c_3$ are scalar parameters which control the regularization of the Hessian. Regularization is only enforced when the Hessian is not positive definite, so $c_2 = 1$ when $\min(\bm e^{(i)}) < \tau$ and zero otherwise, were $\tau$ is an appropriate tolerance. The choice of $c_3$ is to some extent arbitrary (though required positive) and the algorithm in \pkg{ordinal} sets $c_3 = 1$. Step-halving is enforced when the full step $\bm h^{(i)}$ causes a decrease in the likelihood function in which case $c_1$ is consecutively halved, $c_1 = \frac{1}{2}, \frac{1}{4}, \frac{1}{8}, \ldots$ until the step $c_1 \bm h^{(i)}$ is small enough to cause an increase in the likelihood or until the maximum allowed number of consecutive step-halvings has been reached. The algorithm in \pkg{ordinal} also deals with a couple of numerical issues that may occur. For example, the likelihood function may be sufficiently flat that the change in log-likelihood is smaller than what can be represented in double precision, and so, while the new parameters may be closer to the true ML estimates and be associated with a smaller gradient, it is not possible to measure progress by the change in log-likelihood. The NR algorithm in \pkg{ordinal} has two convergence criteria: (1) an absolute criterion requesting that $\max | \bm g(\bm\psi^{(i)}; \bm y) | < \tau_1$ and (2) a relative criterion requesting that $\max | \bm h^{(i)} | < \tau_2$ where the default thresholds are $\tau_1 = \tau_2 = 10^{-6}$. Here the first criterion attempts to establish closeness of $\bm\psi^{(i)}$ to the true ML estimates in absolute terms; the second criterion is an estimate of relative closeness of to the true ML estimates. % Both convergence criteria are needed if both small (e.g., $\approx 0.0001$) and large (e.g., $\approx 1000$) parameter estimates are to be determined accurately with an appropriate number of correct decimals as well as significant digits. The NR algorithm in \pkg{ordinal} attempts to satisfy the absolute criterion first and will then only attempt to satisfy the relative criterion if it can take the full un-regularized NR step and then only for a maximum of 5 steps. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsection{Convergence properties and parameter accuracy} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Convergence to a well-defined optimum is achieved when the gradient of the negative log-likelihood function with respect to the parameters is small and the Hessian is positive definite i.e., having only positive eigenvalues away from zero. % Identifiability problems occur when the likelihood function is flat in directions of one or more parameters (or linear functions of the parameters) while well-defined, i.e., pointy in other directions. It may happen that a parameter is exactly unidentifiable and \code{clm} is in some cases (including rank-deficient design matrices) able to detect this and exclude the parameter from the optimization procedure. In other cases the likelihood is almost flat in one or more directions. These cases are not uncommon in practice and it is not possible to reduce the parameter space before optimizing the model. To measure the degree of empirical identifiability \code{clm} reports the condition number of the Hessian which is the ratio of the largest to the smallest eigenvalue. A large condition number of the Hessian does not necessarily mean there is a problem with the model, but it can be. A small condition number of the Hessian, say smaller than about $10^4$ or $10^6$, on the other hand is a good assurance that a well-defined optimum has been reached. A key problem for optimization methods is when to stop iterating: when have the parameters that determine the optimum of the function been found with sufficient accuracy? The \emph{method independent error estimate} \citep{elden04} provides a way to approximate the error in the parameter estimates. Sufficiently close to the optimum the Newton-Raphson step provides this estimate: \begin{equation*} |\hat{\bm\alpha}^{(i)} - \bm\alpha^*| \lesssim \bm h^{(i)}, \quad \bm h^{(i)} = \bm H(\bm\psi^{(i)}; \bm y)^{-1} \bm g(\bm\psi^{(i)}; \bm y) \end{equation*} where $\bm\alpha^*$ is the exact (but unknown) value of the ML estimate, $\hat{\bm\alpha}^{(i)}$ is the ML estimator of $\bm\alpha$ at the $i$'th iteration and $\bm h^{(i)}$ is the full unregularized NR step at the $i$'th iteration. % Since the gradient and Hessian of the negative log-likelihood function with respect to the parameters is already evaluated and part of the model fit at convergence, it is essentially computationally cost-free to approximate the error in the parameter estimates. Based on the error estimate the number of correctly determined decimals and significant digits is determined for each parameter. The assessment of the number of correctly determined decimals and significant digits is only reliable sufficiently close to the optimum and when the NR algorithm converges without regularization and step-halving. In practice we caution against this assessment if the algorithm did not converge successfully. % % \begin{leftbar} % Appendices can be included after the bibliography (with a page break). Each % section within the appendix should have a proper section title (rather than % just \emph{Appendix}). % % For more technical style details, please check out JSS's style FAQ at % \url{https://www.jstatsoft.org/pages/view/style#frequently-asked-questions} % which includes the following topics: % \begin{itemize} % \item Title vs.\ sentence case. % \item Graphics formatting. % \item Naming conventions. % \item Turning JSS manuscripts into \proglang{R} package vignettes. % \item Trouble shooting. % \item Many other potentially helpful details\dots % \end{itemize} % \end{leftbar} % % % \section[Using BibTeX]{Using \textsc{Bib}{\TeX}} \label{app:bibtex} % % \begin{leftbar} % References need to be provided in a \textsc{Bib}{\TeX} file (\code{.bib}). All % references should be made with \verb|\cite|, \verb|\citet|, \verb|\citep|, % \verb|\citealp| etc.\ (and never hard-coded). This commands yield different % formats of author-year citations and allow to include additional details (e.g., % pages, chapters, \dots) in brackets. In case you are not familiar with these % commands see the JSS style FAQ for details. % % Cleaning up \textsc{Bib}{\TeX} files is a somewhat tedious task -- especially % when acquiring the entries automatically from mixed online sources. However, % it is important that informations are complete and presented in a consistent % style to avoid confusions. JSS requires the following format. % \begin{itemize} % \item JSS-specific markup (\verb|\proglang|, \verb|\pkg|, \verb|\code|) should % be used in the references. % \item Titles should be in title case. % \item Journal titles should not be abbreviated and in title case. % \item DOIs should be included where available. % \item Software should be properly cited as well. For \proglang{R} packages % \code{citation("pkgname")} typically provides a good starting point. % \end{itemize} % \end{leftbar} % \end{appendix} %% ----------------------------------------------------------------------------- \end{document} ordinal/inst/doc/clmm2_tutorial.R0000644000175100001440000002164714660601550016537 0ustar hornikusers### R code from vignette source 'clmm2_tutorial.Rnw' ################################################### ### code chunk number 1: Initialize ################################################### ## Load common packages, functions and set settings: library(ordinal) library(xtable) ## RUN <- FALSE #redo computations and write .RData files ## Change options: op <- options() ## To be able to reset settings options("digits" = 7) options(help_type = "html") ## options("width" = 75) options("SweaveHooks" = list(fig=function() par(mar=c(4,4,.5,0)+.5))) options(continue=" ") ################################################### ### code chunk number 2: clmm2_tutorial.Rnw:152-155 ################################################### data(wine) head(wine) str(wine) ################################################### ### code chunk number 3: clmm2_tutorial.Rnw:176-190 ################################################### data(wine) temp.contact.bottle <- with(wine, temp:contact:bottle)[drop=TRUE] tab <- xtabs(as.numeric(rating) ~ temp.contact.bottle + judge, data=wine) class(tab) <- "matrix" attr(tab, "call") <- NULL mat <- cbind(rep(c("cold", "warm"), each = 4), rep(rep(c("no", "yes"), each=2), 2), 1:8, tab) colnames(mat) <- c("Temperature", "Contact", "Bottle", 1:9) xtab <- xtable(mat) print(xtab, only.contents=TRUE, include.rownames=FALSE, sanitize.text.function = function(x) x) ################################################### ### code chunk number 4: clmm2_tutorial.Rnw:217-219 ################################################### fm1 <- clmm2(rating ~ temp + contact, random=judge, data=wine) fm1 ################################################### ### code chunk number 5: clmm2_tutorial.Rnw:226-229 ################################################### fm2 <- clmm2(rating ~ temp + contact, random=judge, data=wine, Hess=TRUE, nAGQ=10) summary(fm2) ################################################### ### code chunk number 6: clmm2_tutorial.Rnw:265-266 ################################################### exp(coef(fm2)[5]) ################################################### ### code chunk number 7: clmm2_tutorial.Rnw:274-276 ################################################### fm3 <- clmm2(rating ~ temp, random=judge, data=wine, nAGQ=10) anova(fm3, fm2) ################################################### ### code chunk number 8: clmm2_tutorial.Rnw:282-284 ################################################### fm4 <- clm2(rating ~ temp + contact, data=wine) anova(fm4, fm2) ################################################### ### code chunk number 9: clmm2_tutorial.Rnw:295-297 ################################################### pr2 <- profile(fm2, range=c(.1, 4), nSteps=30, trace=0) confint(pr2) ################################################### ### code chunk number 10: profilePlot ################################################### getOption("SweaveHooks")[["fig"]]() plot(pr2) ################################################### ### code chunk number 11: profileFig ################################################### getOption("SweaveHooks")[["fig"]]() plot(pr2) ################################################### ### code chunk number 12: ranefPlot ################################################### getOption("SweaveHooks")[["fig"]]() ci <- fm2$ranef + qnorm(0.975) * sqrt(fm2$condVar) %o% c(-1, 1) ord.re <- order(fm2$ranef) ci <- ci[order(fm2$ranef),] plot(1:9, fm2$ranef[ord.re], axes=FALSE, ylim=range(ci), xlab="Judge", ylab="Judge effect") axis(1, at=1:9, labels = ord.re) axis(2) for(i in 1:9) segments(i, ci[i,1], i, ci[i, 2]) abline(h = 0, lty=2) ################################################### ### code chunk number 13: clmm2_tutorial.Rnw:348-349 ################################################### getOption("SweaveHooks")[["fig"]]() ci <- fm2$ranef + qnorm(0.975) * sqrt(fm2$condVar) %o% c(-1, 1) ord.re <- order(fm2$ranef) ci <- ci[order(fm2$ranef),] plot(1:9, fm2$ranef[ord.re], axes=FALSE, ylim=range(ci), xlab="Judge", ylab="Judge effect") axis(1, at=1:9, labels = ord.re) axis(2) for(i in 1:9) segments(i, ci[i,1], i, ci[i, 2]) abline(h = 0, lty=2) ################################################### ### code chunk number 14: clmm2_tutorial.Rnw:361-362 ################################################### head(cbind(wine, fitted(fm2))) ################################################### ### code chunk number 15: clmm2_tutorial.Rnw:367-368 ################################################### head(cbind(wine, pred=predict(fm2, newdata=wine))) ################################################### ### code chunk number 16: clmm2_tutorial.Rnw:386-388 ################################################### plogis(fm2$Theta[3] - fm2$beta[2]) - plogis(fm2$Theta[2] - fm2$beta[2]) ################################################### ### code chunk number 17: clmm2_tutorial.Rnw:396-397 ################################################### qnorm(0.95) * c(-1, 1) * fm2$stDev ################################################### ### code chunk number 18: clmm2_tutorial.Rnw:402-410 ################################################### pred <- function(eta, theta, cat = 1:(length(theta)+1), inv.link = plogis) { Theta <- c(-1e3, theta, 1e3) sapply(cat, function(j) inv.link(Theta[j+1] - eta) - inv.link(Theta[j] - eta) ) } pred(qnorm(0.05) * fm2$stDev, fm2$Theta) ################################################### ### code chunk number 19: clmm2_tutorial.Rnw:416-434 ################################################### mat <- expand.grid(judge = qnorm(0.95) * c(-1, 0, 1) * fm2$stDev, contact = c(0, fm2$beta[2]), temp = c(0, fm2$beta[1])) pred.mat <- pred(eta=rowSums(mat), theta=fm2$Theta) lab <- paste("contact=", rep(levels(wine$contact), 2), ", ", "temp=", rep(levels(wine$temp), each=2), sep="") par(mfrow=c(2, 2)) for(k in c(1, 4, 7, 10)) { plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") } ################################################### ### code chunk number 20: clmm2_tutorial.Rnw:439-449 ################################################### getOption("SweaveHooks")[["fig"]]() k <- 1 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") ################################################### ### code chunk number 21: clmm2_tutorial.Rnw:451-461 ################################################### getOption("SweaveHooks")[["fig"]]() k <- 4 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") ################################################### ### code chunk number 22: clmm2_tutorial.Rnw:463-473 ################################################### getOption("SweaveHooks")[["fig"]]() k <- 7 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") ################################################### ### code chunk number 23: clmm2_tutorial.Rnw:475-485 ################################################### getOption("SweaveHooks")[["fig"]]() k <- 10 plot(1:5, pred.mat[k,], lty=2, type = "l", ylim=c(0,1), xlab="Bitterness rating scale", axes=FALSE, ylab="Probability", main=lab[ceiling(k/3)], las=1) axis(1); axis(2) lines(1:5, pred.mat[k+1, ], lty=1) lines(1:5, pred.mat[k+2, ], lty=3) legend("topright", c("avg. judge", "5th %-tile judge", "95th %-tile judge"), lty=1:3, bty="n") ################################################### ### code chunk number 24: clmm2_tutorial.Rnw:495-496 ################################################### exp(2*qnorm(0.95) * fm2$stDev) ################################################### ### code chunk number 25: clmm2_tutorial.Rnw:502-503 ################################################### exp(2*qnorm(0.75) * fm2$stDev) ################################################### ### code chunk number 26: misc (eval = FALSE) ################################################### ## ordinal/build/0000755000175100001440000000000014660601550013022 5ustar hornikusersordinal/build/vignette.rds0000644000175100001440000000042114660601550015356 0ustar hornikusers‹ŤOÁNĂ0 M×ұI‰ý@~€ř¦]&»MY“˘4™’”ÂŤ/_q;h%&qěgżççÍ”2"I‘Q iĽ€Â›q2˙2Wĺ–Y/s%˛µ®ľ¸ĽŮúĘ+™ę:}âőmUVŠyů&č˝ÔŻôÁpˇ-ŚĄŹ–KÍ]‹+ś“F#颓ĄAö”—=/ţđŇvúÄYďçĂ[t¤>ylŽn±Lß=Ű)ńߡߊäçOZ,Âé3ÍJá°™"¬$ŕŔłôßEü´\a…[ĆK±š;,ĎďÄG ŽÜ`ŃÄš: Ëf­łOMÓ†ŽrĹ\pŔ)gže…>T‡/é*PŘ?ordinal/man/0000755000175100001440000000000014533322576012505 5ustar hornikusersordinal/man/dropCoef.Rd0000644000175100001440000000275012175705440014534 0ustar hornikusers\name{drop.coef} \alias{drop.coef} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Ensure Full Rank Design Matrix } \description{ Coefficients (columns) are dropped from a design matrix to ensure that it has full rank. } \usage{ drop.coef(X, silent = FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{X}{ a design matrix, e.g., the result of \code{\link{model.matrix}} possibly of less than full column rank, i.e., with redundant parameters. Works for \code{ncol(X) >= 0} and \code{nrow(X) >= 0}. } \item{silent}{ should a message not be issued if X is column rank deficient? } } \details{ Redundant columns of the design matrix are identified with the LINPACK implementation of the \code{\link{qr}} decomposition and removed. The returned design matrix will have \code{qr(X)$rank} columns. } \value{ The design matrix \code{X} without redundant columns. } \author{ Rune Haubo B Christensen } \seealso{ \code{\link{qr}} and \code{\link{lm}} } \examples{ X <- model.matrix( ~ PRODID * DAY, data = soup) ncol(X) newX <- drop.coef(X) ncol(newX) ## Essentially this is being computed: qr.X <- qr(X, tol = 1e-7, LAPACK = FALSE) newX <- X[, qr.X$pivot[1:qr.X$rank], drop = FALSE] ## is newX of full column rank? ncol(newX) == qr(newX)$rank ## the number of columns being dropped: ncol(X) - ncol(newX) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/man/clmm.control.Rd0000644000175100001440000000401013277541507015377 0ustar hornikusers\name{clmm.control} \alias{clmm.control} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Set control parameters for cumulative link mixed models } \description{ Set control parameters for cumulative link mixed models } \usage{ clmm.control(method = c("nlminb", "ucminf", "model.frame"), ..., trace = 0, maxIter = 50, gradTol = 1e-4, maxLineIter = 50, useMatrix = FALSE, innerCtrl = c("warnOnly", "noWarn", "giveError"), checkRanef = c("warn", "error", "message")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{method}{ the optimizer used to maximize the marginal likelihood function. } \item{\dots}{control arguments passed on to the optimizer; see \code{\link[ucminf]{ucminf}} for details. \code{ucminf} for details. } \item{trace}{numerical, if > 0 information is printed about and during the outer optimization process, if < 0 information is also printed about the inner optimization process. Defaults to \code{0}. } \item{maxIter}{the maximum number of Newton updates of the inner optimization. \code{50}. } \item{gradTol}{the maximum absolute gradient of the inner optimization. } \item{maxLineIter}{the maximum number of step halfings allowed if a Newton(-Raphson) step over shoots during the inner optimization. } \item{useMatrix}{if \code{TRUE}, a general implementation of the Laplace approximation using the Matrix package is used, while if \code{FALSE} (default), a C implementation of the Laplace approximation valid only for models with a single random effects term is used when possible. \code{TRUE} is not valid for models fitted with quadrature methods. } \item{innerCtrl}{the use of warnings/errors if the inner optimization fails to converge. } \item{checkRanef}{the use of message/warning/error if there are more random effects than observations. } } \value{ a list of control parameters } \author{ Rune Haubo B Christensen } \seealso{ \code{\link{clmm}} } \keyword{models} ordinal/man/soup.Rd0000755000175100001440000000470011616740137013762 0ustar hornikusers\name{soup} \alias{soup} \title{ Discrimination study of packet soup } \description{ The \code{soup} data frame has 1847 rows and 13 variables. 185 respondents participated in an A-not A discrimination test with sureness. Before experimentation the respondents were familiarized with the reference product and during experimentation, the respondents were asked to rate samples on an ordered scale with six categories given by combinations of (reference, not reference) and (sure, not sure, guess) from 'referene, sure' = 1 to 'not reference, sure' = 6. %given by the levels of the \code{SURENESS} variable. } \usage{ soup } \format{ \describe{ \item{\code{RESP}}{ factor with 185 levels: the respondents in the study. } \item{\code{PROD}}{ factor with 2 levels: index reference and test products. } \item{\code{PRODID}}{ factor with 6 levels: index reference and the five test product variants. } \item{\code{SURENESS}}{ ordered factor with 6 levels: the respondents ratings of soup samples. } \item{\code{DAY}}{ factor with two levels: experimentation was split over two days. } \item{\code{SOUPTYPE}}{ factor with three levels: the type of soup regularly consumed by the respondent. } \item{\code{SOUPFREQ}}{ factor with 3 levels: the frequency with which the respondent consumes soup. } \item{\code{COLD}}{ factor with two levels: does the respondent have a cold? } \item{\code{EASY}}{ factor with ten levels: How easy did the respondent find the discrimation test? 1 = difficult, 10 = easy. } \item{\code{GENDER}}{ factor with two levels: gender of the respondent. } \item{\code{AGEGROUP}}{ factor with four levels: the age of the respondent. } \item{\code{LOCATION}}{ factor with three levels: three different locations where experimentation took place. } %% \item{\code{SEQ}}{ %% integer vector: the sequence at which experimentation took %% place. Numbering restarted at the second day of experimentation. %% } }} \source{ Data are produced by Unilever Research. Permission to publish the data is granted. } \references{ Christensen, R. H. B., Cleaver, G. and Brockhoff, P. B.(2011) Statistical and Thurstonian models for the A-not A protocol with and without sureness. \emph{Food Quality and Preference, 22}, pp. 542-549. } \keyword{datasets} ordinal/man/gumbel.Rd0000644000175100001440000000614013633002525014235 0ustar hornikusers\name{gumbel} \alias{dgumbel} \alias{pgumbel} \alias{qgumbel} \alias{rgumbel} \alias{ggumbel} \title{ The Gumbel Distribution %% ~~function to do ... ~~ } \description{ Density, distribution function, quantile function, random generation, and gradient of density of the extreme value (maximum and minimum) distributions. The Gumbel distribution is also known as the extreme value maximum distribution, the double-exponential distribution and the log-Weibull distribution. %% ~~ A concise (1-5 lines) description of what the function does. ~~ } \usage{ dgumbel(x, location = 0, scale = 1, log = FALSE, max = TRUE) pgumbel(q, location = 0, scale = 1, lower.tail = TRUE, max = TRUE) qgumbel(p, location = 0, scale = 1, lower.tail = TRUE, max = TRUE) rgumbel(n, location = 0, scale = 1, max = TRUE) ggumbel(x, max = TRUE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x,q}{ numeric vector of quantiles. } \item{p}{ vector of probabilities. } \item{n}{ number of observations. } \item{location}{ numeric scalar. } \item{scale}{ numeric scalar. } \item{lower.tail}{ logical; if \code{TRUE} (default), probabilities are \eqn{P[X \leq x]}{P[X <= x]} otherwise, \eqn{P[X > x]}. } \item{log}{ logical; if \code{TRUE}, probabilities p are given as log(p). } \item{max}{ distribution for extreme maxima (default) or minima? The default corresponds to the standard right-skew Gumbel distribution. } } \details{ \code{dgumbel}, \code{pgumbel} and \code{ggumbel} are implemented in C for speed and care is taken that 'correct' results are provided for values of \code{NA}, \code{NaN}, \code{Inf}, \code{-Inf} or just extremely small or large. The distribution functions, densities and gradients are used in the Newton-Raphson algorithms in fitting cumulative link models with \code{\link{clm}} and cumulative link mixed models with \code{\link{clmm}}. } \value{ \code{pgumbel} gives the distribution function, \code{dgumbel} gives the density, \code{ggumbel} gives the gradient of the density, \code{qgumbel} is the quantile function, and \code{rgumbel} generates random deviates. } \references{ \url{https://en.wikipedia.org/wiki/Gumbel_distribution} } \seealso{ Gradients of densities are also implemented for the normal, logistic, cauchy, cf. \code{\link[=gnorm]{gfun}} and the log-gamma distribution, cf. \code{\link{lgamma}}. } \author{ Rune Haubo B Christensen } \examples{ ## Illustrating the symmetry of the distribution functions: pgumbel(5) == 1 - pgumbel(-5, max=FALSE) ## TRUE dgumbel(5) == dgumbel(-5, max=FALSE) ## TRUE ggumbel(5) == -ggumbel(-5, max=FALSE) ## TRUE ## More examples: x <- -5:5 (pp <- pgumbel(x)) qgumbel(pp) dgumbel(x) ggumbel(x) (ppp <- pgumbel(x, max=FALSE)) ## Observe that probabilities close to 0 are more accurately determined than ## probabilities close to 1: qgumbel(ppp, max=FALSE) dgumbel(x, max=FALSE) ggumbel(x, max=FALSE) ## random deviates: set.seed(1) (r1 <- rgumbel(10)) set.seed(1) r2 <- -rgumbel(10, max = FALSE) all(r1 == r2) ## TRUE } \keyword{distribution} ordinal/man/ranef.Rd0000644000175100001440000000533214334205504014060 0ustar hornikusers\name{condVar} \alias{ranef} \alias{condVar} \alias{ranef.clmm} \alias{condVar.clmm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Extract conditional modes and conditional variances from clmm objects } \description{ The ranef function extracts the conditional modes of the random effects from a clmm object. That is, the modes of the distributions for the random effects given the observed data and estimated model parameters. In a Bayesian language they are posterior modes. The conditional variances are computed from the second order derivatives of the conditional distribution of the random effects. Note that these variances are computed at a fixed value of the model parameters and thus do not take the uncertainty of the latter into account. } \usage{ condVar(object, ...) \method{ranef}{clmm}(object, condVar=FALSE, ...) \method{condVar}{clmm}(object, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{a \code{\link{clmm}} object. } \item{condVar}{ an optional logical argument indicating of conditional variances should be added as attributes to the conditional modes. } \item{\dots}{ currently not used by the \code{clmm} methods. } } \details{ The \code{ranef} method returns a list of \code{data.frame}s; one for each distinct grouping factor. Each \code{data.frame} has as many rows as there are levels for that grouping factor and as many columns as there are random effects for each level. For example a model can contain a random intercept (one column) or a random intercept and a random slope (two columns) for the same grouping factor. If conditional variances are requested, they are returned in the same structure as the conditional modes (random effect estimates/predictions). } \value{ The \code{ranef} method returns a list of \code{data.frame}s with the random effects predictions/estimates computed as conditional modes. If \code{condVar = TRUE} a \code{data.frame} with the conditional variances is stored as an attribute on each \code{data.frame} with conditional modes. The \code{condVar} method returns a list of \code{data.frame}s with the conditional variances. It is a convenience function that simply computes the conditional modes and variances, then extracts and returns only the latter. } \author{ Rune Haubo B Christensen } \examples{ fm1 <- clmm(rating ~ contact + temp + (1|judge), data=wine) ## Extract random effect estimates/conditional modes: re <- ranef(fm1, condVar=TRUE) ## Get conditional variances: attr(re$judge, "condVar") ## Alternatively: condVar(fm1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/man/clmOld.Rd0000644000175100001440000003167412176227250014213 0ustar hornikusers\name{clm2} \alias{clm2} \title{Cumulative link models} \description{ A new improved implementation of CLMs is available in \code{\link{clm}}. Fits cumulative link models with an additive model for the location and a multiplicative model for the scale. The function allows for structured thresholds. A popular special case of a CLM is the proportional odds model. In addition to the standard link functions, two flexible link functions, "Arandar-Ordaz" and "log-gamma" are available, where an extra link function parameter provides additional flexibility. A subset of the predictors can be allowed to have nominal rather than ordinal effects. This has been termed "partial proportional odds" when the link is the logistic. } \usage{ clm2(location, scale, nominal, data, weights, start, subset, na.action, contrasts, Hess = TRUE, model, link = c("logistic", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), lambda, doFit = TRUE, control, threshold = c("flexible", "symmetric", "equidistant"), ...) } \arguments{ \item{location}{ a formula expression as for regression models, of the form \code{response ~ predictors}. The response should be a factor (preferably an ordered factor), which will be interpreted as an ordinal response with levels ordered as in the factor. The model must have an intercept: attempts to remove one will lead to a warning and will be ignored. An offset may be used. See the documentation of \code{\link{formula}} for other details. } \item{scale}{ a optional formula expression as for the location part, of the form \code{ ~ predictors}, i.e. with an empty left hand side. An offset may be used. See the documentation of \code{\link{formula}} for other details. } \item{nominal}{ an optional formula of the form \code{ ~ predictors}, i.e. with an empty left hand side. The effects of the predictors in this formula are assumed to nominal. } \item{data}{ an optional data frame in which to interpret the variables occurring in the formulas. } \item{weights}{ optional case weights in fitting. Defaults to 1. } \item{start}{ initial values for the parameters in the format \code{c(alpha, beta, log(zeta), lambda)}. } \item{subset}{ expression saying which subset of the rows of the data should be used in the fit. All observations are included by default. } \item{na.action}{ a function to filter missing data. Applies to terms in all three formulae. } \item{contrasts}{ a list of contrasts to be used for some or all of the factors appearing as variables in the model formula. } \item{Hess}{ logical for whether the Hessian (the inverse of the observed information matrix) should be computed. Use \code{Hess = TRUE} if you intend to call \code{summary} or \code{vcov} on the fit and \code{Hess = FALSE} in all other instances to save computing time. The argument is ignored if \code{method = "Newton"} where the Hessian is always computed and returned. Defaults to \code{TRUE}. } \item{model}{ logical for whether the model frames should be part of the returned object. } \item{link}{link function, i.e. the type of location-scale distribution assumed for the latent distribution. The \code{Aranda-Ordaz} and \code{log-gamma} links add additional flexibility with a link function parameter, \code{lambda}. The \code{Aranda-Ordaz} link (Aranda-Ordaz, 1983) equals the logistic link, when \code{lambda = 1} and approaches the \code{loglog} link when \code{lambda} approaches zero. The \code{log-gamma} link (Genter and Farewell, 1985) equals the \code{loglog} link when \code{lambda = 1}, the \code{probit} link when \code{lambda = 0} and the \code{cloglog} link when \code{lambda = -1}. } \item{lambda}{numerical scalar: the link function parameter. Used in combination with link \code{Aranda-Ordaz} or \code{log-gamma} and otherwise ignored. If lambda is specified, the model is estimated with lambda fixed at this value and otherwise lambda is estimated by ML. For \code{Aranda-Ordaz} lambda has to be positive; \code{> 1e-5} for numerical reasons. } \item{doFit}{logical for whether the model should be fit or the model environment should be returned. } \item{control}{a call to \code{\link{clm2.control}}. } \item{threshold}{specifies a potential structure for the thresholds (cut-points). \code{"flexible"} provides the standard unstructured thresholds, \code{"symmetric"} restricts the distance between the thresholds to be symmetric around the central one or two thresholds for odd or equal numbers or thresholds respectively, and \code{"equidistant"} restricts the distance between consecutive thresholds to the same value. } \item{\dots}{ additional arguments are passed on to \code{\link{clm2.control}} and possibly further on to the optimizer, which can lead to surprising error or warning messages when mistyping arguments etc. } } \details{ There are methods for the standard model-fitting functions, including \code{\link{summary}}, \code{\link{vcov}}, \code{\link[ordinal]{predict}}, \code{\link[=anova.clm2]{anova}}, \code{\link{logLik}}, \code{\link[=profile.clm2]{profile}}, \code{\link[=profile.clm2]{plot.profile}}, \code{\link[=confint.clm2]{confint}}, \code{\link[=update.clm2]{update}}, \code{\link[=addterm.clm2]{dropterm}}, \code{\link[=addterm.clm2]{addterm}}, and an \code{extractAIC} method. The design of the implementation is inspired by an idea proposed by Douglas Bates in the talk "Exploiting sparsity in model matrices" presented at the DSC conference in Copenhagen, July 14 2009. Basically an environment is set up with all the information needed to optimize the likelihood function. Extractor functions are then used to get the value of likelihood at current or given parameter values and to extract current values of the parameters. All computations are performed inside the environment and relevant variables are updated during the fitting process. After optimizer termination relevant variables are extracted from the environment and the remaining are discarded. Some aspects of \code{clm2}, for instance, how starting values are obtained, and of the associated methods are inspired by \code{\link[MASS]{polr}} from package \code{MASS}. } \value{ If \code{doFit = FALSE} the result is an environment representing the model ready to be optimized. If \code{doFit = TRUE} the result is an object of class \code{"clm2"} with the following components: \item{beta}{the parameter estimates of the location part. } \item{zeta}{the parameter estimates of the scale part on the log scale; the scale parameter estimates on the original scale are given by \code{exp(zeta)}. } \item{Alpha}{vector or matrix of the threshold parameters. } \item{Theta}{vector or matrix of the thresholds. } \item{xi}{vector of threshold parameters, which, given a threshold function (e.g. \code{"equidistant"}), and possible nominal effects define the class boundaries, \code{Theta}. } \item{lambda}{the value of lambda if lambda is supplied or estimated, otherwise missing. } \item{coefficients}{the coefficients of the intercepts (\code{theta}), the location (\code{beta}), the scale (\code{zeta}), and the link function parameter (\code{lambda}). } \item{df.residual}{the number of residual degrees of freedoms, calculated using the weights. } \item{fitted.values}{vector of fitted values for each observation. An observation here is each of the scalar elements of the multinomial table and not a multinomial vector. } \item{convergence}{\code{TRUE} if the gradient based convergence criterion is met and \code{FALSE} otherwise. } \item{gradient}{vector of gradients for all the parameters at termination of the optimizer. } \item{optRes}{list with results from the optimizer. The contents of the list depends on the choice of optimizer. } \item{logLik}{the log likelihood of the model at optimizer termination. } \item{Hessian}{if the model was fitted with \code{Hess = TRUE}, this is the Hessian matrix of the parameters at the optimum. } \item{scale}{\code{model.frame} for the scale model. } \item{location}{\code{model.frame} for the location model. } \item{nominal}{\code{model.frame} for the nominal model. } \item{edf}{the (effective) number of degrees of freedom used by the model. } \item{start}{the starting values. } \item{convTol}{convergence tolerance for the maximum absolute gradient of the parameters at termination of the optimizer. } \item{method}{character, the optimizer. } \item{y}{the response variable. } \item{lev}{the names of the levels of the response variable. } \item{nobs}{the (effective) number of observations, calculated as the sum of the weights. } \item{threshold}{character, the threshold function used in the model. } \item{estimLambda}{\code{1} if lambda is estimated in one of the flexible link functions and \code{0} otherwise. } \item{link}{character, the link function used in the model. } \item{call}{the matched call. } \item{contrasts}{contrasts applied to terms in location and scale models. } \item{na.action}{the function used to filter missing data. } } \author{Rune Haubo B Christensen} \references{ Agresti, A. (2002) \emph{Categorical Data Analysis.} Second edition. Wiley. Aranda-Ordaz, F. J. (1983) An Extension of the Proportional-Hazards Model for Grouped Data. \emph{Biometrics}, 39, 109-117. Genter, F. C. and Farewell, V. T. (1985) Goodness-of-link testing in ordinal regression models. \emph{The Canadian Journal of Statistics}, 13(1), 37-44. Christensen, R. H. B., Cleaver, G. and Brockhoff, P. B. (2011) Statistical and Thurstonian models for the A-not A protocol with and without sureness. \emph{Food Quality and Preference, 22}, pp. 542-549. } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) ## A tabular data set: (tab26 <- with(soup, table("Product" = PROD, "Response" = SURENESS))) dimnames(tab26)[[2]] <- c("Sure", "Not Sure", "Guess", "Guess", "Not Sure", "Sure") dat26 <- expand.grid(sureness = as.factor(1:6), prod = c("Ref", "Test")) dat26$wghts <- c(t(tab26)) m1 <- clm2(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logistic") ## print, summary, vcov, logLik, AIC: m1 summary(m1) vcov(m1) logLik(m1) AIC(m1) coef(m1) coef(summary(m1)) ## link functions: m2 <- update(m1, link = "probit") m3 <- update(m1, link = "cloglog") m4 <- update(m1, link = "loglog") m5 <- update(m1, link = "cauchit", start = coef(m1)) m6 <- update(m1, link = "Aranda-Ordaz", lambda = 1) m7 <- update(m1, link = "Aranda-Ordaz") m8 <- update(m1, link = "log-gamma", lambda = 1) m9 <- update(m1, link = "log-gamma") ## nominal effects: mN1 <- clm2(sureness ~ 1, nominal = ~ prod, data = dat26, weights = wghts, link = "logistic") anova(m1, mN1) ## optimizer / method: update(m1, scale = ~ 1, method = "Newton") update(m1, scale = ~ 1, method = "nlminb") update(m1, scale = ~ 1, method = "optim") \dontshow{ update(m1, scale = ~ 1, method = "model.frame") update(m1, location = ~.-prod, scale = ~ 1, nominal = ~ prod, method = "model.frame") } ## threshold functions mT1 <- update(m1, threshold = "symmetric") mT2 <- update(m1, threshold = "equidistant") anova(m1, mT1, mT2) ## Extend example from polr in package MASS: ## Fit model from polr example: if(require(MASS)) { fm1 <- clm2(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) fm1 summary(fm1) ## With probit link: summary(update(fm1, link = "probit")) ## Allow scale to depend on Cont-variable summary(fm2 <- update(fm1, scale =~ Cont)) anova(fm1, fm2) ## which seems to improve the fit } ################################# ## It is possible to fit multinomial models (i.e. with nominal ## effects) as the following example shows: if(require(nnet)) { (hous1.mu <- multinom(Sat ~ 1, weights = Freq, data = housing)) (hous1.clm <- clm2(Sat ~ 1, weights = Freq, data = housing)) ## It is the same likelihood: all.equal(logLik(hous1.mu), logLik(hous1.clm)) ## and the same fitted values: fitHous.mu <- t(fitted(hous1.mu))[t(col(fitted(hous1.mu)) == unclass(housing$Sat))] all.equal(fitted(hous1.clm), fitHous.mu) ## The coefficients of multinom can be retrieved from the clm2-object ## by: Pi <- diff(c(0, plogis(hous1.clm$xi), 1)) log(Pi[2:3]/Pi[1]) ## A larger model with explanatory variables: (hous.mu <- multinom(Sat ~ Infl + Type + Cont, weights = Freq, data = housing)) (hous.clm <- clm2(Sat ~ 1, nominal = ~ Infl + Type + Cont, weights = Freq, data = housing)) ## Almost the same likelihood: all.equal(logLik(hous.mu), logLik(hous.clm)) ## And almost the same fitted values: fitHous.mu <- t(fitted(hous.mu))[t(col(fitted(hous.mu)) == unclass(housing$Sat))] all.equal(fitted(hous.clm), fitHous.mu) all.equal(round(fitted(hous.clm), 5), round(fitHous.mu), 5) } } \keyword{models} ordinal/man/updateOld.Rd0000644000175100001440000000316513633002525014707 0ustar hornikusers\name{update.clm2} \alias{update.clm2} \alias{update.clmm2} \title{Update method for cumulative link models} \description{ Update method for cumulative link models fitted with \code{clm2}. This makes it possible to use e.g. \code{update(obj, location = ~ . - var1, scale = ~ . + var2)} } \usage{ \method{update}{clm2}(object, formula., location, scale, nominal,..., evaluate = TRUE) \method{update}{clmm2}(object, formula., location, scale, nominal,..., evaluate = TRUE) } \arguments{ \item{object}{a \code{\link{clm2}} object. } \item{formula.}{not used---unfortunately this argument is part of the default method. } \item{location}{an optional new formula for the location; see \code{\link{update.formula}} for details. } \item{scale}{an optional new formula for the scale; see \code{\link{update.formula}} for details. } \item{nominal}{an optional new formula for nominal effects; see \code{\link{update.formula}} for details. } \item{\dots}{additional arguments to the call, or arguments with changed values. } \item{evaluate}{if true evaluate the new call else return the call. } } \value{ If \code{evaluate = TRUE} the fitted object is returned, otherwise the updated call. } \author{Rune Haubo B Christensen} \examples{ options(contrasts = c("contr.treatment", "contr.poly")) m1 <- clm2(SURENESS ~ PROD, scale = ~PROD, data = soup, link = "logistic") m2 <- update(m1, link = "probit") m3 <- update(m1, link = "cloglog") m4 <- update(m1, link = "loglog") anova(m1, update(m1, scale = ~.-PROD)) mT1 <- update(m1, threshold = "symmetric") } \keyword{internal} ordinal/man/clmm.controlOld.Rd0000755000175100001440000000322311617247306016042 0ustar hornikusers\name{clmm2.control} \alias{clmm2.control} \title{Set control parameters for cumulative link mixed models} \description{ Set control parameters for cumulative link mixed models } \usage{ clmm2.control(method = c("ucminf", "nlminb", "model.frame"), ..., trace = 0, maxIter = 50, gradTol = 1e-4, maxLineIter = 50, innerCtrl = c("warnOnly", "noWarn", "giveError")) } \arguments{ \item{method}{ the optimizer used to maximize the marginal likelihood function. } \item{\dots}{control arguments passed on to the chosen optimizer; see \code{\link[ucminf]{ucminf}}, \code{\link{optim}}, and \code{\link{nlminb}} for details. } \item{trace}{numerical, if > 0 information is printed about and during the outer optimization process, if < 0 information is also printed about the inner optimization process. Defaults to \code{0}. } \item{maxIter}{the maximum number of Newton updates of the inner optimization. \code{50}. } \item{gradTol}{the maximum absolute gradient of the inner optimization. } \item{maxLineIter}{the maximum number of step halfings allowed if a Newton(-Raphson) step over shoots during the inner optimization. } \item{innerCtrl}{the use of warnings/errors if the inner optimization fails to converge. } } \details{ When the default optimizer, \code{ucminf} is used, the default values of that optimizers control options are changed to \code{grtol = 1e-5} and \code{grad = "central"}. } \value{ a list of control parameters. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{clmm2}} } \keyword{models} ordinal/man/gfun.Rd0000755000175100001440000000375411617032222013731 0ustar hornikusers\name{gfun} \alias{gnorm} \alias{glogis} \alias{gcauchy} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Gradients of common densities %% ~~function to do ... ~~ } \description{ Gradients of common density functions in their standard forms, i.e., with zero location (mean) and unit scale. These are implemented in C for speed and care is taken that the correct results are provided for the argument being \code{NA}, \code{NaN}, \code{Inf}, \code{-Inf} or just extremely small or large. %% ~~ A concise (1-5 lines) description of what the function does. ~~ } \usage{ gnorm(x) glogis(x) gcauchy(x) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ numeric vector of quantiles. } } \details{ The gradients are given by: \itemize{ \item{gnorm: If \eqn{f(x)} is the normal density with mean 0 and spread 1, then the gradient is \deqn{f'(x) = -x f(x)} } \item{glogis: If \eqn{f(x)} is the logistic density with mean 0 and scale 1, then the gradient is \deqn{f'(x) = 2 \exp(-x)^2 (1 + \exp(-x))^{-3} - \exp(-x)(1+\exp(-x))^{-2}} } \item{pcauchy: If \eqn{f(x) = [\pi(1 + x^2)^2]^{-1}}{f(x) =1 / [pi (1 + x^2)^2]} is the cauchy density with mean 0 and scale 1, then the gradient is \deqn{f'(x) = -2x [\pi(1 + x^2)^2]^{-1}}{f'(x) = -2x / [pi (1 + x^2)^2]} } } These gradients are used in the Newton-Raphson algorithms in fitting cumulative link models with \code{\link{clm}} and cumulative link mixed models with \code{\link{clmm}}. } \value{ a numeric vector of gradients. } \seealso{ Gradients of densities are also implemented for the extreme value distribtion (\code{\link[=dgumbel]{gumbel}}) and the the log-gamma distribution (\code{\link[=lgamma]{log-gamma}}). } \author{ Rune Haubo B Christensen } \examples{ x <- -5:5 gnorm(x) glogis(x) gcauchy(x) } \keyword{distribution} ordinal/man/clmm.Rd0000644000175100001440000001572113277541507013733 0ustar hornikusers\name{clmm} \alias{clmm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Cumulative Link Mixed Models } \description{ Fits Cumulative Link Mixed Models with one or more random effects via the Laplace approximation or quadrature methods } \usage{ clmm(formula, data, weights, start, subset, na.action, contrasts, Hess = TRUE, model = TRUE, link = c("logit", "probit", "cloglog", "loglog", "cauchit"), doFit = TRUE, control = list(), nAGQ = 1L, threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) %% also document getNLA(rho, par) here and include examples } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ a two-sided linear formula object describing the fixed-effects part of the model, with the response on the left of a ~ operator and the terms, separated by + operators, on the right. The vertical bar character "|" separates an expression for a model matrix and a grouping factor. } \item{data}{ an optional data frame in which to interpret the variables occurring in the formula. } \item{weights}{ optional case weights in fitting. Defaults to 1. } \item{start}{ optional initial values for the parameters in the format \code{c(alpha, beta, tau)}, where \code{alpha} are the threshold parameters, \code{beta} are the fixed regression parameters and \code{tau} are variance parameters for the random effects on the log scale. } \item{subset}{ expression saying which subset of the rows of the data should be used in the fit. All observations are included by default. } \item{na.action}{ a function to filter missing data. } \item{contrasts}{ a list of contrasts to be used for some or all of the factors appearing as variables in the model formula. } \item{Hess}{ logical for whether the Hessian (the inverse of the observed information matrix) should be computed. Use \code{Hess = TRUE} if you intend to call \code{summary} or \code{vcov} on the fit and \code{Hess = FALSE} in all other instances to save computing time. } \item{model}{ logical for whether the model frames should be part of the returned object. } \item{link}{ link function, i.e. the type of location-scale distribution assumed for the latent distribution. The default \code{"logit"} link gives the proportional odds mixed model. } \item{doFit}{ logical for whether the model should be fit or the model environment should be returned. } \item{control}{ a call to \code{\link{clmm.control}} } \item{nAGQ}{ integer; the number of quadrature points to use in the adaptive Gauss-Hermite quadrature approximation to the likelihood function. The default (\code{1}) gives the Laplace approximation. Higher values generally provide higher precision at the expense of longer computation times, and values between 5 and 10 generally provide accurate maximum likelihood estimates. Negative values give the non-adaptive Gauss-Hermite quadrature approximation, which is generally faster but less accurate than the adaptive version. See the references for further details. Quadrature methods are only available with a single random effects term; the Laplace approximation is always available. } \item{threshold}{ specifies a potential structure for the thresholds (cut-points). \code{"flexible"} provides the standard unstructured thresholds, \code{"symmetric"} restricts the distance between the thresholds to be symmetric around the central one or two thresholds for odd or equal numbers or thresholds respectively, \code{"symmetric2"} restricts the latent mean in the reference group to zero; this means that the central threshold (even no. response levels) is zero or that the two central thresholds are equal apart from their sign (uneven no. response levels), and \code{"equidistant"} restricts the distance between consecutive thresholds to be of the same size. } \item{\dots}{ additional arguments are passed on to \code{\link{clm.control}}. } } \details{ This is a new (as of August 2011) improved implementation of CLMMs. The old implementation is available in \code{\link{clmm2}}. Some features are not yet available in \code{clmm}; for instance scale effects, nominal effects and flexible link functions are currently only available in \code{clmm2}. \code{clmm} is expected to take over \code{clmm2} at some point. There are standard print, summary and anova methods implemented for \code{"clmm"} objects. } \value{ a list containing \item{alpha}{threshold parameters.} \item{beta}{fixed effect regression parameters.} \item{stDev}{standard deviation of the random effect terms.} \item{tau}{\code{log(stDev)} - the scale at which the log-likelihood function is optimized.} \item{coefficients}{the estimated model parameters = \code{c(alpha, beta, tau)}.} \item{control}{List of control parameters as generated by \code{\link{clm.control}}. } \item{Hessian}{Hessian of the model coefficients.} \item{edf}{the estimated degrees of freedom used by the model = \code{length(coefficients)}.} \item{nobs}{\code{sum(weights)}.} \item{n}{length(y).} \item{fitted.values}{fitted values evaluated with the random effects at their conditional modes.} \item{df.residual}{residual degrees of freedom; \code{length(y) - sum(weights)}} \item{tJac}{Jacobian of the threshold function corresponding to the mapping from standard flexible thresholds to those used in the model.} \item{terms}{the terms object for the fixed effects.} \item{contrasts}{contrasts applied to the fixed model terms.} \item{na.action}{the function used to filter missing data.} \item{call}{the matched call.} \item{logLik}{value of the log-likelihood function for the model at the optimum.} \item{Niter}{number of Newton iterations in the inner loop update of the conditional modes of the random effects.} \item{optRes}{list of results from the optimizer.} \item{ranef}{list of the conditional modes of the random effects.} \item{condVar}{list of the conditional variance of the random effects at their conditional modes.} } %% \references{ bla %% %% ~put references to the literature/web site here ~ %% } \author{ Rune Haubo B Christensen } \examples{ ## Cumulative link model with one random term: fmm1 <- clmm(rating ~ temp + contact + (1|judge), data = wine) summary(fmm1) \dontrun{ ## May take a couple of seconds to run this. ## Cumulative link mixed model with two random terms: mm1 <- clmm(SURENESS ~ PROD + (1|RESP) + (1|RESP:PROD), data = soup, link = "probit", threshold = "equidistant") mm1 summary(mm1) ## test random effect: mm2 <- clmm(SURENESS ~ PROD + (1|RESP), data = soup, link = "probit", threshold = "equidistant") anova(mm1, mm2) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/man/clm.anova.Rd0000644000175100001440000000366413633002525014650 0ustar hornikusers\name{anova.clm} %%\alias{anova} \alias{anova.clm} \title{ANODE Tables and Likelihood ratio test of cumulative link models} \description{ Type I, II, and III analysis of deviance (ANODE) tables for cumulative link models and comparison of cumulative link models with likelihood ratio tests. Models may differ by terms in location, scale and nominal formulae, in link, threshold function. } \usage{ \method{anova}{clm}(object, ..., type = c("I", "II", "III", "1", "2", "3")) } \arguments{ \item{object}{a \code{\link{clm}} object. } \item{\dots}{optionally one or more additional \code{\link{clm}} objects. } \item{type}{the type of hypothesis test if \code{anova} is called with a single model; ignored if more than one model is passed to the method. } } \details{ The ANODE table returned when \code{anova} is called with a single model apply only to terms in \code{formula}, that is, terms in \code{nominal} and \code{scale} are ignored. } \value{ An analysis of deviance table based on Wald chi-square test if called with a single model and a comparison of models with likelihood ratio tests if called with more than one model. } \author{Rune Haubo B Christensen} \seealso{ \code{\link[ordinal]{clm}} } \examples{ ## Analysis of deviance tables with Wald chi-square tests: fm <- clm(rating ~ temp * contact, scale=~contact, data=wine) anova(fm, type="I") anova(fm, type="II") anova(fm, type="III") options(contrasts = c("contr.treatment", "contr.poly")) m1 <- clm2(SURENESS ~ PROD, scale = ~PROD, data = soup, link = "logistic") ## anova anova(m1, update(m1, scale = ~.-PROD)) mN1 <- clm2(SURENESS ~ 1, nominal = ~PROD, data = soup, link = "logistic") anova(m1, mN1) anova(m1, update(m1, scale = ~.-PROD), mN1) ## Fit model from polr example: if(require(MASS)) { fm1 <- clm2(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) anova(fm1, update(fm1, scale =~ Cont)) } } \keyword{models} ordinal/man/predict.Rd0000644000175100001440000001136013633002525014414 0ustar hornikusers\name{predict.clm} \alias{predict.clm} \title{Predict Method for CLM fits} \description{ Obtains predictions from a cumulative link model. } \usage{ \method{predict}{clm}(object, newdata, se.fit = FALSE, interval = FALSE, level = 0.95, type = c("prob", "class", "cum.prob", "linear.predictor"), na.action = na.pass, ...) } \arguments{ \item{object}{a fitted object of class inheriting from \code{clm}.} \item{newdata}{optionally, a data frame in which to look for variables with which to predict. Note that all predictor variables should be present having the same names as the variables used to fit the model. If the response variable is present in \code{newdata} predictions are obtained for the levels of the response as given by \code{newdata}. If the response variable is omitted from \code{newdata} predictions are obtained for all levels of the response variable for each of the rows of \code{newdata}. } \item{se.fit}{should standard errors of the predictions be provided? Not applicable and ignored when \code{type = "class"}. } \item{interval}{should confidence intervals for the predictions be provided? Not applicable and ignored when \code{type = "class"}. } \item{level}{the confidence level. } \item{type}{the type of predictions. \code{"prob"} gives probabilities, \code{"class"} gives predicted response class membership defined as highest probability prediction, \code{"cum.prob"} gives cumulative probabilities (see details) and \code{"linear.predictor"} gives predictions on the scale of the linear predictor including the boundary categories. } \item{na.action}{function determining what should be done with missing values in \code{newdata}. The default is to predict \code{NA}. } \item{\dots}{further arguments passed to or from other methods. } } \details{ If \code{newdata} is omitted and \code{type = "prob"} a vector of fitted probabilities are returned identical to the result from \code{fitted}. If \code{newdata} is supplied and the response variable is omitted, then predictions, standard errors and intervals are matrices rather than vectors with the same number of rows as \code{newdata} and with one column for each response class. If \code{type = "class"} predictions are always a vector. If \code{newdata} is omitted, the way missing values in the original fit are handled is determined by the \code{na.action} argument of that fit. If \code{na.action = na.omit} omitted cases will not appear in the residuals, whereas if \code{na.action = na.exclude} they will appear (in predictions, standard errors or interval limits), with residual value \code{NA}. See also \code{\link{napredict}}. If \code{type = "cum.prob"} or \code{type = "linear.predictor"} there will be two sets of predictions, standard errors and intervals; one for j and one for j-1 (in the usual notation) where j = 1, ..., J index the response classes. If newdata is supplied and the response variable is omitted, then \code{predict.clm} returns much the same thing as \code{predict.polr} (matrices of predictions). Similarly, if \code{type = "class"}. If the fit is rank-deficient, some of the columns of the design matrix will have been dropped. Prediction from such a fit only makes sense if newdata is contained in the same subspace as the original data. That cannot be checked accurately, so a warning is issued (cf. \code{\link{predict.lm}}). If a flexible link function is used (\code{Aranda-Ordaz} or \code{log-gamma}) standard errors and confidence intervals of predictions do not take the uncertainty in the link-parameter into account. } \value{ A list containing the following components \item{fit}{predictions or fitted values if \code{newdata} is not supplied. } \item{se.fit}{if \code{se.fit=TRUE} standard errors of the predictions otherwise \code{NULL}. } \item{upr, lwr}{if \code{interval=TRUE} lower and upper confidence limits.} } \author{Rune Haubo B Christensen} \seealso{ \code{\link[ordinal]{clm}}, \code{\link[ordinal]{clmm}}. } \examples{ ## simple model: fm1 <- clm(rating ~ contact + temp, data=wine) summary(fm1) ## Fitted values with standard errors and confidence intervals: predict(fm1, se.fit=TRUE, interval=TRUE) # type="prob" ## class predictions for the observations: predict(fm1, type="class") newData <- expand.grid(temp = c("cold", "warm"), contact = c("no", "yes")) ## Predicted probabilities in all five response categories for each of ## the four cases in newData: predict(fm1, newdata=newData, type="prob") ## now include standard errors and intervals: predict(fm1, newdata=newData, se.fit=TRUE, interval=TRUE, type="prob") } \keyword{models} ordinal/man/clm.controlOld.Rd0000755000175100001440000000332511616455300015662 0ustar hornikusers\name{clm2.control} \alias{clm2.control} \title{Set control parameters for cumulative link models} \description{ Set control parameters for cumulative link models } \usage{ clm2.control(method = c("ucminf", "Newton", "nlminb", "optim", "model.frame"), ..., convTol = 1e-4, trace = 0, maxIter = 100, gradTol = 1e-5, maxLineIter = 10) } \arguments{ \item{method}{ the optimizer used to maximize the likelihood function. \code{"Newton"} only works for models without \code{scale}, structured thresholds and flexible link functions, but is considerably faster than the other optimizers when applicable. \code{model.frame} simply returns a list of model frames with the location, scale and nominal model frames. \code{"optim"} uses the \code{"BFGS"} method. } \item{\dots}{control arguments passed on to the chosen optimizer; see \code{\link[ucminf]{ucminf}}, \code{\link{optim}}, and \code{\link{nlminb}} for details. } \item{convTol}{convergence criterion on the size of the maximum absolute gradient. } \item{trace}{numerical, if > 0 information is printed about and during the optimization process. Defaults to \code{0}. } \item{maxIter}{the maximum number of Newton-Raphson iterations. Defaults to \code{100}. } \item{gradTol}{the maximum absolute gradient. This is the termination criterion and defaults to \code{1e-5}. } \item{maxLineIter}{the maximum number of step halfings allowed if a Newton(-Raphson) step over shoots. Defaults to \code{10}. } } \value{ a list of control parameters. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{clm2}} } \keyword{models} ordinal/man/addtermOld.Rd0000644000175100001440000000655014660601101015042 0ustar hornikusers\name{addterm.clm2} \alias{addterm.clm2} \alias{dropterm.clm2} \title{ Try all one-term additions to and deletions from a model } \description{ Try fitting all models that differ from the current model by adding or deleting a single term from those supplied while maintaining marginality. } \usage{ \method{addterm}{clm2}(object, scope, scale = 0, test = c("none", "Chisq"), k = 2, sorted = FALSE, trace = FALSE, which = c("location", "scale"), \dots) \method{dropterm}{clm2}(object, scope, scale = 0, test = c("none", "Chisq"), k = 2, sorted = FALSE, trace = FALSE, which = c("location", "scale"), \dots) } \arguments{ \item{object}{ A \code{\link{clm2}} object. } \item{scope}{ for \code{addterm}: a formula specifying a maximal model which should include the current one. All additional terms in the maximal model with all marginal terms in the original model are tried. For \code{dropterm}: a formula giving terms which might be dropped. By default, the model formula. Only terms that can be dropped and maintain marginality are actually tried. } \item{scale}{ used in the definition of the AIC statistic for selecting the models. Specifying \code{scale} asserts that the dispersion is known. } \item{test}{ should the results include a test statistic relative to the original model? The Chisq test is a likelihood-ratio test. } \item{k}{ the multiple of the number of degrees of freedom used for the penalty. Only \code{k=2} gives the genuine AIC: \code{k = log(n)} is sometimes referred to as BIC or SBC. } \item{sorted}{ should the results be sorted on the value of AIC? } \item{trace}{ if \code{TRUE} additional information may be given on the fits as they are tried. } \item{which}{should additions or deletions occur in location or scale models? } \item{\dots}{ arguments passed to or from other methods. }} \value{ A table of class \code{"anova"} containing columns for the change in degrees of freedom, AIC and the likelihood ratio statistic. If \code{test = "Chisq"} a column also contains the p-value from the Chisq test. } \details{ The definition of AIC is only up to an additive constant because the likelihood function is only defined up to an additive constant. } \author{Rune Haubo B Christensen} \seealso{ \code{\link[ordinal]{clm2}}, \code{\link[=anova.clm2]{anova}}, \code{\link[MASS]{addterm.default}} and \code{\link[MASS]{dropterm.default}} } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) if(require(MASS)) { ## dropterm, addterm, housing mB1 <- clm2(SURENESS ~ PROD + GENDER + SOUPTYPE, scale = ~ COLD, data = soup, link = "probit", Hess = FALSE) dropterm(mB1, test = "Chi") # or dropterm(mB1, which = "location", test = "Chi") dropterm(mB1, which = "scale", test = "Chi") addterm(mB1, scope = ~.^2, test = "Chi", which = "location") addterm(mB1, scope = ~ . + GENDER + SOUPTYPE, test = "Chi", which = "scale") addterm(mB1, scope = ~ . + AGEGROUP + SOUPFREQ, test = "Chi", which = "location") ## Fit model from polr example: fm1 <- clm2(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) addterm(fm1, ~ Infl + Type + Cont, test= "Chisq", which = "scale") dropterm(fm1, test = "Chisq") } } \keyword{internal} ordinal/man/clm.fit.Rd0000644000175100001440000000756713633002525014334 0ustar hornikusers\name{clm.fit} \alias{clm.fit} \alias{clm.fit.default} \alias{clm.fit.factor} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Fit Cumulative Link Models %% ~~function to do ... ~~ } \description{ A direct fitter of cumulative link models. } \usage{ clm.fit(y, ...) \method{clm.fit}{default}(y, ...) \method{clm.fit}{factor}(y, X, S, N, weights = rep(1, nrow(X)), offset = rep(0, nrow(X)), S.offset = rep(0, nrow(X)), control = list(), start, doFit=TRUE, link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{y}{for the default method a list of model components. For the factor method the response variable; a factor, preferably and ordered factor. } \item{X, S, N}{optional design matrices for the regression parameters, scale parameters and nominal parameters respectively. } \item{weights}{optional case weights. } \item{offset}{an optional offset. } \item{S.offset}{an optional offset for the scale part of the model. } \item{control}{a list of control parameters, optionally a call to \code{\link{clm.control}}. } \item{start}{an optional list of starting values of the form \code{c(alpha, beta, zeta)} for the thresholds and nominal effects (\code{alpha}), regression parameters (\code{beta}) and scale parameters (\code{zeta}). } \item{doFit}{logical for whether the model should be fit or the model environment should be returned. } \item{link}{the link function. } \item{threshold}{the threshold structure, see further at \code{\link{clm}}. } \item{\dots}{currently not used.} } \details{ This function does almost the same thing that \code{\link{clm}} does: it fits a cumulative link model. The main differences are that \code{clm.fit} does not setup design matrices from formulae and only does minimal post processing after parameter estimation. Compared to \code{\link{clm}}, \code{clm.fit} does little to warn the user of any problems with data or model. However, \code{clm.fit} will attempt to identify column rank defecient designs. Any unidentified parameters are indicated in the \code{aliased} component of the fit. \code{clm.fit.factor} is not able to check if all thresholds are increasing when nominal effects are specified since it needs access to the terms object for the nominal model. If the terms object for the nominal model (\code{nom.terms}) is included in \code{y}, the default method is able to chech if all thresholds are increasing. %% In contrast to \code{\link{clm}}, \code{clm.fit} allows non-positive %% weights. } \value{ A list with the following components: \code{aliased, alpha, coefficients, cond.H, convergence, df.residual, edf, fitted.values, gradient, Hessian, logLik, maxGradient, message, n, niter, nobs, tJac, vcov} and optionally \code{beta, zeta} These components are documented in \code{\link{clm}}. } %% \references{ bla %% %% ~put references to the literature/web site here ~ %% } \author{ Rune Haubo B Christensen } %% \note{ bla %% %% ~~further notes~~ %% } %% %% %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ \code{\link{clm}} } \examples{ ## A simple example: fm1 <- clm(rating ~ contact + temp, data=wine) summary(fm1) ## get the model frame containing y and X: mf1 <- update(fm1, method="design") names(mf1) res <- clm.fit(mf1$y, mf1$X) ## invoking the factor method stopifnot(all.equal(coef(res), coef(fm1))) names(res) ## Fitting with the default method: mf1$control$method <- "Newton" res2 <- clm.fit(mf1) stopifnot(all.equal(coef(res2), coef(fm1))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/man/clm.Rd0000644000175100001440000002540214660601150013537 0ustar hornikusers\name{clm} \alias{clm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Cumulative Link Models %% ~~function to do ... ~~ } \description{ Fits cumulative link models (CLMs) such as the propotional odds model. The model allows for various link functions and structured thresholds that restricts the thresholds or cut-points to be e.g., equidistant or symmetrically arranged around the central threshold(s). Nominal effects (partial proportional odds with the logit link) are also allowed. A modified Newton algorithm is used to optimize the likelihood function. %% ~~ A concise (1-5 lines) description of what the function does. ~~ } \usage{ clm(formula, scale, nominal, data, weights, start, subset, doFit = TRUE, na.action, contrasts, model = TRUE, control=list(), link = c("logit", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), threshold = c("flexible", "symmetric", "symmetric2", "equidistant"), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ a formula expression as for regression models, of the form \code{response ~ predictors}. The response should be a factor (preferably an ordered factor), which will be interpreted as an ordinal response with levels ordered as in the factor. The model must have an intercept: attempts to remove one will lead to a warning and will be ignored. An offset may be used. See the documentation of \code{\link{formula}} for other details. } \item{scale}{ an optional formula expression, of the form \code{ ~ predictors}, i.e. with an empty left hand side. An offset may be used. Variables included here will have multiplicative effects and can be interpreted as effects on the scale (or dispersion) of a latent distribution. } \item{nominal}{ an optional formula of the form \code{ ~ predictors}, i.e. with an empty left hand side. The effects of the predictors in this formula are assumed to be nominal rather than ordinal - this corresponds to the so-called partial proportional odds (with the logit link). } \item{data}{ an optional data frame in which to interpret the variables occurring in the formulas. } \item{weights}{ optional case weights in fitting. Defaults to 1. Negative weights are not allowed. } \item{start}{ initial values for the parameters in the format \code{c(alpha, beta, zeta)}, where \code{alpha} are the threshold parameters (adjusted for potential nominal effects), \code{beta} are the regression parameters and \code{zeta} are the scale parameters. } \item{subset}{ expression saying which subset of the rows of the data should be used in the fit. All observations are included by default. } \item{doFit}{ logical for whether the model should be fitted or the model environment should be returned. } \item{na.action}{ a function to filter missing data. Applies to terms in all three formulae. } \item{contrasts}{ a list of contrasts to be used for some or all of the factors appearing as variables in the model formula. } \item{model}{ logical for whether the model frame should be part of the returned object. } \item{control}{ a list of control parameters passed on to \code{\link{clm.control}}. } \item{link}{ link function, i.e., the type of location-scale distribution assumed for the latent distribution. The default \code{"logit"} link gives the proportional odds model. } \item{threshold}{ specifies a potential structure for the thresholds (cut-points). \code{"flexible"} provides the standard unstructured thresholds, \code{"symmetric"} restricts the distance between the thresholds to be symmetric around the central one or two thresholds for odd or equal numbers or thresholds respectively, \code{"symmetric2"} restricts the latent mean in the reference group to zero; this means that the central threshold (even no. response levels) is zero or that the two central thresholds are equal apart from their sign (uneven no. response levels), and \code{"equidistant"} restricts the distance between consecutive thresholds to be of the same size. } \item{\dots}{ additional arguments are passed on to \code{\link{clm.control}}. } } \details{ This is a new (as of August 2011) improved implementation of CLMs. The old implementation is available in \code{\link{clm2}}, but will probably be removed at some point. There are methods for the standard model-fitting functions, including \code{\link{summary}}, \code{\link{anova}}, \code{\link{model.frame}}, \code{\link{model.matrix}}, \code{\link{drop1}}, \code{\link[MASS]{dropterm}}, \code{\link{step}}, \code{\link[MASS]{stepAIC}}, \code{\link{extractAIC}}, \code{\link{AIC}}, \code{\link{coef}}, \code{\link{nobs}}, \code{\link{profile}}, \code{\link{confint}}, \code{\link{vcov}} and \code{\link[=slice.clm]{slice}}. %% \code{slice}. } \value{ If \code{doFit = FALSE} the result is an environment representing the model ready to be optimized. If \code{doFit = TRUE} the result is an object of class \code{"clm"} with the components listed below. Note that some components are only present if \code{scale} and \code{nominal} are used. \item{aliased}{list of length 3 or less with components \code{alpha}, \code{beta} and \code{zeta} each being logical vectors containing alias information for the parameters of the same names. } \item{alpha}{a vector of threshold parameters. } \item{alpha.mat}{(where relevant) a table (\code{data.frame}) of threshold parameters where each row corresponds to an effect in the \code{nominal} formula. } \item{beta}{(where relevant) a vector of regression parameters. } \item{call}{the mathed call. } \item{coefficients}{a vector of coefficients of the form \code{c(alpha, beta, zeta)} } \item{cond.H}{condition number of the Hessian matrix at the optimum (i.e. the ratio of the largest to the smallest eigenvalue). } \item{contrasts}{(where relevant) the contrasts used for the \code{formula} part of the model. } \item{control}{list of control parameters as generated by \code{\link{clm.control}}. } \item{convergence}{convergence code where 0 indicates successful convergence and negative values indicate convergence failure; 1 indicates successful convergence to a non-unique optimum. } \item{edf}{the estimated degrees of freedom, i.e., the number of parameters in the model fit. } \item{fitted.values}{the fitted probabilities. } \item{gradient}{a vector of gradients for the coefficients at the estimated optimum. } \item{Hessian}{the Hessian matrix for the parameters at the estimated optimum. } \item{info}{a table of basic model information for printing. } \item{link}{character, the link function used. } \item{logLik}{the value of the log-likelihood at the estimated optimum. } \item{maxGradient}{the maximum absolute gradient, i.e., \code{max(abs(gradient))}. } \item{model}{if requested (the default), the \code{\link{model.frame}} containing variables from \code{formula}, \code{scale} and \code{nominal} parts. } \item{n}{the number of observations counted as \code{nrow(X)}, where \code{X} is the design matrix. } \item{na.action}{(where relevant) information returned by \code{\link{model.frame}} on the special handling of \code{NA}s. } \item{nobs}{the number of observations counted as \code{sum(weights)}. } \item{nom.contrasts}{(where relevant) the contrasts used for the \code{nominal} part of the model. } \item{nom.terms}{(where relevant) the terms object for the \code{nominal} part. } \item{nom.xlevels}{(where relevant) a record of the levels of the factors used in fitting for the \code{nominal} part. } \item{start}{the parameter values at which the optimization has started. An attribute \code{start.iter} gives the number of iterations to obtain starting values for models where \code{scale} is specified or where the \code{cauchit} link is chosen. } \item{S.contrasts}{(where relevant) the contrasts used for the \code{scale} part of the model. } \item{S.terms}{(where relevant) the terms object for the \code{scale} part. } \item{S.xlevels}{(where relevant) a record of the levels of the factors used in fitting for the \code{scale} part. } \item{terms}{the terms object for the \code{formula} part. } \item{Theta}{(where relevant) a table (\code{data.frame}) of thresholds for all combinations of levels of factors in the \code{nominal} formula. } \item{threshold}{character, the threshold structure used. } \item{tJac}{the transpose of the Jacobian for the threshold structure. } \item{xlevels}{(where relevant) a record of the levels of the factors used in fitting for the \code{formula} part. } \item{y.levels}{the levels of the response variable after removing levels for which all weights are zero. } \item{zeta}{(where relevant) a vector of scale regression parameters. } } \author{ Rune Haubo B Christensen } \examples{ fm1 <- clm(rating ~ temp * contact, data = wine) fm1 ## print method summary(fm1) fm2 <- update(fm1, ~.-temp:contact) anova(fm1, fm2) drop1(fm1, test = "Chi") add1(fm1, ~.+judge, test = "Chi") fm2 <- step(fm1) summary(fm2) coef(fm1) vcov(fm1) AIC(fm1) extractAIC(fm1) logLik(fm1) fitted(fm1) confint(fm1) ## type = "profile" confint(fm1, type = "Wald") pr1 <- profile(fm1) confint(pr1) ## plotting the profiles: par(mfrow = c(2, 2)) plot(pr1, root = TRUE) ## check for linearity par(mfrow = c(2, 2)) plot(pr1) par(mfrow = c(2, 2)) plot(pr1, approx = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE, relative = FALSE) ## other link functions: fm4.lgt <- update(fm1, link = "logit") ## default fm4.prt <- update(fm1, link = "probit") fm4.ll <- update(fm1, link = "loglog") fm4.cll <- update(fm1, link = "cloglog") fm4.cct <- update(fm1, link = "cauchit") anova(fm4.lgt, fm4.prt, fm4.ll, fm4.cll, fm4.cct) ## structured thresholds: fm5 <- update(fm1, threshold = "symmetric") fm6 <- update(fm1, threshold = "equidistant") anova(fm1, fm5, fm6) ## the slice methods: slice.fm1 <- slice(fm1) par(mfrow = c(3, 3)) plot(slice.fm1) ## see more at '?slice.clm' ## Another example: fm.soup <- clm(SURENESS ~ PRODID, data = soup) summary(fm.soup) if(require(MASS)) { ## dropterm, addterm, stepAIC, housing fm1 <- clm(rating ~ temp * contact, data = wine) dropterm(fm1, test = "Chi") addterm(fm1, ~.+judge, test = "Chi") fm3 <- stepAIC(fm1) summary(fm3) ## Example from MASS::polr: fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) summary(fm1) } } \keyword{models} ordinal/man/wine.Rd0000644000175100001440000000443012176227250013731 0ustar hornikusers\name{wine} \alias{wine} \title{ Bitterness of wine } \description{ The \code{wine} data set is adopted from Randall(1989) and from a factorial experiment on factors determining the bitterness of wine. Two treatment factors (temperature and contact) each have two levels. Temperature and contact between juice and skins can be controlled when cruching grapes during wine production. Nine judges each assessed wine from two bottles from each of the four treatment conditions, hence there are 72 observations in all. } \usage{ wine } \format{ \describe{ \item{\code{response}}{ scorings of wine bitterness on a 0---100 continuous scale. } \item{\code{rating}}{ ordered factor with 5 levels; a grouped version of \code{response}. } \item{\code{temp}}{ temperature: factor with two levels. } \item{\code{contact}}{ factor with two levels (\code{"no"} and \code{"yes"}). } \item{\code{bottle}}{ factor with eight levels. } \item{\code{judge}}{ factor with nine levels. } }} \source{ Data are adopted from Randall (1989). } \references{ Randall, J (1989). The analysis of sensory data by generalised linear model. \emph{Biometrical journal 7}, pp. 781--793. Tutz, G. and W. Hennevogl (1996). Random effects in ordinal regression models. \emph{Computational Statistics & Data Analysis 22}, pp. 537--557. } \examples{ head(wine) str(wine) ## Variables 'rating' and 'response' are related in the following way: (intervals <- seq(0,100, by = 20)) all(wine$rating == findInterval(wine$response, intervals)) ## ok ## A few illustrative tabulations: ## Table matching Table 5 in Randall (1989): temp.contact.bottle <- with(wine, temp:contact:bottle)[drop=TRUE] xtabs(response ~ temp.contact.bottle + judge, data = wine) ## Table matching Table 6 in Randall (1989): with(wine, { tcb <- temp:contact:bottle tcb <- tcb[drop=TRUE] table(tcb, rating) }) ## or simply: with(wine, table(bottle, rating)) ## Table matching Table 1 in Tutz & Hennevogl (1996): tab <- xtabs(as.numeric(rating) ~ judge + temp.contact.bottle, data = wine) colnames(tab) <- paste(rep(c("c","w"), each = 4), rep(c("n", "n", "y", "y"), 2), 1:8, sep=".") tab ## A simple model: m1 <- clm(rating ~ temp * contact, data = wine) summary(m1) } \keyword{datasets} ordinal/man/income.Rd0000644000175100001440000000315712176227250014246 0ustar hornikusers\name{income} \alias{income} \title{ Income distribution (percentages) in the Northeast US } \description{ Income distribution (percentages) in the Northeast US in 1960 and 1970 adopted from McCullagh (1980). } \usage{ income } \format{ \describe{ \item{\code{year}}{ year. } \item{\code{pct}}{ percentage of population in income class per year. } \item{\code{income}}{ income groups. The unit is thousands of constant (1973) US dollars. } } } \source{ Data are adopted from McCullagh (1980). } \references{ McCullagh, P. (1980) Regression Models for Ordinal Data. \emph{Journal of the Royal Statistical Society. Series B (Methodological)}, Vol. 42, No. 2., pp. 109-142. } \examples{ print(income) ## Convenient table: (tab <- xtabs(pct ~ year + income, income)) ## small rounding error in 1970: rowSums(tab) ## compare link functions via the log-likelihood: links <- c("logit", "probit", "cloglog", "loglog", "cauchit") sapply(links, function(link) { clm(income ~ year, data=income, weights=pct, link=link)$logLik }) ## a heavy tailed (cauchy) or left skew (cloglog) latent distribution ## is fitting best. ## The data are defined as: income.levels <- c(0, 3, 5, 7, 10, 12, 15) income <- paste(income.levels, c(rep("-", 6), "+"), c(income.levels[-1], ""), sep = "") income <- data.frame(year=factor(rep(c("1960", "1970"), each = 7)), pct = c(6.5, 8.2, 11.3, 23.5, 15.6, 12.7, 22.2, 4.3, 6, 7.7, 13.2, 10.5, 16.3, 42.1), income=factor(rep(income, 2), ordered=TRUE, levels=income)) } \keyword{datasets} ordinal/man/confintOld.Rd0000644000175100001440000001370313633002525015064 0ustar hornikusers\name{confint.clm2} \alias{confint.clm2} \alias{confint.profile.clm2} \alias{profile.clm2} \alias{plot.profile.clm2} \title{ Confidence intervals and profile likelihoods for parameters in cumulative link models } \description{ Computes confidence intervals from the profiled likelihood for one or more parameters in a fitted cumulative link model, or plots the profile likelihood function. } \usage{ \method{confint}{clm2}(object, parm, level = 0.95, whichL = seq_len(p), whichS = seq_len(k), lambda = TRUE, trace = 0, \dots) \method{confint}{profile.clm2}(object, parm = seq_along(Pnames), level = 0.95, \dots) \method{profile}{clm2}(fitted, whichL = seq_len(p), whichS = seq_len(k), lambda = TRUE, alpha = 0.01, maxSteps = 50, delta = LrootMax/10, trace = 0, stepWarn = 8, \dots) \method{plot}{profile.clm2}(x, parm = seq_along(Pnames), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, fig = TRUE, n = 1e3, ..., ylim = NULL) } \arguments{ \item{object}{ a fitted \code{\link{clm2}} object or a \code{profile.clm2} object. } \item{fitted}{ a fitted \code{\link{clm2}} object. } \item{x}{a \code{profile.clm2} object. } \item{parm}{not used in \code{confint.clm2}. For \code{confint.profile.clm2}: a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered. For \code{plot.profile.clm2}: a specification of which parameters the profile likelihood are to be plotted for, either a vector of numbers or a vector of names. If missing, all parameters are considered. } \item{level}{ the confidence level required. } \item{whichL}{ a specification of which \emph{location} parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all location parameters are considered. } \item{whichS}{ a specification of which \emph{scale} parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all scale parameters are considered. } \item{lambda}{ logical. Should profile or confidence intervals be computed for the link function parameter? Only used when one of the flexible link functions are used; see the \code{link}-argument in \code{\link{clm2}}. } \item{trace}{ logical. Should profiling be traced? } \item{alpha}{Determines the range of profiling. By default the likelihood is profiled in the 99\% confidence interval region as determined by the profile likelihood. } \item{maxSteps}{the maximum number of profiling steps in each direction (up and down) for each parameter. } \item{delta}{the length of profiling steps. To some extent this parameter determines the degree of accuracy of the profile likelihood in that smaller values, i.e. smaller steps gives a higher accuracy. Note however that a spline interpolation is used when constructing confidence intervals so fairly long steps can provide high accuracy. } \item{stepWarn}{a warning is issued if the no. steps in each direction (up or down) for a parameter is less than \code{stepWarn} (defaults to 8 steps) because this indicates an unreliable profile. } \item{Log}{should the profile likelihood be plotted on the log-scale? } \item{relative}{should the relative or the absolute likelihood be plotted? } \item{fig}{should the profile likelihood be plotted? } \item{n}{the no. points used in the spline interpolation of the profile likelihood. } \item{ylim}{overrules default y-limits on the plot of the profile likelihood. } \item{\dots}{ additional argument(s) for methods including \code{range} (for the hidden function \code{profileLambda}) that sets the range of values of \code{lambda} at which the likelihood should be profiled for this parameter. } } \value{ \code{confint}: A matrix (or vector) with columns giving lower and upper confidence limits for each parameter. These will be labelled as (1-level)/2 and 1 - (1-level)/2 in \% (by default 2.5\% and 97.5\%). The parameter names are preceded with \code{"loc."} or \code{"sca."} to indicate whether the confidence interval applies to a location or a scale parameter. \code{plot.profile.clm2} invisibly returns the profile object. } \details{ These \code{confint} methods call the appropriate profile method, then finds the confidence intervals by interpolation of the profile traces. If the profile object is already available, this should be used as the main argument rather than the fitted model object itself. In \code{plot.profile.clm2}: at least one of \code{Log} and \code{relative} arguments have to be \code{TRUE}. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{profile}} and \code{\link{confint}} } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) ## More manageable data set: (tab26 <- with(soup, table("Product" = PROD, "Response" = SURENESS))) dimnames(tab26)[[2]] <- c("Sure", "Not Sure", "Guess", "Guess", "Not Sure", "Sure") dat26 <- expand.grid(sureness = as.factor(1:6), prod = c("Ref", "Test")) dat26$wghts <- c(t(tab26)) m1 <- clm2(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logistic") ## profile pr1 <- profile(m1) par(mfrow = c(2, 2)) plot(pr1) m9 <- update(m1, link = "log-gamma") pr9 <- profile(m9, whichL = numeric(0), whichS = numeric(0)) par(mfrow = c(1, 1)) plot(pr9) plot(pr9, Log=TRUE, relative = TRUE) plot(pr9, Log=TRUE, relative = TRUE, ylim = c(-4, 0)) plot(pr9, Log=TRUE, relative = FALSE) ## confint confint(pr9) confint(pr1) ## Extend example from polr in package MASS: ## Fit model from polr example: if(require(MASS)) { fm1 <- clm2(Sat ~ Infl + Type + Cont, scale = ~ Cont, weights = Freq, data = housing) pr1 <- profile(fm1) confint(pr1) par(mfrow=c(2,2)) plot(pr1) } } \keyword{internal} ordinal/man/predictOld.Rd0000644000175100001440000000573113633002525015060 0ustar hornikusers\name{predict.clm2} \alias{predict.clm2} \alias{predict.clmm2} \title{Predict Method for CLM fits} \description{ Obtains predictions from a cumulative link (mixed) model. } \usage{ \method{predict}{clm2}(object, newdata, ...) %% \method{predict}{clmm}(object, newdata, ...) } \arguments{ \item{object}{a fitted object of class inheriting from \code{clm2} including \code{clmm2} objects.} \item{newdata}{optionally, a data frame in which to look for variables with which to predict. Observe that the response variable should also be present.} \item{\dots}{further arguments passed to or from other methods.} } \details{ This method does not duplicate the behavior of \code{predict.polr} in package \code{MASS} which produces a matrix instead of a vector of predictions. The behavior of \code{predict.polr} can be mimiced as shown in the examples. If \code{newdata} is not supplied, the fitted values are obtained. For \code{clmm2} fits this means predictions that are controlled for the observed value of the random effects. If the predictions for a random effect of zero, i.e. an average 'subject', are wanted, the same data used to fit the model should be supplied in the \code{newdata} argument. For \code{clm2} fits those two sets of predictions are identical. } \value{ A vector of predicted probabilities. } \author{Rune Haubo B Christensen} \seealso{ \code{\link[ordinal]{clm2}}, \code{\link[ordinal]{clmm2}}. } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) ## More manageable data set for less voluminous printing: (tab26 <- with(soup, table("Product" = PROD, "Response" = SURENESS))) dimnames(tab26)[[2]] <- c("Sure", "Not Sure", "Guess", "Guess", "Not Sure", "Sure") dat26 <- expand.grid(sureness = as.factor(1:6), prod = c("Ref", "Test")) dat26$wghts <- c(t(tab26)) dat26 m1 <- clm2(sureness ~ prod, scale = ~prod, data = dat26, weights = wghts, link = "logistic") predict(m1) mN1 <- clm2(sureness ~ 1, nominal = ~prod, data = dat26, weights = wghts) predict(mN1) predict(update(m1, scale = ~.-prod)) ################################# ## Mimicing the behavior of predict.polr: if(require(MASS)) { ## Fit model from polr example: fm1 <- clm2(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) predict(fm1) set.seed(123) nlev <- 3 y <- gl(nlev, 5) x <- as.numeric(y) + rnorm(15) fm.clm <- clm2(y ~ x) fm.polr <- polr(y ~ x) ## The equivalent of predict.polr(object, type = "probs"): (pmat.polr <- predict(fm.polr, type = "probs")) ndat <- expand.grid(y = gl(nlev,1), x = x) (pmat.clm <- matrix(predict(fm.clm, newdata = ndat), ncol=nlev, byrow = TRUE)) all.equal(c(pmat.clm), c(pmat.polr), tol = 1e-5) # TRUE ## The equivalent of predict.polr(object, type = "class"): (class.polr <- predict(fm.polr)) (class.clm <- factor(apply(pmat.clm, 1, which.max))) all.equal(class.clm, class.polr) ## TRUE } } \keyword{internal} ordinal/man/clm.control.Rd0000644000175100001440000000530014660601510015211 0ustar hornikusers\name{clm.control} \alias{clm.control} %- Also NEED an '\alias' for EACH other topic documented here. \title{Set control parameters for cumulative link models} \description{ Set control parameters for cumulative link models } \usage{ clm.control(method = c("Newton", "model.frame", "design", "ucminf", "nlminb", "optim"), sign.location = c("negative", "positive"), sign.nominal = c("positive", "negative"), ..., trace = 0L, maxIter = 100L, gradTol = 1e-06, maxLineIter = 15L, relTol = 1e-6, tol = sqrt(.Machine$double.eps), maxModIter = 5L, convergence = c("warn", "silent", "stop", "message")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{method}{\code{"Newton"} fits the model by maximum likelihood and \code{"model.frame"} cause \code{\link{clm}} to return the \code{model.frame}, \code{"design"} causes \code{\link{clm}} to return a list of design matrices etc. that can be used with \code{\link{clm.fit}}. \code{ucminf}, \code{nlminb} and \code{optim} refer to general purpose optimizers. } \item{sign.location}{change sign of the location part of the model. } \item{sign.nominal}{change sign of the nominal part of the model. } \item{trace}{numerical, if \code{> 0} information is printed about and during the optimization process. Defaults to \code{0}. } \item{maxIter}{the maximum number of Newton-Raphson iterations. Defaults to \code{100}. } \item{gradTol}{the maximum absolute gradient; defaults to \code{1e-6}. } \item{maxLineIter}{the maximum number of step halfings allowed if a Newton(-Raphson) step over shoots. Defaults to \code{15}. } \item{relTol}{relative convergence tolerence: relative change in the parameter estimates between Newton iterations. Defaults to \code{1e-6}. } \item{tol}{numerical tolerence on eigenvalues to determine negative-definiteness of Hessian. If the Hessian of a model fit is negative definite, the fitting algorithm did not converge. If the Hessian is singular, the fitting algorithm did converge albeit not to a \emph{unique} optimum, so one or more parameters are not uniquely determined even though the log-likelihood value is. } \item{maxModIter}{the maximum allowable number of consecutive iterations where the Newton step needs to be modified to be a decent direction. Defaults to \code{5}. } \item{convergence}{action to take if the fitting algorithm did not converge. } \item{\dots}{control arguments parsed on to \code{\link[ucminf]{ucminf}}, \code{\link{nlminb}} or \code{\link{optim}}. } } \value{ a list of control parameters. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{clm}} } \keyword{models} ordinal/man/anovaOld.Rd0000644000175100001440000000432513633002525014530 0ustar hornikusers\name{anova.clm2} %%\alias{anova} \alias{anova.clm2} \alias{anova.clmm2} \title{Likelihood ratio test of cumulative link models} \description{ Comparison of cumulative link models in likelihood ratio tests. The models may differ by terms in location, scale and nominal formulae, in link, threshold function and random effect structure. } \usage{ \method{anova}{clm2}(object, ..., test = c("Chisq", "none")) \method{anova}{clmm2}(object, ..., test = c("Chisq", "none")) } \arguments{ \item{object}{a \code{\link{clm2}} object. } \item{\dots}{one or more additional \code{\link{clm2}} objects. } \item{test}{if \code{test = "none"} the p-value for the likelihood ratio test is suppressed. } } \value{ The method returns an object of class \code{Anova} (for printing) and \code{data.frame} with the following elements \item{Model}{character description of the cumulative link models being compared. Location, scale and nominal formulae are separated by "|"s in this order. } \item{Resid.df}{the residual degrees of freedom } \item{-2logLik}{twice the negative log likelihood (proportional to the deviance)} \item{Test}{indication of which models are being compared. } \item{DF}{the difference in the degrees of freedom in the models being compared, i.e. the degrees of freedom for the chi-squared test. } \item{LR stat.}{the likelihood ratio statistic. } \item{Pr(Chi)}{the p-value from the likelihood ratio test. Absent if \code{test = "none"}. } } \author{Rune Haubo B Christensen} \seealso{ \code{\link[ordinal]{clm2}}, \code{\link[=addterm.clm2]{addterm}}, \code{\link[ordinal:addtermOld]{dropterm}} and \code{\link[=anova]{anova.default}} } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) m1 <- clm2(SURENESS ~ PROD, scale = ~PROD, data = soup, link = "logistic") ## anova anova(m1, update(m1, scale = ~.-PROD)) mN1 <- clm2(SURENESS ~ 1, nominal = ~PROD, data = soup, link = "logistic") anova(m1, mN1) anova(m1, update(m1, scale = ~.-PROD), mN1) ## Fit model from polr example: if(require(MASS)) { fm1 <- clm2(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) anova(fm1, update(fm1, scale =~ Cont)) } } \keyword{internal} ordinal/man/clmmOld.Rd0000644000175100001440000002266112176227250014364 0ustar hornikusers\name{clmm2} \alias{clmm2} \title{Cumulative link mixed models} \description{ Fits cumulative link mixed models, i.e. cumulative link models with random effects via the Laplace approximation or the standard and the adaptive Gauss-Hermite quadrature approximation. The functionality in \code{\link{clm2}} is also implemented here. Currently only a single random term is allowed in the location-part of the model. A new implementation is available in \code{\link{clmm}} that allows for more than one random effect. } \usage{ clmm2(location, scale, nominal, random, data, weights, start, subset, na.action, contrasts, Hess = FALSE, model = TRUE, sdFixed, link = c("logistic", "probit", "cloglog", "loglog", "cauchit", "Aranda-Ordaz", "log-gamma"), lambda, doFit = TRUE, control, nAGQ = 1, threshold = c("flexible", "symmetric", "equidistant"), ...) } \arguments{ \item{location}{ as in \code{\link{clm2}}. } \item{scale}{ as in \code{\link{clm2}}. } \item{nominal}{ as in \code{\link{clm2}}. } \item{random}{ a factor for the random effects in the location-part of the model. } \item{data}{ as in \code{\link{clm2}}. } \item{weights}{ as in \code{\link{clm2}}. } \item{start}{ initial values for the parameters in the format \code{c(alpha, beta, log(zeta), lambda, log(stDev))} where \code{stDev} is the standard deviation of the random effects. } \item{subset}{ as in \code{\link{clm2}}. } \item{na.action}{ as in \code{\link{clm2}}. } \item{contrasts}{ as in \code{\link{clm2}}. } \item{Hess}{ logical for whether the Hessian (the inverse of the observed information matrix) should be computed. Use \code{Hess = TRUE} if you intend to call \code{summary} or \code{vcov} on the fit and \code{Hess = FALSE} in all other instances to save computing time. } \item{model}{ as in \code{\link{clm2}}. } \item{sdFixed}{ If \code{sdFixed} is specified (a positive scalar), a model is fitted where the standard deviation for the random term is fixed at the value of \code{sdFixed}. If \code{sdFixed} is left unspecified, the standard deviation of the random term is estimated from data. } \item{link}{ as in \code{\link{clm2}}. } \item{lambda}{ as in \code{\link{clm2}}. } \item{doFit}{ as in \code{\link{clm2}} although it can also be one of \code{c("no", "R" "C")}, where \code{"R"} use the R-implementation for fitting, \code{"C"} (default) use C-implementation for fitting and \code{"no"} behaves as \code{FALSE} and returns the environment. } \item{control}{ a call to \code{\link{clmm2.control}}. } \item{threshold}{ as in \code{\link{clm2}}. } \item{nAGQ}{ the number of quadrature points to be used in the adaptive Gauss-Hermite quadrature approximation to the marginal likelihood. Defaults to \code{1} which leads to the Laplace approximation. An odd number of quadrature points is encouraged and 3, 5 or 7 are usually enough to achive high precision. Negative values give the standard, i.e. non-adaptive Gauss-Hermite quadrature. } \item{\dots}{ additional arguments are passed on to \code{\link{clm2.control}} and possibly further on to the optimizer, which can lead to surprising error or warning messages when mistyping arguments etc. } } \details{ There are methods for the standard model-fitting functions, including \code{\link{summary}}, \code{\link{vcov}}, \code{\link[=profile.clmm2]{profile}}, \code{\link[=profile.clmm2]{plot.profile}}, \code{\link[=confint.profile.clmm2]{confint}}, \code{\link[=anova.clm2]{anova}}, \code{\link{logLik}}, \code{\link[=predict.clmm2]{predict}} and an \code{extractAIC} method. A Newton scheme is used to obtain the conditional modes of the random effects for Laplace and AGQ approximations, and a non-linear optimization is performed over the fixed parameter set to get the maximum likelihood estimates. The Newton scheme uses the observed Hessian rather than the expected as is done in e.g. \code{\link[lme4]{glmer}}, so results from the Laplace approximation for binomial fits should in general be more precise - particularly for other links than the \code{"logistic"}. Core parts of the function are implemented in C-code for speed. The function calls \code{\link{clm2}} to up an environment and to get starting values. } \value{ If \code{doFit = FALSE} the result is an environment representing the model ready to be optimized. If \code{doFit = TRUE} the result is an object of class \code{"clmm2"} with the following components: \item{stDev}{ the standard deviation of the random effects. } \item{Niter}{ the total number of iterations in the Newton updates of the conditional modes of the random effects. } \item{grFac}{ the grouping factor defining the random effects. } \item{nAGQ}{ the number of quadrature points used in the adaptive Gauss-Hermite Quadrature approximation to the marginal likelihood. } \item{ranef}{ the conditional modes of the random effects, sometimes referred to as "random effect estimates". } \item{condVar}{ the conditional variances of the random effects at their conditional modes. } \item{beta}{the parameter estimates of the location part. } \item{zeta}{the parameter estimates of the scale part on the log scale; the scale parameter estimates on the original scale are given by \code{exp(zeta)}. } \item{Alpha}{vector or matrix of the threshold parameters. } \item{Theta}{vector or matrix of the thresholds. } \item{xi}{vector of threshold parameters, which, given a threshold function (e.g. \code{"equidistant"}), and possible nominal effects define the class boundaries, \code{Theta}. } \item{lambda}{the value of lambda if lambda is supplied or estimated, otherwise missing. } \item{coefficients}{the coefficients of the intercepts (\code{theta}), the location (\code{beta}), the scale (\code{zeta}), and the link function parameter (\code{lambda}). } \item{df.residual}{the number of residual degrees of freedoms, calculated using the weights. } \item{fitted.values}{vector of fitted values conditional on the values of the random effects. Use \code{\link[=predict.clm2]{predict}} to get the fitted values for a random effect of zero. An observation here is taken to be each of the scalar elements of the multinomial table and not a multinomial vector. } \item{convergence}{\code{TRUE} if the optimizer terminates wihtout error and \code{FALSE} otherwise. } \item{gradient}{vector of gradients for the unit-variance random effects at their conditional modes. } \item{optRes}{list with results from the optimizer. The contents of the list depends on the choice of optimizer. } \item{logLik}{the log likelihood of the model at optimizer termination. } \item{Hessian}{if the model was fitted with \code{Hess = TRUE}, this is the Hessian matrix of the parameters at the optimum. } \item{scale}{\code{model.frame} for the scale model. } \item{location}{\code{model.frame} for the location model. } \item{nominal}{\code{model.frame} for the nominal model. } \item{edf}{the (effective) number of degrees of freedom used by the model. } \item{start}{the starting values. } \item{method}{character, the optimizer. } \item{y}{the response variable. } \item{lev}{the names of the levels of the response variable. } \item{nobs}{the (effective) number of observations, calculated as the sum of the weights. } \item{threshold}{character, the threshold function used in the model. } \item{estimLambda}{\code{1} if lambda is estimated in one of the flexible link functions and \code{0} otherwise. } \item{link}{character, the link function used in the model. } \item{call}{the matched call. } \item{contrasts}{contrasts applied to terms in location and scale models. } \item{na.action}{the function used to filter missing data. } } \author{Rune Haubo B Christensen} \references{ Agresti, A. (2002) \emph{Categorical Data Analysis.} Second edition. Wiley. } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) ## More manageable data set: dat <- subset(soup, as.numeric(as.character(RESP)) <= 24) dat$RESP <- dat$RESP[drop=TRUE] m1 <- clmm2(SURENESS ~ PROD, random = RESP, data = dat, link="probit", Hess = TRUE, method="ucminf", threshold = "symmetric") m1 summary(m1) logLik(m1) vcov(m1) extractAIC(m1) anova(m1, update(m1, location = SURENESS ~ 1, Hess = FALSE)) anova(m1, update(m1, random = NULL)) ## Use adaptive Gauss-Hermite quadrature rather than the Laplace ## approximation: update(m1, Hess = FALSE, nAGQ = 3) ## Use standard Gauss-Hermite quadrature: update(m1, Hess = FALSE, nAGQ = -7) ################################################################## ## Binomial example with the cbpp data from the lme4-package: if(require(lme4)) { cbpp2 <- rbind(cbpp[,-(2:3)], cbpp[,-(2:3)]) cbpp2 <- within(cbpp2, { incidence <- as.factor(rep(0:1, each=nrow(cbpp))) freq <- with(cbpp, c(incidence, size - incidence)) }) ## Fit with Laplace approximation: fm1 <- clmm2(incidence ~ period, random = herd, weights = freq, data = cbpp2, Hess = 1) summary(fm1) ## Fit with the adaptive Gauss-Hermite quadrature approximation: fm2 <- clmm2(incidence ~ period, random = herd, weights = freq, data = cbpp2, Hess = 1, nAGQ = 7) summary(fm2) } } \keyword{models} ordinal/man/lgamma.Rd0000755000175100001440000000673113654501703014236 0ustar hornikusers\name{lgamma} \alias{plgamma} \alias{dlgamma} \alias{glgamma} %- Also NEED an '\alias' for EACH other topic documented here. \title{ The log-gamma distribution %% ~~function to do ... ~~ } \description{ Density, distribution function and gradient of density for the log-gamma distribution. These are implemented in C for speed and care is taken that the correct results are provided for values of \code{NA}, \code{NaN}, \code{Inf}, \code{-Inf} or just extremely small or large values. The log-gamma is a flexible location-scale distribution on the real line with an extra parameter, \eqn{\lambda}. For \eqn{\lambda = 0} the distribution equals the normal or Gaussian distribution, and for \eqn{\lambda} equal to 1 and -1, the Gumbel minimum and maximum distributions are obtained. %% ~~ A concise (1-5 lines) description of what the function does. ~~ } \usage{ plgamma(q, lambda, lower.tail = TRUE) dlgamma(x, lambda, log = FALSE) glgamma(x, lambda) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x,q}{ numeric vector of quantiles. } \item{lambda}{ numerical scalar } %% \item{location}{ %% numeric scalar. %% } %% \item{scale}{ %% numeric scalar. %% } \item{lower.tail}{ logical; if \code{TRUE} (default), probabilities are \eqn{P[X \leq x]}{P[X <= x]} otherwise, \eqn{P[X > x]}. } \item{log}{ logical; if \code{TRUE}, probabilities p are given as log(p). } } \details{ If \eqn{\lambda < 0} the distribution is right skew, if \eqn{\lambda = 0} the distribution is symmetric (and equals the normal distribution), and if \eqn{\lambda > 0} the distribution is left skew. % % The log-gamma distribution function is defined as \ldots pending. % % The density and gradient of the density are defined as\ldots pending. These distribution functions, densities and gradients are used in the Newton-Raphson algorithms in fitting cumulative link models with \code{\link{clm2}} and cumulative link mixed models with \code{\link{clmm2}} using the log-gamma link. } \value{ \code{plgamma} gives the distribution function, \code{dlgamma} gives the density and \code{glgamma} gives the gradient of the density. } \references{ Genter, F. C. and Farewell, V. T. (1985) Goodness-of-link testing in ordinal regression models. \emph{The Canadian Journal of Statistics}, 13(1), 37-44. } \seealso{ Gradients of densities are also implemented for the normal, logistic, cauchy, cf. \code{\link[=gnorm]{gfun}} and the Gumbel distribution, cf. \code{\link[=dgumbel]{gumbel}}. } \author{ Rune Haubo B Christensen } \examples{ ## Illustrating the link to other distribution functions: x <- -5:5 plgamma(x, lambda = 0) == pnorm(x) all.equal(plgamma(x, lambda = -1), pgumbel(x)) ## TRUE, but: plgamma(x, lambda = -1) == pgumbel(x) plgamma(x, lambda = 1) == pgumbel(x, max = FALSE) dlgamma(x, lambda = 0) == dnorm(x) dlgamma(x, lambda = -1) == dgumbel(x) dlgamma(x, lambda = 1) == dgumbel(x, max = FALSE) glgamma(x, lambda = 0) == gnorm(x) all.equal(glgamma(x, lambda = -1), ggumbel(x)) ## TRUE, but: glgamma(x, lambda = -1) == ggumbel(x) all.equal(glgamma(x, lambda = 1), ggumbel(x, max = FALSE)) ## TRUE, but: glgamma(x, lambda = 1) == ggumbel(x, max = FALSE) ## There is a loss of accuracy, but the difference is very small: glgamma(x, lambda = 1) - ggumbel(x, max = FALSE) ## More examples: x <- -5:5 plgamma(x, lambda = .5) dlgamma(x, lambda = .5) glgamma(x, lambda = .5) } \keyword{distribution} ordinal/man/slice.clm.Rd0000644000175100001440000000701412176227250014641 0ustar hornikusers\name{slice} \alias{slice} \alias{slice.clm} \alias{plot.slice.clm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Slice the likelihood of a clm } \description{ Slice likelihood and plot the slice. This is usefull for illustrating the likelihood surface around the MLE (maximum likelihood estimate) and provides graphics to substantiate (non-)convergence of a model fit. Also, the closeness of a quadratic approximation to the log-likelihood function can be inspected for relevant parameters. A slice is considerably less computationally demanding than a profile. } \usage{ slice(object, ...) \method{slice}{clm}(object, parm = seq_along(par), lambda = 3, grid = 100, quad.approx = TRUE, ...) \method{plot}{slice.clm}(x, parm = seq_along(x), type = c("quadratic", "linear"), plot.mle = TRUE, ask = prod(par("mfcol")) < length(parm) && dev.interactive(), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{for the \code{clm} method an object of class \code{"clm"}, i.e., the result of a call to \code{clm}. } \item{x}{ a \code{slice.clm} object, i.e., the result of \code{slice(clm.object)}. } \item{parm}{ for \code{slice.clm} a numeric or character vector indexing parameters, for \code{plot.slice.clm} only a numeric vector is accepted. By default all parameters are selected. } \item{lambda}{ the number of curvature units on each side of the MLE the slice should cover. } \item{grid}{ the number of values at which to compute the log-likelihood for each parameter. } \item{quad.approx}{ compute and include the quadratic approximation to the log-likelihood function? } \item{type}{ \code{"quadratic"} plots the log-likelihood function which is approximately quadratic, and \code{"linear"} plots the signed square root of the log-likelihood function which is approximately linear. } \item{plot.mle}{ include a vertical line at the MLE (maximum likelihood estimate) when \code{type = "quadratic"}? Ignored for \code{type = "linear"}. } \item{ask}{ logical; if \code{TRUE}, the user is asked before each plot, see \code{\link{par}}\code{(ask=.)}. } \item{\dots}{ further arguments to \code{plot.default} for the plot method. Not used in the slice method. } } %% \details{ bla %% %% ~~ If necessary, more details than the description above ~~ %% } \value{ The \code{slice} method returns a list of \code{data.frame}s with one \code{data.frame} for each parameter slice. Each \code{data.frame} contains in the first column the values of the parameter and in the second column the values of the (positive) log-likelihood \code{"logLik"}. A third column is present if \code{quad.approx = TRUE} and contains the corresponding quadratic approximation to the log-likelihood. The original model fit is included as the attribute \code{"original.fit"}. The \code{plot} method produces a plot of the likelihood slice for each parameter. } \author{ Rune Haubo B Christensen } \examples{ ## fit model: fm1 <- clm(rating ~ contact + temp, data = wine) ## slice the likelihood: sl1 <- slice(fm1) ## three different ways to plot the slices: par(mfrow = c(2,3)) plot(sl1) plot(sl1, type = "quadratic", plot.mle = FALSE) plot(sl1, type = "linear") ## Verify convergence to the optimum: sl2 <- slice(fm1, lambda = 1e-5, quad.approx = FALSE) plot(sl2) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/man/nominal.test.Rd0000644000175100001440000000521412175703724015407 0ustar hornikusers\name{nominal_test} \alias{nominal_test} \alias{scale_test} \alias{nominal_test.clm} \alias{scale_test.clm} \title{ Likelihood ratio tests of model terms in scale and nominal formulae } \description{ Add all model terms to scale and nominal formulae and perform likelihood ratio tests. These tests can be viewed as goodness-of-fit tests. With the logit link, \code{nominal_test} provides likelihood ratio tests of the proportional odds assumption. The \code{scale_test} tests can be given a similar interpretation. } \usage{ nominal_test(object, ...) \method{nominal_test}{clm}(object, scope, trace=FALSE, ...) scale_test(object, ...) \method{scale_test}{clm}(object, scope, trace=FALSE, ...) } \arguments{ \item{object}{for the \code{clm} method an object of class \code{"clm"}, i.e., the result of a call to \code{clm}. } \item{scope}{ a formula or character vector specifying the terms to add to scale or nominal. In \code{nominal_test} terms in scope already in \code{nominal} are ignored. In \code{scale_test} terms in scope already in \code{scale} are ignored. In \code{nominal_test} the default is to add all terms from \code{formula} (location part) and \code{scale} that are not also in \code{nominal}. In \code{scale_test} the default is to add all terms from \code{formula} (location part) that are not also in \code{scale}. } \item{trace}{ if \code{TRUE} additional information may be given on the fits as they are tried. } \item{\dots}{ arguments passed to or from other methods. } } \value{ A table of class \code{"anova"} containing columns for the change in degrees of freedom, AIC, the likelihood ratio statistic and a p-value based on the asymptotic chi-square distribtion of the likelihood ratio statistic under the null hypothesis. } \details{ The definition of AIC is only up to an additive constant because the likelihood function is only defined up to an additive constant. } \author{Rune Haubo B Christensen} \examples{ ## Fit cumulative link model: fm <- clm(rating ~ temp + contact, data=wine) summary(fm) ## test partial proportional odds assumption for temp and contact: nominal_test(fm) ## no evidence of non-proportional odds. ## test if there are signs of scale effects: scale_test(fm) ## no evidence of scale effects. ## tests of scale and nominal effects for the housing data from MASS: if(require(MASS)) { fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) scale_test(fm1) nominal_test(fm1) ## Evidence of multiplicative/scale effect of 'Cont'. This is a breach ## of the proportional odds assumption. } } \keyword{models} ordinal/man/ordinal-package.Rd0000644000175100001440000001103614660601336016011 0ustar hornikusers\name{ordinal-package} \alias{ordinal-package} \alias{ordinal} \docType{package} \title{ Regression Models for Ordinal Data via Cumulative Link (Mixed) Models } \description{ This package facilitates analysis of ordinal (ordered categorical data) via cumulative link models (CLMs) and cumulative link mixed models (CLMMs). Robust and efficient computational methods gives speedy and accurate estimation. A wide range of methods for model fits aids the data analysis. } \details{ \tabular{ll}{ Package: \tab ordinal\cr Type: \tab Package\cr License: \tab GPL (>= 2)\cr LazyLoad: \tab yes\cr } This package implements cumualtive link models and cumulative link models with normally distributed random effects, denoted cumulative link mixed (effects) models. Cumulative link models are also known as ordered regression models, proportional odds models, proportional hazards models for grouped survival times and ordered logit/probit/... models. Cumulative link models are fitted with \code{\link{clm}} and the main features are: \itemize{ \item{A range of standard link functions are available.} \item{In addition to the standard location (additive) effects, scale (multiplicative) effects are also allowed.} \item{nominal effects are allowed for any subset of the predictors --- these effects are also known as partial proportional odds effects when using the logit link.} \item{Restrictions can be imposed on the thresholds/cut-points, e.g., symmetry or equidistance.} \item{A (modified) Newton-Raphson algorithm provides the maximum likelihood estimates of the parameters. The estimation scheme is robust, fast and accurate.} \item{Rank-deficient designs are identified and unidentified coefficients exposed in \code{print} and \code{summary} methods as with \code{\link{glm}}.} \item{A suite of standard methods are available including \code{anova}, \code{add}/\code{drop}-methods, \code{step}, \code{profile}, \code{confint}.} \item{A \code{slice} method facilitates illustration of the likelihood function and a \code{convergence} method summarizes the accuracy of the model estimation.} \item{The \code{predict} method can predict probabilities, response class-predictions and cumulative probabilities, and it provides standard errors and confidence intervals for the predictions.} } Cumulative link mixed models are fitted with \code{\link{clmm}} and the main features are: \itemize{ \item{Any number of random effect terms can be included.} \item{The syntax for the model formula resembles that of \code{\link[lme4]{lmer}} from the \code{lme4} package.} \item{Nested random effects, crossed random effects and partially nested/crossed random effects are allowed.} \item{Estimation is via maximum likelihood using the Laplace approximation or adaptive Gauss-Hermite quadrature (one random effect).} \item{Vector-valued and correlated random effects such as random slopes (random coefficient models) are fitted with the Laplace approximation.} \item{Estimation employs sparse matrix methods from the \code{\link[Matrix]{Matrix}} package. } \item{During model fitting a Newton-Raphson algorithm updates the conditional modes of the random effects a large number of times. The likelihood function is optimized with a general purpose optimizer.} } A major update of the package in August 2011 introduced new and improved implementations of \code{\link{clm}} and \code{\link{clmm}}. The old implementations are available with \code{\link{clm2}} and \code{\link{clmm2}}. At the time of writing there is functionality in \code{clm2} and \code{clmm2} not yet available in \code{clm} and \code{clmm}. This includes flexible link functions (log-gamma and Aranda-Ordaz links) and a profile method for random effect variance parameters in CLMMs. The new implementations are expected to take over the old implementations at some point, hence the latter will eventually be \code{\link[=.Deprecated]{deprecated}} and \code{\link[=.Defunct]{defunct}}. } \author{ Rune Haubo B Christensen Maintainer: Rune Haubo B Christensen } %% \references{ %% ~~ Literature or other references for background information ~~ %% } \keyword{ package } %% \seealso{ %% ~~ Optional links to other man pages, e.g. ~~ %% %% ~~ \code{\link[:-package]{}} ~~ %% } \examples{ ## A simple cumulative link model: fm1 <- clm(rating ~ contact + temp, data=wine) summary(fm1) ## A simple cumulative link mixed model: fmm1 <- clmm(rating ~ contact + temp + (1|judge), data=wine) summary(fmm1) } ordinal/man/convergence.clm.Rd0000644000175100001440000000474012205357257016047 0ustar hornikusers\name{convergence} \alias{convergence} \alias{convergence.clm} \alias{print.convergence.clm} \title{Check convergence of cumulative link models} \description{ Check the accuracy of the parameter estimates of cumulative link models. The number of correct decimals and number of significant digits is given for the maximum likelihood estimates of the parameters in a cumulative link model fitted with \code{\link{clm}}. } \usage{ convergence(object, ...) \method{convergence}{clm}(object, digits = max(3, getOption("digits") - 3), tol = sqrt(.Machine$double.eps), ...) } \arguments{ \item{object}{for the \code{clm} method an object of class \code{"clm"}, i.e., the result of a call to \code{clm}. } \item{digits}{the number of digits in the printed table. } \item{tol}{numerical tolerence to judge if the Hessian is positive definite from its smallest eigenvalue. } \item{...}{arguments to a from methods. Not used by the \code{clm} method. } } \value{ Convergence information. In particular a table where the \code{Error} column gives the numerical error in the parameter estimates. These numbers express how far the parameter estimates in the fitted model are from the true maximum likelihood estimates for this model. The \code{Cor.Dec} gives the number of correct decimals with which the the parameters are determined and the \code{Sig.Dig} gives the number of significant digits with which the parameters are determined. The number denoted \code{logLik.error} is the error in the value of log-likelihood in the fitted model at the parameter values of that fit. An accurate determination of the log-likelihood is essential for accurate likelihood ratio tests in model comparison. } \details{ The number of correct decimals is defined as... The number of significant digits is defined as ... The number of correct decimals and the number of significant digits are determined from the numerical errors in the parameter estimates. The numerical errors are determined from the Method Independent Error Theorem (Elden et al, 2004) and is based on the Newton step evaluated at convergence. } \references{ Elden, L., Wittmeyer-Koch, L. and Nielsen, H. B. (2004) \emph{Introduction to Numerical Computation --- analysis and Matlab illustrations.} Studentliteratur. } %% \seealso{ %% } \examples{ ## Simple model: fm1 <- clm(rating ~ contact + temp, data=wine) summary(fm1) convergence(fm1) } \author{Rune Haubo B Christensen} \keyword{models} ordinal/man/confint.clmmOld.Rd0000644000175100001440000001075012176227250016017 0ustar hornikusers\name{profile.clmm2} \alias{profile.clmm2} \alias{confint.clmm2} \alias{confint.profile.clmm2} \alias{profile.clmm2} \alias{plot.profile.clmm2} \title{ Confidence intervals and profile likelihoods for the standard deviation for the random term in cumulative link mixed models } \description{ Computes confidence intervals from the profiled likelihood for the standard devation for the random term in a fitted cumulative link mixed model, or plots the associated profile likelihood function. } \usage{ \method{confint}{profile.clmm2}(object, parm = seq_along(Pnames), level = 0.95, \dots) \method{profile}{clmm2}(fitted, alpha = 0.01, range, nSteps = 20, trace = 1, \dots) \method{plot}{profile.clmm2}(x, parm = seq_along(Pnames), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, fig = TRUE, n = 1e3, ..., ylim = NULL) } \arguments{ \item{object}{ a fitted \code{profile.clmm2} object. } \item{fitted}{ a fitted \code{\link{clmm2}} object. } \item{x}{a \code{profile.clmm2} object. } \item{parm}{ For \code{confint.profile.clmm2}: a specification of which parameters are to be given confidence intervals, either a vector of numbers or a vector of names. If missing, all parameters are considered. Currently only \code{"stDev"} or \code{1} are supported. For \code{plot.profile.clmm2}: a specification of which parameters the profile likelihood are to be plotted for, either a vector of numbers or a vector of names. If missing, all parameters are considered. Currently only \code{"stDev"} or \code{1} are supported. } \item{level}{ the confidence level required. Observe that the model has to be profiled in the appropriate region; otherwise the limits are \code{NA}. } \item{trace}{ logical. Should profiling be traced? Defaults to \code{TRUE} due to the time consuming nature of the computation. } \item{alpha}{Determines the range of profiling. By default the likelihood is profiled approximately in the 99\% confidence interval region as determined by the Wald approximation. This is usually sufficient for 95\% profile likelihood confidence limits. } \item{range}{if range is specified, this overrules the range computation based on \code{alpha}. \code{range} should be all positive and \code{stDev} is profiled in \code{range(range)}. } \item{nSteps}{the number of points at which to profile the likelihood function. This determines the resolution and accuracy of the profile likelihood function; higher values gives a higher resolution, but also longer computation times. } \item{Log}{should the profile likelihood be plotted on the log-scale? } \item{relative}{should the relative or the absolute likelihood be plotted? } \item{fig}{should the profile likelihood be plotted? } \item{n}{the no. points used in the spline interpolation of the profile likelihood for plotting. } \item{ylim}{overrules default y-limits on the plot of the profile likelihood. } \item{\dots}{ additional argument(s), e.g. graphical parameters for the \code{plot} method. } } \details{ A \code{confint.clmm2} method deliberately does not exist due to the time consuming nature of the computations. The user is required to compute the profile object first and then call \code{confint} on the profile object to obtain profile likelihood confidence intervals. In \code{plot.profile.clm2}: at least one of \code{Log} and \code{relative} arguments have to be \code{TRUE}. } \value{ \code{confint}: A matrix with columns giving lower and upper confidence limits. These will be labelled as (1-level)/2 and 1 - (1-level)/2 in \% (by default 2.5\% and 97.5\%). \code{plot.profile.clm2} invisibly returns the profile object. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{profile}} and \code{\link{confint}} } \examples{ options(contrasts = c("contr.treatment", "contr.poly")) if(require(lme4)) { ## access cbpp data cbpp2 <- rbind(cbpp[,-(2:3)], cbpp[,-(2:3)]) cbpp2 <- within(cbpp2, { incidence <- as.factor(rep(0:1, each=nrow(cbpp))) freq <- with(cbpp, c(incidence, size - incidence)) }) ## Fit with Laplace approximation: fm1 <- clmm2(incidence ~ period, random = herd, weights = freq, data = cbpp2, Hess = 1) pr.fm1 <- profile(fm1) confint(pr.fm1) par(mfrow = c(2,2)) plot(pr.fm1) plot(pr.fm1, Log=TRUE, relative = TRUE) plot(pr.fm1, Log=TRUE, relative = FALSE) } } \keyword{models} ordinal/man/confint.clm.Rd0000644000175100001440000001302213633002525015171 0ustar hornikusers\name{confint} \alias{confint.clm} \alias{confint.profile.clm} \alias{profile.clm} \alias{plot.profile.clm} \title{ Confidence intervals and profile likelihoods for parameters in cumulative link models } \description{ Computes confidence intervals from the profiled likelihood for one or more parameters in a cumulative link model, or plots the profile likelihood. } \usage{ \method{confint}{clm}(object, parm, level = 0.95, type = c("profile", "Wald"), trace = FALSE, ...) \method{confint}{profile.clm}(object, parm = seq_len(nprofiles), level = 0.95, ...) \method{profile}{clm}(fitted, which.beta = seq_len(nbeta), which.zeta = seq_len(nzeta), alpha = 0.001, max.steps = 50, nsteps = 8, trace = FALSE, step.warn = 5, control = list(), ...) \method{plot}{profile.clm}(x, which.par = seq_len(nprofiles), level = c(0.95, 0.99), Log = FALSE, relative = TRUE, root = FALSE, fig = TRUE, approx = root, n = 1e3, ask = prod(par("mfcol")) < length(which.par) && dev.interactive(), ..., ylim = NULL) } \arguments{ \item{object, fitted, x}{ a fitted \code{\link{clm}} object or a \code{profile.clm} object. } \item{parm, which.par, which.beta, which.zeta}{ a numeric or character vector indicating which regression coefficients should be profiled. By default all coefficients are profiled. Ignored for \code{confint.clm} where all parameters are considered. } \item{level}{ the confidence level. For the \code{plot} method a vector of levels for which horizontal lines should be drawn. } \item{type}{ the type of confidence interval. } \item{trace}{ if \code{trace} is \code{TRUE} or positive, information about progress is printed. } \item{Log}{ should the profile likelihood be plotted on the log-scale? } \item{relative}{ should the relative or the absolute likelihood be plotted? } \item{root}{ should the (approximately linear) likelihood root statistic be plotted? } \item{approx}{ should the Gaussian or quadratic approximation to the (log) likelihood be included? } \item{fig}{ should the profile likelihood be plotted? } \item{ask}{ logical; if \code{TRUE}, the user is asked before each plot, see \code{\link{par}}\code{(ask=.)}. } \item{n}{ the no. points used in the spline interpolation of the profile likelihood. } \item{ylim}{overrules default y-limits on the plot of the profile likelihood. } \item{alpha}{ the likelihood is profiled in the 100*(1-alpha)\% confidence region as determined by the profile likelihood. } \item{control}{ a list of control parameters for \code{\link{clm}}. Possibly use \code{\link{clm.control}} to set these. } %%\item{lambda}{ %% logical. Should profile or confidence intervals be computed for the %% link function parameter? Only used when one of the flexible link %% functions are used; see the \code{link}-argument in %% \code{\link{clm}}. %%} \item{max.steps}{ the maximum number of profiling steps in each direction for each parameter. } \item{nsteps}{ the (approximate) number of steps to take in each direction of the profile for each parameter. The step length is determined accordingly assuming a quadratic approximation to the log-likelihood function. The actual number of steps will often be close to \code{nsteps}, but will deviate when the log-likelihood functions is irregular. } \item{step.warn}{ a warning is issued if the number of steps in each direction (up or down) for a parameter is less than \code{step.warn}. If few steps are taken, the profile will be unreliable and derived confidence intervals will be inaccurate. } \item{\dots}{ additional arguments to be parsed on to methods. } } \value{ \code{confint}: A matrix with columns giving lower and upper confidence limits for each parameter. These will be labelled as (1-level)/2 and 1 - (1-level)/2 in \% (by default 2.5\% and 97.5\%). \code{plot.profile.clm} invisibly returns the profile object, i.e., a list of \code{\link{data.frame}}s with an \code{lroot} component for the likelihood root statistic and a matrix \code{par.vals} with values of the parameters. } \details{ These \code{confint} methods call the appropriate profile method, then finds the confidence intervals by interpolation of the profile traces. If the profile object is already available, this should be used as the main argument rather than the fitted model object itself. } \author{Rune Haubo B Christensen} \seealso{ \code{\link{profile}} and \code{\link{confint}} } \examples{ ## Accurate profile likelihood confidence intervals compared to the ## conventional Wald intervals: fm1 <- clm(rating ~ temp * contact, data = wine) confint(fm1) ## type = "profile" confint(fm1, type = "Wald") pr1 <- profile(fm1) confint(pr1) ## plotting the profiles: par(mfrow = c(2, 2)) plot(pr1, root = TRUE) ## check for linearity par(mfrow = c(2, 2)) plot(pr1) par(mfrow = c(2, 2)) plot(pr1, approx = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE) par(mfrow = c(2, 2)) plot(pr1, Log = TRUE, relative = FALSE) ## Not likely to be useful but allowed for completeness: par(mfrow = c(2, 2)) plot(pr1, Log = FALSE, relative = FALSE) ## Example from polr in package MASS: ## Fit model from polr example: if(require(MASS)) { fm1 <- clm(Sat ~ Infl + Type + Cont, weights = Freq, data = housing) pr1 <- profile(fm1) confint(pr1) par(mfrow=c(2,2)) plot(pr1) } } \keyword{models} ordinal/man/VarCorr.Rd0000644000175100001440000000315714334205467014356 0ustar hornikusers\name{VarCorr} \alias{VarCorr} \alias{VarCorr.clmm} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Extract variance and correlation parameters } \description{ The VarCorr function extracts the variance and (if present) correlation parameters for random effect terms in a cumulative link mixed model (CLMM) fitted with \code{clmm}. } \usage{ \method{VarCorr}{clmm}(x, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{a \code{\link{clmm}} object. } \item{\dots}{ currently not used by the \code{clmm} method. } } \details{ The \code{VarCorr} method returns a list of \code{data.frame}s; one for each distinct grouping factor. Each \code{data.frame} has as many rows as there are levels for that grouping factor and as many columns as there are random effects for each level. For example a model can contain a random intercept (one column) or a random intercept and a random slope (two columns) for the same grouping factor. If conditional variances are requested, they are returned in the same structure as the conditional modes (random effect estimates/predictions). } \value{ A list of matrices with variances in the diagonal and correlation parameters in the off-diagonal --- one matrix for each random effects term in the model. Standard deviations are provided as attributes to the matrices. } \author{ Rune Haubo B Christensen } \examples{ fm1 <- clmm(rating ~ contact + temp + (1|judge), data=wine) VarCorr(fm1) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{models} ordinal/DESCRIPTION0000644000175100001440000000305214660604713013435 0ustar hornikusersPackage: ordinal Type: Package Title: Regression Models for Ordinal Data Version: 2023.12-4.1 Date: 2023-12-04 Authors@R: person(given="Rune Haubo Bojesen", family="Christensen", email="rune.haubo@gmail.com", role=c("aut", "cre")) LazyData: true ByteCompile: yes Depends: R (>= 2.13.0), stats, methods Imports: ucminf, MASS, Matrix, numDeriv, nlme Suggests: lme4, nnet, xtable, testthat (>= 0.8), tools Description: Implementation of cumulative link (mixed) models also known as ordered regression models, proportional odds models, proportional hazards models for grouped survival times and ordered logit/probit/... models. Estimation is via maximum likelihood and mixed models are fitted with the Laplace approximation and adaptive Gauss-Hermite quadrature. Multiple random effect terms are allowed and they may be nested, crossed or partially nested/crossed. Restrictions of symmetry and equidistance can be imposed on the thresholds (cut-points/intercepts). Standard model methods are available (summary, anova, drop-methods, step, confint, predict etc.) in addition to profile methods and slice methods for visualizing the likelihood function and checking convergence. License: GPL (>= 2) NeedsCompilation: yes URL: https://github.com/runehaubo/ordinal BugReports: https://github.com/runehaubo/ordinal/issues Packaged: 2024-08-19 08:33:45 UTC; hornik Author: Rune Haubo Bojesen Christensen [aut, cre] Maintainer: Rune Haubo Bojesen Christensen Repository: CRAN Date/Publication: 2024-08-19 09:00:59 UTC