zoo/0000755000175400001440000000000013224636554011266 5ustar zeileisuserszoo/inst/0000755000175400001440000000000013224634153012234 5ustar zeileisuserszoo/inst/TODO0000644000175400001440000000270512377744504012742 0ustar zeileisusers - add to unit tests. There are two styles: (1) in zoo/tests using the R CMD check facilities and (2) in zoo/inst/unitTests using the RUnit package. - benchmark zoo with and without byte compiling to see what the difference is. If this is fast enough the next point may not be needed. Targets of the test would be merge.zoo, rollapply.zoo, etc. e.g in the following the compiler was actually slower: > library(rbenchmark) > library(compiler) > f <- function(x) x*x > fc <- cmpfun(f) > benchmark(f(100), fc(100)) test replications elapsed relative user.self sys.self user.child sys.child 1 f(100) 100 0.00 0 0.00 0 NA NA 2 fc(100) 100 0.02 1 0.01 0 NA NA - xts is like zoo but only works with the half dozen most popular index classes. Some of its functionality is made possible by that but other functionality could be ported to zoo. - consolidate the C code in xts and zoo so that they both use the same C code base. xts already uses a C backend so its more a matter of getting it to use zoo. This really needs more unit tests to be done first. Also the byte compiler needs to be tested to see if it can give similar speedups. If it can there is no point in this one. - a user contributed code to do rolling analysis by time difference rather than number of points. This needs to be gone over. - rewrite merge.zoo which has become a mess zoo/inst/WISHLIST0000644000175400001440000001111713014366765013436 0ustar zeileisusersFEATURES ******** o within.zoo o rollapply.default that does not work via zoo+"unzoo". o rbind.zoo() currently ignores the column names (if any), should behave like rbind.data.frame() in this case. o design: re-think shared design of parameter and panel functions for plotting. o bugs: rollmax, rollmedian give Error for k=1. o zoo methods for dbReadTable and dbWriteTable to facilitate using zoo objects with DBI o register S3 methods and use namespaces so that this works: f <- local(function(x) zoo::index(x), baseenv()) o provide a [<-.zoo method that is fully consistent with [.zoo so that the following works: a <- zoo(matrix(1:10,5,2), 2001:2005) a[I(2003), 2] <- NA (Note: as in window<-.zoo) o preserve attributes in [.zoo and possibly certain other zoo methods o allow plot.zoo to accept a list of zoo objects -- this would be particularly useful in the case of line plots of multiple series with different time bases since NAs are introduced by merging and they can cause the drawn lines to be undesirably broken. (Current workaround is to use na.approx.) o more graphical facilities, e.g., a pairs function, make plot.zoo(x, y) work with multivariate series (plotting every combination of plot(x[,i], y[,j])) o incorporate runmean in package caMassClass o allow log to be specified per plot in plot.zoo o performance enhancement when using arithmetic on zoo objects. Check if they have same index first. o speedup for indexing strictly regular series. Test with is.regular first. set.seed(1) x <- ts(rnorm(5000)) xz <- as.zoo(x) system.time({ ################################ for(i in 1:5000) if (is.regular(x)) x[(i - tsp(x)[1])*frequency(x) + 1] <- 0 else window(xz, start = i, end = i) <- 0 }, gc = TRUE) system.time( for (i in 1:5000) xz[I(i)] <- 0, gc = TRUE ) system.time( for (i in 1:5000) window(xz, start=i, end=i) <- 0, gc = TRUE o zoo() - support zoo data.frame objects (and zoo list objects) - fully support zoo factor objects [limited support already available] - idea: new class "Zoo" that is not a matrix plus attribute but a list with slots "coredata", "index" and "frequency". o merge() - names not processed correctly when retclass = "list" o misc functions - interface to additional statistical routines such as the ones referenced in: http://CRAN.R-project.org/doc/contrib/Ricci-refcard-ts.pdf [Z: with as.ts.zoo() most of the functions work directly by coercing the first argument to "ts"] o QA: regression test suite o make.par.list. names, other than correspondence names, are not allowed on x. Perhaps this should be allowed if m = 1 or perhaps it should be allowed if x is not a list and correspondence names only allowed for lists. o rollapply.default o as of lattice 0.12-14 lattice:::updateList could be replaced with modifyList o read.zoo. The following situations have all appeared on r-help: - the index is of the form yyyy-mm-dd hh:mm:ss at the beginning of each line but sep is whitespace. To handle this read.zoo would have to figure out special cases in which there is whitespace in the format and use two columsn rather than one. I think it would be good enough if it only handled a single whitespace. - header does not have a component corresponding to the index. It would be nice if read.zoo could automatically figure out that situation and handle it. - the date format is yyyy.mm . In that case it would be convenient if it were possible to specify: read.zoo(..., FUN = as.yearmon, format = "%Y.%m") and, in general, if format were passed to FUN if both are specified. o identify.zoo o allow index.column in read.zoo to be a vector in which case it pastes them together so that 9999-99-99 99:99:99 99 99 99 can be read directly as dates and times. o add class= arg to as.zoo.ts o cut/seq/floor/ceiling/round/trunc on yearmon/yearqtr objects INTERFACES ********** o provide fCalendar interface routine to the Rmetrics projects DOCUMENTATION & COMMUNICATION ***************************** o R news article based on the vignette o some data to include with zoo o more examples for the help files o as of R 2.6.0 the example in aggregate.zoo.Rd that uses duplicates(..., fromLast=) could be taken out of the \dontrun{} zoo/inst/CITATION0000644000175400001440000000136712656713317013410 0ustar zeileisuserscitHeader("To cite zoo in publications use:") citEntry(entry="Article", title = "zoo: S3 Infrastructure for Regular and Irregular Time Series", author = personList(as.person("Achim Zeileis"), as.person("Gabor Grothendieck")), journal = "Journal of Statistical Software", year = "2005", volume = "14", number = "6", pages = "1--27", doi = "10.18637/jss.v014.i06", textVersion = paste("Achim Zeileis and Gabor Grothendieck (2005).", "zoo: S3 Infrastructure for Regular and Irregular Time Series.", "Journal of Statistical Software, 14(6), 1-27.", "doi:10.18637/jss.v014.i06") ) zoo/inst/THANKS0000644000175400001440000000162612377744504013166 0ustar zeileisusersThe authors would like to thank the following people for ideas, testing and feedback regarding zoo: Whit Armstrong Matthieu Cormec Spencer Graves Sundar Dorai-Raj Dirk Eddelbuettel Mario Frasca Christian Gunning Nicolas Hirschey Kurt Hornik Roger Koenker Thomas McCallum Murali.MENON@fortisinvestments.com Deepayan Sarkar Enrico Schumann Ajay Shah Jarek Tuszynski Felix Andrews Giles Heywood Trevor Davis zoo/inst/doc/0000755000175400001440000000000013224634151012777 5ustar zeileisuserszoo/inst/doc/zoo-quickref.R0000644000175400001440000002236313224634145015551 0ustar zeileisusers### R code from vignette source 'zoo-quickref.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### library("zoo") library("tseries") online <- FALSE ## if set to FALSE the local copy of ## is used instead of get.hist.quote() options(prompt = "R> ") Sys.setenv(TZ = "GMT") ################################################### ### code chunk number 2: read.zoo ################################################### Sys.setlocale("LC_TIME", "C") inrusd <- read.zoo("demo1.txt", sep = "|", format="%d %b %Y") ################################################### ### code chunk number 3: read.table ################################################### tmp <- read.table("demo2.txt", sep = ",") z <- zoo(tmp[, 3:4], as.Date(as.character(tmp[, 2]), format="%d %b %Y")) colnames(z) <- c("Nifty", "Junior") ################################################### ### code chunk number 4: extract dates ################################################### time(z) ################################################### ### code chunk number 5: start and end ################################################### start(z) end(inrusd) ################################################### ### code chunk number 6: convert to plain matrix ################################################### plain <- coredata(z) str(plain) ################################################### ### code chunk number 7: intersection ################################################### m <- merge(inrusd, z, all = FALSE) ################################################### ### code chunk number 8: union ################################################### m <- merge(inrusd, z) ################################################### ### code chunk number 9: merge with lag ################################################### merge(inrusd, lag(inrusd, -1)) ################################################### ### code chunk number 10: plotting1 ################################################### plot(m) ################################################### ### code chunk number 11: plotting2 ################################################### plot(m[, 2:3], plot.type = "single", col = c("red", "blue"), lwd = 2) ################################################### ### code chunk number 12: select range of dates ################################################### window(z, start = as.Date("2005-02-15"), end = as.Date("2005-02-28")) ################################################### ### code chunk number 13: select one date ################################################### m[as.Date("2005-03-10")] ################################################### ### code chunk number 14: impute NAs by interpolation ################################################### interpolated <- na.approx(m) ################################################### ### code chunk number 15: impute NAs by LOCF ################################################### m <- na.locf(m) m ################################################### ### code chunk number 16: compute returns ################################################### prices2returns <- function(x) 100*diff(log(x)) ################################################### ### code chunk number 17: column-wise returns ################################################### r <- prices2returns(m) ################################################### ### code chunk number 18: rolling standard deviations ################################################### rollapply(r, 10, sd) ################################################### ### code chunk number 19: last day of month ################################################### prices2returns(aggregate(m, as.yearmon, tail, 1)) ################################################### ### code chunk number 20: last day of week ################################################### nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4) / 7) + as.Date(5-4) prices2returns(aggregate(na.locf(m), nextfri, tail, 1)) ################################################### ### code chunk number 21: four second mark ################################################### zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969, 1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03, 1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073 ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo") to4sec <- function(x) as.POSIXct(4*ceiling(as.numeric(x)/4), origin = "1970-01-01") aggregate(zsec, to4sec, tail, 1) ################################################### ### code chunk number 22: one second grid ################################################### # tmp is zsec with time discretized into one second bins tmp <- zsec st <- start(tmp) Epoch <- st - as.numeric(st) time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch # find index of last value in each one second interval ix <- !duplicated(time(tmp), fromLast = TRUE) # merge with grid merge(tmp[ix], zoo(, seq(start(tmp), end(tmp), "sec"))) # Here is a function which generalizes the above: intraday.discretise <- function(b, Nsec) { st <- start(b) time(b) <- Nsec * as.integer(time(b)+1e-7) %/% Nsec + st - as.numeric(st) ix <- !duplicated(time(b), fromLast = TRUE) merge(b[ix], zoo(, seq(start(b), end(b), paste(Nsec, "sec")))) } intraday.discretise(zsec, 1) ################################################### ### code chunk number 23: tseries ################################################### library("tseries") ################################################### ### code chunk number 24: data handling if offline ################################################### if(online) { sunw <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31") sunw2 <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31", compression = "m", quote = "Close") eur.usd <- get.hist.quote(instrument = "EUR/USD", provider = "oanda", start = "2004-01-01", end = "2004-12-31") save(sunw, sunw2, eur.usd, file = "sunw.rda") } else { load("sunw.rda") } ################################################### ### code chunk number 25: get.hist.quote daily series (eval = FALSE) ################################################### ## sunw <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31") ################################################### ### code chunk number 26: get.hist.quote monthly series (eval = FALSE) ################################################### ## sunw2 <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31", ## compression = "m", quote = "Close") ################################################### ### code chunk number 27: change index to yearmon ################################################### time(sunw2) <- as.yearmon(time(sunw2)) ################################################### ### code chunk number 28: compute same series via aggregate ################################################### sunw3 <- aggregate(sunw[, "Close"], as.yearmon, tail, 1) ################################################### ### code chunk number 29: compute returns ################################################### r <- prices2returns(sunw3) ################################################### ### code chunk number 30: get.hist.quote oanda (eval = FALSE) ################################################### ## eur.usd <- get.hist.quote(instrument = "EUR/USD", provider = "oanda", start = "2004-01-01", end = "2004-12-31") ################################################### ### code chunk number 31: is.weekend convenience function ################################################### is.weekend <- function(x) ((as.numeric(x)-2) %% 7) < 2 ################################################### ### code chunk number 32: omit weekends ################################################### eur.usd <- eur.usd[!is.weekend(time(eur.usd))] ################################################### ### code chunk number 33: is.weekend based on POSIXlt ################################################### is.weekend <- function(x) { x <- as.POSIXlt(x) x$wday > 5 | x$wday < 1 } ################################################### ### code chunk number 34: summaries ################################################### date1 <- seq(as.Date("2001-01-01"), as.Date("2002-12-1"), by = "day") len1 <- length(date1) set.seed(1) # to make it reproducible data1 <- zoo(rnorm(len1), date1) # quarterly summary data1q.mean <- aggregate(data1, as.yearqtr, mean) data1q.sd <- aggregate(data1, as.yearqtr, sd) head(cbind(mean = data1q.mean, sd = data1q.sd), main = "Quarterly") # weekly summary - week ends on tuesday # Given a date find the next Tuesday. # Based on formula in Prices and Returns section. nexttue <- function(x) 7 * ceiling(as.numeric(x - 2 + 4)/7) + as.Date(2 - 4) data1w <- cbind( mean = aggregate(data1, nexttue, mean), sd = aggregate(data1, nexttue, sd) ) head(data1w) ### ALTERNATIVE ### # Create function ag like aggregate but takes vector of # function names. FUNs <- c(mean, sd) ag <- function(z, by, FUNs) { f <- function(f) aggregate(z, by, f) do.call(cbind, sapply(FUNs, f, simplify = FALSE)) } data1q <- ag(data1, as.yearqtr, c("mean", "sd")) data1w <- ag(data1, nexttue, c("mean", "sd")) head(data1q) head(data1w) zoo/inst/doc/zoo-quickref.pdf0000644000175400001440000022703513224636554016132 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3892 /Filter /FlateDecode /N 86 /First 708 >> stream x[YWH~_Q4JM>s4[ 2aVb,Z!wKUnݺ-d&dIf*0rBaeV,bQ䳀"͂B aPW,0>aHhX`C," L BgB@ -Љbd!:q0N3+ B?duˤ%IEVb0Sb2X``ѩ6!(s!3a)Fa>"2Lqj  iJ2"Ŕb@E("_YYj@TD@@ZP'r`M4Ȉ&Ӄ}0'`a R P T\Ay'0!,&C Ð !A& Cb;BI`B@b@O$#ɁnȒoYZ’ d%$Q WQ[@7*7IE̬D1davUVNnƷ0~]w 60ٳ-;_`^I:Jɯl7>ŀ<+,MߞJE"a϶~`}+?G#I!4b )2t8)n zV/|Rc ]lv2)?}x>"u<4[Tɹ[ 玒3byvZAOCkLQ,I1(#(6mwte8̓3&ӝd$~Vޜ(X9QԘdNBY:.2jcvyExn/SlcX'h$@ѰZ.LWgx,Dp"Mr+LQ#^AN*QOjQA h4`VSA6pȺYΓ>g)õ#JG:#ss{E/$_8﵄r|Pu>'!lztoBAA2)aK9R""@MnIaO0^_̽}t{ITvܕOiyڎ  }mL%|H%Z]4 2`{a(Ēeh酔  ,OR|$W`OkS/.,5񷊲]1(0,E(,E]0 [wj1NmDE B+IM@X Eu ? (G_#qaE>M Tēq旭MA|g<xc| >uqئˣjڒHBb;BcLp԰tdtP  z,+EZV/¦> 8V=]aHC! +)6ߍB6U5mIqFQCd!-CeZHS՗B@\P&e;%tAqڐ)kC(ZL+B=*t{n{-f;y[D%A8A t mԈ;Y2ZDwS݅s9 ̽DHcBn. a!Ynv+ n#7IK6j{ʥl[6콲#ۛ{{N[aAt+#} . 0_Қ=^VB~FM ݝe\@`-ҸU_k'ob^VguYJ)jEՍ2I܈r{JEE{xmm?|q#i^Թpƕ=fC?Y, ]gp-q0m=$e;me4n~`ٯ?+UC.ĻVCl? ㇭~t߸D4LD!|t0hr4i%SYTNF?#s눌B]1^[n٫) T[ye[y[V{+MEʏG??ooPDuU]UJ +x<?oeOSM심ܷ O:?K0f j^xa.pM-مQ2,xzyb j4x<ρȐLk?P^ K%A6:(Iy>4/tTd_0qߦc//j@ e,Byq0X ֋pʛ}8ы<s}&B1* 5|qQ j%hы+9yql9>Gֆmc_Z/y|gz\F͍*1m'$A-Y}>!W[.zCg_OkIl|ޤ⻺G;7-kǑxR'Stթu 8endstream endobj 88 0 obj << /Subtype /XML /Type /Metadata /Length 1675 >> stream GPL Ghostscript 9.22 irregular time series, daily data, weekly data, returns 2018-01-08T10:22:50+01:00 2018-01-08T10:22:50+01:00 LaTeX with hyperref package zoo Quick ReferenceAjay Shah, Achim Zeileis, Gabor Grothendieck endstream endobj 89 0 obj << /Filter /FlateDecode /Length 4438 >> stream x[$q18Hqi HD6,i 8ogv;Au׃l{9{ ],WrLL_ɿ|p2mN~8Q&vLrvszyŸV~&mVisz{v7&ҰtIy~wHIKJF!NHr;S i7~,9iJf~3!+}JI) eTn0MΗic';Wr4y3ʢsY)4fg-Y(& $S: 3q`i դ‚4%E76;eFx^7>;Хh' q1 w!@'1R5$MCLr8QfUj_ hvix!3ĐbD<S!&>\?M:isz<&NL6ʭ%u9;`[ ֫&8""{YsQq^۞u)A7IY*hAR6ymp˦倝?׵َ6l-NYZgw^A4Hڦ#vf6H'258fr_p=%,>$8ˁf[CR. ֌p>gs= "Wfa\(!Cq]| sisDf9&Pj@Y@DԜU {T%^ UKqjBlrwN:) 1r oMO0C+%N_%xCA 4U>3 k] @`цAؚadU*vvz剁nI0ɪӺo`#lHs` :x/iXc#dgp00ekfQM`h&BɊ9du *A$zA?/*jQ"^drWL$z"M缏h1H21sȌЂ#b"n⸝GGxͲzrߘMQ w@0v #y0fK)!1-σ0rR!KϤ0LrUQ\Te01 &Ѫd\ i4%*;yTސAx4`wٔ@)[$,؁Oj\I)bc&@05@ȵIJ+&d|;hkdh h\#F mAZw6CL +ĜFIC jH 2ddz8`[`mˣ0&+)jQ+'0+i,$T'=|t cӰ1#eÂ@avG~UH=_8 `%֮X!.3'dgdTM ptSJ A*6j B=rj+;l=s \!`V?TV Q;I(>C\WqWiذ S̩@,$ Dd2b<!wZ`Ƀ0Tc #[ ]voZXVS8$. ؏uW&X4`>!{[Ym1ϙH'hڢ u=X 'hIgE WRf1zmӲHklRpTgjw>SӒ8!Z8&pU诶Qa,. 툅Ȝ˓A_r`ra.2A0h= 7~U l}09XͫY?{vTjpJ~s/ @9؈ g]*T@3Cn90\Aamǩ&1E^ +9|ؗrڊ')E~1UDJgqZ/u͏d5o$F#. q u+Xmr|VF_)=v,wRk.脅x~^-qQ鎯/ٲ萄nQC tݐ%ؗt V}r:h#pӠ yԅv6O.i褺vÑ 2ds^iZk C>w ITHkڜ[x` 'Rњh)Lv93";%h'q"{έdtnbzL/sjYx B'q2WbXZxNLǢt4Nu5^r%^J>󛜱N~e1X(;kzr챈3G2^YS tz+=3_$.h7,Q #T3,%s&jۺ7xrq/tv}r6,5׼E+5I_((F[5^ydx&oo>Nʜ &u/UuPolJH/X*h| U-pwsm jz>sw5(I h.X;)Tt <̋@|6uC+w)4ԡR| ;% 4?UV\a]`׺+HC&]c͎m Wt.|6{b}[d]YݵLuIO4u:"(g?]RVu]Qu5x\m/wux_j;ouvWgZ%eoyNEz[:Tuدtg>t7~U|ԵE}lsߏ[Jlٍg)wpXY4wΎ;-O/H1u+=e>݉+P f0j-ӎudPoF)N! Z 2Hcã@WlM쵛6^5rwJ#t Hs-@s1!hC{Qd\8z9s"E700k<ix.[^ɧu8C^HY9΂WNGx<PiMIQՓ(;Z>G:.,h8ȴkY썼O^ON19$D+vy/kACƹfMYiE-֨,rNg9*/! Uy,o);)9<]ṣlW7ցF ^ nQ@DOGJ9ڻCіY\-%ϺyPkGF> stream xn\]G,8dO~1i>fuM$"ɩ/93gEi%ö =pHLz_}ɳ=5;mO_g|%`X+}VYϖG{S=Kz}^g_׫ n {UN.v{OUH×suo9Fӝj9n=7~I=k3;eLȓ+\UF7YeukP*n"Ω} ps|핊MYJ!t^!+ q&LSG~}J<$ ߉lӧZ8 i^ P޻lf{˯]zyO䢼K#iKtkQ"p%*ɺcY&&DJ\]bJ!3[$(fL`7r4ku*kIx(O_ <|gq"vFNjb)֢-3gq!:f̛\˷]`q=[4 |I:%鍙[^1w%nt3‡^UAl)[:T!( RTk)]}*Vpq$qw lXCQ+El]/|VS^ZYh2ǤMȣ4G`_¬ZRpHZO*ֆ+ɝ+qZ5+rrm4R0p˗q&M+4o@wՑ%6_j31'f6NL?;a~"[mVhǘq{ *V/WۗǦ u_C/?'#eI/Hy[pϨ*bP]1FF;y} }+֭A\ߜ; v&@g9noW49rֱd}LyBzHQAmn;8 imUB7<9>wpʛŭ)0~%8 9f$^o <'QA, l*&6db-{#N8'y>jny`c 8Ә.bdm<_`){M ?'lh7$4QhŢVߓ!<#%!H >ǐeܐx)*#O5וА:P:y m4+{@b]0܇IŲJvel˒m0DtMD`$ggwcְH6k#!̚V%isِz\m!!9W1|F%H7B);:7i^19H6.5%sú/DR"g :ܷ>BoU "!bok79A@)pr(z %?f֊eh-Xy!_:j_\&` ZUMk'1_l%Eɛd>cGN÷#j#qΦhZ_&:r]UעۛVVInjc`ZFWRVi }3B P!]鶜XD\~xA [1qxǫ"<6ma:m2!*&p֠X܈NۻD'K `5ypT6a^ M9Q;^]fF/M@os1qTŭ 8OAC[@Ϟ` QFRZN[o6 >Rn,6 xvA6cMZ"@ayURކ8,ޮm: ^[lcw݃Rr5$n 9)endstream endobj 91 0 obj << /Filter /FlateDecode /Length 1549 >> stream xYKo7 ﯘȨ P(M=aکw7EKI3K=z\ďD FIhTg_جgY> tNͫY8M YO065H|7W*r8o12*/~N9yWZx ˓j 5(X XkZ *3Ɨ"`6:ދN)eXWHEqRSԂP8d5hiR;t "9[t6*_|O92Qv]it&|L8OVG mEuHf q&6-k׬=cըo 7Kܲx)/؟H{%:v`#1,nF|fe0he0KzPب(L¨qDD'/Vފ3hj}7QYm;'5i%km-y8Viϫ#pn%t$t~`̀zR.z+.9 F(gtaG*u 2TAzݺ>,OKFQI^ ;vH7֖1jۧFRRܠ_hrɜɤ@,uܓ")ԭvht6➈ʐ i4?UD ) cQ&B0sO *_̶t]z{~'FݍQ[K F騂8^?73.=J{xZy)or'ZMA\lZMNӥo1!oKP#zgRJ9KU N_ٯ_qd>|3(ԦX|"Bv8MUWt*plXJ; /Vdrԉ;groF-,9Sc5Tփ.9#];L$!XRu;QG mAt Zâd1m0b#y$L !%Ÿhs8vJ= %fAӠCB{@OΚ?$0-kvh3e-N>ЪUM]}vf1zsW̓T y!ĻNsy'>Vg)- >ӳSZc I(U 8BۧjVtO96j4B(-b 4)9M7TiB[R Dt-B_)tcB* ҦF4*7scQaBǣեUd؈9`WʤyNem%k+IbU5؍9U=G[R{X< T6zpҁ asۖśqx˄ Cn7%05J_ĪF9KhFͮ1mn'VU~ Ls޾sggI*y|I%z<O~L?> stream xZmo~b/+|,_N6@Yҝ#q_gHrVrR8 3gffB ~^4_pfCur9NC#Lj8z*Cՠb*! qx|v-&95nڋcD~W^4~^j'dEHn|zBSxe7~Q+i|/F_428TZ_EHgmt LiQY'zW.FDo]jW|g9V!.t^XlLf8\SKQ*ˣGyROGѭޮ|X>^}hpܾ4*c3Y\Jh]LbDEϊ[y-Ŭ&J+ܪjVV&Yt:b3E'D{f{ tN/{lۦ#. / |p˄D'Zl *ie/(TH^z'Ɓ#3DtI5- #h<-:sSi45BRB~trN`a0q"z74pcx<D74 n[wƼ n؄ n2},8y1}H~Df>cph>Qbfh{ Ϥz VcB2xS:ZWT,VRSI'dS:7ENIɎI lIa|}?Z u)Z)_+IQ \s言7~+`Ue7&Svyޡ5V+\@rmuZ-"Vb ,I/'Rr:T^`RYT)ں#,ʸF*Z/(z i1%g[^jJ8DnwV9L4°yc1hTw:MݭQ Rf. eIZ!ZS-p(p6ȑ.}*Ġw/ӑ1?7N͇E<Ҽ&6qD6,G~oeU{m<&[keQ4&2ۛ&5.8˟4Q7QvEM@w Tw`p,ϨE]OMp23Dg9 (kkL\nxAڤa%QN DwD9>o]wi⾉Wyi@"veWt&&ꮁjk'GwgMLM]-6ioced2O+3}D!D|wXy>0DTp]Qcpp 0C0C~L#`]#`` ̡DrBiDvxLמүED̓e~"YdnC;Um@LSW4uRCRS֡gީE kC oۊXjj\zO#6W.:ݲ?lyn*`n}Ї~Dֳ]wYזgM'x]`КwS,Ӈ6\*խޢ7}fXwrQӝdONTyz;wբ83yövoO. >^4sv]\),CG Q*YnIEX2/_ *mT"M AZ ydJ҂n֊7XGb/-ENVz%Aqܿg6݆.%BD`ɩ̪\:lg.N˫J8ݸhe°(tͅ,ז.XM+,u-vky3߹wqBgWvc~W|eW9h=/u d7[Y+W{l`;p%*φ5^r !ώ6z.A`"2L_TȲƻ&׋G$ƙt`Hg8,9+~Ӧ~25*fendstream endobj 93 0 obj << /Filter /FlateDecode /Length 2074 >> stream xZKo$5 o !!hn!$BY.).w*dӻ!%]v}hZĿ_ /nWb}{%ӯPG \WRrk2ժݟ8׈b-(կhE5V!- RVX?yg6.0!8ͫ8]9݀aRR oq ^ۜ`C1zGH5k)r>%dJwz]jUv2uhl V\ mJ%DoN&yXgf9/}ڞM8=<Y${p#p5)FHHG!?(<\rN&lj\ Nv_D=Ɏ#󰬡kQq]w4/ C}2hghe6k!Lx]= @'xEWGSiӍq/sqCnNJqޫRG-(TViy:IGL+k#Ƴ' nU*G+@.&N gp*#Imz3i :NJ1ՄZ& R(E4b & ;^)\ EѧQ+TRmQNFi#F;,peb; c*O0 Bc y *:IIJpCW@~:cC=Ezܡ,=m Er<ЧtyCbkl L+u)ΑI}$)ˁ};v5[i |i&I @ or6(n|y&حYn}ɞsR ` @ R/c5yct7sR9-I&]T1&vCL939XޏP.vǷp t^7'E<\.:͋ke`tч GGh(Ok 9ooA(HH&9 b$" kz]aPoz#6a.P+&ZJn)cbB3ER&]!u @&KS#C/6'͌n+ $IMB)k4=Igџ%pOv|㦛{пաjj7넔c|!E>B{ !^:BE9\<]:YJ# ^SW[@[ ixɒW5Kf6(qO&[u([0O߷Hb/1"ľQEP"BA\`'?nӇ5y+|> stream xko~"1/~quA*" PJ%Zd*;{.RY%-RR=FNtٯA'w{ V1z٪7)(t> ~}/;^Y.fW-ǔtdTtJ 1'ZA| ~L$?^k HD~ vož*8J5$:M#o gʉ3=7iSk L?Ұ 2'ktH'tNJX*ݫrYe+ t2҉.EP%4oK'cКpLNdeFp! 4s,$+&A-l9O k2mD TC%ҝaH_r D0lԹHMNiQPڦR<@IG_* *X}OK$ }SV[SXPYYN9[6Ң^c:T%~yHWUQK8]y W sEm'֫E*#$H*/=J*4]4}ykJ #<(آ;q,JLNt{– ^8Y蒉Y|1NBUO;l.QԙGM%[/y3TiK'{ VHHNR![3sjɭs:d~[=pfZELIu?y v{32.j9ڃr+dKg ABAg]b}CTA.ڈ| 1r0ꥪ/UzS+y俕埉,xc·{|>{0Y%& ؟|߯ pX1QX*Pt]);Vlb X 8XELP1T.dӳ\GQMqJAa 2Ks#\bJ{36ΰ{ .ޫ߻m'A/B\Uc?-+"VX/:IC=KRRu3??{c`endstream endobj 95 0 obj << /Filter /FlateDecode /Length 4177 >> stream x[[o~W#Ԡi}ּ_4@IXA:yXKZґ%˶z$m_Z Fhj\+7`vZAti%F N(!Wp|Oq '_.Z_q)au 3+g8 L|5N1h A՗&g q۫(l%.auUgo_0H['>4,}0#1z+t%+oA @ %3tp:<^q'|3 $,fGNQ7kk8ڭ3좙Zy8+*g;嚃6m\x:ѲFH#Wxseq\uZMo`N]դi ,_]|Fm4Ȥ]O뤍M``Aww1:c*=aI`_!"Hs"/*|VMIqw[uwO+m1NM%/*O+0V?VnǕd+b0T.쪒]..{L:'kGi.m6e}KvӋ1)U `#3EçÓ<>p˸`zV[gJxHj :sdQK ٴu%gYvɛrQ 罃.lk/*yصW_}~YMw|]R_4[b( (6Y2U̡HgTqpW'͋$S]L+H)a  OFʅUK~ldqO3Ѵ`D5CD׃n n(턴wgQ 8ߦTg aWߤYqAp/) ~aBAH'Uљ`=p1 Kk @2@~Wۛ4v`.>|'SCl0&E-li\ɇV)fC߭'Y17W.jrrր?q=rߢ)K K/Cm)ZL7P: [Zj^wJH.JH H?$lPJn+y^*;0PMy(ʐ9@I'>J^٫Jte4XXx p&7Kf}{$48 @ O/[<b>~ !j'/]&G xM YzzVZ죵W]qTFq =KA_d0Z 1HCwaG!= ҫ.LcΊ}Ƃ"X uwv=. STnE%]&[Q];GpgKJn@P|Hx3Sw ǁ G4xlK1.{JUɜ$g>-,EE%{I;1Y#U\DU\Mcps em*,ozAp>>.oc|ŘnsT jBhz%^TDBE;d1 A&:v o=zYMAa(.|0D 2w9I i D5U[Z %?F B"Iuj4FJ)$A5rb)7"x6eSiAo5phfRPhR.@l@Pc"z@6lG{)`N4+ ĩ }}ZkKMY :\A@]Eg f5=.[4;I3Ld рdԘRQgX9cJ>2* r~mq {IpM.'M$"&ӨK(6;Nl8w/#=ZwdZ$ f=dZzSBO-.9?[.) ɖQcݚ#/΅Dڲi ى]d'b8VB1yF>TJhvhJm{(9椎1ԘOMqf_ЖB/$'VX`^]ewe~eԙ^_Q;6Q{Ul{#.χat7T|T??JMԌgɍTJiG% bu¶XWbMIX=RK *g0q?&.|+ &Z2g Js҆_NlأrĂKqOOl1}e(3S!0s$W]o ϋU2:mqd@y y el6W'̾):xP*cZ=)vqMr?Jrvrv<.ba!Yl@):-grx6Ne,¢8%DƘgDR^NPW%Ț˶u0@n͒OOp͑rM&64og K?YRK uN2':Ge񨆥}K;^ A{D)$us0J4Wǂ8+@҂[rl!1hTT`7L͑O:}J-@Ȏ`% u6lm’3/+L߹zl Y Y3n<'hOʘo(+aAϵ+jCy5U M@v=}I9kW.Xۅ ړĺhzS['ۣςos5$``/vN1ٖuT-wf_[SJ~SIV?V1 p|ee)(;SNeᄛ)]n?nAW21 nփ$VFڗ߷O*u%ȼwl8>MM>Yq[I%m%Y߂nfK~*i2y,r;E:6ohޫ=&_SD)HίAΟy_zѵYf񻉈ZQ27U|hmR]qOu:( ˲ f_>0rkoJ[6-S!3vK-L. 6nȥxol݊5.)fR6G ?X꿙P:jXnAn&(R83`U"Rb4%FS,FC1%^쪼$;M +3Ciu%{gF5S1Lٛ"sxZ-gɤq2G CLtIb4uiJ7)?姠vZ n\GlUnɼz(hxXTrd8o,{DcPsʷ7i2_:6R%Yšb˯v].0hr>UM.I~@+(Eᢈ/2k+X^x ַK$@8kuPaAI7ZS%y ^Eӷ1_m`J9L?p 4G'PĥYT\PhYί)5r,XKŽ R[ϊ\̭> stream xZo ?q oEQHAQ;݇IOuCrw9+eںƼp|qKRⳗ*.ory^@u\-Bp2rfQB .WWW䢑:ZF.ZwA:mQmI%A3RĠc Zз3'=k"ahN"tɸlU|95wMk $fT ɒPJ 󒬣W*iY2Jd#W`IWI`e€(:ڲQIaYgu,r$y.n >2C7̑fY2>2BJ&@H̜Js ,iX^]j$XppԡtxQɳiI=ˆN|qX2YuRd/wZ lޯf@N0N3c:+x$@ł hq(X{l%6!&.Jv  #|0$<}Dqnm"-_i+Y$fKG#G)̑qYe?jH毨k?t8LS&KC㺬u*MN4m1EqT/껻Y]8J6U4牶]6> mh*Jc{#nCeKOwڕ6p/AZPpzrRy)KoiVx!H0QŒޤj50}P" w~5*ϣ|LiKʐH(g2Y%/*y˒]%$TҰӶ4G{ףe"IaV#'" ]VL&6ٺI X*'}UMu#l=+G `1/ џѓ\nkx5<4kx 15/?K1h{ח6H!~%?/|.2@ߔϙЉ?K 7YpSD`C3F%fɒ7fF]Mf5C7`Y袡P? x:XbB7&l1M)V% F-zLpㅑ^oG]H7OMNTfvQI2|UjN7$/s 3>k/f>ǿ5cHo?'U}'Jt<謾`¬==i}sWT+}#> chw}ȁ(Bs֓(2f ߨ{I5 [J.w{YX"nvQI|3wTpwTr d:Ϲ~7ej“8>=/EY ĔbT1=Ζ۟ *T@ q$}n1Jk]l|=DțJ+I^/zז%N#v@#m%/YW"F<_, ܖendstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 456 >> stream xcd`ab`dddsu24H3a!#G$,,۽SyyX6!={3#c^qs~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWvt-(-I-ROI-c```ʯb``9%sg\]wE+-[ToV߅K<}]Awo_Ѵԅ ۛt^׽{S7nX{[)Scc3SJһ9~to;jwuOXP]),[og]l? ݝM3}6{k [von6i?|[0uI컸3pq<;Z>%Gendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2887 >> stream xW PS1$Vwo b@mEQ*$Y""'(";ADZZsu{::mZ3lkLM&=gιˉG znӭ_ݸQnt?np={-C \8 M70u *:cjg\r{p%`mYe]]gE*2OyTpP<*Q(d.sv7mZLLTyz*r'bQ5AHMP]%tj"U訠H*0(2Q U"K劸m(}v@QcU7>C\uzj!D-PRj:A͠S3JʓF Sy(*z X"pJo cm`Cq:@U[S8t8VWq!4C<ީi K iDC,IB)Aq[<_걟M!PJpk ;*i>upzK^7v:3H\$8jڏč̚9 %OA7͏8%ZB>T֣ ;UUa2au^s[縋BMb14lO8{qW'q(08Z3~z2dCڈ|0\Drq:8}<{!bĔ3ЖMLɈ8Fa5ul8;G.Oɻ&E=܂`Xid +느͓TB~BlmJFVU-o;0a- C,i])s7F4W=TUx`4|U* 04Q#Gb*Cʼu+Vq=FaޒH &قn0+:rq;%:x/hЀ* 2&)4UkzQ?iGO]8 o i֍j_t F_ d*q"ۈ'SmC!s)23*څsx >rEEiQn9s=%@{5:~dX& K xqຈhեs%y%^B+u٠5ĠsAVJ-Ci+ "z]ѳ)+91<+yfK^ɐgi(fƤ Uk~GƑ*ց f4^\0JS u^f\6#䣝98 wzN/j nw6%i2i8HYY{o,BGWnw<ȸUZht &.kc/h2p%Ԍ3y5GL[yh 3Sd}!#$5yPېqs1gj~w`"{ꊓp KMʔF,XIHm m9-ʦ }·>ռݳZ[U?b TRȠ iaͥGڶ/v% °N od=:=f%]/TMW)+ ɪg=|~|Q/uUͦk)xZ n<=/T7֒xy=1,PB[X|Oz_N\ǁփ Z_ ZI6F! MMRCN}tL ]ʏ8ޖE-% u~e_`_,kRruT4cC_7ذ fole 3vH. pkUalΧ-v(̪=T`o9ߠn+endstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7493 >> stream xztSWº,n\Bh!!-n0ƽ w[.%mIH&LqSC%0I$rs<ޑd{͚y--[ogJ X4?D#_6P?yH-Bc;@!P  O7qG3s8a ǹ^a;=܂WEzE?{v=7""dFFFw q;#|x{t\[e-C^a+=‚(Z:7hs-C- _XdW۲(1zy]s:74q)çN6}Fg?|S+Ի*j&zZCRuhj=5@6R(gjG}@mS[ԇBjD-Pdj5ZNMVPӨO\jeGKMER({@ P"vRT Hl`_ЛZFEԂ=|{\n>빰gM^ӷGt{ػe}}N]޷vmmg?Uw69۝X4 y팷/oCýr(5T; pO$H;Nr<2~Xذko~jw{Wv$ m6KtB~xr6P c7yĭW1tz LЮWfҪ!4@CCZ&헰!U|K4e 6y,7mTd˷iP A=c.A꣚j"kﶮX%h9_yFUpLM~ .;W0hJ\x?T=ۃױ@b2A*y7!2#? yǢ^xX,0HPW}ȡpW>Ԧ `jGXMRWvנw_c~Q*Zdk_ITL.XR@zcADDylSYUF9P䍿EM+do-p+MNJ ZO6 &4;^_F%wO>%0SJU"vMTQe=Υ3c[ zc)eEtõGzv}L"׃t-`7಑_a:lD\: KmldSwM'9::q T zw"M(K>+E]sy ac6K7Yz,ġhZ '( pƟjB~?UbDea)JYz] 0FQ0t.9[~H2 E=h,1"X⃿dMS{ Zho"~S"! ʌ;8 gYԒ# ̈́Y\gDvz7uШI`<?z6J>}^wӒ禠X0- ؖd~j]13ml!DXCXl=ԷQPLFK=juy9рAp>%H=srį_\xzpcվGSS'璪g !\#] ٲ4%$&ptW;đz-^[\-ևȿ'd 3N>m$g {=Ʌb r[22/EVS1|, ~yK6-(jG qxPSZ%Y)돏)'b7&IhDw9{ҡ`| &,ˏ`ѻ&.Z&RtHŵ44J͕ ܩu4~ދq)gLhƒBm*M"_\^ Z*zQ'W& ?HסŸpc aQ;. VR oC?D6&zAJaRxԛr [9OKokз]D Kφ h': jj1]6IkoqUf336}wE?ÿgkSde2[xC 9=9dk vq85Qlmɰ0/`&\hZ|=[6lfB%2]UAZ6p> OyNx6)(~3l#23"6&MgGܾŽȉֻhF)Hৱh1sma Um" bRR%n fb`}Vrn$:znvf {!ve0Tsk1 xElݞ=+LM̴UBI7h+s`&_1~fŹ:%X.kmsںzrViL*VeOKP چ_}=>GVKȗbui-5 5 nGlV_},H9EmpDqkCԘXDs6p&fE4:䉜J8M^U5ʕAwxSLHmU+57Lφd;:z7}5D> 䑞Le"q3D. IlUԚ$L:I*eZHBdHSf*jrΚ߫g$"_4S`'O ^ <Uf1@ SU)MsS*9[~0 Of'INUPUt!22&b#Z—ҙijU>7Q%a^(h|y .!95zl#Z0Kf{L6 g <H`U< 7 qM^BE=>a)xsB^;5Y TD>7: @ G_ҰTAeC}_] SŎ/ʉaWThiIzfDcHCBC ht1dUŅ 'ޞM+=i/>2۳8]f8RUTwM`dN4l1!_0թu5<"'<[}\qAդKEbײ՚lZm1 >hC" /ܙ3 y%-xOp}Nxáh NJ2 ˁ<دOVB[/ _)]P{U{K‰ZBCTLzFFO\Sz7HE*MZq"W?ڪћX"\|*O H|0lkGs%% ZIJx؏ƹFMKa~J9ra/ p||T[;j|~|,! J"$D :7pi`$=wb޹cH[[\]lbߜݤ(J9^ֹ5"LU{ #${. uj(Rdf}ϭ-J5#Z`pe絘]f2@E=X _T:?2)x2Pf4TY\daS{,霋2:dx#{m6H~3 >̲`},fϲ_VTD'JRQBQF}WI өNHM{ܾBj7ZB~7i^7X Ρ͆ }sϼy_μ 샯 <\9^޺k$Rt輵0 Z$[7nMv)t@'@!ׄc [ nŲIdґGW1D'Pt9Il!pz+j7/ĝ9/lm~8qЖ6쫊MQJU\<|ghu+$xuOj3iIq)K/B| sFVsO's^c G;է$ݙtsV3D՚t#.Ǚ_*lf Sru$pNE*ELU qL ѝEcЅA;>)WҘf2)D:$@đ&ލ v f͍~.,±.Qﲑ^F[ Y !>ӹ2X!:Zn@yՄǯGX֌ں#ׇCi!t~_>.RdHD&o\ -EU$Ht4ekY\~Im9%Ö%j2-;t)5b>ג#ݼXYcM6XS"1?}f.>]#5\3 }gτZҤ+"@V@|+$d &53=3ר76fA^q^BGGĝf+ib7l4pq=2PRrx BPWCH}c!'\ޛ"2-|]gm oֿxTrV2oDLVr17'=!k6,z-( ˙0v'6A[{ ;&|zd@焇a G!8D񌊢Y|z>Ngw:sm~Ŧ!,44$ڏkܪSCh3եL o/c!_NRޑ@Mm춺Pʜzꅍxn]د%SF͜;>ZՅOl3SruДi+d_dZ(}l޲(7]:d)=]6NܫG |d.!8mckvprjKMdݿE,B"Gdm޾s0x_Ǡ468 Gm#{ kY?c9lc;_ `7 ^[k@5<0NCkhU1Åh!OΕ%ʹ͋8Xa\Up/ׯzzAۮvE#iM55eeUit%i2s8#?\Rf.;Sm+;GE,W=?4[ Gf%ϢqF{mf%5i{V'x~ZT_ML)j@rރQ?4!Zy",^m= ls4 mGXVe ]lV~S.&#OO+@Y-a)< 9x>3ҳ}ğsGQ${fa/|VFVKiMC߮#Cuu5C ~d-bPvW.9VeA|WTBو{))Bǹ+U%WT}ux&,Zx t&\-\rU^M*Z=VҰix& ԜQF'=::|ɐ`y((? 巸=2sYק/E7վendstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1209 >> stream xES}LSWXR;9plQ'nUSێ2l T,NaP@!BRVO,[KSe.n\y%*f[nr9;wMP4M[r23=3 FJ;Md<6u2P^Z{/FLϢd4m0hȍ Z6l܄),eU~fp{==}=otEwk&A5(m:"wg8{7d)lp硭Ks= \GwI̿_69~ݚm֦C;WkF8\BUPNx/;2T)4ΠF5n)m#ʴƿE\㧟"q쩴PMYA{k؍|cOT4Zy;UJc~o]}8m5,dT)n\v_c'|W hz8,el'# Vu\:i/yOw7[)aUzՓ,-^sWNe؊pEH+G~1m8'AUK8ĒD|"crpcGUuT8v2൞QP dF ]u6;, !98[2@pd:}iE|ᐫ/nUpDdh Tx<[XeWD>p=zΩ3aYnh@ G L0)$E)/ u'T qt7Yյ> stream xkTg'FqDK-4kSzZiJmKZTe"H $$>Or!!Dn#$\R@J[non[nm;tCS993<= xs7&ڒj3Yce.<дQ&/VHs2YԪUI IH,RDJ XYRܓOT2E UeNHLM')tk,O^+ebðXLQ,ܪR)Β">a ;xHͫ=I'GzN)̩\ )^T1Wъuo#9V(M 9 vI6@d5Ue-jt6=6TBm4bHeB2o-A]Jl`=Fٸ\EvAz=}[Avksג'RD76O)ع֒+t\^nW'BJ_Et9(EW̊BWifit"tvQ܏hI f֧|p82j#x&P\iޙ+yƗ&aeWxgvߜw)col6`F]fF#kd5Fk`+'²-A]m e0WGMCOu٪6ZЇ\k6 1huWu)>GrSWjF(!FU ]uF;zAME[*p$?ї~4=AJ5gK3D漲dCHhRj>nz.k UNj_Q^mhfA?ƢϾ8}ܱHOp;Qhn ;sE1:[p `~&Ң,KMj2Yݡ2jVR<1vxQ *H)-uǸ7^ZC'Q$*zjQ@| EˉԝPqzϘhs:}tVS !_֭q t89`.O0Mfu8>"Pv>WzpA{ԛF*"e-jJS*i^'_\޲y}>evδ ӘKƔ$:%/"wcԢRណp9Q}X`&E&H_SH3ybEDg̣+,endstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4710 >> stream xXyXSw>1 Xh9xu֎vQ:l. lY IX|I BNX.uֹәjX;g/`;흹;r'}c5eֵ1=X{7[U f} `Ά=Bg! 6`X9bͺl08qIز+_z:lsϭ {-'LMLmMKe&ᏌT^8lꔼUK>l SRvry^R؆,A^ضL^wW}2x°YI< Eu y Dʼn$)R#wgDe_d:Al'vN"XDD%DMkXbG'9ubXNl"'~I@l!V[m$b 1$`D;WФ&c ^ r2|"8wڼi )`ՌgfE`v#ys1qis+>M(B<,+6:\s>D13iP1v!xd2(*9OLVES `&t Ԣœ('6m]fS:OUK̡rh,4Eh>b8a}O\>bfb>G}ܯ_b1q_0^%bUh6 1Uܔ=k(u83 d1&@E D1[Q FГvȨ_ry !21:&D_}|M@ϣL* Y̍^ 鰥2Apԅ"?Fĕ_7<)ZV .4a>sQnLR&ZZECzq_cnDKA_D<8hqC^:ʶ\ZԻ.顑k0Qo9rf f|fFqT,R x iՍ [P0q+E WKg ]GO->pt%6sPM/j,t{s֪Vj ˤ4hjА1VZ*T`0` 2_Qpp5|;nVaDx-hIޢUovfuHAcZDxlXG[ !~u T q9j(s\#D@h--6`VqyRatD5)21U#IW I%#u4C텶4lt›t$9ENQ'.B4;BS5H=\L^z eӾ8xZXf3WWA'Wqs™r)@i3wWJN'US 9@NRQG;ߋjo' z>Ti!B DcTĩV]n3c a8oY0v0Iq*hsf(k/ p62;-0^7OD0]5EI j.ʳBEB)&XtTr$g8A9M`,m: R9b: a!ʙrT^pm \NXBį(4?H=W|yl ~(%ϵ+jA,L<)c"ottrCY]yIޓ;!d\@F{'p[;kcd;Fڮvݤ!H~* CM9 ~ÿ́?zyQq@y7tUOe X/º)z$C( Y2^gF|D++I"QQ=I&\E*1f̓7{-O:4:] RgNӵXJΨ=f)2 FG1Gp N#輯{2wG^RD*;qMt*n[?rxE*>̕G P 䃬n G\ ^jcýng՜zetK81o{$#,p gz_)ǔҐb]!/U5:] pyr@L^Vqܟ,VJ)Xw+\+[e2Z=:#U/ܡe{ we\*1E,S.ɕde62K`g#?gvgV0sWz_DZ/NQ(5PRB'AddFיvv~{6H 2ckKn-jl ;cfݻe=Hy 5U \P/k7J= W,wR(.#ct+t\]>{8M.ճ9y MZ)K(87I=\A}#9ߚ 2`k0@M%mz WN8G? v~Evo.Zp"!D𼆭4QYxw#9L1{ zrtk?nnwQ-`svB%Fޖ `(=zEW9,eZ}ˈ|-F >5nUn4MкS^Q)-KϬB\Cs^$D]FAlt;4`p,4l7jkFg/Y,2A<ۍHbTxIq8cQPLMa°i+tfS2ga#ZlGLNX۱AFC LtrJ4 a b&w>O3asA_Cm@ X+.LC+|3x's0&p*o r+ ʒ]\RQt+/x)f%Ý=.MK>KB!Ϩ06:0Ɖ9/ؿ7P7Q[&*eǾ=@F 5EA^a N0fži1܋tqپ\$u"1xACZڢTJTaT8>+pkIw~߯0y86v7]QocOpzQ= p<-ԶgY cAݺҢвLA(6{;<5r~wݔsfz 8|;,oqpީQSYӧxOO&Uڼendstream endobj 103 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6012 >> stream xXXT׶>bc<{K4FF ta``ECGzP`%bvc1Q&1d&/o&'9{vY_#,-(H$:iΐ"aq2V ^9[?o?NCbdmY?k#L aJ,$ܥy{zGo~ҌG_ѩ {F{Sa 㱤8+~U+{,N7SIN*سƍ=]ujVXxcJ }7HpWyIUw(@/`Wm1ѹvWvjaң ~:DQC/U.s_4$ݳ`A X]>_ = ՋahYFoCMPE;8< | }-ݓ ;Sc :K)atYf@| SׅA:<-zɪnf #Q)G*^%CviumT1$-V7s-gR>K_0d'\dd@0t|<.݃PnzU7(E/p.eU1jkqWC:_bUjP)bnՄwtW@Ēބ '9DB{9uF.=V|D4kM,a"',Pfo9:U27G|nDU.0D, LXoaܲiFw ˑٕJ1nZ,"4u8L96#),~# 2232Q1SV.D.lӳ;~g(d 8A 1ba^0R]_ƷSVtrMԱKP,AULKV0:8ebB9 qG<=;sKuԅ\׌{e燗|Ԍҋ3*{9.E#[w"u?bF rLOrm=h&H۬PZ]V.@i8^hE_pfԖ}!<񾄨zgG˶}| #2BF[ k_';w9UMu zxj)2?B*Fg={l7@V=I- yg@ʫ9iA@CFnDnJo?dyC2H*y ͝`mԗ .~E('}:4c精?T:,NP6lNhx ʈE)(fD\=S"S:30Rٮpe-ώm^c7n!)XmJMQ$pQa3m~w' OP*SU!JSRwc8rsWaS#}?tduVna H {| dVɐ 1ՠFS% ` $oe#/LȊOG0'0=?è;JҨj"Mɪ -z8Hc b5tTf4 [BQ?,T&+$j@?~ d=gBdZR糭xP,1k@m+u~rjWNB(*:72}b0UݩF$4,]UZBVgƛ&Uwvk0H':*YՔf}Ǝ"h)w%!hɈoEƅ4j8V=ԒU< B‡!.pepp;4'O,jCW\hȿn"Md-Y:(t2A $uL ϬoMڋ3Qٛ֎2Is6LL"8$-)R); y?v|%<^ߩ7s@i1ZPYJxxڵ[%0"8;{6_;f0_y}Pv39MkWmٲŦ엷 эquZ^_QU1%ua kb6zo#6#fӶRLDąA^hG70S_.A0e7ʓklIYHǣ(f0х1( efaĎ{Hincc9_]n -sr˼7s <[TʲT} GJKrd}>Gǘ󸬨3ҒsP11~`%KOB mqU)jE_9Qp@6wחjDӏ|qʉ|\}Ϛt 휻7/!1c'oZ+BQrGȿ̷_1>H:DbQSؙK('kTy=u x<[Dڄ!xˬZpk&EK )ڐB˽W-PjVu[?!v;^|(4$Էc.7_UؘE\&n~ہ]2Mݩנwx,.=$/[cGmkZF%;kڒcN_"#p7ӣ$':`pW(^ =L9F#k1`(:-2HRfPyHxA1X_椏6:FZCh͢`rX&3w>̰xg/pu6ICKjYg֍mCu7;]mZޏ1c3i{u:%dGП&?dz k6kFoh: } "aR@Jwנy& .{"OK-, wJjoiD!ГE" FzCLZxRXp-娮7_``]~ a4?y< vƽ?0ҖOI$t_ %FG'qńD@FVTTv0ka8N4q敜h'x5GM^^+}$y55|<uzٸ$bQ1.Cr8p[\j=v}ŀ[=kƴژMe6? .+:v,b~y +\/ "lt]b϶~=>enK|U N'=#vAϔUɑ0ҟ Zre;gff ON~o=OеM Eu kl\ '7LLS]m}`xe()5J 2xa_Hnz8L% ٱVA`z- BX &O+h8_IHX'm=!OuhqFffiA2Eol :Hb8,9~0HꞜFKdo޿zV(k|wPRFc\׬EdA'(M0P KٿC緳>quC/X.Fy\ﵑDڜӛK/cP~u G6-aC#%nY*"OeeA6D發yp; Us%ЯԷ>#j'Uc㓢QCVSu{e,`s# c-WY1:N8жǐX~]_p .ߋvF(j'ڋyxDZh Y`U0!dGs5,*JP6Kl?0 Ҷ$>&5}ĝwk5ik2shK"ɵ7#FKt,*SQxH g)`+GU)ԓDGZkbmAN뒼SpCxA^x0^C?l(6&<hJ~)nrxޱYj>5|t` ,V罳ݽ6" $:7EJ *m~vA6*c2PvV 墽>>'.@a*7% ;E22,/ ч0:!*)Q\O JuBvqg^7..^ 'FFҷU_DNF}/+vNffܫᴱg ٲ]Q'ۛN6]E}՛ݶ}8g6v2jUVaXUl>&/8x5uE{yaXp{՟.V#ÔF(B" (!"x;eQxyEvQA/&O sh̖zp-ֽtzE_lendstream endobj 104 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7297 >> stream xy\SW1k^"Xܸں8A@@I !!2N!0vUc[a[kn}}I@߷}SrOy?#z x<^Ek6޼yd/S%ak9S$S^>cYCzacƎ9~a{'D0M9(b%6b 1J#B"XDL$v0b'D,%&ˈ)rb*F$^$b&E $v`bACDу$0'1$<,ћxC%~Db g/Bsz3C0XNdETGᄑczzf3wDG}=;sk_(4bуe?-2gHyn ÈaC+y#>?gR06:(,#7<%rȀaHKϣ5}Q&Տs7l}Fk@)lrHI 8 leCVZӀ=@A&)I ?ׁֆ4a\/vq$A.deHIDž]s=^ p"G)M=WuE2֮ef 3@7Y,eQr;$Tjᴢ3OuXT*Y-RKsk C7!eCȜC*PZɾ7t Y8nmv.D8X! F6ʇ9H?Ey$JI;ꍕvcĮ@e]VE N*}f ䷦Y՛WNt[nN|=_hbo`! ~^ۼx)~AkA#O"m]1kR"EZRZ'+.?JD<%,Iݼ/0fnshQgzʞg.̗0Jy %|P֢mHN𗰿۪t$)D ]&#@p.vuq݌=+e:K >.Yxv6'u > p$ʍwRZ`~5`@>Ӏ!0JyUPV;Gԥc!b~N)(#{H8kw@ dw$lFS(xHgy7p=Y--n8 u -TD@o-:d-> TIAEzRRfI7Fh?XM1,v5&<||@-yp1$l߳Pf68Mg${B/dZiZд߱8@^4֘ljgսVj5j,UL.8<˓n_p#i8ׇ4}DMDLLe3289 ڇW=S+UZ ZE@o(gur}<Po vC"/b(<832nche$vWJ@8ůXS`/?4(j<\<@(Q:c߼^#_-lg>Ļq:ۺBd,S?$> ?,Zеgy+ TG3նnWw [e+}"= Z *@$HufjE,l+q_x2扭0->[>MFZQāxKX](@ zp9Dl'OnХWe`5+6-.y %V]Q`.`m2FJ@I ͊D|0/)u5e\6P KT,]FOwI\D4Kxܼoo.Ak5@lS䷲ ihh*bBo~Md6ـ+5 }z˷'UhAmSR3TPsv^B%N 9K_v/ cM1<%і2S#=JdHd?夂rlNRL47 }Wi%oEbYQ r1]'mN(Б;/S2pfʇ2%%Š9 L*eVǺ*5;, (,/?\pӱDZ4&|qE@ '^(h3'͇YmV U)GJzÞ37!|~rY01'+dcMIo_3%GsV!.M?K‘Q)$;$ 0t׈97뫰7Mv11m1 @`q_ͅ8ݯTf)v"fزtMgJ}2|~~p},JzV31!HS!GĐC^4;%jmMZr[l ?&قҼ<̲OpE^hA~Z7itJUE GoCD0d==woLb.ϙDw=m9[vC8ZH8mQJ#hWE^7? ҏ"\[<ۅWBU&| <rU C$9~ҥ`.CΔ̷,/mL,LŦ8-‹S':*V.=eӧ-ԒOWaOh?g$^.\tj9{͆uk$#=nCk\Խ{`Q!:;pW>7{ gf]cmm#&>h_4*j4&]*"/Ce4\XPZjW<> zо7 ~2>8Pw`1T/1POh?+}9= $ Do5O0>? e5|2<}ȿCq#A:s颕 0|߉KYoe;CJHQKRh1U{a~pO X>>+FuRX4]'B 2Q Ǯ'_{Ta_A /-k7CNM{r YS3&ĦUhոF"֗(na>MM FT Ujzz]QOcm$Ǡ;Q(D/FP݅D W/sc +.z`c<T/+sgc:gŽ@&F4њ=Zz7KRe tb6b v]!L Oк^z'ts| k䞣! ^iڈ"Q?pe}E77ӧqahM'NuJq .j):]e\hj˙9LE8 V*R @K)eq@Jw8 BIԅ `vm%-6uK~_x_pl {fv\b$,RJHɋp51KLoᩋY?1 z>7a΢}+s< ?j@-dj,uCw{iH}ױ zMv;kKV>vȻFgdڬ@[%| jlx,F_Rt{/w`6CF>cR(󩅺z-p6h&}-jQ礠)]S"Tt&[-HԒ}h3zv˛.`O1XmhlHIrCbPsu.ˠbŌ ZFUZ%j sW-r,0Wp|3qYA{{0Tw} ́eLG BlRځHFP- MF 3*rkR ~/-B~+@7{nJOIt%jkk:lG#/rn΀a|nʦ"?H(qYz]BKS=Yb4rH\ ꕵ%0{u$DHb 1m z[ц+.ÑlL}oS(ZPE:cE%*أۯ3m:ӈ;;TJ9P#ݢHk[K=u _K0zџ.32%QN@=QZj530v'زm%w 32WTԝo=ʷ#fr})Xsf-m?qϘ/ЊwڎLIw=ۋˡKl%r˲\=B"y7D .ST, yFU۪*&Y u~ɻ%9=}iaGDx i D#ϖ*B#3`Z.L,LŠ.>#4-ԧ ̶=ۉ`a0hڝlR+R,JV| )=)c2@g`|M#VP ~rLXg>lb9+Ih:yy64oRs|=&ьiYf,=labkIO^-Kͽ\> stream xcd`ab`ddtu14qH3a!֏HVY~'Y{u0w-P{ fFʢdMCKKs#KԢ<Ē 'G!8?93RA&J_\/1X/(NSG<$C!(8,5E-?D/17UP=9?$H7?%()!!0-?:~\nCx=ߗ}aqL:'~ 8w [*u^}wڳH7nҜߜ%|?&wo4{zu?&:}zo_4Urْ~;b[aƯO~VzzlDZư0`k#`Sľ;|xxzxendstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3296 >> stream xW pgm![4 Y+n f 0Y0 \18p`,|[ww2,˗dlǀCavc`d!!df!{~jkLIV햪KR~{{Q(L6qźԵ F?.ɤ&Hp#ө)˦S_ B#B=4a4T;e>DeyEAaYq,ms,^hn 穋wgǯf2&>`wZ[?{iV[d|^?/#d^A̍gk7KťyF獿(+i 2E=<`kqIVlwzφ٩95zJRWTJVP[T4L=CRk:j=CM#PT,I.*5"(Ehĉt5#&2^t~LB 뉽$q#F-a)/Y)G\଀JL{wtYE7n.©Pqs N(xFsDN4YŌ`#xu8& Vs4^Bxk$!~[%_kfmu9t4MhQ]ڹr^J&Vj;ut\  Yy9THѓ fe"~MfO^v{GhMJf5_l:VB'WXv^|d4e}xI[@ۨ؊u0 (h^ͽ 6+Ԩj]H;?X3,kƋƱEwnɑ}l*lzQ0sefQ۬A%(>cpgB>)׸%myȝ/&Vk@Ou:Poa{暭6ԘڀlYzV.Lz^i;8h72xdjKNN&}_n.mrxx/>5X\5`ʴ87~s3P=C(*AR것qf[Wr=38)o_u%:sWw{TWN-:ܧ ;JD&>[m[ 4Z/ਥ0~᫊7zzq4^k4^RZ,sJ} =C2IwMV¸gDPvg?s0›84hҢ&nNYsqzNtzU잔@?ruX)3)42xpUE^%["=}jSDZ- NNUhZKPG `Xd\իQEe6/+fjwVS՟ƍ$SRj;t.@w/ͼu)ut~oE(Ob=zyvIk,LNƜ @o]׏(4wkr/54gO$d< G}ҝxXA6Vr@(/ٖ Z](0;xlo'Z8ZvPb@v:Y-CC: nM^:OÑzG|/hʻHBa46yuBAThbm~̗MAoN0 Xt0ru.PՇ')>pTm݁0A LZ(+JC]MWΘvZs饣ⷊ4|͜^c+\H|̮*;ؑxӷ@SRO"J.7)?FQhksMԤg v.P_ZL$bpލ_!/CE.<|W"x[d߮ǫc5l c^ݞV-V{ ,JWW7:8pM42&bW$zsT|hG³A<j-{vSUg%A{r$*FHp13pΞ1 (^Ed(J;k)hpL=͵c é,#>/sA3zMؼ\Mj_ޕSg4j4}u-$? 1i%IA  uwP"AA@&`ժ2xNU PAKZDj7 tCJab 7a]"o (8egMǒ$!qW-uѧQ)ح>zGfl> stream xXn7W4|2 *.C$=@$ rؒ&hƆ LbX#ٯ̠/]{dpzost1# *d2 Jji;uJHaqjۡ*cp'_ N); Cq4ϓ5'C: aB fErz6׃u /Ӭ#3m]6˴v>bM;-ƃ*P<> hOu:\@ljL}]#ۂtZ6wN+{h5~}&:!ZP>jxf$> DGT~ZbUS߃ex|}yvuWYwbKJ.f+pG.Lù 3imy5oЅsq €s] QlUu05B`Y\\\P8L|QŃ*~[ V**>;#ֿm_VLUWnxV*V񼵻c)*zZNckzrA.d [dޚIS8x2Uy;T*ܯ5;Kendstream endobj 108 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2389 >> stream xU{XaٙA E@A@E Ly,aQEl&ixU (@"]Ѫowm;@ڴ曙;9s$ $g*Ssq1S#[ނ Dtb~DȰr0 7s z.!"ɕۄo[lgg-wr\"͕<#Rf%'ɭejzJݙ%I[ Lbv(U˜]t]a 6Db Jl%l ;b=FxRBA8ބG&` G$aFb6A! qh!$"# j 5÷ 5޾QCZ8[b/Xbyւ^Vxyxn>`7&3QCe.){gB4}Yc Yؔw *A$c"#/ ߨ(c jد~1W[<1x&UWaJֿ`}}TEt郧2q<3"̆_giּkҶ=m'92$/^N֤W9*i7ᑏ VxtZƞ) $Cp|hm)ϙǗ4 Ql]6K{_WjŬL(#`N-y&ޯ,#K'` Ψ0/Qyy Q_]HYkǏA" +j85$h=!&dp9Ҭ}ۘawuyt9=L.Hړ{8eo(wlV ٷtX [ef'~?ͷkdOKJWb:ӧ8ǁ|,^Ba S?.OP`Q`ē-e?xIn Aڔ%HF=6|ݜcR-a=xxeeˠk\΍&-ՎN0x*Ae$o&3~Gob' $d><{YK/=\.O*>ptgW _glf{8qF'̓zTqқ98U7G(Ӄ)]PC`FC^I7/7=ip;kD~g9;<c0Rc] G^ :( ?&z} .}$_ {94pƞQB{%XuZKNe+lD_EK.41:3Һal,²=FIA^AꫳgO.z xDVGjkIǰ Ů!}S˘Lٯy4w;}7Swk7L xhbELN`4%bXG&ϮyO^BVUDnڬJژm|؃ p;#; 7}n8qc/|q}rB6$hDP—p.1NŢ]{\fTQE؆UZ_>iN]݋-ջnx*vɊFLHrSdYR01 䰧<_?hܫ/13)Ȅ3u?8IM#C y'? f@;tIPqzC[//۫UAn̈!l `ֻݘ@H팰)ƥW7K,&_|8f[vlU ƍilyU]ϴmSV?(P)³vVόS)lHff?~IO ͔-xaCe dry,d,Lꉒ/WfD_@\Rv3Pވ ^6FC}jڂV;.:{hh6A R!endstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 290 >> stream xcd`ab`ddH)K-LNuI if!C;Y0t0w,R{RE ,A4B5u *23J M*2 .řy j@FYjN~Anj^_fnRiBpb^f$> f```e`c`bddoz߹ .[w^w?έt|׊"goF>-88Qp_ na`s|%~lcz,\广N.? endstream endobj 110 0 obj << /Filter /FlateDecode /Length 3684 >> stream x\KoGlȗ4~8lc`aa/ ;_שׁzsw*ee=2++XX?ߧWG|H_x$^8>(O.JWy,Ce >j{|ruMw+f\UݫZkắKlVrtJqbV4pR{d~FB]ZI‹Нa~8| $83gE]b1hYiOr?!L6OV<#j ?IB36t7{{Kʹk: 8qstgʳ&[3F>!e9t (O](QW'iԸ6FsN@1:cb'Xfu%E%fJ ԕth%|48Z&c%M%m%u%`!0ЪVNG']t%w\^W]i [<@W,+!tޤ^R@Vq'b%K7 pǦ N{VajZ_KA^ 8Am!o-jy[`7x~Xޡ &,uʱ{x dpQ}1;Y4m)4!L+c 5AUVAS?u<[kOAsfcB H$yG e8oi"P<<ݭv>i<\B!)Dehe籍y<Cn|(C.! y[p0?H FxگiW:zT>%^D% m.ע]@QQN=֩YEJ7J6)bUCH\+M](7݆O93i˾HJHmQ{Nri+R0SlMW, L#vL%o*y2[ZSk>^OaxM.٠#IY65L'5vgj{x^NuTY%O+y^]ܰ|^r*%KTu^Jn*ye;bCvm%فoYa*UCsƛ^KE)>c.`ANCZ/wҰdQL ׳ ޗ4- 'yhmqw9۸9ЖW@a0ȍRMa$'iDrv;]&3`gY%:䷥~ۧ@\^qMnsk5%7> J1~Y-]iJA;?O)9I) }_7]tdB*}Vcl;$iB.bv .DRf'){_)DFtSP nPL|8@"58d`x{}$IiZqÅr~}:sX`t0on2Ȩ0R1١8I' ,tn@`+ .{ߦAPSUh<#vtHuFM&2НD]v 9$ur-IB941xa}yM>*9 [ZqhZ>2y"uں  "۝eeM{ WHQ8mL# ׵-e0/A_3-jž@]~A*mA7H Gx怸zw!Ґ k /k* f.hL @bR>u񐵍`Vd㊌ڪ*+ Xg W'q8@\ɧn|| Q,Z3}5Vg$|'ɀfMwn,hhm1+L| n07 )I2ztf5gSl`!<$TvHN>b%`_TJ~UO+u%ZVJAS?frw]lh`P@~{K%HfCdHV۪(=B Y 8 ~B]wGQ%F'~=JEq֖G*ixa"/*Ji<;lLu@-ˋDEtb!,@A!ax͢c?a CVXbk~D'2|,!+W,1*Hzӫu4:jr s3L^Z:qUjJ]hоV7呣v2'[OSG!=$'0yRn[eSע*]~+a9iڼ Ԧ*L0ݓՄ/ >Ur9O~metG<4AnSL M8.HdHy#  5|(k)ika҄aIo ̚o6O˚U6=h_tjR=֮-5}UZ𘶼>+mށK1.WKs9NoD-fWgq; ZAӐ z3 }qnH65?<~qc;˴%qt^3n~ܯ.uzZiYPlzZ #0J\cŶZGqJo.I*r+x>7!XLʪlI]KM,א3ve1~ܖ;"%| ~m/yGcu?+A7ld|U*Rf0|:ItIhgK>.6/]ww`UፁM` ̏ShU|e|rߊ+sIrr/_endstream endobj 111 0 obj << /Filter /FlateDecode /Length 1835 >> stream xZnF}W  w,PH ZA*}i`˒Zb)JbR7Ρt)+hP!ٙoaΠT6/ 5ks_g|-"65揪fi6ASaWn%LI/x-? B(*9QjUGOZy6ƛL֦Yjtgƻ]GQwݪ(b;},Y'^/2h:jMi&6J <|Saq8ȒdY<61z?XGAl4 C (+P-Kdԗ1}V;No -β3p< C @o]K%Abѱ@s`ktI Y)P/͔NKbɱw.w2z,\\< Xn WQ%{M wzEŷJbgY~iɼ$a (8nۥ2 |C.kLr-`(BD`G v.Mw`3Ν=CIw11i95,ͦ\d0f$Q, p. 2ԾDZW\jr97N(L]ة{SZ ȌNLGhPI\+}sh"5.͑1k\a4ʸ\ًv44.l'HKyR@m࿎`T j69)j|$63Fy=",z*x*c1KY;Ip!Ԅ/+㸒kSLMЖ >+ HN j|=v]Y^y^>SPHR*]mW*(@ІV+qpR܋rů JH@y,SߗZ[ }JX%79<4x[ \mf_FAOf+A8 vjendstream endobj 112 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 486 >> stream xcd`ab`dddw 641H3a!]g,,۽KyyX-={3#c~is~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWqr-(-I-ROI-c``` 6f`0a9ΏK/xo1H'&dS7oyMm?VljU 8foE3sL_ѽ Wei+.Yc\oZ֮nVKEz۹٬;/Eyf}||yz}-wxhqV)5QtᏀ9^;i: r\,y8OܜpCAendstream endobj 113 0 obj << /Type /XRef /Length 122 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 114 /ID [<108d69ecb93bff52098d6fa08cc2cccd>] >> stream xcb&F~0 $8JP?@6]PJ".H00 HB RpL g!e2Auzq g 687k@$:]` endstream endobj startxref 76945 %%EOF zoo/inst/doc/sunw.rda0000644000175400001440000004046611747047642014510 0ustar zeileisusersRDX2 X  sunw@\(@ =p @ffffff@(\)@(\)@Q@ =p@@\(\@Q@(\)@@\(\@Q@\(@zG@QR@ffffff@Gz@\(@=p =@Gz@GzH@\(@333333@Q@\(\@p =q@ =p @QR@Gz@Q@\(\@ =p@Q@@zG@\(@ =p@Q@=p =@Q@zG@Gz@@333333@333333@(\)@Q@QR@ =p@zG@\(@zG{@ =p @p =q@ =p @(\)@\(@ =p@Q@Q@@=p =@Q@(\)@Q@Q@ =p @Q@ =p @QR@\(@ =p@GzH@zG@\(@GzH@\(@333333@@\(\@(\)@@333333@\(\@\(@(\)@ GzH@ Q@ zG@ =p@p =q@(\)@ffffff@ =p @@333333@\(\@\(@Q@@@@zG{@p =q@Q@zG@ =p @=p =@Q@(\)@Gz@zG@\(@GzH@QR@Q@\(@Q@(\)@ =p@\(\@Q@GzH@zG@=p =@@zG@(\)@ =p @p =q@Gz@Q@Q@@zG@Q@ffffff@zG@@ \(\@ Q@ \(@zG@\(@Q@(\)@Gz@ =p@ =p@ zG{@ =p =@ GzH@ Gz@ 333333@ =p@ Q@ \(@ GzH@@ Q@@(\)@Q@\(@ =p @@333333@Q@Q@p =q@Q@@ffffff@(\)@zG@\(\@p =q@\(@\(@GzH@@Gz@\(\@QR@@ =p @GzH@\(@\(@zG@zG@ =p@Q@@Q@(\)@\(@@333333@zG@Q@ =p @QR@Q@zG@\(@\(@333333@\(@\(@Gz@@Gz@QR@@zG{@zG@Q@=p =@zG{@@zG{@GzH@Gz@Gz@ =p@ffffff@\(@\(\@Gz@Q@zG@@GzH@@Q@(\)@QR@(\)@Q@ =p @\(@Q@Q@(\)@ =p @zG@p =q@Q@Q@ =p@333333@=p =@QR@(\)@333333@\(@zG@ffffff@@=p =@ffffff@\(@@=p =@@ =p@Q@zG@ffffff@\(\@Q@zG{@p =q@@ffffff@zG@Q@Q@Q@333333@ffffff@p =q@zG@@@\(@ =p @@ =p@\(\@QR@@p =q@(\)@=p =@ffffff@\(@@ffffff@\(@ffffff@333333@Q@\(\@zG@QR@Q@Gz@Q@(\)@\(@@zG{@ffffff@Q@Q@\(@GzH@zG@ =p@ffffff@\(@ffffff@\(\@Gz@=p =@Q@\(@333333@Q@ =p@333333@zG@\(\@zG@Q@@ \(@=p =@ =p @Q@p =q@(\)@ =p@(\)@\(\@Q@(\)@@Q@Q@Q@ffffff@Gz@@333333@p =q@p =q@QR@ffffff@333333@\(@\(@@Q@Q@zG@GzH@zG{@ =p@333333@Gz@ =p@QR@ =p@Q@=p =@QR@\(\@Q@333333@Q@\(@Gz@Q@Q@ =p@@(\)@(\)@\(@ \(@QR@ =p@ =p@zG@\(@ =p @@ @ Q@ ffffff@ \(@ Q@ QR@ QR@=p =@\(@ =p@(\)@zG{@Q@@Q@\(\@333333@\(@@Q@Q@\(@\(@\(\@ffffff@\(\@@ =p@ =p@(\)@ffffff@\(@Q@zG@ffffff@ffffff@\(\@=p =@Gz@333333@=p =@GzH@=p =@zG@\(@Q@\(@\(\@zG@GzH@QR@QR@@333333@\(@=p =@ =p@Q@333333@GzH@ =p @zG@zG{@(\)@zG{@p =q@Q@333333@@\(@QR@ =p@ =p@zG{@Q@zG@zG@=p =@zG@zG{@p =q@@\(@@zG@Q@(\)@\(\@@Q@@@\(\@333333@@=p =@@@zG@Gz@\(@@Gz@zG@333333@@@zG@QR@\(@Q@333333@\(@\(@ =p@zG@ =p@ =p@ =p @zG{@=p =@zG@ =p @ =p@zG{@@zG@@@(\)@Gz@p =q@\(@ =p@QR@Q@ =p@\(\@@@=p =@QR@ =p@Q@p =q@333333@QR@Q@333333@(\)@QR@@p =q@\(@ffffff@333333@ =p@ =p@\(@Q@GzH@\(@p =q@p =q@@@Q@@zG@\(@Q@333333@Q@@Q@ =p@ffffff@ffffff@Q@Q@Q@\(@GzH@@ =p @ffffff@=p =@ =p @@ zG@ Q@ \(\@ @zG{@zG{@ zG@ =p@=p =@ =p@\(@Gz@zG@Q@ =p@\(@Q@QR@Q@ =p@ =p @\(@ =p@zG@Q@\(@\(@ffffff@Q@=p =@ffffff@@@Q@QR@\(\@zG@Q@\(\@@\(@ =p@@ =p @\(@=p =@zG@ @ =p@\(\@ Q@ zG@ p =q@ =p @ GzH@ =p@ 333333@ Q@\(@zG@ Q@ \(@ @ \(@ zG@ \(\@ QR@ =p@ @ zG@ \(@ \(@ \(@ GzH@ Q@ =p@@zG{@ffffff@ffffff@ =p@ =p @GzH@GzH@ =p@Gz@333333@ =p@ =p @Q@ =p @GzH@p =q@zG@333333@zG@zG{@(\)@zG@p =q@@=p =@@ffffff@Gz@\(@zG{@Q@Q@ =p@@\(@ =p@zG@Q@zG@QR@=p =@zG@\(@zG{@zG@Q@Q@zG@\(@\(@Gz@Gz@ffffff@p =q@@ =p@@ffffff@QR@p =q@ =p @Q@Q@@@ =p@ =p@ffffff@@zG{@zG@@\(@Q@@Q@ =p @zG@ =p@ffffff@Q@@Q@Gz@zG{@ffffff@zG{@Q@@@Q@\(@ =p @=p =@@@ =p@p =q@\(@\(\@ =p@zG@@p =q@333333@Gz@Q@(\)@\(@Q@zG{@=p =@ =p@zG@(\)@\(@zG@Q@(\)@GzH@ffffff@@\(@ =p@zG@ =p@=p =@p =q@Gz@@ =p@333333@ =p@QR@ffffff@ffffff@zG{@ =p@@Q@ =p@GzH@333333@ =p @ =p@@p =q@\(@\(@zG@\(@=p =@\(@333333@333333@Q@Gz@333333@=p =@zG@ =p @333333@\(@ =p@zG@\(@333333@Gz@@Q@333333@ =p @\(@GzH@=p =@ \(@ Q@@@Gz@Q@zG@@ffffff@Q@Gz@ =p@zG{@\(@\(@zG@QR@Q@Q@Gz@(\)@QR@ =p @\(\@ =p@Q@@ffffff@(\)@\(\@\(@(\)@Q@ =p@ffffff@Q@QR@ =p@\(@ =p @(\)@@@333333@333333@ffffff@(\)@ @Q@p =q@QR@ffffff@ Q@ 333333@ =p@ 333333@QR@@zG@zG@Q@ =p@ zG@ =p@ Q@ Q@ zG{@ Gz@ Q@ =p =@zG@ 333333@ @ \(\@(\)@QR@=p =@\(@zG{@\(@\(@\(@GzH@p =q@ =p@\(\@Q@ffffff@(\)@\(\@333333@Q@Q@=p =@@Gz@Q@=p =@\(@zG@(\)@\(@\(@Q@=p =@Q@ =p@Gz@GzH@zG@\(@\(@zG@Q@zG@Q@ffffff@@zG@Q@Gz@@@Q@Q@zG{@(\)@=p =@Q@ffffff@ =p @p =q@\(\@ =p@ffffff@\(\@Q@\(@Q@ =p@ =p @ =p @333333@ =p@\(@ =p@\(@=p =@333333@ =p @@Q@\(\@@Q@Q@Q@@zG@\(@ =p @zG{@@zG@\( dim  dimnames Open High Low Close index@A@C@C@D@D@E@F@G@G@H@H@J@K@K@L@M@N@N@O@O@Q@Q@R@R@S@T@U@U@V@V@X@Y@Y@Z@[@\@\@]@]@_@_@`@`@a@b@c@c@d@d@f@f@g@g@h@i@j@j@k@k@m@m@n@n@o@p@q@q@r@t@t@u@u@v@w@x@x@y@y@{@{@|@|@}@~@@@Ȁ@Ȁ@Ȃ@Ȃ@ȃ@ȃ@Ȅ@ȅ@Ȇ@Ȇ@ȇ@ȇ@ȉ@ȉ@Ȋ@Ȋ@ȋ@ȍ@ȍ@Ȏ@Ȏ@Ȑ@Ȑ@ȑ@ȑ@ȓ@Ȕ@Ȕ@ȕ@ȕ@ȗ@ȗ@Ș@Ș@ș@Ț@ț@ț@Ȝ@Ȝ@Ȟ@ȟ@ȟ@Ƞ@ȡ@Ȣ@Ȣ@ȣ@ȣ@ȥ@ȥ@Ȧ@Ȧ@ȧ@Ȩ@ȩ@ȩ@Ȫ@Ȫ@Ȭ@Ȭ@ȭ@ȭ@Ȯ@ȯ@Ȱ@Ȱ@ȱ@ȱ@ȳ@ȳ@ȴ@ȴ@ȵ@ȶ@ȷ@ȷ@ȸ@ȸ@Ⱥ@Ⱥ@Ȼ@Ȼ@ȼ@Ⱦ@Ⱦ@ȿ@ȿ@@@@€@@Ā@@ŀ@@ƀ@@Ȁ@@ɀ@@ˀ@@̀@@̀@@π@@Ѐ@@Ҁ@@Ӏ@@Ԁ@@ր@@׀@@ـ@@ڀ@@ۀ@@݀@@ހ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ class Date zoo sunw2 @(\)@=p =@zG@333333@zG@QR@@\(@(\)@@333333@\(   Close @A@Q@_@n@~@ȍ@Ȝ@Ȭ@Ȼ@@ـ@ Date zoo eur.usdn?!R<6?sP?'RT`e?!.H?#wk?A [7?b}Vm?9D?n.2?+ I?+ I?eO?eO ?m8Y??|hs?Q?Q?Ϫ͞?zG{?2W? ěT?6z?W>6z?%1?%1?"`A?Y|?9D?!.H?ݗ+j?E?E?E?S?Vu? M:?n?S?S&?5?|h?L_?QR?YJ?~($ x?cA [?]ce?fA?o?qiC?C$?U=K? L/{?4J?tj?Xe,?M:?.H?`A7L?.H?!.H?#x?ᰉ'?O;dZ?Q??͞%?ȴ9Xb?䎊?"`B?3?+j?ߤ??Mj?\(?O M?n.3?'RT`?*0?,6z?W>6z?Xe+?P{?}H?&IQ?*0U2a|?0U2a|?4m8?:S&?;5Xy?~$??Vu?A [?MjO?Q??qu!?-V?,<쿱?,<쿱?-V?6C-?qu!?YJE?xl"h ?S&?n/?n/?.H?- ?#x? xF]?JL?F]c?F]c?Fs?=K]?Ov_خ?8YJ?_o?1-?2W?+ I^?84֡b?[W>6z?_Ft?o?L_?Mj?󖻘?4m9?$tS?L_?Mj?͞&?wkQ?TɅ??? k?Fs?bM?<64?????O;dZ?vȴ9X?73?K]cA?m\?l!-w?l!-w?b}Vm?]ce?Xy=c?xF?u%F L?tj~?{J#9?$/?Vt?M:?xF?ᰊ?ᰊ?}Vl?-?U=?ɅoiD?ԕ*1?]ce?ѷY?ۋq ?$?#w?҈p:?&IR?Q?쿱[W??fA??Y}?u"?=K^?]cA ?Zݘ?_Ft?qiB?GzH?GE84???>BZc ?@NU?O M;?@NU?I^5?}?F]cf?L_?3?3?-?wkQ?$/??쿱[W?s???@?a@N?vȴ9X?W'?|?Q?3?l"h ԕ?Vl!-?W&?^5?|?8YJ???:S&?H?|??4m9?wkP?M:?JD?L_?O M;?^?4m9?M:? k?S&?u"?,>= library("zoo") library("tseries") library("strucchange") library("timeDate") online <- FALSE ## if set to FALSE the local copy of MSFT.rda ## is used instead of get.hist.quote() options(prompt = "R> ") Sys.setenv(TZ = "GMT") @ \section{Introduction} \label{sec:intro} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{zoo:R:2008} ships with a class for regularly spaced time series, \code{"ts"} in package \pkg{stats}, but has no native class for irregularly spaced time series. With the increased interest in computational finance with \proglang{R} over the last years several implementations of classes for irregular time series emerged which are aimed particularly at finance applications. These include the \proglang{S4} classes \code{"timeSeries"} in package \pkg{timeSeries} (previously \pkg{fSeries}) from the \pkg{Rmetrics} suite \citep{zoo:Rmetrics:2008}, \code{"its"} in package \pkg{its} \citep[][archived on CRAN]{zoo:its:2004} and the \proglang{S3} class \code{"irts"} in package \pkg{tseries} \citep{zoo:tseries:2007}. With these packages available, why would anybody want yet another package providing infrastructure for irregular time series? The above mentioned implementations have in common that they are restricted to a particular class for the time scale: the former implementation comes with its own time class \code{"timeDate"} from package \pkg{timeDate} (previously \pkg{fCalendar}) built on top of the \code{"POSIXct"} class available in base \proglang{R} whereas the latter two use \code{"POSIXct"} directly. And this was the starting point for the \pkg{zoo} project: the first author of the present paper needed more general support for ordered observations, independent of a particular index class, for the package \pkg{strucchange} \citep{zoo:Zeileis+Leisch+Hornik:2002}. Hence, the package was called \pkg{zoo} which stands for \underline{Z}'s \underline{o}rdered \underline{o}bservations. Since the first release, a major part of the additions to \pkg{zoo} were provided by the second author of this paper, so that the name of the package does not really reflect the authorship anymore. Nevertheless, independence of a particular index class remained the most important design goal. While the package evolved to its current status, a second key design goal became more and more clear: to provide methods to standard generic functions for the \code{"zoo"} class that are similar to those for the \code{"ts"} class (and base \proglang{R} in general) such that the usage of \pkg{zoo} is very intuitive because few additional commands have to be learned. This paper describes how these design goals are implemented in \pkg{zoo}. The resulting package provides the \code{"zoo"} class which offers an extensive (and still growing) set of standard and new methods for working with indexed observations and `talks' to the classes \code{"ts"}, \code{"its"}, \code{"irts"} and \code{"timeSeries"}. \citep[In addition to these independent approaches, the class \code{"xts"} built upon \code{"zoo"} was recently introduced by][.]{zoo:xts:2008}. \pkg{zoo} also bridges the gap between regular and irregular time series by providing coercion with (virtually) no loss of information between \code{"ts"} and \code{"zoo"}. With these tools \pkg{zoo} provides the basic infrastructure for working with indexed totally ordered observations and the package can be either employed by users directly or can be a basic ingredient on top of which other more specialized applications can be built. The remainder of the paper is organized as follows: Section~\ref{sec:zoo-class} explains how \code{"zoo"} objects are created and illustrates how the corresponding methods for plotting, merging and binding, several mathematical operations, extracting and replacing data and index, coercion and \code{NA} handling can be used. Section~\ref{sec:combining} outlines how other packages can build on this basic infrastructure. Section~\ref{sec:summary} gives a few summarizing remarks and an outlook on future developments. Finally, an appendix provides a reference card that gives an overview of the functionality contained in \pkg{zoo}. \section[The class "zoo" and its methods]{The class \code{"zoo"} and its methods} \label{sec:zoo-class} This section describes how \code{"zoo"} series can be created and subsequently manipulated, visualized, combined or coerced to other classes. In Section~\ref{sec:zoo}, the general class \code{"zoo"} for totally ordered series is described. Subsequently, in Section~\ref{sec:zooreg}, the subclass \code{"zooreg"} for regular \code{"zoo"} series, i.e., series which have an index with a specified frequency, is discussed. The methods illustrated in the remainder of the section are mostly the same for both \code{"zoo"} and \code{"zooreg"} objects and hence do not have to be discussed separately. The few differences in merging and binding are briefly highlighted in Section~\ref{sec:merge}. \subsection[Creation of "zoo" objects]{Creation of \code{"zoo"} objects} \label{sec:zoo} The simple idea for the creation of \code{"zoo"} objects is to have some vector or matrix of observations \code{x} which are totally ordered by some index vector. In time series applications, this index is a measure of time but every other numeric, character or even more abstract vector that provides a total ordering of the observations is also suitable. Objects of class \code{"zoo"} are created by the function \begin{Scode} zoo(x, order.by) \end{Scode} where \code{x} is the vector or matrix of observations\footnote{In principle, more general objects can be indexed, but currently \pkg{zoo} does not support this. Development plans are that \pkg{zoo} should eventually support indexed factors, data frames and lists.} and \code{order.by} is the index by which the observations should be ordered. It has to be of the same length as \code{NROW(x)}, i.e., either the same length as \code{x} for vectors or the same number of rows for matrices.\footnote{The only case where this restriction is not imposed is for zero-length vectors, i.e., vectors that only have an index but no data.} The \code{"zoo"} object created is essentially the vector/matrix as before but has an additional \code{"index"} attribute in which the index is stored.\footnote{There is some limited support for indexed factors available in which case the \code{"zoo"} object also has an attribute \code{"oclass"} with the original class of \code{x}. This feature is still under development and might change in future versions.} Both the observations in the vector/matrix \code{x} and the index \code{order.by} can, in principle, be of arbitrary classes. However, most of the following methods (plotting, aggregating, mathematical operations) for \code{"zoo"} objects are typically only useful for numeric observations \code{x}. Special effort in the design was put into independence from a particular class for the index vector. In \pkg{zoo}, it is assumed that combination \code{c()}, querying the \code{length()}, value matching \code{MATCH()}, subsetting \code{[}, and, of course, ordering \code{ORDER()} work when applied to the index. In addition, an \code{as.character()} method might improve printed output\footnote{If an \code{as.character()} method is already defined, but gives not the desired output for printing, then an \code{index2char()} method can be defined. This is a generic convenience function used for creating character representations of the index vector and it defaults to using \code{as.character()}.} and \code{as.numeric()} could be used for computing distances between indexes, e.g., in interpolation. Both methods are not necessary for working with \code{"zoo"} objects but could be used if available. All these methods are available, e.g., for standard numeric and character vectors and for vectors of classes \code{"Date"}, \code{"POSIXct"} or \code{"times"} from package \pkg{chron} and \code{"timeDate"} in \pkg{timeDate}. Because not all required methods used to be available for \code{"timeDate"} in older versions of \pkg{fCalendar}, Section~\ref{sec:timeDate} has a rather outdated example how to provide such methods so that \code{"zoo"} objects work with \code{"timeDate"} indexes. To achieve this independence of the index class, new generic functions for ordering (\code{ORDER()}) and value matching (\code{MATCH()}) are introduced as the corresponding base functions \code{order()} and \code{match()} are non-generic. The default methods simply call the corresponding base functions, i.e., no new method needs to be introduced for a particular index class if the non-generic functions \code{order()} and \code{match()} work for this class. \emph{\proglang{R} now also provides a new generic \code{xtfrm()} which was not available when the new generic \code{ORDER()} was introduced. If there is a \code{xtfrm()} for a class, the default \code{ORDER()} method typically works.} To illustrate the usage of \code{zoo()}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. <>= library("zoo") set.seed(1071) @ Then, we create two vectors \code{z1} and \code{z2} with \code{"POSIXct"} indexes, one with random observations <>= z1.index <- ISOdatetime(2004, rep(1:2,5), sample(28,10), 0, 0, 0) z1.data <- rnorm(10) z1 <- zoo(z1.data, z1.index) @ and one with a sine wave <>= z2.index <- as.POSIXct(paste(2004, rep(1:2, 5), sample(1:28, 10), sep = "-")) z2.data <- sin(2*1:10/pi) z2 <- zoo(z2.data, z2.index) @ Furthermore, we create a matrix \code{Z} with random observations and a \code{"Date"} index <>= Z.index <- as.Date(sample(12450:12500, 10)) Z.data <- matrix(rnorm(30), ncol = 3) colnames(Z.data) <- c("Aa", "Bb", "Cc") Z <- zoo(Z.data, Z.index) @ In the examples above, the generation of indexes looks a bit awkward due to the fact the indexes need to be randomly generated (and there are no special functions for random indexes because these are rarely needed in practice). In ``real world'' applications, the indexes are typically part of the raw data set read into \proglang{R} so the code would be even simpler. See Section~\ref{sec:combining} for such examples.\footnote{Note, that in the code above a new \code{as.Date} method, provided in \pkg{zoo}, is used to convert days since 1970-01-01 to class \code{"Date"}. See the respective help page for more details.} Methods to several standard generic functions are available for \code{"zoo"} objects, such as \code{print}, \code{summary}, \code{str}, \code{head}, \code{tail} and \code{[} (subsetting), a few of which are illustrated in the following. There are three printing code styles for \code{"zoo"} objects: vectors are by default printed in \code{"horizontal"} style <>= z1 z1[3:7] @ and matrices in \code{"vertical"} style <>= Z Z[1:3, 2:3] @ Additionally, there is a \code{"plain"} style which simply first prints the data and then the index. Above, we have illustrated that \code{"zoo"} series can be indexed like vectors or matrices respectively, i.e., with integers correponding to their observation number (and column number). But for indexed observations, one would obviously also like to be able to index with the index class. This is also available in \code{[} which only uses vector/matrix-type subsetting if its first argument is of class \code{"numeric"}, \code{"integer"} or \code{"logical"}. <>= z1[ISOdatetime(2004, 1, c(14, 25), 0, 0, 0)] @ If the index class happens to be \code{"numeric"}, the index has to be either insulated in \code{I()} like \code{z[I(i)]} or the \code{window()} method can be used (see Section~\ref{sec:window}). Summaries and most other methods for \code{"zoo"} objects are carried out column wise, reflecting the rectangular structure. In addition, a summary of the index is provided. <>= summary(z1) summary(Z) @ \subsection[Creation of "zooreg" objects]{Creation of \code{"zooreg"} objects} \label{sec:zooreg} Strictly regular series are such series observations where the distance between the indexes of every two adjacent observations is the same. Such series can also be described by their frequency, i.e., the reciprocal value of the distance between two observations. As \code{"zoo"} can be used to store series with arbitrary type of index, it can, of course, also be used to store series with regular indexes. So why should this case be given special attention, in particular as there is already the \code{"ts"} class devoted entirely to regular series? There are two reasons: First, to be able to convert back and forth between \code{"ts"} and \code{"zoo"}, the frequency of a certain series needs to be stored on the \code{"zoo"} side. Second, \code{"ts"} is limited to strictly regular series and the regularity is lost if some internal observations are omitted. Series that can be created by omitting some internal observations from strictly regular series will in the following be refered to as being (weakly) regular. Therefore, a class that bridges the gap between irregular and strictly regular series is needed and \code{"zooreg"} fills this gap. Objects of class \code{"zooreg"} inherit from class \code{"zoo"} but have an additional attribute \code{"frequency"} in which the frequency of the series is stored. Therefore, they can be employed to represent both strictly and weakly regular series. To create a \code{"zooreg"} object, either the command \code{zoo()} can be used or the command \code{zooreg()}. % \begin{Scode} zoo(x, order.by, frequency) zooreg(data, start, end, frequency, deltat, ts.eps, order.by) \end{Scode} % If \code{zoo()} is called as in the previous section but with an additional \code{frequency} argument, it is checked whether \code{frequency} complies with the index \code{order.by}: if it does an object of class \code{"zooreg"} inheriting from \code{"zoo"} is returned. The command \code{zooreg()} takes mostly the same arguments as \code{ts()}.\footnote{Only if \code{order.by} is specified in the \code{zooreg()} call, then \code{zoo(x, order.by, frequency)} is called.} In both cases, the index class is more restricted than in the plain \code{"zoo"} case. The index must be of a class which can be coerced to \code{"numeric"} (for checking its regularity) and when converted to numeric the index must be expressable as multiples of 1/frequency. Furthermore, adding/substracting a numeric to/from an observation of the index class, should return the correct value of the index class again, i.e., group generic functions \code{Ops} should be defined. For regular series with frequency 4 and 12, respectively, the dedicated time classes \code{"yearqtr"} and \code{"yearmon"} are used by default (unless the argument \code{calendar = FALSE} is set or \code{options(zoo.calendar = FALSE)} is set generally). These time classes are discussed in more detail in Section~\ref{sec:yearmon}. The following calls yield equivalent series % <>= zr1 <- zooreg(sin(1:9), start = 2000, frequency = 4) zr2 <- zoo(sin(1:9), seq(2000, 2002, by = 1/4), 4) zr1 zr2 @ % to which methods to standard generic functions for regular series can be applied, such as \code{frequency}, \code{deltat}, \code{cycle}. As stated above, the advantage of \code{"zooreg"} series is that they remain regular even if an internal observation is dropped: % <>= zr1 <- zr1[-c(3, 5)] zr1 class(zr1) frequency(zr1) @ % This facilitates \code{NA} handling significantly compared to \code{"ts"} and makes \code{"zooreg"} a much more attractive data type, e.g., for time series regression. \code{zooreg()} can also deal with other non-numeric indexes provided that adding \code{"numeric"} observations to the index class preserves the class and does not coerce to \code{"numeric"}. % <>= zooreg(1:5, start = as.Date("2005-01-01")) @ % To check whether a certain series is (strictly) regular, the new generic function \code{is.regular(x, strict = FALSE)} can be used: % <>= is.regular(zr1) is.regular(zr1, strict = TRUE) @ % This function (and also the \code{frequency}, \code{deltat} and \code{cycle}) also work for \code{"zoo"} objects if the regularity can still be inferred from the data: % <>= zr1 <- as.zoo(zr1) zr1 class(zr1) is.regular(zr1) frequency(zr1) @ % Of course, inferring the underlying regularity is not always reliable and it is safer to store a regular series as a \code{"zooreg"} object if it is intended to be a regular series. If a weakly regular series is coerced to \code{"ts"} the missing observations are filled with \code{NA}s (see also Section~\ref{sec:NA}). For strictly regular series with numeric or \code{"yearqtr"} or \code{"yearmon"} index, the class can be switched between \code{"zoo"} and \code{"ts"} without loss of information. % <>= as.ts(zr1) identical(zr2, as.zoo(as.ts(zr2))) @ % This enables direct use of functions such as \code{acf}, \code{arima}, \code{stl} etc. on \code{"zooreg"} objects as these methods coerce to \code{"ts"} first. The result only has to be coerced back to \code{"zoo"}, if appropriate. \subsection{Plotting} \label{sec:plot} The \code{plot} method for \code{"zoo"} objects, in particular for multivariate \code{"zoo"} series, is based on the corresponding method for (multivariate) regular time series. It relies on \code{plot} and \code{lines} methods being available for the index class which can plot the index against the observations. By default the \code{plot} method creates a panel for each series % <>= plot(Z) @ % but can also display all series in a single panel % <>= plot(Z, plot.type = "single", col = 2:4) @ % \begin{figure}[b!] \begin{center} <>= <> @ \caption{\label{fig:plot2} Example of a single panel plot} \end{center} \end{figure} % \begin{figure}[p] \begin{center} <>= <> @ <>= plot(Z, type = "b", lty = 1:3, pch = list(Aa = 1:5, Bb = 2, Cc = 4), col = list(Bb = 2, 4)) @ \caption{\label{fig:plot13} Examples of multiple panel plots} \end{center} \end{figure} % In both cases additional graphical parameters like color \code{col}, plotting character \code{pch} and line type \code{lty} can be expanded to the number of series. But the \code{plot} method for \code{"zoo"} objects offers some more flexibility in specification of graphical parameters as in <>= <> @ The argument \code{lty} behaves as before and sets every series in another line type. The \code{pch} argument is a named list that assigns to each series a different vector of plotting characters each of which is expanded to the number of observations. Such a list does not necessarily have to include the names of all series, but can also specify a subset. For the remaining series the default parameter is then used which can again be changed: e.g., in the above example the \code{col} argument is set to display the series \code{"Bb"} in red and all remaining series in blue. The results of the multiple panel plots are depicted in Figure~\ref{fig:plot13} and the single panel plot in Figure~\ref{fig:plot2}. In addition to the \code{plot} method that uses base graphics for the visualizations, there are also methods for \code{xyplot} and \code{autoplot}. The former uses the \pkg{lattice} \citep{lattice} package for visualizations while the latter employs \pkg{ggplot2} \citep{ggplot2}. Both methods try to follow the conventions used by the \code{plot} method described above and the style/conventions used in the respective packages. See \code{?xyplot.zoo} and \code{?autoplot.zoo} for more examples and details. \subsection{Merging and binding} \label{sec:merge} As for many rectangular data formats in \proglang{R}, there are both methods for combining the rows and columns of \code{"zoo"} objects respectively. For the \code{rbind} method the number of columns of the combined objects has to be identical and the indexes may not overlap. <>= rbind(z1[5:10], z1[2:3]) @ The \code{c} method simply calls \code{rbind} and hence behaves in the same way. The \code{cbind} method by default combines the columns by the union of the indexes and fills the created gaps by \code{NA}s. <>= cbind(z1, z2) @ In fact, the \code{cbind} method is synonymous with the \code{merge} method\footnote{Note, that in some situations the column naming in the resulting object is somewhat problematic in the \code{cbind} method and the \code{merge} method might provide better formatting of the column names.} except that the latter provides additional arguments which allow for combining the columns by the intersection of the indexes using the argument \code{all = FALSE} <>= merge(z1, z2, all = FALSE) @ Additionally, the filling pattern can be changed in \code{merge}, the naming of the columns can be modified and the return class of the result can be specified. In the case of merging of objects with different index classes, \proglang{R} gives a warning and tries to coerce the indexes. Merging objects with different index classes is generally discouraged---if it is used nevertheless, it is the responsibility of the user to ensure that the result is as intended. If at least one of the merged/binded objects was a \code{"zooreg"} object, then \code{merge} tries to return a \code{"zooreg"} object. This is done by assessing whether there is a common maximal frequency and by checking whether the resulting index is still (weakly) regular. If non-\code{"zoo"} objects are included in merging, then \code{merge} gives plain vectors/factors/matrices the index of the first argument (if it is of the same length). Scalars are always added for the full index without missing values. <>= merge(z1, pi, 1:10) @ Another function which performs operations along a subset of indexes is \code{aggregate}, which is discussed in this section although it does not combine several objects. Using the \code{aggregate} method, \code{"zoo"} objects are split into subsets along a coarser index grid, summary statistics are computed for each and then the reduced object is returned. In the following example, first a function is set up which returns for a given \code{"Date"} value the corresponding first of the month. This function is then used to compute the coarser grid for the \code{aggregate} call: in the first example, the grouping is computed explicitely by \verb/firstofmonth(index(Z))/ and the mean of the observations in the month is returned---in the second example, only the function that computes the grouping (when applied to \verb/index(Z)/) is supplied and the first observation is used for aggregation. <>= firstofmonth <- function(x) as.Date(sub("..$", "01", format(x))) aggregate(Z, firstofmonth(index(Z)), mean) aggregate(Z, firstofmonth, head, 1) @ The opposite of aggregation is disaggregation. For example, the \code{Nile} dataset is an annual \code{"ts"} class series. To disaggregate it into a quarterly series, convert it to a \code{"zoo} class series, insert intermediate quarterly points containing \code{NA} values and then fill the \code{NA} values using \code{na.approx}, \code{na.locf} or \code{na.spline}. (More details on \code{NA} handling in general can be found in Section~\ref{sec:NA}.) <>= Nile.na <- merge(as.zoo(Nile), zoo(, seq(start(Nile)[1], end(Nile)[1], 1/4))) head(as.zoo(Nile)) head(na.approx(Nile.na)) head(na.locf(Nile.na)) head(na.spline(Nile.na)) @ \subsection{Mathematical operations} \label{sec:Ops} To allow for standard mathematical operations among \code{"zoo"} objects, \pkg{zoo} extends group generic functions \code{Ops}. These perform the operations only for the intersection of the indexes of the objects. As an example, the summation and logical comparison with $<$ of \code{z1} and \code{z2} yield <>= z1 + z2 z1 < z2 @ Additionally, methods for transposing \code{t} of \code{"zoo"} objects---which coerces to a matrix before---and computing cumulative quantities such as \code{cumsum}, \code{cumprod}, \code{cummin}, \code{cummax} which are all applied column wise. <>= cumsum(Z) @ \subsection{Extracting and replacing the data and the index} \label{sec:window} \pkg{zoo} provides several generic functions and methods to work on the data contained in a \code{"zoo"} object, the index (or time) attribute associated to it, and on both data and index. The data stored in \code{"zoo"} objects can be extracted by \code{coredata} which strips off all \code{"zoo"}-specific attributes and it can be replaced using \code{coredata<-}. Both are new generic functions\footnote{The \code{coredata} functionality is similar in spirit to the \code{core} function in \pkg{its} and \code{value} in \pkg{tseries}. However, the focus of those functions is somewhat narrower and we try to provide more general purpose generic functions. See the respective manual page for more details.} with methods for \code{"zoo"} objects as illustrated in the following example. <>= coredata(z1) coredata(z1) <- 1:10 z1 @ The index associated with a \code{"zoo"} object can be extracted by \code{index} and modified by \mbox{\code{index<-}.} As the interpretation of the index as ``time'' in time series applications is natural, there are also synonymous methods \code{time} and \code{time<-}. Hence, the commands \code{index(z2)} and \code{time(z2)} return equivalent results. <>= index(z2) @ The index scale of \code{z2} can be changed to that of \code{z1} by <>= index(z2) <- index(z1) z2 @ The start and the end of the index/time vector can be queried by \code{start} and \code{end}: <>= start(z1) end(z1) @ To work on both data and index/time, \pkg{zoo} provides \code{window} and \code{window<-} methods for \code{"zoo"} objects. In both cases the window is specified by \begin{Scode} window(x, index, start, end) \end{Scode} where \code{x} is the \code{"zoo"} object, \code{index} is a set of indexes to be selected (by default the full index of \code{x}) and \code{start} and \code{end} can be used to restrict the \code{index} set. <>= window(Z, start = as.Date("2004-03-01")) window(Z, index = index(Z)[5:8], end = as.Date("2004-03-01")) @ The first example selects all observations starting from 2004-03-01 whereas the second selects from the from the 5th to 8th observation those up to 2004-03-01. The same syntax can be used for the corresponding replacement function. <>= window(z1, end = as.POSIXct("2004-02-01")) <- 9:5 z1 @ Two methods that are standard in time series applications are \code{lag} and \code{diff}. These are available with the same arguments as the \code{"ts"} methods.\footnote{\code{diff} also has an additional argument that also allows for geometric and not only allows arithmetic differences. Furthermore, note the sign of the lag in \code{lag} which behaves like the \code{"ts"} method, i.e., by default it is positive and shifts the observations \emph{forward}, to obtain the more standard \emph{backward} shift the lag has to be negative.} <>= lag(z1, k = -1) merge(z1, lag(z1, k = 1)) diff(z1) @ \subsection[Coercion to and from "zoo"]{Coercion to and from \code{"zoo"}} \label{sec:as.zoo} Coercion to and from \code{"zoo"} objects is available for objects of various classes, in particular \code{"ts"}, \code{"irts"} and \code{"its"} objects can be coerced to \code{"zoo"} and back if the index is of the appropriate class.\footnote{Coercion from \code{"zoo"} to \code{"irts"} is contained in the \pkg{tseries} package.} Coercion between \code{"zooreg"} and \code{"zoo"} is also available and is essentially dropping the \code{"frequency"} attribute or trying to add one, respectively. Furthermore, \code{"zoo"} objects can be coerced to vectors, matrices, lists and data frames (the latter dropping the index/time attribute). A simple example is <>= as.data.frame(Z) @ \subsection[NA handling]{\code{NA} handling} \label{sec:NA} A wide range of methods for dealing with \code{NA}s (missing observations) in the observations are applicable to \code{"zoo"} objects including \code{na.omit}, \code{na.contiguous}, \code{na.approx}, \code{na.spline}, and \code{na.locf} among others. \code{na.omit}---or its default method to be more precise---returns a \code{"zoo"} object with incomplete observations removed. \code{na.contiguous} extracts the longest consecutive stretch of non-missing values. Furthermore, new generic functions \code{na.approx}, \code{na.spline}, and \code{na.locf} and corresponding default methods are introduced in \pkg{zoo}. The former two replace \code{NA}s by interpolation (using the function \code{approx} and \code{spline}, respectively) and the name of the latter stands for \underline{l}ast \underline{o}bservation \underline{c}arried \underline{f}orward. It replaces missing observations by the most recent non-\code{NA} prior to it. Leading \code{NA}s, which cannot be replaced by previous observations, are removed in both functions by default. <>= z1[sample(1:10, 3)] <- NA z1 na.omit(z1) na.contiguous(z1) na.approx(z1) na.approx(z1, 1:NROW(z1)) na.spline(z1) na.locf(z1) @ As the above example illustrates, \code{na.approx} (and also \code{na.spline}) use by default the underlying time scale for interpolation. This can be changed, e.g., to an equidistant spacing, by setting the second argument of \code{na.approx}. Furthermore, a different output time index can be supplied as well. In addition to the methods discussed above, there are also other methods for dealing with missing values in \pkg{zoo} such as \code{na.aggregate}, \code{na.fill}, \code{na.trim}, and \code{na.StructTS}. \subsection{Rolling functions} \label{sec:rolling} A typical task to be performed on ordered observations is to evaluate some function, e.g., computing the mean, in a window of observations that is moved over the full sample period. The resulting statistics are usually synonymously referred to as rolling/running/moving statistics. In \pkg{zoo}, the generic function \code{rollapply}\footnote{In previous versions of \pkg{zoo}, this function was called \code{rapply}. It was renamed because from \proglang{R}~2.4.0 on, base \proglang{R} provides a different function \code{rapply} for recursive (and not rolling) application of functions. The function \code{zoo::rapply} is still provided for backward compatibility, however it dispatches now to \code{rollapply} methods.} is provided along with a \code{"zoo"} and a \code{"ts"} method. The most important arguments are \begin{Scode} rollapply(data, width, FUN) \end{Scode} where the function \code{FUN} is applied to a rolling window of size \code{width} of the observations \code{data}. The function \code{rollapply} by default only evaluates the function for windows of full size \code{width} and then the result has \code{width - 1} fewer observations than the original series and is aligned at the center of the rolling window. Setting further arguments such as \code{partial}, \code{align}, or \code{fill} also allows for rolling computations on partial windows with arbitrary aligning and flexible filling. For example, without partial evaluation the `lost' observations could be filled with \code{NA}s and aligned at the left of the sample. <>= rollapply(Z, 5, sd) rollapply(Z, 5, sd, fill = NA, align = "left") @ To improve the performance of \code{rollapply(x, k, }\textit{foo}\code{)} for some frequently used functions \textit{foo}, more efficient implementations \code{roll}\textit{foo}\code{(x, k)} are available (and also called by \code{rollapply}). Currently, these are the generic functions \code{rollmean}, \code{rollmedian} and \code{rollmax} which have methods for \code{"zoo"} and \code{"ts"} series and a default method for plain vectors. <>= rollmean(z2, 5, fill = NA) @ \section[Combining zoo with other packages]{Combining \pkg{zoo} with other packages} \label{sec:combining} The main purpose of the package \pkg{zoo} is to provide basic infrastructure for working with indexed totally ordered observations that can be either employed by users directly or can be a basic ingredient on top of which other packages can build. The latter is illustrated with a few brief examples involving the packages \pkg{strucchange}, \pkg{tseries} and \pkg{timeDate}/\pkg{fCalendar} in this section. Finally, the classes \code{"yearmon"} and \code{"yearqtr"} (provided in \pkg{zoo}) are used for illustrating how \pkg{zoo} can be extended by creating a new index class. \subsection[strucchange: Empirical fluctuation processes]{\pkg{strucchange}: Empirical fluctuation processes} \label{sec:strucchange} The package \pkg{strucchange} provides a collection of methods for testing, monitoring and dating structural changes, in particular in linear regression models. Tests for structural change assess whether the parameters of a model remain constant over an ordering with respect to a specified variable, usually time. To adequately store and visualize empirical fluctuation processes which capture instabilities over this ordering, a data type for indexed ordered observations is required. This was the motivation for starting the \pkg{zoo} project. A simple example for the need of \code{"zoo"} objects in \pkg{strucchange} which can not be (easily) implemented by other irregular time series classes available in \proglang{R} is described in the following. We assess the constancy of the electrical resistance over the apparent juice content of kiwi fruits.\footnote{A different approach would be to test whether the slope of a regression of electrical resistance on juice content changes with increasing juice content, i.e., to test for instabilities in \code{ohms \~{} juice} instead of \code{ohms \~{} 1}. Both lead to similar results.} The data set \code{fruitohms} is contained in the \pkg{DAAG} package \citep{zoo:DAAG:2004}. The fitted \code{ocus} object contains the OLS-based CUSUM process for the mean of the electrical resistance (variable \code{ohms}) indexed by the juice content (variable \code{juice}). <>= library("strucchange") library("DAAG") data("fruitohms") ocus <- gefp(ohms ~ 1, order.by = ~ juice, data = fruitohms) @ \begin{figure}[h!] \begin{center} <>= plot(ocus) @ \caption{\label{fig:strucchange} Empirical M-fluctuation process for \code{fruitohms} data} \end{center} \end{figure} This OLS-based CUSUM process can be visualized using the \code{plot} method for \code{"gefp"} objects which builds on the \code{"zoo"} method and yields in this case the plot in Figure~\ref{fig:strucchange} showing the process which crosses its 5\% critical value and thus signals a significant decrease in the mean electrical resistance over the juice content. For more information on the package \pkg{strucchange} and the function \code{gefp} see \cite{zoo:Zeileis+Leisch+Hornik:2002} and \cite{zoo:Zeileis:2005}. \subsection[tseries: Historical financial data]{\pkg{tseries}: Historical financial data} \label{sec:tseries} \emph{This section was written when \pkg{tseries} did not yet support \code{"zoo"} series directly. For historical reasons and completeness, the example is still included but for practical purposes it is not relevant anymore because, from version 0.9-30 on, \code{get.hist.quote} returns a \code{"zoo"} series by default.} A typical application for irregular time series which became increasingly important over the last years in computational statistics and finance is daily (or higher frequency) financial data. The package \pkg{tseries} provides the function \code{get.hist.quote} for obtaining historical financial data by querying Yahoo!\ Finance at \url{http://finance.yahoo.com/}, an online portal quoting data provided by Reuters. The following code queries the quotes of Microsoft Corp.\ starting from 2001-01-01 until 2004-09-30: <>= library("tseries") MSFT <- get.hist.quote(instrument = "MSFT", start = "2001-01-01", end = "2004-09-30", origin = "1970-01-01", retclass = "ts") @ <>= if(online) { MSFT <- get.hist.quote("MSFT", start = "2001-01-01", end = "2004-09-30", origin = "1970-01-01", retclass = "ts") save(MSFT, file = "MSFT.rda", compress = TRUE) } else { load("MSFT.rda") } @ In the returned \code{MSFT} object the irregular data is stored by extending it in a regular grid and filling the gaps with \code{NA}s. The time is stored in days starting from an \code{origin}, in this case specified to be 1970-01-01, the origin used by the \code{"Date"} class. This series can be transformed easily into a \code{"zoo"} series using a \code{"Date"} index. <>= MSFT <- as.zoo(MSFT) index(MSFT) <- as.Date(index(MSFT)) MSFT <- na.omit(MSFT) @ Because this is daily data, the series has a natural underlying regularity. Thus, \code{as.zoo()} returns a \code{"zooreg"} object by default. To treat it as an irregular series \code{as.zoo()} can be applied a second time, yielding a \code{"zoo"} series. The corresponding log-difference returns are depicted in Figure~\ref{fig:tseries}. <>= MSFT <- as.zoo(MSFT) @ \begin{figure}[h!] \begin{center} <>= plot(diff(log(MSFT))) @ \caption{\label{fig:tseries} Log-difference returns for Microsoft Corp.} \end{center} \end{figure} \subsection[timeDate/fCalendar: Indexes of class "timeDate"]{\pkg{timeDate}/\pkg{fCalendar}: Indexes of class \code{"timeDate"}} \label{sec:timeDate} \emph{The original version of this section was written when \pkg{fCalendar} (now: \pkg{timeDate}) and \pkg{zoo} did not yet include enough methods to attach \code{"timeDate"} indexes to \code{"zoo"} series. For historical reasons and completeness, we still briefly comment on the communcation between the packages and their classes.} Although the methods in \pkg{zoo} work out of the box for many index classes, it might be necessary for some index classes to provide \code{c()}, \code{length()}, \code{[}, \code{ORDER()} and \code{MATCH()} methods such that the methods in \pkg{zoo} work properly. Previously, this was the case \code{"timeDate"} from the \pkg{fCalendar} package which is why it was used as an example in this vigntte. Meanwhile however, both \pkg{zoo} and \pkg{fCalendar}/\pkg{timeDate} have been enhanced: The latter contains the methods for \code{c()}, \code{length()}, and \code{[}, while \pkg{zoo} has methods for \code{ORDER()} and \code{MATCH()} for class \code{"timeDate"}. The last two functions essentially work by coercing to the underlying \code{"POSIXct"} and then using the associated methods. The following example illustrates how \code{z2} can be transformed to use the \code{"timeDate"} class. <>= library("timeDate") z2td <- zoo(coredata(z2), timeDate(index(z2), FinCenter = "GMT")) z2td @ \subsection[The classes "yearmon" and "yearqtr": Roll your own index]{The classes \code{"yearmon"} and \code{"yearqtr"}: Roll your own index} \label{sec:yearmon} One of the strengths of the \pkg{zoo} package is its independence of the index class, such that the index can be easily customized. The previous section already explained how an existing class (\code{"timeDate"}) can be used as the index if the necessary methods are created. This section has a similar but slightly different focus: it describes how new index classes can be created addressing a certain type of indexes. These classes are \code{"yearmon"} and \code{"yearqtr"} (already contained in \pkg{zoo}) which provide indexes for monthly and quarterly data respectively. As the code is virtually identical for both classes---except that one has the frequency 12 and the other 4---we will only discuss \code{"yearmon"} explicitly. Of course, monthly data can simply be stored using a numeric index just as the class \code{"ts"} does. The problem is that this does not have the meta-information attached that this is really specifying monthly data which is in \code{"yearmon"} simply added by a class attribute. Hence, the class creator is simply defined as \begin{Scode} yearmon <- function(x) structure(floor(12*x + .0001)/12, class = "yearmon") \end{Scode} which is very similar to the \code{as.yearmon} coercion functions provided. As \code{"yearmon"} data is now explicitly declared to describe monthly data, this can be exploited for coercion to other time classes: either to coarser time scales such as \code{"yearqtr"} or to finer time scales such as \code{"Date"}, \code{"POSIXct"} or \code{"POSIXlt"} which by default associate the first day within a month with a \code{"yearmon"} observation. Adding a \code{format} and \code{as.character} method produces human readable character representations of \code{"yearmon"} data and \code{Ops} and \code{MATCH} methods complete the methods needed for conveniently working with monthly data in \pkg{zoo}. Note, that all of these methods are very simple and rather obvious (as can be seen in the \pkg{zoo} sources), but prove very helpful in the following examples. First, we create a regular series \code{zr3} with \code{"yearmon"} index which leads to improved printing compared to the regular series \code{zr1} and \code{zr2} from Section~\ref{sec:zooreg}. <>= zr3 <- zooreg(rnorm(9), start = as.yearmon(2000), frequency = 12) zr3 @ This could be aggregated to quarterly data via <>= aggregate(zr3, as.yearqtr, mean) @ The index can easily be transformed to \code{"Date"}, the default being the first day of the month but which can also be changed to the last day of the month. <>= as.Date(index(zr3)) as.Date(index(zr3), frac = 1) @ Furthermore, \code{"yearmon"} indexes can easily be coerced to \code{"POSIXct"} such that the series could be exported as a \code{"its"} or \code{"irts"} series. <>= index(zr3) <- as.POSIXct(index(zr3)) as.irts(zr3) @ Again, this functionality makes switching between different time scales or index representations particularly easy and \pkg{zoo} provides the user with the flexibility to adjust a certain index to his/her problem of interest. \section{Summary and outlook} \label{sec:summary} The package \pkg{zoo} provides an \proglang{S3} class and methods for indexed totally ordered observations, such as both regular and irregular time series. Its key design goals are independence of a particular index class and compatibility with standard generics similar to the behaviour of the corresponding \code{"ts"} methods. This paper describes how these are implemented in \pkg{zoo} and illustrates the usage of the methods for plotting, merging and binding, several mathematical operations, extracting and replacing data and index, coercion and \code{NA} handling. An indexed object of class \code{"zoo"} can be thought of as data plus index where the data are essentially vectors or matrices and the index can be a vector of (in principle) arbitrary class. For (weakly) regular \code{"zooreg"} series, a \code{"frequency"} attribute is stored in addition. Therefore, objects of classes \code{"ts"}, \code{"its"}, \code{"irts"} and \code{"timeSeries"} can easily be transformed into \code{"zoo"} objects---the reverse transformation is also possible provided that the index fulfills the restrictions of the respective class. Hence, the \code{"zoo"} class can also be used as the basis for other classes of indexed observations and more specific functionality can be built on top of it. Furthermore, it bridges the gap between irregular and regular series, facilitating operations such as \code{NA} handling compared to \code{"ts"}. Whereas a lot of effort was put into achieving independence of a particular index class, the types of data that can be indexed with \code{"zoo"} are currently limited to vectors and matrices, typically containing numeric values. Although, there is some limited support available for indexed factors, one important direction for future development of \pkg{zoo} is to add better support for other objects that can also naturally be indexed including specifically factors, data frames and lists. \section*{Computational details} The results in this paper were obtained using \proglang{R} \Sexpr{paste(R.Version()[6:7], collapse = ".")} with the packages \pkg{zoo} \Sexpr{gsub("-", "--", packageDescription("zoo")$Version)}, \pkg{strucchange} \Sexpr{gsub("-", "--", packageDescription("strucchange")$Version)}, \pkg{timeDate} \Sexpr{gsub("-", "--", packageDescription("timeDate")$Version)}, \pkg{tseries} \Sexpr{gsub("-", "--", packageDescription("tseries")$Version)} and \pkg{DAAG} \Sexpr{gsub("-", "--", packageDescription("DAAG")$Version)}. \proglang{R} itself and all packages used are available from CRAN at \url{https://CRAN.R-project.org/}. \bibliography{zoo} \newpage \begin{appendix} \section{Reference card} \input{zoo-refcard-raw} \end{appendix} \end{document} \subsection[stats: (Dynamic) regression modelling]{\pkg{stats}: (Dynamic) regression modelling} \label{sec:stats} \code{zoo} provides a facility for extending regression functions such as \code{lm} to handle time series. One simply encloses the \code{formula} argument in \code{I(...)} and ensures that all variables in the formula are of class \code{"zoo"} or all are of class \code{"ts"}. Basic regression functions, like \code{lm} or \code{glm}, in which regression relationships are specified via a \code{formula} only have limited support for time series regression. The reason is that \code{lm(formula, ...)} calls the generic function \code{model.frame(formula, ...)} to create a a data frame with the variables required. This dispatches to \code{model.frame.formula} which does not deal specifically with (various types of) time series data. Therefore, it would be desirable to dispatch to a specialized \code{model.frame} method depending on the type of the dependent variable. As this is a non-standard dispatch, \pkg{zoo} provides the following mechanism: In the call to the regression function, the \code{formula} is insulated by \code{I()}, e.g., as in \code{lm(I(formula), ...)}, leaving \code{formula} unaltered but returning an object of class \code{"AsIs"}. Then, \code{model.frame.AsIs} is called which examines the dependent variable of the \code{formula} and then dispatches to \code{model.frame.foo} if this is of class \code{"foo"}. In \pkg{zoo}, the methods \code{model.frame.zoo} and \code{model.frame.ts} are provided which are able to create model frames from formulas in which \emph{all} variables are of class \code{"zoo"} or \code{"ts"}, respectively. The advantage of \code{model.frame.zoo} is that it aligns the variables along a common index, it allows the usage of \code{lag} and \code{diff} in the model specification and works with the \code{NA} handling methods described in Section~\ref{sec:NA}. Therefore, dynamic linear regression models can be fit easily using the standard \code{lm} function by just insulating \code{I(formula)} in the corresponding call\footnote{In addition to \code{lm} and \code{glm}, this approach works for many other regression functions including \code{randomForest} ensembles from \pkg{randomForest}, \code{svm} support vector machines from \pkg{e1071}, \code{lqs} resistant regression from \pkg{MASS}, \code{nnet} neural networks from \pkg{nnet}, \code{rq} quantile regression from \pkg{quantreg}, and possibly many others.}. A simple example based on artificial data is given below: the lag of a dependent variable is explained by the first differences of a numeric regressor and an explanatory factor. Note, that the variables have different indexes. First, a linear regression model is fitted, then a quantile regression is carried out for the same equation. % \begin{verbatim} yz <- zoo(1:20)^2 xz <- zoo(1:18)^2 fz <- zoo(gl(4, 5)) lm(I(lag(yz) ~ diff(xz) + fz)) library("quantreg") rq(I(lag(yz) ~ diff(xz) + fz)) \end{verbatim} % See the help page of \code{model.frame.zoo} for more examples and additional information. Furthermore, note that this feature is under development and might subject to changes in future versions. zoo/inst/doc/zoo-faq.Rnw0000644000175400001440000007010712067427347015063 0ustar zeileisusers\documentclass[article,nojss]{jss} \DeclareGraphicsExtensions{.pdf,.eps} %%\newcommand{\mysection}[2]{\subsubsection[#2]{\textbf{#1}}} \let\mysection=\subsubsection \renewcommand{\jsssubsubsec}[2][default]{\vskip \preSskip% \pdfbookmark[3]{#1}{Subsubsection.\thesubsubsection.#1}% \refstepcounter{subsubsection}% {\large \textbf{\textit{#2}}} \nopagebreak \vskip \postSskip \nopagebreak} %% need no \usepackage{Sweave} \author{\pkg{zoo} Development Team} \Plainauthor{zoo Development Team} \Address{ \pkg{zoo} Development Team\\ \proglang{R}-Forge: \url{http://R-Forge.R-project.org/projects/zoo/}\\ Comprehensive \proglang{R} Archive Network: \url{http://CRAN.R-project.org/package=zoo} } \title{\pkg{zoo} FAQ} \Plaintitle{zoo FAQ} \Keywords{irregular time series, ordered observations, time index, daily data, weekly data, returns} \Abstract{ This is a collection of frequently asked questions (FAQ) about the \pkg{zoo} package together with their answers. } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{zoo FAQ} %\VignetteDepends{zoo,chron,timeDate,timeSeries} %\VignetteKeywords{irregular time series, ordered observations, time index, daily data, weekly data, returns} %\VignettePackage{zoo} <>= library("zoo") Sys.setenv(TZ = "GMT") @ \mysection[1. I know that duplicate times are not allowed but my data has them. What do I do?]{1. I know that duplicate times are not allowed but my data has them. What do I do?} \pkg{zoo} objects should not normally contain duplicate times. If you try to create such an object using \pkg{zoo} or \code{read.zoo} then warnings will be issued but the objects will be created. The user then has the opportunity to fix them up -- typically by using \code{aggregate.zoo} or \code{duplicated}. Merging is not well defined for duplicate series with duplicate times and rather than give an undesired or unexpected result, \code{merge.zoo} issues an error message if it encounters such illegal objects. Since \code{merge.zoo} is the workhorse behind many \pkg{zoo} functions, a significant portion of \pkg{zoo} will not accept duplicates among the times. Typically duplicates are eliminated by (1)~averaging over them, (2)~taking the last among each run of duplicates or (3)~interpolating the duplicates and deleting ones on the end that cannot be interpolated. These three approaches are shown here using the \code{aggregate.zoo} function. Another way to do this is to use the \code{aggregate} argument of \code{read.zoo} which will aggregate the zoo object read in by \code{read.zoo} all in one step. Note that in the example code below that \code{identity} is the identity function (i.e. it just returns its argument). It is an \proglang{R} core function: A \code{"zoo"} series with duplicated indexes <>= z <- suppressWarnings(zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5))) z @ Fix it up by averaging duplicates: <>= aggregate(z, identity, mean) @ Or, fix it up by taking last in each set of duplicates: <>= aggregate(z, identity, tail, 1) @ Fix it up via interpolation of duplicate times <>= time(z) <- na.approx(ifelse(duplicated(time(z)), NA, time(z)), na.rm = FALSE) @ If there is a run of equal times at end they wind up as \code{NA}s and we cannot have \code{NA} times. <>= z[!is.na(time(z))] @ %% An alternative to aggregating the data is to make the times unique %% by changing them slightly. The facilities here are limited to %% time classes for %% which addition by a number makes sense. See the \code{make.unique.approx} %% and \code{make.unique.incr} functions which use interpolation or %% incrementing by a fixed number. Interpolation has the further restriction %% that the interpolated result must make sense. For example, it makes sense to %% interpolate \code{"POSIXct"} variables but not \code{"Date"} variables since %% the interpolation may fall between dates. %% Also see the \code{make.unique} %% argument to \code{read.zoo} which allows one to read in the data %% and make it unique all in one operation. The \code{read.zoo} command has an \code{aggregate} argument that supports arbitrary summarization. For example, in the following we take the last value among any duplicate times and sum the volumes among all duplicate times. We do this by reading the data twice, once for each aggregate function. In this example, the first three columns are junk that we wish to suppress which is why we specified \code{colClasses}; however, in most cases that argument would not be necessary. <>= Lines <- "1|BHARTIARTL|EQ|18:15:05|600|1 2|BHARTIARTL|EQ|18:15:05|600|99 3|GLENMARK|EQ|18:15:05|238.1|5 4|HINDALCO|EQ|18:15:05|43.75|100 5|BHARTIARTL|EQ|18:15:05|600|1 6|BHEL|EQ|18:15:05|1100|11 7|HINDALCO|EQ|18:15:06|43.2|1 8|CHAMBLFERT|EQ|18:15:06|46|10 9|CHAMBLFERT|EQ|18:15:06|46|90 10|BAJAUTOFIN|EQ|18:15:06|80|100" library("zoo") library("chron") tail1 <- function(x) tail(x, 1) cls <- c("NULL", "NULL", "NULL", "character", "numeric", "numeric") nms <- c("", "", "", "time", "value", "volume") z <- read.zoo(textConnection(Lines), aggregate = tail1, FUN = times, sep = "|", colClasses = cls, col.names = nms) z2 <- read.zoo(textConnection(Lines), aggregate = sum, FUN = times, sep = "|", colClasses = cls, col.names = nms) z$volume <- z2$volume z @ If the reason for the duplicate times is that the data is stored in long format then use \code{read.zoo} (particlarly the \code{split} argument) to convert it to wide format. Wide format is typically a time series whereas long format is not so wide format is the suitable one for zoo. <>= Lines <- "Date Stock Price 2000-01-01 IBM 10 2000-01-02 IBM 11 2000-01-01 ORCL 12 2000-01-02 ORCL 13" stocks <- read.zoo(textConnection(Lines), header = TRUE, split = "Stock") stocks @ \mysection[2. When I try to specify a log axis to plot.zoo a warning is issued. What is wrong?]{2. When I try to specify a log axis to \code{plot.zoo} a warning is issued. What is wrong?} Arguments that are part of \code{...} are passed to the \code{panel} function and the default \code{panel} function, \code{lines}, does not accept \code{log}. Either ignore the warning, use \code{suppressWarnings} (see \code{?suppressWarnings}) or create your own panel function which excludes the \code{log}: <>= z <- zoo(1:100) plot(z, log = "y", panel = function(..., log) lines(...)) @ \mysection[3. How do I create right and a left vertical axes in plot.zoo?]{3. How do I create right and a left vertical axes in \code{plot.zoo}?} The following shows an example of creating a plot containing a single panel and both left and right axes. <>= set.seed(1) z.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) z <- zoo(cbind(left = rnorm(5), right = rnorm(5, sd = 0.2)), z.Date) plot(z[,1], xlab = "Time", ylab = "") opar <- par(usr = c(par("usr")[1:2], range(z[,2]))) lines(z[,2], lty = 2) axis(side = 4) legend("bottomright", lty = 1:2, legend = colnames(z), bty="n") par(opar) @ \begin{figure}[htbp] \begin{center} <>= <> @ \caption{\label{fig:plot-axes} Left and right \code{plot.zoo} axes.} \end{center} \end{figure} \mysection[4. I have data frame with both numeric and factor columns. How do I convert that to a "zoo" object?]{4. I have data frame with both numeric and factor columns. How do I convert that to a \code{"zoo"} object?} A \code{"zoo"} object may be (1)~a numeric vector, (2)~a numeric matrix or (3)~a factor but may not contain both a numeric vector and factor. The underlying reason for this constraint is that \code{"zoo"} was intended to generalize \proglang{R}'s \code{"ts"} class, which is also based on matrices, to irregularly spaced series with an arbitrary index class. The main reason to stick to matrices is that operations on matrices in \proglang{R} are much faster than on data frames. If you have a data frame with both numeric and factor variables that you want to convert to \code{"zoo"}, you can do one of the following. Use two \code{"zoo"} variables instead: <>= DF <- data.frame(time = 1:4, x = 1:4, f = factor(letters[c(1, 1, 2, 2)])) zx <- zoo(DF$x, DF$time) zf <- zoo(DF$f, DF$time) @ These could also be held in a \code{"data.frame"} again: <>= DF2 <- data.frame(x = zx, f = zf) @ Or convert the factor to numeric and create a single \code{"zoo"} series: <>= z <- zoo(data.matrix(DF[-1]), DF$time) @ \mysection[5. Why does lag give slightly different results on a "zoo" and a "zooreg" series which are otherwise the same?]{5. Why does lag give slightly different results on a \code{"zoo"} and a \code{"zooreg"} series which are otherwise the same?} To be definite let us consider the following examples, noting how both \code{lag} and \code{diff} give a different answer with the same input except its class is \code{"zoo"} in one case and \code{"zooreg"} in another: <>= z <- zoo(11:15, as.Date("2008-01-01") + c(-4, 1, 2, 3, 6)) zr <- as.zooreg(z) lag(z) lag(zr) diff(log(z)) diff(log(zr)) @ \code{lag.zoo} and \code{lag.zooreg} work differently. For \code{"zoo"} objects the lagged version is obtained by moving values to the adjacent time point that exists in the series but for \code{"zooreg"} objects the time is lagged by \code{deltat}, the time between adjacent regular times. A key implication is that \code{"zooreg"} can lag a point to a time point that did not previously exist in the series and, in particular, can lag a series outside of the original time range whereas that is not possible in a \code{"zoo"} series. Note that \code{lag.zoo} has an \code{na.pad=} argument which in some cases may be what is being sought here. The difference between \code{diff.zoo} and \code{diff.zooreg} stems from the fact that \code{diff(x)} is defined in terms of \code{lag} like this: \code{x-lag(x,-1)}. \mysection[6. How do I subtract the mean of each month from a "zoo" series?]{6. How do I subtract the mean of each month from a \code{"zoo"} series?} Suppose we have a daily series. To subtract the mean of Jan 2007 from each day in that month, subtract the mean of Feb 2007 from each day in that month, etc. try this: <>= set.seed(123) z <- zoo(rnorm(100), as.Date("2007-01-01") + seq(0, by = 10, length = 100)) z.demean1 <- z - ave(z, as.yearmon(time(z))) @ This first generates some artificial data and then employs \code{ave} to compute monthly means. To subtract the mean of all Januaries from each January, etc. try this: <>= z.demean2 <- z - ave(z, format(time(z), "%m")) @ \mysection[7. How do I create a monthly series but still keep track of the dates?]{7. How do I create a monthly series but still keep track of the dates?} Create a \proglang{S}3 subclass of \code{"yearmon"} called \code{"yearmon2"} that stores the dates as names on the time vector. It will be sufficient to create an \code{as.yearmon2} generic together with an \code{as.yearmon2.Date} methods as well as the inverse: \code{as.Date.yearmon2}. <>= as.yearmon2 <- function(x, ...) UseMethod("as.yearmon2") as.yearmon2.Date <- function(x, ...) { y <- as.yearmon(with(as.POSIXlt(x, tz = "GMT"), 1900 + year + mon/12)) names(y) <- x structure(y, class = c("yearmon2", class(y))) } @ \code{as.Date.yearmon2} is inverse of \code{as.yearmon2.Date} <>= as.Date.yearmon2 <- function(x, frac = 0, ...) { if (!is.null(names(x))) return(as.Date(names(x))) x <- unclass(x) year <- floor(x + .001) month <- floor(12 * (x - year) + 1 + .5 + .001) dd.start <- as.Date(paste(year, month, 1, sep = "-")) dd.end <- dd.start + 32 - as.numeric(format(dd.start + 32, "%d")) as.Date((1-frac) * as.numeric(dd.start) + frac * as.numeric(dd.end), origin = "1970-01-01") } @ This new class will act the same as \code{"yearmon"} stores and allows recovery of the dates using \code{as.Date} and \code{aggregate.zoo}. <>= dd <- seq(as.Date("2000-01-01"), length = 5, by = 32) z <- zoo(1:5, as.yearmon2(dd)) z aggregate(z, as.Date, identity) @ \mysection[8. How are axes added to a plot created using plot.zoo?]{8. How are axes added to a plot created using \code{plot.zoo}?} On single panel plots \code{axis} or \code{Axis} can be used just as with any classic graphics plot in \proglang{R}. The following example adds custom axis for single panel plot. It labels months but uses the larger year for January. Months, quarters and years should have successively larger ticks. <>= z <- zoo(0:500, as.Date(0:500)) plot(z, xaxt = "n") tt <- time(z) m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) abline(v = m, col = grey(0.8), lty = 2) @ A multivariate series can either be generated as (1)~multiple single panel plots: <>= z3 <- cbind(z1 = z, z2 = 2*z, z3 = 3*z) opar <- par(mfrow = c(2, 2)) tt <- time(z) m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) for(i in 1:ncol(z3)) { plot(z3[,i], xaxt = "n", ylab = colnames(z3)[i], ylim = range(z3)) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) } par(opar) @ or (2)~as a multipanel plot. In this case any custom axis must be placed in a panel function. <>= plot(z3, screen = 1:3, xaxt = "n", nc = 2, ylim = range(z3), panel = function(...) { lines(...) panel.number <- parent.frame()$panel.number nser <- parent.frame()$nser # place axis on bottom panel of each column only if (panel.number %% 2 == 0 || panel.number == nser) { tt <- list(...)[[1]] m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) } }) @ \mysection[9. Why is nothing plotted except axes when I plot an object with many NAs?]{9. Why is nothing plotted except axes when I plot an object with many \code{NA}s?} Isolated points surrounded by \code{NA} values do not form lines: <>= z <- zoo(c(1, NA, 2, NA, 3)) plot(z) @ So try one of the following: Plot points rather than lines. <>= plot(z, type = "p") @ Omit \code{NA}s and plot that. <>= plot(na.omit(z)) @ Fill in the \code{NA}s with interpolated values. <>= plot(na.approx(z)) @ Plot points with lines superimposed. <>= plot(z, type = "p") lines(na.omit(z)) @ Note that this is not specific to \pkg{zoo.} If we plot in \proglang{R} without \pkg{zoo} we get the same behavior. \mysection[10. Does zoo work with Rmetrics?]{10. Does \pkg{zoo} work with \pkg{Rmetrics}?} Yes. \code{timeDate} class objects from the \pkg{timeDate} package can be used directly as the index of a \code{zoo} series and \code{as.timeSeries.zoo} and \code{as.zoo.timeSeries} can convert back and forth between objects of class \code{zoo} and class \code{timeSeries} from the \pkg{timeSeries} package. <>= library("timeDate") dts <- c("1989-09-28", "2001-01-15", "2004-08-30", "1990-02-09") tms <- c( "23:12:55", "10:34:02", "08:30:00", "11:18:23") td <- timeDate(paste(dts, tms), format = "%Y-%m-%d %H:%M:%S") library("zoo") z <- zoo(1:4, td) zz <- merge(z, lag(z)) plot(zz) library("timeSeries") zz as.timeSeries(zz) as.zoo(as.timeSeries(zz)) @ <>= detach("package:timeSeries") detach("package:timeDate") @ \mysection[11. What other packages use zoo?]{11. What other packages use \pkg{zoo}?} A DEIS dependency means that a package lists \pkg{zoo} in the Depends, Enhances, Imports or Suggests clause of their DESCRIPTION file. As of September 27, 2011 there are 65 packages on CRAN with DEIS dependencies on zoo and 207 packages which either have direct DEIS dependencies or a DEIS dependency on a package which in turn has a DEIS dependency on zoo. This suggests that packages that have a DEIS dependency on zoo are themselves popular. If one recursively calculates DEIS dependencies to all depths then 2127 packages on CRAN have direct or indirect DEIS dependencies on zoo. That is over half of CRAN. Below are 74 packages which include those with direct DEIS dependencies as well as packages that are often used with zoo: Some packages depend on zoo indirectly listing such a relationship to a package which in turn has such a dependency on zoo. There are 207 packages which There are 74 other CRAN packages that are or can be used with \pkg{zoo} (and possibly more in other repositories): \begin{center} \begin{tabular}{|p{3.6cm}|p{11cm}|} \hline \multicolumn{2}{|l|}{\emph{Depends}} \\ \hline \pkg{AER} & Applied Econometrics with R \\ \hline \pkg{BootPR} & Bootstrap Prediction Intervals and Bias-Corrected Forecasting \\ \hline \pkg{DMwR} & Functions and data for "Data Mining with R" \\ \hline \pkg{FinTS} & Companion to Tsay (2005) Analysis of Financial Time Series \\ \hline \pkg{MFDF} & Modeling Functional Data in Finance \\ \hline \pkg{Modalclust} & Hierarchical Modal Clustering \\ \hline \pkg{PerformanceAnalytics} & Econometric tools for performance and risk analysis \\ \hline \pkg{RBloomberg} & R/Bloomberg \\ \hline \pkg{RghcnV3} & Global Historical Climate Network Version 3 \\ \hline \pkg{StreamMetabolism} & Stream Metabolism-A package for calculating single station metabolism from diurnal Oxygen curves \\ \hline \pkg{TSfame} & Time Series Database Interface extensions for fame \\ \hline \pkg{TShistQuote} & Time Series Database Interface extensions for get.hist.quote \\ \hline \pkg{TSxls} & Time Series Database Interface extension to connect to spreadsheets \\ \hline \pkg{VhayuR} & Vhayu R Interface \\ \hline \pkg{delftfews} & delftfews R extensions \\ \hline \pkg{dyn} & Time Series Regression \\ \hline \pkg{dynlm} & Dynamic Linear Regression \\ \hline \pkg{fda} & Functional Data Analysis \\ \hline \pkg{forecast} & Forecasting functions for time series \\ \hline \pkg{fractalrock} & Generate fractal time series with non-normal returns distribution \\ \hline \pkg{fxregime} & Exchange Rate Regime Analysis \\ \hline \pkg{glogis} & Fitting and Testing Generalized Logistic Distributions \\ \hline \pkg{hydroTSM} & Time series management, analysis and interpolation for hydrological modelling \\ \hline \pkg{lmtest} & Testing Linear Regression Models \\ \hline \pkg{meboot} & Maximum Entropy Bootstrap for Time Series \\ \hline \pkg{mlogit} & multinomial logit model \\ \hline \pkg{party} & A Laboratory for Recursive Partytioning \\ \hline \pkg{quantmod} & Quantitative Financial Modelling Framework \\ \hline \pkg{rdatamarket} & Data access API for DataMarket.com \\ \hline \pkg{sandwich} & Robust Covariance Matrix Estimators \\ \hline \pkg{sde} & Simulation and Inference for Stochastic Differential Equations \\ \hline \pkg{solaR} & Solar Photovoltaic Systems \\ \hline \pkg{spacetime} & classes and methods for spatio-temporal data \\ \hline \pkg{strucchange} & Testing, Monitoring, and Dating Structural Changes \\ \hline \pkg{tawny} & Provides various portfolio optimization strategies including random matrix theory and shrinkage estimators \\ \hline \pkg{termstrc} & Zero-coupon Yield Curve Estimation \\ \hline \pkg{tgram} & Functions to compute and plot tracheidograms \\ \hline \pkg{tripEstimation} & Metropolis sampler and supporting functions for estimating animal movement from archival tags and satellite fixes \\ \hline \pkg{tseries} & Time series analysis and computational finance \\ \hline \pkg{wq} & Exploring water quality monitoring data \\ \hline \pkg{xts} & eXtensible Time Series \\ \hline \end{tabular} \end{center} \begin{center} \begin{tabular}{|p{3.6cm}|p{11cm}|} \hline \multicolumn{2}{|l|}{\emph{Enhances}} \\ \hline \pkg{chron} & Chronological objects which can handle dates and times \\ \hline \pkg{hydroTSM} & Time series management, analysis and interpolation for hydrological modelling \\ \hline \pkg{lubridate} & Make dealing with dates a little easier \\ \hline \pkg{tis} & Time Indexes and Time Indexed Series \\ \hline \end{tabular} \begin{tabular}{|p{3.6cm}|p{11cm}|} \hline \multicolumn{2}{|l|}{\emph{Imports}} \\ \hline \pkg{fxregime} & Exchange Rate Regime Analysis \\ \hline \pkg{glogis} & Fitting and Testing Generalized Logistic Distributions \\ \hline \pkg{hydroGOF} & Goodness-of-fit functions for comparison of simulated and observed hydrological time series \\ \hline \pkg{openair} & Tools for the analysis of air pollution data \\ \hline \pkg{rasterVis} & Visualization methods for the raster package \\ \hline \end{tabular} \end{center} \begin{center} \begin{tabular}{|p{3.6cm}|p{11cm}|} \hline \multicolumn{2}{|l|}{\emph{Suggests}} \\ \hline \pkg{MeDiChI} & MeDiChI ChIP-chip deconvolution library \\ \hline \pkg{RQuantLib} & R interface to the QuantLib library \\ \hline \pkg{TSAgg} & Time series Aggregation \\ \hline \pkg{TSMySQL} & Time Series Database Interface extensions for MySQL \\ \hline \pkg{TSPostgreSQL} & Time Series Database Interface extensions for PostgreSQL \\ \hline \pkg{TSSQLite} & Time Series Database Interface extentions for SQLite \\ \hline \pkg{TSdbi} & Time Series Database Interface \\ \hline \pkg{TSodbc} & Time Series Database Interface extensions for ODBC \\ \hline \pkg{TSzip} & Time Series Database Interface extension to connect to zip files \\ \hline \pkg{UsingR} & Data sets for the text "Using R for Introductory Statistics" \\ \hline \pkg{Zelig} & Everyone's Statistical Software \\ \hline \pkg{gsubfn} & Utilities for strings and function arguments \\ \hline \pkg{latticeExtra} & Extra Graphical Utilities Based on Lattice \\ \hline \pkg{mondate} & Keep track of dates in terms of months \\ \hline \pkg{playwith} & A GUI for interactive plots using GTK+ \\ \hline \pkg{pscl} & Political Science Computational Laboratory, Stanford University \\ \hline \pkg{quantreg} & Quantile Regression \\ \hline \pkg{tframePlus} & Time Frame coding kernel extensions \\ \hline \end{tabular} \end{center} \begin{center} \begin{tabular}{|p{3.6cm}|p{11cm}|} \hline \multicolumn{2}{|l|}{\emph{Uses or Used with}} \\ \hline \pkg{timeDate} & \pkg{Rmetrics} date and time functions: \code{timeDate} usable with \code{zoo} \\ \hline \pkg{grid} & Graphics infrastructure: use with \code{xyplot.zoo} \\ \hline \pkg{its} & Irregular time series: \code{as.its.zoo}, \code{as.zoo.its} \\ \hline \pkg{lattice} & \pkg{grid}-based graphics: use with \code{xyplot.zoo} \\ \hline \pkg{timeSeries} & \pkg{Rmetrics} time series functions: \code{as.timeSeries.zoo}, \code{as.zoo.timeSeries} \\ \hline \pkg{YaleToolkit} & Data exploration tools from Yale University: accepts \code{"zoo"} input \\ \hline \end{tabular} \end{center} \mysection[12. Why does ifelse not work as I expect?]{12. Why does \code{ifelse} not work as I expect?} The ordinary \proglang{R} \code{ifelse} function only works with zoo objects if all three arguments are zoo objects with the same time index. \pkg{zoo} provides an \code{ifelse.zoo} function that should be used instead. The \code{.zoo} part must be written out since \code{ifelse} is not generic. <>= z <- zoo(c(1, 5, 10, 15)) # wrong !!! ifelse(diff(z) > 4, -z, z) # ok ifelse.zoo(diff(z) > 4, -z, z) # or if we merge first we can use ordinary ifelse xm <- merge(z, dif = diff(z)) with(xm, ifelse(dif > 4, -z, z)) # or in this case we could also use orindary ifelse if we # use fill = NA to ensure all three have same index ifelse(diff(z, fill = NA) > 4, -z, z) @ \mysection[13. In a series which is regular except for a few missing times or for which we wish to align to a grid how is it filled in or aligned?]{13. In a series which is regular except for a few missing times or for which we wish to align to a grid how is it filled or aligned?} <>= # April is missing zym <- zoo(1:5, as.yearmon("2000-01-01") + c(0, 1, 2, 4, 5)/12) g <- seq(start(zym), end(zym), by = 1/12) na.locf(zym, xout = g) @ A variation of this is where the grid is of a different date/time class than the original series. In that case use the \code{x} argument. In the example that follows the series \code{z} is of \code{"Date"} class whereas the grid is of \code{"yearmon"} class: <>= z <- zoo(1:3, as.Date(c("2000-01-15", "2000-03-3", "2000-04-29"))) g <- seq(as.yearmon(start(z)), as.yearmon(end(z)), by = 1/12) na.locf(z, x = as.yearmon, xout = g) @ Here is a \code{chron} example where we wish to create a 10 minute grid: <>= Lines <- "Time,Value 2009-10-09 5:00:00,210 2009-10-09 5:05:00,207 2009-10-09 5:17:00,250 2009-10-09 5:30:00,193 2009-10-09 5:41:00,205 2009-10-09 6:00:00,185" library("chron") z <- read.zoo(textConnection(Lines), FUN = as.chron, sep = ",", header = TRUE) g <- seq(start(z), end(z), by = times("00:10:00")) na.locf(z, xout = g) @ \mysection[14. What is the difference between as.Date in zoo and as.Date in the core of R?]{What is the difference between \code{as.Date} in zoo and \code{as.Date} in the core of R?} zoo has extended the \code{origin} argument of \code{as.Date.numeric} so that it has a default of \code{origin="1970-01-01"} (whereas in the core of R it has no default and must always be specified). Note that this is a strictly upwardly compatible extensions to R and any usage of \code{as.Date} in R will also work in zoo. This makes it more convenient to use as.Date as a function input. For example, one can shorten this: <>= z <- zoo(1:2, c("2000-01-01", "2000-01-02")) aggregate(z, function(x) as.Date(x, origin = "1970-01-01")) @ to just this: <>= aggregate(z, as.Date) @ As another example, one can shorten <>= Lines <- "2000-01-01 12:00:00,12 2000-01-02 12:00:00,13" read.zoo(text = Lines, sep = ",", FUN = function(x) as.Date(x, origin = "1970-01-01")) @ to this: <>= read.zoo(text = Lines, sep = ",", FUN = as.Date) @ Note to package developers of packages that use zoo: Other packages that work with zoo and define \code{as.Date} methods should either import \pkg{zoo} or else should fully export their \code{as.Date} methods in their \code{NAMESPACE} file, e.g. \code{export(as.Date.X)}, in order that those methods be registered with \pkg{zoo}'s \code{as.Date} generic and not just the \code{as.Date} generic in \pkg{base}. \mysection[15. How can I speed up zoo?]{15. How can I speed up zoo?} The main area where you might notice slowness is if you do indexing of zoo objects in an inner loop. In that case extract the data and time components prior to the loop. Since most calculations in R use the whole object approach there are relatively few instances of this. For example, the following shows two ways of performing a rolling sum using only times nearer than 3 before the current time. The second one eliminates the zoo indexing to get a speedup: <>= n <- 50 z <- zoo(1:n, c(1:3, seq(4, by = 2, length = n-3))) system.time({ zz <- sapply(seq_along(z), function(i) sum(z[time(z) <= time(z)[i] & time(z) > time(z)[i] - 3])) z1 <- zoo(zz, time(z)) }) system.time({ zc <- coredata(z) tt <- time(z) zr <- sapply(seq_along(zc), function(i) sum(zc[tt <= tt[i] & tt > tt[i] - 3])) z2 <- zoo(zr, tt) }) identical(z1, z2) @ \end{document} zoo/inst/doc/zoo.R0000644000175400001440000002473213224634151013741 0ustar zeileisusers### R code from vignette source 'zoo.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### library("zoo") library("tseries") library("strucchange") library("timeDate") online <- FALSE ## if set to FALSE the local copy of MSFT.rda ## is used instead of get.hist.quote() options(prompt = "R> ") Sys.setenv(TZ = "GMT") ################################################### ### code chunk number 2: zoo-prelim ################################################### library("zoo") set.seed(1071) ################################################### ### code chunk number 3: zoo-vectors1 ################################################### z1.index <- ISOdatetime(2004, rep(1:2,5), sample(28,10), 0, 0, 0) z1.data <- rnorm(10) z1 <- zoo(z1.data, z1.index) ################################################### ### code chunk number 4: zoo-vectors2 ################################################### z2.index <- as.POSIXct(paste(2004, rep(1:2, 5), sample(1:28, 10), sep = "-")) z2.data <- sin(2*1:10/pi) z2 <- zoo(z2.data, z2.index) ################################################### ### code chunk number 5: zoo-matrix ################################################### Z.index <- as.Date(sample(12450:12500, 10)) Z.data <- matrix(rnorm(30), ncol = 3) colnames(Z.data) <- c("Aa", "Bb", "Cc") Z <- zoo(Z.data, Z.index) ################################################### ### code chunk number 6: print1 ################################################### z1 z1[3:7] ################################################### ### code chunk number 7: print2 ################################################### Z Z[1:3, 2:3] ################################################### ### code chunk number 8: subset ################################################### z1[ISOdatetime(2004, 1, c(14, 25), 0, 0, 0)] ################################################### ### code chunk number 9: summary ################################################### summary(z1) summary(Z) ################################################### ### code chunk number 10: zooreg1 ################################################### zr1 <- zooreg(sin(1:9), start = 2000, frequency = 4) zr2 <- zoo(sin(1:9), seq(2000, 2002, by = 1/4), 4) zr1 zr2 ################################################### ### code chunk number 11: zooreg2 ################################################### zr1 <- zr1[-c(3, 5)] zr1 class(zr1) frequency(zr1) ################################################### ### code chunk number 12: zooreg1b ################################################### zooreg(1:5, start = as.Date("2005-01-01")) ################################################### ### code chunk number 13: zooreg3 ################################################### is.regular(zr1) is.regular(zr1, strict = TRUE) ################################################### ### code chunk number 14: zooreg4 ################################################### zr1 <- as.zoo(zr1) zr1 class(zr1) is.regular(zr1) frequency(zr1) ################################################### ### code chunk number 15: zooreg5 ################################################### as.ts(zr1) identical(zr2, as.zoo(as.ts(zr2))) ################################################### ### code chunk number 16: plot1 (eval = FALSE) ################################################### ## plot(Z) ################################################### ### code chunk number 17: plot2 (eval = FALSE) ################################################### ## plot(Z, plot.type = "single", col = 2:4) ################################################### ### code chunk number 18: plot2-repeat ################################################### plot(Z, plot.type = "single", col = 2:4) ################################################### ### code chunk number 19: plot1-repeat ################################################### plot(Z) ################################################### ### code chunk number 20: plot3 ################################################### plot(Z, type = "b", lty = 1:3, pch = list(Aa = 1:5, Bb = 2, Cc = 4), col = list(Bb = 2, 4)) ################################################### ### code chunk number 21: plot3-repeat (eval = FALSE) ################################################### ## plot(Z, type = "b", lty = 1:3, pch = list(Aa = 1:5, Bb = 2, Cc = 4), ## col = list(Bb = 2, 4)) ################################################### ### code chunk number 22: rbind ################################################### rbind(z1[5:10], z1[2:3]) ################################################### ### code chunk number 23: cbind ################################################### cbind(z1, z2) ################################################### ### code chunk number 24: merge ################################################### merge(z1, z2, all = FALSE) ################################################### ### code chunk number 25: merge2 ################################################### merge(z1, pi, 1:10) ################################################### ### code chunk number 26: aggregate ################################################### firstofmonth <- function(x) as.Date(sub("..$", "01", format(x))) aggregate(Z, firstofmonth(index(Z)), mean) aggregate(Z, firstofmonth, head, 1) ################################################### ### code chunk number 27: disaggregate ################################################### Nile.na <- merge(as.zoo(Nile), zoo(, seq(start(Nile)[1], end(Nile)[1], 1/4))) head(as.zoo(Nile)) head(na.approx(Nile.na)) head(na.locf(Nile.na)) head(na.spline(Nile.na)) ################################################### ### code chunk number 28: Ops ################################################### z1 + z2 z1 < z2 ################################################### ### code chunk number 29: cumsum ################################################### cumsum(Z) ################################################### ### code chunk number 30: coredata ################################################### coredata(z1) coredata(z1) <- 1:10 z1 ################################################### ### code chunk number 31: index ################################################### index(z2) ################################################### ### code chunk number 32: index2 ################################################### index(z2) <- index(z1) z2 ################################################### ### code chunk number 33: startend ################################################### start(z1) end(z1) ################################################### ### code chunk number 34: window ################################################### window(Z, start = as.Date("2004-03-01")) window(Z, index = index(Z)[5:8], end = as.Date("2004-03-01")) ################################################### ### code chunk number 35: window2 ################################################### window(z1, end = as.POSIXct("2004-02-01")) <- 9:5 z1 ################################################### ### code chunk number 36: lagdiff ################################################### lag(z1, k = -1) merge(z1, lag(z1, k = 1)) diff(z1) ################################################### ### code chunk number 37: coercion ################################################### as.data.frame(Z) ################################################### ### code chunk number 38: na ################################################### z1[sample(1:10, 3)] <- NA z1 na.omit(z1) na.contiguous(z1) na.approx(z1) na.approx(z1, 1:NROW(z1)) na.spline(z1) na.locf(z1) ################################################### ### code chunk number 39: rollapply ################################################### rollapply(Z, 5, sd) rollapply(Z, 5, sd, fill = NA, align = "left") ################################################### ### code chunk number 40: rollmean ################################################### rollmean(z2, 5, fill = NA) ################################################### ### code chunk number 41: strucchange1 ################################################### library("strucchange") library("DAAG") data("fruitohms") ocus <- gefp(ohms ~ 1, order.by = ~ juice, data = fruitohms) ################################################### ### code chunk number 42: strucchange2 ################################################### plot(ocus) ################################################### ### code chunk number 43: tseries1 (eval = FALSE) ################################################### ## library("tseries") ## MSFT <- get.hist.quote(instrument = "MSFT", start = "2001-01-01", ## end = "2004-09-30", origin = "1970-01-01", retclass = "ts") ################################################### ### code chunk number 44: tseries1a ################################################### if(online) { MSFT <- get.hist.quote("MSFT", start = "2001-01-01", end = "2004-09-30", origin = "1970-01-01", retclass = "ts") save(MSFT, file = "MSFT.rda", compress = TRUE) } else { load("MSFT.rda") } ################################################### ### code chunk number 45: tseries2 ################################################### MSFT <- as.zoo(MSFT) index(MSFT) <- as.Date(index(MSFT)) MSFT <- na.omit(MSFT) ################################################### ### code chunk number 46: tseries3 ################################################### MSFT <- as.zoo(MSFT) ################################################### ### code chunk number 47: tseries3 ################################################### plot(diff(log(MSFT))) ################################################### ### code chunk number 48: timeDate2 ################################################### library("timeDate") z2td <- zoo(coredata(z2), timeDate(index(z2), FinCenter = "GMT")) z2td ################################################### ### code chunk number 49: yearmon1 ################################################### zr3 <- zooreg(rnorm(9), start = as.yearmon(2000), frequency = 12) zr3 ################################################### ### code chunk number 50: yearmon2 ################################################### aggregate(zr3, as.yearqtr, mean) ################################################### ### code chunk number 51: yearmon3 ################################################### as.Date(index(zr3)) as.Date(index(zr3), frac = 1) ################################################### ### code chunk number 52: yearmon4 ################################################### index(zr3) <- as.POSIXct(index(zr3)) as.irts(zr3) zoo/inst/doc/zoo-design.Rnw0000644000175400001440000001034711747047642015565 0ustar zeileisusers\documentclass[article,nojss]{jss} %% need no \usepackage{Sweave} \title{\pkg{zoo} Design} \Plaintitle{zoo Design} \author{\pkg{zoo} Development Team} \Plainauthor{zoo Development Team} \Address{ \pkg{zoo} Development Team\\ \proglang{R}-Forge: \url{http://R-Forge.R-project.org/projects/zoo/}\\ Comprehensive \proglang{R} Archive Network: \url{http://CRAN.R-project.org/package=zoo} } \Keywords{irregular time series, ordered observations, time index} \Abstract{ This is a set of design principles that -- albeit not having been explicitly set out initially -- have guided the development of the \proglang{R} \pkg{zoo} package. } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{zoo Design} %\VignetteDepends{zoo} %\VignetteKeywords{irregular time series, ordered observations, time index} %\VignettePackage{zoo} <>= library("zoo") Sys.setenv(TZ = "GMT") @ \emph{\pkg{zoo} works with any ordered index class} having the prescribed methods, see \code{?zoo} and \cite{zoo:Zeileis+Grothendieck:2005}. Specific index classes are not hard-coded in functions (with a few exceptions necessitated by external interfaces such as reading and interfacing with `\code{ts}') but rather all index operations are only done via the allowed methods. \emph{\pkg{zoo} is invisible}. As far as possible new names (e.g., for functions or methods and their arguments) are not introduced. New functionality is added as methods to generics from base \proglang{R} allowing reuse of those names. When names are added, thought is put into the name since \pkg{zoo} is so miserly about adding them. For example, the \code{read.zoo} name is obviously derived from \code{read.table} and the names \code{na.locf} or \code{na.approx} are in analogy to other \code{na.*} functions frome base \proglang{R}. \emph{\pkg{zoo} is consistent with base \proglang{R}}. The idea is to make the usage of \pkg{zoo} completely natural to someone who already has experience with \proglang{R} (in particular with the `\code{ts}' class). Certainly, \pkg{zoo} contains extensions to base \proglang{R}, but they should be as consistent as possible and have a natural `look and feel'. \emph{\pkg{zoo} is infrastructure}. \pkg{zoo} tries to do basic things well, e.g., data reading, handling, aggregation, transformation, etc. However, it does not provide time series modeling functionality -- \pkg{zoo} rather encourages add-on packages. A list of current packages employing \pkg{zoo} can be found on the Comprehensive \proglang{R} Archive Network (CRAN) and in the \pkg{zoo} FAQ, see \code{vignette("zoo-faq", package = "zoo")}. \emph{\pkg{zoo} interfaces to all other time series packages} on CRAN (or at least all of the more popular ones and some of the relatively unknown ones as well). Thus, time series information can be passed back and forth relatively easily between `\code{zoo}' and other time series classes and hence combinations of various functionalities are facilitated. \emph{\pkg{zoo} includes extensive documentation}. In addition to the standard \code{help()} pages, \pkg{zoo} provides a set of vignettes, see \code{vignette(package = "zoo")} for a list. Furthermore, the \pkg{zoo} Development Team members also post frequently on the mailing lists (especially ``\proglang{R}-help'', ``\proglang{R}-devel'', and ``\proglang{R}-SIG-Finance'') whose archives hence contain many useful code snippets etc. \emph{\pkg{zoo} has no bug list since all bugs are fixed (almost) immediately}. Over the last years, \pkg{zoo} has grown into a mature package. Nevertheless, there are always still bugs (or border cases that are not handled well). When reported to the development team by e-mail, these typically get fixed immediately in the Subversion (SVN) repository on \proglang{R}-Forge. (As of this writing, there are a couple of entries in the \pkg{zoo} \proglang{R}-Forge bug list, however typically this is not the situation.) \emph{\pkg{zoo} includes formal regression testing}. We have started developing formal regression tests employing \proglang{R}'s own system (in \code{zoo/tests/}) as well as the \pkg{RUnit} package \citep{zoo:RUnit}. \bibliography{zoo} \end{document} zoo/inst/doc/MSFT.rda0000644000175400001440000002514211747047642014257 0ustar zeileisusers mWY;oH `A 2c@B9ͣ~wc0 NX nj)!%!B!pF BD,douzok.3/:skk䭓O=iSy{w}koh| o{}+|vs||f;C?O9UW:{3tF}s.kϬ)ȍt>x]{Άo_-#7f'?_W鸂|a|חLǝ2\;zlw:@X/>;yoٽjq} /ٮ=Έ?AtO2p +agڔ'[pN\7!_ճOe?wCb\#'e78|1;K9gmk2iG|:e?Y _ٗMy =w?OY鸜u"{}gM\>Gn䥑?kS;SXagxUVd{{YX_O%f:N&?kweU{VC᳁/͝q9kץ~uY>i[ӢGݙAc*/YQC|g8 =@ߌx.ϢG?%s ]'F|б]AXp_S|_uSAy 1{onW)uNmI }߀=~?y5<>{t9ֵ~9gr^Gb sK`9ubgm ޵aG tx\P߆x>8 ry?@G@VV~@^nWdY׿:f;uWό%zj仾8 |hK=JY~D`㫿 qUV~6LyqzQU8r^g V×ꀫː/ڂ.;?UϏ:] dq>` Wޓ/U5y^`wNPCǚFg z[uSK_f3Zg-Xs;k&n_j7S\W_Ǿ'՟R}>!Y} r{oVЯ&MG~K~#A79>4Y^U:(R~]_R '%HK]װk9yDx؅:Ug9r:UGúfG~}q;3_HsF6wٜ;%#9 n mN}qgA<-ٗɸv>o< :9zq=zӂqq7#w,ےG23{O%ς8yqo}}s\}\~۸lS9"lN\G&? ~>7:'[%G>~^Dϖ%y&|K~6/k$!~ yJtKO%o>%>|JoՕO _7tt'ĕ L]>n|<ޜ%iKb$)򔲮8h;㨇/ ϥ^f)qֶc?oxnOmZLɗ6|&&؞3ǥi G.)dq 6y6y| L?oMǑ,ER3 <S |/yH\l};>q{K֒8{ _ ^gX}Bq[D? t _fԹcNJ:7xB9]zU'pYs!Wwkx݃OtͺNhUՇsGv>­v=p^}8ԖN/o oϧsVUϮϸ.p\:DU[WO;?;_?UknoqpW8yǘ 捼q;$ cpy}qfGr^\W6cy ތuL) Wݿ䓆 rs~~3_? ݛX/vab5|Zs~ؑХϣݦr9wi/wF{OU,}DK9O4AY#v> n\GC}-ʄ'mI>L~9[c]\r}>rxܟ ŋ}`"."ᷲ)NRY7~Gz.wjS g+?S H(<{}?a#}\n5sy@3Np zSt =e{g=rmXv=5xxpN=GSy#?;pe}Ѻ:ₖzzfCy |JO~Mމ]YO˧>;p[v#g}(L{Iͻ Uh^8H_u=*pP]҉CJp?ύˋm4wN4R̊BgD8pp4zD)XMv#Ig*>g qRq*ڤ_V;;]kbE~Tm\>KZnFR,˱g+U0n? V﮾po*oqS.z[`EnGR?_Вݯs]X<>ȥٱguY`s_&r9ܜzl݊*?ruy9]C pͱ]q ѓ8_>cxq=8_xE?V^3YC^5m7Y|-Fzt[vk9ζF>G?MM{`kG>kW1Ὶؗ(祍!g#Α:u?VХ"^MvHpsGg,y.`.<^񆷣3yhI8:A٧y >8)`Wg "vN oz'χpµ9/=s7D8O9~x@8$.otv tO!W z/ tB/<MRĿOo7Ľb™6[)IEg__>~@Omᗐ%z!҉C VΉ=qX3\BfK)=?lg:y2q\Өo oppM/cx'g>83[ =zpS'L;Şnvp1O̷S 7jlۉ6W/umoO[impR.JH=1$8̩3<Na螁e/N 7ps3ǿ;@?S;8# ~&n7򈥓-6t}s4ՃaIg8q^p)~}qnY>w1ܺq OO Ǫ{[]pl1xk2ݯy7{Ńzr[#'vyI˄M?.?4QgǸXzx9CNaT\s$KI']2oz[7R ER$pr e/ _*;/%^?0f|88"?OoC{SZN]u)ܸY.K.vsg *|ݎ?"_[7Yl$O~.kSwF~-.8%,~i w;s~Νx=(kyY:}8m|<!lUQ}51,vLu{:r+\%QM.WTIcl9-k9nOc<`}XsJ&7Y{5EGr55TI;R{*B{y9²p8 ?g37=q|r^;oc'Rχ} eu 9pY0yk5{>p+)|9wu4_'nXm߀ć}D~j#%|'^uoS~(*zUaʰ}7|_ݶG9#.1<ܮ5GGuCɆ+E߉_wwF~:%n?g<s?;t_)I8p{wM~VA{[лy?Yԟ&ؿW _8_ᰈ; YCOYw8ċ="z`i~>y>yv -|.wkD̯-6YO~>w2`{ޑ~>4뉇q8=Wĸckurݣ«~|x5f񇾠SSuVC4,~d~% ɹ#}Bσȗ.7쳥N^{w βFﭟ-?i^m*d_!s7aZ_]1f7/__M3\?_ uCEx㠧3qEyw\J%V^x-p%YD;C+Pƿ3^G|įY_Eq[⧭|b/}K8sVo7v}[jm*I?|ruHE\Vb;qqxeǭGqQI}eSފ+q݊0߳^5!߹'oe93+r'q 3Sˉ ԫ Rؗ/zSKٸ,guɏr3wÉQ#G'<;x ?r`J z|G˾ 9A_Pr\}zkyח7̾Tą}Ui곰+_r ^T<ý7oǾ~=w~?Рv }3YuLmKW̖z{> Jpf5u)y|Wu )qb{ VPT_Ղy/V' {͹^~s9}vg3fX?U8Q^ 8ks#.v-q?m}8׹?5wss'β>sOWfs>s~__5-|%l,g޹s|}\88M%}Yx!AN '\pq~k3m| <ϩ ϝs9O͏<̜`fW̉lSwAG?p |?f}5GpA/ qt=5h 9zx#W8 λ~«}F8yჄ;ߧL^l8DD뼜|7u^.y C8Yb; N>s{8_M{mWY}.Glܧ~SF.y>m7m]-vH!DrOos'mNԹg*4qk{"8yIT'ȇ\fst ُvr+>d:!_7)8Rt!O59N-﬿%2~.;q~pu` *K~1SvpK_  羈Wy޽<0#׺dX/}1[$jq~}>(v#ɟ~ ~rCO=Q_|{o{?K~A|{>s'J\msGw)YZ /c`/W}ݏ pzY܅Lqȵݏ@NS1? ݧ~q`w:80(xw?}qyӼ?1N8p(= '߼}pv_U9ԳU£Q[={8ԎYǸpO8 u:{\/uB<- i *+iٟᧈs{J"VW:yJ7θw±:%Ɖ߼Ee9騃uȗps81kWp?'k rޑouw0^\o% =O5o՗s:ȥG;9.]LX?go} }? ܉<ﳛv|h]Oįrn:w2]'@d}^ -Nu=GG :Okm_X;d-9~OyOG~Byk\KX5Vx޻O_lMa8}YuǵYCgq#gܳ|)gK Q}TL{u_#c7[VCԼ-w\+~Lj*f' 9jEtE>~ Sq]{èVEq^w¾O>tUZ~c?Z]{=j/<˛OY_+aCUz^pZ,';S^@>߯.}o zU©pčY 󔞢)yUWIW('_-px)iA|"/tIk<¿qpb3w9GWEOѧ=Wy};*{x˧?t/~UoN^L渧1y%l{&ʇȏ_߼8sC\Q \vE|-Rck?د;?܈7Vν_ܰև3r>5Zu9k.A~Wuɧ&cy r5xN}O'c欟0X8.rf%(!tsVI+x`z.\~pw8ჴ>Y /4p1 }d@^?35\j!ה8X}7<~ă{[nCǔ..SOB9yύoLSþ/}u#o^򙒇G8vL [G yc *ud^'&^,6q"88oɾ~8p#ԓ !;?ã@}/to8K7>~\,!Nh޸\n`x߆^LSj9o1<42p=-}/J8gɍrc'Ra{c8Nz'ugױ{mĉ ,;ri}$#뻊}1{>Hc>۟ *\钼e] =R-%߷>uӳx8$DNb~{&>ʞbǧw'>MoxIDN&q8x GK?պ;ZݳD}ԥ;ykԓ>= library("zoo") library("chron") Sys.setenv(TZ = "GMT") @ \newpage \section*{Example 1} \textbf{Input class:} Text file/connection (space-separated with header). \textbf{Input index:} \class{integer}. \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{integer}. \textbf{Strategy:} No transformation of time index needed, hence only a simple call to \fct{read.zoo}. <>= Lines <- " time latitude longitude altitude distance heartrate 1277648884 0.304048 -0.793819 260 0.000000 94 1277648885 0.304056 -0.793772 262 4.307615 95 1277648894 0.304075 -0.793544 263 25.237911 103 1277648902 0.304064 -0.793387 256 40.042988 115 " z <- read.zoo(text = Lines, header = TRUE) z @ \newpage \section*{Example 2} \textbf{Input class:} \class{data.frame}. \textbf{Input index:} \class{factor} with labels indicating AM/PM times but no date. \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{times} (from \pkg{chron}). \textbf{Strategy:} The idea is to add some dummy date (here 1970-01-01) to the \class{character} lables, then transform to \class{chron} and extract the \class{times}. <>= DF <- structure(list( Time = structure(1:5, .Label = c("7:10:03 AM", "7:10:36 AM", "7:11:07 AM", "7:11:48 AM", "7:12:25 AM"), class = "factor"), Bid = c(6118.5, 6118.5, 6119.5, 6119, 6119), Offer = c(6119.5, 6119.5, 6119.5, 6120, 6119.5)), .Names = c("Time", "Bid", "Offer"), row.names = c(NA, -5L), class = "data.frame") DF @ <>= z <- read.zoo(DF, FUN = function(x) times(as.chron(paste("1970-01-01", x), format = "%Y-%m-%d %H:%M:%S %p"))) z @ \newpage \section*{Example 3} \textbf{Input class:} Text file/connection (semicolon-separated with header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~1) and times (column~2). \textbf{Output class:} Multivariate \class{zoo} series, with separate columns for each date. \textbf{Output index:} \class{times} (from \pkg{chron}). \textbf{Strategy:} Split the data based on date (column~1) and process times (column~2) to \class{times}. Enhance column names at the end. <>= Lines <- " Date;Time;Close 01/09/2009;10:00;56567 01/09/2009;10:05;56463 01/09/2009;10:10;56370 01/09/2009;16:45;55771 01/09/2009;16:50;55823 01/09/2009;16:55;55814 02/09/2009;10:00;55626 02/09/2009;10:05;55723 02/09/2009;10:10;55659 02/09/2009;16:45;55742 02/09/2009;16:50;55717 02/09/2009;16:55;55385 " f <- function(x) times(paste(x, 0, sep = ":")) z <- read.zoo(text = Lines, header = TRUE, sep = ";", split = 1, index = 2, FUN = f) colnames(z) <- sub("X(..).(..).(....)", "\\3-\\2-\\1", colnames(z)) z @ \newpage \section*{Example 4} \textbf{Input class:} Text file/connection (space-separated with header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~1) and times (column~2). \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{chron} (from \pkg{chron}). \textbf{Strategy:} Indicate vector of two columns in \code{index}, which is subsequently processed by a \code{FUN} taking two arguments and returning a \class{chron} time/date. <>= Lines <- " Date Time O H L C 1/2/2005 17:05 1.3546 1.3553 1.3546 1.35495 1/2/2005 17:10 1.3553 1.3556 1.3549 1.35525 1/2/2005 17:15 1.3556 1.35565 1.35515 1.3553 1/2/2005 17:25 1.355 1.3556 1.355 1.3555 1/2/2005 17:30 1.3556 1.3564 1.35535 1.3563 " f <- function(d, t) as.chron(paste(as.Date(chron(d)), t)) z <- read.zoo(text = Lines, header = TRUE, index = 1:2, FUN = f) z @ \newpage \section*{Example 5} \textbf{Input class:} Text file/connection (space-separated with non-matching header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~6) and unneeded weekdays (column~5) and times (column~7). \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{Date}. \textbf{Strategy:} First, \code{skip} the header line, remove unneeded columns by setting \code{colClasses} to \code{"NULL"}, and set suitable \code{col.names}. Second, convert the date column to a \class{Date} index using \code{format}. Finally, aggregate over duplicate dates, keeping only the last observation. <>= Lines <- " views number timestamp day time 1 views 910401 1246192687 Sun 6/28/2009 12:38 2 views 921537 1246278917 Mon 6/29/2009 12:35 3 views 934280 1246365403 Tue 6/30/2009 12:36 4 views 986463 1246888699 Mon 7/6/2009 13:58 5 views 995002 1246970243 Tue 7/7/2009 12:37 6 views 1005211 1247079398 Wed 7/8/2009 18:56 7 views 1011144 1247135553 Thu 7/9/2009 10:32 8 views 1026765 1247308591 Sat 7/11/2009 10:36 9 views 1036856 1247436951 Sun 7/12/2009 22:15 10 views 1040909 1247481564 Mon 7/13/2009 10:39 11 views 1057337 1247568387 Tue 7/14/2009 10:46 12 views 1066999 1247665787 Wed 7/15/2009 13:49 13 views 1077726 1247778752 Thu 7/16/2009 21:12 14 views 1083059 1247845413 Fri 7/17/2009 15:43 15 views 1083059 1247845824 Fri 7/17/2009 18:45 16 views 1089529 1247914194 Sat 7/18/2009 10:49 " cl <- c("NULL", "numeric", "character")[c(1, 1, 2, 2, 1, 3, 1)] cn <- c(NA, NA, "views", "number", NA, NA, NA) z <- read.zoo(text = Lines, skip = 1, col.names = cn, colClasses = cl, index = 3, format = "%m/%d/%Y", aggregate = function(x) tail(x, 1)) z @ Extract all Thursdays and Fridays. <>= (z45 <- z[format(time(z), "%w") %in% 4:5,]) @ Keep last entry in each week. <>= z45[!duplicated(format(time(z45), "%U"), fromLast = TRUE), ] @ Alternative approach: Above approach labels each point as it was originally labeled, i.e., if Thursday is used it gets the date of that Thursday. Another approach is to always label the resulting point as Friday and also use the last available value even if its not Thursday. Create daily grid and fill in so Friday is filled in with prior value if Friday is \code{NA}. <>= g <- seq(start(z), end(z), by = "day") z.filled <- na.locf(z, xout = g) @ Extract Fridays, including those filled in from previous day. <>= z.filled[format(time(z.filled), "%w") == "5", ] @ \newpage \section*{Example 6} \textbf{Input class:} Text file/connection (comma-separated with header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~1) and times (column~2). \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{chron} (from \pkg{chron}) or \class{POSIXct}. \textbf{Strategy:} Three versions, all using vector \code{index = 1:2}. <>= Lines <- " Date,Time,Open,High,Low,Close,Up,Down 05.02.2001,00:30,421.20,421.20,421.20,421.20,11,0 05.02.2001,01:30,421.20,421.40,421.20,421.40,7,0 05.02.2001,02:00,421.30,421.30,421.30,421.30,0,5" @ With custom \code{FUN} using \fct{chron} after appending seconds. <>= f <- function(d, t) chron(d, paste(t, "00", sep = ":"), format = c("m.d.y", "h:m:s")) z <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, FUN = f) z @ With custom \code{FUN} using \fct{as.chron} with suitable \code{format}. <>= f2 <- function(d, t) as.chron(paste(d, t), format = "%d.%m.%Y %H:%M") z2 <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, FUN = f2) z2 @ Without \code{FUN}, hence the \code{index} columns are pasted together and then passt do \fct{as.POSIXct} because \code{tz} and \code{format} are specified. <>= z3 <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, tz = "", format = "%d.%m.%Y %H:%M") z3 @ \newpage \section*{Example 7} \textbf{Input class:} Text file/connection (space-separated with header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~1) and times (column~2). \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{POSIXct}. \textbf{Strategy:} Due to standard date/time formats, only \code{index = 1:2} and \code{tz = ""} need to be specified to produce \class{POSIXct} index. <>= Lines <- "Date Time V2 V3 V4 V5 2010-10-15 13:43:54 73.8 73.8 73.8 73.8 2010-10-15 13:44:15 73.8 73.8 73.8 73.8 2010-10-15 13:45:51 73.8 73.8 73.8 73.8 2010-10-15 13:46:21 73.8 73.8 73.8 73.8 2010-10-15 13:47:27 73.8 73.8 73.8 73.8 2010-10-15 13:47:54 73.8 73.8 73.8 73.8 2010-10-15 13:49:51 73.7 73.7 73.7 73.7 " z <- read.zoo(text = Lines, header = TRUE, index = 1:2, tz = "") z @ \newpage \section*{Example 8} \textbf{Input class:} Text file/connection (space-separated without header). \textbf{Input index:} \class{factor} with labels indicating dates. \textbf{Output class:} Multivariate \class{zoo} series, with separate columns depending on column~2. \textbf{Output index:} \class{Date}. \textbf{Strategy:} Non-standard \code{na.strings} format needs to be specified, series is \code{split} based on second column, and date \code{format} (in column~1, default) needs to be specified. <>= Lines <- " 13/10/2010 A 23 13/10/2010 B 12 13/10/2010 C 124 14/10/2010 A 43 14/10/2010 B 54 14/10/2010 C 65 15/10/2010 A 43 15/10/2010 B N.A. 15/10/2010 C 65 " z <- read.zoo(text = Lines, na.strings = "N.A.", format = "%d/%m/%Y", split = 2) z @ \newpage \section*{Example 9} \textbf{Input class:} Text file/connection (comma-separated with header). \textbf{Input index:} \class{factor} with labels indicating date/time. \textbf{Output class:} Univariate \class{zoo} series. \textbf{Output index:} \class{chron} (from \pkg{chron}) or \class{POSIXct}. \textbf{Strategy:} Ignore first two columns by setting \code{colClasses} to \code{"NULL"}. Either produce \class{chron} index via \fct{as.chron} or use all defaults to produce \class{POSIXct} by setting \code{tz}. <>= Lines <- ' "","Fish_ID","Date","R2sqrt" "1",1646,2006-08-18 08:48:59,0 "2",1646,2006-08-18 09:53:20,100 ' z <- read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric"), FUN = as.chron) z z2 <- read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric"), tz = "") z2 @ \newpage \section*{Example 10} \textbf{Input class:} Text file/connection (space-separated with non-matching header). \textbf{Input index:} \class{factor} with labels indicating date (column~3) and time (column~4). \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{chron} (from \pkg{chron}) or \class{POSIXct}. \textbf{Strategy:} \code{skip} non-matching header and extract date/time from two columns \code{index = 3:4}. Either using sequence of two functions \code{FUN} and \code{FUN2} or employ defaults yielding \class{POSIXct}. <>= Lines <- " iteration Datetime VIC1 NSW1 SA1 QLD1 1 1 2011-01-01 00:30 5482.09 7670.81 2316.22 5465.13 2 1 2011-01-01 01:00 5178.33 7474.04 2130.30 5218.61 3 1 2011-01-01 01:30 4975.51 7163.73 2042.39 5058.19 4 1 2011-01-01 02:00 5295.36 6850.14 1940.19 4897.96 5 1 2011-01-01 02:30 5042.64 6587.94 1836.19 4749.05 6 1 2011-01-01 03:00 4799.89 6388.51 1786.32 4672.92 " z <- read.zoo(text = Lines, skip = 1, index = 3:4, FUN = paste, FUN2 = as.chron) z z2 <- read.zoo(text = Lines, skip = 1, index = 3:4, tz = "") z2 @ \newpage \section*{Example 11} \textbf{Input class:} \class{data.frame}. \textbf{Input index:} \class{Date}. \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{Date}. \textbf{Strategy:} Given a \class{data.frame} only keep last row in each month. Use \fct{read.zoo} to convert to \class{zoo} and then \fct{na.locf} and \fct{duplicated}. <>= DF <- structure(list( Date = structure(c(14609, 14638, 14640, 14666, 14668, 14699, 14729, 14757, 14759, 14760), class = "Date"), A = c(4.9, 5.1, 5, 4.8, 4.7, 5.3, 5.2, 5.4, NA, 4.6), B = c(18.4, 17.7, NA, NA, 18.3, 19.4, 19.7, NA, NA, 18.1), C = c(32.6, NA, 32.8, NA, 33.7, 32.4, 33.6, NA, 34.5, NA), D = c(77, NA, 78.7, NA, 79, 77.8, 79, 81.7, NA, NA)), .Names = c("Date", "A", "B", "C", "D"), row.names = c(NA, -10L), class = "data.frame") DF z <- read.zoo(DF) na.locf(z)[!duplicated(as.yearmon(time(z)), fromLast = TRUE)] @ \newpage \section*{Example 12} \textbf{Input class:} Text file/connection (space-separated without header). \textbf{Input index:} \class{factor} with labels indicating dates. \textbf{Output class:} Univariate \class{zoo} series. \textbf{Output index:} \class{Date}. \textbf{Strategy:} Only keep last point in case of duplicate dates. <>= Lines <- " 2009-10-07 0.009378 2009-10-19 0.014790 2009-10-23 -0.005946 2009-10-23 0.009096 2009-11-08 0.004189 2009-11-10 -0.004592 2009-11-17 0.009397 2009-11-24 0.003411 2009-12-02 0.003300 2010-01-15 0.010873 2010-01-20 0.010712 2010-01-20 0.022237 " z <- read.zoo(text = Lines, aggregate = function(x) tail(x, 1)) z @ \newpage \section*{Example 13} \textbf{Input class:} Text file/connection (comma-separated with header). \textbf{Input index:} \class{factor} with labels indicating date/time. \textbf{Output class:} Multivariate \class{zoo} series. \textbf{Output index:} \class{POSIXct} or \class{chron} (from \pkg{chron}). \textbf{Strategy:} Dates and times are in standard format, hence the default \class{POSIXct} can be produced by setting \code{tz} or, alternatively, \class{chron} can be produced by setting \fct{as.chron} as \code{FUN}. <>= Lines <- " timestamp,time-step-index,value 2009-11-23 15:58:21,23301,800 2009-11-23 15:58:29,23309,950 " z <- read.zoo(text = Lines, header = TRUE, sep = ",", tz = "") z z2 <- read.zoo(text = Lines, header = TRUE, sep = ",", FUN = as.chron) z2 @ \newpage \section*{Example 14} \textbf{Input class:} Text file/connection (space-separated with header). \textbf{Input index:} \class{factor}s with labels indicating dates (column~1) times (column~2). \textbf{Output class:} Univariate \class{zoo} series. \textbf{Output index:} \class{chron} (from \pkg{chron}). \textbf{Strategy:} Indicate vector \code{index = 1:2} and use \fct{chron} (which takes two separate arguments for dates and times) to produce \class{chron} index. <>= Lines <- " Date Time Value 01/23/2000 10:12:15 12.12 01/24/2000 11:10:00 15.00 " z <- read.zoo(text = Lines, header = TRUE, index = 1:2, FUN = chron) z @ \newpage \section*{Example 15} \textbf{Input class:} Text file/connection (space-separated with header). \textbf{Input index:} \class{numeric} year with quarters represented by separate columns. \textbf{Output class:} Univariate \class{zoo} series. \textbf{Output index:} \class{yearqtr}. \textbf{Strategy:} First, create a multivariate annual time series using the year index. Then, create a regular univariate quarterly series by collapsing the annual series to a vector and adding a new \class{yearqtr} index from scratch. <>= Lines <- " Year Qtr1 Qtr2 Qtr3 Qtr4 1992 566 443 329 341 1993 344 212 133 112 1994 252 252 199 207 " za <- read.zoo(text = Lines, header = TRUE) za zq <- zooreg(as.vector(t(za)), start = yearqtr(start(za)), freq = 4) zq @ \newpage \section*{Further comments} Multiple files can be read and subsequently merged. <>= filenames <- dir(pattern = "csv$") z <- read.zoo(filenames, header = TRUE, sep = ",", fixed = FALSE) @ \end{document} zoo/inst/doc/zoo-faq.R0000644000175400001440000003100113224634144014473 0ustar zeileisusers### R code from vignette source 'zoo-faq.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### library("zoo") Sys.setenv(TZ = "GMT") ################################################### ### code chunk number 2: duplicates1 ################################################### z <- suppressWarnings(zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5))) z ################################################### ### code chunk number 3: duplicates2 ################################################### aggregate(z, identity, mean) ################################################### ### code chunk number 4: duplicates3 ################################################### aggregate(z, identity, tail, 1) ################################################### ### code chunk number 5: duplicates4 ################################################### time(z) <- na.approx(ifelse(duplicated(time(z)), NA, time(z)), na.rm = FALSE) ################################################### ### code chunk number 6: duplicates5 ################################################### z[!is.na(time(z))] ################################################### ### code chunk number 7: duplicates ################################################### Lines <- "1|BHARTIARTL|EQ|18:15:05|600|1 2|BHARTIARTL|EQ|18:15:05|600|99 3|GLENMARK|EQ|18:15:05|238.1|5 4|HINDALCO|EQ|18:15:05|43.75|100 5|BHARTIARTL|EQ|18:15:05|600|1 6|BHEL|EQ|18:15:05|1100|11 7|HINDALCO|EQ|18:15:06|43.2|1 8|CHAMBLFERT|EQ|18:15:06|46|10 9|CHAMBLFERT|EQ|18:15:06|46|90 10|BAJAUTOFIN|EQ|18:15:06|80|100" library("zoo") library("chron") tail1 <- function(x) tail(x, 1) cls <- c("NULL", "NULL", "NULL", "character", "numeric", "numeric") nms <- c("", "", "", "time", "value", "volume") z <- read.zoo(textConnection(Lines), aggregate = tail1, FUN = times, sep = "|", colClasses = cls, col.names = nms) z2 <- read.zoo(textConnection(Lines), aggregate = sum, FUN = times, sep = "|", colClasses = cls, col.names = nms) z$volume <- z2$volume z ################################################### ### code chunk number 8: readsplit ################################################### Lines <- "Date Stock Price 2000-01-01 IBM 10 2000-01-02 IBM 11 2000-01-01 ORCL 12 2000-01-02 ORCL 13" stocks <- read.zoo(textConnection(Lines), header = TRUE, split = "Stock") stocks ################################################### ### code chunk number 9: log-plot ################################################### z <- zoo(1:100) plot(z, log = "y", panel = function(..., log) lines(...)) ################################################### ### code chunk number 10: plot-axes (eval = FALSE) ################################################### ## set.seed(1) ## z.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) ## z <- zoo(cbind(left = rnorm(5), right = rnorm(5, sd = 0.2)), z.Date) ## ## plot(z[,1], xlab = "Time", ylab = "") ## opar <- par(usr = c(par("usr")[1:2], range(z[,2]))) ## lines(z[,2], lty = 2) ## ## axis(side = 4) ## legend("bottomright", lty = 1:2, legend = colnames(z), bty="n") ## par(opar) ################################################### ### code chunk number 11: plot-axes1 ################################################### set.seed(1) z.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) z <- zoo(cbind(left = rnorm(5), right = rnorm(5, sd = 0.2)), z.Date) plot(z[,1], xlab = "Time", ylab = "") opar <- par(usr = c(par("usr")[1:2], range(z[,2]))) lines(z[,2], lty = 2) axis(side = 4) legend("bottomright", lty = 1:2, legend = colnames(z), bty="n") par(opar) ################################################### ### code chunk number 12: factor1 ################################################### DF <- data.frame(time = 1:4, x = 1:4, f = factor(letters[c(1, 1, 2, 2)])) zx <- zoo(DF$x, DF$time) zf <- zoo(DF$f, DF$time) ################################################### ### code chunk number 13: factor2 ################################################### DF2 <- data.frame(x = zx, f = zf) ################################################### ### code chunk number 14: factor3 ################################################### z <- zoo(data.matrix(DF[-1]), DF$time) ################################################### ### code chunk number 15: lags ################################################### z <- zoo(11:15, as.Date("2008-01-01") + c(-4, 1, 2, 3, 6)) zr <- as.zooreg(z) lag(z) lag(zr) diff(log(z)) diff(log(zr)) ################################################### ### code chunk number 16: subtract-monthly-means ################################################### set.seed(123) z <- zoo(rnorm(100), as.Date("2007-01-01") + seq(0, by = 10, length = 100)) z.demean1 <- z - ave(z, as.yearmon(time(z))) ################################################### ### code chunk number 17: subtract-monthly-means2 ################################################### z.demean2 <- z - ave(z, format(time(z), "%m")) ################################################### ### code chunk number 18: yearmon2 ################################################### as.yearmon2 <- function(x, ...) UseMethod("as.yearmon2") as.yearmon2.Date <- function(x, ...) { y <- as.yearmon(with(as.POSIXlt(x, tz = "GMT"), 1900 + year + mon/12)) names(y) <- x structure(y, class = c("yearmon2", class(y))) } ################################################### ### code chunk number 19: yearmon2-inverse ################################################### as.Date.yearmon2 <- function(x, frac = 0, ...) { if (!is.null(names(x))) return(as.Date(names(x))) x <- unclass(x) year <- floor(x + .001) month <- floor(12 * (x - year) + 1 + .5 + .001) dd.start <- as.Date(paste(year, month, 1, sep = "-")) dd.end <- dd.start + 32 - as.numeric(format(dd.start + 32, "%d")) as.Date((1-frac) * as.numeric(dd.start) + frac * as.numeric(dd.end), origin = "1970-01-01") } ################################################### ### code chunk number 20: yearmon2-example ################################################### dd <- seq(as.Date("2000-01-01"), length = 5, by = 32) z <- zoo(1:5, as.yearmon2(dd)) z aggregate(z, as.Date, identity) ################################################### ### code chunk number 21: single-panel ################################################### z <- zoo(0:500, as.Date(0:500)) plot(z, xaxt = "n") tt <- time(z) m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) abline(v = m, col = grey(0.8), lty = 2) ################################################### ### code chunk number 22: multiplesingleplot ################################################### z3 <- cbind(z1 = z, z2 = 2*z, z3 = 3*z) opar <- par(mfrow = c(2, 2)) tt <- time(z) m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) for(i in 1:ncol(z3)) { plot(z3[,i], xaxt = "n", ylab = colnames(z3)[i], ylim = range(z3)) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) } par(opar) ################################################### ### code chunk number 23: multipanelplot ################################################### plot(z3, screen = 1:3, xaxt = "n", nc = 2, ylim = range(z3), panel = function(...) { lines(...) panel.number <- parent.frame()$panel.number nser <- parent.frame()$nser # place axis on bottom panel of each column only if (panel.number %% 2 == 0 || panel.number == nser) { tt <- list(...)[[1]] m <- unique(as.Date(as.yearmon(tt))) jan <- format(m, "%m") == "01" mlab <- substr(months(m[!jan]), 1, 1) axis(side = 1, at = m[!jan], labels = mlab, tcl = -0.3, cex.axis = 0.7) axis(side = 1, at = m[jan], labels = format(m[jan], "%y"), tcl = -0.7) axis(side = 1, at = unique(as.Date(as.yearqtr(tt))), labels = FALSE) } }) ################################################### ### code chunk number 24: plot-with-na ################################################### z <- zoo(c(1, NA, 2, NA, 3)) plot(z) ################################################### ### code chunk number 25: plot-with-na1 ################################################### plot(z, type = "p") ################################################### ### code chunk number 26: plot-with-na2 ################################################### plot(na.omit(z)) ################################################### ### code chunk number 27: plot-with-na3 ################################################### plot(na.approx(z)) ################################################### ### code chunk number 28: plot-with-na4 ################################################### plot(z, type = "p") lines(na.omit(z)) ################################################### ### code chunk number 29: Rmetrics ################################################### library("timeDate") dts <- c("1989-09-28", "2001-01-15", "2004-08-30", "1990-02-09") tms <- c( "23:12:55", "10:34:02", "08:30:00", "11:18:23") td <- timeDate(paste(dts, tms), format = "%Y-%m-%d %H:%M:%S") library("zoo") z <- zoo(1:4, td) zz <- merge(z, lag(z)) plot(zz) library("timeSeries") zz as.timeSeries(zz) as.zoo(as.timeSeries(zz)) ################################################### ### code chunk number 30: Rmetrics-detach ################################################### detach("package:timeSeries") detach("package:timeDate") ################################################### ### code chunk number 31: ifelse ################################################### z <- zoo(c(1, 5, 10, 15)) # wrong !!! ifelse(diff(z) > 4, -z, z) # ok ifelse.zoo(diff(z) > 4, -z, z) # or if we merge first we can use ordinary ifelse xm <- merge(z, dif = diff(z)) with(xm, ifelse(dif > 4, -z, z)) # or in this case we could also use orindary ifelse if we # use fill = NA to ensure all three have same index ifelse(diff(z, fill = NA) > 4, -z, z) ################################################### ### code chunk number 32: fillin ################################################### # April is missing zym <- zoo(1:5, as.yearmon("2000-01-01") + c(0, 1, 2, 4, 5)/12) g <- seq(start(zym), end(zym), by = 1/12) na.locf(zym, xout = g) ################################################### ### code chunk number 33: fillin-2 ################################################### z <- zoo(1:3, as.Date(c("2000-01-15", "2000-03-3", "2000-04-29"))) g <- seq(as.yearmon(start(z)), as.yearmon(end(z)), by = 1/12) na.locf(z, x = as.yearmon, xout = g) ################################################### ### code chunk number 34: fillin-3 ################################################### Lines <- "Time,Value 2009-10-09 5:00:00,210 2009-10-09 5:05:00,207 2009-10-09 5:17:00,250 2009-10-09 5:30:00,193 2009-10-09 5:41:00,205 2009-10-09 6:00:00,185" library("chron") z <- read.zoo(textConnection(Lines), FUN = as.chron, sep = ",", header = TRUE) g <- seq(start(z), end(z), by = times("00:10:00")) na.locf(z, xout = g) ################################################### ### code chunk number 35: date ################################################### z <- zoo(1:2, c("2000-01-01", "2000-01-02")) aggregate(z, function(x) as.Date(x, origin = "1970-01-01")) ################################################### ### code chunk number 36: date-2 ################################################### aggregate(z, as.Date) ################################################### ### code chunk number 37: date-3 ################################################### Lines <- "2000-01-01 12:00:00,12 2000-01-02 12:00:00,13" read.zoo(text = Lines, sep = ",", FUN = function(x) as.Date(x, origin = "1970-01-01")) ################################################### ### code chunk number 38: date-4 ################################################### read.zoo(text = Lines, sep = ",", FUN = as.Date) ################################################### ### code chunk number 39: indexing ################################################### n <- 50 z <- zoo(1:n, c(1:3, seq(4, by = 2, length = n-3))) system.time({ zz <- sapply(seq_along(z), function(i) sum(z[time(z) <= time(z)[i] & time(z) > time(z)[i] - 3])) z1 <- zoo(zz, time(z)) }) system.time({ zc <- coredata(z) tt <- time(z) zr <- sapply(seq_along(zc), function(i) sum(zc[tt <= tt[i] & tt > tt[i] - 3])) z2 <- zoo(zr, tt) }) identical(z1, z2) zoo/inst/doc/zoo-faq.pdf0000644000175400001440000031714413224636554015071 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4417 /Filter /FlateDecode /N 97 /First 809 >> stream x\[sF}_1+1 ~ŲeK,)d+9&%9;=C @ȐD [ L02DębKq b! "E,E?,dA @ pQŸb_3!#ƕ~x GZ20IDa+t3xWL5F1Kȉ!.8(&!Pbdqd22Li\iJi3HK@?0, fxdRH@)XFxfqebEG0H2 DLǸ $4F'u#ZK9 +FCR,C%#BHr= 2b0YU"BT{#BQgA`,HpSd`Bb}4HrcC2P0 AG YSqYyV~3ؔ()6{?/'if \aGo׆y{~__"v8g977f_OMVsLI4Ұg~GVב|fi9fcOn<#ӺAW~Qn4تqqC  B |hn\m\f\EcCIrŮRع.)|Ɗb>]li;[j#^vǖ3M C x5Z?Ȕ{vFF\^/`>5IKf(7Q>])r8:p*h䦍YNY.lS ,\K(Sj5#~%14;짶jz, &oGG  E~nz@\w*rúm2QSTi&@61u[f=WK3)\^o<(<⭚HM`5@4#wިR68{H[6ENDJ%S[%\$/cޫY:bc2e~AVM"23`UjA``|+UcC"va[Ml E4)ӻd :4ꆌoH*PK;n0X/I0“":#lb{rITVݒ|z]{ !f;Yy14褝.ƅZgk8EP))ŽYP)4ˑ`hiEh/b'GCFW6T1St=MF"YLmѳ',bRJIjd;LH{:K%ͅI"v|3g!c14RiZ#gގyK{zGޱ;>xޙw}x{w gK{՛xS/rڻ#Oo^1ܻo_-j2/oJ+hvzlUdTÝFmA͛GdKڌ{?"O'EW"㡿 TJ]li\mO“4WȰ=U~n @ 5$)Bg!H Hb!]l>eP[=8?-"`!:If ?8M8f0Mz~֕Hwh5]K6~h/ovikNlE5AK Fմ~ έU X鍰)N& 6Ž+6̢rY RN+Ҟ:dZbZTN pPNfS_4cuuZVDk.Z(ձfVj9O15כֿZC4܊L6J1N x) ocSYklܿk*' $Ҍ.&sMNAEzҩ%MQxYV6q 黳֐^[r}}N,W~؟գP63s06&ۂ:QspL@vct]=W9@V]=%@]킜دc@,SVߥ~[OB2 $TQJ vXiwd$o#sp4W(78hV}MώznSiXOO &_d!!5N*lqkMe/ 53O_Wѣ]}?Yͫ*b24,b\7M.jq;UxXayP}ŬCҘql~Ĵ!֪Ki\REeըiEGh$;5 +y]o? 3|CVkK_?ګie<V3Մ; aZܦv=藍Z&ilys"#YPu 6ѫӟ_ɍӖ< N"^K6'k2׳>j`[ <[ж+{v'`v蔾/E*LpѫCZ tDQ}][c_s]Xs[!?s;y4\`뇘+9vtI@D,MS'/.ܷ%~[OH%TBo^kq/^kڶիEW6Jvendstream endobj 99 0 obj << /Subtype /XML /Type /Metadata /Length 1673 >> stream GPL Ghostscript 9.22 irregular time series, ordered observations, time index, daily data, weekly data, returns 2018-01-08T10:22:50+01:00 2018-01-08T10:22:50+01:00 LaTeX with hyperref package zoo FAQzoo Development Team endstream endobj 100 0 obj << /Filter /FlateDecode /Length 4680 >> stream x[KǑ#>u/|? -vwm@>P6G$GQGVedu %AɚȈ/aQ_ٺ|64uSw~o8otns_`Dl?j9gA)`@IQJz1ev} ~ov'~SH]7(au3CpSXh"TzRi0=N Q)?,,TNJYc@6 n^<⎸+2no\v]͵ RCy+q}ݕr|#ϫG `+oL绫h!y9n՚M9PJ!ySR6*x5/Z9i^{P9m: Z}Crwf{I6EpX{::O(Y8N.Qh 8a_2lȬ%KL|v~nVV^\YJõUNʀmOoY4xo۪*1%$ö9c ۿ` M;eJ.ޕNir[qIfbNox;AOڅ8#۝3?ܱqlVlznE)r@h7{`\x *QIu ~o-IE8xQC=-J~ͧ]ȸ>vG?\C&cC `޺=mADN3,7>4Oޥ cA , e9d!u)/-Tf#^]&*%B_T UBxON{A[ά\V (L`Xnl7*#=1E2 iyˠiz h"\pª``[]1aT,T T2o$gD3kCtj2@_j\(^RC n4{V1|_,.ݡqo} up ov53[~3+1O ] ٖ:jX 4JMBXmUFN!c44^.$J҃爃le)m< Y{:g-$pw D?1㇇hu\g`}j9 U[`\F)9 >B:p*¡37E!^@NUqRB! Q%7+rYD Evu 5%$9jb-c3"M?zdp:s|3ઙ.f\@wc3PRx}͐,(4eX1DO1UI~!\Vl#OܑqqL.O\'vJ3oM1@A@8_'.Z XR>nH v꺐Nݍ T{wɩB)JN SbE/Ԛ1aݓqpx ?))IZJ "k$+u#Wj;L?C"% dOTQ]kjV}ٴ XQI*XgLڢIؔ87Pw , s}P$=Ȏis͵*]Mۮ@us墳q0pfCc%"#abg XItoQ$C]>x(,cʯ b4W[&ˁe6eP"qGS2"['VQRg>F7svRV7 'nYZ@q67W=e;A6:F.75/Z uvzL{v{x}ߖ1 qSr-R70/HG~Qhқo"?K:7Ay0xmCu' )-GnW7ˠzp XX(ZBa *kaQ[,BN~!p~jeO'Eݱϗ9 h(UWqnKed'A'*P`1!-~a 8ܦEVgwFd he%K?_֥py5JPHz֢\\% k91e^ "Wô6eey)5$[^:s> stream xr_D;PEqGUR*͔d?x,,}}fJb61h?-T nOuD-6'?Ev)`\zqzyR? |UXDlenR+{C5}NrzIwc4kH$n(vwQ吓qfEN+ݷTNI)mAm!Bzzz~%rM.V)| rFJnM C^?S@W^΅Xi{MeE\D@VZ9f#OO$mb9 <'';J^S0wGwdq: Sk7X:#W@]*sIU0@_$&K=1ZN\:][_(֙$ӛ4kC;^.^12eGZEN  3*Y9kټ!?&8JJxRRz6)с}o}Y>0 *3ѵY0-ˀxZEȰrHa\>FSVN<1φGӕQicXйN v6DSWrfҒ)b2w%\Ybǖ6cBB$7*uQ#'MKqL[ܱH R #Am2r3͇[VV+ܧX1+q<gPB{I ސ !'ߌ =u7 3Nf-s.UGiQOeQJ{.V(=pWYKn D=9 ˘ݍ M・xӃiIl:f-yϦ@ch`| DOdS^NW:RΩVJWcTx1DY9njSͬgy ]o0P"ku9lE j9 8ڌN |R`v: ߢA@@1Ɓ+"@4{mb1s:DjOg%w3WĆr3d/%g'+aGKV2[2c_Ȱ]0ߋeSsqg/앫9h<#T2::Q@68b-ۧt :>a4Ed{ĢiFZ{1~+Z9&њ$b|}T|5!OR7M6bWXEkW"19Ŋb:]2]11G#+Y2)0#QsE=4Kֵ?k~KN +ji+&q_9!endstream endobj 102 0 obj << /Filter /FlateDecode /Length 3501 >> stream xZێ}߯h:_\Qb@`g=z9|Xo(b0~ح7cNtQW_fZy-! =>Π,V+Yi(J9߫#z HƠVxGh#T?ڌRJi;Zä rڌr:ӤjI&e}'UgTMRuI͎d>VVqHF ?*e7Y,#yz%z}=zg>z]&֣c2_S /3Tq\(Op'aBL'e1INhʤOs)sC~1#_A8; !.g"qē};7Z@Gb@ &fxxjF6X (/)pbټ1PEZsOd5h_oj.6QBHm2/شpL:a8߬0$tRTD)s g\!Lr2mHbJ(ݽuI#hrZ"="ަKZÛ^Ai"AOZNl~,M7':>Of,u(_u;ۄdLeK@AlPKQeRŀF'%#*;FC%@mRVSw[KF4gBU4v J*3cPҲ)Zs.ʠyՔNb<2; i0+ !p(!3ZSH}R6QN-Ǿn~_ n۶dp̗ݦ &aZmT F# H1tu^{=33\4&x."ߴM'+Q)xߦ#D.Oj2УVdOO@`落3iˣ.#;8)*NK ӼS *'g 9 ׍R:dY v ښX+e{g/6o|! dyo 9Q9K2`ZQ>C_ĻE:j|N[Y t#<]]5.X%Z1\ӶE=QymyɀݕVU42!4F0*33P&IU ) Nim6x]C'<UXnԬENh`^s(h`otg^3e^ [f)dSn^jjF@W2RxB =a4N]{XؠŘJhL3 }բ[`U^u&iK^tɉX7{_ W*.f5} Po&/ˈts͘~&馚,νQБ/^βxymb"/βO댧e}8= Qز>^<+)Tx(S~Dr迏M X; `3&2o AݷvnHNjݤdOw)> {-] ֖uG}Vl5e7# ߿&X>k?i#J\S#񭬹lBV@WpLh_ Py5F&eElMUKԄ[`)endstream endobj 103 0 obj << /Filter /FlateDecode /Length 4203 >> stream x[Yo$~#?$;އHH" <ɖ4Fק&= ͣ꫃Uş(_Gx}_7:{(<>8Jce;֏Q㓛R:mݰY,tZ1ễEV9C.`JCg(aCTPB7bPF5oq#z' L;J*ߓFC*F hq=r*4R18^0S !yإ`prpM?bi 6 $t!mW !U0FDCoÊ}䨠!FqJ:8o<-`ZHL?٢j 9 r"ל F@ 63?†QKt"bpt|0 U1}p~n CJ > 9 v"Һp6 a8U2љz :a?nCVV"KWA JTԴPpF:J$.n0ޗY^ǀ2"hMTi sAVk৵7E1";/HN32p\fy[8~%Aߕ 1̗hQ[O; BXU[{ԴFdPML`RtVop)2O~tLJv$ o@Q;PUY v _$Y;#@Ruf`J 5|tu@Va!,im.̣7b8 ri2*d:#;ecN\0? ~_6Vp 5`:0]@;Wh[ ۭsYkoʾ{5J%R`J]zї[w@W0װ96D(Ûd4ϧ^KP DXOj$/asfGuL6׋.r(*vXV5Kk|Y]6/xX_dOEHM"KڇĐoD4Z&迤V A?;7 iE7/ofO߹`R *,+%KZYr~נ_P\9'k߇Y{Av;‡" %=(o~A4H]tc|6"cE\uMzD75҇T ) B\D|w^yhlxxv\Ϗ>LsAFX H }9.p8h_65@YTҫR[1iyZ`6>RcKȝŵ?, ,Mt#f:mm t#BZ>ox G%l^?D6\:LaRtJ^-lr |GFzS N8:A1g7-yrQ&ֺM8x7mXKfȨ /כ~'13BLvlT`-wĊ8G13irXLAB%M+qlL{PfX<؏ OY|8&FYe©iANw SZw9p><6+Kcߥn%j ibD Ō8},F ݣ&)$u7r rL]TlLtqVyu(ڧ)خRA,KfIqnGm,y#Mgk~0`*m*I&RY7 Vm5ihbk1CIZPnIݤ2_m$g$;5͕m}4M8/,ƴ doMv>)_ yfYq4R4: RGQ(2hVgfLgV:]+w6Ye}_%6e)F:%97Y=f$: ;*l.kR.>y'3c,;$ H"a {WۚekGmJQߍ; oGLc e&<3@@D77Ώnw$EB$Eg0%nsN.mStpF*JA/3.Z5PN֔Ņ=ʂܑZZȀr!'шXY2i&6_""gSeuJD\i/IT vc\\( 3-e54Ni &זH8*Q#'%LgC@"{|M>6m{qxCbgYw5 v G/f(\> 3>n +̬cxwg*5tܫQ $32,$1Ir O+T$_99WS/̆W4UVm2\Jng|H0L:*iAg,̵rLJOFBl`#^vꛫ&+/ B{)ɦR߱E"!V֒VIDcƪ1\HxԳjbVK!Ppv^xI u1\EDqɟz}R)H3  Zȅ_amb4C`e pz,P yf=hHxt.FU K3gu/٩J܉ր,B -KƩGSq%=>`| Q&{^"y?8wK~5g?; WYa뮑fq^LȦx՝erȩ&D8Oо\c8qd3nN{w5 ,;{}FP@MK#@M8h҃0Kh+ E;1adnD(hpYA'ED*; AQWm1yOP=j^@wkbM? kYynwLK=c~^`^j*B9wtM |! .—yJjInr$]`)LƔCS*eHfs0ib`],ESfICK.@D)ebz.P]4]/b#*SE WMz(g> stream xkoP7\ س}y?E4m(YO7Ζg^rfvlᛳ̋hB{p?Y\ދ=(??Fbx/o 6j?kr?kUB>x?y\V`|Y4R+:1تZB~RJѹ{$!d CFWJ6XXiu.MJ}s&<[j "4W Vڇy! "ֆlW99B Bh| %iUjsI(l1q͚0HF魓BRh-9m]2\D5L0H"{Bxߺ\5fh0K Y$ȧ#rEa,҂ϐ^pchռM\kgMO&Qȫ5lP -9Q b\lS@e+x VWx :tA?3I*h^pv*+&YuA.pfR)5cV`Nq=Eu.(m6z냁K >Mt@ bY-u{Juo~.6$wٓO&K3gp'$@$b#\a93<{l6ܥ`tMT2ZO;F!d(ELYKPBaU:9XPh! ZM(Nx-5Gk~$b{l~\Yq"?z3&obGU]]W𢂪;5d{5>- ÎDSW7yI XdWW`)I\"]@*԰m2t*h`=4: 9݁%'1$5D,y,op<^lѐBN33ROz)|7HK唕SPF?ɔBd(HMH,Σ 5/M R3Y!f 0",?%V8$cT6'@$`n~&̐&a%$ Jus>CBٔJN(0*&1K_ȩ;N%p o55!Hb''AC'4ق#eIŗ4$5c*%=֙֝DzE5'pLVX0[gp꠺{YE Rlɩ38x2=Hj)8C.`b}QC-gH{4pbY+*֩΋tv3fWBr,5};:H3E#ɫ묰(\)6,!iz=AdVf՝*.0Ak)|+A1`Ąu`p`  M'M!^&nI)HQ+R=tT}tORKd x 㒜lʻ@*핥yq}fDh$;+qm`o8~՞V)EXa=0Sչ͛Uti*~4c "ɰA3q2^bTU-6'Yf (=[ ((j$!~1+$PY6v2+UuLTTlW |;W+_ufARҽs:˹^iCFQȨTf>1%&39 =pV׍: n&+JwN '7Xo iM9K vW~~\M׆qrʵ6&4ްiޱϴu%K`~y{SAõB ZO~ʿcW ǧ,LJ<Ǥ"M]u9=쭬3%+Vן:'`cM{|m'u<6*CW_]p_-n."<]Hrl}|HVgs쪂gv.(?} @׻)?gsI|n"V@ʩ&ngYeow܃Da~p _!߿a P ?(Tl'$\z]%\ڥ $!]7M}$T #zťfXuah~p'*ҏ̾=֔c}k|@pΖM0F7WяBF *9 Eh_7!AX4RȃgQ2n`IQmýG o=kO(v0~43 3V:F_ ن -IzXx<ɃYy~^otѳH 3eFȩE&wlu_ɣNc}>¤at ;D{}\)qx4ot?7Y>+QwqP# ~25W) zjMQV'g+/@$oW$lZ1o0{7H:a˓S1Oi :q {pjN_(&jG$_>{dh=bӗ OwQ1ӊ X`}]WS#߲D 5ca9,i%CBVW_S~-}'6}c d#wq[q!>m"~5v!tU)|[G 83<.5[f9w9`7,-N;i)ٻ=?INendstream endobj 105 0 obj << /Filter /FlateDecode /Length 3189 >> stream x[r}Wljюq⤔S˩Tz&*]D4.3h,{9$%RA > `&w}.x&;g;tkXm[/dw|X+4LؖqE)En9!{kEv }A0hoBaf;D{Pfcٝ::ꁻy&P/vE*)iW݃Nw_.zyL'3[gL׸0&gմәA_543A,1y7).A9t|L.LXqpU|W4zm˴ɹ!9)s`I[W8WF^vhP>[V rV[ SrcB cL*LͽU`E@(`Bh4.t8El afi.^Y ĝ`n>t? زUai5~,q5%#Դʻ~y0)e+`gql\?cOxq6Y$%d=D1qFh;, PC?^!q^ JD[Y =W@YWCyPM|sٻWUBٷ C!D$7yCA"\pR`U3"ҧ<;˼ryI95g%ΐ}󼒧 i{Y-.l;MNuPPtc< !iܗt jژ`RJ<ڎ紞F*UR\# ֬ERC s> +58 II3gUͿ|Yi}7vhYp؁l2!!=p&?]ͬo5q'[sSdVħEd$>)ӡ תm/;"1eVħEd$<`!Me7Q*UΫZf@m8mJEQ+Z&.@@A{yG| 䂑>gEU컾nM0켈".& do| *:lapNb& ;qE]iEQx4QL%W>VI sJ~L$  ɾHR32Pi}"vC ǁ~wR]$]cgIJ+mSzF/_QA'|዆HUBčr&( WZTM nϭ64޺&"#%fmVE;0ӱ X'P*_FTQjV9)殪!u|Jmz,*ayX~:چWeMʔ/ӝOI m=jaA2W(&fi腞`ݮ.Tg@or%†W~z\yEQPDzL+9ӉihL t!IӸv<&)q< /X=y?ȯȸ,⍙~n|!ӄ_Ln=1ݛ43*DLwJ8/|uT%zٳ\F$6ȸ#wpڟpN`E`UZ@^9//Cvo* ̏^p&܈RF<5ouX31 iDo[G_Rfe TЙ!).ƪzI?@?AymG;+ BwtW tO("*z!}>E0ic¨D)pnueՎB3Ը ˆ{Iv+kvBukG KH ;%uC}/H9NǘN6Aظ?#1Ou[r4GNNU Z[Q޲/Ɇ\r; J+}@ͫ[4 rK yYg_?91.#=4댨~ıMEiL*t nZ8d=RDA/Hh>{6"9smzKj\ƛ}/{ƛeu6ߏ!?Zz|TsEmud=f)Z'aw>XA9endstream endobj 106 0 obj << /Filter /FlateDecode /Length 3046 >> stream xZ[o[~#tn1"u[@$y%YCȤ93K.IK~x9{v"z9=: m?z{$ӯjc0Z(>]$ȉN0=~6p]%tӣәE wL,AW'.볩WtOCGoq !`Δ}n2׹<`b\c7rB$Hk63SϦ3t/(ICk(!nMI"I|C"Id-^xF"]5W$ޒx՜mMbO=և$')0mN!^' $HAؓ諉q0Lޚ~@y>$%2q8V$$>=9vҺg^7?.Z$`uHxV8VGqՄ3RxB7$$@6ߦ~!1qGkV}#RVG7NN_8N]0әwND M2Ez*q}>V1rGgm,W:%ireMZunF$.K Rٸ7iuN'lGlԭ0zcNrT/a+q|CQ"@2QRH+Jg5?5D'OszG0, J L*dg9SN<ץ4! x$:hlHFRz@318Z.=n`,FjL %ijDom$"b3DX)-6F *+4 ۼ8J0Vt>o|(59iˢB_NVh"YMBrNj 4.-HlL/,r]aV=@ZzeOY(6+F ں|;ף ld! "x`F9j]6E[y+Z4T3]η !)n(V-;]w,D1:d|/vc'9kvhHﳂ-GG:11{Eׅ`50# onLal3+2)#ơkI g°dyi yobg 魓ѴUnm4*ϯE]IFW띔0e 0 σ<6L=7.trh𶇠4m2"@ZBol .{ ##c$K9iaf*dHWL# ic`57".)ѵ?Qi0BqJ+DU>ث戍,>M qcNSp*8 ş%9+\YӦx6 O)1~Y&6p3f|= vLpK[)QcCPHCld$D7qyG.kXln#"Ԡލ}X*3_S%-{g4k6[J-S<1dH-TG&`.?݅*{#%{xl*_c__p W˘N-L-I?v<  b\^b'1͐RojBZ5ذ^ěgy;L܆S{ˎ%A544SB,gOIXp WvNAs6gқf՞!><%e/l.` WM]wO[2<$&=lNV8)X_f Kppc}̾lQZW?N6~05l $FA 7ëm#]:7Į>QG/> stream xZ[oI~؃v_ Ax$؁;Dɯ\Nt a!SK+?_nuuVWg?iUf(>z}Ưq*}~9kuQ{5}NZ*e.stZQ{ 0ʧl>(㐓qEN+=Td\xwCPF@I&dnߝuyDI&!>dol O)wzǿuU<^Q֮&6eh" ek<ӨT6qc:_ԣ <|58H;PiK:l%-Q=y B9}LFjiHKTLcCqx!nQ5;:{TGiJQu7 4A'uMϗk W} *%'5}=>zz<}q Сc)ޡZ \a*?3ç.0R>C㓡Q~(l7w?Cئ 7F#>3>ēJ>{o̧&0j\\saY/2yHZPr JGFya/i]\亻[ا,s.(#7$WyT/4,SpJYchK~rSkC*zmo."`Av|ŠԡwqYlB">\6)x wkPҰ.z !2` sharN):5;*G IR#$% %TV6ZِDؽ*Ɉ[8k#ۥYgiëB[vk;PMm9gkJ>ѓ^iS7%t;֛gs V׉ x}wbW\:A1; { HVl&`y2ܝY%bSA;|vS[eAAĴ0ݝ*6L.-zP&^ϧ|3#RbW0#gU+qSVK?bZ_="qu/f aN +߼B87a\@V?r:x=( z^ sN|mt ж ޺~c!.~<#pQ6mGqdC1/_3q> =  =Rv>\BƇTFSH$̑c >C 20A &bM4Edƣ.e:۹du]:GPݗ ]VJ8bZP&4/;. `tـuTm@B`9pD!6ѯ_TB?2.f!5`>\bXN!`i tE`;~ =)|Yg6ffsU1 :”EXT3+#Ԩڌl8^?!Cdm=` yO /PMR"Pc&}=`'BP"+?mESmorA 4RBˈ) =֪;hqmve(kU8)7͇ib ӧ/1AV#]v>pgR @ɲ$?eAӶ{۾8eL|qC\Jv N59vl/>#fmqZ =u9*`_l~jH9" k=VH#!Ԃ.ڡF,S[)(_{}m&PS]:X3A zh@jqI&Q3Ҧ$%.`0=g`YY|eLPcA渨:] F/CDZmJEPFr˾kc 1RCYFcaohauz R^}<=Drg8 / &=BOF9?W~EKr&Sm(?64_s_ZFZIK<#.Dx6ɗ-RόԸ_ڰ%B-z@?pW7LV>5)fh%Dfxzg5Kg| )m_M C~,W BrUgam-ZV),?\;/pd. 'Xh!eO!mP)sA>XiWZ^\ƃUYYKf:D^ۛ7ƘRnx MSR>= bAePz]ly(ڴQk9*'WW0!O;5@=tuoXMkG&+ uo 'S,0Cm)o>ii:t>GS1wwEߥ&ZQFL܂ d`7jG"^Bb-I cZZjU|K W?l3LQEG/|=37]dendstream endobj 108 0 obj << /Filter /FlateDecode /Length 6059 >> stream x]Ysu~GG{a2w%%GKɦʢ9p0MHe|=+HNsgNwzO}'NߋNۓ$acK Nϟ䟊SMz{2W'?>NguQ)ov/vلmOH@;^v^쮨/l_whћݛ^vWRH?Njv2hӓ|q~DQ'NK 꿒dONUMmyu wdGvYv{2u.E 8ep8y/SClCDvw7BmP~w'uc[#~\ H1I=Gf# E?a!W^P~ܟMtbWdf'~o"!JyWJ2~sNoU#҆6&V׹́&oOkE削:VVȍVx- !L.ß-Q"yBPнor3A ­ BV+@qɱ4_<^F X2u8-1o/`m+v ll)ZP*2dG:gTfRhХ-=ZSNBAқneE<5W`26a _왱/# Ea]}riA!S TDeI890qnIK!UJrC̄1}Ѡ~m|}$NPLT.F"#}Gdd!wh4HbXbIj~8 MF;q˟kT*ㆆbiAޚԟdHؒ\_foiٸUxTA*muC%)!%GK]s5g^&H(6zif>#E؀!1ɿpT>#5F9->QZTg`{U\* Lm!uJ$#%hgǗ R⟾ўUmN*T:ԚG dEF-~wه6Ә\n~|!x6ʹm~_mum +.%/_7iV1[O\ŤFVAVX{ʯ>QpiYrbbFU[TC&^, ly-PEZC> b, M6i2z傿f9vAaЂBD, %,>AbTWrCrDFPzHkc25>Ue6G:oT- djT! =)WaD樉/yQeY 3P|kߌH^gii'˓UA#vZm՘N7(i2q]@c?'rsuvݫ (cmE lWw]NYF*s^yP ra`cy!]#9{ь|.Sȸy넘@ -(1ڥBW+=ܫa4OJMPR4 rĉ R;5+%+qPJ dDWf{K:-ȹSx9?JK@O Z\n*][h޷Uk Pz~9ʯo/Qc5x7ץR XyZ(;5^ٯA>KP?$f5<}y?U i)`]0=7i5`'J4b8b@cQ)~oف x= -{ [}z:4Og:m{dz`'G;s @b1*y(lPD I 2>T)&ޮ+w21~,r^]fWZoho$x?D,0)mJVGb0y*ZT)-($ Z~YT"Wɂi UO&̶h̏eաg3VZPHI{H2 bW6͈zt?E]Uq*#GdaJ6 S~T0c$ }BP"+YyзVkWJvJDŽ(3e[ ^LT1ŸƶʙQ H%ڰwTzLC9Q֓en)ݚ %VPA0>'b}Wc6x.􂰘-ۂ69zNdg@PszZ(dj uH/?άJ=JȩE2bvœn*8 oE3|&̍VW T8!Kჰ -ߝ|˕իQHXwXF£Vd s?(kY#'Dq/[ꧢ9k/M_{e]-ZrzN c6LQ d5w99]s&lYٴ-Cik9Mb:JYڅJ/ƣXOboV zC\SS[PbcKect>ê^4sc`XMX#Q"HȠ-(+h?DjBO/Edқ92[S4,y3~iYa:vj'qW]@V{kҴ{ j ePv/!KUM .vł\J g 0_gk;E,"`x<{snmG,zߪU*u͸Ki7Gl<?> >:ee_맕by1ޯoBꭹ$Mˎrq׍'A&DBihA!&XbrS;n8iM?mGeP{SXU*f][՟!`=B! w|hi5uw6NԠg9=?^+~<ɚ;~;5㦽QjhA!ʸHF=F);%2 1eBP'܎0plNI~(u%;YcZ0=) 6U+vs/fA9/aYoc>6*Y%EF>/\ *fjt ΩDD/s*27: {?0O1[t$B:=@oK8]K K]sx]lqd8s,үs9Ѓaѣ[HhtЂBVV$ټ`c^kg\Zeg+ߴ̄_2k)fyGr8OZ8U7ު@h!楴gZ&^p:M6Ńܫx Z Hd[ч͊x/ۋ_AJ <︇q|#S& wߘCY<c==kdN` 5kFI]T-F}7nAP#HVy|ƏfKLĖ~DoOzӲx> stream xZ[s\ ~W#6{ӤLx$k]VN+[+[~}T򚒜5Q\B%NBC!v6כlqFE#XD强.E ?u?$'CA0hި/ $2f {k.B:GB0OL1866ڝ883%meBG'򚒜J&^- %ZQ:e *3f(``)+AHKXAEP퀦$&1-VEOhqi.D6gii"h?9 9h8Tm$Fɏ&DꜤME5 ƍ+*N>ʇ^;=[(8'Yo0`ɿV-Q)?,+UlQ+00$J2oh4F+yW׸aj:ڐd8g̈z^ɫJnYjʳJKyč`o*iXw,ㇸa;(! Ck1 iӕ4ł!ifM%l: q/08ec8XK/pCfXp\|40X;{OM]qV(k1$7i,4n:qe.+ oԧDJrȴU'ߓ80ZWCӼr(I~҅y|,9<]昜XZ(t[K~{\;3o}~q%6u+K*<<@EX$EiKaK}jsϗx c HTIW芒 XO ,t9k- *m#{:˻eyׇCs_n?]GD:iM._ҵ\srcD/5B%F8J/9z ˄P,>}Fe`eG[+)%6sE +S*6F+xFo%B6n ݕŋtIHL=0 6tyUé4HRiG#~)) ԁ;FbQh!pd#n|(U^j `#MfC8E[V)HS: v@װIP%&0%\h"J4`.Ok J[jK| \Ӷ,ٔ\WD$}_gJ>Ň;=z5g$e)fIA/**) vT>,L?1?-QŎru< L#|{^d%δ8Ͱ~J@㫷7<3 nX=5]y6xǑ:ysK:~95լQJla԰"iIẙ1v[yEli \SRfPuI,ǂeex y"lUBiAa? {QGw$a~3[Fz~ @("K\ wskSF:WV[)X(3v }1Ҫ)_'f}&u.U ?*R& M?xOpNM =qRBR?xV%?l^"ivykZvdԛ#2uN)Tjc|eyXPҿbLQ2\xM7dSkQq+kH|)mɲ].M˫l]{)3bcŨ;\&_K,](Aqꯁ9hْwg\ \|c+1Z5 31|Q~˗VoKUf{="MҘӍ#ռ VsmF]׬q?/,K [L '!{¼8 Oڭ* (N4 7<64ԥϛX{cFke>t{_@?ș)i~uhJa䲒<31'>! jOh3_+Ekl='Yx6NF!|ki1Iʮ>s^zzO R\endstream endobj 110 0 obj << /Filter /FlateDecode /Length 2953 >> stream xrTG40_lRIX*E*7y`0ư190L m֭[C5CϓO;<_7881`\AT燨aq_. C5CN~pI9hf(caH|fv׃2J.`9daϮ~*Ύ I1E2ڸB:ͅ41 &;`'#o)D{:|l? Ryج@諗"`M-V>$^Ч˱41Qy@C.U-"U/nO+"5`;9ZO}& V`|+\,6l,-efggmy}Ϯ]guk5ڗ^{Ts*X\~դ|"d-r`;C͈qZ#5!U %>56:WO权ѶX:S) yI$jpRwy)GXݦtu$rk $48wi<ֈQM֘(|/ŬʼxM'GzL {!ҽG?Ega-"JOVM4 A-.P{Z} =FXTbq Ew[}4" bo3b\;*?G`fǙ@Qgv"OmO ˉ,{2vIn,?"YyF +a{#+j#B+'|b[SمckqSj UKw_b۱{#Z΋;WcE1^ktLH3=G$TD" lcBxB~K ]_a!3Z&YQ X)}lV> PB)ɂ6C#QcwkeO="t*`c T'rކy/  `vazռr+|59Ak-? uS{,nMS}q5F{UOHၸ:c|INi@+O \F|u" x+ZTHZِHwdi(q\"Kd-'~ϋ˂Ӏ%NdW֩m'ߎr%nƉ+^RuEKϧ8}@j''^Tp$f0lwbg0Qum>BŒ ѠoY3W㾲cKX42nE2SAl4͓)XF5ojBLӃߛh|2iPypت^㼷)`ܫrg~gj݈i95wT9IzO53/#| =X,+>CؖÒ{[Zs".F7#|||[u0>N\?Ԅ?`M!C?3·fd knj2N68GUA~\lO5Fժ׵ZfԐj0 c?yKendstream endobj 111 0 obj << /Filter /FlateDecode /Length 3456 >> stream x[o.k}[F"mE6 przNɱ{gpY]CY}}?b_k'{Ik}0F(?8KS~>jpI8mJ^wwE wR-`T 0󅔲Wt,u_rAHBZxRik)ZGtN<@z!b,$V^M[JS>+{c\_J[U:l38 v봗i'[{#BAFX7v^S^-5T~ 2F ܫ W1ຫm]wBziAq yp։VҸliFIQKXO$bJ,$ %dҚFr~=>.w_#:+sYȣBn|ox}oh!D>+h;:FF^4zY߇*M?%x'C亐OF%3fBB/]!7M/]of3_l0eWB>iӓ溟?Dže!/ .M! iN &5^ѫ~B~Jdg^"o yD֣M+|%By4z]ȳB4G/ Ia\6G#`*`RG1b2&xin#qJo9JASцd V) 8| Z qH{;ƔG7|;7r\G[ @Lz@wB9De-J>Khȋ8d% /@u0V\:‚uP$nlj 1m)緇 `XG @`ĞpX(G08i/26 }J!ZIeGkT*xt H`̤{:=yln/KG[zEcƀ 2+lc~!9e vdYSdR|ѩ1i64Sݤ̦; 8Em3Uo1tcG umoC>/7lr,@s]4щΊU>0kFkrr\H٠@9Mb}RUWȀIO=i87vzj+ܿu]u]~p7HF[@LJUy̸)J$/doaTpo^5$te.riA^N@x[ȾoXK;\go"1 (AYT4UkKW@T}Y%`Ehł@.qbH R$ƃ;l-+<'fe@cHL.PptK;86/,-Yw(K:?rdah8O 35?$Ƀ.&)J%:DSȻRTi\nO)9Ō&:yGu0nDFAu=F%p8.D cXG'6(Q 'D2Nֿ"S. XmpS06m@uH*[Mi?SzURD I)ǃxb53W$&%.4 =9 * @7pQa[԰5A fkC&G5:{eZ̔W $H8gl܁=-2:"2*U1h`zZLcnq[be8rxWcmiZN|xG%%mIL߯(0\И~H1ZŷU (ʸR^O7ng4VSb*\].FK91\-=/16SزR`(lH 7FR/x$LW6랜$-Yn}6q6# mjMY4WB#:a^Xw! ~Y̍yU☼:m۝d abj< ~YmUdtX~ۃi_n iWSᨼY P.p HJ9R| NșFFE jR>#,E5 \%~)SPݛaY FI*0L1TGxxa00ilrUoџHā*J~ WoYL'-K=1@k5<}(_ Rs[ոgӆBb9z Ћ,d}-b]k=UJ^ޱO,K̽1n ɖ6Zd줐{v- S-owrI+(㶨Nog. 7yϚGk{(=`uW̡m}l׬|$ y6B'S“=m$('DG:˦gZZ^<];hj~^Y>,cލr/ה,{yyQȣBwlxQWK* 1ϛ(ԜZ9,4\\rG%)9 2XeOQ"9c0TsgX0-t9> stream xX PTgmýWTpsc&1HиF ʾH7**;tnVY4 & H+}̸ԋYF8̫̼w#I&^իW9NaL&c}Ϛi4KzI&M&,on~/3N{G)v/1XG3rLVǥGEDj]:kygΜ]]]KNMqvV`ƌ$Ou|Ļ&Ei#]׆iB]UZUc\mV%h]}աa*adž9 3Yͼ1 )f!3Y˼ʬcܘ4ƟLg61͌7lag<ƇYd22fyˬdd|y*f<̠e4l0arQ_{hY9pp}|0:Lu!xcF uӓo7fƘ cՌ5N=n`D)߱?,EIs22 )鐹Dd'!6DV+\6@ヨA7싆 JؘX&7] KomH(#-: o3Y'o[؈Y DX0t@fO<\sls$Zt7{¾L.;K\akǦeB6dFZO47a G4m{?}矈]ݪpE7G|95P;Y+H=BCцOw Nu-A;IG#KtPREP7C8%92f/ہ{{!2]vA(ma񘽒q&.dnclj1< e0ӈ+'o)俏?sપuU5@09k&(fۊ_kJ݂r-mٍ>qGhk)׉E8XEYA|;Jq@RtZC1::S+PBYqE!A&OZQab*yA3,{ v4ӗM_~ ¢AA}t?& }קܒtpƀ5$G,Yf1VE.G[g[ٶ''q*(xS!P1o?F(9fY-%;6Jd%gSԥa{ωΊY'3;._/0-[e4Uۯ/H^9ZqɐY]bjpuw:~ͻ+ѭ%228_i8hEQ4j:ڠCH6u*x"ܰBl1ro/ۣ xvzUwYʙw˻KƯ[Jb [ݿKI DKJnt@q8r\ Ӌ9Tq\T#C7Ie!pS<>*9Dx'燯_)9]@vP@.;qYi0;rՊ3"cGƳphXʢO͆vpҤGgV 5@4j1<~iVm3I-~GA(Xr*Jl3j 6f9#3E ש!b 6>U$z?fwYX~ u`5l1l]p€CqjaF=4@aYс.S)}.BYAi35Տl3w^S4Ԗ|ՒP7R/5,UDpdJ>ܾca# cA,J0=+] va\hͪ y4 Op|YeQɟ)P3=dOZX~. auǓU ])יʐgSz'J᪱ Qۊ zƛq͹_Ŀ06 `sR̡'[-3j;e`DpNZ޺r2ۜr[_k(WT/r!Jil:X_&4m.TӶygZŎp:7YI&Œ%pp ݼ V-Q M=&K)6L+o~Arw@}XM hVB^I(ϠIyӔ]zE^PR`u9~\ZP:BlK%C^V8 Lw1Jp"m۶EvwJM/YpEtJnVs?e}|" =EϢ$fK<92W{'6TI}!e}^ eK7tʖ,S?K4`304(4dw8/)5ϥ iFp!piҒ*Zhc6~81‚ͦ`jkRH-'*.YfU{^theMHqkXq|qWb=$}wh9wUcih9fZ_,6R\1Fe`EJFe!ORlkU8S_ ݑmۆĠ[tL/a%[K82#Dy5#wё #endstream endobj 113 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1795 >> stream xU Pg%$`W:@N@,q BH@0O!/*A)D0zzg QZfmuÙ[`Ιڙ~;}ϼ>߳4E4$%.h>؋Y ܓ.^ +lj6?%icYudכyqKcb╫t&CX6uEjP4tJeJ\eh)K^Tg*ib5uN9G4zh,*)3L4Vg*(ƒ5r.ÐUX~Iҩ *ZDAeS T2JҨר z @ySo$f.I_[r8#Gk\Nx"-CbIܳ |`r)bܭ; 'V>_G-.EO*9jl͇lXK8Yp'E8 THYŐGO-ya__Ӎ?&p}G{i4ĜWTBsWmMc>c'S0=H,'KП+H?03C_C&l+d FpL@\1(zVqBPaE LYYS8|Ә.$*7J\(Б.c%2>Eq㋭>~"9 s0TK,##؂ |#l&p-._նxwƋz@ Vlv&a[bO@Ő[ga\3`fSGjkeeƉN|I v̘Qd $q.GۉcɝxECDlŧ;3xUTJm/x%yni\75?~T 5ո0Ӂ/̹s龜ttU_8Pf!Xp@wc0 Npy'QlMM)_/ -t^4Zz>hw}i|ה09' 4s'r &RJB"OQIB6MCeB14e]eQhB@le:8y q yh`ҾXX @G$k.7lWcU:ft[# ^ɟhaG tk505$S1ŧBVOYϦQca"VH$dxPbC&{c6RIƭw _h{Α*rn :G/wyn 7&^޲Cͯ@dgv7/$f%!ba"ƳJk 5ga#? 9{P;3DE|6 A16}x]=Ja+y~ܦ yuWr ,&"by8jr%8`+ǭCܷ=;ˡf1mtXB6dܾHϓzǵJ}zmR)v_To|endstream endobj 114 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1070 >> stream x=Q}LSw}Ҿ'+US{qll)mGYm P|  *qIVTȜ,Y&s9d,˖V5?ޓ{=4E4dly>K z(w~y"2gg^V 2PF_{.Vy%d4m=kr++L!Y"ddemKnْ%zU(9LFDŽBp NShm)iak:Am::Qx)S,U](v+EQ.{CW7B*r\*b#&hzB#Q?ޖXpM?6jp!{gO/$`SqEW7@  ,AQn5C>9q!2H2\R5]ugg${vdbjkz7 WwWsW` izU.z<_:p+a/A+\L6rEЫT2VT(_Jendstream endobj 115 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7869 >> stream xzxWa XLl{u{1ܛpö\d#ɽYll6L@H%%&$\~d߳?<$ϝ=9} vh5ƛ5 vzbݯdwsg;3նS=8|/jPB 8"y^HhL_H#&8;O4qxg9A;<݃GyGNkC_0rt%QK=x.Zgj5; X!h 'M2x|8lQ=G;-E VRj5ZM}HGާRèupj=5@6RM\j4GPVcjO-&PbjL-P˨rjN(1Տbw(ʞrj PݨTO*ER!TodJiϺuLEU]Oی "Ȕvۭ/݃_9^zɽ{ ٷK_m_n]xp^α2ybUgX9w»Mq'$$N>hǠ|pې!dž\C_mKlmselZ*+@)OǞ9lܵ^0AV}9Xj#Qhp Z \ ݠ Q7Kb%ce e"[LM`\AWŇQv,"7*g/a ZF|yp8_^AAkixj .n!4$ ŇfnXPimk;,zm3}q4^jU8xVԑ)DBJ*"<hJ 鎐o(9aLr.xC ,hͫSPZa⣂2M4(-ߦ KCS (u3^whΌ&ƶmeoC{/< 绰HMiZ8G~ꆥ[aI2%y8.~kX)J+ik_#."(B ,̗,ǷYWʪ*yJlyȏ7=|gQaop/w$྘yzs8 nZz$\'+>R~Ai[&Pztkf`f  ﳍΥ=P%ֆi,j*r vx1$5XnL?̙h_(/pmwKJ/ [V|wx#Awm?\HS$2wm|1&ӯpi=T<@~@BV Ij.qr`VM{q'Ԋ66\Ȓ)mӰ(p?+< [mÍvo{h6ߓLf_˒Jw: fU[Ḫ5Ρ3 E?%etEt5ǁ~a>6[*/ [^&#( dȯb9DqD2,1͞;h:yQc;NRc3E%Ho.J1x90xȶ-#^BX6 ;."4qh8Zh%Zﳖ ѧpEz|U9S`&`aJ-QkVOWv`:{us =)=F:03x$~}>bHBAC C,DC@L4"!> +!z˯'o =i&TW>B[hQg85<Q89&9v1u 2eZҏu2RZ܂bqr'gs_Lm ]r88x*ݱ;'5usVdF4LBLh^ԟt?ECLxZ.R;9P0op {?KlV}w&|Md"xRYɧ&dA#!ƿdy7JO9o ~:'V@UŸ/7Ÿ# aP+.Hͤ@ުh~mv٘S@ޖ ^@O޺p4EK+-PNLFspS |$DRs\9$./Y}[R6 36~ݱ0zҲJY9$(dͩ(9x٬P"UHmXlTEB4$ {8wEB\c~(% RUEB(xj,@4#xmZ@zNz.aEpuwM+@Nk7Y_5OUC>D#uε^^z#O&BHV< -7?@i>ְJ*#%`خՠ6ĐrP%9Q"_mV<#XIAU#r2yAYSphO'K\aA4 _/3̌ŸPKܘ.3X:+6J!ք U'<=bk)v:A'Ѓt-_(#9^.+gpȅ&oo[q^8H[U]Oۦ?Gt3^%>Mʏ˂f/r!ȁ&Mgѣؾţة{9bo$X>qY )|a TÙ qII)2nu@ 9F qqyfrN$:y`fQ:d/v2l2 y@}VVZ̴SH7h(We'&_>aOfYEE9z bUM5WAnY#f[WR4*IS5Ь.PSw/_ sȖ%' 5=Z {:F0B8=Ā|;e."zj4gFZ.ˆF5or@X#<\bX+f e+Tv%J*;vh$Mdؐ^9k//%辐DʶqM1F1࢕ZcRV%X \U:ªF( }7ZF  u! B1kѥl3UőQ҄;.69S{h4+Of h9վR LXiTudÉ_~?'t_z&tP $1aA4Ebr+mlP1x[Ce%vˡв[7hh$[ Wi$謥٢ ӇB4"O KT$@8YH_Sqx3qLBͦjy%DQ fPODyowG2ZEVH&-.@ y{T5gW nިou=k/Elv2ح-2J+EvKR#C< /ҡD?IY̳+Wn65WH6d@)d$eU$zE=9:w |j6$?FFA`)jelx2~\lQߪ?PV~& e2_a_pđ}ts+LY?JWW1ڝ~A.E^?Q̮29y g&AfrV)# Zq#E5uOWIY7Q?n;ES}fN 'ltQg^!㹐'KV$%An{#.1֓CK?XEuwh8 \Wz3m[@y€ZMv{f֫ſHE4T@A=0QW~oAxE|E0:Q&iߊ ߱a,&&S=*[ y 2HN% -r6<$Pj3Uk(mW۝ rXϴ$uz-Oߞi hxՉߚx M4[<ī=>a27ϛ<+nI%u:7ڳ4ڼ,4:] ӎKD|^,;MO 9KI|ϧ\6'njh3.7sˉޞYz1y9lxZʖ&h|ZI(h:/[ HnIeɭZ"f.uvz2Ѭy&z'ݱUoo^;^8"ф-3nc+oKQZU|v,0O~K:/3GkU&JMYLk1 @h׌N}>|:땽S z}*Aӣޟr!Ƥ7s]`NI'$VJPSTHQ!dYPm\8\6䜟>d}LC>8" uHl|ao%g%+ǧ|wd4X)BJ%t̀q E?"_ LmuFZ/K%ê'ʌT i-QeTi& R$()YZ]f:Wxq[vL 63_I\Tt&+1VVRM2uAL^RzcWzJ _؋bBJB􅹙dk5 0ZW[\HvdR3yB92 r{O=EX c G8T>V *!1<E3ޛocQg׮_8o֕~aƣpy:a%6zz:x\|waf.<.wf;zϬn sfot2{gk/}b ~%Oc3m@!VǮ eה"qA^Nz|XS>2`lw8鞆H=硒@_PVQQܺ9cqMXa?W#M*sIڻYa/E4yvf8?3;jm4uҐ.Jaxۈ&|VR!A+ٳt5Me+evJ]i5y{!ͅ(0KΑ+%r$¯!@L졐_g~Gj'-oUފ4.qmF(01SBB8\6v:4UE=\;dHd0Mwd qYɝ2x)(R`Q|O3i.]1a DRMx\e}ZnKQ ͏+Mcl~^ 4G>m~׽4}n={?endstream endobj 116 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3116 >> stream xWyTSw~1Oe}{u,jql:*Q.uB ֐,$y7 =E)t;ҙ3<Ԟ$99{}xǛqۮ-˗M}],1`+zrG^X˫ 3;hce<ذQ&//g(3▯^˖ې/*g qۄQPȋ)q(5O?]ZZT_TVqbEN+"Qa(+ET]/.tFYX!*&J1  [J/gfs;wcXK~-vbIl/ۇm-Vl% ێ=y3V;fF4Z1+!=sus?Ld~3(6, P86Gh#93`kz*'li%TZlA ~=W5X*M^.OHԵx[T cGBVT& #tȆR2,S,xVkA6  R\fRRQ@l׻.2qߩx[q0Վ++,>.Z|D$dߜnEsT>GH/^(I ŷ33Io?g'yzs4PfpT6谷C1tZ@^u -rUdy(%=i$i_zXJi?s#( 2ꢂpյy_<˔0=q/U7v榢&My/}G!b~3J-i߂ڡQ5KW{Zu}gr_N-VѬ`NW1{6hP (J%NT Un\"_8qFIqqAumBV},md/d]C̙|i⃶,)1Pkጾ-윌RȘ/ڍxiKF9^Zf!q#]JjmD8MªNYOg ~dRJڝygr=YjWC!rSQLA?=/9>}4 [ءrԂ24iݟLP&Gӹ9lqv[] }5g.(Ă =L64Z^RiHvB x-k> \{ LT&)zM#,jL/DZEq *5+z(.5Nu@|-G>3=Gdt pm޳{s?"]AG‘>  [Z%2svL`"\owN0ՄBB28 ds]i,SXEFq$㗀*{;q397i^h E#l=?>E·j&c$$ X>;].Z518?C.b?l[ ;OќTdkIZjC3=_M33-9xNB=29 d "xj^F5i=ՠJ?x v&4 6% sdB=nw]p^{À6APkdp{.Gu-D  *"cgN2wL{5N:*۪qiœ畳!fa6ؘVBĮp WU+gV*!I+dw _B!N'[=9+RCfҎb9Kpsm-Wq6z Mo|f3#")ς+}m͡ޑ.|CӛhJOnXT¡ѶcO Y5<Λ+97>pѮ7WѴkh- eN UfhTWmBKc'FN-"{uaAUzPfd1ށFBk9l"^>#% oOuep^~}|Ԫ=.[oz\m3D gjX.~] /CLTuDlM(Q&X" 2gB%!FO.XP)~꯯Ic8IܖFȘ:TLv6>fN7ߏ_FuDU/پnUߩN4$r]<30?6'[-,2T[ﳓ5.}z?_GF} >F_8y^Ql lj{HOqy*k[kmwmz\"fw%U(J eT\ D&-YgFO֐1U3 ԭ* uκ/'Ыr:ZcuB nU4Ցi;d-޳SB{2L#V>eX~o;>lV7T)b͜&jI[۳ʳhG@AU9<6q Ɨ7S1IfM[kȨI%NlO*Co\wXqZ69tT>@)ì6xu.=`ѯ`%,%:EQ_3cz CKõ:l8MǸdV R~ԏVNߓzrI`$\/чlB7;> stream xX XSg>1kMkϡQ8Zmڱ֥ں#I%$$HB$aߗE(ԭVv3vQ{ۙܙÓ!}1`XS~1O?q=r-zgBz0zhĬ7?ߙO {suMYzKRHKY ֯Y|^HF}vߤ4ϲgW +SW& b6=G9-ȈٞO+|%)19=-Z;)*Z'b?)y 5mG axf(R}4w 6.>!1kzzlxstK#!|O,'@E"B[C6b;IxY<-m:C i*ˣ^xf H<:݄f6_,kQS)ick+ntʀ椧 GE$ UZmqU P!4Wg90}pu Jt`) &Ct 7@ɟIo)L~uÓp"25">< Du)|f%C\ف洞WҿZ8)^sb;]Z-mM9M_̬=cl;$ 4ncv& ަ8&gZhJ,VC@cKه$2* iSϰɫF?l#/ey%R8pM6S+.g21SPhcFSz2m Gj8QMx.C$" PEB:v 5GccyU͝v{drԹkfKZ)RMPtv@S@c?0:ߺ۵(]ILop%?wr%{ZE\wGc#" #}V-gL s#y_:`ː;ZvF-7QN4鬱b&qBMLDZ'Vh ՍM%Z0TR-+Ph #_ӁϻAl+$X7,cжVa OBd RX:~Ãe'Ѥ*2:+eU|ji;R<]Nué^uxK $nޔ0quYO˽W8 dxtߢR7Ah>bQ]W-e7/Eڍa ?8 YRRSJ7+*Hn?} /GxCuRZ=TȮݼ4f(fF./B&lhvmkhMctF#Q҈!vɴa:L:mQĞщ[MFTTB( %PIq*aOF`Z :g`h*k$s7l%z!sBk(4+8O~fom kM;qF$( CANBBZDUVzwpt k1T/UB.{z~M`~%ШEU%rҞBHv A0f0ϭaړS'HAD[2,l%7&)^O <2\o9Q7LSIAVh $E&{"Wt|ZXh:Z|dK[ZF腏̟߬(@iP @%B2?+ dP W˟gzi$E`jN15chenz0˹i؜W/w*NBH eѷڍezyfh찣bu&b$*1UepnLZHjxjmf_óDUatZka[Y&-(0Mo;W:d3Pqm»Lߊ -$9r*-)h ߜ.&@cs%FUbr'Qg(-Kbs{ko 7{/ve~jq^ Mgfar@4oHE7q7gCwwkwOwJڳ-bOƙsm9E}amهZ>lpƒz4yba7栙2J#0Pb.sE4\JcSߡG8l L/{j:`^LBwwYd.;Z`룫89P|(=#id-@q$"q ^eU\/ W{B TTICXȔ&s[FS pF*ffNLq[yF:v5@VY#)'20^4۞Әqd)̫׹ǚ }tt7 )ncxT̅VV5%9@4,8NY4 diwڦ goZIL\m!gV˂1ȁcs &N%^Uo4vhj.r6!8*j;~ _@3>/nW8jiїv@E<G贷;sa3 D9%dF1v+jOZ,%njJ,''^ҥE)dطqAP VKc),y1CIgx:v=5/b>WRg<æ9VGEM7-BZ+&gm}&qPS> stream xXXT׶>brޣX$h(DE: }蠰 H7%bԛJ1%$&jb= 0}=g.kuD J$IΘw0Z$2HxUG RK^z}B,_y0 ,aJ,ɔdr_oÄo:̘?3O4K3S ^H }ӦO *{/zsCaW;y)SQZj>5zzKS)WjHMܨI#BmSS jNK͠ޣY35ZE͡VSs)j 5))5bQ eKQbʞMq`ʁB-Q%5ZFBQhAo ۋď֙]0b-$nf.sf!̐C=ch aau W[#F\z*:kGֱVl(Q96mT6:n~}}h~^˅B%]Q'pM<@A(%za=[R֢2]^‘7_9̥Ƙ{jT?jQԽq9|J /l}̱-ݻ)tj]֏uળ~ l3*9rP-*ONfd&9=`-=䳃gr8|w^~y1-䤟}#"޽VtPpqsPW%~ #GU_-q*(7< !jQ _EVb;\fC5 ˄"67+}A0-kAn3 6o*];MߠaVy,db*jP)_ףσMBN;TNR}gd-|]AN,xCq/ M0Xsa~7o]s>eRZ!_+:O[j#SS(-VWU!I;Kֵx0 o((O~sAvL;L7}|VTft#bZF ˵0M %D.,2sW?8{ <8qfG<%6#D)XqCZ_S=W`f=*%=04<DlcIO+~y-7\kN趐Xxz^A3-@>(,[i(FE@ܣ9l@q]\`#XMK`} ?0.#,1:uy\K??`X 2D5]ܹ8b#o?^!wbgg %g2Fd$S钚 ~4[B6@k#} g Udgs-B* 221h;J<ə-^6Vy% 7DOE$ɐ 4 1H?zzГ>rK]%(10S$6T.*ѽY  !A3 I.NqZodn 9J}pG)Ay5mZ $"&lLL=E6mF$Qi]B hE7a%$rp8vg*=w~jDfTedR:B-W(cWc˓#=CDk}A\HÄAle􃈩4gBNVol5%PggCـ弴 ؃-?d3N֊:ښxB oIrGIq~P06g|p,00]\V:~Ok$O0O#Oa!a(,_Aɳ=vjUa!>–é'Ga.5&*Kc6#Hd%'A J;5G8,Yxa^"˰o쮔t:"Q\1mk^&^/PJCi Wﴘt15;ڟlnt [,[R“؈-K3wٍOՃFkD>çBUjMYC䎗ů?k\1:hԊnt@M lwbPJN'͂܄j9R!f$a}^ɐn]crs>T_ c2zB~Y%iap=Qݪf:8/X:# 1(Ïh$?~d@j!S=(ηUp%]Ԩdl/\)/O{q?@ZdXurk$3^3BG'\ZT@.g< 4O m'"W~!Q%e2]/@ `lfȪ>pac&\`uevBrM3>:ѧ']n*nע-d5->$l&@X^{|_ z}nRZ;FnwuUiQۋ67S9Dnr3QRi;@ݣGK+LZk\,Tf?[q㶕H.,y^p^nC>e##Tvgݲq?ÇJ;hGî[ݍ Q:{_FnpU^ĔU5TE4mߔ.؊)˗VWK1 G>򂸥]yFߴF󬜁tEI1(Q&,P|f5_SZ hǒmzDC,,{Oq%4/_{aQ'NM*7ʿE?km{qenqsw8P}xcփkGSH.(,jAmvgO݄!%Sr,eayjT`eC;% wPϳ+02JqlzC\0LzJaTE!`oP\fL&aL+ʨ?#0cI 4:ՁlͨK q4J9QIhh 40Ҡg$-&vנ\<6t6z{jIf7mKiW6b\>puWp Yh'7gF Ye~iO:OE,ըkWwb3ty'Eyy5i1Ji"K횱`a/p<60̞=H}峮ox3򎁶gL%z("%..d`;aK}8WA\L=c\cE ~aA3I;N swoA:(ر>#yul􂸒KNq$)˳ssuG/ G緗}K*\5?\AQs+ ~Ĝ􏧋~&ik''Uz_bx{TJ~RP$Z^[.kl>?`9N3_@`n< n-};vkrsrҳ(@Ř2WNqZXU+:Hc_bTȯˁVLT#H}틔gTi,dja+UU:;P=ˉsq:G˺"so<[p}I]%+~mK5Bsi/]kV:8܅6ѿ+ԏ~oJfǢ{fdգSQO>pJ2s;yj< ygf:R" /_N<-l",MqH.3Yt.gov:V/k>$2-= hȸnX7W]ȂN`%-`%;X%|×>&.nƮ%'&a9ļ߅ySSLM!$%ED+Jr eƑyPnYbBg1Cmendstream endobj 119 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 464 >> stream x:CMSS10/u`B@.9+  5kfbouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSS10.CMSS10Computer ModernRS34O7ҋ#J2PG$PDDKP ue.TTB4)(`aa^}vrzj`ITI0b17|:T}ʋlu\j/Q{mo߻jluPWb  7 Ȏ ٖ rendstream endobj 120 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7618 >> stream xYxSGBr r&^= {/6Ƹ`[dɒeeٲ$ɽSBK @HYMϒyCFAb쾵;9?ϘGtFx V_aä_&q!ݸgH2D/=;|л{ן}aR?㥋 i"&͜9}lgFKHIXIX/MG6k„1)sGMJX7b05+bULJ\S?aJZvV\FJ޸T 6K2_uAE3d-~9gYnrўؕV[6a] 7&oJ<1otlSM:cY 5gQsbIDkYsZb8"# Hb#1D&6c-|b,X@# vb1XLL$deb xXNL%Vӈtb1O "v]M $aD7"3 gCDO 1MK?oǑ:|D:{6T_Ѻd>V`|+& m!;MݩN)>ho=yPJDE|ɰ-EktC4nEQ`&l$uHF Q -o3&AzFB0JD@0rpa%>AWr}`W*o.s?v]oPn`$U4OްݺcA;܎^|c!]aD*/- h}q?!Q-}`/ 9I/7> ͍Vz02]:م2=P'un-(k}RR=: Rɼ@P-%[r_^ c:m0H9 uQMQbkt@h(Z6#:";þ}v+U)Y*6 H5m_lXّFVnnsכ|" ©d|=PLuQ@N߈Fd:ROQhFVG[> G6/@ĤBbɇBQGZ8vp4| ~iԟEWߑpMaST4K=˻Y M.`fVdv1rW8O>'?\9uY&x`}eM9رN]wת^ڣV.Uشk6,T^˃I0 zV T[Sh)21K1pjN]Ġd;-ZR]h*X^cf연&O {#^PB0@K픱 ) Rt 5X$@U]t6KO ,ۡٗ!IS *w9@>f 5:5( u $F>CjrF`m6\e~}Ib zIh"~\>&j' `/4:γ Hqҧ2Vy챢 @4/[.+[L)@Wܤ˗/E.4U3=ܸ@^V6g10*GzD=ܦ ^A&&.M_/VDE<AgFړs-ʓػ Pt kɫzhn4گğx' ?@Q?cMGSu5GA*BLk$=E. @RE=꧆Dǂ֠=ɳvqBՠZ@zyslaG@G N.?^|e1 c6Xr/_LO.\+g s.5Ik@Ob;ʕWW4˶"A~Pgxw$8<kuk Y` XA?t)-= i[e䖾`d(8 T(ӽ?yyc³tЌs2wa)ci%yTkEZd+h4o׿TO!d d>Uڼ= _{}ا7& wS5JPqX%h!s0awdf<$y> }NXA !*[A;1jςyDcT !HPeP_ABL{ƓQp P%aʹj5bךq_5 42-x@+k0il?{H ף*E'Kt"A< {y7UoB)+j #yhRÁ&zRg>DoZF9թD=M#_Faw ZDG;l*OdEgԬ/u!coR֠7 #W.ϣF^c~ Z'mr@ι*9Ha?d 7p:#u,ғڷaƪ<@~@  )tEvʼn$SN#uB]Q A?PJ+[Kmƒs6KzG^PDd8εfi5ה5 DZWtE!C| sIeǏ:ihj^վ 4Q<^%sy*z ۿ}yjIFR\p<4ғ#8MQԔ{/~ʥHt_mɰp+#,]:<|˻y `ߣz >Cƶ/Da ,ÐP{AZR.ʹdӵg0#St"PUe>w0B9>LDJ<$ ()T{=L .uiP_7-KB E1? dS>_c>hy' {;R:_8{{5iʵWz*ֱ.; ۷c2X_^s!. jY#Mzdek[+רFy+01%YM3,bEO!s rckPwݹKJ')hNTH&LrU@gl3Ƣ`ck|w=}obJ_]> fkbERn(|hE6uyU$`oA^+!V3b%P|W]n3qT R}r`4XsS:Bvz+W[b6[: },s#wZG%Hw751h}# Ʃ`E ߂W̙hXA>$8$ЈTrz `ۋc7 sƴz'^{Aj)7i+㻒PJ(3dfۡ*h7<ķ%t䗳i "sdȒlUu uס|jiz;"/&4<60sJIIRqdm,Kc!{\VW&aAqČW, DRѹ`bC.,·N XBcCp$B4>ZIy~eAXz3>h7yJ^Q]4!n>DSp,١:l@=>*V= |I@]]5߂I??%?()CԢ?n lwЊԃz B(vE9xЪ E_ waա#կޯ4M ܃ȪgP32-`R+yh{Jx^[z jUQP \/P2We Xit6׀FcsLv? {8<6;nĢH=2@oŐjBc0}!ݽ ߼皸iH/-AP `OY w3ȉ_pů0+NBǣQ8}?<(E w6XO@HZ|wM2KQnEô }Vtۡ泪 w]8 BI17cj4:JbM] $ iﶔjttI>_yXOpϧJgH0ҌHŒ+=cCjhb,ap ``3Uy.Q:@ :J쐸-M%Z-hsnR_}|E},nFWeTK< R]caj:.>pK#Pi\hT.p P kAb[ v`3#~L mmԳ|iQ_4A46/M p $U7WDkuJTD+IҢ=}hR)r+FI[ȄaO&\cjj4H#%xw-xKMNۺ!b|35vPC:-cFv7W2wެ S6^D=ј $V5V``w:$mojNt\*/-E[q1 0zbhsO^Z1p! LN' 2R!`Ipd#WNȵ'4Se'jC7zUB4*^CImd1`iTg c͟u\ƖZK]*e5)7܁aw]Lۭu|K#'/؁["Ee9 緶.DUF]_w;Z13% Ֆ$(z<voW,c/fI f'hvhD4Y<.gW]Z9 qp`i6MPո>#\bӊuX<ԁ^3ӗnn(N(MP5anJ~نbFf9̴܆چHpwƥoq98N,RJ\tFe玳QT L!M+I0:Vo}] V2$D{,Rpcl0rWF}+gX+޶JF-ZPCzsjح7٪sjׄ;;PFPݪ:V56.r7vj/ <ԙϸ/]VlJE?0bUVf20޸yEIϝ34.TV֟n;r+6%f's}!Hmf,nOK|%{HE"~r? ƳUe2j:¤ X<o[a XlYcQ9zcrn {nu#ꊫKVwV48f -JUX^( RipQ>nռ߸+sWڰȔZJ^j`  CƭmjrE`NEuKY# H$ 'LwK}^?ip4]bcidg):t¹ռ>; !d-fp]!IQbUЈ O!d&WcօKbN-wSĺ>8 pvDҋT _?9-%F`01A&@ozҐ9D?#hb4"v~&dYЭAL3)>y 0msY\>*3}e|L"ĥ^=  endstream endobj 121 0 obj << /Filter /FlateDecode /Length 3078 >> stream x[swPyͱѷDB@ŁⲩIIiZod෵I)>8Bs0 (w0S78&aݼQ):e}s8Y}xAҳ0LsQNq,^E҆=ƽaZLp,VȢa4褅lHDA4ȪW6=4V7/`y[u˅-|O]|0  ^=9\[5Չ>Hww|u:3 jzHȓB B?6,^ 7GY/ǣƃ\rXSE!_5;M9ܴ`N޴VRB(P_ ̲S.|G=@:\r0.(m>Qb`(zjE ʚ*yuXM8FgZ!m:$dwJ^',DJKzqlìjŃqΡk+, x]0`$}MT2<+$H$,9 <`o2Pi<+VYySv}~SVF/+ai758.$}e"%Gl yRȣ2v!;- y҇MbC 9P`Qc/2]P"2Y.ZV TtR[UiFh jubw|DGJE~Ft˜X.AIAO0*PiOrzDW%DU,n@E٩~;<&jT#NQ:GX ؃Q]A  Bv*Gn-Y TfbʠXBAUh( ^_T _Mp5.KJzZlb ohKmKlC *%4^JhP*7 $'In"]QGRr]H6I@B:vY#,E P'_`u7U# $u%$/͠($tR`kI4fc/3C&%!KUaXWp7!$Yp~lP; ^j9 ZtF-gMX,!TY1%űwTpD%zvWl?+e(e爊dEzktpZB(ՒW[tLzԨ h3 !85 !ktpX!-qTڢ{o_kB=.>qiE!\ȀGEoegAf:8XQt̴Z飗[P3@viGK&-ldqGXhY>WBCv.ꢧHVإb|)Ku~ǧUY!'B.;W%ϙ>ntȏbm=d2>Y.߈0DD $p-8g /Y[ wyrr/%n\T_ґ I3IyT\v!yIZ^oժ("e$q_w{)IzcVI!xHn! eu%I\!#Mi෉&74a'o 7ƺ~Qc4L]c,!/?ilM| *^endstream endobj 122 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 445 >> stream xcd`ab`ddtu14qH3a!֏HVY~'Y3|<<,kh }/=C9(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU9Tp-(-I-ROI-c```ʯb``9%nˏ[7^x;ey>SΉ߂c~k)eG.]BJݷm}f,=ۦ47gA|IxhqD7ߏݛ+qݏf3~N=cv}wfά~Xk7Soonjm=Gq1l%9 =nilc'-b>s4>endstream endobj 123 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2027 >> stream xU[pEֲǦ. .&6`qR \,kYȲGW6i|| @hJҔ!J(Li^ 35<䡝Sssw$"$IMپ:iv)9G\$a""fӆE SDC "oK~bPBFszyEX^Hzujj*TFFW|LU/h C:HF_^VWOLN(V%뎽J]]/RTit52zGV0{I/V:P+#"fcYyR-A,!vlb)#}DXGd;RDCfg,+Ky#b".#*jl.E/ BhoHK3d/a{xgjm÷k(( \5~EϸAZT;(7e;/yޯ9H#pUz|3{7c/'Q廍lik3ͪzR!76SO`&>{'vKVb*9x7Ba2D=/Ki A'N 2i!Z6h-'bHP(em ]bp ge2!ϨgOsqbo~we@Ovi)ZTM#243R {jZF.n2&UW&B]Bװ= DShQz87H!|z ?2gL5Ca=( 3a\"_<;;*#$8h1VzD%[ ^qD%4u?;e Rq?[+V>lNBZG5lNW6 Ƈ|6UJ""db)z̜\X=WO$|-Z$!\ ?n̊F!uTh|Ikv5֏6 'Pm1}`GCNp(2l:~˥h?P̧rrfdQKLk!Dc~f }r_m 8/(F俞!J@ϟ|&ӷ?z=VʆÇ  G (P*2k5\ m%^-0s4k^"z@?~ޚ SD6Ϋշ6P);5]V1:>r <d$86o>R睭]^UҶlvc4 Gp΀s.VrYZJ@k /COm. i4< v*ZbCjVāyYu3YղfH>Ɲ}iYm.>>,> stream xU}PwcoMxQҝ!ޘTDLV D38c,zxGNP8ގ#XI<=C:6u2m4vÌ]k>$!!HT'']-.&%>R`_ߥD`ƥwO~%Au2 IMzdf!V*##"yM*W2fsTFiS&5jU,ުUf9\3ׇT5,e:_+7srFh%Vc0ռ2^_}aoTخ薅2"IH"]D XEl&qD{FaH(Hd @'bMD$$h6m '(ͦV0B |oj;E)wCwQ1Cda5G1dSAQGԩ j|t1KU|eH0V^B%cL|%3p -[:|dg(1HRVZX;-[_b\бv7?jgR?ݑ!r3&4ֺNuq]GO@OCgM{RsI> stream x{PTUݻ{#z%]%\".sEURr8 2Xᘄ@B]]>J'9Kufw~{($!< u o'DOcR,z!Ec/Q&L`侈hzc[PƊU3C+(-.1#_TW}Q/.,-.SJ/ ueR}Juz^Y !$T KJWΚP:zeE(%D( MD^BSgM@r'w*NV+3i|WuMVE_&"`#tZJ9FhHAXVW~^QM h+gd]j&TYC>jRwn}s[O IˆF1bWl>k8˜-zrY7 fD(<@HLdy>e~xĊ~oRHH %{ҡ31GC MbIc*1kq&m\׺ܮnaH UI6%KNIN#LC-{w=[$19oK06Q;I0"XJl iJR~$2%_TU\7.%U(0k,` g/I%,#)-L&|Vlw@mwܡHWJISfmpyӚFecU}.?6Qڗ^kHVq*+߮6?~4.8ix[RWr*z1'ghNK{DžInBje[w0QI Ʃ$(Negόۘ]kL\XKN;hhr Ix(;''*E kEmi'b.Zࢆdaǰ\|i4ihWYzf_%?-h*GÏ0$cN3΍ _2\,fƒkO<޷_JW]};^(H$tԵ9\kU]FgU UUn]aj-7~0 +ÔAՂKd&yc]:yt,6#-%8FҿQа~iٌtǣuC&ܷi~زHgH4O2I5wiM?*gJ}e8C2ϻq||gF;? U :RNDKS $j2 o5^%A8uDq`6>,bYJJ6S90 8έRã4 h:+gy<߷VBwendstream endobj 126 0 obj << /Filter /FlateDecode /Length 6397 >> stream x]Iq#'r_DJ#l.lS>4`bA;r/kjNCŏ s"3#r\A^_ݕzs%o?OFE7?^Gu!j{}swb?4DQӫv?q@R+ou{T …0>^J9(avӃM BJ1\*(7Hw wWV =F^^}&H9^ܗ0ب҃4yo~a/!Ug{z"Ri|P^ݻme9io@|[EGPGprvA7urOCZG2-F.0|2:~-U E_t^g΃izI2.9=hpof;)+Fz+1BhvӇ&R.}Qݧ}½uN{1D[%Qj|N<7N^oo8ɶ"1'{#E;>_%DbEM}_65xwtrt2Ķ = +IPшUΑ6 mD鹼(# CąFяOz/V,g?yӑ6hKi 2DG`~Wީ s"YN'S#hT%I>SDqt}4oT |:F#}D mLwʻ{h]hHEgcc56"8h܏F];ZO+[sj$1mӴVH@|qҚgIQ҃~ZfsyP ?ߖ'Ke> 2wˋJ 6$tі2^ aKZ)gq(VC>U4N^1 =zT/+}R2tg0%](λq 9(* Ƽ˨8D=7|BQG1& Rsh1OlM=dgd-5!9[drjғQCr֣}o?;vB F>! Nt0LO6֓>yךzˏr,߱9۲ڀ0.O "meiw-*x(<<uPF;&byJu_X2cn3@yirXGpɭVrjߤcp!,`=M^ګdeD$ ] |#tmy~7j4P B:/t~h۸~/EuFΨ%ϲ3[ݝm*zWujcX#p+^LHOs݅";`SyE{cZ ̨ 8lI'ؒNk0$׺jXZkeyɌ9@&\ ^6ZXe_X!evz~rL(%6iGgl@#VMג@2 2GOj%Jշ]Sd'uE+vw>i12v!}GR>=$VkgTϡɧ`*8o}Js8~%PN{`NIOo=Y炶!;-r$b[Kw=rDqe j4Mf9K^"+w6}TR$gwgiIA*ƽl+A-VހP Y +Įion*9@Q+%J׷ǎ Jl$ t__k g|>ҟO[.㮈.E3ps߲a}+BE> T+E@pzYB@̖I(NÛ LpY7#8*9pwhwdLV"02[`_3,ސ@3 }xX.Ga=*rLG*I'gx OV.|}ۓwbl#ZZNWJr:k4l006eI$9d\rXCJ큙ZQӖ촽 -yn-i,-*: =٦a?sCg|0\pdBڂ͕ʯ;ɞ_Nl%d2nҹn3B7͘:n-dNsD]zAr/f_~]IRlkFx 1iX{bj'yybGw)S$ atjXkE`+%X=` ٌF__>CB5Vnfnf658 `dKº d[sرQ[4?>QoRpH]|臮.I}AlKd GpR Jx!4G}& ZyѭՓ"*s4pP¤2GEh6Wu" ˚@O^|of+@Пٴyњe !lI!9zp+f_vHFf MpkES}w] RBƉ"6m)m݀!:S,)_b Ɔ$( *ו 2-27taY.'\Cn]1^tĔjɡ y-T \+4̐ߡ$G.֘_`z>+#AlFe l MϪΝ`85鋪J/G/>flIw#r aԂWxY݅RsdT/ j#\Yvg^[̏VEB~vpvp OO.b$&"ιS8b!2)tWt7^b^I{Aj2jy?GhoKouXJ0t@_ t!Q.3O5XEVHhd3kV"&_u<\u +̓| YEE.CtxB}ߠa vƹq&cbOkE@ )p݅G o_}ng&ޤcqPH.Eg43a yE̾/ؐ㚙sb0~ '軔<41b76fښ;0iͥ9$ÁcOtԅ)b]ڛԕ7nv`Mj&CekZ.aJe_rq[_] 4@}bӅP%?L}㊙h֔S$LI@s.kJ֞[}'E]i6t,gL$2g6(#gF%rKznR^= Jy]BVW3[X&]@_>R:4dv5 =fkrRGeKbJfi؋MJq0>xoVrUz&kT"܀ uÇR; rߜZ$R/4twԴXUYEP:9#xrhݒj V6d ЫJS+#}+[[g9)5uM6`7w1rیv r/GNpmen}>zxCq6 6bm#8I f99{._5rQ $s @zDqad6VH`Z#iJN,o7ŴL3ME`G/G^D]QNp#Ұ*WF%uS^wsa-8&.Y1aDW zmjcƆk$> YΠ_kmVT=|̤&9dN: uiJ ?މ2!VI^|Ztdb|yXէ{[*pZ7x{-M]\Gf]_ WLT&p[K+rsY֯SSݛQR:ڪnC'FkIB59.4{m{iNrqc93pnqS8 ]f/86ds[ ss)8ĵ?>f}~hvwLUrk%rt*(ȥ~f;j'~ uk08 dR U:A\`*L8je+_M1Em 604A >>YW苦%景NYIۯSóJng0'o:,{LJOLwf5 v-n,+@7Z~0לఱϴvIzKs.U:59GZnd/vY |ŌإihF{[@t9,JDLPٹu'Ic(͹1T)Dfp)_>vҪE?0Ӿs3\s 9|'Mו|`[Td}Jw֚yk#@z9$Z5dy2,YB$Z2x]b- h_DgG =XB^֬sO"ya{]go ;E|%@k^HYuWTL!,ݼr/wt..s64Ur*=h`Nb40SdLJU = /( ZU;w$yFvSaha\-Z 0r'wU?~`MQ3F) -[u"%{_W fU4fAUVQV@iCesS ]CMwW( cdD`WT62d,%LZBWUeLn_(c`oYl5PlEpR +"LjeCP$GU*W'UNKsJ{uτ3==fz_q'I.͹u؎{\+DUlr2^$tӆsֲ! q1r6ZbW#`w4b \ =+eAJ3l5٭g&N:̤\K"nϕ{3swDw&!1{Eh+Q?tQ&eƛVG[tL<}Sr)$wؚ˚fߕ&V@,tNV ZDnJ!qZ 왣me=6l`t|}ՄDGa @0ޤwy: ;imP]R}jGR=owfb4ϋWK0abƳix9.̵P+Qu=&θrrBH-nߝL|fN7K8 ( Н+0}LԞYPRS9(L#8\.@7̂ 7Ҁ5SOL㑏K7L >Cs xKu16I: Ŏ&pAsjgxa醽lwV"Sڶ1#槟@:&}{tSendstream endobj 127 0 obj << /Filter /FlateDecode /Length 945 >> stream xVn$5oюvٮH e9 FiC4 f2"_Oi살4ySS.W=C$*~vߝ]:NE"_y)ڢ$6y4 :qF1ZR@ݠ @0F"m`_ac qZa -)@(hW1S^LC2(|O?mL?p"wRBNkj#B?rn\R$ )qAؘc3玼RxU!b#%psDKz.F%?g- YV&4\zuUO.SyYJFi\7yqW*n6>WY\ U9AW!\zRQӏFlJ-PRT"^S/6I:ntNi +5:U 32_%~;O3 y)ÍDD`q8/?r.R/07s.I_bw " fof!匇8KGq UT+lh\2qhcS)OX)sg"0~WQRn\mXe kՔ&/uύsInXnz# I VRu^YVMc`zw/ q-5!g |[`w[౹ۡwWY5͸ڷG aa=Zi> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 129 /ID [<86c3f4f8f3665eddee25312dd41a5cf3><91ef170d6abe9e7abb6d7fdb0f2640ff>] >> stream xcb&F~0 $8Jd-oҒ$L~[A$0DH R+]  Vs lN d@Q^D H\ɤ"d`q6l t,#j endstream endobj startxref 105673 %%EOF zoo/inst/doc/zoo-design.pdf0000644000175400001440000013301613224634151015554 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 9786 /N 45 /First 342 >> stream 2 0 3 51 4 335 5 385 6 533 7 747 8 930 9 1076 10 1224 11 1275 12 1519 13 1754 14 2145 15 2399 16 2702 17 2945 18 3450 19 3914 20 4134 21 4351 22 4776 23 5085 24 5332 25 5570 26 5989 27 6414 28 6567 29 6774 30 6792 31 6906 32 7054 33 7201 34 7349 35 7533 36 7698 37 7886 38 8068 39 8248 40 8473 41 8730 42 8966 43 8984 44 9122 45 9199 46 9366 << /Metadata 47 0 R /Pages 4 0 R /Type /Catalog >> << /Author (zoo Development Team) /CreationDate (D:20180108102249+01'00') /Creator (LaTeX with hyperref package) /Keywords (irregular time series, ordered observations, time index) /ModDate (D:20180108102249+01'00') /Producer (GPL Ghostscript 9.22) /Subject () /Title (zoo Design) >> << /Count 2 /Kids [ 7 0 R 6 0 R ] /Type /Pages >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 582.122 null ] /Rect [ 491.288 528.865 522.996 540.545 ] /Subtype /Link /Type /Annot >> << /Annots [ 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R ] /Contents 48 0 R /MediaBox [ 0 0 595.28 841.89 ] /Parent 4 0 R /Resources << /ExtGState 42 0 R /Font 43 0 R /ProcSet [ /PDF /Text ] >> /Type /Page >> << /Annots [ 5 0 R 8 0 R 9 0 R ] /Contents 49 0 R /MediaBox [ 0 0 595.28 841.89 ] /Parent 4 0 R /Resources << /ExtGState 29 0 R /Font 30 0 R /ProcSet [ /PDF /Text ] >> /Type /Page >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 582.122 null ] /Rect [ 80.004 514.705 167.04 527.503 ] /Subtype /Link /Type /Annot >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 582.122 null ] /Rect [ 173.085 514.705 196.895 527.503 ] /Subtype /Link /Type /Annot >> << /BM /Normal /OPM 1 /TK true /Type /ExtGState >> << /BaseFont /XIGHLW+CMB10 /Encoding /WinAnsiEncoding /FirstChar 82 /FontDescriptor 12 0 R /LastChar 122 /Subtype /Type1 /Type /Font /Widths [ 759 0 0 769 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 0 0 0 0 555 500 0 0 0 0 390 0 0 0 0 0 444 ] >> << /Ascent 695 /CapHeight 686 /CharSet (/R/U/i/n/o/t/z) /Descent -11 /Flags 131104 /FontBBox [ 0 -11 756 695 ] /FontFile3 50 0 R /FontName /XIGHLW+CMB10 /ItalicAngle 0 /MissingWidth 500 /StemV 113 /Type /FontDescriptor /XHeight 453 >> << /BaseFont /DXTZDO+CMBX12 /Encoding 46 0 R /FirstChar 14 /FontDescriptor 14 0 R /LastChar 118 /Subtype /Type1 /Type /Font /Widths [ 937 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 312 0 0 0 0 0 0 849 0 0 862 0 0 0 0 0 0 0 0 0 0 0 0 0 839 0 782 0 0 0 0 0 0 0 0 0 0 0 0 546 0 500 0 513 343 562 0 312 0 0 312 937 625 562 625 0 459 443 437 0 593 ] >> << /Ascent 700 /CapHeight 700 /CharSet (/A/D/R/T/a/c/colon/e/f/ffi/g/i/l/m/n/o/p/r/s/t/v) /Descent -201 /Flags 4 /FontBBox [ 0 -201 913 700 ] /FontFile3 51 0 R /FontName /DXTZDO+CMBX12 /ItalicAngle 0 /MissingWidth 500 /StemV 136 /Type /FontDescriptor >> << /BaseFont /XDGIJQ+CMBX10 /Encoding /WinAnsiEncoding /FirstChar 49 /FontDescriptor 16 0 R /LastChar 116 /Subtype /Type1 /Type /Font /Widths [ 575 0 0 575 0 0 0 0 0 0 0 0 0 0 0 0 869 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 559 638 511 0 0 0 0 0 0 0 0 0 0 0 0 0 0 473 453 447 ] >> << /Ascent 698 /CapHeight 698 /CharSet (/A/a/b/c/four/one/r/s/t) /Descent -6 /Flags 131104 /FontBBox [ 0 -6 827 698 ] /FontFile3 52 0 R /FontName /XDGIJQ+CMBX10 /ItalicAngle 0 /MissingWidth 500 /StemV 124 /Type /FontDescriptor /XHeight 453 >> << /BaseFont /YCLDNW+CMR10 /Encoding 45 0 R /FirstChar 12 /FontDescriptor 18 0 R /LastChar 127 /Subtype /Type1 /Type /Font /Widths [ 555 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 0 0 0 277 388 388 0 0 277 333 277 0 500 500 500 500 500 500 500 500 0 0 277 0 0 0 0 0 0 750 708 722 763 0 652 784 750 361 513 777 625 916 750 777 0 777 736 555 722 750 750 1027 0 0 611 0 500 0 0 0 277 500 555 444 555 444 305 500 555 277 0 527 277 833 555 500 555 527 391 394 388 555 527 722 527 527 0 500 0 0 0 500 ] >> << /Ascent 750 /CapHeight 716 /CharSet (/A/B/C/D/F/G/H/I/J/K/L/M/N/O/Q/R/S/T/U/V/W/Z/a/b/c/colon/comma/d/dieresis/e/endash/f/fi/five/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/quotedblleft/quotedblright/quoteleft/quoteright/r/s/seven/six/t/three/two/u/v/w/x/y/zero) /Descent -250 /Flags 6 /FontBBox [ 0 -250 1009 750 ] /FontFile3 53 0 R /FontName /YCLDNW+CMR10 /ItalicAngle 0 /MissingWidth 500 /StemV 106 /Type /FontDescriptor /XHeight 453 >> << /BaseFont /HRWDWB+CMSS10 /Encoding /WinAnsiEncoding /FirstChar 51 /FontDescriptor 20 0 R /LastChar 83 /Subtype /Type1 /Type /Font /Widths [ 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 645 555 ] >> << /Ascent 716 /CapHeight 716 /CharSet (/R/S/three) /Descent -22 /Flags 65568 /FontBBox [ 0 -22 617 716 ] /FontFile3 54 0 R /FontName /HRWDWB+CMSS10 /ItalicAngle 0 /MissingWidth 500 /StemV 92 /Type /FontDescriptor >> << /BaseFont /AABDTU+CMTI10 /Encoding 44 0 R /FirstChar 12 /FontDescriptor 22 0 R /LastChar 121 /Subtype /Type1 /Type /Font /Widths [ 562 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 408 408 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 306 0 0 0 0 0 0 0 0 0 0 0 652 0 0 0 525 768 0 0 0 0 0 0 0 562 715 743 0 0 0 0 0 0 0 0 0 0 0 511 460 460 511 460 306 460 511 306 0 460 255 817 562 511 511 0 421 408 332 536 460 664 463 485 ] >> << /Ascent 750 /CapHeight 705 /CharSet (/F/J/K/S/T/U/a/b/c/colon/d/e/f/fi/g/h/i/k/l/m/n/o/p/parenleft/parenright/r/s/t/u/v/w/x/y) /Descent -250 /Flags 4 /FontBBox [ -25 -250 859 750 ] /FontFile3 55 0 R /FontName /AABDTU+CMTI10 /ItalicAngle 0 /MissingWidth 500 /StemV 128 /Type /FontDescriptor /XHeight 442 >> << /BaseFont /DNLRSR+CMBXTI10 /Encoding /WinAnsiEncoding /FirstChar 82 /FontDescriptor 24 0 R /LastChar 122 /Subtype /Type1 /Type /Font /Widths [ 859 0 0 880 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 355 0 0 0 0 650 591 0 0 0 0 385 0 0 0 0 0 490 ] >> << /Ascent 694 /CapHeight 686 /CharSet (/R/U/i/n/o/t/z) /Descent -17 /Flags 131104 /FontBBox [ 0 -17 988 694 ] /FontFile3 56 0 R /FontName /DNLRSR+CMBXTI10 /ItalicAngle 0 /MissingWidth 500 /StemV 148 /Type /FontDescriptor /XHeight 452 >> << /BaseFont /IMTBDN+CMTT10 /Encoding /WinAnsiEncoding /FirstChar 34 /FontDescriptor 26 0 R /LastChar 122 /Subtype /Type1 /Type /Font /Widths [ 525 0 0 0 0 0 525 525 525 0 525 525 525 525 525 525 0 525 525 0 525 525 525 0 525 0 0 525 0 525 0 525 0 525 0 0 525 0 0 0 0 0 0 0 525 0 0 0 525 0 0 525 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 0 525 0 525 0 525 ] >> << /Ascent 694 /AvgWidth 525 /CapHeight 623 /CharSet (/A/C/F/N/R/U/a/asterisk/b/c/colon/comma/d/e/eight/equal/f/four/g/h/hyphen/i/j/k/l/n/o/one/p/parenleft/parenright/period/q/question/quotedbl/r/s/seven/six/slash/t/three/v/x/z/zero) /Descent -229 /Flags 33 /FontBBox [ 0 -229 537 694 ] /FontFile3 57 0 R /FontName /IMTBDN+CMTT10 /ItalicAngle 0 /MaxWidth 525 /MissingWidth 525 /StemV 80 /Type /FontDescriptor /XHeight 442 >> << /BaseFont /XUSERW+CMSSI10 /Encoding /WinAnsiEncoding /FirstChar 82 /FontDescriptor 28 0 R /LastChar 82 /Subtype /Type1 /Type /Font /Widths [ 645 ] >> << /Ascent 694 /CapHeight 694 /CharSet (/R) /Descent 0 /Flags 65568 /FontBBox [ 0 0 700 694 ] /FontFile3 58 0 R /FontName /XUSERW+CMSSI10 /ItalicAngle 0 /MissingWidth 500 /StemV 105 /Type /FontDescriptor >> << /R11 10 0 R >> << /R12 11 0 R /R14 13 0 R /R16 15 0 R /R18 17 0 R /R20 19 0 R /R22 21 0 R /R24 23 0 R /R26 25 0 R /R28 27 0 R >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 618.187 null ] /Rect [ 429.979 687.964 522.996 700.762 ] /Subtype /Link /Type /Annot >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 618.187 null ] /Rect [ 80.004 674.414 131.654 687.212 ] /Subtype /Link /Type /Annot >> << /Border [ 0 0 0 ] /C [ 0 1 0 ] /Dest [ 6 0 R /XYZ 53.727 618.187 null ] /Rect [ 133.294 674.414 157.105 687.212 ] /Subtype /Link /Type /Annot >> << /A << /S /URI /Type /Action /URI (https://CRAN.R-project.org/package=RUnit) >> /Border [ 0 0 0 ] /C [ 0 1 1 ] /Rect [ 152.09 587.67 383.235 599.656 ] /Subtype /Link /Type /Annot >> << /A << /S /URI /Type /Action /URI (10.18637/jss.v014.i06) >> /Border [ 0 0 0 ] /C [ 0 1 1 ] /Rect [ 370.117 551.3 492.153 564.098 ] /Subtype /Link /Type /Annot >> << /A << /S /URI /Type /Action /URI (http://R-Forge.R-project.org/projects/zoo/) >> /Border [ 0 0 0 ] /C [ 0 1 1 ] /Rect [ 124.763 469.737 367.838 481.722 ] /Subtype /Link /Type /Annot >> << /A << /S /URI /Type /Action /URI (http://CRAN.R-project.org/package=zoo) >> /Border [ 0 0 0 ] /C [ 0 1 1 ] /Rect [ 254.34 456.188 468.335 468.173 ] /Subtype /Link /Type /Annot >> << /BaseFont /WPUULA+CMBXSL10 /Encoding /WinAnsiEncoding /FirstChar 111 /FontDescriptor 39 0 R /LastChar 122 /Subtype /Type1 /Type /Font /Widths [ 575 0 0 0 0 0 0 0 0 0 0 511 ] >> << /Ascent 453 /CapHeight 453 /CharSet (/o/z) /Descent -6 /Flags 131104 /FontBBox [ 0 -6 582 453 ] /FontFile3 59 0 R /FontName /WPUULA+CMBXSL10 /ItalicAngle 0 /MissingWidth 500 /StemV 87 /Type /FontDescriptor /XHeight 453 >> << /BaseFont /WVKHBW+CMSL10 /Encoding /WinAnsiEncoding /FirstChar 68 /FontDescriptor 41 0 R /LastChar 115 /Subtype /Type1 /Type /Font /Widths [ 763 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 500 0 277 0 0 0 0 555 0 0 0 0 394 ] >> << /Ascent 683 /CapHeight 683 /CharSet (/D/e/g/i/n/s) /Descent -206 /Flags 131104 /FontBBox [ 0 -206 768 683 ] /FontFile3 60 0 R /FontName /WVKHBW+CMSL10 /ItalicAngle 0 /MissingWidth 500 /StemV 115 /Type /FontDescriptor /XHeight 453 >> << /R11 10 0 R >> << /R12 11 0 R /R14 13 0 R /R16 15 0 R /R18 17 0 R /R20 19 0 R /R22 21 0 R /R24 23 0 R /R26 25 0 R /R28 27 0 R /R41 38 0 R /R43 40 0 R >> << /BaseEncoding /WinAnsiEncoding /Differences [ 12 /fi ] /Type /Encoding >> << /BaseEncoding /WinAnsiEncoding /Differences [ 12 /fi 34 /quotedblright 39 /quoteright 92 /quotedblleft 96 /quoteleft 123 /endash 127 /dieresis ] /Type /Encoding >> << /BaseEncoding /WinAnsiEncoding /Differences [ 14 /ffi ] /Type /Encoding >> endstream endobj 47 0 obj << /Subtype /XML /Type /Metadata /Length 1642 >> stream GPL Ghostscript 9.22 irregular time series, ordered observations, time index 2018-01-08T10:22:49+01:00 2018-01-08T10:22:49+01:00 LaTeX with hyperref package zoo Designzoo Development Team endstream endobj 48 0 obj << /Filter /FlateDecode /Length 2758 >> stream xYM V0jNv; vxF#yG36vs_+je?`,{u.F9v5w*|fL_忳+d"b_ 1j;_]XX#1Q)_==~_,(b0~- ?WU_Uj.ëY`tV94:mݰs'v. - qB nT ^j;k *H;Tc ~8z 6FuAuuͱȓBy,pCц8\/ eC&צyZ6?L#Z9DJ1JD1B?tn mGWO"b;zLº*"Qh]8arW?M>\!x9/JIb8bt'?B(U;ɸ5},AI.\g'XN ~#kRYشkq'oybd=U qolzP[ɛ|fȑ.Tm54ev[_[ 4Q )q cu٢di U:VdknA$h* L'DKJ%2]93D65rx,9QS~- ؔx釫ŴښxMi V:<ܧWAؗC!bQp $Ї#(>h]Vlڲ6^K'K/P!S(iKИ%zdaG6<ĚgM魓H99yerm+Q H7"SN8^Yr!D#&DJ3dO=F A#&E|wTn[; /5O]JeQ Bhr!崋J#߰MAŖXIhqN3˻x8=ҟZ@ ?Üz0`P%mAsʭdUHA:"<ͳ&ecw?Ѹ+^!={ռy5{>CHk$a&_ȯ浆xANޓ*:JWexJ5 |Sm=e7Unv+b1^mPfx6NҤlQn쯫/M lC.xROo`E8% (]$yj 1s:=TO>}Z$ ~{9ۇR42'U!$AMmX>@DZÏm+q{""j7yjt$j.X?7p҂;FCJgX"C`Ʃ4!hj|dp(ËD <&0E=K!1G.n5t꒬S2{~%Q orHHKKCP6%#r2f%/8ޙj^d,>%#AP){\ئ43LA:-IX*$!RqQ6מq`[7NIMzRUep"aE{W,N\ńLCsyCZx yMcQn1^2E)JUqx\چ08v̪]+Hoyryk:e>xjj'}#q^޶M0? 3"\mvDc5DIP{rJ"?1,=!CW B BꋔH96Ts_ռ5V󴪤c5%䷥{S|HOeWuE؝ͻBúīM׳o;~Rm5/.V5HN iG(b ~֪鲈]1ئ_>8!ێ}glw;ހ^c(2Kl䨰ѭ;^C`G#&=[5Q >rwJK#sOC!q[I>׼sm7qorҊ`=ϧN?>u~e oBތsH=P{w 7f`E6m鶸B腢M/0UYI^|X/ W$qT$K"&< Iؼk6CdO/ໜ[i﷓ @5~?At2T;CWJr%> ),}q92 ޥoADֱ)U~ߡʹF-AաG>R~0*Y'P3W郴zc ;}L+߿B+֮ ۋnBt~7͘[y}zu5Ϫ;`Sj~S߫_fe9endstream endobj 49 0 obj << /Filter /FlateDecode /Length 7296 >> stream x]o\7v.eg,Pnn[Hb@;dkYX+<8;,PC/yH<|:OtߜJ^ݝ̧W'?(iz= VΞ>{qŸS4tMޜgbܗ4uVh(vT‘ìX^q x;'g.m;wdP"1l>E$v8FSkhwp X ~M ,&}f [Dʢ@nv`Gƃ^.SQ7FR#ld0X@6⒯9+$\Tm5rY[4zmko Ϯ \ ܭ 2dx2$qf Lem"p̿zvb>'',zBC, 1z]*=`K0;D]Qg# ~;g.0/Tqၕ]"  ĬLwb{!oP-1,Rb_c LhB|JPO9?MuNSp/bpBhG*;0):O0I ނfw%yn`"=N>D{y#sbfhMlOq؞S X$w̵@_'~6+xB Yct#&C9v@!WVۇy<Ţiz7&9fY bU8_ԿYhr`l9zG6{L'<\ gNӠȘ-8oAhhtnj9Q~HCW4؏wCp18RFVrU)Q:Q)Fq[@M0,Uٸ$& $^W`#)iDUk<^9#%*Ba-E]\r rtr1uW;#k4!$z1vp!0Q^LXµ8]F;[->QUYt/d3Ti[f4 XxX;3^$`F=RŹqg`N xu'80*== &][Lb^*>X|0}nWc*i3 $sRGNzO:;?mz+l=sgbғ=m= 6 ˏMzn c%|!sg S}y*);UF,zǃki A?L*W Mr&Дd~?Wf6/6 !IU̻CV<`$Ҵ&X l1e!`#=XvU`PT>ŷ%L $:+aOQ-ſ&hlÌgBgPOF)u*lLʇլޣCϐ@πykZ)Xq(^9r&1N"Q\`g@a@ {2kVBb{cɾ.<" #Fb|lG}N(Af FWS/>u?K AWobwX(og'f1Y3N'އM3LFցWjv#^cCTJ!w1 YLtXy yģ؃!;4'Z@nhHj4g) UyǽwtH??05$|b^r4!f/hn`g7ij7`$^Rr>e`!UN]VpVz碇PB$VWK]skYFڇ ֔>ӚƳTGj4uCx0k6 E >w9}:!J뀺%V (a1c,-sICT:Qm.XY(XAbɘO[.R6wyњΎU8>9 Ѐ?R PŽYQ,{7=`4!fCS,r)[33Ch½8cE1嘨k͋֜Z~ּ.Öd xnM) sQF=ˬ%Ԛ׭o|b5gbj1z4QE?.K($;xG[O|l!,97[0+jqX 6mCv)!Nʸ>f z j(w3)me J$hq2VaNZEP?ERJngǣad4GB#sîkD*r+s:id̆\ 0'9eV>k˷]FJ|<ò* DZ }5y{5(<:-_h@nLXKH%Na묒a:tKe˨W''E fRk٥ K?LSU^!2"̭KZ68U*{R"JRl-\%-{,9zԲa|nD:QgdG]$L%dSuɞN0vJ { L'WMDĒd@{>[S{p\+/Xf-( ϰ@ zl KK|Zx@$.xβKVd v)icfcS{ve]}ʶ$:r7g'[L.2R,cn͚?:']5}ɨd)KS|5ɍ(㰺_TiJ*reZS= ]A*vr5\=})ʁz B@tjJc}QQa^'JcEop9 @)fndz UvGkpOc]I ‹ҙ4;WSԗY҆][ MtM-W(`^up h`TJt2twuYQIy3(+ 񻫝Zj];QZBfIδAr\.Wt {;v TeG\^&+\cy/%8qa0) YދqQ"ɆHi]vWqJLԨpP7JzUdLޢT=E`;'#{C_K|Z߼UYdX._ WGUJgpHtrb=.n5vr nz!We `yҷn -[sӗRJGa5׼Q.? U~OA<ƒ"LdP+`Ö3+tI{yfN3Ͱ@{Wٝ1yyr5ͳ|њ"4s:N|6f_p՚eu5Mqv'>2Sz/5_uH6) bxa\JwؔJ=; RBD1]f|B_q㌆+Q|: 8EWTr>ဿ M&Ω+,L0[6t<QC5d\T%jU{?hIg-sŋ5Ml:L ZmOJݿ]_ʯۉ;/7JW:> ntAjd%\noVa.`=jz]A]6s'A!]2|3y0g;EԎL-Wjx$[侖Z4n$AT*j彂Q7e|WR;:[|w#eV+X 2bJ x{M+VtpSսY!PT AiiyMEg%^mھJ?gF˷$KkeEG0]BAԁ=gdetʃ>g['R\y]Ǘ"O}Ӟ8ŭ>d v,mwljʋǾV7jG[K,R&%/'[͡㼂zk lV,=#q,g9#(+mL9\n-: Bo`/7t@U"B PFRVE+֝ (PYx0whSV6ލ #d2 ت쁐&S*~.e_\^]iLAIΓKؿ *U !rHdh(,5o`/v~zDcIʀ1=od4" tN9>.S&Sk/zhQM%7NK[z#SXǣzdMw!cr*M Qvȷ{<2we=x0Sӣ*K&K&vW@||K]cM:HVMCH1IfzSG m&))% 3>$UjeZ@,p19,/p+rR~,}xMJ74ݪ3.FdRͲPs`2֭(+ݸ`jHPCލəLg|ӕ3_(bjA.Vܕaݼ%H4 xMo]Cb]NZJ ~;fcJ60(z?Zቭ*܉.FRO{i|/pIa=wR}2‡8IRe PHRWaY._g20/KeĄI5g 8۔qĝ)Biof.iOI.ދ [+z+~l+"aW[ ߲Vۓw !"E>F61uoFFWJh+OrMj):қMT'endstream endobj 50 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 977 >> stream x=RoLSw=tx>?IF`Sp,st OG۱:dd2 hDP(桛! ,XM-s}ǒ,'7'9ː80 Wd*^TFOY.LH'IKJVL!~oFk^EXq49]6-o*wfg{Vmv&۪|YmSWnw}AV42.ˮ;dm Iٮ*3k^V]YtVNH))#夂}%"xb'wu=nuwWA(9C?nm|!ptw{τf)Vt%)`aV*#J>'F*L#F1'GALRLa:t11]OŬ|&㳏~BYRX jw܄`˞K.~*(nmäkjCA}M sRns`E4{ܷҤRΗ:*ad`LiyVO7'>ZYOhQnpe{mO) q_`eµoo{&6g\oԥP5 ЎkMۙY#GKŇ 7zc1<R8'_EI7.x59}.OEP D46-P ]`D>g|FaqOoʧxUk՗15D_iڟ3Z˺¼3aX`@2lH  endstream endobj 51 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2258 >> stream xV Tga 3 VϨ:-(RO*.M!!Mrw%"BhD!>+>tkVvQi>t㜞?s(م F)Nʼn~$HЁIԨ/NZ2O dmb(L{bhژk[h̲:2,)edttt숈h|֤OUg*cf֠6K'c^k*ÞәY̚7Smși4{j2Oo)Wks&6Mc4+_RDg-4rZ2֘5eR4f-2-T 3rzZEQT(@%Rk$jPK9rT,5A-WbHtcV0]an{ e'XMdTN.:_#|FZ\7v;86+){x[!8uΪu @'}l.hX pxl#3TNmNZBX#Gz&| |bFi\4#~K 0V^p<-@žWi r1FŶ?}1grM9/BX_̈mhq¬I$$Kݚuk-7XkБ>3xv! p"ȟ|yR-`5]p)(̼I&ĭ{-UǒA/{O|OB]R5PHcĉ8X==Y%Fa8 7LQ$NA85 %^ե, \\?Lݻwc0 syO@a[X9ճdҾ1M=ZVhkWԬЄLb[(+Z`{B.. w#{LCy LP\aaanUNf᳗S$v!3c|"/M"mQy8t *ns˾UAI5+Ofv.2!α|JwUďԃ6롻 [ #H=Jim`]P#x@ph,M'Lry>={QT 'eMT+ˠZ8BgDY_{E9O:TCGjnix`#0[ ]vtpd2#e8U;.R8E`]MoF5$f4;,,UHTz1 i-F\|K9]N9P&/mP2(D`8J ]REed)"ԅ*=e o5{"e/srJ>̑t'^7 -wdwZqB֒pֽ޺=齋"%:_u^')8N,;aνk P'ipӋ'3{vr;쒶s{lhcT4EIZ+#$[Q+ :HUˆœX3/ŕg/߈o7 {VI׃LU[ʲ79Qυ G…!&%b*ΒdI:]$1v$cz}eq1E^$^pH `Xyd}xsGAz@JKsRߧj/vڶ8e+v)/gXllō)*=eD(V< D KUDx[ ؑk,"xu Y>xbpV>")ߍ>㙁4N呭*+?>AU+;pV "~\l(/ ;C)|$hN>%/GB%u+ b-6Fj߹͹1v$"$?En鴍'0ҧqm.|x{W0m LI7,`P/2@6-˳̺w<8c>Vi 4= Giyg1Z)_/d߰7/w]鴶 " R߰7׊qUVFR*X_# `[GK/k$*endstream endobj 52 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1209 >> stream xES}LSWXR;9plA'nUSێ2l T,NaP9[qCV9X89$5\̖KU̶{s~whfde>{fJ hia$wVy5+w]RAA܈2P^\{/A,Ϧd4m>gpJMv!E*dJVffF[^g&Yg~ EV}R^732Ng\nIMevXe9abF9W\Qm7ڄ-Vf(*nʮ۫ʦ"ARy*RSZXz@{[1c~*ݖ"w8s7d)ཱུp砣Gs=\GZWv:I:D¿_69Aݺme@;Wf8\B5 Nx/=6Rt+ΠF5a+|+ʴƿE\맟"쩴HMzYA{_kKMUBc_T4EZu;))UJAo] `62*?2p4[=7|CRWkz/Ԝ;'ԭՔ*qɒqr~R3l%RZ;$DA,|187QUKK8’Dz"rh`Gy+%Um.T9N2վ1P df+ ] 6;, !8GSr@pdz{|ᐫ,x8\:2=.RD-i2+"S -p_epanhP$F$ M0i$E)? u'T*LqtX^xFendstream endobj 53 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6797 >> stream xY TS־1{PNhu:L2CdC N<!DpcmjUjk;?IZoVI콿>P6(@ Zrd.P?+Mj\>;'~6{p' B{ ρP J]<{ˬY㝧L'Z^K}"W (ja ·.\8zte1cVyܹgZu7m d)SM1Qn$?!a"EVSoQkZ=mjEmFS1&j,5LͧS[j+H}HMQj J-Qө j%JfRA=%S,C9PPT* SvT5ZHBPjA^ B?6lNN'}NGЗr>~뿤2k|1p@~}8J|aplNolz "ǍNS!CU yy7cp$Ϝia T0-&~N5OȏZf+s DcfUL0]>it*TeDZuZ#9l L2BC8L7k/>8UJ-qjH̕52X_R &޶]G."Cz*z 5;4{Hk]{ I ˧Ο+ܸÉڏ T ZO07'|p[ɈF2`Z|R^V]f zjGO<{HE7jrphqӌM˷bA*y;~\#Ikho~J\T0?Lbad%A"7enI% ?5Rb+d~^P{A(EG=Xaq7OHz{Uȃ)4C+9pHFX >[򕚺&O=ペ" G,F3 Z\B@n )*. < Y7EϨ}S$74( UBC,3Ӹ-|7NGx5b`'dBS{ETvA}c/xsnUwj:M`6Og'oןc`t2Z\ʢ(h]0W>mq]y%Uc#n\4+ B`06|˔! aAlod1QS7N Ҝⳡ=EHg)JÒ x%0xȮ+ L]qwxSaS\6AG6zlġh Z"[G4~y;yf Hp\ 4B LXn}!΃_~K= S4`@ov~, ;4[ Cq?͐PE5%p7刬D'Bc s'3* 8C{h'3o%fWrbUV 0I't<fՕFʃTUF/:R\$ lؙGh}3CmwPl` N 0Ő])­ %$'q̔LO&XY޿,lT"Q+* 5PBĻb~B`!TӭYٟs&WA0$C }W6X omB[ o԰hp« <{bO4 OE$W[Ole4JLhNE4 D,z˄B+"EY!c2%7_|;&w <(}3ka5׸_1|^'NDUkUh'~RԉK*z2U`]h4D{!zEm|#7A1Es`2ωcOں;R3Ik opFsdI\;aȌ \y7Ȏ[=Gг=Ȫ!&A%(䧡;l~u jDG+CU5j3Ua4B23S6s6A^Lq2BWj2[rh$F9b( wm#D'hvҖYTolӅI]^}+Jyd n+sdEw `=R$v?0waTt*hw$-9:̛ԖBTZA60}-c]4z`)ШgO#MSjQmgP1r16IÇᤧfsWxqZ)A ؀ؠLiK[O=JbYh0q?!aG|2SSN~']6dңT"(RTFpȽQ}^߰3:އA^ hzi'#5R!۹~4:_hEE4TC^[0M&~{QԻxipã8k4=׬l/gKhZ2bA0,ewR^[9P$tq:%}w~kJb-2/8U,v6y'M "mM=iZ*c"‚S4Nkr)cyM$!W/#V<g.:zOgr(vȖR%sBڦM:uK 3;/3G{k}" 1 ,p }t⼪YUy25㦀~ȼ۟P/ <]zUg>")U (3&vb(rR6qPA0SD3`8iY MnEPRUHVIX%xe=.x~AHA=WWg׆8Xr]Mlu:u X;49e]>[w]Se$#w&!*U2Hdzc;G>aJ`5P]&J`w} hSܟ#}sZ~]ᐹq)i^k\v ͅîe~HlyWu 'kKbKZ}iNBbj"u"}ISȕr{#^k%4;T,"m~nh>hw lE1&;'!Ua>bgyb)޶Q =rm6G$mgQYO1#ߏC:ycziK.=(QdȐĤnYް=׭*M$fR -AqVdqe-'nB'ŕjvF(Ϩ DKFZmc&蟾}űF"+b~%UPTA;aF (o֕Qh 13(}dC]xԇCOndQ}~hedkh6wԴno\[_Vzx0J&!f#$})?b!'^ c1/ʮҸ#-T0/; +M\/l&il Y=# *kS p9o*g(3+HQ "6A[(7:zzd @肇b M a8TupR{2DVuɝYLs\p繐H[UZUWWSS6YzjvZ.y2G5<@dkv vg눵U/Ow8%^F_! @hT!Zyb,^mƽ9Il{,mGve ߀lW?OF)W2Nx*`s}B<'Y&)%u^EHߙa_x*xS!rC¤Ұ0^g7j(]D}^_˽|?YO~ Gs$߻^Hc9N*>VSuR L1 &⾛â%5` o``kj|Twʊr 8VV%.[&ɮ2-0+qw3BT!Duh5{W5ވg L3VBg>IrZa"b__o}~~uSPendstream endobj 54 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 572 >> stream x1CMSS10/u`B@LL   ngbouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSS10.CMSS10Computer ModernRS334O'7ҋ#J2PG$PDDKP ue.TTB4)(`aa^}vrzj`ITI0b17|:T}ʋlu\j/Q{mo߻jluy̯ȋmKNbPN}DN.Y=]K>F<_O-灳EG״ϋ8(>BcEauPWb  7 Ȏ ٖ Qendstream endobj 55 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4210 >> stream xX teC Nր\GQT 씥6]4M4iy'MtIҽi -]h`KYƂ 0+Ιqۗ.9Wg$=wyyc`ga #`mkL~]_?2(S@ǿ/(v+ݱc dBG#H}Jc2ي|7)Y<~E[5C7' НX!GZxn0?tKB!]:C򊕡\arĬDANbB 0tWlzbt?6g󳅉Н ay|,av&%sHKa@ ۍbDZpv;=^Vbf,{ ö`[װmvYlۉasyX: u3ggę:yl omsyQ̗> ,h>,x@, > ?_z 4v2Q6{-lΚk?iMǓr膤_9($-Tr>^st.gmItu0 FcwPqb rx0^3Qyx"MZDnJ 4]ZaA~LijҫL_ u?ŦP˖^ 8AY(7;:l>Cn:x_C쥩I^H[>rfQirM/.g$;pJ3Y2{)]b2+`+3Q\)u_8:IY f53t3 v 'hGAn!eXlxnԷDZ.TԕvƝF͍{|Yܠăm9>My&*/efU8f}Ն`eY=n ocLjrk3աSE Du`f8@/'߈߸p>Ԗ[@23HOL` drWn'P=|K8yhO|V;FƝV`kcW$=E.DcdMT9JYJWcA!ASч6 8Hwtm-쁗t?}%WdvEt؊ ]qi3un*/M3z2\.9GSAsڱΦwN0 .PjܛG:I dt3><ni^z6~70#lGd[α_\1T{O**ӝZbRԲuaȐIOG~YGԝ/|߇VvTZ%| x;ӯ?F;Ъꪱ~o%zjFɐhNZ)<]g&R!P$zkk.cJ  !NgL{Uz(L6I-{jN N͉CR,S@^-fs%y -E$ jfD|Uk% c4Aql&M&dZ/^u@7^-`(O2S"dDHP Sr3Y7V 㳊"8Zh{΋AYPlkX$ANJBtK{S'{"6"!\~`J:\l-P.:@o!Ltn|-{RVLLE:8p6(dt RA"繮h.z=>)։ܜT.b R8N񓞾򗳇RCܮ ؠZWQ"*AhtjrHcúTL$G"vm<]Q3\+{KǖQakOq.}D{Ix%wT󹋩B*[ußC>x[hɪ(]}c몭1tף-YgWkkǺV\YshɥtXL-)Sp\ɡ$AQj2;k{KDAnrTwN7IwCGU?K-oC"9\NxZ$|V *3?Mߖ뿿^E EsirQoYDͦuҜtw◑Em@su&4s=s6ɿi*GS'>iuŠHU 0kc?7T6/^W=%'t|ix.uB"!vdCfOoxjsAAo(ev2CT"hhRPb#u%em.=ͤWd\ِgN \WA3t7?; [7elB'3 ^T$|~1.mcmmlz*Zf=VJLBi0V&Uo7&gm%\Z{$S,-F#a0%ubʪB-'~K//39C3A!YAAF L_lO]Oxn PtR1MP z'|JvR QHy[iV z3i`,~GNCXz]B )mlo:%m ql } u9..tبǍ \LC& R!Ř6j_A-ZV4(b/^ C᭟{f/ٯ6\ON,B68T୭wPx ЬzzTigw1?0A+* 9=-#*9/RJC(ayQƇ|53LJ=WÅ|O[Ln~4ҁ>ɡnu N'WUEnL/xA#.A R"EWHMIOɬ,k4!"w7-5MXk 2z~Oo+Ri1(Jܔ߆ q:z VQ)^> stream xkLSgϡ֡k umqMt` T(ۡr)r@PJV0ٜx,[\\eY,]i=xH6˾˛I0q"dUd5d9!qd)K И=--Q8$ZdIFID}kk$~yC "aSzZS\F\6whh,g[ƀ@<js#6Q6VV: B7&]yLdzM&jb`ٺTUf=";[jm 1c Cgc+q΃իtW?| wį}o̦LDa;Y>}a&QͲ&5@5::p3 Ws>AfP4eQ`vYi (92;rϿ_ktiJ ʛ#Gy'ڈUV!i& 5D| ˩#q#zdJFI8Jm14bP+}y, O@Tȡ">M߂V𷐾ș_hma)C9=HqsҖm FDעZ9eP=eq GǠ.Le,<>OTTzuAUwh;> stream xW TS־!psU!:^:8Zu@Q(uCdp2 0ZP['5(j,VHݷ}7Z=k|@ 9yxv0}͍p,Wp ZJ8-{u!7F k!0*m!v$AhdshX,_";~…L1Ob#EP?y$ryآY L2%S+{w?Yn!ru>~})ٻ11$9,\2B7v:=i sߞ΂-t3f"׉M}HL&񗫑W@t4N3%#T?`;l-gNXd:Xœ>xvo޺0m#ˇH2pyq#hr]UǤMMgT*A&~MqaWOx;Gd9 QSEBü0 >xَEElVlf\ "֔ 07, }򅫷/; %?e$>'! Ol6VZU欷{,;ӥ,@b]U|}c1xX8XcqVR*P ŕ|>Vr%uBG׶ڌ_9ąaFO яuFQ2mmG >Xփ M;` r =ܺȼ"TN8RX؏8-6) .w2v1xH!k3"Lc`ؾX1[/5`TO%n d-~@-?ȒeXUQUuO) bԱ7LXbu(>gŝ)_'lgaƂ2&pDIP&Cuc!A0 Ӻ~0=#iX`>>^pDYv*ɷn߾qaH3b 7rD-A+M`w\s ;<=+_vE!A; HƖrTPwv6t>37 QE]t6 Q2T[#CJY),nns"r U SEC(Q:+c-o[yյG53TwDEB)rpFx}\^8pd408Yt%+.CGXIKYUIx^'a(GyV_aH__P=t`raC`P:>9EV2f\X yQxeo3Fr{@@CPZ^"IKm?Ճ뎡dV-)@TNS s`ls+pMӪjD $))RvhU)qs"c?PJΆ,AZTL] ^Fo>|٢Qq,Y/.[R\-Us<+x;u}tD_MArFKSk=7:/BE!szeVVP/3^ B$HRQf5\Nh`kfTf΄e|f FZW\3~{k2#MƜyXi\LT6MɡhZv.{JB_ G7[>BI3F 3/P /Qmy]o3'ndxpPdV5zR>k-v՗Mos¥'ޞl j7#QX=+8pHVzQMI[3vq|iq4+DR\rd8$)':zU(|Q[k9&!קl6V)(d*QJ,J*ТLt A e<_We+KQ;: ^sr?{'ueKg.FG~8pg[䣓mz߁u&#ԀNP/2x`tXA ))>w.jP]hYD>jq ZySw+"8MQ E/\EyLb\_0{]v׵?_'rAx­x+?gRYZחM$l?@'3D/\~JTf2r)\% Y3:?kSe!YIfHx<ÀY{4,{׷yݽj7|nApI&I'^R51i <ai/$y0#1D_ًWzAz 9`Lú0[`ɽy]7͛q. %B!W0/~ƵK ΄ٹEUDkeHeݣNF~ť(T좰 H4?lL bjsIn@5s>5/ %#PzF=n+-꫾.||"xP*IN_i(8jj?ms,~߂5s;#vz-;yXs׷:`qk/KiΔ\e~m 9LL1Du L9ȗڍi vIpF0lCɹ.F JHQfgayu7yfxޔtRrհ@)C];՛Z|І=6#q(QC5*5+Ӭ/ʘC:}<9J9R$MQd3Bh"!F]v(LlHLMHCPqFRgHZ_3>WU^. 4VgCfҚk&͢nˋ8VS)XvUsrՙh\B qL8æ/1wHkB:DPuXQD*x Ը Rjr0# 8|XZ@\aq32&zh=  )endstream endobj 58 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 343 >> stream xcd`ab`ddp 44~H3a!3,innO}=C9(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU:UJ;)槤1000103012)ٽgfD+n ~ߍپBߕپ qw1([tᏀ9^;i: r\,y8O00i{^endstream endobj 59 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 445 >> stream xcd`ab`ddtu14qH3a!֏HVY~'Yν|<<,kh }/=C9(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU9Tp-(-I-ROI-c```ʯb``9%nˏ[7^x;ey>SΉ߂c~k)eG.]BJݷm}f,=ۦ47gA|IxhqD7ߏݛ+qݏf3~N=cv}wfά~Xk7Soonjm=Gq1l%9 =nilc'-b>s4>endstream endobj 60 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1141 >> stream xm{LSw若\]-{L0`QCrg_J+QS-Z(Ju,:&4˲L`E6w9矓 ZmMyFY.nm9vH-@|;_ql{Mͦ 2PƷ_EW>p5Ti2,vSK++;H7H66zJkjehF>βCVYb塞 N5НK2Y@S/H&-T1 SOt:`F ;;bX/reL=*qba!;z?v\fNһ dxn‡$1 (w ,FSr4=K ˁ݊/B@\^tI_Z()Bh" \XU=UfÀuC)UȈ2RV Kޱ;@h< 9Xzv~^~ 3vr;o9Ҏ{}PG0;Շ{<6Vzsnbh=*x305)1&5pTz4o xpv);צנ}^اQ0*"hgx ]RmE ~m>|R*ɳۡQOHF{9_z ''_z12x .~mZ?i ZYH{21 V]WCLOΌƝmF30V;CvrpnF`l<4~)(m XUyXŮt\@<{Ѣc%7ndAZcƒI&K@=pWmdw[E Kӷ(0=s*"U(} hsU#CLG :=XZJhrAmywm;2gi&iI]ǡWd;<@[ ޟ7YaNR"\+8(yk/i6QnJ  endstream endobj 61 0 obj << /Type /XRef /Length 248 /W [ 1 2 1 ] /Info 3 0 R /Root 2 0 R /Size 62 /ID [] >> stream       !"#$%&'()*+,&-W8fU/YYbgBbxG endstream endobj startxref 46151 %%EOF zoo/inst/doc/zoo-read.pdf0000644000175400001440000023155313224636554015234 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 2936 /Filter /FlateDecode /N 84 /First 683 >> stream xZ[SF~5&^=C ) M ^$_=2:LcAwa>X`! `@2Ŕ1L3D0!fLxL(g~L7 ccɂ0Ļ, 4 ej?b{<@Zp&C13xjfZa*DT4Q*V"XL0,&:ŌF06"@x@zhR( d3#O0QHfgB"ذȓ >BA">(1G 2`Qd"I%ZE*)uq,< $#D< "|Y$ XE$J0 lYЀ,sR\ le]ǣK`e{4Y'i",Ybl'/z>[{8ϳ>g-9PătnY:Yp^y`vTg'І6' ۦm;M 2\?#ٰPj``)'a>Z\S@ =YOT5Kк<\ ~㬰"g z2N2 aa}7C7b .%|5#[2?:$3`RǬBl7ivO{x"ݪWܺ 듽W?llQdh$Y^l]@v۶5Tߏ%p$J{ rɸ FvLg 7yO♆>iD(~Lfi.R+[qQD<̟"4ˆp7_}-H:+L.!Njom]>x?tr ??Oys(" K>W|gyn?ϓ[^"S~o6rR|;'"7+p"=+ ;Qhc6IC-8F^@5M0|;; `):tr1˓;XutaxaRʺR{mˠ@ p #vqfﺤT%' v @5EEdOI!.?bԎ6kؐ :JUS>?>28PKuE6TiϢ' ;a˽ yW B!tUxr1_"&)mFJy])k%"Ts}kjBɦ5 7ptk#~O{~r*D2> stream GPL Ghostscript 9.22 irregular time series, daily data, weekly data, data frame, text file 2018-01-08T10:22:50+01:00 2018-01-08T10:22:50+01:00 LaTeX with hyperref package Reading Data in zooGabor Grothendieck, Achim Zeileis endstream endobj 87 0 obj << /Filter /FlateDecode /Length 3672 >> stream x[Yo~'#ͳv7 '@  W\+Y_SU}UP#dža9죮nوQn=~su<7g~\n~FQIk6gica۳/;1~x?h! ôVH5`^ wW۝vr|uQl[.wf0&F d՜NcH۝R`Vr*\SRj3jtY->Ȩ }?}bD }yJ<|>RSJDeTq"[<3x=|_V,ĒQ fhԣs&d" &Z3fRM$ * \$hin D3~=>.Tbf+{w[0E%bU'AUNLxz6H ٞ q޾}MZl͂TЀGZ"hz>7y a#|)eHϾ8`@gg`tqmnϬRV=48\|I7zznA@1cDT&*!Č9LY$`T7 vҺe.ؔJ=g۾m5Is2h=灅уS@u&)pz'ÑΑ2C.gtJplSRw;ԳMƥ2|Șn~0K?ơDC%c., >ZʣA&' lOe@&M{b}g"&hF K@֎20'Bux 1u<}Q:&""*䝥6*aa~E."5l5 1}22^[V׸%>&R6FlV\l{n;m FMVmmL9ebEf\B2h_GcPG?6.IdJ987ހ 55`_0y$v-|nf\S7(NI;DY.1󼫚xe9K]/H)FMu~(˙/9l a5%.6W Syo>3"pi M%TLA&QW,(nV3^V(~TV q@L`)~&GS$ 9m;\ɎY6b4txƠ=R`M2bdQCLfCDKrÜhv>Wv$wW.{G=:Of}- tvBR0@{ ˆi\O% NSr᪆YlgbﯶKh0G ^,ɑāD.7Dq,YVHN=9΃`\c2ܳt~ 5,0bxVhE$3;A'%UUeǙ /SstIqPB]g){u*Z)꺎nX\C5gs^jNf:zHuÔtfs;Mu}K(j&5 ZJ *oOF`@ YXUc_ߧ-f豁[@MP>Lv&?4p]l!}1QPq~lS=DN' M#ʉie2;P;p >kKS)e⨝U%d5qZۓhDVWfz*Fz-(Ÿo3rNAof'튢BVq4#*#s)n+Rߓ6z,ݶKaL&mАBxxvbm]bè_XuB{)jv(o fp8]€89rxqtiMrP)+QIwWmz[yHJ6rt%/ch= lpRtcWe^,#c2n690F7 [9R)bi]`<ҺG]<^Ԡgj4TyISNQDGiZR"jif;9]n-mRjpkX({|Urߧ}-3źicBDb:K$dqNBIet8buߟ2Y !ǰZ1||,ebFGN!nì#oOR^6ƫ)A˥P 7|4]B؃Uq6J{#=X!f*0̃5;n G*,Beh ؕ]  M+"2!- 2)ϛS{V\! GkX>2s6=>Tmك\C2XT[Pum+ A 0]Ǐ]<徎Pt^)?0BON`]HYhVN-!H$]1 ;V.3` Qό鯇:4o@EѪ# \ OtϽ(v:uw^"doR?{`#fO6go[3 **ջ'N?+Šv1noH}r"};كVjdkL}.S9VfKƑa MjKt`/A,Q^CDM[8d'xRP>=KZu=Ϸbz{5V=+:}>]OtlM$6e%@> stream xTT8 "\wر$XĂXXf*MWʰ^` i>&cF/%%ou)go1H$uǼƏqqȮWSd+Ot }̥`n>aT(t$fGT" =q 󏰲;j,vvV+}{U!V`Ud7'"-΍ {{,>>Ho+А `|s  GmafEH#zo 77޴_؂a&17f04f cle1+wGf83.fYϸ2(f43c8ƒy/L1dLdIrz!CzRhV2%.ev&[pLL٘g&-*aÎXi9|cG/fZ}3k$>^sD{8ԠMĐi@̀(GuWcվk>-)P/lRެ{ m CY,y(ȑI[ %(E FTQёM<hz,[٪9uރU~NG'?NM 8h5X)fJJL!/<5Hp 'i[J^Rt`q p܇d'n X^|3؇p+F@x wr78Ha,?gw:tJa-GKJj;/˟z-Stq|yjh'٠_[FxS)r[+dr q` x}.@S!!Y 1>^_ѽ[ΪPR9Y u>lYZmKnK^@lַ4h]ިC9^xD,"$AV)lF,P XqIۇT&.+!/>M ㅌdMzfhopd1pātEC>:xJ *m;X_4THʎ.2#eAS*hi p,/b<:j Zhc?j:uBvb>W 9 W\= (]h-qҾ?5õV` lQh=HݫJ JQf-utkwT*Z)0rGs.u+9d*%^8LGz;-W q aր˪$B)E?q*S d YܾIk}?;]pX4\l`ްtyFEqPe|`!u]U _P~'t˫ $(gC9rDrmKkd=,XF|+Z]%l[YTj 0YA] !:6vd3ᴤfX*+:4c< y(C)/S)uӂu=nEF*z:يʊmOQP /T8+2mgt'\ϑNlkvp_EΔ@X j8 1oEj4h'CJ\VVR2"p8]֦geeiT-m%g6w+qvDdɄo4ׄ\Govr_d7{rO33f"VYt=]DHU<iN{LMZ耮UaZ+7ۃ=ca|m.uVt/dDS(bg/+!-.+31MvMSp%E#D~bsj6cb>̽/1?v ʌr[!ICt*GK+bUJȘHλT?PVDžFf .FuYPҳyIm2ˊJ8/g͇y.p^D2oR¸?&lv 6[oo5w/Iizl526KlC뱣ţ?TU? I/쟴eƓ8T~ jŽP}B/Y5}_UiEjNbt&1KNPd(͍^i^W[Dh%k!Y bw8E';5y{4t:|&UvگU4D=/.,*iL6 |! !b3ui3d-JA7i lyqYIF奂(Hlth7B r2rKGŧ݃^`0v{sK%͖=f8!e`&lwk!*烓5/j^|tѺO0jRF1H&cr6?| DU\)}Q^ WKiU.$'GEO c($ԊLXQ ŠuDjJ =Ug׭ 4khm\BKtפˌԸŧjB<\y[(+BvͬnX7k!LgPu!ԙC=ZtRAITA1⢁jGGxuJ>!R,:~@m;qGOTMiٙ'tv|=]#i}IYQYڴL@ U@8Q>pOqyS q>:F IyڿQēDN$JQA@rY B82?2Z$nXNv3 LM[ QRk>,܂a{GKendstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 769 >> stream x]HSqdz-[3A_N􁑩e!ZT+LˢyږnǶckݫfEiA)jM(, 0袻//ZEAU7/ y8! ͫ~lt>GDNӑDySbk #x0hBg8,Ixs{J;T)ɶ\Z,NK˔]i<]V5zTH)~)iCU+RS}>_MQ< ˓%SuHe9"I9[vZ]24+*UHyJqBsO H!B6#"\3>&CP~@3PQ51޼@[ ~ئ֢ml4Ǣj|4!x1,䠬C]dJǙtn 47`5t茴t& p]8q6OQ1 6RWlɗ,L9Qag:>xwn܁{n+o;EP W-;AoG2Fӛ˨(uwv,*zsgemq KA&J_ s}QX!M6j/?zXl4&뢲=iT 'OOvd*CPp3'7_/ L5р2ӹ -jlL8ڈ0?X @ͭD|+\E@G.z+b?lFvZІ%Vܪ".j2: ­ۆ#!Qendstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6691 >> stream xYgt׺!P XئLt@j(7ް-wmȖIr/I%ئKhI %@ g}6]{?-̜콿T@ -Xu ??DXFўf77ސ% 졏=x(!P N[=0(eYfw\(zqޟ[*kׅn:yig̜cR0}FfQR#ԇߨ5Hj-5ZGSc Xj#O6S -Dj!>D-\%Rj5F-S+Lʍ@9Pb]ޣ)'ʙH NI=ՏOvP=)`q=. [{icxQ-f2w<{ ;k{~n׿p@O.3o-g I޻8ֱS3=a` zP9cHɕqҾ= ,h_4 aU^"$R};~vs 4`>-(Y)h% Q1Reȱq,ZeC3h  +4Z])̨ G˱ ęIm#LӪm8J[4 5P"4 88]3i]'n}[8ƞWM$.+CP0bơwP_"1#;Q<4^8Y}pa2 VTaS}K>)(~|b_4hS$AL!%ApYXJi7:&#Ix&r0e3HP*]y,HI64o::ŏ*< O^y(+쮣 a/x펠nך tغ[`Pߞ">=%'s3Vp)cGsl.!I2vi\1+LB``6))S@,ױN$2;(F3a!5;'䀁EHo%Jǒ x0xȾ=Nj 粡 QwuDYPn|m1q&IdZԊHĘx)Ȗ#?LPEh,մika>Ywnf H?kmZNMH&ܰXa*nh7C$/BfLs '>8V&MBKP$A{/ H MC] `Z[9=ɍJFSg(>CXc֝DXl 3#qD L2dKE9Me%Ղ!`>NHS% ~DQ-)9;ɼ4ir*%dN{K$ H}L2KEYe&GNEDϷ//8 ^}6}nOhqi&t(s?tţ4?9J<OMSxuμs' ңp v $(uGhGˣDYR1Y\G~S^ĝZGsppo_ڢ\Et# ȖUq2>鿸i ̉= 4Mdl):K*"r휎b]i4B/L;BG ^DOݺx/7A9Ys`ωNں =G /D2k[ٚlLue"1"[]1Gҳ~EP' [PU~u&Ǩ1 ۴ $oQ@N'jPj{K^HmcيP4#$mf @vAvu$v[aUG-%MceX6f1Uf$\45d\0&U4H!(S&(yqpx,&qfwglvq!KƩ+jvz[֏K@gXc\6:͸r v t[6۷ƻ ]%ҫC9r wsV`f-r_*'k+mIMӑ`, NlR.T.<D]!6&dGltT]4+P#,ZOmgҠ@XۻYn Abjjz;k,C<159SbӜ_ Is@oCT;]䫠QzY ՟vX YkјZU՝sZ(R05QNDV'Y95W]ߝ@6`zv۬fe.e#|cicGbJ[7=LyED9瀗{b<1Se,4Ee{OʯCYoѭP < :+T܉{^FXBexLSoIZYg-Sժ̔X턅ȘU&d1@%YDŽ?3Ү 4CH _ dWa7Bc+%K=Z^L5gJA0m|DgƢwZO\T6q>JȊZ˹{?ω_w&؀BŅM\0&3 .|m!RaӌJ缵 J:Gض#dh#6mHf 葓C`\"n&K{gsDxqΩ{>8 wOKi4 qπtXy=װ1⧣'nS =7Mz'Hzȼp0Gܯ ^]RjtTEL:[xTQ *%^ !h:#$sNhH hсailr\4{n`^A~E " ?!<@B1Xb!aea63MHWqA#\!6o}L3 $ }Y@Ka?z"/Lē" CS?.TF~yG4c\+KYtG? ~>;+R.%+>ؚR}uK@ㆅ7 0=;W$Н]8QK!EWX4G C$[P+Q9:W"4nq·)(OZs*UcAi:yQEyTx^Ui(5Ij#P쌒Ą 1~,dCU~o~e%0\ђU%iݜSA;tjyVRʼXO7譓3qѢ<Ĉ)-ĮJ_fuͦcj a%5/Єd|؉{Z$0mǛH:_h)tnB[ \Ϡ=mWko^/(~+YbcA jBf안 QPYDd1Rk24=.Ou8m(^N,~ײ$uzM4 Pu#hg)\i gL:c)W㚌Cd!83>nV{Yr-KymQedYz继D|/3Co$ ȭElBQI>}ہDqдF4*H U,C Cpqp{ mV=."]xmt"(U[4jA=SSS7x縄8r]s:u]u X;dHg_;WX`5*ad'l6S+ՅrHؤbɆb{'>柀ҞFع [:YNx*V ,V.uKy0@qqti\#U^ dg v'].v6/s:w~Jz{=;|e>i_˚jcR NR`WvCW/H ΔϜ{8TQc&⢔۝wQ]!]wA_oeV7>Ce΁a^>{N·?7\ɹ ~)9x%Dхka.,'H^,d5R8%S^"wjp+>!@캞<긙 ˻2ŕ |?v UYbwpz+ӂo_I;w;#w۹?yQЕ77ǛUVrU_l9 pu+$xˉ׊viQ-o%ʔfxH_JD#P_/ZQ/Їtc @;5g ݙrzȹ,zcQwY\.if)kjuDu2JVe@:C C.σrN1x0OyI2-F4GâC<'=^9,9Y`4{ FةVSq϶‰.qr+?>ⷒ&)X9j`pۃ$c2%ueKroB )H8 dxP0H<C1NN̮uNA$1`Q3mPΜKۺ*3dj9r.3&4ZVw(%Dla֎8ŒW绿7rqO1YoNm\V:8kڂ w6\&3͏GX˿{`E]cCh<|rKt,Qd'S.T1u[=8o?A=9akYMmz1U -5G4Ѹܣ8${9lcfn;(k!P{.:,,::,:7{Ϭ+1@LJvȌVyGDFG4w'h4h!)+$cs%St[ԋ o 8%BP @PҥY:Eb,ۄ{`!yspSwoY!0ٺ<F٭HM9٭B} "+KUe3x `sǸ?vH U[K$;z#!|oυȓ/:, ÍzC߫åZzA取|G}$_;^HcDu9U*H{!;ѳ{.79"`sreUUYZ&ޛâZ# tu@:Ng=5 .+/Z;FIJOwBAʲ5-DC PաUY\q''k[gNB~Y;SbSV OJMUr?s~f2*gyAZѮBg/3 QXQQ}iK+^=gc,犾O_o3endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2458 >> stream xmV PSg1$bZI##7AQQvt Z" (@" 9 >y$ mVE>ũv][m\wv'}vw+b\F1"]wv0Q$L%Ltxd2kS~"71tL}ώŽaX$d\٣&&u*XoՂŋQ-]ZMNUG):e*Dӫ,??++k^tJ<6a*+QVmOfǩ5:Նx˃{J'CUk⵩ (VѦ2ގΎoLH ٽa2ML e˜ٌ?YlgV3L ˬe?&Ȍ0.L.T :0K$\%K%K5!6qյL( g:QY:?r@ŅܒeFH,%ݦ9XTKE#ZU2SCKn:g䱐@)ill؝>O](AA#FUK;Źbl4lxEf.W d 5'lsxR> KVJ"Xy@9pM`e*\]m7w2%`kоWNqK] :&Wx>QxʄuNOP6NJ,8IcvA?\ʇn6dT.%ahV'bs2a&LlqoŃŻA ㉈͆'+,pVi㥖f8;˪nCqMKIC v׈zv S,Gƭ/z>0"]JlR%31$5U%[‡TKRRt[ŀr >GzX !0e% 7cU2SʳmKOCgT1v ˩ҘobJi}"P!FB/]BnDJ~`Kqs8ނp,4S= ?(/Hk*t}P&WB7Y-]OX-J>F/Ycu 8@fL?S3Gg] >yXydpaRLxNU!;4)UUW <ڸTZfјGbXyFVbwHLɐ Q$g-}zAfd' |`.X4.+70E8EHϘYZzΨ/KR+L_I b8wY"+<p"z?wsc2ö,+{zWdL@lISc"!.u~N"lǔdBন.SLZJJ%%)o*.0xcCd\`2eq ݎkV>0 K+ך~:Q:GgiakvQ;8V/9 ^c&^ >75+),G<<|r@o2)z/CDIIW v:R6\nvl_sLm[˓&S)d>EN77px݅y-tHҙq>{r]*45V\bPoB *fÝmwma'?M'cɄ񏸰'(Xg؜D#}am=cW6x՜laih +qx؎_+p7S OȻ$Udfa*qF+_kw1拤[pK~k7&vC` /miC޲ӽqq5A}0nV,==pXkDVM@8M5={cfc8 3'NϱFFw*ѵ+iӷ, iSgѨ I v{r^&W`ܽr\mʐƍ0h*2op ֗6B8ⶽuex9]jxNSe\yN5,]p7ڜ fώ 7ڢwջvY]J*|n'ٓe=;Lah=<~,LWJلéd*WFtvjԠ o{AsGh<@vN[N|jлPi: eTsNX*+{{> stream xXXT׶>(QP9{1J(*00 0taSeMcW,$DSI4j:0Ln|^>Μ=Qf(H$qrsw1] aHOxV {w5eoK,¬i4We%L m%B"RBB2?_lgٽ3vvA2^n^r_ /9y][W.6MPL "Y8aOk;[9$Xn+ְѩ?N!Aro[6oY0EQCB/9˗FD*,Snu޶+|V[&pm3g͞3yoٿ;~¢SN7);-j6OVQq;@&R:ʑrPTjF9SөRj&B͢\j5rޡSC)+JJ Xj85l(15EqTj5LYRC('ʌRRbD/ӯV TtYj*JçfEX`'!͠`9{ZwFH{aۂJrtLT&̢ɼ2o%[O)ÊmqqSL^IX<V_sW%X-:VQ5]c+Qs*C%|5 82:&]K>ap$ڟZsyğ_WF R Zu@ l8 CoLߦaM{its8VPJn-}jt;6\]p! mm+fdT-|AN,@ Yq Mb鏓':~+o\v>m~N%aKQm2-1%S@8u$,w$v Áp$Gj>e}L+L <ѾϊΌiBL+T2-L^H{(c/?syٓ.y 5;u81 z#Hr76x*xFuI(mKP.@QO''(WQ Hneb,JE6~U]-#IE 7HfrSw%|U*{-4x0fρ؆ǒ㬠I| [bIn$]e G{s[Vxcm %=vv>х.I8!= 2Xp'e)jSUYZ_h޺y{%ͩ8܏[.ho|bc}`qoE/t0ZwT'ӺUUp{ã}iX{1{U&j<.nh!^!} g+d9O. 23{!C6i6(r;i/x֎ܾǫ ȸaÁ(AҌB猺@wf'xsjrήj=A&,3nϻG!n ']yrOV%MxHt_5.jMhQ-ľ}Wۭ`qp/d!zP҃(РrܤKk ! 螴I$̰XpP-|z.&':nk0DpԳ.eF[)&(wZQ*I^Lxm, &$q_% T C:kEBXب_AC hexRUGy:.XA奝(@1!bgVP02o7E}]Nܕ-ϊ=lrm탌*&h Q!jCYU̫t>Zm7H_ [x"}?b 镘Coۛ MLMIC~[22*33P>b~:p1/=ĖM|'lCwof#!$r'%#mOڿk1+>"O @ ԛ*T;}y]zބچ4 <|SoV$ .liJɻ5X>%ƚ׿b;VHc Q&Kc7 O_ ?2),A*3qə֭n|, %!H#q^pVث⶧*Sm鴊$MJTH}=ix(evq`wul:CEL\ ڻQ.-[:hҊu@m lORpj0)㳠PX#C*Ĭ6WZn$ 0^!2$/cN5q;VV6tG1nͭgXͪ1j^gL ;"Rjַ|C,nUmbтWknvDrge'8; ;G+o*X̮:~ܑ#?=U6y3|,~y;bݼՔk k2rCSv#:yMt|LoFLYh2(^ȷXG ̜a {y6u\.YB'8w (eggf` Ď[tHy~KK%_[n" ќM6ؼ7S <[R*r"ޔ#ws?Ec_RԂ2 ܸ32wRJ6 &BWѧ}D٪G 5D#ZBuRIz1 J2vfR\Oyz|Xxw`ktHoZ{^nELKWI%MA?:bzϕy'* {/?-=yx&R"rEAeA 1{s-$6(OVoA\ByI\|\*諭Ϭ3c(d mɛ&b/A&?a6k  hhj^q+Pz~vgRVٌ BgowJ/O/K/uO P[ܒ\&-sAeCE-g˽ [qS'À)\VDAjeoֆ6$-:(ҺГKhܥ\'mHvyNOI NtPB1=F;7;`I$)be0fX\椏_^F֯,kڵQimU&-ÿmH(_` V> x.l/ e[ޤC1iߥEaᎫ'4j@ z[ z&kzd}քMZӿqCLQ?g?K_Nh 0YwwBa41,AB|!nm{)ήuGYRDƺ/#u.EȦUsZ送_EHêHEOd/<0D2DuhW$Q8!i=3hKܶ.voH?bwP*<¨'u V^ɗ6s_/Qw]aoݼ6]w + ־ yI۰4{GB:&=RBYyZIGn#e35@mhԉ??&%!Z'NtK.{ސP.k(L+Jŕ;|18k.<_B Bu[ <pp}rKŒ Jdũwfq}Փ>A|@L^#`Fcϧ\z 993ej*e؀OVJǜ ^QZ:a'G㟟ALtb1zn@1>~KBp`n0/$=8-!ݵVA`M)["X)FhWHHR;o9X~{G]/Ά"GmF%m0??1'§D ovbUG-7~E 9i')rE]meYSϧ FGAؓĉ`3~@8<=0`h[BMU2g#򓑏Iw_99{QVA勉%& I uxd+ o6 3l?0҂]٤K ƛ5h;x{5r*L&Gh%\` ڛ:#KU$a9ێy> stream xcd`ab`dddw 641~H3a!O/VY~'Y\|=<<<,k-={3#c~is~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWqr-(-I-ROI-c``` b`0f`bddS{='8[w%iKw8f|[Yw_/~7b"??Dlwo.y҅?|_8{!'nrq> stream xmLSgo-d`zo(ƩLT/(N79 ҖV.=mjΗ1/%9d.q&:\:}z9,f&&gfo_Ep&pKo8v쏋Abc³&L#4$DŽJgT+5Bx^|qzFƲTE2keyD)Ζh em9 ަʗ˴y+ Z IKTUSrmYLS&שZfILi/LUZi*L0 WiJ7VJemöc;TlæD/b ӅWb18:c $@nB΍XÜKx^'sSfCHE6$@v #؛OB*ܳ 8.jA!7g!ُD N@PmA1Ѻ\Kʵ|cfhbo%+jj|^ tl{N2uDJ.Eiá[/K)PHmu\ uxLڳrMN`H|r0glmi EE frWm?;YO{wV]3qy>FbHţ"^:,p6ir .bl/k p!|.[}ޞhyUj5Zcu[ _\ۡ\}O#{Jw @Ҫq^`.!Gs&XI瀣e%@CkdN9 α]d PYuPoC I-^uVRy!)}51ĶC 5wEn|Iz*:gy!`xL+HF)DPeC!&< D 9?cbV!. %< \ d|ƚnr9d]po+MR۶=>x8'G8u.piUt-?-93;5r$jd Q0mmh_% l}8".GVDڜl XMvFUl^[ɜVmfє`/y|d`8f|z*FSBHB+AtUw Ea94lL>D=,~Knk,|u3,ZZEd.eQiݑ$^N}9vJaZ|0endstream endobj 95 0 obj << /Filter /FlateDecode /Length 1613 >> stream xXsE ~Gxz[o-<0PS ;q8I%_vڳ754K&FJZ}VWcj =?=zˋW#8~OLIAiQǣd4n<= =A: tΧx:i@BD ڈ"=hPZi^kreD'MF'fa3VimH6Hm} /ᡖ9s2GXM=ce^M2('d* -Y ʊSLA\%mkEh ʀŭce˘Fhƍ6z.RA!*'^fl,-^8F%vXj1hY$ht|ׅ7\2`MѝĐs5Lw0sGM/6^y1.^:Tb*d#ys*r,-_ED$q._$xߖoj=|şWB/zeMj.uNI6Z!7_KoDz;)mj NQXϫ1[AL_o_˗FVrJtL sPdxpY'l(v3 ?2ߓuh@=S~ۧ72# А;L@lrSe8ΥVZ~3qn`|jMfθ1Cw)b'躑&|kRARq#[.POaik!sP@w {5۰{߀~T;冬NZLY\q9Q2#^ɻ'JL C.(Y^ :۽Ku^jOh5iuU./I8?nox^Ӫ@_tMY.8 !j} r<\l]ԊdO^VV흱|&Bi6 ]*JRyz^unAr2db+ޥjc.v0_}sҡk g  %kUO]H TYyg5=k# (I$7(4Va?'@}#?ŗ,mX GtiO=KpvZ:ZtVh'Uk}vϫ^E~^3\0ܸ.,]1,,T7U`SoEXy5fa]u^rpbP\ 3 qL;T24 .EudF!2T.M*Ky}vԗ6uQw Sr[2Atwɤ+ùC&C}LjfVjdj(!ˤLxOX>Жp}+bUT }\;i&{5Vw ;>kCׂ6ϼ}1BWW#x-`_>z߾fi֢J5*Vw|^ x?,NJ=[͢f E8SVxWvK{yEho-ۈSrFqwݙmQ,ąk!f|?Vp^};}s!p`ކ̏hmDg ʡendstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2817 >> stream xV p^!K,`L A@8& H 6`#8\6)!_ֽou2e,˒/s円+CBr4GBU~5Й0L;;;;;}QH40qy격S_#EQb͒Qİ'^h1DGu<;ӨW||DyZSb^~I*+[7~K|ԙ3gL6e̸yjejKzntMR>rR󶨔s5Y'tIIyYOө4q)"eef¼\M܊t2Q=Z0ny^0 r%i3d*STsb4:L&*bw?u@jZI+bx*O ]G>n!71GLa($G2*p-6fxP^/>N~dr1b"{1*g-1ZR^&Iz%`b q@T[i+R(M PxyU+W_“KxѫQ׌i^14fb@Ew}.kJXa-r:`~|Y0%FdVZ-@J`slO~<\CKWTuhO5}@LU%#!7wt7g.M[HKQ_n>RO2[ Nh@E $`ֶ * {SKVMpVϥ%7fg%聥 ~&1V䰺oRu^Eի'4޲PIQ\XZ Hn_7^)L C k\ vEL$ a~lXođdQq:/dY\,a Ko0iS|&ZY97;ȉxY46BSH<<DirUnp xf?fʲUe 9M9ě:IHBo]>vn+t0z/B1Beh1hx-hY6qo'Ӵ6t#nKU_a8wVۼޛd2YQ`,d*Lko*iB3"b Y L.(Rk 4zjڼ y5،qIKRK=p{s[)=j;<ݱ~޴JS ˀ3xDUّO_V,|K.UxSfQ[r[Kܼ({O@[x51:Y"O(gYVN3B>os=~G( y4hn(S̾lGڎyѥE @tp5CH"*]WᲵ%dBm/$v,ƣp4!ȖAGCkM6e*͊mI)Vhhķug51ΓO} X<C>^pƩn7_ds'!1+6pwSKdt1;r]d "Hr2{d o4'i`gV7u 2YDI#DGਏf} m02VE9U@nXԎWb&Y~>iY58Ռ6^՝hF]'Ή>Af dUuyi26U GՒ"צ)}Ѩ@UL*x6Kn4!^*JCN;oBTCl}y%Kځ Xj&i2 c$wL6 ? +^LKˇWbމg|d f6Π~,6·3k+8'hps2NEKD_Ⱦܿ/gB&EiCӣ׳lg*g\k0`h!]V ؅MZJ&-`ZFȗ>~No^mԳJZQVR>p55C,)e^IP[0c|XcgT DCŨ7"56e6 <c?=?NقzOraFS> stream xcd`ab`ddtu14qH3a!֏HVY~'Y\ |<<,kh }/=C9(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU9Tp-(-I-ROI-c```ʯb``9%nˏ[7^x;ey>SΉ߂c~k)eG.]BJݷm}f,=ۦ47gA|IxhqD7ߏݛ+qݏf3~N=cv}wfά~Xk7Soonjm=Gq1l%9 =nilc'-b>s4>1A2endstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6602 >> stream xY XS׶>1x|=jhUy!$v&@0SjֶV^ímmǷN&k}̇쬳ֿֿ94o0&oUPt WǽO0:6)14o0$4> bn ]0~QB⒤)A++SCV6|] 6Eo0q)SM2cYo;,`wFncαv'jb&O!foka:b8Al 6#M(b3Ol%6b1N,$ bb 1XJL&S bN"f}D??Aщ%ě B@ &H-!X+э z79DO1MĹ#:b{iV_$AvݥCSuM[B?cT7Ԟ==>}M7_Ekh7k,yA|o9~yNaS~} U*wF9}Kkjs(d*HѾvR kA,u @]dR "cj@1lŢ7.tѼJIt Ɋ7 w;c&XZolw2ߛ;oޝ,>( fnZ-`Iޖ䜃暪;u,OM*Y/ŝk⏼ k  TW؄ ';nRF~T" Kh .ߝ` F>‡S9H\*JI_#e疦k#Ҷ0]E>)[wga LMpƫt޽vp`> ;Ϲ6A=Po"%?^'$C;%s֥6,;h4;iyLv⇮ jIMc8V<) E2`w7GS܉9xa|ݤuF].SLy"Uh3bn"3{aVZc"dctjmPN&Y.Vc72(ǻ fI"! P vC`''cAqȫ%-^%$QtK$Y5-ֳpds "&NuT;N&G^EQ/\ Ҩ_.$DC';DwY VFJdDj5h F?ꉺbboک#R6 6y)=$[ͧeܽي%J)|͆%r=w;xp?lRl*ަ*5'7_]b@5N **,R/42+u>j ϻzvc@g?/2Ih$>/t6AOSCHS\q;O.NU({~n6^B*e- uˎwhXKA*hzӽHMjp6-pm}< uŏIl;nZ Hpҧ2^Oi챬3JEwn-*gT6%DMb&]dQfYi! pwRj iyk|HU]Dh!@ЛsNUUds\\z9,d^,֤ILxOߒ!HN|g}*_\qBW1ҹ TZ,9@o(a_v< urr?%@a$3NHWW#>$qʸ>/*_'_2%ci!Lc+hgMZS~r/ҹ6˩;b*P׽ b`S萧~sE^km >V8nbE]=Dэ ۦ<焗J[ʁzisVd9}$ВCEkpTQ˶"~@W A|hPg_ɱˏj`cڵD pX)(8JJ Rn&]F+ `nYv AfڤV) OJU (?Q~tl?̔6eT{J"`Jb}C+#ia)q{39g c`_v7.#t ܭ *| 4Md RnpbA z “_$3kl9N;礵ss: Sv8gz~GVb&wzAin8}{I VƹGk`_.+ ߮$2W^YWzI;֖ h}jtt}T)T )<&5Bsoȭ ߟe^6W|Nyt8>ILS0{vjW`Ș끺iuRAkCvt 31ƾOr2:4TDc -N*(T:!NG>;bJ)->re P_0uBz_qB4Dn~/'ߐ\_54P~qm.(TU Hcc2dQZb+1u ^זB22Ӂ7Xs75+/"s=$|qǯoϱhjZپK Go̿ ֪rʼrV%v/!ǿ߹^8Y\rI5{ i*IbDŽz=|b0ҿ<6śdo.Ǝ5<ݽp{z4/@>֋>HC޵(N`nj圃?EsH6}\VNM?kEQqLR%!1d0 @ J衊zǍ&r~P[[-؃5?!]%ONaKXt%6]WD~̔ 8ul>HZN;^hq';[_8w~+׮^ƠխJ-GZ\`a㜙AwrKۈ*@ 3&񓥍MpJ|IeKa rp-=:MpW@=,*([Fq|>JV 2=$)-A&9[,xT5[yfkIaA0R g.Bo}KpC͗Ho\M~YC̎f@ҩ>H:tNY fZ."Xc6YcQ$By`_kw[6[2Jek>7Uqd{]uu>Ө<A ^wc^KP= _:w.:+^epȍ.c\%,OfkcʯDUPj)ɢ7\ƹ*$@ɨhPrc2hEGX>C[ҋѿZdU Ps *6L /q)l[4-qzמ9#wFaw mGcEp4ΣI>}'=]yoz"/|ޏ`7OVc;v* >wju'EˀֽǾ(z3 8/t}?YpM3<-/Uykvn<^bv D;P׬d_ TOK J@Gγ|p /~D dM +??bmBƣ/;_xzQs +x"2bU5IΕ!a%e(Q{ S`#6t; zQW ;!#0 !Hgg-Xr~7mF5ޫtfޓI%. T Ն.[D@ܒ_lE)G()#`6EVdD*"~k4 -ůj4.?"jƄP{>-1u y+c7φMc\b`KZ۸Rޜ&"CI%2kj`Z"8(/ z1tto,'"b,+o.αV\N]厍96DU*)6L r1Aۓmq q)5U5O9o_V\? nP7^DЛ#G;\ 殖|ؤKSJH R(Ya' [w '7g~/D{f,%MK,v>!q9ˇw/i}42~_p#!W>åk56,]Q,?eJ*ݲ> stream xYYs7~`0'fڜe9٪uXJ#9f؍!F$%3G-cވ1F}Ư#>~5y$/W'3PVFyKeeƳ ل7[m6o6`Bd+ WN:2jNLa[4m N6"T*7FE@}a$+ v7YA v s$g!;!Exod# 2fK${jhUmK}(0V6(xSսBtR32)Rc4}{lSaT\`lۭ;#Rh:SXc[aƼ84jX9ZlT[K72x ~Maq| n< vxB]h_ݞ{)׈4'qlqb㓋eO}Qi<>%tž&+.ʟDrl-01Eעqnx#cy!sR[qMulEnhnt˃՗hu7cp|P;@B;|95:HdAs06Adž҉inE0d4\tALS*1'z7Ԝ#JAe-RHR94$-cޕ6V#Ca(F(^xvsc9Di|p!&]gߓG#xi[_:e铜*xSFh©V%FDP2TcD(8W^~9,П(:|MOQZhx(\誦yU*W?nBݹ!Qen{~?2N|ƒn%eҡ߾H8=aUz"ul#\r(LVȪDW!}Ym%kAlv >o*%Z^[-Y'UH;&7vSizɇ6S(64Mt=Mk9*pNvN_{F L š+qK oApj?A0דp9gUP](dVSw]!/za)Aikԣf I)~LjIZ1/-zfgIMs|l%=<@z"OΪbj ˡubH(`b8<ۏ!r*찢c{Sa`5~}U0;x.jJ\ϷLu lށo7}G ![UrbDBp?E_CY"(?-(mm:?!vT5>u@︮zTg,@ZxZ];()n)sB[ 7H wH P#zE"Jl>NCW?Gqu&oFqGO_BZGJR5=?+zdqKاC/d#!G[fFI|xkusmRkyuN|Hp}ye&?endstream endobj 100 0 obj << /Filter /FlateDecode /Length 2196 >> stream xY[oK~_#Vya_r89(Y$$Ʒ^&ꞩorrW:u6a.Z9>xۙ_~Iyur5 6(Y)Aνmv5f*?.X޼Y,E+b09[։n֧ %dTNH#X,Vm 6F!CX:4kb2vd{zT-XWDm@R+ 0ƩtsM%HYj粀WI1'-TKR4W@[e618%K 6p2VF=_* NߧK2=q":mnn>f:F#;x$[meR/T樈< ex[ÅVΡx81lET#EMgn}@-JIŒ ,y=h|Ҫĉ^pdAmC,[&䌞J*\(hMv_$eTƙ$ْ]K/aoA¹%Aq0OfY&&ۦ sf&}%`ũ8js!BK~1>?0*x+~0|.sIzz;FuWB9SRGByGEMm)r 3ˠRrSIy zDWC  s}l WJ^tlJ5֋hl6FQbGYr1:K@wnWCps.K2SN5] 0D@SJ2)%T36D 3 f/4 GlL;p : B@<+n*}U1RVȀYs٤8)O.e Y3KjYicd$@*>|r%7`+eA8c}^S)ZC{3|O%^Ny[qNf Џ_Q {L~uD^yF fR*XE& (*&'6"[ tu-L}ށp%\珪:2~e#X@!u3~p.+tc{_JȮ [X{S&B=8 0搄} 6# Xc-fggLA"+ G>uK54&;6 qc'enC –!䏏:wo6 3PjkBy].CjV;YO*[Z=D6]\ 7, V&u!HK]@3"VzjCrAJmh qtp9EqEaC`'zC*yM'a\&<5vڔ#|zE2BጉoKҜ~k.8v`]o\{صyYݓ\BQmWsAKHAd2*o3BVy_N c,n|#ңMvl3Lڮy{R> stream xYIoTG#F\ғ0"e!  .H<^MT/U`"\jWWUW}=Ny)7GwɈwFF"q\~mtpx=7X )θ.(3폞'jd*]gx2UJvNhskO48cZ +M`[EeX8@$$`w[ ۜH Aɋ+k4]}Pjۋ=ۏS`Qq_PBx,NU!Wםѷň/`c;S ܍tbCIڸl 6\9ȭRD;3i<.ijىS.k~P" zIuAvhn:!hNA_# 8x s{%'YxĨpdw3-Yq&^J`Y1 smHfwxo/jcw6#@?K[t342X\ CeD`{Ɛ#(͹ :[@c<"ΏHnA`2粲|e?)r>hgj "GRrQ2R$ݟM8# ?MNCQT(rϦY]h$ќq)u_Ra`%Q j|+r'Ƥ ơ(I9.ik7]Sxnl= f)e$gAl}/p[WI-AmZ-4zE-L.]ZM[50c5E6d.Ct";]dVL hl?ʒIkvLRmZj+ K+7ٷ H6l_.B1+LDgb_dO7ihAbIs hfE ]~bw9x» m4 4tU6$=&..i2C4 ʻѩ%D!_J[H?@}K $|PJGHAnbwU'5NGu!DU {#GJ7}4opT'|e u,pڧ'iy6GفfS_+ARƎ R ~H!DA~ӆ}i)&%.͔ .O| 2茵jsE kn:6YNaSZw@2pvdG4I#lu,sKŵVo_7z*s(>XMH7")~k䇉5]\fcf+%8jC^=VOʜ5 ިxժyk>ѯ/endstream endobj 102 0 obj << /Filter /FlateDecode /Length 3092 >> stream x[o]A(zlF] m㢉p"ڵHՏwI*򃿬fwgמVXG,;>y-'l8fף?0R{4Ymk/2յ6auxj杲Ն9+d5a[\f}Ow:zƝt"v454idx꼭6XXL[a9 Wfx7 XM(pQݜ+^'„rFyS΅洓r{@Ua^C.5ROjp =R1$n˼cZaEϠqܯg*/]Qpܔi Q!. X̉]\aD>E8P (4\ZyCAʺ myZ`$y NN{ĻuCm0(ɠuPg(31(0+Md+Ir!BCFBW4\ѣNJ+!1{FGp wfb+QF@.·;hCHPA>{1H=|q6$dPulD2:*gF.KfM'#0H&H J+iC{1zNIѦw 2(H0(iKAyI}藒zNQv9w&S G?@&?(PB$|uqH3\}d*RdfHw=CԐP4άjR7DmZH!XJ{JCGjlvg^/u:JLu$2Q#I RD"iSEm#CT ) !ˋ"YʸȌ$S*@c:W&u{}&ZUK.w}Cp<1:U?0͟dHQCm#Jɽ#ސNŇH8vzO)#>GhG퉼5SD&o=G5GI޴> stream xko;p,t}?&ZҠ@K|``H,Zv_ߙݻҔn C4X{\tr.r5;?_ogbwr5.(Y~RΕqeBt*8cCa*L]ZKQTt^k8:N؜!A[\c)a\$"1D Ȣs™`rv4G7 I9 ĕ+՝^BĖI\҃S %lo@Rqja:gPY˟qﭶ]p^6 茉1ش }AUSFA ZP#4 ! %j@K\jvATTOߪ5Rӓ㏡'OOJLWA4=Tz`>IO *= :`=)A^P=ejTB8(YhcL9qbVx=Ūrov2Yz*t>8BF(K ]l8B*f2F8׬NrE*+ZH kJP;<^%*X#KpR*=Xsb}\Sq(2Q6/A!SIboBځ„>1M7VYZZߑ}5ܱo:i3=s7xErYg%Wv h>4s 1>ǐDלڈO rD;hTMexF[D |WUU&Q197;(C@'<XAf#u!+}QM*[J~a jBDxSV! $.#m, O|ČQZIPtB!YsU5?!H{2䮬XKz ;o}Yʂweit_AS3or+g{I<5Vu?er0d~ABi^ZH4*)<)J[ VN@*[@!M(RX4ZD;lPwZ H[z;ɩaK^~k &71胭t΁gv)d@AE *AIti9sK8de0vƒ%Q^VӮz:80a9nB5:-1? J)ԑuTtaL/\y9 rEus&)1N$ZmB@SyG6 D84gŴ*Ӝ + "h rCր9$> [RE0ˤBp0A`w*i0;.Au@`:8 17 ;^8J~PV; ZHr0 .S^HPJDNԯKsyr-_o0h{ 19L{idK> ĚҦbD^f!yqloark0tr1'D5."){M/C(y*E(@k՘Y\YQȝre^96M&3ñ3euv׃h0q|g7B|1zȔu!la[ Uz TW<*ed[^X7jK6IcgdїaV=4Wfp:΃qSy<#Ѥ+5Z knq=pfMUkbreIF?$0xwc0;L_&; 3|ĮW(rGmVQ=Rv3ei:IK!.} -|Vn;"}#u̬>%vUc;%MޱWG -e,&U{z5].jL%{S6bg@z?沏K 2nNEUVcsGP# :nOHn=&c竨[FUs??`endstream endobj 104 0 obj << /Filter /FlateDecode /Length 2750 >> stream x[Yo~'#&Q! )LGZ#6YTU,׻{ffX%i^>8쮮y$j9}h59j~m>R:(Gӽ2SyhzV0VXokҌ՛D"ݱ^j;c%:HlUQm5[) B<`{?xT-#w쀖ZY46Noj/D:8W"I'\|^;ܖcu- 1lCn#@ɳ1'6?;ϋ5lJF&1i9s~=/ >fUCgA]dDf T:.Kq|!(Ѳ: ɅǐmA p},hi% NWHB '17n%g]3Mf?H$:8Up׀2j;ivv2tauaYEz ]]%؛~Fɯ @酈KSqӔ=(MY s/+ Ir3㹖Eθfњ^?zZ%bH@k~{˫%.I. h/UwKWY+JbiCeAI , U.iGԓ|?ԓ'Ƅޡy[pK^er@Ƥ!I<x#\g)Mon NZ v?Kv &NnVs&R l,u W{փPD[ E*ܩ ?4\Rc ^cߚtzZ }Ťھ8-ޕPxҽ`qRJw4q͌GgcRbٿœ$&w] `oč@4O|L>>M uZ ,}Mvk$בlR_. 凅t#ҽ8>5KK_"#^ @X!K_ߖ M{0#}gXt(h.wxtcQ؄ۮ˒uqݡFZzmXT!jdU_tot>僂 y^6]VmKm L'6z OGq}}s 0DžIO{_?37۝$}V!w[([L BH [HE%!&iR3t lbT'9jFI`EM񜆞N?+|?%&0#O8*\`.co %^>f̬ܧricU]vC|FĹ/( $8=| GTBj{a1[_;W 'q Mvkv]uD#_n=|,I||$gތy(Ef'>]zFendstream endobj 105 0 obj << /Filter /FlateDecode /Length 1786 >> stream xX[o[E~#t @TT"a4 $v3;5mZ[zvgof>oDǿrһ=? MNߎ@A:Xi?zK;E_ (θ&(Hol`(]cl~:*%'tqkg Y +M`QEe3\|0˭M҂m0wǕ5^ǾA++E]ʞD](hAp_'j dǴqUCrd Z}*d⺱:b;XQʨ1?TF} q/d WN:8jOLaomlDPTKfTDo °W(+ ~7IA vuN@K6F,t1*\z%|GL :npl4P sn9cw0N9__MbF gA&$^Xyit& t)S$h<#ZsF*Er ~Y#PstJnVleۥi<[8;\|eٿW| 5U^e+$lei"er>㌀Zn:|ɗ;`so*3U?(ŠZj3k٥zo޷/Jv8!9*hH(ZESa)i),)fT٘Tb_qa E L KuW[ Ր;d(A+ffF'zb<#lgH;!XNA9k/{ t.S :aտx e%k@bqo*՘R?)uG*j{AGS9hmn4K Pp.p|+xH rcGJ)F(s)bdZ״5q:wu mK6k,\Vl7{FnnT徵ѷp2~ BW@η0dݟBć$>k.ip^Y5MNHK۟^:s4Áh`[jkpwhCRq(HEq*XʼA?ց}&czG$H< qnKZ~Wsm']~-Kw( &uj0^1M7|}AH/D^ P*)R;וtbC'p?n .BWP(vSU0[o[U$:N{=۞ B>dOp@vsN]>j1Ć U?N> stream xY[o[E~#"!s @"i6N3{9g本 A~h3;|3wSֳ×9xs2{?M:Z7 $t,Nx8㺠LXϘo,Hً +r;rbU\\rNaY ie ja d*% {u>!@l*Wփ 6!8'^| Nzx́,1oНVƝMLE* <Qp@VB5Ȇ+'{wuV pG7r>Xh^u" M"x.%YiͮKv;ʷvyodm ҃;(wxCsZpQ096$1jܱ)N9Pi(p lueGH#e)O8wCr 1}x:bl".4&蜾Xec;vyMrksF x.GW=.Hqs iB" 5T#Xq=ッ4{=s6`e|+l$y"$s?$_Zausn /CB]KuUW~ HX]#/Qܠx1Pf0i VAeL$dYƤ&^1AFL"5B4m 2 &zwcRD 3O}*tJuɹs RNs`@.q gqYrpPo$0ύ(Ft DK5µnNjk"pm/&*\"֮%\d%B= . {y(.q,ؠebsML*&>q-%I1DL?iQpCP\SfnΰFv +"taqQW8q/o_a*O*)L#iç-V<.S'a1&X_=\-!dSjt9><04˔JWs@K;(^x) P\AZN_نԎ8[I} u&(MGuuON3n/zɫ0$ǭê6& ծtxkrWGXZmR݅)C^-hEg(xYt !vghr鼙[H)( 4uYdb$¬VJC4* |{j¹ PIqVak]%X ?F>nf;6sy2F1C98  )OWH 2@6gx &.{<&r;NN'8?C.w!ضir&jHh OQ< r6˾WRD^f|@C m#Qj@a\o@2aW`OvDizܸ$s_{Hx_ 02>XO ^q_ ZءMULcF6€^8F> stream xXko[NGej^{6@v HZ:EKKD/Rwq̥"DZj̙sfv*;<:>ӓDNO&o'9?Χ-Ay\颌0]/awƩN˙Tp|9+\Z΃.*;/ o7hpF*u"/ 4oC,;' V͔óyR;kģE@{~itN˜ML-+/Β)Hjo;-\3<9޲s1|<#Xqmm0nqS k%bV)S9,W!Fg膜4WJ:<7픕|iw0Iv#xݣ_r&車zxJLMsVk2/\͚bY+r8-sd9/OP [bnBmpR6,:ч< 9`LCpp`a#*ioze]CTKߡAbLs{ڜ)Fo5uZGfezV4`j f%ŒJ&Im>I7wR F9՗(-hLDY^\^/0KIL6`[bʼnHFQX2H23@[^#ody̪eiqP*mmVbid !-/jZIb ߮89;T&bI-I!IqteB̈&'$v6j+YvJ *M!:Q4鸴=^# 2?/duf3Ṣa !}2k N ݹIgd~\]njxQ>vv ii1 %KI*a!ٸ*gWcA :d !@h`x:[5q.$xeøԛdCFC2LJy x<ΗsqvD~Wx1y<|Ofst*b &_Ʃ9'Z׈@ztFOf[#v@qdO`zd>#Ә/flVuf0RGhegm]dL\e)2ed͛a@2iv9X2#@2t{"["<馃)k%%ۏ0G溞0G3+ wUoYc7hL>wso>yAhfvxeqaE;pMbCf yߡEz|%X%ڞ͢r`^w ߐ3_ٱ\FVѸ10Lߐykf8l_ɓgG[t պ` <7~+J2[a0H}6cMk;X2(ڢTJk%Ac"*U=L!J ]wcg40|=5MdT P İ޼mV=il2ڮ`xnZ6{5wWstM=Q/^d1+Cendstream endobj 108 0 obj << /Filter /FlateDecode /Length 160 >> stream x31ӳP0P02U06P06W05WH1230!U`hhT027`I'O.}O_T.pJ.}2.}g %hj,`cﭠ q)+jtQP[&6o_?5^ap`rTB-endstream endobj 109 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O1 y@H.QtЪjbLPB:t8K结r/#=>)ul"-~H0XTYA6ٝCTY=4R<蚦j`ٞPr48n1Ҵ4CN> stream xZ[o[~#tنG{uINL )l7)KJwv3s26 zh5;;;m٨?aHN^>R埓b90( +MIMGuD5 .4ɸH(=u0GH`t& l*/cF,NZ* ^z*]/3ctg$ULN,nE)X K! ]J!KT{Ah 8Q1smSqM $ 0)%śQjYjRYq& .6EcfktB{'ADT  MfڀBUIޤiP&rďN*qGGӨIJ Y]bq]$#\g`6VR|ld5 D)OE@o h O -@Hɻ Ȃj|VS`yd?#q+F &>|í4">vpJ9#ђK$o\#y50R/c!wi2I(.5iC*ZX$XIg&a>sCk`ksP7}(z3"EK:Rhx`2XcՅjL[I$ uPqSZtU)ikT J+;iERm XqSoBM1R)RAh;~Zb( N@sps(Ҷw^vwU{p.[ I3Y469ki.F^8t/sindwH2u$mˠ+c:9ќrN@딭($@Y@/D2K +LkL9jR.Yj} }ni(&B~s$ 5K$oXa[Rm6BX[&WԖ6J2)L)2џ7Ծǁml|%+@k߻~}j햭 Y4kv,wwl9-SWu_FFz$!xg3ޮ|z-J’e RG[ay- }GTf:eA[uRw/yZ*K2f*Tp)gHCkFxA$-;KH}gQ1f\v1vmn55ܖ}- ~֥R{k2B/&RF)̀~]?$+CeSzȲ|Ve[krmЍ R&[O}Èv1gCл鯘OD3>@(D r(0 \ء=}c8ЁˢBE&uX^Cj]bslM#}cTr06O~.QL2okȘA[GfZ e3$#ɯ\"̪,ϨAF5FC'@^$ uo6/}9n2z47(D +v H~3T~cѽ=LO3-T|vLAR!/0hcU?)ßXa#D"17}KZ(tFI$Kxgܠ*!O4p"iɆ="nkȅ4bhX}5=!P)> ˜x+Q$u 0I8+`Bޒ[YX(Λ!rmC`u {a>H2B-vx"q^ubĺ:GaĿ'AuŪc ,rSuwvW?ZYu+,+:[gI71hI,7eayƁ/!rf{\/C[~LZd"C) o\dyW9㽡 >dONd2[!Ik$?B d{V%>fO:aaaiʅݛK$?cLV`]x=抏Pmf}`]A|+$׬y}a+zPw3GcUϮv5%gVm/DR!ytXm"q[BK>~sQa(LlgABy<MJ̻n3Z|߃&iG }僖p la6'0dcN92?~ Q`endstream endobj 111 0 obj << /Filter /FlateDecode /Length 2254 >> stream xZms _KkK:IiRfN֖}s˯/]-2+*rɇ`m~ .g"=?{>w'?((+<(g'N9Ssm[ϣ9\p-9o6`X a{e['ٿ@6)UR1h*/K^|H тN8,+w%I a:+ggYImIWr`IWs - " I$Mٸ QuY~-*FU ÝI..OſA'̤8T$:myp.iW1AeFoAB{M618%[e2A3d4FY4`[#!$!|QZvemc4=As%IQ!ؠ2Y' Zto)]¶ ѩ\a2*&bU^ķE|OjN #;~Y2oۿ kCq]lԯPRओqPu^SaU jĪzXc Bϩ!NlH>PJ><\8Gا:%& Z͗#qnmGDtڲe BeVcl>sHϊ4lD-K U͆7&+t}9AHH0VQ%OX^AA}/Q_ذV_w(S9 2F\rH)HJh&ʵ5$@|[$  ak5PvP-(8h"|gr"-"""3*2Vnҏc4QgࡅF@,߷6j fRxLkR *c)6Э=Ц n[^$2 4o]D|O#pBK{ =H <ұִOT,UJ^DzDMN\񲈼xGgHt /c˩NCAPL.B!Ǐ !.qp?"w*x@| r\Ǡ#1X+wٮCcx{1V{kWdʼ!߶ t2Xx2]J?p9nP>nhUxO~M}ҋUAo4{Nh9x'}&⌉w c~¾٬:۲ڔ5IwP RY)u$/AJ'ٯ捴8C{s YDSDWDQXg?  iN x c^E˿#YDlt'"vr2nwQ)/*b,Ⳓz'Xru섌/=,m< 8 :punD(X}]ӢjOwa?3PE1SEPhהyZדBא*g oEyMdQ\8Cm6h'T@E*‰ŊhMn ܞw |+!^$&YE֍D6 ݯ'B!B9tBLF5^`G͑?KݍcEfxR& mzIx<mG;Ԭ=2hח^\$iFmSS*BEKRwG~CCOdvп ~Eg|^uAo:>E*hۇo@umWAG͔nCB|5*մ} zQ+s:-hŶ]/2IS9&"tU7U(a"QOZrWp'71ѤBM%hH Ѓ GL*Cc3 pL,@3dsۘk#Ǯ!{A['r'Jl\c\ľ?N}oF4G^c1/s*i7ViȞ4M8ϋ  ힴ⚴O T4?mh"FWk+z/e1I3w䅯yjGni}U=9S6 Y AV;(zᠨ0Qt/̇N r{uޏ2Ռ2.ϧCƈ4#O {acħ#f=ҥ~v8"u$LW'?Uendstream endobj 112 0 obj << /Filter /FlateDecode /Length 1703 >> stream xYKo$5#.xuYF@+!ᴋĐM&@6ݮ8L^ONu=*Ww>Le S{'oh5ӣɇ ?N_{'$N L燓$L6h;LOV~$J|V53:^i؏N* ☎('8%h)ѬZxe V,$@ŢdR;$$mC^:!{Zmݻ*-IaЊ`~`ZmO6hZ%-Lm[t.+x^H@E^J0ℰ+/Gi)t4VK+ "Hdp M)>;}|5L9V% .2Xi-{9bXr$*'Rf5vⰕC3J6JS-d5҅F,Ty=&/Zk^xGxɊ֨H_':LZHK$IQGN~w.R6dkc=zPryƜ]Gҹ (/'Iu%;y((=5dr n:ZγdȈwbe*-sp->?[L12ҁ~Bt2 :^j~h&aPY.NE'aF&fY>kQE,HFÓ!Qr]3esڲv]聘F~Q}#Wrl ?Hx0t%8MODuL)4SkгAIi5g֦䩠Qxa6SkG^YZM" )9 T)MO't>?m(}i qq"C/:N 9I} U貭y$R6!JW9Y:Qd>dͶtY|O @[LA!_3 GKA-Pԣ*K:K(LuyAzѼW|3w㢿J .]Ջ4 >tJ[n#Ǻ쒸kjPOGN:cvLuaq\9u9m駉@4t_O柿_c W;@6SOICUUYYi(P !4pmѰpe]*PEem54KQݓ'L/V M=c<>z,: O1>Hd'G=4^~x̄ H.xrnߥWq1֔؆Tvv/wxsj@i`6\Onw`@+cSknkj7Ç]ۇco۷뭳.[݇#hM'N-{‘|͢z~}}5D?/endstream endobj 113 0 obj << /Filter /FlateDecode /Length 2033 >> stream xYmo5~GtA U(H\$\RJ=KJE(2=g_Oe S~ɭ~iky5Zփ)UpU^JтQ%N2xkхV'b> hY1ErdMZ&tw(O6F]X`]I | 3uK$XeYN󠓇i]cC^\- Ю ]bnS2P>t[R@PƭbSLYtN4,*rJp}oEJVb^}d)8|}l_ˍ꽕XmW~VbHۉKY\x6rAh GȤ0(ʀbG#z# $ULЕ 2Te  8`CmԹ#UO7=dDJϸ*wfآue!rKndӋ:G{ھw6{+B3^v'֮*.kGCn#_S:w/d1--PKJ23g!wY|j>l-x*}ƒsY\'UTT6gEUL O}z`l9+VGvgbOįSŷ\,ħ ( GOl](0V{.NYYv*{Uk aYɃbqŗ,d X(K JcP ŢdO(uU,B5+cыoX^j N8"jb-A\WŎ/)엥g:܋ߔN8^'3>pg X|ӪU\ܨ{}sHl []cxA?[5'oy;ڶs~3vtx/{qAz߀]qp_ N\FۣP@a{E2S2{U^_4ͺyrhz-vlF0mFWG;v  a?yaH޻Hŷv'$endstream endobj 114 0 obj << /Filter /FlateDecode /Length 1768 >> stream xX[o[E~V_X>lDy@-RQH'MI)zf/g]+)fff*;S~.&d3ӓɛ ?N˯)/]W|So}..&l)+?RF$X:8fsɀƋDXN* >+PN:qIl'֪ hţ$`byM*$XJ!CA6{vUҽ{ޚ̑ ZLSM\G:(nR"kѪ Jϣ P:NK+ "5`jCGΕēxmr(xdm(6!t5UN@yѢM.DDBa x[!a'/flF[j@) ɍX@^{L^Zm`ޑ֨^QGmX+ N$H%NHÇh#N~U6".S6dk1UntsrvyMJ2#PG_NJxiRt+Ck) 0/gɜ4_.\tc*o>[ qϛ1ѫlj]Ibʯb5WzFLin_+v,͕6aM>g ;dJVXUh,0U;XY${xJK1J8Cb+2 2d)#^T,ͩ9ۑ!dNSFLW$JC3˝f;9$:)97YtR_514uOCc%7Ū36e;8 P`1i]aF+biyJҷݥL:bڠ> ZG'lq75e蕫xZ7VlVL!UKAY̢XW/YQ9\0ZH}ŭ7iR6=u4\zke& P .izBZH+m.Ɍp&c*!O*si+QڸAVM.;!82Zi4ToU65`fڵ@#P3f%G,H&i(=dXE0KG9\KfVm`ChfrUU'f1o;TRwKh` Vvw,5=c!™]F(EYgjů%"TFpq)R;1)33W:i "1XR_kGύU"Hô z+Ĭa= PՠN t=6ճd؃˴wr!N[#ҿ6ըJeT{3Z5n56of[Q'A?H=;# ⻾xgY=M̉o뜿>HGd 5_^'UEӭoW9ocqúdOXq ,Bn[n-a;G 1#1l]vSY4<>sYBݳKAu)Md7lᴩܷ\5+|mV"(_> stream xY[o\I~#F]}o"VH(a$f^`Kz/T>VyH,eKԿwWB.7  @y\颌|(_RﴍKo}]n'⛕TpnV1q}Zk:CpUv^J=.:6,At :)!.Et&X[){&IIjы?dn *au1@J/(@KpP҆-s*(U-MLt!6FLXq*AAtXs y"^1By;@ls61Vjx& R Uixkd-Jc} 5C7[; >;FxQ봎7sm6(rxܥ Zo[it$DlVAuA  Y9BAJb!J/~kwv_Ruwh_?W:(7.]ҪD*Z>X;% B6'Hi)xZӲ17rM.Cq (>.'~P_@zpb-mS؞T*AŨ~Y@^wC~Ww yՋk]oTo!K?c3B(3^܈D"1]+2ȼ%ݪࡗ+/+j%vxl!.U )'-r.j썔CŞMQ{ԗQ&L@٧Xh:+ր| ]#6f.15$gY]O@Tƍv!(_N1Xv +cT(7״8MOL)Q㱷l[o=URwRyԗ-8虅}A'y0il*]g)59z':|\ zpn UAɌ͙)NݪKۣ L54(L*[p>ໜgb_-^Vx|9?sw_Dg9sf mw a*qz8kx;s USlɼ%S?k':e(%RXZu`hQd& ?)rMf`UF7Qs>JcS E'svL?6$O?r$cAsdvd-fe1P k2Pj.ܓyFÇ&vKip gCwd~Kk2߯*<⊚].&}{O`ۢ0Tl:#NMWW~׾7^ ^?D<`hl3)me)$Ck7t@M`Lzms6u)/hL8Z吒27ffRI [@@>)!A6Ou32o5f举xJsD5ϴ8F;"Zcll2t؃z򐫈-Zg!(\Ȧ j0P3~=` 2t Pj(C&!h^dqf?xOendstream endobj 116 0 obj << /Filter /FlateDecode /Length 1239 >> stream xW[o[E~,{ A( 8׶;E:ǞqiO(27ԝ|1(v.&7]Ən ڠD&t7=ԓEe.&BC?}&)J{<0=~PR%pQJX1;⠌ FX"t:E?Xkd/ϺIiH^nQEk fRm(mO)F^u[9(tI' 6uBHP`u>A0Z'n^';Zb"S_;xVi=>b\ѻ=ۛcJ`Cx?q^F`,F;VUxOrdRxd?PNeNSI|FBakhy^^e5>~0Au5m$XC2;c%(o:X;xB5qINܔXM98j1eo"1* ʻǀUՐRnB}V~eM1Ͱ<ddE6*αd8/ҨTM<#$8#hnWI6/^|-_߿  .7g0'! c2X=u3,,hUPw/fA{Bl2c$))|IæycofWhԩ< r؀º-Щ%xHpFZ&+m-_P ; ;#y8 qΑSaydGJfVܩ/?-ȏm'!瑪PH8W:#rSY9?:Ku9m_Wòj\mx"= (Aa]G'p> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 118 /ID [] >> stream xcb&F~0 $8J ?۵@6P/@$s\_@9dZ "i ;^ DJHΧ ]"y؃sHv0V "_IF.3XGi`XdUd9W endstream endobj startxref 78287 %%EOF zoo/inst/doc/zoo-read.R0000644000175400001440000002444713224634146014661 0ustar zeileisusers### R code from vignette source 'zoo-read.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### library("zoo") library("chron") Sys.setenv(TZ = "GMT") ################################################### ### code chunk number 2: ex1a ################################################### Lines <- " time latitude longitude altitude distance heartrate 1277648884 0.304048 -0.793819 260 0.000000 94 1277648885 0.304056 -0.793772 262 4.307615 95 1277648894 0.304075 -0.793544 263 25.237911 103 1277648902 0.304064 -0.793387 256 40.042988 115 " z <- read.zoo(text = Lines, header = TRUE) z ################################################### ### code chunk number 3: ex2a ################################################### DF <- structure(list( Time = structure(1:5, .Label = c("7:10:03 AM", "7:10:36 AM", "7:11:07 AM", "7:11:48 AM", "7:12:25 AM"), class = "factor"), Bid = c(6118.5, 6118.5, 6119.5, 6119, 6119), Offer = c(6119.5, 6119.5, 6119.5, 6120, 6119.5)), .Names = c("Time", "Bid", "Offer"), row.names = c(NA, -5L), class = "data.frame") DF ################################################### ### code chunk number 4: ex2b ################################################### z <- read.zoo(DF, FUN = function(x) times(as.chron(paste("1970-01-01", x), format = "%Y-%m-%d %H:%M:%S %p"))) z ################################################### ### code chunk number 5: ex3 ################################################### Lines <- " Date;Time;Close 01/09/2009;10:00;56567 01/09/2009;10:05;56463 01/09/2009;10:10;56370 01/09/2009;16:45;55771 01/09/2009;16:50;55823 01/09/2009;16:55;55814 02/09/2009;10:00;55626 02/09/2009;10:05;55723 02/09/2009;10:10;55659 02/09/2009;16:45;55742 02/09/2009;16:50;55717 02/09/2009;16:55;55385 " f <- function(x) times(paste(x, 0, sep = ":")) z <- read.zoo(text = Lines, header = TRUE, sep = ";", split = 1, index = 2, FUN = f) colnames(z) <- sub("X(..).(..).(....)", "\\3-\\2-\\1", colnames(z)) z ################################################### ### code chunk number 6: ex4 ################################################### Lines <- " Date Time O H L C 1/2/2005 17:05 1.3546 1.3553 1.3546 1.35495 1/2/2005 17:10 1.3553 1.3556 1.3549 1.35525 1/2/2005 17:15 1.3556 1.35565 1.35515 1.3553 1/2/2005 17:25 1.355 1.3556 1.355 1.3555 1/2/2005 17:30 1.3556 1.3564 1.35535 1.3563 " f <- function(d, t) as.chron(paste(as.Date(chron(d)), t)) z <- read.zoo(text = Lines, header = TRUE, index = 1:2, FUN = f) z ################################################### ### code chunk number 7: ex5 ################################################### Lines <- " views number timestamp day time 1 views 910401 1246192687 Sun 6/28/2009 12:38 2 views 921537 1246278917 Mon 6/29/2009 12:35 3 views 934280 1246365403 Tue 6/30/2009 12:36 4 views 986463 1246888699 Mon 7/6/2009 13:58 5 views 995002 1246970243 Tue 7/7/2009 12:37 6 views 1005211 1247079398 Wed 7/8/2009 18:56 7 views 1011144 1247135553 Thu 7/9/2009 10:32 8 views 1026765 1247308591 Sat 7/11/2009 10:36 9 views 1036856 1247436951 Sun 7/12/2009 22:15 10 views 1040909 1247481564 Mon 7/13/2009 10:39 11 views 1057337 1247568387 Tue 7/14/2009 10:46 12 views 1066999 1247665787 Wed 7/15/2009 13:49 13 views 1077726 1247778752 Thu 7/16/2009 21:12 14 views 1083059 1247845413 Fri 7/17/2009 15:43 15 views 1083059 1247845824 Fri 7/17/2009 18:45 16 views 1089529 1247914194 Sat 7/18/2009 10:49 " cl <- c("NULL", "numeric", "character")[c(1, 1, 2, 2, 1, 3, 1)] cn <- c(NA, NA, "views", "number", NA, NA, NA) z <- read.zoo(text = Lines, skip = 1, col.names = cn, colClasses = cl, index = 3, format = "%m/%d/%Y", aggregate = function(x) tail(x, 1)) z ################################################### ### code chunk number 8: ex5a ################################################### (z45 <- z[format(time(z), "%w") %in% 4:5,]) ################################################### ### code chunk number 9: ex5b ################################################### z45[!duplicated(format(time(z45), "%U"), fromLast = TRUE), ] ################################################### ### code chunk number 10: ex5c ################################################### g <- seq(start(z), end(z), by = "day") z.filled <- na.locf(z, xout = g) ################################################### ### code chunk number 11: ex5e ################################################### z.filled[format(time(z.filled), "%w") == "5", ] ################################################### ### code chunk number 12: ex6 ################################################### Lines <- " Date,Time,Open,High,Low,Close,Up,Down 05.02.2001,00:30,421.20,421.20,421.20,421.20,11,0 05.02.2001,01:30,421.20,421.40,421.20,421.40,7,0 05.02.2001,02:00,421.30,421.30,421.30,421.30,0,5" ################################################### ### code chunk number 13: ex6a ################################################### f <- function(d, t) chron(d, paste(t, "00", sep = ":"), format = c("m.d.y", "h:m:s")) z <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, FUN = f) z ################################################### ### code chunk number 14: ex6b ################################################### f2 <- function(d, t) as.chron(paste(d, t), format = "%d.%m.%Y %H:%M") z2 <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, FUN = f2) z2 ################################################### ### code chunk number 15: ex6c ################################################### z3 <- read.zoo(text = Lines, sep = ",", header = TRUE, index = 1:2, tz = "", format = "%d.%m.%Y %H:%M") z3 ################################################### ### code chunk number 16: ex7 ################################################### Lines <- "Date Time V2 V3 V4 V5 2010-10-15 13:43:54 73.8 73.8 73.8 73.8 2010-10-15 13:44:15 73.8 73.8 73.8 73.8 2010-10-15 13:45:51 73.8 73.8 73.8 73.8 2010-10-15 13:46:21 73.8 73.8 73.8 73.8 2010-10-15 13:47:27 73.8 73.8 73.8 73.8 2010-10-15 13:47:54 73.8 73.8 73.8 73.8 2010-10-15 13:49:51 73.7 73.7 73.7 73.7 " z <- read.zoo(text = Lines, header = TRUE, index = 1:2, tz = "") z ################################################### ### code chunk number 17: ex8 ################################################### Lines <- " 13/10/2010 A 23 13/10/2010 B 12 13/10/2010 C 124 14/10/2010 A 43 14/10/2010 B 54 14/10/2010 C 65 15/10/2010 A 43 15/10/2010 B N.A. 15/10/2010 C 65 " z <- read.zoo(text = Lines, na.strings = "N.A.", format = "%d/%m/%Y", split = 2) z ################################################### ### code chunk number 18: ex9 ################################################### Lines <- ' "","Fish_ID","Date","R2sqrt" "1",1646,2006-08-18 08:48:59,0 "2",1646,2006-08-18 09:53:20,100 ' z <- read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric"), FUN = as.chron) z z2 <- read.zoo(text = Lines, header = TRUE, sep = ",", colClasses = c("NULL", "NULL", "character", "numeric"), tz = "") z2 ################################################### ### code chunk number 19: ex10 ################################################### Lines <- " iteration Datetime VIC1 NSW1 SA1 QLD1 1 1 2011-01-01 00:30 5482.09 7670.81 2316.22 5465.13 2 1 2011-01-01 01:00 5178.33 7474.04 2130.30 5218.61 3 1 2011-01-01 01:30 4975.51 7163.73 2042.39 5058.19 4 1 2011-01-01 02:00 5295.36 6850.14 1940.19 4897.96 5 1 2011-01-01 02:30 5042.64 6587.94 1836.19 4749.05 6 1 2011-01-01 03:00 4799.89 6388.51 1786.32 4672.92 " z <- read.zoo(text = Lines, skip = 1, index = 3:4, FUN = paste, FUN2 = as.chron) z z2 <- read.zoo(text = Lines, skip = 1, index = 3:4, tz = "") z2 ################################################### ### code chunk number 20: ex11 ################################################### DF <- structure(list( Date = structure(c(14609, 14638, 14640, 14666, 14668, 14699, 14729, 14757, 14759, 14760), class = "Date"), A = c(4.9, 5.1, 5, 4.8, 4.7, 5.3, 5.2, 5.4, NA, 4.6), B = c(18.4, 17.7, NA, NA, 18.3, 19.4, 19.7, NA, NA, 18.1), C = c(32.6, NA, 32.8, NA, 33.7, 32.4, 33.6, NA, 34.5, NA), D = c(77, NA, 78.7, NA, 79, 77.8, 79, 81.7, NA, NA)), .Names = c("Date", "A", "B", "C", "D"), row.names = c(NA, -10L), class = "data.frame") DF z <- read.zoo(DF) na.locf(z)[!duplicated(as.yearmon(time(z)), fromLast = TRUE)] ################################################### ### code chunk number 21: ex12 ################################################### Lines <- " 2009-10-07 0.009378 2009-10-19 0.014790 2009-10-23 -0.005946 2009-10-23 0.009096 2009-11-08 0.004189 2009-11-10 -0.004592 2009-11-17 0.009397 2009-11-24 0.003411 2009-12-02 0.003300 2010-01-15 0.010873 2010-01-20 0.010712 2010-01-20 0.022237 " z <- read.zoo(text = Lines, aggregate = function(x) tail(x, 1)) z ################################################### ### code chunk number 22: ex13 ################################################### Lines <- " timestamp,time-step-index,value 2009-11-23 15:58:21,23301,800 2009-11-23 15:58:29,23309,950 " z <- read.zoo(text = Lines, header = TRUE, sep = ",", tz = "") z z2 <- read.zoo(text = Lines, header = TRUE, sep = ",", FUN = as.chron) z2 ################################################### ### code chunk number 23: ex14 ################################################### Lines <- " Date Time Value 01/23/2000 10:12:15 12.12 01/24/2000 11:10:00 15.00 " z <- read.zoo(text = Lines, header = TRUE, index = 1:2, FUN = chron) z ################################################### ### code chunk number 24: ex15 ################################################### Lines <- " Year Qtr1 Qtr2 Qtr3 Qtr4 1992 566 443 329 341 1993 344 212 133 112 1994 252 252 199 207 " za <- read.zoo(text = Lines, header = TRUE) za zq <- zooreg(as.vector(t(za)), start = yearqtr(start(za)), freq = 4) zq ################################################### ### code chunk number 25: further (eval = FALSE) ################################################### ## filenames <- dir(pattern = "csv$") ## z <- read.zoo(filenames, header = TRUE, sep = ",", fixed = FALSE) zoo/inst/doc/zoo.pdf0000644000175400001440000073132313224636554014323 0ustar zeileisusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4433 /Filter /FlateDecode /N 79 /First 655 >> stream x\[s8~?o3UNxĹ؞'[yP,D28k(RiY3{N)4h4t7Hƙb1ʹv09&3!cJ[1a$1aB2 *&Lh&EPI]cPT)P^0eӦ[2#$34f85reVs|wz/Pq 3 .]P4ҡ08Ծ`v ȱWy4h!g4Z,` S(J-.ΈP:[UI%ŝT= r];]ưKVͮʺ`^w|wr:&dEh-xzk+n@ lX#R -jboE 2SAǟuA9`6 jd Ø3p%Y:ՀO7DybnEoOm ˣ|'?͟^70?ʏA~2?Fy~8q~Oi%ʫo*_<2,xpN}Z·B9z8_.6dLa {0WDGUykrS4a|xF/x<^tx\qK1B7147Q8^|}(u2t=D\ t 9B&0Wb Q)aR+ DiP/}Q! t߬6i`_'0t<I W8?1?'lLKor41_!OvAbs1+˅||_v{*|e ZX%"ԑHDWЈ0):B. >)HM,T/m~v5ӖNSu>B9I+p|"iӦJUlgl%F̫|KL:88 U]Ҥ7kXU^Ou)j}'EkL"з<ӻ -'{?Z6}j%uzIݿ&ƈ2K!'=dlpt&8xd`s0˅v(+2]WC_ۂ,ۂ7nfU$ 5% Nڢ4y$9/mT/%NfJ$KCm|˴'7d뭼 GpIf&F>%#xF[mI̜f˿*NRl̒P+:S'*2KG&{H{)iLI3.tS>sQx ®3 f lSj=F 8_׀D(khen/BU] =Vv>ZNb{YQ1X\[h.]DKI՞.U]}CiV:Ip_]p(ԒEbbD1Bh!W+ 1pX R#To4yQHk;.49_;Qn\5TZjۼb6|?|!@f6{lݡ5D4m"/M^p/Ou`l1rt[VvZAܵuX}mm_^8lѨ%ޝ7ǃ٭9`,gp辌:skn\Q"2<~?ζ%#o!{rvͯ}k1떬HaecvisB=,%;kkEcM_7srH(6{S>-Ѯdr}䕹}ޡ{/ zUum{ȺkvRhMO隁înr ߑӴ7L˕k+Er ^|PzQ0|ڧzw9t#1|!|'n@c!;zP^aMTUį@wO}-RJ˛;߅Hg9Znl.Xe3&[d@Zithi3]ϓfݦetEoizPǦLՂgH8)"M7ӕIYE+U VNtO08gOp 39VH괣[)]Ѝ˘dJ{-ӅdeC5eUCB:{/3 )Ret2~gtXEU:e A|=M&d֑.DwBkB&e\RQ} ud bѣ21ϟ2el:;Y@E[s,xTB<"+z:>fOQ5V$3nAj}F\1t[BNs*t8OCvv@|K?ixq@붌o`Fפ,*$_W xCt뷥aU}ԥM.0d8'ik]`2ĽK E4wO V3͒z":ΆQ@Epa߲p6&;r..CmK#3*PZ]!1n&lwX+:q{/SaQS.tCS\>.3+C?'z̸%0ltvV#.g[Og}6%v/pʕ2 ‘QZ^; nJĻ75m.9ruBendstream endobj 81 0 obj << /Subtype /XML /Type /Metadata /Length 1738 >> stream GPL Ghostscript 9.22 totally ordered observations, irregular time series, regular time series, S3, R 2018-01-08T10:22:51+01:00 2018-01-08T10:22:51+01:00 LaTeX with hyperref package zoo: An S3 Class and Methods for Indexed Totally Ordered ObservationsAchim Zeileis, Gabor Grothendieck endstream endobj 82 0 obj << /Type /ObjStm /Length 2578 /Filter /FlateDecode /N 79 /First 691 >> stream xZrF}߯rsURc{%ic)?$1K I9J> RS, `.gzNt h&X0Lzǂe**D&, &,J&6,*&R,j\`0%-SJS8=Sb`bdc@)SALEhEO3<2LE 4C 4L{MQRRYH)h*bFZfFNJ9YH1c(jq H%IPdVڀbVcd hDO 褲zTA`wJBʎ!UD28 'IH4(M@+HOԎyo-w*0H=&@|KZCh0 =r; 8Z\xP@!EXni r+[⃦WXpǂ)ƲN2$c@?4mH@$6pт,tJ.Gnw1~0LsKZ8GƏE>S 3~_AV A0S>e>g4p'J  xΦ}/:{˩ ^ëtkzkLOZ~5Ixjzku5{=ήYC$9Q(~ؘLrL~ԺܵPL.WY_~"YULUUSs\f49Lᵗ!&2>/t,,[,D 1Ч鎱njMd J2(3>f`)"Hƾ 8 [LNHJY=B5(}Z,tDԢ٘Jg6z*ES\X !/DPaNR8R3 Wh7M8qS;cIqi]=q\Rm*C#` E%_z)ҥ`);cbp &01nj3`!QDEfLl E藁aqڒn1"ʙm^Ƿ4j!{] g}⬾^^h _G:ҮJYE#4۞FNɼܕg"Szÿ!S Wa;:=5kM+UW]^Mymb~Xjʹ}L[G*,L= ;Y,¬4 v[SM`Ւ)|Μ'` 'f֙l<a'(^7g-26x uY@hM )dg@Y]T X)#eѫ7_rXK>QЩUImd|tN5s^\߶t&A>tb1F!BCѦU۲L?S:*xI3QE|Zj>/K7O__\`& #+hr?O$w.W||>ze|q;q}Ϧky.2eiPReky._ ~<&󚩮zrV&Wjn=[Z& 0-|prpj5՚.J72P}+E{}aRj)Kޤd=z(jUx+=[M-Ps~TRݎkĿ#Wb_/Ҍ!ԿsQ] m[љqaxw}>> ]gKWhKMFc5zuդt +Iz4}󽏎OpARH N2Ip"o-e?}k)dSNנ \e"6^UF;Vg=;:=})EC=(PQb7}4Z3ҌnmalshZBv1媛! 9E{g^)C@|,‰'H#~V/ZtwɾFhXU| 1ZOww6NY_؝\=Cp$ *. w z'K]O>]7g?XnFPMw9%6>a9ʫ/n wPmg{JsE23>I5YLߦҾendstream endobj 162 0 obj << /Type /ObjStm /Length 2801 /Filter /FlateDecode /N 77 /First 686 >> stream xZ[oF~_1SEȹ_&[c4&"LKHKѹwDR#%j93V1΄7_:Z1Yq \aBIPt4pLEk<`zZ^.g?A0Pt z4Oٌy-\;r>ixm}u*ec,ަ đ܂Q[ĭBʼe$~U?K pC6ꭸVԟ)κ?Y,J8175޶?;/q&Hެɯv/˛j/QuQgucy\b@_a-91)goO9}C y+q==I],}\a , ;Ӌá}|mRQK }()+a -§OR`ⲮncX$Ğ̯*:f\4ʗ 5,Qfn~um@i5y&e֤['?-ٕ#̫"_>b˺\ Xdq-ɐlp+~ly3^f|qUBH qUB"JT ]p%>gռ\4GUW1S fp-A X?Pke\p 7yV}XʛzV:amNV*fVd)c_X4r㲺D,jXяD4A1*q"EBҢjicuB FM8:V^ܼ#ϊŻy&qnA8*QP%Q4`F$ս`R$4&kP'Tr$KnZ׏Ç!=IYMgJt:(72jP~RDB)BC;qOM_c6rIh& E{&JCh' KT-&)d, &Bb%hȻXtI A [Ȅ:oJ۟hʓ C"q!\Xp&shMQyؽ@Bxƽc0e<o/=h'qI?K_Ų܈ 4Uq5n -ⲞRW` g_x&{-T8ivK^LL.HiGaY6Y'Gۊ~6H 7oOY( o*CZ5Z6cIz>I )Kߦ2E^qANiZt.2-yzV2]EZ7*{EkJn#"@1J[ jdu;tt`]OvjB{혲S;FetvTNV!15l@FzpP'[pGGaXvX8l69xDbun4OP7ߟ?<  %5%ѿzW1!6:EqVr+kz?N:UY>hZs<$>D8:un}PFQ^[;V:xc#oCю騰c.v{(!QW*ToXؠLԦ"%C#?uX^n{PϧE9fy-LyuyGgl 遏v̦Ѿ`n>t"=ɽs5v,Pl#Q'`ۻvJ !V1s::Կ^ۄMn2̢O蓃h[n@"~PCjUIpM羕 ׉FEC73ӕ"z9teGV+fzvwZe^-LtZ_`&ue@=cC}HH](W}n)9|dR"iBw)|GE*12 t%7(wfAendstream endobj 240 0 obj << /Filter /FlateDecode /Length 7801 >> stream x]Y\~# ~jUɼ 4 gAP[.%Yz>grnY[\l,G_}Ѳ|G~_o)pZA˧?O&}rNmV%׏x[&x; F|볝[Mi ]|T۫e_ZK'8f>[[ {cagKN <‚;,-uZkn,~:Ƥ>K KܾJ*E2$#Zqk-f11Y'%֏{ݧdOϒ޻#wE{쭱h-lɒ[&R#e[f[+fIj5TA;l:?C%Z771u=;C^ _1a 2a}}uI( X#tI@{;03p;Kb#߾no_Gʦdx>TK1%i6Y9W zI$ozSfl̻Wg(x8Ͻd{wAKI3 ]U4G`mwB8k& yqgOxA ,ߐHXp-5h8ho;K@{c\X7Dey:Ot)f3GQɈM^,_!LE,Ox+^{5Hﺷ6nD0d ,$p &aG53RVtGTմ=@>~n1/ѣn@ebG)ڰv.FٷI??2{`=`Z^@GN=Y@l6KCU ^lgvw$,&b5$mo^dI a-lhS`ߣD쯫 bo23+23J1@w#鳗h([ wh*ƪ N_v7EL*z}`I: $@Vz~聕RBy9+FuRUTla1޶`pAQ\1=9sz HmN$@񛺐+#0#  .¶ڬ&샷Q0j( Ľ^>}&Bw4X '&*"KCa+),jϯLx߽4,yB r9!ezt"l!0`[B } X7@ Õ ~AYTRćΪ{! rpA>,2T\LO$V#wnˊFe((Gقt~tqg^!t d;Ȍ3SdxP,!$ǸP{|i ,CT``\ X@,&Z4vpp/G?%>+4E/ʶ I#lUG ,!g@mJrh"&Wyxi>%AN ǘ=4 RKAOl޹ L I7RDjW_FWUćyVeߋ,gzڂք0 @U WR&3Zd~10sB9QM{|CЧaڇEi|xHlҥ/* O7鋙 ԃάqbCf7! koiH >*HK=KzN5*``UVt4xPU%;qPDUS0HR!bbuMӶ='M Dr,BA覆V]`Հ J9ހ LxņH@ }lk"e2>0L 4رe{> HY H |G $ 7t &s9G@ A 뭾@vŶ-f>qGdQZI)vã nJV`C6J^'X/;Eީ(b2r6j"p45ln-@AKhL iF_4݁-MQ0.oW^s}^/N۴nޤc|VCQJ Ƀ.l{J\NčZb=55 ,Z IH hbZ7ϊJ=¦~uK"!uNO9^HȄtn"ҬB@UpXDڪ`3e ܍naF>=Ow 4v5G=lꂋM3>l)_:JOR}٢a5 I{O}؛Iƒq X#͕L:=Ū#1t<8@Ȫm\cUbZY*jQYlѧČP8ݝxg^͜b  !bc5jri/E&^P"uǖU^w3 $ &3''0 Q`ۘ!-8c,uQ!#^DfzW$`h)1dͯɻ;22: ,[BRNq誨 ; b'_ScXɝuqɖYr)ooxKXcaXJ 9k crt,uQa!pK=Y-.0OXZ"&)e*v o6rw1INƂ83+fdâYL R'_Y+'KD 'N,O٬SLnB3REō Տĥ9FϯZwW,\z{LI`ʱ_ 4tJ}8x{~+~yy&Q-׭ z I,Ow>e,`cUċm9ŧMUW[KQ8g-'T:T6 ckm@Yzf=jSQB`ڋ&)9YYẍ*-a{bSQbd]%w kmX/~zMM1I3otE {l @Xl[icnY$b8-ӠEA%Mr/ns!~vt FA@v >in_Q@1w>q>E Bxl?=NG;Nl_}9匡,hIflVTzʈ"K,\ Jڐ%*7<`N^q@]CMV3jG QQw)3*8f)kRPa8o>(q$6RʟZN,[k(EEy >H=>9yΤ=~1eesPNO`> +V}y!1 @lUd=xWrC[k+2LLGLS Ҁв[{ !31X˷]>mbŋ*L`Z'azNEʇ1XLRF)BNHq`@Ù{8\]xKM [ LLVwȌG>4SfM;i2w쮐fQ3GW*ס}5qD\&gw,K؞? !2}8R3Nm ?qAve z}.=^pkuċ*+q^2BN#LT1),l8 osWW-$v~V U-\} 6ɂB(f<D6r/k25:$}NNX>ҙst@r6$e/pTZWRRY`#b̸ H{t^g3=|  &KBLxŞ2mG/M/B3 y'V?i?Hi2^F>aIJzmKřZAo5mg:RI[ov'ޭN؝'T McuNVwJg`cr{"͒$ȩUX:a}'Shߒt镭|2_\GM7j7s&mKM 4.cx 0(抁oc'`H?+2=a0<&O+WL`[(0>E;].YcE>,_"7+USc9#-_1,\PFP\p [;tXdfjl?TiY?Xҥ'G:K8"`DT]48(zEQ4v|%Ck9؁KRKK"g\U.jp,2/Z ^ $a b+=⼥߹-BSF,Lrr߬yEcE .ԣHyGSKk*8<3usQsoK]Q}z`}6XD)ߩc]Wpo0u|D۹kuȺM*Z>ڙS8Nh_g%=vrPXj"!%{hy;fX(3" ,EñQY88aBLoP\.M5"&*Q;XCsC *b?>zTͷ;[xbn|p- <'_OI{C{k{Z pJyKW/xSZ bؖW߼{몀m-HK'hdDE\;>iOoƨ־}3G!zME>(7\w  zqxM8)kT7 #'W(X97arg+տ೺Û2TkZu閴h;CQrꯔaz}n2Empz%FM8eY앁@XɅu͉4wF_ͬߝ!>sЧ8&ݮѾduE@2k>Ve>5N>3ǾE |Pf^8Ci>mc12D0) ~1|gĤswcOg{!WлR)z H9o=eȮILoZƴ^oÐ{:5ϾP,C}8foCJ+C_ʒ@wak膄˚QX|]GᶕcsHQk+D? {x*iџa0j?yiAn1^՜Cu`L@i]3폺R?ʫc .(&YIϏ/Nf_:HE8ѫQDj m<ݪu{G>ϩG-f&RƫgA:diM ۤmSV~d<⟏IDRDu6|cWOz`~hɍIvXCOSJ40""9W Љ}ZDSA}뼘|֘"v럢Hn53_ͭSEuwDT)XO{@-7J21is=5mfs?iȾ&~i1R|:qX9`q0ÖFViEKN[wOP kp{ :m'5Ď' TyiQd/x#'5Z s{hz3;9z`> stream x][s7v~g#i܁}l.$[Vj֩ʈhYG&%[үϹtcDJڪ-?F<݌_?9}w?_(]??';S={q]T”={}ׇg?³gm닿?.iNŴ?. }o>'k\ZZ3opR:{MdU0!gܤ<?Z}=WCn{eTJ8xgI-N~gk'j :zDB_ _ )& ʿÕޟgl5\̄sC=z)jչ? m/i aqkdjYR6rwigxMzz8,&c5`EO(Br3I^,Amf:[ňӹT k6iuՐ7fc 5YL@Rf3f|0bʛ3̓U_ܬ8P* *A>+YARz|) ҦBf$Y |^ 5E*WH^bպY5ˠj$M|R tȻhEĶqi~( n0}DrVo[YI굅(x-U]4dfŋ[Ƣ/1MoBО,lʶ侩\Cr lڔ7-C>e<)._llY!,!"yO[zwl-D[o8 e |C ”S=M {i@ ill9omn؀˗r{3@Bpۍ^{v#nF o_Ȯ@4VsrZ$j å6 3Ku-Y@I}W*I.N)5RXl `nJ~ʻF#T,r< 8> #8T$.ܹt$OS /lg4J[Ӹ\͞\ղiYmAL/EE-!d̢TU~'9^KM&7ps{'a `XdiMÉ h&9YmوA,vTijPӒJJRctZMف0GM 6].&LX޶mA"8z^q" A G!C!YVSԧٴL*{26Y%zRvx ;4|K0((*I5 YwkA`P_良%?O}x`hGz&JFOpKk$2dcDUBUTP<7| ?Tw"3D2x D"-;֡]#d,ܨ8W@ 0)3)m:ttA']V2Ld@A =F'Bl6(82X5U(ɛ~(MJmm8 ?ҿup/g'F2D'1\&'ᕨm3!?vD1 lWV^4#FD3bzdT6C»NFCv ^CMQ<ȷ+U06>3>ۜ?o&vy֝ ͬe]ؚu}{[/_^~y~sçGqJ o9\5/Xunn'ݳԌ}GN= 4_H-vWK§`kN]g )>~|SLXQe< }N 0Meiy4PlC+Eh787nN+]NN ,󲼵 S l@Fb ")ͤ`E-6oikf?gNwu .d91PD ).xt  еuv41#|>U9 Zפ @HUDQƁDe-GwyuSR]·݇VԐ\繦I[Wp^>t7gHJӼHFd$j͛, RHoq?Q=DXZjNrDNH)Mlг1(d]F*iJboqRn&ؓ 5Q#xC_;PHy TE/+F ! ,j|8FY[F3LЕ(8:yq93_ȄމscOA捎]K2^6B>D3aW=7X^o ge,@R8U :_)0pU.8ٳT6_/DBpHr?q8ק\|9iSoٙC| / otM@$n-hÙ Wʹ۫},L:Y/#(%sjo],+9qT'\ʁ=UT%^*&Qu(' ۆWR hACx[u8\ƴuK<  d(Nt]( 2-[(>c*c B2aT n UY.P+h{lFXJySў 8g#.کŅ.{n\=Sst[&<7#2= dWAMBӬUVuc!p,q\1ӚZ$@,ݯ6n].7Y*KFSYpkqZcDeԛPTvj▅LyvZӸP>[Hdsdu8kl E<`a&9"dte} ud̫j])" piWm %$DSu|\PSfh[D@,Gg|h>tZ[l88_N#|`"+lJ}00+rǦ5NI ʏ3049#S9mZߕ*췈{EyE%9ET؊eX=RWKA\DeY4]GmԠ*qW|tʽؽס[ᣁhNO2a蛔 og|Mؤ g:l2_7x*U!fc63E[]{ 8[GUlVZA4g!Cʦ=5>±àۋ*"،wY2dK->"k;ʖ jtƤF<0m4 #*+Hu;\" _ A ƙ/ `0fIsrL. ",TGBFwԇiQ%Uekh$p&<"p̑+~1,8K2l.)/S *_6JEtۋ 8+Cj:qvvh w,$)D%m"᱄.ޖS1L )b)3{۪6Leȟ"wy{6x8lQ(aϻmvßAA;>Rlpa憷LWA2&%FDž g i,?sa`nXȧ&y:2Z N$TՔ0dG|0r5^OOkͰ* ;e1s2ժhw&Nw42x&nζR,V\E_Q2zıOQ+t9RJEB {!́WtCԊ7 gt[+A+}$ }k^ `}~_U&@PbKWk< Km`R-}!QU۸;OyT~[}gþYA#ӆ%rzyڼDT61Wo#hq#Xc+lzZ"n&HdX^t) J|(AY&#-O8TRȸ δ9Z lEYص,&~ csm|0fB5YpuLxmеxtB(]XCr" (p:'yӬ92?N"]-M M" %w,*rMXQ2-:LPŞ w/uf!kb: }'T +kxf+eLzc;`bJOJ%KHYFENR4Gh'Rxɣ.7Q(_ֺڹ& n,Iթ5=889\->ڞdoC Q o,46#[}rGw6䨑nncܓ^ 4;ke4@Pr0 ,F'OO1l;\~?h_LY^U]r^VMb蠮.G3roǑ{|O0tjS۝ꀷY_mLIoV佫R*('~M@-٨ 1VwufOew/kQ{JN /m+7:qx@UIb$CeYc&-vUaOڰ:l . br0' XtMfUy7&Z=ywf6tHO6q woԔӜ\FeR}VG}Vƚ%W`~Gw(A%G#9S e4mOu%SS?,+5T֔bX0i%S6d` XڊaB wpugt6Ii:Z$)zYYhm%YcG8 <Co $I.Cщ]* G|ktPqi2JWZCPo+$L$X^T73+ *F8Jo:oP d) 85IMܿ&[RdeSYv@vbV%sbʕɧ M\cٶD4<f\bX3vttnѦψ1' oxސgT* =@f=z'~|PwɌ*Pt;J( @¥TT}~T. ZH|yޥ x|뤽Ϗ0ZEcX,‡U@QYv5 oZTkn+,ˁt9P-ߦQє #WB2,?TwGErݸG\Ԕ. }_/ųa+*z^~y Pvv(&VU8 dt^続cs5Pw|Gzw-+7==s14G#a=)<.LmFM:(6JKS [[#l'sZM5~_/S|^/?`0964 ʧn5M%8\|藢I³QZNjL<%Yy=lLPmsDs2`9u-s|ok1 NtiiŘ`oωO4ÇYӓI Ա"̱rni^rH#njYcz%!SCsV?w`,hi>ƨTaxO>#:dYޢάSLE"2 /"(P,w/ /w~n\ MFhS( 8%pؘ4X 2Hge/?t{5/r@)E*XB J0 9@]Kw'np 0IWR43ܲKcrZ=g!s$$8j X.tt41΢]~&-+xX-r^fs]&B& ZAKP}}PqT }Hhq\\_Y;!gObaAO8|GE{8ӏ~+=N48b]԰"KX5"}lμG|Z~Bc\Лe(ygѹ1}yS @us,?f[#7- ͇21Nfu;ׇR& 9GГfr¦p|d41WK)*$xk[yj7e,ܣE~1U-qSy&53V @Hh.MəQvup$J˟ Uָ6@ghZN4B@G/.Z;7 P췜\Ʒ> stream x][~G Գpw»p"pdZsbiZ=VMvHNkX,\s!<|_=}8o>)y^)I9WyT)w_;Vi>BWWgz9%f5hh߫W}8Y7[k7(.t~/k?\̓U1ϸIYy)lZfEm `u.nv(NVBm`k{ K-0Lf4%2{^^q<*Eɥ  |쏎޺(ɌjW< 9 Krq 1 h &XYR6,7̜A{iM%X@֧G% ,{,}A@-Tc=0 pv;,My'&$|5 tsx ۓ~ͥѼLCս waQ$[mfoe} %U.>-$:&d*>CU-ධ/*V5E 66TX @+JW@ksm l/2`cB4^}*nU"6zN RoS&UjC4Эt Ƥjyedm,]|(+P-D QYR',$򩨧RoeaʁD+ (ujapx䳚4,ɔTX)eYiy٠j{MuC_ \-Sv!lS9ypeFx}׀./D;ɈFo)n?*b^45">Yp%6ga`$4V Zh0t)*Doa&r!{Ш_DT>/<SPC1 lw#͏4>g($zA³ˈlꍢPtorow$tOu NIZuj>PuV^ńf~_M:̦_Ksmy rEuc_i L!*1s25XPm jnO/2"M)ٽ]mAD3l̜mҳ,E`8еpÊ#HѼh.8q̈:8a/ ~QtR蛅Ve*aעA[T1;p#$@ͪgjB OZ玑0ww^ SNBk0GnEbED *x< 8˔ tV;1&e֐`S9+=A<]ZOvHIV[ H*Y0^軯a~ 桌Q5=7wIM)m1D?pxHipc۵G+`V+qpÁзE#z/V lad84AyA}y9y5쒩'։xL((dՊ Z19 | 4044~ۤ@:cڭ3d3^%QA9}i^ )Y~W8[7af{nr w&X@'7*{:GMH,T^wsB>JED'O䅕Փsy]yd3\踘RL& X4gUw z&bb:k21@<;_KsmfaY!"R=r@]p&3UZ2r!fuTmw*^TW&[(Sjci~v+|:m|@ Nt"Q*-k#$S+(㪋^I`V=ֆCcr=m-bQM6u`4{ #B*7k&]Bqh ܤ!!R3"g8-PGPv#BϱB鶢3GH+L,]gC>x=_XgW99_|M^^L\ |BGZ޶J׏[@,%CW>؍iG^u-Am'-Z y`QePy3t_*ϓȨd;)*.Qm3eOҼ.SF1,Fi0Ef? ;HrGxX.]N:+#s4+Y#MGa5S +NbsrEIV9eɕ*[' ZvIHs;šv?{ FSd*͵og`hJS$2wݧb~s~C~;N)¸zůK42]a1Ur6T~&_Fzƛ3֐#"|]dmmsji U{w%+d`2hE8F}Wsl9F "0d2J#ߑ >~]ORl|Ma~ ci~v+K)]b^ Av?v]X9O q:UZ|F*1UIk:X䠺F8 JaQ2?/2;{qeX`ı] @#)].Q&1 $u9x_ ̔ Z=#]Wgߟ=P z=|G`v=A$uyf+_y%@ah񸲑o/N;8&)/ Q7!LAmWysp /:]^hVi*j6rLY%K=tO99z "zm*gt^̳i9(C{#3}K^{aK,򠕚5YIVFFZ}x&ӬeFkAV6ԫ<ؑ]]f)pA8|5̾-Mr`%u湚 F$`2/\MsGd⡣i<(:}jh嵮1":g)<<vzZrdXzOsʵ+p niKCe0nݾ=("ppɄb&"g;ԳĹc{O "k"1_P%hrP;=Zw2S(FⲔoEZ*r]}]OZ cɐ7L|!fx CN c"1E}ZZ<,=G9aAu1z2VUƠcơ@cM2w @_ 8m)QPD<x{Ɏu/ :<.N0?v0Ia< cQQPҲs!ISĿIH@F(u^1"EVcmң:1k*;4]S_6K6zŀ4)*/3jHS6:yWU~(6 :fHIˆY>!zO- ZawO4fUnՀEP@|Y.)+: eV4gmR߉"R5| QR" rY M8QYyh}1PMJ7WDFi b́$kXhg) ҤDP:QEfW *ϜT<U)cuDe*T&Դ'Gg~ [4!u8Ed"ag:VuZ{U'nb~N()&QN!MKSDEȬk l3o݂޾;ۦ>d) J`ud`EKF* bK[y=͢n `J]isWs!97a) `4Vma?]?a=NM{xS{]ߺA쏧-`S;ˤ>tmiw)Jd 労DQ϶_u_/uK(?ߖJN3\ݪ V-8p0~p$tf3,>\+̍-\}XFlfځؘIQxҧT^k;w)s,?o0tF˖oqQcul $H_lk_ ;fG옙V_z M=v9*rt_p$Au{ D#uN5[ޮ@,yDHj 'K'si _ag\VG.Qc13;+={뭹:.)ߊ'R%`= 4 |/nQr Ք߭ɯ̓W:j7t;э[}yjxTw:3w.@OJ57wsᛩ4cەR4t;A^l8dS}O^;{*]7u Jӕ/xJ{|-uty_Lw5RSiZɎkfmT|w_ݯn# ڟ9TW##N,-sw3 iEgf|GP)cbYwҼ.(C.Yp +*(`jMWL]\^@pK.Ki.`P|]OOܴ#xM͏4/K4{Igmd%?[>v»g8W]`ɶendstream endobj 243 0 obj << /Filter /FlateDecode /Length 6989 >> stream x=ےqWaOsR>c/$UdEW<.KJ]j/|{4p0{ ,h4 S5S]ޝ^ܞӋO4zZwvy0"h虳T&}}/.O&v/ xu^*gt[C[~mhJQ/fwi g9hwI~g[>ffie1/qrqzm R> M&(qs/sN)L8d}v``o`99tmuӏd検 MRf: "t1짏]D a BWNƕnK :ˊ[/Cl?켇4vS-!:M׌"2Q,b9asyRæfT*OTiw:?jMOi .8yO'J@r(CWA``eg+ < y 2Q d(Lς:a`.0En| 0-LlΎdcJk{WYu@)lvְ\MׯW7b 훊|7lj)~ͿMcmjpL;[g kBl;kd mO0mǪfY!E r9h5K9@UJi=ϬAݏE@`LVHJ~䵒0c6: ګ:ّ&D*՝n2`9SkM 拶 b:%c1W$\3Ӱp?"&-n3(lWNkDMbFf.v ! ڵ/[r&$45J>c5ſ>O<Ħ2%0EܯyeE`=1]v8&h/ͲFr>hl,AG "$>\qmb{IXCm6؏à ]X 8EGlBep{֨}W^pVU) jdh0#:s&[%:%1oIiEҤLetˀ ا`ƪ@쎅K04 1Dr:TO(${ @LS<WC r,ܨ{^\y>xj3֯@n)z9dXuKul Z-l&2=}՘,]s}]`;8"k;Zoֹ&;:Uڔ{ӭ®q_Vڼ69BTwA?v侏H*xyxy#hA dvVMZNlG Uah]BK ,tQ* xj:lR ^ 9+@o{w_=SFڴ> ;<8l?K :ayhæ;>1t|Y`?,0N9f( p3ݬ:IkSIA!fTUcʛT:c q|c٤?McI ް%^:%ֲvuP6@ a#n\v6P++N_B[A*ؓ;g^Whx./aJiL*XYpU6~4SuEmIvk/xD6:@i#\ yq<8jhG=چ ,`6 .4/eK 0rDUނ2ꅈ'"!f:R0JC| Ŭ'6WY 2%LDJ` Nm>p .S C {VDɣAeӁgR `Qkyr,i, f1 D&.16Ӊ#u3$"kD8\21M_@FIij ? 6i%TP>nb{)~ءCXK;tź)$Φ|CNT(P16,9-dk?$)x^0Q@CNjIp4X،Ca# vQ.asC"Dp+Io3K˜ /4i9$琢dWE 9QaEfH?f\tOZ?;1 "p><\)bJO&%ۦ6P JV_Q_by[ ;6DXvDK #m"H?$`4h㦼yJE_dLT5@@ Qp7M=aR7Lp.+A H- r4}8p b 5֒*4 ",q v܏F+.@z19oѦdyP%f]i'%!jWd\n#@dw'rl"Zҫ]@#m(OY'p <5*[ؑ$DBzVvn G^e_ѱ!uϊ!?'Xi.=Nr` ?GH.iJ>JM4pFJ<3 'Q )3m@ʁЃAFJwowk"Pj۴撞 ҦWW1EnF5.4sWn+U> Z@V `pq"/Pf*beQH'+;baδl2io(85Wv>*,rQs[A(;2Y %.Fۥ譡52f(mq0Ca!b0+[}/u'EZdEF6ǩ=PO'366埊J}0Ǒ,\hԊblv'鶱4RQ& }|'ǹ|&%~SJE83W s|R%j+E~T7bZn| ,K4s҂RmcD^<PUMq6nA3r̸46ئ:VH$E%4陚Jmv#jҋᶓ| d0\;rO<Ǵ6 }QX26hlo\%ɱZ57=eu"R+x8`߰ay[eL |BĵvLV 8h,5g' W 5֍ i*Nmvzo4Œ%y 4{)ȈR3Ճ=h=obntuN.[mG\m5ƧFR?Ia*.;9U6"V K3 \ި(-(yߵ\zVR&?\wH΂WrEa_83eD䜧'&|l[Ra۩26mwQjC,3i*[TkE-S/{iI7`I9x;k K#"$[tku`^^3TttX.ՂCyR¤r9&`#(*)Oɦ%g{ C$fL:?-~'{.8o;@9KB53^k}3;R lCDMҽik})iH}f wK(In͍+uV2!!UQQhފ`J=hKJK?_@ѹfSSMÂ)e[ml+:\7ûJȊ~ȝIQ)ᱭ]Y^xê0y¨ bH_!yPG~nCVvhTI*.=ȍgjf_VN/{/s7*&9l̟~S`;N|K"CtT W˽xq؂~`uد%SFuZQuaR"r$$}E!4lɖeZ'vD iqJ9SP+3oKrƷ@ʬ2ވf+L@3f*3l.t-!Soa2WCfDk-)-*|{*12**s3ȷ7*Mۑ9.0BMӯ+VBpT\r^kH&,?2yfD݋?rfMNq$< Uѧx ߅+^C a4A$O)`2/@W)ǎ0|woo$p=:i_Q$l7) n5P3[ʥPp(S}` 'CW!IZFŸ T դZKnv:,>S(8tYP&h.kF W`P/=(ݿvP 򭌾Ziicr2?500 M$ |}P -,+PA-T78!U";lXxB })|ÿ|Sy;vBUc)ngTmp$+vHE FI^)뺯H.I2@ow&Fv.?Fs[7"8OsQcߙs=&&e}vg>z)՗vzQmnYvW1>uf)D>qF_O fپ,>JrQ?K70#dk}mͳ<&607;z|Vx oC/&a6GQڼ{<6 O-]T"Z>ZSjage۰v7z?qn?mGOF>kE=n'OѺ|/QU!=pxem~%`Mh  ;;pc-Mmm!+܂zO9#מw'l!|Xmi +g|--da>-\K.u(&$:/Ayl5QnL\\޶LqsMV?x~q6;]U|ny/{W~| pR {ub$z4庌Zbl-~(nץY㙩8C7јs͘s_~DŽT9)H"(<81cͺ@B11T_tAc'~$Cэ *FAt.XL͎ʺA9FcJĐC]O,4f"#ikK5 >sǖqٔ'qgku9^3&Ft- JkXvg <?Y.N+# IQτ/w#rj+Q%g }(Cpx \ZpIoxyU uxx3 Wa /;u%RŽIK/.)f|<( :nI I7k&nc*f)]+mJE1k0ܗ(^o.GGGA߫*L0K9\n$iOM7rˈr*5ZeKZ Fmhnj^J~16jsq A)ԧħqy?)׈:6IRgnS#9GxptwTx xem6xRڀA⛝:j*JqEkrvJ &CAQ*O祄//e(i鍉oq<[i#E ܶpтWO' endstream endobj 244 0 obj << /Filter /FlateDecode /Length 6283 >> stream xf;OVƌqZ/?<6[fv]haZ0~ֳڜs7n+2-nk׎0`B*sܼ7/_s12*;j67ۨ8[!Pcq֛="B%\~RLn oef`%tma0_N˳\3[`{.n %!:nnE:-'dh|f qSick84Gg[ܵ ˕esCL chlv6¼#2Mаjv#5 8ih*k˗y$@ =w@LO#5mԤ+~ 絹ڼ͏6?ƈF]?f%`k xy1%"1'@jᗻ}m9qBirHpߓ0*3uE1_ vE0 ڨćưfPl3b*y$#9>4XDK!6![&5@ձ  pwf8_jf\! L(5C/`n-an W8P[oYenm~/nIf.:9HdĖvm L+xF8)46mcsL HH6e[} dݦOw[Bra~vk|Ygڼw 4nj`Rem^w)ojl?S&o?Dyn Ml"s; *LJr\(bԢo 6yn;<YFXCB'6"%hLc!{rwQˮ܍۞A/z!G8N_FՎ.ZUBhD13Z|SWu- PElxZF՘8$!]kK\ٶF"F,!t#¨sp[E4:ь$F-7DxZ_-X)/2b1:;Bx莂ό36a,֮|& ]pC$6Y x9Az0C4+XDkX6EF/y3l:DnqF96ޭvNj{G :xX,i礕!b IMJGX{b%\RP&;畷RRާqAn^<&2o~aIM , b?wL1&>h9O%e+&nēX eTl9o/gJF9>hȢYw"Mߞq܂!iS`T J'֦Y ~[}繟>XD}AN>11;^?w?څ&k5͢R@[#|NR ߓ=sY"0D``wrr9}7\,6n&ohO C%USTߒPU+9Y1ȂjF3S~w֩!NM5&gH$tE2NPh-<ܜ{2֢66z,AT9L]dpBN1x%z/J^ /.DGdhVVN&$씖`7\R83c'cT^QM,( fi)Bs6s7۠lf< BW ]%23E׃s֡ i Q@:譴0 dRUث\Paܲ"mQBb[pA\Pefnrv)9BLёYeCK :X|WgDdڸM2{ɢ %nKӚ)YUe,bDgcuzY߷N0|.dBv(mryÝ;7mMl11>+Ǹb~E bD147y8L@;醧ʯ3<=SzޱF†gD@5Zsv^9.s򏶔1 N.ڊiN2N:T沄8vK!$m@9CZ;D[DjS?()qIʴQ5# w39΄nss O ?;9*y2gObt/ReN::&ɖHLH./dZ'=-2ζ`Ftp.Pwf't^J8`N%CU7ҭb 缞rVV]Uu.R2x u*0}U/׈( ^19AzbqQ)[)fs!D@P#̐@j -KT3uY]H2P[iWx} #l,ހA()E!2v Z*ya^G!ra5X.]&HMk3FfRǷueWCYT\Z0/OP3HEm;mJ/Թm Q=NIɴmyYJ;# qD=9;{Y쯄 ]%C*d.*&+6Q"#1hO"f1'# y PDSR0K >ͫNgcǙbŵ5 Z56J#XCRHu.oyHOظ69 ͡0m/[abź"_9ΐ /$İ UҌEgW9EmW3y@HVMG ב<_1͇TnVHVsv`t7'uVYp" VZsIř;Vi6d$J8Ͳ+sokMCVHgT)8)#W3}%V^ ިеp/(^|'^h=` Caֿ)@!dZPc7ǚ΃ޗf|[?}&+ƋzC"(h?"z ļ, v '3vc5u,^UdۛG{Q@h;չi}ڔ$Gݴ$ +KMY"ǝ4"c.\iknjڇ*QƍY,> =1ga ȷ<8]Խ9S+Vxʢx˥gpDɔQ.s&OЃShuvUiwi۳צ;zp qoW8χNJ%%_zCO*?(\Z !T*.Ϳצ Y"'xblޅttvҭ)$<,B̉rWuo\V@inSEcB;'eըw6mmpMjbL^i_Z{8Eouh y5$:fҏҏ61N^(HI$O_h,sL7<=~a1fcHJ`t;զ=4֏Izcs EhGf$mNr7XMo4%zz`)˘&rK̍(qu)WfڗK > _],=ڔE \TKLΚ|<쮼ιRt&EDI6-И*$r J`(Gy45j&q.SĒ[wKb-5A9̮Oڈ珪|_/k?")ߗ5!11ov ؽt{΃keN]G]:"ySww/+ZS(³eI Z@XW{6POؓQ{K$ .xxFw&yˆvu-x|@=ބ6~m/["(EdG Ekw '[_a?PN_d!taTtږ$Oe敇E!IOɛLq~ZsS!aXFI$ \I?\+.z-]1IL h_$;SJ+-һc{6 endstream endobj 245 0 obj << /Filter /FlateDecode /Length 5468 >> stream x\[o9v~Ώ{- &AH<%[{saȖ+nowƘ(2akoqH1;z~]ܼ5<?Pqqтos[tI`sncqrۤhc\yQUo G.vü'WfHًvۋvo[(fGt| ] z :Q+m$pbA(C8>e'l- kǴ\ץ/|_Ҽ)n[4s64A+p2cJI(n &8ydp껲"rćԎ=0*,Q/QFFm+WmfŘ6*-oKK?J4i;[)16㐅acvp1ȇ)y7=wI*c;ϴ6IX[%KY!*0r0Xow &۹0d v\5CP| [3ġb MrN*o*b%$G dCߖ}9l1̬դȾ#ٷ9=gTߖJ: ,^,6H07Ō;(QT0|gZ6mfs B]5˦i*S#:o]y*]i"@ͼޔUi^4YĈ۪GF?]w6Rmמzb-1av2ӪuYx{n3|(O!ӱ4Q4C̿zk^di,Mߤ^"=@N6 igsnF;-%tn.F=V$qͦzFd!:=m&O_T`Mx/{F%} i2`0 ݼ!<fu4F b~SG}N @졢֋ WZ E& JZ`\ \C^:L3 anptz< fAuF5kDfjt1neϤD#2*6̀`#igFF[pU+i:7X4 UtkX1}'ܽYx7?&W(X[- n"iR: KvƑPQy uU@;q6+вIf>_ڸ걩|T,6.xavFM ,L*S DIIOh' ݐ!l^ $4ikܶ/prWMɚF'#?s|}<ҭC TJ Ix k}'!TeȨl[E&K%6 ->1xkܯk KIɷ 'r !Mt ^9/Ε_=ѝ7ifIrmJ##f8m i`5?'kG]抟(dx/^}WǦ-{\lݷnޙ yclcxCm&+`,BV9qlq-%͠W:mҁu`H~3-t`=W9;ޢ ;bj,3s>"}j7hbDP 8WDŘ˵bHy;=ϩ-?1<ŘTxlb2's'H_RJΪ sw-jh%źԾvsuf]ɝLHegV+aԳ[y`.csּћɮԏ̚|nHrD]y3nS|X bDP)搇k eQΤctCVpw<]y3}EYpE63#f(3q<2xx7@ w[Q'8?}_046ʈyԾcZ1!5P2H>ք@;M5\#⤖e2x܌d#Tw@(2">9VtP穳2t>A^G 5Q$СL/ֶ;Xa/xĕX> -sخTm=N]t5 ~"=FaPDV|.\]+ۋDNXI *M e^1K!&GE&M彳%y!.Ѹ0ǂzAn(Qe89f'wX^y8{0YA{475KxRK@Ղ2GD J5vXXeZT ^xe(p?77N\1Ih ։^ѩ| t}}$,^nkfv?V:Mu2v10E WQi^T(c#/Y(49npjeш:C?W=haˣ1ϊym'ʟ< %_2ޑ{$+)B'jb .7@'_VSES֣0ٵB QőL&%YVAAfTDm .G.ae} HUX E23N!cI3a۸Aʿ@ s"1&yOPbe gB"i(H°ld !ť|rż=qX2eJ ރa-c"};jYP 1B$:xȬTw20 b,UWP+l4uMJUTOP(+N~Ý -$0=$BKzEYEB:=@{iȤDM<x9nrE}M>LxO kd A,^6iVUQTb:KAKN{:OCf}`"GĜ'}co &^ =r-p}Hfo` =ͷU=EiT;uqZXm}M%0CIiǔ6g3ZA{WNUhR#tTWY9fuK&nT'~/a Zȥ/]-BH^}BNT#L Ent4$SѺZad [{6vjCY_^l\G*CFf+!GWͻ.t%Hյ—b2U=q~SZ םs R6ѭ];^Y}HH/<,9WJHh5nӴ?.ePTd(-hX50Wi,h\m*D$煮yfA J$Pq} &؝D{ta`vԵIEU&:Dž\(e1HdgIEVK"NL_Ojy[\> stream x]Ys7~W؇uy/Y32=}hQEdkHJ? F7[Ki?F@_\/=ck޿Iu_,>;N“1(GW"ȅ~.. -~֌^/=J"FY4Cj9u͇hӻ.W1 .q*{ʎ^b4kQj9P 7F3@[kÚaM88Cp v1h놛%N) )K+B;eïHΚ膣ePcF"5xָ2EC~--E-W ( zDXO]3zhyیzi-Lφah0haaؤ%RA+>`b Ҍ8E<FoWڎ9V npj Ia3JK?ܰWϖl%fSJVjb (45*)z`B /VJ64#Ȣ:c ]G>lB@-Uޠ~*'OOt<\o8ɻ˺^%5C9ĉãIlB#xo j\ׂ:SUohsT4 ^VITMkie\3iVP6L}`oSEg걐jjS@,K.͖ʋi.}'>-XǸ633>MjEw$ȋ7K嘙0Ju᝼#!eM ڄ]i8L& At^*bf8^mV뤯NO"*! b`A"&fߩ<1!\NLZi^7YJ/MVpA3i kY06ۼג PDNpZ!ֿXfzp0e_t| 䆇 )QU@{L(ô 4-"Ȗii|!X]SJ%$K J,m-zeoxንLLBg"0 6u/'sι ã+is~WQ6P1CO+b[4hZ/a=|H-@iD$%_t/k6?Okqm>ks]_ 67smqwBcw6)P]v43(Sg J܌^%NSQyWbAW/IX2ގ"c@5"eN|}mY$oP|@b%k`AX!6PP f|$x뤴hPWϳLori&]Ұ)t Wl!ۛd& U(AWRNqND({H>AlH?܍lP8MzǤ+c~0Aj-MbDOear+n6#(nrۜWxi`;İWA_#@l<[ǯ_|6\ۿͣ$S^UyUD5maդi6Fd%k x;C΁2ȝߪKZh@RpaPa~+Jfgʙ` wU՟ b ;#7C9ۡ:Eh~ ( W ӿm.YK0S~b|^`R`] Ɛks2FeUmnj<ڼ~m6?nc7I (f̙J1yMm^Ym>OjA|umt=Rv(.[XRlg^9HB(J(Gr+o4Z6@˱e(U EOLǛ_lBm0jtb'm4LW4" AW;tRr:%5ˎXz/%xuzuKC.bb!qv)viMMIlnX1cu$7S1_86)jH~N&+czf^UCM5r=V^ vPڥVnZ΍G2y؄&5wR0 bͶLfgjSV,A%ON6ǟ'Wº5FQ L~$'ë f?f$?5ώ̦r F<K|1,a%6؂dσ鱏vکBP|h`1fdj&n~ DQүs36Pfx$[_ 91''ÂLq?fZO8$EWSuHU%14TvqXNw{z;crggWCOo2`a-X424xe{ G}G @:6;@9 ,BĂP?{K\G,2T.IU 8}#xZsMBkH&%$E he zQC,yzC6a$MK2"I𫪷flvQ[Wa/R }Q3Jh5xS%3czܨNX24k^e֛Y y *qt;7%8~YXkj|TtzRiKyI'boՋOl` Ɛ=F+EkD&V2B)0[vs׺bNYȍqalpVrUpYU5CC3F J(/Qq m#-lfzVQ5W` 2JP3!@p\Z? ckk?DPs[@着/3n*G44^U@zla3V9CKvC!Edfxa,'ØČE3Tji,hmfQ`UÀSF7L~WG$0JD^#VۅP=,*T:bY>FrG{EC}H1*k A\ZPwzrN1k2rPKh*ʠ\sG'y='%P~^Q.Op㔬bJd;nQsTٗjs=ZzC s@![㢂fi|qlhr8E0 ٵ5S45a<#B{ _rNfiYR<2dL'F$3g5MJ瞅 (gAS^&[ J}'J9N֧N@׹nAz. wX}P}#N F;3RM:7^[{ s,T?K[2'Z3pi5f.M!ErR= Sӻe[tu}:9=ml1b%unm^3&dOVOP.]:5.RN#S B&T3摳J Z!l%Ӂb*_r7}9E?*޺a`{s?:qB~-gCҐ!:5;[_-χ+vE%1qfé#:V 9dy)hn"4oYubBL5Ls>b/M>95*kV\R*q.Qݫ$$)8*@%Q祭%WƝG~;X37\-#MceMn^ޢW2̭`=BG&-uKoܝ` .eVV/: ֥ZfwOjQ?A6ʗfSakQ=?f:t~&E'pQ+qvfƜu~%rG8i&^L畲!- | 83޶VcpY-5d9‡_xg1tAтaW?pkΛۚz<g',o;[0t'gvgANH%$ATx^c,j.s-t֊y!V$4::>F J3y7)<0ͮsvm[qꙘNL#h@ʈ{;q@vtIM_䙌#U]~гrgJtn-ڄ, ,E%0Zc+#@+Cc"2ր| {kbmPP$g˒ee,s$ԏjnEתݧkRg4FXԦsm;pbz)m#pdBRRavV 筘&>U%"+`& nu)mP+O,{@\z7*aH~+,cCzq'eTG0G83^R֣V~~ !bV쒿SvJSQꈼ^SxlP{9 2xu7e ٬mm)usƊ^@tio:0l]֨<x0h*yZ`ThT=ē&{L~aXdLnyt=3kooO$mei]|[,t=isҙHvP-5t(JP4 ExtRFv3cCMW_2vldg^צMYY5wR><# 6YZ>)S[1mpPx+JImaME$y8WyV_rw,\lpޙ`|J;;PFK\{fՖ=@:Xùw_bAIޅ t>.@ߺ TnT~j| K0|;^_M7U=e'v, -jHKUbr.|hvY{kjfg&*9Kڧ{U^P"I1tHC`ǥCIhk.A*gXD]TxՎTmXC1]&_ ҝQ9U`+I[}έܬ|C@}ۆ¨ Kqh2уP,dkV a_wҭan_u0 Y6 @Xendstream endobj 247 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3767 >> stream xWiT׺T VhqEc4& hAffhFQDEh@:68zD1}+_}ZIr_zսT1vLzx.II/ˁlյew98ص{7uN=;b5.>x0S<ԞK5˒SB}|WEEF^f1df YLetflb0nLf2soƝyYc30WƗqfv0+cҙed] jv+쾲f۾fp&~?pߐvC9|0lWy`űVɿR&}E:iHTȀ8ttVMi x%Woh7 'FaThC=Y+kPZL_A;=hʑ)'t"{,.@V.5^D1dJȒܵBSkKQUc+}QK1C3*Ir%g1t۠*-{h,p$$ ozf)yŚdAw]s2Y$ w&)`8FVCad֬cC! xGI.9[dG~p\A="/a\2LzqE$qGSM -`ƒw߅Ф*)!3:3,BI7ȰJZe,y^wStlq-&#IIdnq/9YWW·%u%|wgn}\v>/|dqg!_k0*(md[ >4Wa)zZC~g_]`.U$GJ(Uh!}t!ih>ĉlX9h{co!ULqx]"2r 2΂w|k" kb1_mwE7,Yro1tOC+eY9JbE(k>wPzF{vrFn1D]Q4ƴfj>_`zAw@oJ>r5 "R p ' %ѩ+v)5E)KKmxX"(ҍy@A5%.ÊViMx6Y lBgB֡S7V,, ]}7|~'үL0;@$3ɋDC7}q|PQ[(;HRn;:UbߪGk7Jf%p/PvJyq,G7(U ܨ)^|9(+UE#+~gq7I*Ygo|rM!1Lª^gᩕԺA ӾL8=TzwMYnIPa!Ӿn\N22gAx$@%+ү8`-ľ%qC0;DM,-ׂA 8~o_&N({PKJ]CDcb ǀZୈ$-cuo0I[j*3e` {A̜]iomI=h>~"sŠSV+/3c٨`5^p4N?ơ([% Y&ʠP6+Y2L1jQKXpww,9.f,\ qƸ*J~uQPcIB;m,U/*?B&_Z[[^QSCnWSZy"^:ø-fg: 7 zݷЍL‹Kڙ}lK$HdZ`ض]Oz nTz|>];ghȰ[ lk.%Q5=9r9H l5>6p]_p j+c |`%&/By&ǥ,SrvyAjj9ks;&9=;̲'b:6gq,x/Y ^e#bΑ} "FEmuHVOj3W~ Y . z[Grxf<){ ȥZOԈaM[WS?5),eu%o~s%ġ]rDa(H\m`t; ~CoV_ +~լ..ȏ.SYsV)?4Fqe h~ͥ\ w}B^Ryz :mO:逄…DNco -=vw1}kD:Dic+u!0!ʖkqdOG6 ].O6R]oDO~]ޥW@غ{mSnOZ?UFRKf*;h?ӷ mB=;fJ[Wʊs*+ΘpAu4W9w$jXwSB֦,]<[A͙{M*q6c&|rUZ'i?)S̕{T{)ʇYZ:a7ԋ\OϨjAgK38G=JCxBO3J%b 4dK!gPq݂J4; 3882`endstream endobj 248 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5093 >> stream xXTT־+"֫bh EcH"lK"("0X%&ּFg^43 I[YoB{so_c҃d Sޑ;E*!#ocM1}u 0ѷ-G0e2x;a^V6c̜9};3z`{p;ߟ<9$$d7hLJc'Xx{ZvrԸY[P[utR;ߝ6n禅AZ Q:io)L{g|߼ 3Y82#U,f4ĬalXf3Yl`3;f,d[f3Y,a2Ki2]f9`3 b3CK-f(1}^̻ڌ <-}cFĘ3mizK1]q]m\2^V"{}i^ۼ%}Lgqf@؀ol9?(|lhkĭ3" mb|IiH|8h`pa*~* ڏG]9Yק!XDlM'gP#TvN`C1G4E)E3 (í(mD?Sp_ z'{;),/^ho2\Z.FES1rH%̵s:bX82"ۉ %cQȢ&쉉h2L )9]>(7O|EI [},fA.p堯P"uFe^:0E ᰟ(LzD:nvUbɼ_ڑǢًGrޑ !6,SN-xE.v3sa/dpeq:R$ƴIÿ͆]n4$, z((< E`yCHWe9+s$w<}a^H̔Q J7ŧQwpE'2*V +` tTh= DĨa59t;)9,v?w[ J q ~$Gq#d$::gdn]RZ q-U] o2njXdL_P`QG :{MH6xZV:~Z1l# Km<+ykq3Z6s=7OYb+b1W~wB njdR4pze<ĨЎ5]cQ&ψӿ&^@]籈lj"oqy 8#Ղ -|[U]b$لCg`B 3 :g2Y%e|Faj'~HZP>#Db>b9 rt ;γq{#bS 9d`]D|qbG2̡,yEC^]үeQYT4m.*~X z=Pj]ٛ)hr2TRTR:Q 1׶P&I)ڗ򿕂ₒug(y (619Eי?|TQ}Ȁ%[auvoXOF?& L{؇OK˼,Kr"txPBb-?-c7/1*1*/1R~!U(Nק̅zTܬpڇd.T/B3=h Н'SAp| 絉:NS&'G@N}hwei/RŒcpJ rNu_1'W&qOñ&ʂ^\*`N хRT;%*ꗦK2NMy穘_PUo=*ׁM^kTE5}Hr<)Kū 9z6]4kmFDN8a<-ϝC{}{~=v*9HN^qiEXZ .nYhS5.viR D*^ 9+q9oVU `*!Ab*#kfJ~>{዇~RLe5 7`OBk-(#'ԙkt,^x[~.wԸxx554 dYBoX/v.wA/@m]|71C\۔%߀\A.|W`窋7{ RS}sJ_IэN`PGw2^hӿ)| m]nkMK2gtYYW9>@Bmlp.˭HKJHOѦ#U- 7_Y&C2j踘Tl3y !S"RRNZ;zfoffDO'n͋ÅxXq.{ґ]Õ !XOjl.ay;Wk[ȥbahMoumNFdX[ /eQv-E=zӹ3Y'&.~6,8YQ_/sP-C3딳L-θxOOp5'sfsQ)/ -ΐj8?|6ɾ @ާF8okhrVk(~]~~/by/> L"n]"Jb2GW.>^shs9}}PuFBtIڄd$nw:H1&B?3)*uiaZ%g+MUx(LS<ϻ8jD\'Еu ?i.})sfXZTjcMcM(c-ᛢꜳ0^O. bv+I3l}JvWV&~`#Hy)[5Tmyڝ '={}bC29[<i4;P';:j;vo[xfK:k̹ a,jOykXC]._;ntA:*T9H9\Vqq1V?uS7ѼT\n+_k$2K+솜:9(DA*@y7b-P .d+uJrϞtήBձIIL$&ug8v'=u;?’kɾ`Sq=.BttR%.ÑlWKxfjEq\m_ͅ4sEّIQ B%Jay1rӅN]}tu)e>/VzHyqqSBC3Cmڰ*7vhn2k+:fᶒ\ْPK03^bP9{[0endstream endobj 249 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8344 >> stream xZt׶!`e ddJ轄j:Wܛp"IȲ&C %KHHHs%ۼ^ZZX{> =(@ ZzIM =wnXJޞho8-?l }Чc%6@?&%BE6~Y3O4i|n]ü=]~n="G =qbxxW !^g;~GGw%ak\=-`\$ _@Q - ھ(xqȒХaˤw]kU(5k=yyowf-.&L:mf 9k#F:7:ϸ'L|ÚRkY0j5Nާޥ6P#(j$EmFS1j,Z@Q vj5A-&RKIRj2ZNMVPӨtjAfR [KMS([eG Q"j7ՋzSI?՗ @ j##Փ p{kU/&ʦEt )Wy_zϨ>wG[''{sЛa{mVڴLv=[?v\~v7 z Ӡ_{g;_qv~9_3a_<\?ڻ1"jDꈽ#e`BLr}ھMSeDC4()حȭn1Ԍ]9mjG 3B:MF+9X!5 v `Hz-flYdoZaȚoo"5ؠCzRIȃ5ǴPA۹2UOWN]ic[ 5 r>b|a8f7~->YfvvIP޾Aȏf;hvoCvW;B v<ݏޯ6H! TdṶETLH\C c `Sk> %%h68%6#iZu'AiNMT%C.5# Eh N*t PA4ŜzUtk#H{$Ǘ d$wљg ("5]hЛgm^}J'J._k̃w\Gr KQNR>B"d_̺UuT߷LXhˬk^)3 殐E>,zkK?fz?|Ǝ 89Dí VTzl:K:c}! m<6~*7u}6XcVsaDLK,\A ivC"rWةq$2ec]tWޚJWMnǛlN}COOoXÓ4;$AL6d@0YXu/:&Ж$c˚s #zmڰ~_ޅcf]TH6y/򧥴$+񳪸]c۸! c|#qA,X^efIsH34!nDc: vyMԂrD!xB!Ȯ g9I8D4]7EϊxX%QVݚ-//?@|bQKmvw3|rQzW}Dh  1G9Ħ4}4@ͬAq'2[:US&ɑlKGArNFSRi-.9zH]JKks%>8,;3>6Oi0yV"R)*㔊DңjĐY{,s. Jk|RSw-C6O-,,tSj'D<U[^nUK?<%+iq+ʼn+zt(ζs?ELxZ"R`_j{pEtFTe4&^m|;#۠͹DxmqnCq\7i F>X[p]EVfyZ"A4ce'e!G.c6}"c0 `Unj5K?"9~]-;銬L)| nu9\V4 JX!? gʊ\2;0U: Ba6S6s U ]i{Zy!֮ 07W U燆cdMɃqAxj5VF|$e۵AfmXDy.8FGVȢ]4&r8 t`x8NUHIϱ"ZN-ܐQ"K"»N{!$RN"t'Nd/m/%rtOO%e[qᘦ^Q$8j1 Vďj[,DE*TaE#p }DbFc:)q>8%+! kŦL2a8O.u=i4ޖ'F hƝY^. }Qͧ>'b ɉo}?u`-ꓝJr0aE'0b~hըo }4hP1xkqe=B:8/CkoHk4We u{_[MQwU5>*W_]x(@;ȿe$w٬1yIıO'=ǒFԃvM Rb3H:]b7{q cYHc7Oi4o=)Mg Y,n23"kePiOJdQ;.fW nV&Q{Pi_ "-1&(MYUB>MUk"BU @.P)5j`:J$EtZF*u<͊ר3ɇ *ZNR I:+.^!LXaxeuѳn60=g3u$2ѝcо t<=D/(]f\ꃨϿ5~G_OZs|(BSavG <|rw g!(j \os>3@ iRS[`dU RƄHwRHج,7C$ {ҊGS)2g K2ʊkÝ\9:W K|l0D7#n/6ܘoD֨OnZmZk^@7u H ǗK?NrVtm-< Q/6ʃA/~_aRqj3ِռV Ba%ri(\.[[ z` xyy|EHH?OmE:iM~ V[GIy 07TCN "Ib}iyq{k,2ŗۛ$KN S愶Q}7LiM>64Od6UKkIGj'Uٜ>r۲-po xS:*H}``dxS|1zVVWW{IPU7 (!4 'b;(rԡPLh*U ‰;s5~ hp {ݑp,85 |tˡAD-/_JѮj CZ ."JAҜՖXqR[6%+3/kіg2^l%lAxlHҮ[!-\oAmFށ M9JVڌ/|,5:&#%5E6s@}qeMnk4Ew —)_z_BWX wM]2އS'7;0j8_rM`/|uuoe p)D zzK%`"T2f'󙱒tP/@Aׄ-aS'j`: f9_Cy@~xP|ʜFD|Fh)m~ ?lwF 4 qNs;$%V'Nq8 $\''Yoqo>2Ӣ*d焘DAIfxFO :~fTvgꩱ#歝c6 G!3LIx`gu:T Id5$0,;KGK]>,:-O1`ut9 Ǐpga&ޕzf>Ǭm÷.F;HBңsN|c7(d4X)BJ%t;ʀܵ9xH dcjKzy]r-i>{LKV@" O `gciNEf )ZБեr9'nCwfFzja#~E$vmkgNRGՑ#-X^eN9S"1?~fKJ!/mPc74Ϟ =\ԠN'AhB7yՒxC%H˹͡o;Y㇖}rqEr87w7p+1d5sh&~ "^D )~WrxʷXȉ; z_gW9yAd+| jW [Sۢ$BRSo %eVR+DTy&Dw+̺~H>D9X ` Kt0pRw2DjY[ۥ|˥5<&Ѫ.888(҇kء$]64ELoc!_N"Ѱ`QNvgb/1?ir▅w 1GdI#gϟujqrCX0a!?.Y}s!.4:{~f+ͭh5v?2kUkN+㇛ rd.!8nQ{EiB,M#_GdS6ntrv9‡ hԓr[0h ~"(帵込zbv9crQKB(7k `@:h6 ;YZ39Yd9m鲠V7E) >o |кMєS5jێMNNPɲ9/C?6(,"v_^`X|:+5L hdD窄P_V9gl-|>÷.?4[)O&g!$PRqRq>0pEo⚾~ 7i d7Ϊ:{lG$ }<&s0L|`}X`uI`ÖFϕV'33ى{Nkպ)XK1GZͳ+haθ1zee\!3?SBMKEGFFJ/N5K<*ĿHB$c ݈֢~?IFPȕ*|74 > stream xoCMSS10/u`B@^I  qhbouCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSS10.CMSS10Computer ModernRS3434O'`7ҋ#J2PG$PDDKP ue.TTB4)(`aa^}vrzj`ITI0b17|:T}ʋlu\j/Q{mo߻jluy̯ȋmKNbPN}DN.Y=]K>F<_O-灳EG״ϋ8(>BcEa*(?(<0<N?|!uPWb  7 Ȏ ٖ l endstream endobj 251 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6080 >> stream xY xeN@P@PFDEe钦69&ݒMZZ"EEuΗ>~i땙̽O>i~wy?d2'ۼceof3C = 0xG7` oy78S~ggu3\0]Ŝf9aWȴGVtQa1``~ځ&p^JЦC MCЪk)ZˡڭRLuMDl7jBQ,A.f]t6T+A[hS a!`0+J-'h9NeGВ C,Tq(?fo]Gׁ8f/|,I<]N|ՎY]JPIA_%@|zW9ӃޕbERRuגiP/%KPZn4d'@4_.։be^mЀ+wx*v2*}VȆo\]A?Hsy/n =8hZ@6r0Ab:NdӁ- 3c)={ (YS5h a28z 7&\Z\:Τ h_#FLq¥ZJ^C?@<94B=Z~|e@|LQfc%+D}42KK1e*N5bx4A+#(@l.RABKNg2Z%dބ4 { jr|umLГS2aB *8FAE 3k8JZc :F[vCU9}=[TDz1a7{-|:mW1f2't>ڙMKH1N0np7嗑[i2} t=g Tɧ@W6,H L\ RIzQ* V$=FTG4Ȼ5ZLd-17iKP32=km4MIS(]FGDV F,F=q~VhI\ B5TOorgW &gR3Ůj7;LdTx ù}O8/;K%Z1>WcbV[Gf1Zʍ^jkb!%1a d)xj/ȕT71wCFMPbJ~0Y|TTh_S$ϱ9Ϊ_ةHqZVRW9ڗtx#=)deIs $cctJjMc@ʡQYLxsB$nQv9T ~Ђ^S^C "@zb#VBQ # ݹhޗ:)g^ v0n" , u5MγPyh>=NĪ* Lx]#oV n\[? d䗷! ;T؛pƨ!|rfsL6 23VU||L_vmP DF0ai:P=&t)*7&w-&V Ϟioi#vUWC'}.U 5).zD.4z*g mafjs^!f- $HsR87cv臇{e׀[Xr>聣!{Pn#FН0eCshIVH|]eSuL9i =qmHk lQ,']6` .GHd~-+؛^ |NYIa D.xؕaD ]VBg^(^c20@{}CQyn l򥯿fcQ/BKP&AGc( !z~W |X~৤KÌ\kkUb(o9;-p-WpCr漒ݙIo'94ֹQG ^|vԷ̮"Ќџ9wWP=]i dtQQfElEG//#*Cp}8VeU;_9DPC}=N4z5βs].+z-λ62B%aZUd!uf^j)N<Y%b)7p\ UnIEB.!ɜٿ.1niUAVp8mVkՁ# MKJA-3 \Cp -Z7Ȇ$VFevYn<ཉroz3QmVz؝(z;2d! v3G +ӇhOΓ-;Hɓ Z[McAyPmq8G4ڤBaaFʑm]-dͶ =fՌU_KIH9]>hG|mӍo3C#L4$x΅sF iL`Б 2"&B\8Lt$H>wd54MBO+䑺(01gG3bS:0jڻ~F'A(4 M8;l[@FC-_2;]:ʜ F{>lt2N"3N zYĪcCt;@h~<0wCs3GN*r8 IF쾌Ti /vRw޾ŷ'#Dm&A{5Uɱ[f_{>֕unBBs8[zB6N&t㬳pp㿡igUZA$.yZ[NaNP.wb^`P(mP"Ҡxd,i Wy1CKsƼӆ=x=W)7tvM*Y=*f7f@PL#{h[S |-M 3Ko)1w@,FG8'3¨jS25MC1(\YEIm&kR@s}'@2h+Ŗ JKb1<;Ocd^co!VDh,^ŦTK%@Er475?#; Ҡ1?tQ[@H8P AWaU@1XWHi'oe}>~q:fgynpHo. kJȠ ђO6G?eWP\{>sׯ/gk$yPDT)*k:&&-yXq6F\._$۬HRr<4P,XuPC]b(=hatPd o@(*mߡ/p ũ sxH! Ǐճ:8KY|^&3ÂntY%ifBz7`Axˉ7)3\}D ?N՟={_ιNßxsjyLZ|hit;J^r5㸪o\£i~b^g[W#̫ϓU"*yi ?T-Rt6􄅌&ϩ/rH E9z ^DWXz;1h="܆L5qw`׀jdR-q@l͂_~ZkMhEqaG"Mq[mڪٍ&t{Z];/ME,4 MmVR ̼IdrjL<_I+~;_7mXkPi Hd=ۦNfX ēarFnd36-^FRi2Wh+jd$]",-=`Xl&M&pm#ZЪT23d^^x+u ΘOi8;56׸PJŐeAYc/;>oB;'؛&:ЩT[N J~qa@[ ty4J6T7F(+1o8k~c~hHTiA9)MU] y䶍bqz q߆9G_'yhJrg8GT j/N?la,TG8T* MD*ZZNO\E[AY[oTտvtbmBSCq,X/|/a@ZUc++B oH`ln49ơABD,N!:=)5+!b:8/ƽ?YάWhr!3YϬUk*+zmdgFMħƝgDVQB0Ԣ6 )BwYj-Ȥ_!6@-[x2+bL5P`U1+jm/zk$/kP=׈t>.ѩsi^媤 15.+id''D +7aXN5ff `g4b"A+ի5.PE3S@h*l:=1xߕ}㟫2)2ou endstream endobj 252 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6279 >> stream xX XS׶>1prTsh:WZbXAB0#&8[j+mmvoIo}^>>qga_KDYD"d)Nὄ7;BMj7=O#+1h4>Rb(8,yAGn7v8N6ecwg+SNvzvc;y'""bg``q"|>v+Bd^{z/:gAp05x,(gǠN v[H80p-[]-pG+|Vs_>e3fzws'n4zFPQ#jMPnXj55ZCܩ ZʉZ@MQ zjB}@MP(gj:B͠R3e,ʕZNͦQ֔LʆPj&Q);5GͣS qeA)DѢU+*_eqrI7HhZ'c~3Ou߁}=>rzoAOhA#X;ZWH-mW _v>o|9d6ޡF >lða:o)p\W~ UHE?1l~:huhlHRSRP,Xʸty j_-a]=;֠r]VRwe)a(1xƪkXomCMgTn!A6-#աb(4t1w E`-=Sg?p6I݆uI?_<|##γN_K[V%~#Cը_GσіhO8BP _Mö2%gגO5ncX3^c)yuࡳN10ox~$ ٫UGNmXpZiC-*ww(if&R`y~5 X 48y uzՋo 'N[`c ,a"^?3YG׻Ov歫.S&w4ltz~I,D RTHMHNwXvcZv;@|ho(Ot>yCLq~ktnC1݀&4e:xG׻C,ux̕;fLX='8O/ :\'Jۅv1P$~II~$3\;֡HA)(ַ Upޛ?T*_-ZImz(׋/ vݣP=#BÐ`3aLmy,8 %`J+,6ӝNT[ v(/nG#&b)xuXs$!9tIm'ubv:{{Gy 5wdg' NwG-tCLYvPSq_drꨌ=]b/t29ۤل"yXK$}f~S6*'Rw ~$Kͅ\t- i_ѯg3up0V[c`Nc5-mX10_5]cψʉ2wO|x;[ð3^+5TWa(hiy~>8C&,6n{f?Ø {߾sp{9£89bӵЙpfo<:CJi}Md}p rFݝ#FVA刹Mv\{@݉I_ :E{9}E>=AzFDw5kMy"9OeMATSff(w:QC,84Z],ڿ1X зimF{tfiC9MkLϲOLZꂸlTDVa1YSzDBXh_iEhg[)"v;VHŇ%oFE)ȞkP g3c (3\WP]YŨlf;+0fYUt~s; ٪VEgBvf#7BNm~CyjueF#N,4< C_qyIÛ{xBJ ߦ@IqݲӖoaTͲDXaxw[vnYuΙ.)v>x,gZn5} G0 VId猭]QЁeO!Zц#@3*k9iA")^y(|m)$DzH!Q`ͳLPmPn7lGK8("dCǑ:aNt7v{"9VEV$j+&CMd oWY (lQ>VBho@xxtl(~Oe]0F+Զ`y'H8> sjdHUjP#ߡw= lݲbE^9IɅg|9guG/+%. "Yz21rvWRʺhru!pKx* E0A`3^J;I7@8z#Μ4ZR﷥t0,)ڭgbdy ?k7r3I+nq{c2w LeE=̒aYGZO6f煜ZIϊ3ZK usz! XMjzO w"C? ,Tk")-2[:1GOF˨/ŷ/H=#zMv , bWƇ4;UCނH;w =@etX=m.jJ,q+@NZ\B§ O!ǠVP3[Seu=gܚ1&!_mkLIpt^\KptC)GO8>̈́lL,k,?^f/ ,]/D§V"=]y#GN=aM>lf~y b߾ސX55YEɻSV]X_gu:F>b#b&-?ks_I$/T|tbXPS,ˏs@xf0M\lgT,P,J0T>qŪJ2v1_a?|<-Ght-ws <[R*r">Ⓤ79>Cǘ 3c2vR' ֟" gO,jE:Qt1jGڨYPŬ`XRG &V*Pd:-3:[)p5 ,MRѴ; ĚRgPK4L!9Gy/͟Gsd} Nғhn@U( y"X_އ+5HJu"U|R`tX5ʂغ-&{z,Z,e 'L>-aUaaUaZmUנ5-զ|f0?.kVsCrUܿ6MUNqc>w P}6̭W[}>w(,jBmO }J&pa)݅J L4. ϟ;k1BIqz*/Ncz<1ĉviE)=4otLQ @Xˈ ))2ZyY<,*A X]O_^kcӃl5kaiVv(~FٗPfVcaH,̔d31DYx%4bJ;-uf%Yѻ>Bc>woH"Y36vk\N VLyck_}oʇ5%7{gZК @t Ǘ%]piK\8Dv3ݿ,KRzZm\̾r?H@ehI R@P`b̂n];׌/Mۤ`"DSnuj9J$OJ !Օ;H>.ؙԹFEQSCj|vUf枅ج8\Y%5(ɤNS X> ^bLgq <z3 >D}`,|qx gmER{v(#SR9YѪtSK*?u8L2)] Aw^/cN/WZ]E_2`5.̵]_.%r%ǎ97N_n  #VB'O1<`[?ўGg;Na Z~_ҰYqʮLnϞIoa,;}/(?ZbeS+8ggmS(O{o?O  +E7@*ilb,)@"=dc,,1Y{{hr/LTUlt0,%~!|}`&5zP -6%o c`%$*y\!Q ycyVȺm-UNz* u>B'FrH.|?q:yHbG@D~Mee\64$p],@ŌBN)UJ|_{v偊 :Hw3 Pӭ'w~JMN엻L۬{/zwcIC?çw].:jܪ]˖/v^5pEb/Q? 'up<"QP|"FE(\]fpLfZyD)_WtU:JEY(q[rvgv!: lAb'X́u^ !kE}F٪6UZ)b#!--CLudatb*Q651%6 Eڢؼ]-)NT/( 8[~h&\[55m'%)ɇg/*%7??8?2L ^*5E%YB<`=< 7y!Ax3ﱩMsgAL]ve^'/?Z/{6:x'KiYH9rWjW=)b^|Qs4نb4G.ľN/u^EAߍ|N=514fcQ Iæ$$&)'6)t@iM̼s\fbKÝ5x!!x c[{zm0JJC W/їxm/ڣ ˫&ҽ;t  {5ʇ&Bt6K%9 8p6S-_EW8AkK()q3!MJx=$Y馭@zޜ\uF.g:]Iy[]LMsh6v6Hknm5las78&FctGWJaXx5-U#ǔǔE%Ħsqr $[EITeUnIQ?@XX+X(z묬V(CMendstream endobj 253 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 445 >> stream xcd`ab`ddtu14qH3a!֏HVY~'8ϽyyX^(={3#caes~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWsᜟ[PZZZ_ rKܖ|?.n!w˾0}wqhRܿ|x]ﭿEo/>;KYzkMiNo΂@n7W=i=?fP>{*?lIYw-~nl]+Y={Xc U Kts5L0{܂~Nb[|>i<<=<| Kendstream endobj 254 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3484 >> stream xW TTW~eATt)CŶ1Q;*v$\q!F *ZzJP^Vh\b2ƌIf.YLiӓt2}_}'-g朙N~}weTJ&_iͼy1T9SӇvEN&-_:uGhCTD?St'4 =De<9>O[R{f켅 <˸4YSrcצ25):KN즼Y麒K2u:sh dnGG88)ys!VYoh\l o/rZMe}JfKj@# osi@qNp`S7@хg `Vw5y[~ۻ0#kZ[yjhZr*/X^ˤīrT~lOD^hh8Ǣaؒ,3` Xrbb'tk\_4G0r:l[+::>8P{jdkЇ[s LV^kAEǻ8>51w΃Ь sŜeh7nK.R"sa ?1U>xE R(4]ج[AQјf5{3нq΄&g-@G胡AUJwr,xqIkcL&y `v8u=8-F*~[u_@{̂5S5e^X]pyh=sg?E]$ǐx`pDpFGK?eoi)Jo}/CX١'=!;U U }g2X-PvO-T\Fź*heh~liM5ЫmK[BPu_"}m:+fIb-9vruP{'TIjҵ2]@IqU*xf4F7 l?+m[]Ahz3kp:J@#ɳvNF?kq\%jc-o f::ԡ4},hp\mR EE"KP^Yϱ%jM;Ynxg㉗J'O7ˏqnP(NaR|UzWOā ]x+.+?|Aƫ%fk" !D϶P4ѸYz\)F)h aG1e1+vNVu8 W\Ee\tpW .& !YP--ҷJGX1 9H#si#6;^s3&6bPvv:aspki"ZDK>鑠dK9Seۂ#ryvB k4.j6U0xv$DUW"ot ibKය3T傹TpkÈ~TC E;rMWZ)ѤWYo M? XjSGik,/s۶IVxt<^X',9Yvk nc_Զz|z{n \ \FΟ"#lr2IC?5pPf kATp nM|,M&q4n{O-߲1'*mAlw G>VjMyٓIgo:B`S͠eߠHV@_gͮ4UZ ~[s.GE=zZ O|q~aqnD`%쬽Pl.h;e=u'tw;dWo!}4Y3+<GT|3hb,ZL)T:6I#v P>( _.HWoȥ7G8Дur98O xֹ .cXAPD{bU.\̪n%Ң=rЎ vзږװqH4>/|ȥLGM%I>}&̈́VFg5XԿtdK= 8mݧGO0XϛZ&:_zCǯ/viDwKx2\A;+(CӕO.kbv?G_2g-N]A8lDA" p3)O9]UnjuyjeEiOS6dK­H7̻ a8LM"q$0R8Z1@% Mt8hyb5/\D_ jap%. }2\adhh $Wi 3r}# n4'W8'!\#wC\H !]zOV;,}RL#bp=zg}%7SXGN'5tiUNpUB+旹E#$Dn95(ylw<.4M'YE kE6+UXM ę: WoWyJ+LjKxCA~?+'UM zePqout@;=B6C{C]M%I/W[?}@Ҳ|^!7IÌ_:{ O$Q+)y0x;Poו EYZF׬ ;dNdJ/oK%=jg_hR\~%].RGR|3: Z768QQQZevendstream endobj 255 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 587 >> stream x@CMSSI10/uP`B@^I  qjepwCopyright (c) 1997, 2009 American Mathematical Society (), with Reserved Font Name CMSSI10.CMSSI10Computer ModernRS334U7|!3(J3 #VTGD7!%u6k/T[E0nbke{xtsrvBA7$L=Rk;aoދ-  ejp0bK̺y]u~/]آĦjdcc yzy~NMa7L*-?Jlw~g*!kBꋾO.,;PXcuPWb  7 ȏ zendstream endobj 256 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6380 >> stream xY Xڞ3KǂVե"@$$$$/ *njlkն.W{ϡ4齽|̜{{GtBxVoشiD/!յvs }`b_㥉Q/M5kذ' [:*#>69*Q!5'>##u 㣒{qlXvBF|؆؃Y1aK)akcÞ: S33bV cbSX eBӖ/=,#sEvh_8z$fM7$lLt`sR։&Oɝ:mf??gQ/9fq'pb-1'뉗 b#1D"6[6b!XD#vNb 1XJL$ b J"tb5I#D$A"!x`N zs^3<7чK,"b=2ad~=u d UCxCf jsÞKf3!;]Ǧ\eoxyg*x$3ZWuJIJA׆$i QXdI8ppi dTp ˮZp Hb`]r}2 A.HBIǍzHRjp[C{l VPz{סe[#`4ڀ,Z+ ]ZirJ5ps:U(J)U?Nc)uKŏ<8X4b !g\6Iܤ eŨTQ@¾ph -3G>:a,/܃cX{q~zJrvLp T*/ot?ޠ>qe54G޵޾kr':NY2SiDyU^x˻9ӰP? E,>]5{Þ0Ar^w|O-r^8si`FʕW-Q+ J!$[ Ph<֠H/aSNQ@ME1$@Mv8o;vi}73 =EZ3wD^86{0L _+ӛR. >{p͉vPgrLix?$:ʂ:P%?Jjzm@]>u"&MD+=G.eJb Gy R"4Y+0DXE:2iRN fGACѰ?\ 7Ҩ%,Dçih; w'=KdܝprN@uߞÍ'\el<l |)P7{I4zۏV*jݦ{Fzy0pWk@M{4bX/FjזH0h #PKj3 b_cqq^á~MhHs@bgR>&jFD;2mt’@#-ML~4@Ֆ{j/1#d2XbzQK`[$~x0pƄQQ)ht6 Nf& o/@zc1C}*|zrn:[HqgD6~9쩂^J^B#vo/`4+$]r.WPd=\sxpU?cuJes}OCsCʘS 8b)<L,#C%-2~Sw37XE\},>a poYh`3Av<`qR^vPIjGF-zN R[kR Ы_+xeDG9s@SȒςˑj |F _(䡳J0krh*}% 9IkBt*G+f%V:(_C 0z޷#snasU'3QORr$zC'A(VTA%܎!sCxW88 &]u!kЯ7d#2Aaڞpq8.@B$$َl[ y*'/#~ @J!͌B|07#2fP1jtz DyVǙs&S%)Jeˏָ#-}G\4F4~RZPNgAcu@~|F1h`OAT>}>'9˴Z.G cWrhfw7Єߦ@ 0.Ϸ}LR_T:YZ{璼{|Nc`k$QOZ[ ZlIЇJپ:b;RVH5Oܹz?-s"ȣK%UɈݛPw^vhAo%'MEǯ;ъhQ'aC}aEi{RLȹ)IHzُ9@; 4k)j.pNG5$R`m4^3Sy^~.u(sm[ Ocqn\`/`"_u\VT4-|Z]q/ -|iOQVk2*znAf,:9'+dOIq䮂3'GrRS*]|чs Ǟvs ]mIȏPC5ݻt |m^BPB9P{OAZǦ)yGd/mmn0Q|ҏqgĆ' %XNCz()Tݾl~t.wgk֗~/ V&y{h@> v*|o Z .+p.y˱KRYjW3]o\T R|R' Ps`aՖ:PL JՑ)$hWA~Ѽ-j/>mw<< ɽKW*I4OVmCMMƵi?$߂7;Y V)pjOCH%Wk:p_&{ vNZX֧֪>rF^b5kMF.i>Qx frd_B[r:9FdII΃5(u 05%d55wRy~syjanbfZ\t"nZT^, 8؆bIRn8x'lunA}Djr>֐ƠqrA4~:tž8Awa!MR7 8Dh;t ||pnt* <04!`Sj'_>[a Z:`ۀXh%ݾԇEftcz7i(rs闐߻ʐJTwX~^: d-MXq k?(G>Nff MI`n ͗7V(E $fh2}cs盺*PKV@f8|<{C^$sxQn4 /8|S1W}[{I_Ir(&w6mB#}'O IYrYq7c>]n ")+ؿҢAL&Cqo!hM!) zdT߼4WA , EP 2'7HW°n6 Vz{qc}Bf5X(]YJHw/Xt RX%G[*cd S; _zHR ;sP5:OUCXg >8H}s m*@7Y ʀ|'t w4^r.z I?% b C2h:yA46|]1v3zn/z<%: ޥoU<>>ZruA_m:fN֔`5񓥰 |7sq2 }gOEF[y6wOwXcKK1w<Њ(x }KLF;P{5Q =vdHm1ffWaf]3ŕV1h3bn8*i]f]#l8 `/F{{^Y(fh]z W^jɶCv+`?,׃n̨OHHML=xن.%Nyɋ! yqoo32e~R⌆׌o0XLeZZI)"su[ Hb,d\l0%̌Lw^:wZ{;e 1W إW隋3J%F{l8yE5ЇT3jn2p"a-qJKT\(@  > stream xyPSW_x$y@D_V;@kYPŊ VڰI@DZMr (` `TPP.R7\ eXUci`;s#];Zxrx7-W4˟NL Z2=rEKp";mwFH: yoOO?RLQIBcXLڛ$uBƦKY61ʔjMT+4ZY$Db%+c2ɨGZi$8FE/~G΄ !A Wb FL%ك[kspuh&W'[9Ϊge4u%^z_ He s`=0}٥w.B3<6 6=. V@HKecнYrX^Yk3C2wvCYItcę2$3cSu熬_vBP8D0 "QGxw_h/zB?l _rQ.>QYa;VlJVox˾=Z;o#W,X`|eƑZKyuݦ[rKM:ҳs2ULfXVI34v*s?2c}䘑i ۍl~OD}t6Qoʅr+\/.{>'KfX_dέ!$\']Tv#Pȹ穹piwI_6œTo#PA.gUR`+gJru4elR8| 5]&^Z~NU);'"Ch|^cц32G#3C(oD }wN\ip ,pV_!4QRVl=|^Xg)8 F. 5nbN<O(:gA4GCb6+d p-52e ?Y*O2N {K/.>r4%T@\sa{`C fc G l;MELHtklF͈]n!Q?n͟0h^|RŔj WAᾷc6 /U)p}փ"#VP:πJu%;Z7bk>ʌrv/(osG4c*<̜3UÖtt4DT=hytӅ lK[g_0*OP´,"gR;`3R((BM39X>;98'endstream endobj 258 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1450 >> stream x%yPSW_x<K`" +EHA!BHH:beT@J1ĘjJeDZUdhՎۨ}iΝs}C8:)4"Xsy$dw:#\C%u .$8Z:NCynH?#HGQ*Wd++y/(([l 2R,LD)bPmodX-ZV+VݻG(Sȕu{AX%VfEt`P&LB2EZDEbe:A-[b@`Aӈ &>'fwb61np$$isJْ,2s0sq@C-@ZPzEZ@!>I͹ *wt83( u GWʾl֮ wI2&,$@xF}9oy0"nO00h:]yPkO<G6"P+mAn60@U o͏OM.Bni?%1gkNjhm3bNt ޵>dC8bYaai)Z![E gHu1z/;Ņ(<_N*4@3eUأz!h4yq+.lb>5`eۃ-:CsCE%TnKb~vB[pʩz#Lfcct%H۰3w(%E ~>IWy0"iE;]t^GxB>Yʌ\5ӆ/I-E-+4ӸR_} Tma4$7&w3U r PPy!椹: r8UT'&I68F5g5 >\yz 7f)RO ] kd @e-W\7 8i..΀*!d:~@|'xb rFl7_`fX5[R̻ZaH[)o @}wRF$بJUԜ_;Kv= doj(#kI*U/;DJ'nJ]N$[=\;o{SEwe<@ڞwSDc$KmK^mZ.nʫ.SDB ;#ܑ"o 1b^ڲ#~g=|71x]`GQ$Fz{t0>gfb^"kF7hX0XŮ5lG8enK[!A|$@bS<ӘųV Ӟx><>‹Pϔ>6Kjix}SC됼5<ۤ$h"endstream endobj 259 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5064 >> stream xX TTW}eI%ŧN^{$L>D"r^:d>]D};]vwݗjk)X{Ǿl ~?3m-F*C}8L9sx)NN3z{y9Pyz(? `/oe9~JeȬI"##'zO 7fC;;l.AJUcN4p Pz9 0A C>[\tOGgW̮Uޫ}|v P:M3G?abƬf5pf-3qcF1f3lb2gf YLb3N Y,c,gcV0+Uf c=6ӏ ddl[I?f M/ӗI KzNEzԾwVdcd{efn&~lb]f7l9fi{o]`;ುn;3mP}oj\0VR"v)y X>~oSiUP=9ehb]u1&(l}>y{4Βq :5 tPA6h4\mîUvB5GzdZوW$Zbߛss]+Bgg>۲Z v,źpa5qϡ&^Y흷&93PY)kI[ Tmr`_o=b'b|>]o殞d9,C^Iw =\vK>xOAN6;6MV+p-1~FQUcxTB8"nDh $l7Qy4YA3Ʀӧ @'4{6ڰ۷Gzga`tSK dyOE:o@8HJzp঑x᲎ϟ?Lt)yBF؃V'& d ꁯob!vp)>.+iɄ!2ܽ+q%bΥoeh[9[nw%ͅS{S$a_ϥ]Idh\DrZN&XײgpqS0#tbjh!,7`eTcɘ!@N[!j8Fe$u1xsS4'h4)2E?C#uƤӉbr:xA͌n쏖Al $2u"!=37/#ٳMmmq5*\7kA~h<7?B&kF^C2^>drdg%nR-MdfUsa_Z]]_ XRe֙,z(D']O֠Ͻ%dj7Nь*mִ4mpZ-9W4n]$>%$W*> _hSt˝g 3XG_MdS18'k.rvQ2keb]Nc(mJ1F| FS;rOˡ]}BB֔v ZM5#4QUIR"jWgj2!<łݩQjw%0NUGό=Άl8:=zgb`P]5{!T#ɰcJ|٥R^/v7'hC 4I$~$VQjK&}%=v'I=c@CPݗ5hRTI"c^reUG-wNE(Mi ȓ3 ss^atU -ά z5<7l ξyzV~}mUpW~>x;pP@gA{c4eGV^Uy"ӝSYJff~ʒg|rUWsܱmGݩ;? Z8O/JFI٠KLuuiRЋ{COi.iMT$/c?yRFYCk(7քjeu]; zMۚoaiDծ=@I u'5pi~X КU*kwFG`ɠJ 7[f}ZzA DTsU*:ѧ8^zuPֵ,l>^QS`[POp}4\:޴T_4le_HEm=OYLa,BTRM>92@UA)Mփ笴BSzX5\0S@WU qo9Q˅s.gV5]5jw4 JMH?$ۈTxQM>x"]~Oj>BK"++K./jJs j 5vCfAjhbbM-y*yg5aTmP-%-&d#DG>;4\A2aU-|YԀV4}eKQьJOd*X@q*Ao~*s*CњTݣpE̫"9E!O{fG屲CMhc{ (.1uCx2#-EY3~]QIo{*ߠ(jZvI:z!us|Ij_ g{<NTsyluspǔ[<2l|Al8KalP(u(…C9P KB#C6^cIVf;f4HLsL3be$f>,Tj GSKC?&RȎaAX uf } QOfZj1Y6[uFm므rRq  MP+,@wM/vC[ki QC:T $¢bsuKͤ!6hړ4> _w>u\ѮE?_5їPaOa;8 za=9{oebN{Qr>ߗ)W>1.`q,xǶiv; >͏kf~w9 V }ꎮùW"'殃V5{lABy͡9lJyKvQV.D}25[p Vr=tQO{@D_;Qm0/_4IN€R2M5qɉ)krdS.uˡȎKl ;isKJvYm=e5hSWQ~fl('=(v2˹mQ"K75W`{BB֕ dQս]cFri2LVTV/Q {|xQf#3KDxڥ8u)^F:O]voڨ2@>82 &.d:U{[;NʐauDu/h |4hjtrSP!]v@s*Kv|<],+Ǔ ;b"}qh%ؽup"rT#- 8UX{h >`'pώD_ɋ.)>%YHy<+#=KKdOc:>Qm'~\f:EJ_؈};@8dF )Z?J 'К#xZk)wZ΄>WO;Í®ds1U՝Zg"bOS c3> stream xV PS1沨T{}j뽴.ڢUԊV@#$I¢,$**}u%n)n}Zkus;7}7D־7d299sh!HUϵƽ!fo+F}ڲӂA"7=.2WB( eb,,\.6mnSuIBnBT!*~B" U%R)Mh&DMVĆypTnBBcC-QUnCCzVUnCcA-W(Ʃ! %ҰpYDT4繏L~b-1XGO' F‡D""XL,!ˈ b%XM ![ !H8h4BDc™=BN=sX+<,)ߠ*;9^wtY|eK@Ks5V*|qIA9jLR@dDTp־EVVM}"n "Ir~ٶjBU$^uYYQ5 Eu&cWh!ѣȕ+6/?{"@xT=o쒚3ʁ5USY^ $>^,c-1}baW-"伹JhTeddB@cOUlh+KgƛwLMT<|j鬆0(U%*փȼ4 y}w=)-TRZfd\&Ojj֞YSMVsh4ۤi?GSBDMo}5ʷY@NdJ27zop#&RrW T#~u>sPk6&?{sSS |d}Zb'12YԧW#;eZ0je);i,VAx m8X(IT c޵y"b5gA0Zpin8:P:8̧ *h´[`Pkhm re #K#JV6I@9z%tcM^СW;Si%4 yrQ19iAzW|T-|=h%x诬k,>j P;jfhLZ¤lA6/ 3SeY*hԜᕼ`yEPId$x ;|Qȁ;zZ"O.}($(EbR|rDžoޖbEQ hXj׆,j֒KwN6^ȁ|֘k%kHTXޫ`4IeVߌEW5TJ@{̐V3(U-=) :S#~#>Ȟ&kwG;B;A%xN_ÃO@Ç(~Ӽ0˼K|y瞥ڹO73N4okic |?`W3w:y~Aƭ[ fw?Kiҙh0^󂧰&9c1Pc_U9NDΟD:S5_t:$C.ߚ*rȇ} 6z2"0Ɣ^_{MT[3RVWV$oȽqA1bRe/ ٹ_P4swhș$?nhk;y-?86/#̑,7h[KѓGɋ.}]VӤG? ͪZBR(jUfsm~xXϛQ؎>Fɞ${-C4G#/ {NBcbdrS \؝s$8(u.Њ~d9S/{"GWaw9^*'!r[gt gZ ld'糊Hho3p5ppBop-sD)4P3// ]I? RJ23Y4|QhXBE `[PTzfV(Ca|C7g9{p&d.Dyt:1agb&)}ebuHtF=6:Bڠl)*c J-|w$N([Ό(Qhqq $&Pendstream endobj 261 0 obj << /Filter /FlateDecode /Length 25522 >> stream xŽ[nw_Zp9yEH;10b\TJjuTݒmx$] q^,988r~W*ï~W_W7/~fukW=>RoO}wjozw}xs_|:?~=_߾5Uʳ>'\7 e֞Quߡu_~/t~*GCǥ濯ޞ~=Էߢn=}Vl6{ͿmZMӕk滯ޞ񛿞us: _ϭQ/|5?<}ߠt~@?aoz_yݗ/Wϟ7u~6/4l<r_Y1? Ww͛o/|Z%x,U?.W_M}{]Wr{OֺKZ?Z.yJ,xw8*o]'takqZAoÙ~z>"l yO3#6?#^cysۿt76 L FY?>+?md̋gIZ}~:5>~-yU%m~_AIXah(@If>!=g)?*֢#dKzw7oǼjĻW~ӤJ̗y:K'=/jl4hvJ \%>%uژ%=>o#К7=Ufg߼3Xe7VI7Oi,hQ#^UcM|Gk{~XXgvM\,)hi>h(i31dNsԂ:sz}%sNzGu4xVLR(V}Zbjd̙5뉶~W|Wq:~OV+^} l9fNOy͉slgN,hm>mV oFEer1E#9jK`BinQ'٤>pQg޸ԙ3/mt|-L*|FV臬Bי:WQ#3$װ6kֹ^s_꼬*3k,Cw1ۺLUYg~[Mʶz56uV}‚&SAK2Lřsg.C7ԳFv%󿰕gGh:w?W4 ,2o%=^lЇSshUsG\h$}s=3Ҍ"tf5/b$4!,F^#P4h-T֙拢N}[+Go3ۘϞ:HnL몍U %,qY2>Uͧ=,2]1u*M!|wi۳s㓧N7 Ut̠ 8KSl$#+%u'46ִ{롅"%s?Ϊ3k즸/C-0YbW516ә4XRX2-tNCȺmp;Xb4V42{]2r6WW3hLJf߳qY_'IF:q*ٸ d(wLgIaXg;&ͬ3ۻpl8|f3[kvJ͒: KLʱcEI}4ΒxXܲkf"v3dV:;ka m&g{:HfɈg:U}EgA3یg\a<<<`uI " Y QǤ9ߡJBrRBGW8y[7HƔ.=X5WQ˥ن$kL( y^JC5j 憦1fSN{%uggl<5KS+aAe9?)GCivB㡋*^I̒* 'X5M'hMU2Xwc1jl00^:*ߦJ o댌gU4VxUuYO3Nvqy+#8| /i{Y>OCr꺪sLFGbAcӪ2W⣦І^Y|sYgH'.Jt=g/j 9gF6ٰ7sh&9VD/Ƙ7&+~œbQ5FO uz%qqFIa}N\ŧG3*#*oA8 L޶ƷHĖ5c̦{ ̍:sZ g:KxIlWIb<&X%U/:%N,h />!G 1 '2mywxE ˓RPL*7O IFGUC31Xݗ#f+ӐAЀ9$VKd0 FCH8/8aOեU֙Ls>qTN !(d j3jz%ԙ}Wx[ %arw}8gz.թ:-!zߧ3r5=fdd֙1:x,yΙR3hyu欜uUg`|,Tjt~CKW{j 2;EWy֦0z|EmAZi]ztΡSdsbkĪ< Aukޚ"u\ ^o 1 u: uVަu ]q]:sB- Ҩid㧫csvgŷ[ G$ݦ!F7jYy&OZ41|$c&gB\xxD)90ö6ҘUXgH%c蕧7T{mn4"Z Y4ثD\d+#תUZrz<ơܧY&yŞQn>{NdE xWu/ VYIHTr4˷'x0QY>ÍjBF#4 QgWB/_[%EpV8B<j!ģμ>Zy..scm̯C$Bɐ3*EQu&[sޔI;dy؎BG@DQ<|a.}el#~^"YԕoͭcG',shUΏIhUTRYgZGxhF|)4xD134TF6"|)(ԙ- PRHQ%+< þK̷Ɔ*UWHevPBKR]kMIlHgl_{)[J4DӱɂURb7K$2{1KZQs MKU *i_K_AQsi։WͰƶ-EVn)8v $n6\C>KUf'6FQdxHp1,j|Bdj|JMj<-Ad.K$,Dz0/#)V;؛%u.9o*mn`(Xrhiܒ/iH|v6,>)_75+)Xn9G)l|I}v, c[rr7V<@xXd@|uhC'%5ա|7),R}f&ҢB\gBGhh;;4_Ʊ|sii!͗~NG!We拼2tHm| 4$ZRŠ pll%]#d_r47) FCgHjQ[ RSh',HkPJH c74'D@- 3M u,`xaL8ɫ:KB(-=4}>l?EKKqN* yLHARCCA[nKظIҩ?یC9Dl>ſQQ$6P=ENX%:W<qQjGȚ"[OIn$+A2b~e+f-SE2 U.ZzB}O!3cp?Jg^'H9ۅ|]mB$~T=>BZCsL|ZY)zfC%==B5BoFABn,ud u"e7vRZU%5]sҩNjvB,:{l!KHA;rQO!{HMܤOG’.() nxt(j :CUfHz,ZbT׮v֙VjNlv,)K懶,qHSjSϫb?Y9P%WBG9jٝ!{G_I}Psjshh%;,o<6| ͫD06';ߧF%Kh}ZboP\>sw:ٻ)Bz BJXL|?:; -5:,~0"-$itѡc|.וpH%}6աlts+?L؝l"$}T>KAE6I=LwZT/:gI:ySUIV|heKeMu@s-z\]t. y~Nҝ󼔉޳wHk9Z~ROwC1tH.V8BYօ!~pqBgR -yip5$4bi8_^Ya%Jyǔ=lma8yi8ə(qsء7PNs`R}І3MrRw0wR CjN[j}/o9%%M) fIS\͒Q9R|/ie{Ez|99ii4YR>^͒*6b]>Klk ϷBKR (6 be/yK+)(2@e>KLl<C҄^v.|}>- J_y|9syhH^~"=rr8:gw( /5Pޕ5iT{,P]oqrUNUHsZdUMW|?|V:N\Z[,:wlV{;K-Df/OsMԃP-;xg\E)nJĚMzDj!'ƏL݊GݑU)2F3; 8΀v1KGH,$D(  x%=^qgbi̡'.b'0Z ,PtB|5NB|r"Cgh΃N}QN^7|ԉ@D߄[U_O-!l>]mZ2C}3K_%u"[~Oyqg8C-D{]f0$M{CgVUe~(0DQKNN|87GgʺJ:˝& ) y=Y:YsQ(Du,Q8sZIY*~(y9TD7-f%Rt9^>?3%Y")ː}=Dxgk9)*,psL^ꍝm#p:S+|!qܣӲs(EǺ+B}$]PY!P(_9ZH$.'^\)BgFU>gF:΍."4xf"tNa#G}/ߙ={G:g%G/!Z1H -kOwq*4ր9;ڡ~+2T 9Tю';zn3QA9wiuugK5Ng(˙܊qv[d0jE"=Gm\99mK>}c/qUgا}lpGpo_EK^7q;9j|䥖u?ݑ#u:tGl/vGi8(tO/y*;JXjLOXBBs1o9DVq(N%vHn!c贬%DDd 1,["s0%{1Kn_EΣ:иK͉@{R#;J! 7 D`oQ .JѤwhw;JJ58I(8:T1ĶS;%Nx1;AxI(m6X\IK;Uz]ٰ\K*6hOR(x QQ>'Z_Gz%.[S%L산;p:ii$w||#$)BUP.H<`*H(M(&meؗQvR;h3&R;J\ xX>0yNe'΅jt@>B܎d"gPÞoX|%69QqNbv^:hhl|V&Ola;ph2u xUYPĚ :ߗZ!dfa @Pž!;`Ï [UDve`v!$L?K5Қ3dbގ'H㻐ر\;/yvHQرL\;+dg(rtVERls;ymt@O^: B^ JyM9 ^^'뀍x D,xq pu q|p%4bA-G(=|lO|Z5pl.xtt&b ;xcۈ0>Axh]'فm8[c5Ex YzOcoٱ5*3;Ѐ<$f#S!HA$GU6[0O~xI&OdΗ0c+uS;fk[U5co q.HZ'D(AhiuԎ^ԎԘyTg:nڱьJ[L4vlu܎-q3P1uq;c0v`Idv`7$XAs;Qv ʻn b;jK؎_@l&p77iDJ[1(N ڱC;vGq;Ў3`fV ;vivDS;޿{u`jڱd8&pb;0P ѣI R8\ v`bWqv!n[bv``)n^)q}q;}yQl{cq̚v쥜nHlJ:#*}XKs;`BjGe-7<'Bv ؎hl8cػvL؎e An.bL)nؒ[4c`gAV,c;Bc ܁*+;8gpVL˞r>= 8&8;ȴQ;G܁E5){䎭܁(ɐ = !f;\C0zkw SRwvRw. ܁[q%[YDnDܱRY8IĎ-ٱaȎԟL.ƏsdǿWldG9d-4\-'C%/KZ ?[ ;R,) ;1-bGiĎO;BtAX^w~{\#vȡݑ#& BwH(ZaDwHp6#׼s'#1H]ZA؎XO #"{|njL/!hGF/ڑ+`JbfGFj䇍#Ձv#;CLEȱE t隁*OlbGobGFR @-&~#xK%u);rldAbG׺!##oLdG]]EjGƦ?zv[n*msR;2 |h"o7 ڑ~eЎ'D/!#$HG9G$D8'@4S;2ބ1ڑxspv䚺vIQ56#Xއ6(pGͫH39]u jg1AAu;rlBrGńKܑ֩cCn$wdD ;Ъt@Ɇ#UNkA;rrEȱWy{|;'&twnۋ7U l,Uݱ y#d)P)&q;$cl:W]I;ǂH|b;0C@b;uυ ہcp v8A#Xvl'hl>vHȡ*%PG  s˵"wV6r&&0##KO")H0$ #D(;1cۗ܁h*g*;`~<"t18oLv ;H ~dwx^&ߎtDw`v7 QC39粠wO"#f΁&x4w`84Q;2:E(s]j@8O}؍Q?k!?(u皔1nxdwby(QLttw_1#ǼSw8- bfB;vaxApeNrwA\+w7W=B8}N#> 191/9.Fñ99WhwJ #T?cxl_C@\[Ȍ} Ox1 YdwdwLs ޖ]S9wq3;܁O;З++jnF('vCN A;ن8L-vg9rڱWsv`Ñ,h(Ll4A;r?da<"D 16ہ^W$W<#W܍;7 mޏic(;;~wߐ1Q]fޮ8W#bwS }.b^&X0{#ՑX'7N@8(;(YDEu6 Eٞ,H gL;Gޑx ZD ՊwHv,>@^U]c<0>]KT!,l!}|ڏ<\=C^Ϥn.獉@  u #<2pXxA"<`h鸊ؑ/&#G@DxiBx+ !<`BBx`>'WUՁ{¨b! FBxt"<ω8'bx>Y%8L1:cGGeȑE节}X idxddY`x0ߕ!5bx`qbxӕ{!XCLVH J` (D:Fx@ENLw;+A~G*8Ɏ ٰKU-*,E#|8|ֺMH`0wp]gߑ{ h =T)IG ҚGP!xCKB4j͏~L ́ +;ŲO# ~$~E;0r$~|Hw@%E#x\̦<HEoqXXEv1>4/H~D='Xpw`$PhWew A|A;`uk)|G3Ʌ*#Ҩy qKs ߑ#ZN|BZbށe dSm`ޑA2 %BzPbV\ϫlzG%Az|-XG;2Azawp}"|%XGfBF;[w@{i ߁=cx矒K$Ka^ ;0k4G~ %IXw@_}I`/z&ކDшAz$?50\&w w:D8;Y0E^L`W5h5t)0V;Zo5L3sw@Bڵ[4>ڢw|4P, xxQ Ȓnxz/CvDGU0/{{iuon,;p[%R1ְ:ODRL%A.Źҥ8?:U'|"15W߁eHq( &SNw8w;vg~LF!~:>xNA9; r@$;.X[7h?!q:<$ `1c?! 2>?FXdk׈'c/8 t 9~g A!JqA<~B<NEIy*QesNH<ؿ.ȇ$x z`qLj3;%-߁%ʤWkf\* "T(r7+~7{ w{-qX a1<g, D@dO1c 7"v"Fx*ZWufc&ywX@peDu^9jݷUp*"<#L쉡t*'qxR1a{!m>eǞ jay T0IB70- 4/$NԘ䱳 8oۤ<[]1cӆylU0- #79+,yvV<~0<ʊ4-'<6 `91">}+!\:}[/ccDmߖ"Uj~~@w?+sfE6Zg/"%/'/Oz ^/;"Q"HyA`t1Q_`#%&|"Q~o$w?Z~FyVQ(7 %6>lJDJ%sPR$Ƨ̰*!MSQY(sv'<,iPpBB/"a(xr$Υ F4l*FA(@Ja>lJB:HhU![d*@JC Pġ`oGTPyp/,q(28`2ġ`[+ġĦ̇B}0,EB9?,6 ۂ' WE T)!w& %aJ C^l$ď>A|'BI}IvbOnֹ2}Nl$ٞ'0P#( tr=G$>3@PR-M Z/ boក7C7=pP)A(|9@Y < B *X l Rù Kl?Aۣ3%Ew?9(" R slrPy|9AWіA11ţK`WEANl?9(x ($p=H f:ŇA3a0(o>((PY! xfJŽ A #]!!<% : AY`J# ln H"c d@IqL ] z2Py 4-MQI+ OwŖ>|4'hA).qP`TUYI ^Ј(h- -Z$`*Az I$9HCy!QPR,Wt)( .IA$p v <* Jj|Zt'BG$8:DAqçEAA_`I %p)| f@P`&BP!9AA_*΁H> 57пpBPRDgN!9&S;(u"X%AAIb@)رB6 /AO 82[ TB REi4&$!/'L$A>F5Q-R A() ¹yG c8\EBa+ SETO rtP( t}! IM}sPC#J+C%%Q( 5tEZH(- sAʜ׳NO#'M%7rP0ؠ*Ujb< LAI|TRYFPG,3z3 W>ts+>5~EJ"6q^rP0t8(ȿFRH(4UHB8A(}9(Gp# Gl0Q_5 )DBJ։,Ȭ^ Q@^ph%JA'08&9EWo J܆^APЍr8sAP`TAAAj (L#e 9\A9efƩ/>t%:uAl@AY+DCP& p" ~U~}_H@Xf[o " (:͂!, x3U~vJNv1& "NxO'p0b¡0չ Rlɡ\ ~7 ?wct:// :~"m~'G ۝휍dƟՓ$R-/^@cMѭ4M@1;y'p2n?Ut=C'g*yG䢟lO 1zO'"ɱE?٩P!EYğ} ?ğ' X\,aVsWO~7L?Sa1N?$ʅ']9cu?}8?Ap󜫹c9s'T"d#kzJj^nNCd/0F[skfk>9},}rhbl쓝m @vOPB''UkSߘ~{?ىƟI+쓳'; 2}r~gUVw>2Dˑ}>9[1D%v֌kI4Yb$_\J*QV5EJDҴ7~>۪,'}>AHv:'`'t")Z4F}O/+['X''{cNUBÐFlsN^Vsh%|P8':w𲶚B>kN4$NOf^٘|nHJqN<; rfn}r8!Ov,lΒ^#;KmЉ }r8 O:)yc'J[3b4O*t-NޯSO{k쓝g`^}e9OΞ[i})'m?I+Gn6PO-O+'?D0i!$Oߍ9}޾/O?o?)* Y_H$хӠHL>N|D{u@x}:hy,nǯñ-O𭷷ïuo-}oCGT6Ϳ+QZ~{Q|Ia;ոqR1r "c5Oyǝfs_Gcy?5^rQ6xe2/Ύx_e$lofGq+up_VLS7;\1KKDgn[7O};_2RiJnKm|۷8nǎq+oy#;EfG[Lӿ,WsDEeagE _zc/l6W4peO&j_SO]=#[|/ٶ?ntZ\۷1Þ|$i/3P]Rxݹ_|>svv rټ0 +H_s<ȐW#FNp \n/h{|fb+:^x mw}r=*O'8{q@ż8"25t㼌Kx޸Ϟ%,loɾ~֞~=aQ%_lƊ_~jou<6>l>Ud܏W?~vӌxmXi- 6B}1@v^=ԟHΘ6}?p߾:/s3\땧?|(,m?xP:"o}e&p>: ]t#msi\E@^n5SƚK!9&vsI]K˨ Ffj|f|9^V^c!9_VC='A3gp|r~ɍK=6oX:g8wD..r.W`ü':T3^B`Y9;z:M*;+?`0h{1JƗ'o1a[?rZz޸__!͡(\+tu<o>zmr;s7kj/-=%._y_ ^\ 9i_s_23enuUWxK_Urbendstream endobj 262 0 obj << /Filter /FlateDecode /Length 3786 >> stream x]o]ȏ8imdPpHѦu>9y8˒D>;3]N1~0#|ЋՀwglX]?*wqVX3}X_ŭbeVwg_kku٫fnQP? ke¸Fk=B1!8'>I;m^N9ߩ1Zq_\w {PNny= &JI-!c9Mw.q ^=V^Vt@ I ƫS]݇8oop^ 5r V(B "5(ktԈvZu;B;m"L)s@?H .qvuО9LfZv]3F V =!\wH.U⡚7b𐫍269c |>u>1oPe0'N)>sTB"^*hId #HSN[g6Cɠ<>S~=Qh刽`E*C Vy;#TDF !  ߗ2(OKkmxJ4O-Ç2"F' q^oa%c7V7ncD"kfx߯ .rh絴 ¡ANOSU3 Xbަhg7pp>kXjCAvqNJQrEE-QVDZ쵛 Bm a@#^Q9aBAc-SyQUHPQQ[,AȹMfwì_i1^ќؖ# X x[)>lvww$q$ir[/d`[}dx .j?IÑ'QmP l2)2/þ ]sH{B,^d ݧ8%!3HBcY L܁:O H '4O N AM!f $4; !>F">)xhzߡM_n u$bf"fesq2lOҗ+CS }=M65ߴ03SM.w||M(CO,]8gև,;Ls~eZyYFiك j qoˋ\el=F:UeCA Y2Y2 7,e^c4@ S_?zWI' s~}I9nh,07[s\TJSȨrcy$&'suD<:)˸\ϏeC@T𐫔 Ct)2'FtL@U0`)HcocF$vA)ܖx[x0~}$\2lo=Do\)eFC^AMh{>j$ wUpZ=t:=FdI\T+۔;Tarm1XCV܌vlC c{ObSݔQpঌV CZCS1ĖB8Ue/KHj/Y-?B4%F4\7i vQhE RjaJ3f"cbHV$x1ϴe1۟HM& 'f %dofҢv"l,) J%?Λ_[^|4HTqD32Ղ8M )4 <+q bERC^QjЃdyw%)Y~KfpT*__ƣdln*#ſ]XEb>.gJi} -SOoQsy=)PIC%Ǘ< !rzXdNb#1GxBnbZM6)TA9ͪ&QX4mlβ!ve>>ZHxSL7SGl3]j U%ls:y}2ɘm^9v^bx)j$2j>x\'CcX3qu;H OQB1cy@K|}z\[\\l9ܽ:|UEs,S+Q‹an,<ƞ쪝H!l[9ooK%mc]Љbx `MjwWS_b?ƢA.^BG9.qv [xҰ75Yk9$I(&s)BCFa^HrL͚/L{Ci'd0  jr0W#@ҠMO]{i]@(@1%Uqwc@̂tR,έfP.Z}!1\q͊m T F3E&*uؔ̑+~W(wqSn4,5n%D_T(/J :U4Xji3_..f9a^IIJ 5.4}V_?uʪ-VfZ%w@5+}70=#Q>L9T}tBGvW7*`r8铒w\hbꃹLQn NAqCW)_pVbR ༬5qcT5tD#GV>+vV#(-?ck:'b2n7# ~>΅&!8}ܫ_0GS-uwh,>C5& ZFʍ,~"@-?kVNjH!;fϱL'|M)VE⥼ b / ')ƋĜ/zSB}hgر8)dqiMKjY4[5 6s 8L>Cy>@Ĥ?OT"[,wzyEwR  D(̀N~pKRZC\s!\"ɥdz{]x}:[;Gv 6=%CТvkqx %UWLF[Kgۅ\ M#Wx ƾjotS}(϶f`lcrgQG˕-N @mi;a cOQ˳N`3endstream endobj 263 0 obj << /Filter /FlateDecode /Length 3618 >> stream xَ}'tx@l#>EUvgeSEŞ]i5T˩&Y'ߖKglB,-duY;]0>('\*{m[Gm'rwV7)kڅvZZ?5lD/Bw𕌈 >h{EަQ-l }CB„nsZ I MPp Nn` B_ A[mӰt88h/:[N{ 2EHm4[_™C%lk=Bh)la\{ ndJry$0̳%r++'ɟA¤N!KS`ˢa\-u-W?!@Mj%T$]s $=h=BV?Zڲ냀auWKl]btd5m6VcoCјaJg$p 1:;J6*(A& O*DsSB14l+4!`{z² e E5X g[꬐%B2C4 q ov:pY~Cy@Zޚj+h0}Ujt>oY)5Dwv{qD^4p*coVS2@ ֠c놇n#pptҠ k5q>MVF=>f&&eg7O`x߯A_ µZ͝'LGsK4ﴂV,JB#Ď:[ZSGA\8&.-gWαuD`&2U\,FBNLdQ9lcXw,QfXa- Wau>dU}8 1tSMvyAD- YT'Y-Hz2-쬊qs 'HӶ.yʖs֊ߓR@@ O(4NQ@ǶTn~@5&#*֠6 &FMGK6SL,k(g;3`KUQ&n /u\j=ˠH# ř{6)bsLgN1[Noi!I8~{iso\(SJicM9 4#. e3\$^wx {oƲ ZBsVYD饂 67mØ^JvF]16He{CՐ!.rXa2ѲYmc2Kq⨃ÜC`yLS2l[LMG=T.9-&ihiR.EyQp[o ::s U):.jtԄAwW)Қi0lp0Fk-'eoU 'eIb49qNb|MB4ZJksv|N<,[JO &3sb˖\D3ǂMҀ  cȓXF#0r(adGyQ4#k/< 2ٯJ6d8$|BiCMbtrH̉pZ%RT_ۜ̕ӫN(sgAwLf;L9Oqgȑj۔y ,đ&_ [j@s,">`xܧeZIزbxKp`=f<9|bQɱ5=q#f[g8;ЯP;^\t2<8 Gy I j&AQRp Hd}G v [Si5j%n \WorV=a\) <:ݧNK}RDwضwJI̜CKS^;5EasVɖ \墂*"<o+}yߝ,~ZW &ӄhMA^&zRFe Bf֔UgԄ탲K\/SyGbj{i)$ ܅o:NҙnQ|ضO ʨroamSʛjUiBw7 l#m6Khl*ۑfhMG7*JZ'7/T? 5rEOzͭËQDM }a1 iupZg/kyU`mY>Ν'OE\ tPa+>fAtaVSҶ4o7urxEyCnGG:9#!";?z=ϼwi,ΤNN] 5v+?."Ϭ<^j'ړaLy*! <&Z.)-fOhUQβ :  ì}EȢƥ  04ݳ n+8{Zh*C_KK[q1wVc6KP YcRAN2/Ðy!xW+0G~PMْf}@y,d9-HVpmGN&"DA(8`.~iS(14endstream endobj 264 0 obj << /Filter /FlateDecode /Length 3240 >> stream x]o]8i 8E[HRS<\$T:9KpV\NR[(`fp=CDžBߓˣWoYlvGb9x$_埓7ǀQD8~? %}m\xmd\݇t@%v\ֽqF"tg_ɈȰcHUB1z(.jaC +X_&t럗Đ7imo  u ں*-KLw#Sp\t S'L03(ӣN/Y@Xim?,WV٭*-v@(ܲ X{_Wٝwb  VCGv]=ຂg[.b B!J>b^SY4u$_Ԥ !SSU͂MnUAQA\B3՞`Yh` Zwk(`dWeyCA!YPt,Q +"H tścW %jc\VB3u4!的N@!0Lr*3֛ ~bN2(YR D64E)AwByY2PbTD(qs@+H}2h9"Sp~~Cj1B֗IXq ;DTJbO/!zlYJhim} ^$0H8o!pi~+zG8E@ .08,S.PDSA!T R@F 5lfE >Utmp|h|ŠBwvNT&SQwM-u`L炳 X=8f !PcXy_)VnqC2Ϧu۲w6P cS $XU./􊒠Z( ϙ |vλ,V:p,c+ZRrpthQPC* jDP‡Eu/Rpnn[ٵ~ڭAuptvmNa`r,rKh-@g#YZIwOrDh GQ9ZӋ-1#YS"3AN%5*T(!BҨhh2.sAz=]cELRWwrUF\LZyZt]Z|\~$fA#7qi@t~WFBEFU7,Gr{aD|ǧ=cQTh+GjZ\W*v[Xq@6Xq> 4KSPNtR_T=˓*N;=Fꮬ@cdejZ*x=æD|X0!In9ƺ-ɿgJLZԵq.ǜB# swlV5dPl2Bh fԲ9TCu BA6X5 {\E#p|ZhH9)ťJNk&Y n$mfUt**ehpK!?>RB\JF@ԙx_np%pO^-~Z?#~_BIju]]K>(H =_*eB-] ~I^r%-,x6*o#W{w-O< WƇBU! W4< jG].UF=uG.`nd=y>+N_#}\sҲ:5Xҳ`FqC@>+|dx1(}O_W+9\.L y]B%S|h|H#1CNgN2CN=/9ݜ}W8 #)|^r!XD=ُ~R\}!枓|X/f_/ž=QR.^Mѥi\poqR8=ro Aj%Yb3td{:1Tc};+̀S> Ғ{r\ٛ~qƕըk&ZR_C[}~B5ÒIMVHm4.[ʨp&$)hH}ȯBȨsj0yDǎR7{ a$Ai9Moq^\2>%慂[DOElu V*M*ˑv*`#&SRd@iߥgmҍHA "Æw8K_K삡n;r/Ǩ;@Fߴ ⫳ҪжIKe6u=r1F8˜/e}{7ۙiC]x)Qd>r>Z!`%*_&Xdpm' }4*@4c m'd#5iޝ9svTy"k&li:ތ2emоSVub9aXJ~ZM'2 lj!ߎoUJ`(3[sÔLY>+}-h$$W3ATՓYĞS\XzcQcH^9)\3☏k%;J nnrۙ4K:ev5ozCrDJsl(ϓOPYn:nd,t7yhJC9A`q,dKM :{[;mL3XCfC>1,i{ 7wiecڒ¨;j>ؙܘÿo֙2bYA['r#4Oy;M8*+UI:_U W|!S >r9 P,BsDw!!7?##Xv@C7vϵ԰/`8ѿ`endstream endobj 265 0 obj << /Filter /FlateDecode /Length 4279 >> stream xnG,4x'}@ [|5IQrH.$%[ǧZ.EQB>\==z1[(b!J?Vp\뺃hu˕1z ó+*]赩˞/h> ?Ǝ(U7WB Xr 7BhV 'iWpA[7.N_%%Tڢ^m:E%lDRs~t3vR_)5RePcFj*52k^P~sp&rŠLFq#"wn7Kkz6 댻:nM& Z PDEb%J18e;X3&Z#Gqu _6LPE]$6J)8/`t`A6\5PP<L ;N #O#q~ 0MWNthjZ$Hӳ~ D Ö%5>oU0:[Hv4*f(2D 2 MI;C A>@q 1h@!Vfsl5g;L8 +J1aUڮز@N 무^0׸̇[Ems.lE; M?Xρ0:녮ar2ܝugaXrh?& O3k`'W;6Z@ '$jzlc] LSP İiљqj3M0\Z " ) *WDBc\6ӻIUnDYt`sꯓ^j ]SN'y ?;G3vh\M[ C0aq)*5B^ÄRS$'PB34& " ᤌI9UZQQG4keoL`B2`4e5`LlGA L><xɂ#Rxs =9D${U p7UA *4Hvb mo>2Mm5*WuwO.;u1_ ®ŸNJuIlxCo2]+O[nH00_5Qom݌@$ó`f'z^}yoO8`yKXIm2 b yśCއvwe;{+C>W="8xMW {4R7Pdᕤ4}x뾀WoLt r0;y(Y`d_^Z¡fXO2}6uayLJgJVc>]jOd xAD8ŃX)/*%T | Lt++69,d>UeT0;ƕZ.LJ4Gavk2|ތ&4_Jm07-t[TPJ"mt }I`WgyTa]I=e(4|tO ja~К&`/ nA&%lJ8*cSƞ VY[)69u"m#uKag RqfwnXD:Y~I5B筫T愇:ݧ>`dJF㫙lHmOe^w@Nʦjm}RzT$[& E`*^ml)EjOLA: ф91'oڔr]EkgzզY|T[<.WK(zJ4+N崕tpC<&%RJ):K;Zg1*ʝb,ub}]ь^^SEڟ6,5=I$Y[ό]fY>Q[c 0Dq`46Sەڃ{KjȤ|xKGsZJk:M \ A:3+#e/ (KjSjAX, U0]J32x(9uJ+ML{2{M@)=>;w*ν(枤J:\pgQnqi>[tA' :cUj;-8sK)x4Cz5_6pʖ#9x3~Z6ֵ!gETm&82!GѥGkeSOv憯:NoVĢ1 Rorb9=]oD FOP˨w--h˻2-Ma?d60P=-.ϠGuCT}oJ\ԎL v4I3M|w.a u״J:γH{ n&0t)a<:Y W\&Gw=i>J}t,d:8XM}@[OX6𬁧 \7A]} Y ż1EC^6֍×Hfd_;qT9!P&Ȅ eYB J"1F% %\ӹ~e; T2ߥ&++4+:߭VzeT+pߝHO6|XhR~M| pB0҅y()җ'mzk I γ`-L/ :hWD!qU+qtʣ)PS(Vd@S4v9Ŏے8RQ37ޏ(fwAtKyi⬍Ib x@`;j$i) x~*}f3aЀ1> y6%imy98'ʧT,~x+QQUSXpQU6a`f0oQM^&ԈyFD/s20+JZLYY 1yGc)˼ KC?+xa&ẗQ n"gʢ d!% 5xe뻥mڅ6P sY2~sTJxni@-:;35ELtߌF5ÛH+] uz:npYXjcri k[4Hy+t]w,%RKC(2͠vn|K$"yY󶒸ױMQu!sϩܓ&(WPr)J$FaF+u nt d!TmjO9otC6)6 Y*Qqv؎OJJ4,w%`FX\2Eendstream endobj 266 0 obj << /Filter /FlateDecode /Length 5098 >> stream x\Yoɑ~hSq.},؅a6,C3c!ьȬ&9yPN2;88~ܨQoW=pxyww6N~ه7SƠm;U<|M ip֎Vo[؈RQFts~xOswkO+@@riؽ=҆u͆"p8=U&)mNևᚺuLnySpJh G!n/4hNSRd[{3X3\tԄcaۚ58ӭ7vT*Ֆ3(>j>ieӵVl^?j%W3 VCSaoMĺ.5q꺞Ub:D7ڔ6[mG)GXl"hծzRGv~V0҈:|A|p5Gzt.{5!51D(r0`%FԋSӂ:U:^[¥a &:V%Ζ4W ({N~i805}]*MAv`Ά #cnTpF?qm~hYkF$u|9h?LlTO;{imdl Iz⯌R G5󙂷$UVDZ@e!2vdWM ԅX)BƞczCt6M4z9}*}n}GT4fL6i=7~`֚ȑVh.4,`؋ө@r޿o 0+{*.\18 /^b:!f;- ]Ȗa7NcS)mw| 48'4%'MC\uM<\QA;bqF⽭d[hooͻ֔&{{ MA`[5[5W$ 6ԽN( `CHxQt G:8mM4OgL[56CEOm\7sa_or@t>Uoe**3 3StgQ=̈yq$al_oԐ \l*t XO #_'NrP ю3h*.ɦ' [!ۙ+rɹa+y=pv ,2B2SQTTl>1l2ezC5`W$:Zjg7f ^E`~]kYMbLŃ.Հ_`7EcV6wف1Dm vMRŁΧIIбaޕ }:@1^Wyۚ_l͏K.uk/ \52?cyv{Kx5֭+ژIe1jHN`hȊ-|9xFgifawщ&vI=MJZl9Cޔ!8aCg~B5?5Yh]VNp?}),`*{ҝpEs~pc_Fn5"v'-bЮG}Zl틺K6^$r+3F_ˬ1bqu:$ۛ2>qoоH#*ܫ%OPPdL+}/qN&̮"OEBťCXūZUֆݤWuF\7|! τ @O7\}jf榊m"%&{v(usOF~]);/qB i z.d?7맘SΓR ݁3t!ed<^P>N ʕ}h9bk[S|2LQӜ[تtRc&dK$jwv%ujq4o9w^Jfv7Ȯ$D`D, 9.qNkr3H e 8ZT]uNљZ:iܴVˎRiJ@)^:uX!:*+#PQ!E8W𙍵2~.C`V%X}mXV Ђ=MobJ́7W~y6$sk>x֍jaM[|bŢ6S4Y(&gjǗeYng(Υ"8qYpK1]9MQJȜq=SG.* bC KLV#;MNX2oT` jTPQ_ t\8>䋫M!n*L}bI 3aaΫ{!uCwqRir_9Wܨ ?/x Q5Pj3 u0\ B]5Z *?./+Yf*o4vEC&ݞF jGIXwJMMbLՏ.jQ˯Χ;wWz ~x1Э 3^9uz[UQ݈=_bH.n@%ecB*/>Qo|—V7:rurf*|6c/,8xz-UD}\M,xA? nν}&/Fb0Ruy .,( eՂ@\|Y7X|<2(ۄV8O]07՗4*?\yĎ|[~uy&4ݕa,}8aA&26N=mÉqx'>4BMAwy=Q/ˠI]cv|+.?g/4e"X/M.P` 8L0iP ͒=ji{N԰{N 9{Ni2;-r B@7LsLZ֙n=ڙ$b(JÙESlۅq!TT %(@E~!p7j#Nk/ f-v<ۦe }0oC6(0> stream xU}P厽gui+-F T8HG<;9;'"rɗESҳQϡ:4ɤȤjSc; g ?ٙ;4%hV'~\'.AJm^8Z!2Y Ky ,݋)M 66OcR+%eTdd5ڨ.P&g4j}I:+S Zɦ {Ec2n\bDd# ƼW_RZ&R.VKԻ rk^  BImT&vE-~zєm+ݪWQ*j!R8j'N$j+%HPrzHяeɿ/?&9LM &'.p]./Np~ *j%Cu&((1==Ő/t<N"/& 9s+/Nej +`1/Ko%Odʋ$N q̝p5)A̗#|:O(}wcė.|B(BE%d5R.>yn&ys0#XOx/)"7K垲[%/AnWan5d@8٫' Y,$4&10ʇ?%aI;޽:0[y` =0 zR(/|8 X^($!r);c^ޔ|磣 nLh\-0wpQϻ{g0D[*}Jl1-Ȧoxs!YHy4E$&НF:F Lm_=<`.TU&`CF>z؏Vɩ(<ύ>&˳ me9yw:7;C3x `;j-iȃ7omf}ynOY7 Iw8iKr 8]7&႙Ȭ8_>HuyOL:C\bAOMSUW:B]ŠLUA-8Amц2Cu1#r5@wd,+5{sD5e?Hv4TW>3Xy2v3p᛼>JZm6-mp;x.Mg1 33=!:%pkխ Q5?K? (^ndĮ(FDc~FUQ&dϨg=Zi7sM$7Y,npv:wq4`shC΢n蚮hbV4GqS3ClGr!d/$ endstream endobj 268 0 obj << /Filter /FlateDecode /Length 8137 >> stream x=rdq?姡#~q%RlT\%>"ar"9ɕv A3$wWqJhդW~s_=㫣4ϠG e*GoBheCܜZk'ONJKt9 u9hdjO/pbA)6W'}k.lκ*E_boasKuLns`/ JMo@G.n4hSbhcO~tߧO)-cCN)@3@j?.a}(|˻8)RY=.C'kXȦC`B!]]D1ns341op4ͦwO9?ӓSFun&  (i]= BDVOnBu١rD-VqHt3IJE:=N L`Yp˹HPejwgG=bw@).߯uvQ5l O&S&1[Z[)SVYe'@b3)@L` Q˦a >*K&n~ݰ˓!XYyPwp|Qo.򲒛^DВ֖T\!PS-񩶓0lo@rKQ)03-ҁ(E9RÒȨ0 AXr[6.F[0\3l Ỳ1/o{B1Maq }im \ 7y9:EMtY_.(.l CA.¶{lo ><֬{V}w;(4@1r1mʶ4ok2em-*8<Г-Ǘ\,dMLBIi {|EܜHM!x밅VAcc! R45H\:v IwPSmD $KNًRkG8Pɺa ƈb8^˚ R]';XT.t\1@[KF 'Y5("E LNbI+ܵio<|'ߊ'>ȭI7PC9lEgQF8!â-@#5Lw[bl$GPGlͱ|UrddV MYC̊[HaU MD  Ys3r_0afefˑ1lB;("!Q^=rPP5m+ҍWk. <:0`BaxFsZ$8&cphSDG!Pov%|d'C[0Hk }XgȭuVb bo!rG4'Hh9,zW;HǪzht/jߠ%R*B,Xe;yZqK ' Ԫe;8C?wŁDr2J;i.Oo'<;*CV2Qeh 80~ݰ3888n u+@ v#.yN! 5vQH2G9oFͭc{"@3;g LaXYMK]G06NGXp֭ r[i0 lšI{+Z|$bL3zΫ% knq +>n?YRIՇJ{ܚv(XJQ_u[WXojc8(` 4楳Hj-]?0= 5O5d-LE .R|UgCmq{G =#OI WX k_Ji=Nf[5[!(3 -,)z[I4.pIT]fHNMܘ@uL6\׵]副_*ܪ)*;ZD{BT@az'~ee|/az:+h$);ݾ;cU$<ƻ'.x*+ܿM.Px!΁jjsMXԦv?*=p3Vr[hUK8gEM0xqoQ]!{XiϹDQ`D FblE$WIR6ai/ i $2sW-&ŀ}>;;['teшYV&lPA+W,Wj9Zބˡ~?zi $g:J;=PY8EaxWS8ox8_ba- [{pW,i.ljsĩ&b*Ď B޺zpрrMv\Ǘ4dyfF4)f, V)Fu+Y^ɏÙ{bON6j7|N"}eLy\ ˻Kɬ5ƻUapSG5x稏J.= KwyyDO)-'Lȇ25c,ۊt%_ BPe$.E0bY_VE2Ǐ h4Ac?xf!N[`uJ"Cd;JUS)Fc[?=Qŵ®חbd:hm Q  ?SbܫDC2H CI[Yu=wqx$ bAۓ6[1J/j v1C7k"&J[0'N*AYelEp*&폞7x{20Dqu;ir=M֍Vh^g"Zix`BoԜ+O)wRsQ^'?@)oAc r@E"}̋ݵ-^'\8q) ͌msKsI0$M z% 5 .`WimMd}֛VK eE[]w˸S]gT}FCT߳%uپ נYyXP@k\/|݊PN|m;G&Fo.KEd;dѱՏ?`"]SḨ\ PZ 0AS_p= .!aHd S37ǣKFlqUOTtR~hB2<oI8T B$+v./ I.ϳ+8gi'La8 qjXW")EWts'¢S)lOdUr'_>Wz[ŽM*0 Oa*1l6^A!ٯkST8na\ӊY./X?,1pʼn2Iavڟ`JSkn8zikK"Mŏ8cQKZpRDňMPI<+f{ۊSēԀi6&!IH[qSH!!Ϳԯojyn^\$ CSjt {.n_W6}cN/ˣ?XjJ(}E&GRt}T ^}P'KYC'~z}./z z%z¸'{H3YfH,jo^T\_ Ga߰֔'+`+(no5Ǹ5ŭUL{&oq2BԿf2Kbg,u+oӵ42[ kŷ\$9/J>/>b}ɹ)|l=1ٞeDt "v9B)fAO~9 !o?RK|4ޟP<>⡋#:H(iu ostW\\}PL8lL2 5`airOS`cS \Ci*O惏mI!V.RgkxH51+$nݸ|y恳?CKַIO]/k 3l Ʉ&#{8Ϡ"`%q2damڼ4`SzCJcG\oSe*@8-u٥b<% YSb~.*$)B*uNs?*)ZgDPj+@cAʂwx9Դ}/17?u!RɥWB=xMJkPSQdbT9(ԥu=`vҡ V.꟩GPs]=-U1ZPAnZ&ILvx[VuD5S[Ԝj6Ԧv?*=pX?X-h#bendstream endobj 269 0 obj << /Filter /FlateDecode /Length 4427 >> stream x\Ys~lJ;}THRII%?HCr_n3hpHJT!u[^WtqǟY^db!pQD:|{_ W>j:8W kb\ыmn_u4717*fxZFzCil/RBEߝûJjlFM ؚn;Ώqs?1cu7kܾS糴.l X [g{Ks >BxsGc'Y,jXvt:>]Zj*mQ2!S~σ3 (-[Uz_Sai ǵWVor33\ ʨ;m^ֺ{T.K]l5him4L!mwK8UǤ^ІU+&ţ2E2l#7ßg>B.bwij,4TIf.1JP2j'b4bMBZ^p (0r D> T%m{-Bcl<\KT&6TcDlńk.q=uø4M(b^B6g*TJT֜jre#. " LYGxvzQ}iҊ1zcAev| j]_wq%O*q`?էt[^}_I2uh["JW򤒔%k|>*PduC%(T* XV^Uݳh%Utμ,]% I'%1`RDAuv<6(icpV6J$`=Ib (o^g~3~L6B>!xj+gPB!}\NtiB 7# 7)͢սʹd=",fR kozO(`C4OL. O٤!OE`-EN}Rm+hF\HDe] kzbS3mѳ:=n"6G6ò6)=( ^ 2;cUYC6zGqCOwD+=| BvoA C9)Le+ǻ't2Trk fp(q-T Ҿ'%A.%%HAtTt ]ԠxG :^s]=r(Q .Zgc=0.{lF{jmq#BooK6W CUEN_"6᱑¤ a#T4Z~/HZ_~ͪ88<Иۨ><}_9ו42e$hZ\_o<.l{D-,F,#-ۘ F(#֟e:{_x?i\2mq5)d'.2)X|bHVb]2&&K 7ڼqC>dIEmWJ-% N1TQ#Rpy4'31!CUm0#i_\hYMD8Hib6xT`k Ӵ_0SKͤEQ3E@YJAypz[^:ΌL(lLIE17T DO^鎒YEe\i=!l m&n@@.Fg}$2ɫY5% Ri#XMfxIJXrcx`(FNb\es!lF@)/,8-l'z{{x";8઒*yYu\r,O``H{)v[ɋ)9R'vqOl7{ņ"dηY{˽HUU'.ytxkW9??0W ^wb=@=\%rd R: E`|{M1 g3NKC %rӱF$қ6֢m''|E)9ۺipIX=x{-q( E ȻɁ 깍 m͔S}L6x)%%l- BY`Km,]|~mSac]~aC GfV<_N#NvbwT%a7(h;M8ЯɣPt~ _0UN/ Gb v>2K|S4|'P&, Rjn⛎m{}rƆ6{ġԝ  hSMJG9es9M DB\Ѻ{ (GvQXK ^uIlO5,VqB `Wb*31%3SM%maUj4eϟ 0U@..l@Ƨ&fKrj1EQTrPK4l-:'FWҳ*IJF$D ^Ġ%;LO˽S?UN1 rpls:cp,32gIUgldCgk(֔5]Uֿ9JJֶy'YbH: ڻf+b4|l@ƇŊh/_1^uٰ|(DpK,f& ;": =qF,_N̓GI\# VH-O-+r$@S~=D#|t'MZSEUgkqֲaMXpB@r,_NAzJ~0biaIKJvbp m#Hi+)zD8澂zzx lnMRo$gRϓ.^垤W;N{VdcF p3V!BKiHfmo # ܫ,̚;MVx 4Pq|;aj^Tm|AܢWǛsy/m>!c>z*55#?aVD=HT<'5c?5g xΕ8e juG {'Ms@B:ʁSNj&s~W|\& J/ K0w3^ms7«(ӳl7ޙxlxS飲sp3 ^ŋE<ߋs&mj'J[< tb*ünTOlO> Qٱֳ)U;ߓ(,;`ro|>ՇAb% VztVzGoGeW r\4*9Ү6%omu}F* Ti:|dBpJ?fK*u|M;^ CйlC/9~(XYRD"Vi]9V]hȾWɚQxoV j6{(cg9p1ߝ rXY>6_^%1h4)_:R 92g} /cY~ HSy/^ByWerPI;~H]H#If*gtͥ% q4Ȍ䮚EA/>M¯YHm檘vOy*aiY\٘15 *jp˜|W@¾56glW-.]&w%tpXga(!ڤ+cdce{ǭsx8 $8 X|+JT8CzHlg[@*_6 ^b+8 پc'Kך6q6ƨg\os4JoD0kW1dp\#x4؊rtrjxPb"Cb1xin1endstream endobj 270 0 obj << /Filter /FlateDecode /Length 3585 >> stream x]s]^'Y~~tiDOupɲI裵 Yd{`‚ ~?zu<ˣo~ph8>?HN/=aOCR'ʧX }2et} ݛ[K[jm鍲ݿWk`d3TBdX)&]:#B&k$a=t`cyZgvf(׸ nw !I8]e<1gUlAPl'zej{=unu $Q6#2%omZ;mz%HWh{I"G Ӈp^3.ruo@co+Є %c 21/5nAK jO'0tQTĺsz $2b.3G'$$H% ҈تū RȬj 'cqsD%,&xY]oc 4(I(NUYƱčŌ\9$Qd(j\5f0mvڸ4MaQ巳5RW -s)j;Fܩ=M4U18ǘߪy5N73_-C*E+v|z FpIYG0 Å71|r(@z czʋ R  SӠpη.;EhbjQx3&veL8(1&}U]w9uW="֬-i-չDMWX m8KVwe#F)0%7ƍֽΙV~ꦌѶn}| J)^UBc lE@˼M~ZMxζ P\ 7}]2@m }/#^fjEA:?֮=)h'M~jɦyWp]>0Ry9;h 霍;Ѥ/(/ 6SqY,/fp1*X̀F+3jŪvgj*S.0ͻjZCS 24}SMJ rzG=zj`rU+5a1+%70t;_uJ%v廔o[)sjA̓2Ajf&dvaeMRNTU7e CЦ!bvVg1y)_epa)J"Vݱ6WAqH<UXۜd -A qhRj1^iA!j4d!UE 8Ak,lJub5s~RE)G5œ`zlSUq.Kp׽]$OX+-#3j\WPg q[n|p LRB_%:n d9uô9s"18-p5;'Yzɴtvg>mo ճ* [7Mj`.]'tY2=bs:Fb%"ʩ7)YJDP\}jxn.Oؾl 4Npiqgq^+6z4ɹ̃XaS!L'hf%L@Zh.Yθ#Pxp %:ULE.Z5#MUI{b}S͚p/ 69H-٤yw LZeJYŇ ?a^Ӫieplpm54.͊?(:$;y~cɰf.}Zz`/-c(Rb#K;gd 7Ls:5ءܳ 8=7ȷu v;#Wqƭj6/(8*/r,t6_/?ÙtmVUW8ZC%JR:Ō_RDUPsi,3>w|f1q>v[pSa;;ZKͳ=-{mBlT+k1($ >RJIONn54/Ud)=Q536Zq~k[(8X۲ {P ].Da7# ^AW(V!!k9.uYE!BU6)jN=|$M 4zAwNd/ MIoZW<5,\ U_v 56؊Wg⸲窐tVWe]Zy4p%[+߼>oHW>SҼDEI3_i^ !ʧ)|j9;.^W!Рc>Kq~m{5&bKZÓW_jO~Thnr Yo "p&Pq t"B$L)g4YkX 4*mYDG+ 9;M'':_N0֘Oʲ iY~f\}am9?iǺ;LOĎ\.?fd_;%喁mRYX%Vs >I+ǐ#m,zi.";n6Ĉ@Ë\Cendstream endobj 271 0 obj << /Filter /FlateDecode /Length 2839 >> stream xZYo~#z 4" N":/acVu)*gFV.qȪbX~?c=/vsWZGl>z㯳/K y>[^|&3m丹-oNgsazå~^q#ﮀI㺛BJKcf*dy]u :>J]w ƔVo拨.Od]<͜ E-tq[0\8UmQ{Ԧި`Qg/蔅RΘ0{"7J[v_(lǝeR̳X_rne+p 4,ͼt_A9hed28*A=orزecpЙCݲÓ9x {%/ϗH:<E5j)3NG7}樥:DD$[:r""4H&A.7Ѵ{L.9ys,ꐵjEmBAD V13 IfUHF[_&i]$im .T8e4 tD``'tan|U-nD 'Pơ( J[6(dLq^kTsuh0PqdK832 GzB.ւDwH:ZqP[" @a\:xvF(33^ɭj7PgKwH^ /#H"yy)F<W`^0)$WtY*fn\mkiK:$iLoK"^t@BkX:X 34 Ф] ^-LjYC߻xvJPcu^bчK{!uCkZu.?Ҍ{Q\+/HnH*L_ix=dGjUn6\h#.ptjY!OV k'(Ԍ?nw_POѡa x2:DC)o_W`]Iۍ}ͽJNnu)]"*ꙻA6,!)bhtGHaMBcU*)$ {V-17ESԏ#U=n4I HEz >AW8,]KR *E{)bEeh\IIj(tL66j3t֔bh+]a*cFXI(%*V UЕih h),A$⵪ yrn< Ec6 T%s*yYmȦ]Rՠ= yd"!" Q&Xе[-G*fE[j _4;$/\#ޖr+\BOλrWa: ̛6#c'T%;*|kCZԇXZNz%)@\CP /l>vR5xsX)>Wh*c!hB[1`8mAq^צ@|WS3Ja`"}7Iz 5Wr+]5K਱Q8&2C^|$Ja0QB# RYC]Όx@iWacyN1tV 1P`C^tmA nr9wuG, 1nQ"z֌AjP?nnn@$O;Ojj?^:7WdfM[$ia<!`^k97q_JLMbaRiz0`N)ƨ@L4x~b^310Taۯks RIlJ>O՗+<RU@xs*IK#KANID\*^gz|jv^(?[D?&&&|$ HP U%X_$sI L 6r=\ȽA "zw^X̚$9 W8Pa/|ib,z 䳗o M}Si $` ~_q *~9wKpxjǍVN=7o*=ħ49p@jO5*SOL娲{bǟ1f2r 䡓ֳ\oԁ51l nEzļx:HtFXEUכG1zɒޞUo*hD &+Ifcބw+O9#Ix)\59tOHL@2O. $ߗ\a%0g+o8? O$_jݺkZyStZ8 ]r4Y oӵ1)fSډmpfټB'zOv[V> stream xZˎE߯eEdDHh466̠ fω̪6~ '"3^'֯hqOİ-?~=Qt?~x|r D"H*-?TBKy>.N+`1lB\_Rti~t oek͙^zP@7 ,q-t8&\a3 M3&9v>Ql+Ѭ>Ǵ,O=ٕ8WK'ɹ n])ĉ<պ[r>05̮i>ފ ~}L-F,\J˧wS~K3'J!m%.]%CP]Cܕ o?m.)Ȥ +C22РdBEG S%*3oXTL(ݐ;|U#/mpx*R0]IY"rrRW8Q$+$*h+U+I"uhFi yg#jk2G".JFA VaL)m %T6HE7L$Jo +`@OHhoA+ӆҊe2NJTLr(谌 -c$͖!?wrrT|HBz<$&L(4-)&]B1Z$b$ %1\~:ZPn 3I(C-s&}L>.F.9K&( 6M&']L2l29ldL$d"W#blk!0J QCl80-]qSR-f *uӀvA]Z`l27h)VYOu+ !kTy2~u#?ߤeE>c{yޭ&wk:d6O#>`Mϟ<= 5wу3JP1 "= z1$ EdPϒE Ʉb_$A K&/qbP]2 m+]|.`@NXtUS{ U=ɽƁLoDơR15A#ST)Dq14cqYs7(sΒ@'im;pux.6u>h p|Vd×ǎ0$GI@o?ʻ̣gS|qK4`„%*,pQ]2ZN4$ C\%dBỰޑ%FGF7 :b7R r47|-GO4v !Ϡ$uJ KukG15mT! *Puxl*"(B/C?F&k(YWU>ʊUA.t-DF\CL>  [+!UԵ8-5tBxN~@]]V `P^p)-2jK3I,DLIozA0$=b\ ;oTrw܁9d~ɯhy^2kna)H$xܭF)?g#R)) dj; X )m:$o}Y4(|-Dv.Is ,J* pd c˸ѩR,-sk0u.;5YS=n\~wH]O΋Ү5$J\Yl:" P`@ƪw钌:1ƩO-XK2"`=}rOieh +!1 [Qsl8aӋ\I4 n]iK~4fwgd+zqcm~zDiRi=jE"JdzRn,ͧ'}1=J v%7LBNNyCQ?1{Vqo̹]8zrI=.GVYKU*Mh xfXJST'|'hIHZt@hqA]zZ5YKݬcт©b#< & ȷ lhU"+u4Pzbh1M-:Sb4䵩f 2"b,4tbDQ+^AGF$aMdRj@HX|] 'I{UɅ{^: +./\]'`/.80ui@%ef|[8c|ǁw{:x GQ&[8*;l !s(C21m|1K& SP]2Pۤ TL(LL(%Ƞߖ[P[p!_ӫo$oFxSb."e'zf d&AiƓ/>:e揃tTY jxjeJl󨗯j9bAKŹELYq\ A*c}L`eQ(bg$gXZl{Ug^Tf@NU/M (N J0*^Oej?lR_ ,ËmfFnc/ڭJgzk̝0 ?oG̢TO[pѓBЏ6~FuAu= j$ QvgTf@'$sKJ @ @Thp2jjvd>j\b@̢ A QDĵ,D䰣̠R(KLE_F5HHԟw{=?~⋼$Z\Y{(8&>ͳڗQ}IVf4q=Uggk%]?\2+kI1ݥs#*7{endstream endobj 273 0 obj << /Filter /FlateDecode /Length 4578 >> stream x\o~qַ-"  ֒,'tNNrY-73\ oY_Wb}m%ӫW'"8飈r}b>k%}m\{jt\ˍt*) f4ϛ-";𕌸} v]/Ӭ6tqcaB7iAnGOXP2# (<D_鴚SCJ_pil@hA>Q"}2t]:" _cVBi2=CDvjwYT*y溜3CS bF󺲯Z{VB ?*^ Wh.bP~Zcp:%?oY=džh{gxdA*B× `}?Q? NArʈcҭRքE wY)spJp8]f)|5SfhN=KRNj-fՄp=o˳a/[w:"F&_,|%òݤ=8݋D&$m1*=h/xSqm:0^oKi@a~;/z\T|lD[͎~Gk}^{Z6L}T:^Ꮄ%;5TQAvܳr?XH*h2P ݅R JPqw!2c,JѰG @4%ne-B /MpMG' Xd8}9lMq „;pWOIp6``G.iA" %D= 'eP;HI"{CF24!a@{[͓3t4q<یָElefT.g5/u~5gnc5Dmr$'dB[MkJFr"FA~|$WYOIAb>{)EiO@Ep;z:PuI8դZXaX_Ά)T #)q#KeqɥޥA} gI(kQm]k6!)DEȽ\A KX2;7z/(ZLk'.* d<[L漧5xtKLjf88Yp`Y">,* ZFiAFRa>J[jܢUj5b?$٦cg rq7@BXH0xU'b ,U)sG,9o~wL5ބۧ SݸJ$:*ݻjZw5UʟhnsޗLq"(&;0;%i^n"rR8k[Qx0 )@J:>A㨗CXify?eW\ a-Up.g$I Ikm_Zè̻Y4Mh<<ŅSV2tRZbbJrBFB?VmX$dL O;̖zR CM\X17dw8rG٤׽2yEKyܣeӊ,ƪI`|1u`̷"޳ϋ23Ylث_ň)l T2uȤqxPF eD*{LJZ2pI}ܝߙ6T,6W2MBMZXZ ~BiV.MϾ*%e9l<ޥ}ϷCpnaXn)0YfOuسNז$1Wԉ2~F$0-HKVr"bH `q.3HL8kؑ jj4`vuA)+ɓeA0(#زN4MYiW8+Gcf0n SW͕ebbn?LP&i:Dz^N7 ͶN4̮,ٔcNx/q}a^ޙ̯oM^v{xiD6WNC~wAI𞯝KiکΜr%D71st Е[tJKăF P~$J Z$X臍=M<K p ЉHTPs!7MhWFaYiFP['nf<(]v<֨_ZLOQ8Os>PKRU`X=?tۙ:͛ iYS^5f*lR4.z'J;riROvз߇#ZX~?4D3 |5b":4ϜueT/|- CfOgm ` 2_2RKp>tdէVg]PU?R=\sSpz#6id%bu0rL .%&ErHj&.γy鿧xz0u m.v:RMi55Mwmy Jd'`̢ *UCnrЗYTc,qrǃLzbD:}qJlE9`Ct}B{֘fDH(h>^UF4*qX!BtSV]6Ο`xLq4EcPGNIxVɋۻ4 5{y]V_Jc$~ܷʌbQLc?~'!م=ߧTI-dU5<n ?Yc=}* *?6Ni4beg,ցk.i?HEy[+aQϾJy0YrVSXnz$9XkpShhT:oK uc$>:eK}9͋|p Kؠ)d] 'E:_6XH˰?gf R](.ov-| J$1C0恻Y3y܄/`;Sm-k^ |Z=W߮U ңH,2sz2ӇJY QUu҈Y[T&) \@D ' F٨I? <> l-`7g `!{ x˰VAvĮ4H@b*!ueYe<Ӭ73|HE]'K[䫴۹k%NLݪVz,1v[x`C!`1u]LV^1A5Lp} T< wg@p3Hh!}̊~O H*,@_tA2pp!%)e dB8@,*Q UğU0 Vi 8dZ*3D@G`BDQ I8c5Du,zB^rgb~--`!/`5lo DivLbXƊZ/В]@.)O/ĉwRS+É`| r0vB5K!][Izb>ѤڳK?m@$d_SLX+)rT{hKX"&(*L~'R^A"Ȼg{#Tf\endstream endobj 274 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2892 >> stream xVyT!dftn Ze,"*( @ѺTkP[[ڪbźD0,r//О?99'%3 X[1,ڄgILM\(£eDmi*1 ![냣m+slK22ib|In9'{23ԎŚU:?*Stuu_qI Ν:lmJ҈ȴe3Wdޘ<{4Gwqbgf3a| |u&g&1 f$0;x0Ƌ aB0&D2Q0ƞW80,s¸N2Lv{8V'd,JV 5Z3ֻo˕ren8nVV&,eB+_yfjͿ v&OZa-ΑOM*9ޗ*/\+dD9.Cpƾտvv8_7r\ xݍR#ׇؑOP^~(A xKVAξm(m8NԢȐZqZ'ZFkkI?v*`$jHIP |-:#k?STNjmnP-.Xˋ/tI||~+vkeON/D&Nq"A$ `O)Kz2 mFiY+F#I ޞZ&YYaΈ b[9)F̃'栧?xۜ1X {n^/RWݧ'XjWb5:W_ׄm|!h*XR B+"6^t(~5 #fzMm!0Fc@:|GbI%`n#:s8C-v`1`.tIx<a/yKtSFhjS0_oxkǺ%Gţ+ '3Qg^Re𶁑]& c;io!ߒ}v"\|.PR[kв +=F~ߖ}[+).2)ІLEJ!7;ۡK!ݴ0n#ZpU(m^J ݔ긢a;xQRHѤ MAAk.2Շ n7tZf8.Ajx`ﰔswa{7U!"DS}+tt/U\zW.sfqM>{H/<9p3{gwje/ao U-m wQmRC$i " !Mq+GJF![cuT|$Q[  DBٛr3uOWU>.bW^mE%8$A|L $C܍@RJ"F $YoIGj.J5IF;RrթE! E9Ҕp \2GGҙx NY9F :b'(W3郫^{,:X%&į`X[ ZέNJR0`0ē/,90pj+>Z*x39ͯHɄ%$h%X<{,b&c|xF=;GE5P(F< )QY=tkuܩ_ݽm߯PB?CI8IoDnaaR=Sh?tx뷛JU,ۧ,G<f^">PD`y?iً=P# SU"2R ډnࢣM{j E.dY:#),ŗ t2 pd.32b,"[[LF s-YKq=O KWOo}uF___=FSΦYe(zRM߰CBX١UCB Jx2q;!8k@+{8atK{JK\ߢ^S_M5L;~]p$ BF7}6+uxCב䷨0+HqQۅvZ;J$/ڜpf8OZ̋<ԶI$\x0/ׂž9l-0?W On;t} ]S]\v spG HÕ&@s|+J*7 PpzJ)8 bŹgɢXF/V-HW@H/t1`*U6'O=-`AB3σF2΢Ys.9;?}[3qvmG`zZendstream endobj 275 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1642 >> stream xUiPTW -hqR &K9!Ӵڽ2uX!>'(IN^3{g[^))R*AX>Q %v5-J -B+ĶqSȳ;UA#,NּE%V5zn B+*ELA&YP2JA(@ Dmh evoBih6G{Z (h |"O|&=$자P!PC}l;*F/~ȅC7gtT2{9-hEd.\ U LDRE&X=N+nˣ,#Kwe z\d_7Փ@sl z$8 ZFaX/@O`g?К V&}.}p\&#GvߎYX-T[\kWXuf, 먨[Rԗkߨ} ަA`>6tw?gtXA]^,j>\67`HVy1̢*e_ y߷xS|uvU`W?{B7) s,+mFMUNy]F<$JKeg M>4K?4r 2BPI_GVV\VU^^lRQeeX)v0օgN$Ve$#b 7$s[YSQyM7JK`MHN7\'fǖ ,% <8v.|miH_b 9yJe A7^-o|4L 9ȴ[NbʾQiÁdN3eR 5C?'wK+@&ʟ$P Gb[wzG>3+'`8GTv=~굣7SaϛCsta.Lam^ii\s">[Hbb0}; ׽Z_km]s%q})k~cQwY7 1V"L6EOógQ b/g#읢*`=`r7"5e38L`{鶠͠!@̒. d pt "z!CyA^#1*t\-R^zO@ VN7_Y.endstream endobj 276 0 obj << /Filter /FlateDecode /Length 162 >> stream x]O10 @J ]2D! }Il[6|/`,@[ 4ZebY8)/d+x@fw5|k^[+x$QESb' 67h*q\B in X3 o:Sendstream endobj 277 0 obj << /Filter /FlateDecode /Length 5116 >> stream x<ێ\7rCw>b 2G<ΚP[]0zOG ^V[D[Spn bPL LgzPtOΛymkkz6@՛pgEJ;e/7Nx WrJ2eJĵ".7.c_Wzӆnxb]Nmې #'ܰim8 %;YE jFӯȅGEY`h ,Ȭgg#!T©:Et," 4;4 k(26 ] pHS2D)|IIҫNRiͧu0 /jn޻uL@0im;KAOC`zOp65^QP(ˊ$L zl˴ G3X,iO Q34pNR]{6І;=ITfiQ[~]m-4H#Tp[@Lv2(ic[=(4`Eui=PI{6,,(! 6%=ݫq侔efcY mbk| -ґPGoP~F !"WPST=ؤ61?A,"D$B%wn%:)I:~|Q8:KqAHBs茜cdT2Mȓh\ p!zKw1[±M`m򛶝j[y-)Ph]2<};e'ދɒ=0t4*$m 2lAMX @4$ ?fĂ84% rQ+Sz3_+y_ 1_J$#Ǔ^^ZI>' !'$~c6Mπ!=0e <,>Lª /@r۷Q>^7 DV?L& f QH{2§.n y$l D $,>fcL#\MA2΢≥}˃ h\AhK_@zUWM%^ꌬkw`$6s4`WGUF[$hgA0"P$HU97GCX4OMN\FGL4JS%aB<_ۿš`Vᖸi:hД!5hAL,4kg"N5Om x.Cͨʓ-K’zw N9rGlRdRpC(HT2/=0t<PTf|U&f%7HqT QJo^gA5\&E}ow&1=;$.7qĉ-}0|ݰ7GOo<AD*şf٪!h—0hbޑ+f{™`#AL,C3LB!B-S TA6i]z2Hf! H5 kwE,ĩE9DFaP"4v(ɡ}YOyuhu9ٖn4*1%wLI?Y$5s7>dpGBxBDj얥S)9Bz 3P!M |*;o[ u"y^&'eΰ{fZjd ndHiҎ5QSNi3 DhQQ=eG\9"r 7T`h:dLrr*c,8ba;53͗"JhIр^|+·SQw/AM¨)mexI̳N(zwB?kR +Ò?ufD}0RC|5P`YD1uSfΪn@CmjO(fT5rg:,)fW`0ӛ] /!iߦAfVcZTjXЉL8RҎ>#!ޥK@|3Y!4W]":imc$F=Exf߰ g߳Hp$VM-8,ṙ6$&:R6vXh1b/㋙4s0&~֊ٯX)fN/⩑`4ѨZђ;l|8_ΎGޅfc+.LoBWW$%FEѧIP0E8C*g H3d+ -]F o->KKwB1_Soה9R"СC̶Mzi,mf<;R0$S O).Oʓjw 0coT|kWrK&TFX(Pݷ-+`0P|1W[=iպ@SM^ eҞXKq!DF}S0]ن8Ei{J~}CkRw6Yx,k F `Ӥ"۬jذIyvE헿v"PD9 div+\7SFi\-Ih}H-Cs!k90 A UXHHG6J͎z ۜ&#mqח,g&bX{W)B RJ/K!6ߦ/h!8g 1-kK`C/K %)Xąւ}_R-لka? &mKuXB}L4MS8P..gqhSk"ݓKHZ\;KDC2\`ǒ WW>ھxHxNcHMIm֥}I}[4vUiS=SmmÇ6$2 JوE$J~p` +RXDmh9BcMч'L;us\xy <86k3] -&Rba/uvPfaG?naOT@g4ʲ/71ػ:JN%*#e46*1^IKgD}:8tZd(k޹k&}RZN:$=] %zKڗ ~sEwIR퀓uijc_+ÊB}-eUx0l_x2?PR@˘ 7 łM_innyYOGVDj!L{V]e6,Di w,}ADݘ(W)+C;gU]NDϺ1$m$kȞA 7NwEL/ܗL7Q-PMqҁQ=s[R#-zJThC#I8լG}ҶIq5<8i0}8|sefϪX~Ѷ  HM4/F &M`AL$HG%IC$ )R*ӜC|'?ISd4ov̞3x]toC5ۑz"׊m}Kcxb#Q]sΏXk@!߷C:p.xBml6K>Gb-$uQ[? 93hm_-5=E%'O}$4[ڐ¨HHFޜr!OF;vHh]@ > stream xcd`ab`dddw441~H3a!ܝVY~'8ϽzxyyXV~?,=[{TfFʢdMCKKs#KԢ<Ē 'G!8?93RA&J_\/1X/(NSG<$C!(8,5E-?D/17UR=土[PZZZh ܔ?g;Om'N=cZӔ:?~lhkn뮗쮟6P@bFKow_7Ǵ)SMkP?Q=| 8O6{B߉Wq]b1ùd"{endstream endobj 279 0 obj << /Filter /FlateDecode /Length 3145 >> stream xnN#:q@N'At'S>IJBr%i}}3]ݬYR$@zkU  ߣ~j[=x㯋l037SRնR/gˣ0v.YwI㺳JJK+ 1\ww^w;]D#|i= X1/U$n{QlrIm/f $`K6y\֩8,D]P*l`w$cJzgԽ3&,v밇`L]<hY̚@g J;M1m#Mb,P^EU aCEQqNz ]k*#f+ iwgi>R- >[=bo :ny4)΂H/WfJDޜedtEc65h6chA-T5Jj =)|[e5uý6'#w.ʁc8C[ in`TTqa}#x\EW$h2kVJ5lz f&]~3ҿ<8XeeB.gYit˘ 4-9>th>^+W#It&7*຀鱷ȩ RhwZ!o@i"9FZH*]BWhA"U*4Z5w2i¥+ͅj'dt^p @ow4¥@Gbp ߴz r1ev0iM $D9>([̴}}5V=k:gr/MrwiCZp.j6 eOzJi(^D^ʐ\< 'vz9|g!L"6Wk4F~VyU Yr]t)e_@ 6JL3vouO gTXL?`c(z[~nqE__7wuOqfEqy>_0!@T ˓/P΍+T\(|?gC%aǩGu 5 6(%!z=Kԓ-+#Ԏ43lqn xA"LQ 2 z<;1~n68sqx53IDiBq״:^Wضf4;#0r{f* }ѶQ;țk+}=ضѷ$8QeXt}T=(2Uw5Mjd gXIQMRGPiGbCAl>D8v٪4Jʪ>185R~@h X]܁"!vWEu|]ͻźm*Ͽv{y!'fI+IʈPkn0YfI5b""N+!(CClIprr96z!޼O<]'o~*&ZY3)쬷XC" F{R]08*SKfLF5/ԘiyUUfS@T;rLFirh`*12♜w*4!6Cg5& scRNtBUX 0ņ3#6(CIx'[Yoyy <tU%jݿ|ٵYniUk7KQn Sн s+02p:{Qb0 ?s7΄j+ ½$e{:?"8y0x"59Ђr,ĞN䥿T62Q9MQ rd2{R!*{r.m=T:GT{x,U<ݿ礂NC-ԁ1sb$s, "s q)P`E +RZ/ykeBO  ͑ mHq4/2;_*WVeUĥjH>S@zaM" IN8>"endstream endobj 280 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3073 >> stream xV{Tb ~*mRj+qkiA"r!nB wn' pM n!(M/Z[:mzvgt}C_ި]w|y<]x<Z թS˞{Ԩc‡Q+ [rS|HiWPfgeoٱcۦ|rG|4;#].e!/< #[$SGd;xB.oN/\ pyL'*IKEHdE_/ Kd"ixLAH*(j^IHiY"C):E=BR Gx*SQǨH8z:@@=MHPUDu ˟ ::AN¨Bo]aH0Q!t6У>7e0C TFzw5 >֪@è a ·:aS :Nll*f#"Na%uyL08I@Ö @ :c3h?*8I:5^ Y)bS2e*[%5NK_L]eQBn :]m}l-YCCJ(F>ۚ .Ńֶh0֑Οynd:^Fz AmX^oyBD<ԃx|'hLy^6cNSI(>q}܅.ǒL=*2IDCR>چzx)a `A8G|7Oj^q@k\˛kpaO`BRc; CHx-&*Yh=?sdzvv6 tGwXUN +>|:->95Wt@l?H&d@h?^^ u\\+GUZHApV1^sX_Hy=}{FWC_ҝhGoƞɟZsSJtrMt=y9Qrʼnj8'$JDAh^/tH(RAHQu_ߘsrȮB)\tG$P9qEEym2M[LMV2G!tp[|tٿNciHAYs[crtQP&I.gc;J}#؏z5!GMXlG:&="IYtUqaٿ/? VPteeLHf9wm;x'os;zYxR=>9]m3TP1I]l˫= m Nĥke^EZX6@IKAbV@h9Z彍B$ih'Չ Hacd5̝u< / 0Y ë3@OhU&HSOBD> IQO)Dٹ)G_z}z3=>eъ zֲEbN͍ln%PȂYsB4?+h-ttrz׋7ZہЙk.!C]T z&}nw %V1ǃ&T>쿳H]Eٱ0F{$8u:L/wgҒ6^1mgsR;}y-meGޛ&5$U^ {Ѱo m0#f*<}"D?h^ysw\RBi% @49{nrL5p Y5u[`պj)[v,4[#W( aIE YuC.;X~Zΐ5ҫ4pt"E5vCؤRc'،UE {zYКO{QO?(t)Oeg c(wz5j߮m>U5V$^זmY@YV-P4E@3I } KWrf|}gU[WU` 7L1#28 _ο͔xJ' ,?/Cs -d]Gi^{3dC'`.[6gvM|p QԣZ P zdhl ZݸrcO?Dӯ(jM;$GLjSe8LAP wg:l]ꖏ#ֿMT#8M-=yR"c+i LbDUj][fq d%$JQ#kendstream endobj 281 0 obj << /Filter /FlateDecode /Length 5218 >> stream x\ݏ1KzO$8yFڕݝʲ_UM{3#RQ-vX*+1ʕ?_cv!V70#8x2F"*WJQ۸֏QŷËrb4)70TRhFk=ji?7^̀dpG+`c^ {z ×HXs?&a°}C<fSpNa c Bq_lnx3\uxbr{Щ\Z 6ڎ9|-H 4XM 5J IK&H<T-QHOE6,מ 6Rv)X*bt 6TOUo{|"h{@1RihDopJȬؘ)bط$!lp>}pW?{ehL4l:Q 凷x*X `]ȅJ*jGFyh0oly޿ G6%2.H*VxikujPRJ&rVF# Cz12?>$AIp6 H=ZUڷ)4xI@Tn,KX= |Gnhrhea` 3xDT9ҍ`X]対~]aQaK*:ZىS0|.=, x:I ]~B$  qL, olo l9)Q`E7|^gz]^Y:k3 6e-ir֜dOсqIt^z\hJZh?2FnZϾzSsfq}9ki ư@tM> :8-H0sg' B(`-) 9O>P\9Kb-O,!?2zӎXBNNabq H)0I Lӌ^FoOI!Kg>' ]9GZ(lQnMa'#[鹫H (!9v`GFق) : iubq1KC,3N9C}Z$ (vΥhSJ؄KAF>Ɩe/SA!bPFq <#X YkrTM C$Q!'㠤X"b}bnxgyHE`6. n-;=y( %R**H)Ctʅ?6[]ޓ1K/Ym ;F ++؂ 7S2`pko]'e`ph)l'f ]&w!P137@Y:NmBZa|C;Svsp׳p"MZ?-D)e3tV&ͱPbs5`v s08,v6 i `S#/zXMzQ+2 ou'l{_^"ƯHYa,=.d`&!J؊˫̶{Z>-3KԴ,J뺭CܦQ#(( L!n4J֏s+b :, Dp>\ʼnݟZ! ҉Jc,~ˋ"A{-&hBXYƿd S4Bɋ0\,٩faFh_Ʌ丨>mϵlAHnRؘ\4⌙lw!" C6}~7us)DsAyKQxݡ]E[4Rl*n@':R@ gGMGűUTھS~XXLlzu^DSiww1p;R^FX!Ol Zw]Qjy](\=XOA-P IöEC7?!Ll_4:iTՑZhB鈈!ZEx? 8G O)wr\ߌ5_RR;;msD$6-yl{B-Ra)~v)}Dza]bN rY0tԛb (7^p؏ W*[!!s^p<2kAIgʥ5sK㑤4 Tqf$m+}i*e|/:Kr P0f2ԫDlPD@Eqo{PyYA-vr}sM R[=ΐYv>];5~èn66, ņy w7I&ic8 9}<ԏh?hۃ.3/jbKj7"pMt?9߅WG+?ˆm‘fycK  y2PBL{'ے?yLDu7ӣ+$psXA>attĨ4).12Ks䋙gto͒jk@>(퐷 Nb٨͝w'aѵ;f4ƀ|L1++]3ȋYUC C,ƶ~8N8~~\7s;\MmƯ @=B'I7⳻y :fws.27N5m>e=9# g lo֥P}W}pS%sa֠M]nSթ /ӱK!!k|kٝJr ӖQ%*cAk ruhb'6ȟSj/| KM0|aܠO+vEZBtpUe{OSO?Ĺ\ujvyjW\_ }33>5 w%vS]BH6TJ?j?ȮN.w&A<~^QݡNJ?Z?C`]vCvUE2.1롻] s1:;%b!dCg@}6?@πP~ HП9*3gGĄ^42|<*_1ջ Eb%ϗ'w\8ŭ,/PW#!T8}lg\Us׻2F >sBj:3~N@e*E1g&tw&^DJW?4{!}G/zlɛu2^)+?2YJ/mѕ~K R2_!tJu,b&%}Pv{K^pPʦEn[0 +v(W궾WYc~wtG6%Ez/Rm/`.4|}O x6ƠD^_]B).S⁳WsOJ ZxoKB8p¤=C[[7 <:Oj*Vv t|R0ZUF %R\{/`qUqVNV\t7w5Jl|D!wvh"=y 2tnc L {eMFZh3]3U$u/(@D39Q[cF5ZxQgiClr);&kb(89p(bԧ_Eokqc?7?]gb#|BI dY0ݗ_`ǂpWgA葯ۀ~n; `rF/Uq& nيomI)J 'fm \Î6[kWC6XƎ`p*ˍ7mkbxDnю4*pOrendstream endobj 282 0 obj << /Filter /FlateDecode /Length 6446 >> stream x\q?bc l!òcX ,)?Ǔy=P}]޺~T몚yQ({yw7mn/n?wy)2fˋG&8f7/.~q5a VNpʆ4mwj7v(UOLA9e?w|1ᑩV4|NkKpx]0@`s 'U&)#MmNև:&7\y^;"oӠ%OrcpW?O6Ρw1i &98#9a*6yhͧ~Xqٚϭ(nizq{/]XoҨƠ1jy"hϐ!u0Q卷x݅sx܇ە^3Ť3-cD nD}ΣDrc2D;ifm(;BcZA=NL+nn zPXuUg?zUOH*WzFgJ+<+{UJ++^"{rƉk?1]{,Vr* i`35`ypk£b_ !4¼#ԕ@0c(ll,Q۾3.ݛ[XV eכ/O͛c8)nltsh=ć+%:%:ǍwJ1kI 0D(?1ňɾ_S0*sE$l)Ď-mcTJ$( "uLv"} Y ʒC$ h*1ǎhxs3Y˽vgH;s}_0q"،)O%@Wyu=>I(zz!0AKcOIM=&;I$`,Vko((E3% dI"Q`948hd𝭺M9`HB:4!-8f AoQ#)E -“H5,|C(&Q )y@!ʩ< g %)pL| rdJR!:3.&)uXKVW!2R|&( Jg9ñs >R8vRYJeg)&) 9K)<$ OTvRQyJA\NxRT\v2Ჳ t}"ej2#3 } ef Bfg4;Kd}? Bg JEk25AS)^fJk"LL:Tt_QC)y) J9$) vp1WeZS2')T. Nx)#%!()˖/lF"{A˜1bMx C-$ax2Svx)\%Lԩ&|<*cmk>fI$dNV]kRL^F:Usg;G7ta 5Ϩ+>"{UpgN`INR*wR{v{SfTm4"a߲K}ʲ"%Kl{ST ?\$_JV*4,;tbuWuj}MyғB/^!W6i3K&YtM ̟FFz9 E_!5Ǧ UU.+(=X~5[eki͟ :7b-P?vqR\Nǖցc 8dHҹXՉjcJr--Jڋ$)U\B՛r`8ΘՓKPllU֜gxR%8;k4&h&&[V^q>l27DX2 )Պ)c##d(Cj3uVs]'^\нNKNHTg-ܗ& (d2.BZHd%dyC)ξګci2ZMI2naڨ J+|ru4IQ YuwTR(k ƚXl@HtzBÖD)$30sF^\-| ZmK Š2PzYJ?wxf^ E`;AȌj5z r{ZufEuDr՝cܸI.lfE{,>)*_{S Nsn2jF |I9?Ii3 eM_X faпPMBτ zM)!rr _-¾QXEuxs:~T:ZKX-08!.mO2װ:x䔼7o6n͗fӐMCKW@/P>z1qvfh2\'.u0eN%hcb!*u;qV56>|t-F9@p9ZD{2.K{፯z+71-/d I 0Ly|< GJHʷ괡8ٗr;*s/:e$yG=:-0 7ƅIJ-yaI Cch.js6,b ~ aSZT Vըeo4h T7{+ȗ{m2֒%эB ׺-`} ,WL|oKR׬ߎJG(|i($眭 >.qeEǬkD~`n UUcpr(&}&E ՊkX6{ѣG:*bW +ez!&2f33[SC:q؟%;Qco$R"6=/^We{Zw˟N*u>wбlBIߴlVF/8xf xGHjjsw½ И%F7.$y I77Dݙ-X\%&G jN tMWwS΄7J.Kꇘ; ٸMa=іiN-/GRgNuزudub9sL'crar$÷U՟Fh^9ɳ\Q9aK}ghL 5 R kMMŸqD1AgTInpxv/,RZԒ!,j!x+e"ի;}Bi ,Bdt Sl$PYcfX:]Xl7BFEOGa0` Iy٣qv{mgUJ唧 [ B&hrrٛl,-GZGi x<-J'?w\#H v_cw&؆ȍ9LۨW-ǝywe<"ry/[Sd|՚"޶ȧV^uQ,v@E\S 熀/,48RC<\cxeZKXԚ S 3e\ q8Bp،]Rwd!Pa8 h?K_Џ w~APxr',߲ DdCe#.J7mw"7?yk-Ƞ$][:p^F٤݈8?p"{MKG9zZ!7XLqމЕUgWȼi.,&q'RJ5LU9҅VE]Y30ɬ)o͔7)pʗ`)[M (8z%ru;=-i%YܻՔľ\2^&Ă)|TòpliKg 5]_vj9R1KSN-%]r^f in3L~΋ . ,Q@0&a_^&G n^U-O J"snz IF\(qg$ HUDJShQM7Mk F+lkn?jD9-~!J 7$2/]O9iyyߒ<(?"{T-C,K :@+c6?h랩A|@MG6#kIǚ$;h7,T@o$.2ќcQtI(Mo GIbTIa/ixBeF;H/og%1I:?Lu-6mN>礊PS_rfI!73V,3,w*rγ7kLSձ6fwvR.8vɫy/Xļ1u4,ժ( 5Xmg`_^w#GZ)D;OIezE0_. p?!)U"oUz a[YfS+ \7WO'|-䄷)Ym`.)b5b$ԱIzնuێ;(bV&twEA 4}5C_'ד+Y;KR`|WG$*;nwOKffL|5h͇ܯRߵ^_4)^v3g38ϯc߶Wbj]3juC{mk~Dg:8^nu{9BI~ޚ"wuk~ۚ_}[_~u]iM^h|=;un~LZ:[og>)&55"TM'%zC^`Wap8ެRwz5skrsJa}obCSK WB^eYXZQJ˫'7^1@tv_E|Ʉ S8gZ hm"kZ܂D]x˯A~Bӥ3}Be6ߏwV4}XoM~B ӗŷ[Vpa]eѺJhqgp7@KBh8Ⓦ<;q|,>+5QU)"XOo͇oOFjQ7(yۚ7w53%Nu>g e;JGo!Maendstream endobj 283 0 obj << /Filter /FlateDecode /Length 261 >> stream xUMK1 =fI6QAoJOk\viR]h=(lM-o\ umP?M5[Zendstream endobj 284 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 590 >> stream xcd`ab`ddt v04qH3a!]cVY~'8Ͻ-|<<,k~^(={3#caes~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWsᜟ[PZZZl`  2F|?~gߛ 2_Wt#=.z욞fz$;{rWO u"9~w;\~_ƛ-,ڸ;C״#iHݭm55&ݝe't+;عsXW_$cW|~wu?Nt ]=TΆΖM=]K嶳=di8锇|ӔΦz6Vſ;]i Erw/; &gxln%WGܜ ~'Mg][|>wi<=<| cendstream endobj 285 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3361 >> stream xW P׺qLZDn4ܸ%۠ @dAfd_\X\@(>hťVr(Dx{1ɭw_Wk{j>}wocӏQ("O׵Ӝ{/#{@^[Wg.xuU͉!53J"*>kQԶ8͙3qDž1aqqVG$mh)SbBMprL u Ir\< "D9-002j6ظ@ϠBB¼F8Os9aF1+hf3f|Ռ/ʬc1)Y,cf0 ,g0v e1"ŊaRe+>wHilU#] Q+3+{~fHɜ\N}|R'|s5@9lO@V/*'Z Z Ac_Dfz<#w!#h6!={$+]~^/9SYz?M?>Yj;N[e;jI Su5^!lZfD8)8_{B<"Eh 8IgJy3 b8Tgw:h2 1g֟Cv1{ALN+FxrRu`{s(۬ Jy )_G^-ѩaBV"_﫢<0)zsڣU-!ms'&?+:ꟺ}k9 ы7GtFX:C$|{c c){ţ{,%fc1 \̾}$7rB7 IU zGu\FS7jؒ0Rvo OqMnmԡۃKf^[ x^  ۼ 8{ d5u3$h5Jl׷_b_wDS?Uq>#4ݯҭ1YNfDGi{v/<gZ.'%=^~NV ={u+mRߨu4]i9PЃ+,N_ES{L;Lb.2>V@cI旦[>u{)l]lZdO0Nk.uK 3Fke|?bm8I[';:Gwt ,n+ey;o? LigqӪv"iѤQŎ YONؓRCim^|T2~ȋ}9\d 7?14ι.o+ޠ wQbp(1۝;Mr+~ۍ o^k;aՆy%쫵ͣ׬L mn*ڨ){[Z?7a&1dLo&рYL~!l"!]v7,4(<[u |M>09kM A:YVPn ahH.QW K\O9uܟ?7vdFB$ѡ*tK9CƼ)e@޳Lf 6:xw}%/Qӛ+TqE9܂#2>7'\'0pvؿX#Ex_?ߊ Y9BvK..,N/]aȻ X-GB3wOlʚgt1jJ!ҟ{&?KW;aXԡ@%*+m)UO"6 .@^)©SRͪK͜&D^YKįaJM>l;la?endstream endobj 286 0 obj << /Filter /FlateDecode /Length 3389 >> stream x[Ys~ʏl*;+NJCʎ\_n4fbE2)= F_jkEϳon}uR+w]~]?;AȘT/k㘬_\6'dht'o7[5!.>MYrcnZFNGam1?sIqxk6AawGN)܀ٺa (=02%0\03?r&LDMb:ڼR oy< ӸV*✛,rA[R6x5p3rvgQ!Pfؑ"t˜ -/EʪpՕ2q2ؑN-n6< ;#k;<6SðgF2dHF:Vk7*t#O)8oU?ΣQ7+M%+XT7a|S}&NX?VR}=-27{}ENވYŞ7w ``2sF5,92b4rP2(#_ ]YteJբta=s)i4lk bvP=7' ce31X"JP0#K|g Il;,On4az Yv y|,7C cю⯺e2OpZ^'^<'@O0gم,o, )EKE@$87=y ͗OgIIOii+&B OLy[ ōްQd*T;`q-x9lle[Ū2cԇ0Ran&[[h<&=_2mMnrfWaw MZ?s7-9,v%& b4Uk7?nQSPoA훻|WEyh¼sUi9!6`e;tTg(?̼ =-p!C>Z}PgW#9n[Nvr{-uDS:$6&\kΛ-:Bȸd<~6Q/P@HEYĒ ɢ'GA}J2~-X~Ao7qK>\:J9=^}[[( g7[aqn J7&s Ǻ*aL!8ZFM*ҭyu?"/%Y -X0^+%ZJ|ǧ46_`=Zוw<^rMY G%:Mޗ++l () %@q)$2nzE3g|  =+"ɭH+LP%]f%{2|@30 CTLLQemE4i[ +IhrgV&o T={p8c򥌠[6(od`5$Bb#bop+ &D|t۔^x)>:*WAZ-{::/Π@2!YP)z]U3 ?bI;~,Kmho-?W+AβCW$hp)I1&UiԓY"Sm#i)QlJenI^I$8:nVҋJn.˛r6 q6\+;z$1ONI1%*ǙťFIտ`FL^y8؀ m>Nb\Z:B1SjW!b@e@U~ո@qOSm^(&/9\=|Zi!6F =0t249]uW3 8xr2|(%oYp?\!ufNc@[9)1`9ӾXC##Pe)XpسU> stream xTiLwK"$ӷ`kb%F@qU(@)B` X@:Í(;Dk Edq>l m_<~矆`4x2r|Fn 7Eg>m>i&l6a `:vod|xE70:V(D "~.Oޑ?22b}\?SȎHx\G_ ,>W"g8“H+9qP{t/p\Q 7}BX(apK8×fPP$pE8a6WTa*Hƹa,;Eaq,;bX 6Kso i!*v/ gsN.ORoSPo{֣u( m&(e\n}֕ɉφɍR|!dteK#FG4ȬmAk_\C.W:=\y/@drL=fw=suj JMzV5WC-j{k$B揾sAQ EQLSN"ieEe )Q0O vƯɡ4MPRSd&::j3*RV:FY8||jљ85{ԇMfQDn6K GӀ2L{.7t5tоz,JkB-0C'd`Ɲ*B% =2b2zDC0m־IÛT/7KDIm}8|U%S;_LZN,9,oXF̱4?vǺ<11|љQmCUةop2buzj v_;DvQ{LkjiJ %[v%r}MqΧ܇Ÿ:43_^r9iJP0\7٭ֱU 9*Z=ξѴd>G#yh0Ibe 8UĂQ~"TWLtZ|`݊&,'cX:rBIJQw皗e&җԶ٥jCq4Y9b]AlA/-haX%OhOA?U&2W)}2; 6\7ciZPCnufg~z.H9+W+!Ià8DP`;xaXendstream endobj 288 0 obj << /Filter /FlateDecode /Length 1731 >> stream x[Ko7W-,oP-zh6h*q\N`wH.geR)M4yq# SϓύLlfiqr9v3,"tjǃ2儁ofddpi!آiJ"Ǹ֎y~ӦZqώ"s[:iS_[#g.pR̥28vk%H+,q- !D͓2VHeWeq ^nhh_I/+Mt X Rg:[T8B8s Q.8lAA.*%5zTvlxɽЊ-I/$GG@/B|0>sgH)a*ZjuP<*_x}37gq{Yw;O{V{.^I0 4(Zv ؐ>u`JD:!k ) &5Rq!'Hi@9,I3I]ȶ:hI#|G樴QJb{ ׃tD$ \C*Hi@'DZi=NN[Afq{~)u>M,I"\k,~K (HJm&`]ڈPV'H!v~|%]LˎsRn7Υé3y^H^E!/ y^B`~_MSCB̾C8O`w)b]9X{8ya=v'U J8+*2z%[o\PW``u>*y] O<~^(!HCw @kP@FG]j_H7m _ _#fBhrɿ|!gG\kZć(q zgcM_&B5ͷz)\.Oʦѧ$< $%};W[n&#n&݌ waᄚM@wIt__fſg􃫼 :V ʳUdTO#*U*?ՔCz&Ue B! $sZnVfop%R*p9hvէwzlT/>;r̃~QM:n]QQd?}szaO ͏nHo5{HǥNէbw }lٱ^{X̖6ᐘHd;2`넗45og؞:i*jOl4pUvg^=a*y]E!h4䜎wNU_=h3.΢zj˽Qm7U. y^Hn[mM n+L Ӏr8^Zh6~]HU׃t҄MYD1f}P4aQ++1۾;דhI~ }R(7I6%{jl:5t{uYd&Q4Ct:^d#"kSj.G&6x**‚5RsCЩ;AL-[P<`\ Sd󦵩͚ cmRZ10dc-X#qc[LVazx}.8/"Q\sےыS4P5)&q Q竊\#wD" 䙸`I!֩1 inG^IG,Y=сG}#*l+m-(endstream endobj 289 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 339 >> stream xcd`ab`ddds ~H3a!S,l&nn}=I19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;TL:)槤1000103012۽3'c|G?ܾ~s,{_7a> stream x\Y~Glkq &0>80Kh:2'{gw<(iUeUeef?<@| ?_F8 _(<<:;(Sa1j{x`Pfuo l蕌0Z"F]5 >Os]Pr=Ebc^ySvLӾYH}4QjQbP` 7lw#fZklͰɛqB 9p_14@ǠWN_}9e$Ib:Z[E|^6Y.0bGg'qx6%Դ膣UPcFۼUj$AȘV|&n<%PZ8,Q&=1my=G]nyqae-φaSn^;Sa[DVaQ^RQjsE7& ol8"xNmvt峢$"D b!<Atz8, uƢH}P N_#\wU4U[3!>`Aa6=_i_]8 g5i@IwU3צ hUı;/Axn[uV'A8ҹ.O 26X@mM>;O0?Ku,G(3ȇ8F 1oG[3O&7HBL-%4(_ i,j64;G 8y" G+JC$[$OYfHFr/Y(ʉ~$. TIrN!s3s+w7E 3mНye~/' 3Nq|];!XFB.Ī%5*ƍ ;Wv U"u ó|>qA,2~&]ba8gvmCۤ8b(FIwc#M\,B *h*;[$O ype4ee+6]0N)<ފ$`]R2P؏e f{ Bz/Ć ZC.E ޲dnY[fPUW 7@t$\jMx|&(\OL'5.4۞ws]CwlpUACJw'aHխV@NB<[|UӦDQƌFr(B\qֻ`rrUr)P<:wVʀNs%/x4eQOj:; ZH+GS]BpUuPKc*e~B,t% S]EN>ݪŎŻ*Нm iĽ9ushl Gc*v*xz?;XMJL1G,%M~b԰6HG2ubn:뤌`I;jZH&~V_6p8OGFc2œ % DOu%HGU$sգwӀJ\qBl(*F 5 k A| ^pYȳ^uxx؞y6 )#$8,$:KQuӫU /H *ka*VmwSg-A^_+2ɐa"8 vƤp>e fe͊UѿJI2\|U~L*Ƞ]wT亞Od!#.P% ),/+"k?†^! };dHȋ}vN#N^ )9iaS5DWľΟp3qjߠUn7HҀK,2{QjKXI_|fNE~sntjU$?i {YVR_(5CeV tXU9N;'ʁuQ$L~&O,I>jhm%jܾ?G13$OJ$()%0onӎdԱ 5̄m1vޘ(768 .gSn8. N%1Vg;gil9lyfZasH|wOB $a#Ei ׍h5- D1+gE K0LU_*lx0 ƎY#u})' 2,l@-9@w: r0X#WI|>߷n@m`#}by.@9VT=KLe3i+%0y =?/t᝾HLvMWpn둤||,7s%tHɅnE.Ll40AdWM6ښ35ǘϳ&괘sb< .:73I۝4>6?~7*C>ؕZ dgҥ0GZ3P^:Q $x|v5=>&S73/5=ڻ,3]iCˡ_y#,lUi*H>ETW<ĚN~}Z{4Xګt&Ckt!-)6>0+hgr; kf75IT~seh5FY%›%ĪRtٓ lț0VЮ`ހ~$G7lIqS^yiyFq1zq˼HRR.,R]T-/?%A"wHRƗFztAynxЧlihEJ]zԇ-' =\ϼ_qkBS^I_;O<=V/!'pdږ% 39G>v#/q#>33yt9>\|'/ӑGk{_-Hޔ@K ZQrɣ4Re_I/ϫG&9N#]JSW@ '?zi ҮИ=ïo~63~gc0Pujڢ4,Ħfz#D$uiZBH 2`d}KR"i h_'~!I8$5|Š]"<`=l`ͷ͠fYu$}eI2!)ٱ?":byg,y1z7r<3oɚ7oD {ĽMvaw|pN +Eobe'_l!ݞlz9P9?,ɚ_nI}\ܰR"Hۣ--Y}k==a{9|V9gɽ`{,ƗpV#w X#y$&q HzuX}}|t7'Hjnx6+~4"Q˺шZZ>wā݁x)p/I ]A= Ӹe+ƹu}/0՟dt}zv[&wn)mѦU(v\V٣՝:3̚cҖ)~8qqTpZB;+U)^qץ|WIc4\O˝i!޹o+vZ=o=G : Q˵r{][XQMA,b]Di;W=쯀`։K8MjjޕL[ʂ܏M`M0 򂜢ZR; xa{j}<%WvB}ށB}ށ24`Y<>m{̶΀ 66ĐDUm!_ٱU!n1v|Kc ۇendstream endobj 291 0 obj << /Filter /FlateDecode /Length 4792 >> stream x\IsW|c_tsT\89<.dsEԯO740[h:y,^^0ȏK]}VǗGή|= 'g?cǏhnu+tvvj{xuf#^;?ܮR@?'wM1|zj V}OJ5ҺA#WBLc \f>WihK)`X5lb 1nG|{pwRq7!(!,PB!ͳ07'os ;>YsGGdžKŤѪXԴlocJa İABp3^;B4~-Ɍ>;crq rN3zhX]y5lOa׮ah9| gvm$pR#Sh{(J[15 [bL°#,تQDW/NcI53mA 0g""n&L`1tI[KšcyU|@547y_sGmܞAGï8j8PNa鰩YnL21,nB3N2x"+0XK%]dȸxRk4X8'E-,*гZl=' <({;\KD6@8va0 3hcl&CdmڵӠk]]}m<͋f17Os ԙӄH|>X FsagJ2[ fJ{#$6"(P}+QЉX;kcL6_:9lx1xiz|Vb%s?U=8XdK`XY Nft!SZPƫI)#A ^ . e^;c #pQ̂ }S6?&(\  @6Қ$?vynz ͋f17Os1 ,D?\qu0-7zZtMj(<ؠ?c 8~$"\ G_25!!L,q ҎQ]E0\;J-BjdB"P3*%1e3ٍ+oBz@U7Ùnڽf8Hhq{:"mNjf4jviK(>oԳ }?5iM!TN (ҢUFk*K71~;H0n=orPugf=@g Z[ I}~x1Cn(WOydH5w`h(~l9)U AX Q As5* )i("S^ɜwpPb"P/bvNϠ/ł21JM:4k8B@!!?}Msd&~ze ɉ=0خ;(Rε7wj>*fQ[ћ6 k/͎C>)6GGR'A e/CvnXE"hи, #+xM~\ƂLUP6ƐEPzB;LRnJw7@$^pJe(ۄyu廨\.BUI#|@YjpL> :DRڝ̇R잆?BkI">3:V.pQu .KUSYM>="Z7MurR:F؜ę_6FUD*PCҹfW686-_uئno: 7=BaSZIOqw v˓u !v`/D}D%s3!0;1CQ) ,?8z44ߚp5 NUa^">jS4ɿdcs a02 aW@.rB-KUIE0!dwź=)_~ ШלK9y-T.RGRKIgyHpdv sFF+(ףjӶEw2DIiרCЄQX8Xf )HxB1T@:ED.P:Fȑ: 8x5zaѴwѵ?rBt5Am)-8+l3&ӝe`RD2C b) vBDŽ4Deްը}}p r9Z)`I4tho9#VGmk%S=㝣r =9J"&gl:q*-l3#]85=<._3X+BgCA1IIzYp.\!g74ѳD>5[L5]Xj!Ю4]zHSZb"=ٓ+%2rJH9 Rm/Zj.67?Hk9sjec[ -iq}.E&a$$|Jҟ49΄*FA^/(玆oWCߏ{*o^6C:s^Q>6?gu3+vH.3G1eͲak`yUWS)eH|:\(iʛF/ߕM?kS)3-0=,5Û=22c@X< c8f ^SS/݌cg5/2Q>-ǻ.4wf tӛ u::\H{3]n׽[&ٝ!M$A$dȶOb%\L2ѷjTұԗRvuX{a٫rg6%HyJt. ܶgmҹxw/*[ --Xxvы"(ýoI}vqPE;t{KLWth~@ÉWo"4!GJx(Z'D1#5ltjY~8+,c$,J2a6bR0Ƌ,fK]^n;14GJ fn]g#+(?%D2tߘOhdž5-sF =? x-B $X/ 8̎]Ŏ-~9̕;rY4I\#!݌L3kѹvK.X [=i}پG? M#endstream endobj 292 0 obj << /Filter /FlateDecode /Length 3544 >> stream x[Yo~W > scqck5@NhReSLITutWzHiTQWU=g3wmnNls_grS <=|vz~_3m/Ym{/Mr57\ݜ}wL]R^r2_Fug0c60@{onSɴ^01"lnOC`m2dv@3gc GK6Ux̭SMYUC?O <5T2=]tOI,=b 8MjkYMwKxƀc1ؓM.W8:) q^YǼpVn sNwK|ΙL⹥fkF3 CaI&.WKmx{`|1g8gܖUBm]%-6N4SBmJ/Cd<1n:33.Y! ֧dK:CKKT.jɛJpĝyf2d$'vF3pұۉ^YIYǷow> H p4xk@z)Eg&D0> Iy,1/Rx16jo=Za#}^haZ\g-! [)C}]1AIZ=gdurm DVxx,kѪL+R4CȊ ,#k<vĊZ=Fp^ _mxqC&'a0] ޭ>M8`zu܀Lw 1Q6R `EˬC9.lBM.k\ȂS+> ZĤܶ>XyuЇm]B bћ8Ĕ74)M-JdvQuV樗 @#$M&K_FH*y•Y ̌#р9ds*dwm e'):dz'#^̹];Frt%F_|~Ah>wsW9yy%|̅u2iIF1 j ArbHM ѐO,x9=8a^l!aلU8ʐ6 iiSȻ MprB,W䬢I \&Z #ȾB uIf2 |,yG)]eHH[mj k6̋)G®3 Xž\ 3.*.GJ0WyUmSNbn낝)JqY~SI>ǐ0=§ A5)""ص7jeTF*2U:a (鎔>cz*EӁFH_'4W*%=YQ`.%ּ*k@`5O u7񾍠%(K+< n7ohujaHHy%pi8мmbN)wN}BJPO9AEp.n?X/XN{ЌwCsxQJ+)@ ҉y`>`k "sרR\2 yۜ#k8 ,6{2d]*FH#(`76L>Fo!P(n>d$:$2cf %5#14*ڈۨ4H$hfs( `2ؐ2l3eD,rȜ Qy-WmN8(Q&ϵpS50[@g&*\MCaKpt|R2;6L[2M,FS;DmpvK~c5#7M 0AU5x9DGֆhSZ6K-pǛ)?AGZ1$Ya⤳ӵ"`ԆL U*NnfM]"r 'N&/|4! GR̞՞3ͳS;p4}a-ݰ麛Uq&:m-δV4Uҟq #I⑽m!(䊎ũi~h8ׅ`9W[[M׶!mG.S=v,]xldpLcӴMCRk%Ov>\:y__@Mo Y6UHMh>y1nV*& #h+sSH$>@/,i;\kՇRҸ&{ɱwri3lQ~U!Oon gUo mMñm~fhT_~XCuU=rTZ i~<KGBm\iHGgxmӻv*uj „%`i~yI,^yphŠ>m85D>eǯLf,K/ۜ_.Wc܎^\im;\)20j@! <^b+T7[єDad>`@J68v4 5Ϫ]s>Cn#Ց-UC GG[,FOճChCbc0K%JYog5RWz 0Xn254ZKtTy?j2| '*Ѓˆ:~)7JH-Q1"0f8W מnf(8[#zx7~Âgog$K>mBQy>ؔzPQ`<^Jz]qD\իӓNPsi~KH_RQ;gހ3_R5ڻB )/MO^@J ($I.dN*m! dX?>kp{VPQ^ 至t1xVm8T kMii B0_Zp\ߓ{Y_s. Jӊz.')]3wCIHAVɛYN] nKlC6EuaR&5dbIvtΟNc endstream endobj 293 0 obj << /Type /XRef /Length 249 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 294 /ID [<697c41d224ffc50690728d8501b6ab10><4a6f98b3c9f733f5480a45bcd9d5ac59>] >> stream xcb&F~0 $8J+?M@6 (_p$3(so].=-@aP'HYu)=DJ^bl~/$E@l y"A$w0{)rl`D(H% RMBDHa)4l>= library("zoo") library("tseries") online <- FALSE ## if set to FALSE the local copy of ## is used instead of get.hist.quote() options(prompt = "R> ") Sys.setenv(TZ = "GMT") @ \mysection{Read a series from a text file} To read in data in a text file, \code{read.table()} and associated functions can be used as usual with \code{zoo()} being called subsequently. The convenience function \code{read.zoo} is a simple wrapper to these functions that assumes the index is in the first column of the file and the remaining columns are data. Data in \code{demo1.txt}, where each row looks like \begin{verbatim} 23 Feb 2005|43.72 \end{verbatim} can be read in via <>= Sys.setlocale("LC_TIME", "C") inrusd <- read.zoo("demo1.txt", sep = "|", format="%d %b %Y") @ The \code{format} argument causes the first column to be transformed to an index of class \code{"Date"}. The \code{Sys.setlocale} is set to \code{"C"} here to assure that the English month abbreviations are read correctly. (It is unnecessary if the system is already set to a locale that understands English month abbreviations.) The data in \code{demo2.txt} look like \begin{verbatim} Daily,24 Feb 2005,2055.30,4337.00 \end{verbatim} and requires more attention because of the format of the first column. <>= tmp <- read.table("demo2.txt", sep = ",") z <- zoo(tmp[, 3:4], as.Date(as.character(tmp[, 2]), format="%d %b %Y")) colnames(z) <- c("Nifty", "Junior") @ \mysection{Query dates} To return all dates corresponding to a series \code{index(z)} or equivalently <>= time(z) @ can be used. The first and last date can be obtained by <>= start(z) end(inrusd) @ \mysection{Convert back into a plain matrix} To strip off the dates and just return a plain vector/matrix \code{coredata} can be used <>= plain <- coredata(z) str(plain) @ \mysection{Union and intersection} Unions and intersections of series can be computed by \code{merge}. The intersection are those days where both series have time points: <>= m <- merge(inrusd, z, all = FALSE) @ whereas the union uses all dates and fills the gaps where one series has a time point but the other does not with \code{NA}s (by default): <>= m <- merge(inrusd, z) @ \code{cbind(inrusd, z)} is almost equivalent to the \code{merge} call, but may lead to inferior naming in some situations hence \code{merge} is preferred To combine a series with its lag, use <>= merge(inrusd, lag(inrusd, -1)) @ \mysection{Visualization} By default, the \code{plot} method generates a graph for each series in \code{m} \begin{center} \setkeys{Gin}{width=0.7\textwidth} <>= plot(m) @ \end{center} but several series can also be plotted in a single window. \begin{center} \setkeys{Gin}{width=0.7\textwidth} <>= plot(m[, 2:3], plot.type = "single", col = c("red", "blue"), lwd = 2) @ \end{center} \mysection{Select (a few) observations} Selections can be made for a range of dates of interest <>= m[as.Date("2005-03-10")] @ \mysection{Handle missing data} Various methods for dealing with \code{NA}s are available, including linear interpolation <>= interpolated <- na.approx(m) @ `last observation carried forward', <>= m <- na.locf(m) m @ and others. \mysection{Prices and returns} To compute log-difference returns in \%, the following convenience function is defined <>= prices2returns <- function(x) 100*diff(log(x)) @ which can be used to convert all columns (of prices) into returns. <>= r <- prices2returns(m) @ A 10-day rolling window standard deviations (for all columns) can be computed by <>= rollapply(r, 10, sd) @ To go from a daily series to the series of just the last-traded-day of each month \code{aggregate} can be used <>= prices2returns(aggregate(m, as.yearmon, tail, 1)) @ Analogously, the series can be aggregated to the last-traded-day of each week employing a convenience function \code{nextfri} that computes for each \code{"Date"} the next friday. <>= nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4) / 7) + as.Date(5-4) prices2returns(aggregate(na.locf(m), nextfri, tail, 1)) @ Here is a similar example of \code{aggregate} where we define \code{to4sec} analogously to \code{nextfri} in order to aggregate the \code{zoo} object \code{zsec} every 4 seconds. <>= zsec <- structure(1:10, index = structure(c(1234760403.968, 1234760403.969, 1234760403.969, 1234760405.029, 1234760405.029, 1234760405.03, 1234760405.03, 1234760405.072, 1234760405.073, 1234760405.073 ), class = c("POSIXt", "POSIXct"), tzone = ""), class = "zoo") to4sec <- function(x) as.POSIXct(4*ceiling(as.numeric(x)/4), origin = "1970-01-01") aggregate(zsec, to4sec, tail, 1) @ Here is another example using the same \code{zsec} zoo object but this time rather than aggregating we truncate times to the second using the last data value for each such second. For large objects this will be much faster than using \code{aggregate.zoo} . <>= # tmp is zsec with time discretized into one second bins tmp <- zsec st <- start(tmp) Epoch <- st - as.numeric(st) time(tmp) <- as.integer(time(tmp) + 1e-7) + Epoch # find index of last value in each one second interval ix <- !duplicated(time(tmp), fromLast = TRUE) # merge with grid merge(tmp[ix], zoo(, seq(start(tmp), end(tmp), "sec"))) # Here is a function which generalizes the above: intraday.discretise <- function(b, Nsec) { st <- start(b) time(b) <- Nsec * as.integer(time(b)+1e-7) %/% Nsec + st - as.numeric(st) ix <- !duplicated(time(b), fromLast = TRUE) merge(b[ix], zoo(, seq(start(b), end(b), paste(Nsec, "sec")))) } intraday.discretise(zsec, 1) @ \mysection{Query Yahoo! Finance} When connected to the internet, Yahoo! Finance can be easily queried using the \code{get.hist.quote} function in <>= library("tseries") @ <>= if(online) { sunw <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31") sunw2 <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31", compression = "m", quote = "Close") eur.usd <- get.hist.quote(instrument = "EUR/USD", provider = "oanda", start = "2004-01-01", end = "2004-12-31") save(sunw, sunw2, eur.usd, file = "sunw.rda") } else { load("sunw.rda") } @ From version 0.9-30 on, \code{get.hist.quote} by default returns \verb/"zoo"/ series with a \verb/"Date"/ attribute (in previous versions these had to be transformed from \verb/"ts"/ `by hand'). A daily series can be obtained by: <>= sunw <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31") @ A monthly series can be obtained and transformed by <>= sunw2 <- get.hist.quote(instrument = "SUNW", start = "2004-01-01", end = "2004-12-31", compression = "m", quote = "Close") @ Here, \verb/"yearmon"/ dates might be even more useful: <>= time(sunw2) <- as.yearmon(time(sunw2)) @ The same series can equivalently be computed from the daily series via <>= sunw3 <- aggregate(sunw[, "Close"], as.yearmon, tail, 1) @ The corresponding returns can be computed via <>= r <- prices2returns(sunw3) @ where \code{r} is still a \verb/"zoo"/ series. \mysection{Query Oanda} Similarly you can obtain historical exchange rates from \url{http://www.oanda.com/} using \code{get.hist.quote}. A daily series of EUR/USD exchange rates can be queried by <>= eur.usd <- get.hist.quote(instrument = "EUR/USD", provider = "oanda", start = "2004-01-01", end = "2004-12-31") @ This contains the exchange rates for every day in 2004. However, it is common practice in many situations to exclude the observations from weekends. To do so, we write a little convenience function which can determine for a vector of \code{"Date"} observations whether it is a weekend or not <>= is.weekend <- function(x) ((as.numeric(x)-2) %% 7) < 2 @ Based on this we can omit all observations from weekends <>= eur.usd <- eur.usd[!is.weekend(time(eur.usd))] @ The function \code{is.weekend} introduced above exploits the fact that a \code{"Date"} is essentially the number of days since 1970-01-01, a Thursday. A more intelligible function which yields identical results could be based on the \code{"POSIXlt"} class <>= is.weekend <- function(x) { x <- as.POSIXlt(x) x$wday > 5 | x$wday < 1 } @ \mysection{Summaries} Here we create a daily series and then find the series of quarterly means and standard deviations and also for weekly means and standard deviations where we define weeks to end on Tuesay. We do the above separately for mean and standard deviation, binding the two results together and then show a different approach in which we define a custom \code{ag} function that can accept multiple function names as a vector argument. <>= date1 <- seq(as.Date("2001-01-01"), as.Date("2002-12-1"), by = "day") len1 <- length(date1) set.seed(1) # to make it reproducible data1 <- zoo(rnorm(len1), date1) # quarterly summary data1q.mean <- aggregate(data1, as.yearqtr, mean) data1q.sd <- aggregate(data1, as.yearqtr, sd) head(cbind(mean = data1q.mean, sd = data1q.sd), main = "Quarterly") # weekly summary - week ends on tuesday # Given a date find the next Tuesday. # Based on formula in Prices and Returns section. nexttue <- function(x) 7 * ceiling(as.numeric(x - 2 + 4)/7) + as.Date(2 - 4) data1w <- cbind( mean = aggregate(data1, nexttue, mean), sd = aggregate(data1, nexttue, sd) ) head(data1w) ### ALTERNATIVE ### # Create function ag like aggregate but takes vector of # function names. FUNs <- c(mean, sd) ag <- function(z, by, FUNs) { f <- function(f) aggregate(z, by, f) do.call(cbind, sapply(FUNs, f, simplify = FALSE)) } data1q <- ag(data1, as.yearqtr, c("mean", "sd")) data1w <- ag(data1, nexttue, c("mean", "sd")) head(data1q) head(data1w) @ \bibliography{zoo} \end{document} zoo/inst/include/0000755000175400001440000000000012501365414013655 5ustar zeileisuserszoo/inst/include/zoo.h0000644000175400001440000000055412501365414014641 0ustar zeileisusers/* Header file for using internal C-level facilities provided by zoo. This is not 100% designed for end users, so any user comments and bug reports are very welcomed. Copyright Jeffrey A. Ryan 2010 */ #include #include #ifndef _Zoo #define _Zoo SEXP zoo_lag (SEXP x, SEXP _k, SEXP _pad); SEXP zoo_coredata (SEXP x, SEXP copyAttr); #endif zoo/tests/0000755000175400001440000000000013224634153012421 5ustar zeileisuserszoo/tests/as.Date.R0000644000175400001440000000322512710501370014016 0ustar zeileisusers## set Z's timezone for reproducibility Sys.setenv(TZ = "Europe/Vienna") ## base results as.Date(10957, origin = "1970-01-01") as.Date("2000-01-01") as.Date(as.POSIXct("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(as.POSIXlt("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(NA) ## for chron objects library("chron") as.Date(dates("01/01/2000")) as.Date(chron("01/01/2000", "00:00:00")) ## for tis objects library("tis") as.Date(ti(20000101, "daily")) as.Date(jul(20000101)) ## for timeDate objects library("timeDate") as.Date(timeDate("2000-01-01")) ## with zoo attached (masking as.Date/as.Date.numeric) library("zoo") as.Date(10957) as.Date("2000-01-01") as.Date(as.POSIXct("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(as.POSIXlt("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(NA) as.Date(yearmon(2000)) as.Date(yearqtr(2000)) as.Date(dates("01/01/2000")) as.Date(chron("01/01/2000", "00:00:00")) as.Date.ti <- tis:::as.Date.ti ## filed request for export as.Date(ti(20000101, "daily")) as.Date.jul <- tis:::as.Date.jul ## filed request for export as.Date(jul(20000101)) as.Date.timeDate <- timeDate:::as.Date.timeDate ## filed request for export as.Date(timeDate("2000-01-01")) ## with mondate attached (masking again as.Date) library("mondate") as.Date(10957) as.Date("2000-01-01") as.Date(as.POSIXct("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(as.POSIXlt("2000-01-01 00:00:00 GMT", tz = "GMT")) as.Date(NA) as.Date(yearmon(2000)) as.Date(yearqtr(2000)) as.Date(dates("01/01/2000")) as.Date(chron("01/01/2000", "00:00:00")) as.Date(ti(20000101, "daily")) as.Date(jul(20000101)) as.Date(timeDate("2000-01-01")) as.Date(mondate(1/31)) zoo/tests/Examples/0000755000175400001440000000000012751230344014175 5ustar zeileisuserszoo/tests/Examples/zoo-Ex.Rout.save0000644000175400001440000030467413224515157017210 0ustar zeileisusers R version 3.4.3 (2017-11-30) -- "Kite-Eating Tree" Copyright (C) 2017 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "zoo" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('zoo') Attaching package: ‘zoo’ The following objects are masked from ‘package:base’: as.Date, as.Date.numeric > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > cleanEx() > nameEx("MATCH") > ### * MATCH > > flush(stderr()); flush(stdout()) > > ### Name: MATCH > ### Title: Value Matching > ### Aliases: MATCH MATCH.default MATCH.times > ### Keywords: manip > > ### ** Examples > > MATCH(1:5, 2:3) [1] NA 1 2 NA NA > > > > cleanEx() > nameEx("ORDER") > ### * ORDER > > flush(stderr()); flush(stdout()) > > ### Name: ORDER > ### Title: Ordering Permutation > ### Aliases: ORDER ORDER.default > ### Keywords: manip > > ### ** Examples > > ORDER(rnorm(5)) [1] 3 1 2 5 4 > > > > cleanEx() > nameEx("aggregate.zoo") > ### * aggregate.zoo > > flush(stderr()); flush(stdout()) > > ### Name: aggregate.zoo > ### Title: Compute Summary Statistics of zoo Objects > ### Aliases: aggregate.zoo split.zoo > ### Keywords: ts > > ### ** Examples > > ## averaging over values in a month: > # x.date is jan 1,3,5,7; feb 9,11,13; mar 15,17,19 > x.date <- as.Date(paste(2004, rep(1:4, 4:1), seq(1,20,2), sep = "-")); x.date [1] "2004-01-01" "2004-01-03" "2004-01-05" "2004-01-07" "2004-02-09" [6] "2004-02-11" "2004-02-13" "2004-03-15" "2004-03-17" "2004-04-19" > x <- zoo(rnorm(12), x.date); x 2004-01-01 2004-01-03 2004-01-05 2004-01-07 2004-02-09 2004-02-11 2004-02-13 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 -0.8204684 0.4874291 2004-03-15 2004-03-17 2004-04-19 0.7383247 0.5757814 -0.3053884 > # coarser dates - jan 1 (4 times), feb 1 (3 times), mar 1 (3 times) > x.date2 <- as.Date(paste(2004, rep(1:4, 4:1), 1, sep = "-")); x.date2 [1] "2004-01-01" "2004-01-01" "2004-01-01" "2004-01-01" "2004-02-01" [6] "2004-02-01" "2004-02-01" "2004-03-01" "2004-03-01" "2004-04-01" > x2 <- aggregate(x, x.date2, mean); x2 2004-01-01 2004-02-01 2004-03-01 2004-04-01 0.079210426 -0.001177187 0.657053028 -0.305388387 > # same - uses as.yearmon > x2a <- aggregate(x, as.Date(as.yearmon(time(x))), mean); x2a 2004-01-01 2004-02-01 2004-03-01 2004-04-01 0.079210426 -0.001177187 0.657053028 -0.305388387 > # same - uses by function > x2b <- aggregate(x, function(tt) as.Date(as.yearmon(tt)), mean); x2b 2004-01-01 2004-02-01 2004-03-01 2004-04-01 0.079210426 -0.001177187 0.657053028 -0.305388387 > # same - uses cut > x2c <- aggregate(x, as.Date(cut(time(x), "month")), mean); x2c 2004-01-01 2004-02-01 2004-03-01 2004-04-01 0.079210426 -0.001177187 0.657053028 -0.305388387 > # almost same but times of x2d have yearmon class rather than Date class > x2d <- aggregate(x, as.yearmon, mean); x2d Jan 2004 Feb 2004 Mar 2004 Apr 2004 0.079210426 -0.001177187 0.657053028 -0.305388387 > > # compare time series > plot(x) > lines(x2, col = 2) > > ## aggregate a daily time series to a quarterly series > # create zoo series > tt <- as.Date("2000-1-1") + 0:300 > z.day <- zoo(0:300, tt) > > # function which returns corresponding first "Date" of quarter > first.of.quarter <- function(tt) as.Date(as.yearqtr(tt)) > > # average z over quarters > # 1. via "yearqtr" index (regular) > # 2. via "Date" index (not regular) > z.qtr1 <- aggregate(z.day, as.yearqtr, mean) > z.qtr2 <- aggregate(z.day, first.of.quarter, mean) > > # The last one used the first day of the quarter but suppose > # we want the first day of the quarter that exists in the series > # (and the series does not necessarily start on the first day > # of the quarter). > z.day[!duplicated(as.yearqtr(time(z.day)))] 2000-01-01 2000-04-01 2000-07-01 2000-10-01 0 91 182 274 > > # This is the same except it uses the last day of the quarter. > # It requires R 2.6.0 which introduced the fromLast= argument. > ## Not run: > ##D z.day[!duplicated(as.yearqtr(time(z.day)), fromLast = TRUE)] > ## End(Not run) > > # The aggregated series above are of class "zoo" (because z.day > # was "zoo"). To create a regular series of class "zooreg", > # the frequency can be automatically chosen > zr.qtr1 <- aggregate(z.day, as.yearqtr, mean, regular = TRUE) > # or specified explicitely > zr.qtr2 <- aggregate(z.day, as.yearqtr, mean, frequency = 4) > > > ## aggregate on month and extend to monthly time series > if(require(chron)) { + y <- zoo(matrix(11:15, nrow = 5, ncol = 2), chron(c(15, 20, 80, 100, 110))) + colnames(y) <- c("A", "B") + + # aggregate by month using first of month as times for coarser series + # using first day of month as repesentative time + y2 <- aggregate(y, as.Date(as.yearmon(time(y))), head, 1) + + # fill in missing months by merging with an empty series containing + # a complete set of 1st of the months + yrt2 <- range(time(y2)) + y0 <- zoo(,seq(from = yrt2[1], to = yrt2[2], by = "month")) + merge(y2, y0) + } Loading required package: chron A B 1970-01-01 11 11 1970-02-01 NA NA 1970-03-01 13 13 1970-04-01 14 14 > > # given daily series keep only first point in each month at > # day 21 or more > z <- zoo(101:200, as.Date("2000-01-01") + seq(0, length = 100, by = 2)) > zz <- z[as.numeric(format(time(z), "%d")) >= 21] > zz[!duplicated(as.yearmon(time(zz)))] 2000-01-21 2000-02-22 2000-03-21 2000-04-22 2000-05-22 2000-06-21 111 127 141 157 172 187 > > # same except times are of "yearmon" class > aggregate(zz, as.yearmon, head, 1) Jan 2000 Feb 2000 Mar 2000 Apr 2000 May 2000 Jun 2000 111 127 141 157 172 187 > > # aggregate POSIXct seconds data every 10 minutes > tt <- seq(10, 2000, 10) > x <- zoo(tt, structure(tt, class = c("POSIXt", "POSIXct"))) > aggregate(x, time(x) - as.numeric(time(x)) %% 600, mean) 1970-01-01 01:00:00 1970-01-01 01:10:00 1970-01-01 01:20:00 1970-01-01 01:30:00 300 895 1495 1900 > > # aggregate weekly series to a series with frequency of 52 per year > set.seed(1) > z <- zooreg(1:100 + rnorm(100), start = as.Date("2001-01-01"), deltat = 7) > > # new.freq() converts dates to a grid of freq points per year > # yd is sequence of dates of firsts of years > # yy is years of the same sequence > # last line interpolates so dates, d, are transformed to year + frac of year > # so first week of 2001 is 2001.0, second week is 2001 + 1/52, third week > # is 2001 + 2/52, etc. > new.freq <- function(d, freq = 52) { + y <- as.Date(cut(range(d), "years")) + c(0, 367) + yd <- seq(y[1], y[2], "year") + yy <- as.numeric(format(yd, "%Y")) + floor(freq * approx(yd, yy, xout = d)$y) / freq + } > > # take last point in each period > aggregate(z, new.freq, tail, 1) 2001(1) 2001(2) 2001(3) 2001(4) 2001(5) 2001(6) 2001(7) 2001(8) 2.183643 2.164371 5.595281 5.329508 5.179532 7.487429 8.738325 9.575781 2001(9) 2001(10) 2001(11) 2001(12) 2001(13) 2001(14) 2001(15) 2001(16) 9.694612 12.511781 12.389843 12.378759 11.785300 16.124931 15.955066 16.983810 2001(17) 2001(18) 2001(19) 2001(20) 2001(21) 2001(22) 2001(23) 2001(24) 18.943836 19.821221 20.593901 21.918977 22.782136 23.074565 22.010648 25.619826 2001(25) 2001(26) 2001(27) 2001(28) 2001(29) 2001(30) 2001(31) 2001(32) 25.943871 26.844204 26.529248 28.521850 30.417942 32.358680 31.897212 33.387672 2001(33) 2001(34) 2001(35) 2001(36) 2001(37) 2001(38) 2001(39) 2001(40) 33.946195 33.622940 35.585005 36.605710 37.940687 40.100025 40.763176 40.835476 2001(41) 2001(42) 2001(43) 2001(44) 2001(45) 2001(46) 2001(47) 2001(48) 41.746638 43.696963 44.556663 44.311244 45.292505 47.364582 48.768533 48.887654 2001(49) 2001(50) 2001(51) 2001(52) 2002(1) 2002(2) 2002(3) 2002(4) 50.881108 51.398106 51.387974 53.341120 52.870637 56.433024 57.980400 56.632779 2002(5) 2002(6) 2002(7) 2002(8) 2002(9) 2002(10) 2002(11) 2002(12) 56.955865 59.569720 59.864945 63.401618 61.960760 63.689739 64.028002 64.256727 2002(13) 2002(14) 2002(15) 2002(16) 2002(17) 2002(18) 2002(19) 2002(20) 66.188792 65.195041 69.465555 69.153253 72.172612 71.475510 71.290054 73.610726 2002(21) 2002(22) 2002(23) 2002(24) 2002(25) 2002(26) 2002(27) 2002(28) 73.065902 73.746367 76.291446 76.556708 78.001105 79.074341 79.410479 80.431331 2002(29) 2002(30) 2002(31) 2002(32) 2002(33) 2002(34) 2002(35) 2002(36) 81.864821 84.178087 82.476433 85.593946 86.332950 88.063100 87.695816 89.370019 2002(37) 2002(38) 2002(39) 2002(40) 2002(41) 2002(42) 2002(43) 2002(44) 90.267099 90.457480 93.207868 94.160403 94.700214 96.586833 96.558486 95.723408 2002(45) 2002(46) 2002(47) 97.426735 97.775387 99.526599 > > # or, take mean of all points in each > aggregate(z, new.freq, mean) 2001(1) 2001(2) 2001(3) 2001(4) 2001(5) 2001(6) 2001(7) 2001(8) 1.278595 2.164371 5.595281 5.329508 5.179532 7.487429 8.738325 9.575781 2001(9) 2001(10) 2001(11) 2001(12) 2001(13) 2001(14) 2001(15) 2001(16) 9.694612 12.511781 12.389843 12.378759 11.785300 16.124931 15.955066 16.983810 2001(17) 2001(18) 2001(19) 2001(20) 2001(21) 2001(22) 2001(23) 2001(24) 18.943836 19.821221 20.593901 21.918977 22.782136 23.074565 22.010648 25.619826 2001(25) 2001(26) 2001(27) 2001(28) 2001(29) 2001(30) 2001(31) 2001(32) 25.943871 26.844204 26.529248 28.521850 30.417942 32.358680 31.897212 33.387672 2001(33) 2001(34) 2001(35) 2001(36) 2001(37) 2001(38) 2001(39) 2001(40) 33.946195 33.622940 35.585005 36.605710 37.940687 40.100025 40.763176 40.835476 2001(41) 2001(42) 2001(43) 2001(44) 2001(45) 2001(46) 2001(47) 2001(48) 41.746638 43.696963 44.556663 44.311244 45.292505 47.364582 48.768533 48.887654 2001(49) 2001(50) 2001(51) 2001(52) 2002(1) 2002(2) 2002(3) 2002(4) 50.881108 51.398106 51.387974 53.341120 52.870637 56.433024 57.980400 56.632779 2002(5) 2002(6) 2002(7) 2002(8) 2002(9) 2002(10) 2002(11) 2002(12) 56.955865 59.569720 59.864945 63.401618 61.960760 63.689739 64.028002 64.256727 2002(13) 2002(14) 2002(15) 2002(16) 2002(17) 2002(18) 2002(19) 2002(20) 66.188792 65.195041 69.465555 69.153253 72.172612 71.475510 71.290054 73.610726 2002(21) 2002(22) 2002(23) 2002(24) 2002(25) 2002(26) 2002(27) 2002(28) 73.065902 73.746367 76.291446 76.556708 78.001105 79.074341 79.410479 80.431331 2002(29) 2002(30) 2002(31) 2002(32) 2002(33) 2002(34) 2002(35) 2002(36) 81.864821 84.178087 82.476433 85.593946 86.332950 88.063100 87.695816 89.370019 2002(37) 2002(38) 2002(39) 2002(40) 2002(41) 2002(42) 2002(43) 2002(44) 90.267099 90.457480 93.207868 94.160403 94.700214 96.586833 96.558486 95.723408 2002(45) 2002(46) 2002(47) 97.426735 97.775387 99.526599 > > # example of taking means in the presence of NAs > z.na <- zooreg(c(1:364, NA), start = as.Date("2001-01-01")) > aggregate(z.na, as.yearqtr, mean, na.rm = TRUE) 2001 Q1 2001 Q2 2001 Q3 2001 Q4 45.5 136.0 227.5 319.0 > > # Find the sd of all days that lie in any Jan, all days that lie in > # any Feb, ..., all days that lie in any Dec (i.e. output is vector with > # 12 components) > aggregate(z, format(time(z), "%m"), sd) 01 02 03 04 05 06 07 08 27.931987 27.985392 27.679111 27.774779 27.328400 27.840695 27.520893 28.058606 09 10 11 12 27.806512 28.066187 27.406884 1.589453 > > > > > cleanEx() detaching ‘package:chron’ > nameEx("as.zoo") > ### * as.zoo > > flush(stderr()); flush(stdout()) > > ### Name: as.zoo > ### Title: Coercion from and to zoo > ### Aliases: as.zoo as.zoo.default as.zoo.data.frame as.zoo.fts as.zoo.its > ### as.zoo.irts as.zoo.matrix as.zoo.mcmc as.zoo.tis as.zoo.xts > ### as.zoo.zoo as.matrix.zoo as.vector.zoo as.data.frame.zoo as.list.zoo > ### as.list.ts as.zoo.ts as.ts.zoo > ### Keywords: ts > > ### ** Examples > > ## coercion to zoo: > ## default method > as.zoo(rnorm(5)) 1 2 3 4 5 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > ## method for "ts" objects > as.zoo(ts(rnorm(5), start = 1981, freq = 12)) Jan 1981 Feb 1981 Mar 1981 Apr 1981 May 1981 -0.8204684 0.4874291 0.7383247 0.5757814 -0.3053884 > > ## coercion from zoo: > x.date <- as.POSIXct(paste("2003-", rep(1:4, 4:1), "-", sample(1:28, 10, replace = TRUE), sep = "")) > x <- zoo(matrix(rnorm(24), ncol = 2), x.date) > as.matrix(x) x.1 x.2 2003-01-04 0.82122120 1.35867955 2003-01-06 -0.01619026 -0.47815006 2003-01-19 0.94383621 0.41794156 2003-01-27 -0.04493361 -1.47075238 2003-02-01 0.78213630 -0.05380504 2003-02-08 0.59390132 -0.10278773 2003-02-11 0.91897737 0.38767161 2003-03-11 0.07456498 -1.37705956 2003-03-25 -1.98935170 -0.41499456 2003-04-10 0.61982575 -0.39428995 > as.vector(x) [1] 0.82122120 -0.01619026 0.94383621 -0.04493361 0.78213630 0.59390132 [7] 0.91897737 0.07456498 -1.98935170 0.61982575 1.35867955 -0.47815006 [13] 0.41794156 -1.47075238 -0.05380504 -0.10278773 0.38767161 -1.37705956 [19] -0.41499456 -0.39428995 > as.data.frame(x) x.1 x.2 2003-01-04 0.82122120 1.35867955 2003-01-06 -0.01619026 -0.47815006 2003-01-19 0.94383621 0.41794156 2003-01-27 -0.04493361 -1.47075238 2003-02-01 0.78213630 -0.05380504 2003-02-08 0.59390132 -0.10278773 2003-02-11 0.91897737 0.38767161 2003-03-11 0.07456498 -1.37705956 2003-03-25 -1.98935170 -0.41499456 2003-04-10 0.61982575 -0.39428995 > as.list(x) $x.1 2003-01-04 2003-01-06 2003-01-19 2003-01-27 2003-02-01 2003-02-08 0.82122120 -0.01619026 0.94383621 -0.04493361 0.78213630 0.59390132 2003-02-11 2003-03-11 2003-03-25 2003-04-10 0.91897737 0.07456498 -1.98935170 0.61982575 $x.2 2003-01-04 2003-01-06 2003-01-19 2003-01-27 2003-02-01 2003-02-08 1.35867955 -0.47815006 0.41794156 -1.47075238 -0.05380504 -0.10278773 2003-02-11 2003-03-11 2003-03-25 2003-04-10 0.38767161 -1.37705956 -0.41499456 -0.39428995 > > > > cleanEx() > nameEx("coredata") > ### * coredata > > flush(stderr()); flush(stdout()) > > ### Name: coredata > ### Title: Extracting/Replacing the Core Data of Objects > ### Aliases: coredata coredata.default coredata.zoo coredata.ts > ### coredata.its coredata.irts coredata<- coredata<-.zoo coredata<-.ts > ### coredata<-.irts coredata<-.its > ### Keywords: ts > > ### ** Examples > > x.date <- as.Date(paste(2003, rep(1:4, 4:1), seq(1,20,2), sep = "-")) > x <- zoo(matrix(rnorm(20), ncol = 2), x.date) > > ## the full time series > x 2003-01-01 -0.6264538 1.51178117 2003-01-03 0.1836433 0.38984324 2003-01-05 -0.8356286 -0.62124058 2003-01-07 1.5952808 -2.21469989 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 2003-02-13 0.4874291 -0.01619026 2003-03-15 0.7383247 0.94383621 2003-03-17 0.5757814 0.82122120 2003-04-19 -0.3053884 0.59390132 > ## and only matrix of observations > coredata(x) [,1] [,2] [1,] -0.6264538 1.51178117 [2,] 0.1836433 0.38984324 [3,] -0.8356286 -0.62124058 [4,] 1.5952808 -2.21469989 [5,] 0.3295078 1.12493092 [6,] -0.8204684 -0.04493361 [7,] 0.4874291 -0.01619026 [8,] 0.7383247 0.94383621 [9,] 0.5757814 0.82122120 [10,] -0.3053884 0.59390132 > > ## change the observations > coredata(x) <- matrix(1:20, ncol = 2) > x 2003-01-01 1 11 2003-01-03 2 12 2003-01-05 3 13 2003-01-07 4 14 2003-02-09 5 15 2003-02-11 6 16 2003-02-13 7 17 2003-03-15 8 18 2003-03-17 9 19 2003-04-19 10 20 > > > > cleanEx() > nameEx("frequency") > ### * frequency > > flush(stderr()); flush(stdout()) > > ### Name: frequency<- > ### Title: Replacing the Index of Objects > ### Aliases: frequency<- frequency<-.zoo frequency<-.zooreg > ### Keywords: ts > > ### ** Examples > > z <- zooreg(1:5) > z 1 2 3 4 5 1 2 3 4 5 > as.ts(z) Time Series: Start = 1 End = 5 Frequency = 1 [1] 1 2 3 4 5 > frequency(z) <- 3 > z 1(1) 2(1) 3(1) 4(1) 5(1) 1 2 3 4 5 > as.ts(z) Time Series: Start = c(1, 1) End = c(5, 1) Frequency = 3 [1] 1 NA NA 2 NA NA 3 NA NA 4 NA NA 5 > > > > cleanEx() > nameEx("ggplot2.zoo") > ### * ggplot2.zoo > > flush(stderr()); flush(stdout()) > > ### Name: ggplot2.zoo > ### Title: Convenience Functions for Plotting zoo Objects with ggplot2 > ### Aliases: autoplot.zoo fortify.zoo ggplot2.zoo facet_free yearmon_trans > ### yearqtr_trans scale_x_yearmon scale_y_yearmon scale_x_yearqtr > ### scale_y_yearqtr > > ### ** Examples > > if(require("ggplot2") && require("scales")) { + ## example data + x.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) + x <- zoo(rnorm(5), x.Date) + xlow <- x - runif(5) + xhigh <- x + runif(5) + z <- cbind(x, xlow, xhigh) + + ## univariate plotting + autoplot(x) + ## by hand + ggplot(aes(x = Index, y = Value), data = fortify(x, melt = TRUE)) + + geom_line() + xlab("Index") + ylab("x") + ## adding series one at a time + last_plot() + geom_line(aes(x = Index, y = xlow), colour = "red", data = fortify(xlow)) + ## add ribbon for high/low band + ggplot(aes(x = Index, y = x, ymin = xlow, ymax = xhigh), data = fortify(x)) + + geom_ribbon(fill = "darkgray") + geom_line() + + ## multivariate plotting in multiple or single panels + autoplot(z) ## multiple without color/linetype + autoplot(z, facets = Series ~ .) ## multiple with series-dependent color/linetype + autoplot(z, facets = NULL) ## single with series-dependent color/linetype + ## by hand with color/linetype and with/without facets + qplot(x = Index, y = Value, group = Series, colour = Series, + linetype = Series, facets = Series ~ ., data = fortify(z, melt = TRUE)) + + geom_line() + xlab("Index") + ylab("") + ggplot(aes(x = Index, y = Value, group = Series, colour = Series, linetype = Series), + data = fortify(z, melt = TRUE)) + geom_line() + xlab("Index") + ylab("") + ## variations + autoplot(z, geom = "point") + autoplot(z, facets = NULL) + geom_point() + autoplot(z, facets = NULL) + scale_colour_grey() + theme_bw() + + ## for "ts" series via coercion + autoplot(as.zoo(EuStockMarkets)) + autoplot(as.zoo(EuStockMarkets), facets = NULL) + + autoplot(z) + + aes(colour = NULL, linetype = NULL) + + facet_grid(Series ~ ., scales = "free_y") + + autoplot(z) + aes(colour = NULL, linetype = NULL) + facet_free() # same + + z.yq <- zooreg(rnorm(50), as.yearqtr("2000-1"), freq = 4) + autoplot(z.yq) + scale_x_yearqtr() + + ## mimic matplot + data <- cbind(A = c(6, 1, NA, NA), B = c(16, 4, 1, NA), C = c(25, 7, 2, 1)) + autoplot(zoo(data), facet = NULL) + geom_point() + ## with different line types + autoplot(zoo(data), facet = NULL) + geom_point() + aes(linetype = Series) + + ## illustrate just fortify() method + z <- zoo(data) + fortify(z) + fortify(z, melt = TRUE) + fortify(z, melt = TRUE, names = c("Time", NA, "Data")) + fortify(z, melt = TRUE, names = c(Index = "Time")) + + ## with/without splitting + z <- zoo(cbind(a.A = 1:2, a.B = 2:3, b.A = 3:4, c.B = 4:5)) + fortify(z) + fortify(z, melt = TRUE, sep = ".", + names = list(Series = c("Lower", "Upper"))) + + } Loading required package: ggplot2 Loading required package: scales Index Lower Upper Value 1 1 a A 1 2 2 a A 2 3 1 a B 2 4 2 a B 3 5 1 b A 3 6 2 b A 4 7 1 c B 4 8 2 c B 5 > > > > cleanEx() detaching ‘package:scales’, ‘package:ggplot2’ > nameEx("index") > ### * index > > flush(stderr()); flush(stdout()) > > ### Name: index > ### Title: Extracting/Replacing the Index of Objects > ### Aliases: index index.default index.zoo index.ts time.zoo index<- > ### index<-.zoo time<- time<-.zoo start.zoo end.zoo > ### Keywords: ts > > ### ** Examples > > x.date <- as.Date(paste(2003, 2, c(1, 3, 7, 9, 14), sep = "-")) > x <- zoo(rnorm(5), x.date) > > ## query index/time of a zoo object > index(x) [1] "2003-02-01" "2003-02-03" "2003-02-07" "2003-02-09" "2003-02-14" > time(x) [1] "2003-02-01" "2003-02-03" "2003-02-07" "2003-02-09" "2003-02-14" > > ## change class of index from Date to POSIXct > ## relative to current time zone > x 2003-02-01 2003-02-03 2003-02-07 2003-02-09 2003-02-14 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > index(x) <- as.POSIXct(format(time(x)),tz="") > x 2003-02-01 2003-02-03 2003-02-07 2003-02-09 2003-02-14 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > > ## replace index/time of a zoo object > index(x) <- 1:5 > x 1 2 3 4 5 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > time(x) <- 6:10 > x 6 7 8 9 10 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 > > ## query start and end of a zoo object > start(x) [1] 6 > end(x) [1] 10 > > ## query index of a usual matrix > xm <- matrix(rnorm(10), ncol = 2) > index(xm) [1] 1 2 3 4 5 > > > > cleanEx() > nameEx("is.regular") > ### * is.regular > > flush(stderr()); flush(stdout()) > > ### Name: is.regular > ### Title: Check Regularity of a Series > ### Aliases: is.regular is.regular.zoo is.regular.ts is.regular.zooreg > ### is.regular.default > ### Keywords: ts > > ### ** Examples > > ## checking of a strictly regular zoo series > z <- zoo(1:10, seq(2000, 2002.25, by = 0.25), frequency = 4) > z 2000 Q1 2000 Q2 2000 Q3 2000 Q4 2001 Q1 2001 Q2 2001 Q3 2001 Q4 2002 Q1 2002 Q2 1 2 3 4 5 6 7 8 9 10 > class(z) [1] "zooreg" "zoo" > frequency(z) ## extraction of frequency attribute [1] 4 > is.regular(z) [1] TRUE > is.regular(z, strict = TRUE) [1] TRUE > ## by omitting observations, the series is not strictly regular > is.regular(z[-3]) [1] TRUE > is.regular(z[-3], strict = TRUE) [1] FALSE > > ## checking of a plain zoo series without frequency attribute > ## which is in fact regular > z <- zoo(1:10, seq(2000, 2002.25, by = 0.25)) > z 2000 2000.25 2000.5 2000.75 2001 2001.25 2001.5 2001.75 2002 2002.25 1 2 3 4 5 6 7 8 9 10 > class(z) [1] "zoo" > frequency(z) ## data driven computation of frequency [1] 4 > is.regular(z) [1] TRUE > is.regular(z, strict = TRUE) [1] TRUE > ## by omitting observations, the series is not strictly regular > is.regular(z[-3]) [1] TRUE > is.regular(z[-3], strict = TRUE) [1] FALSE > > ## checking of an irregular zoo series > z <- zoo(1:10, rnorm(10)) > z -0.8356 -0.8205 -0.6265 -0.3054 0.1836 0.3295 0.4874 0.5758 0.7383 1.5953 3 6 1 10 2 5 7 9 8 4 > class(z) [1] "zoo" > frequency(z) ## attempt of data-driven frequency computation NULL > is.regular(z) [1] FALSE > is.regular(z, strict = TRUE) [1] FALSE > > > > cleanEx() > nameEx("lag.zoo") > ### * lag.zoo > > flush(stderr()); flush(stdout()) > > ### Name: lag.zoo > ### Title: Lags and Differences of zoo Objects > ### Aliases: lag.zoo diff.zoo > ### Keywords: ts > > ### ** Examples > > x <- zoo(11:21) > > lag(x, k = 1) 1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 > lag(x, k = -1) 2 3 4 5 6 7 8 9 10 11 11 12 13 14 15 16 17 18 19 20 > # this pairs each value of x with the next or future value > merge(x, lag1 = lag(x, k=1)) x lag1 1 11 12 2 12 13 3 13 14 4 14 15 5 15 16 6 16 17 7 17 18 8 18 19 9 19 20 10 20 21 11 21 NA > diff(x^3) 2 3 4 5 6 7 8 9 10 11 397 469 547 631 721 817 919 1027 1141 1261 > diff(x^3, -1) 1 2 3 4 5 6 7 8 9 10 397 469 547 631 721 817 919 1027 1141 1261 > diff(x^3, na.pad = TRUE) 1 2 3 4 5 6 7 8 9 10 11 NA 397 469 547 631 721 817 919 1027 1141 1261 > > > > > cleanEx() > nameEx("make.par.list") > ### * make.par.list > > flush(stderr()); flush(stdout()) > > ### Name: make.par.list > ### Title: Make a List from a Parameter Specification > ### Aliases: make.par.list > ### Keywords: ts > > ### ** Examples > > make.par.list(letters[1:5], 1:5, 3, 5) $a [1] 1 $b [1] 2 $c [1] 3 $d [1] 4 $e [1] 5 > suppressWarnings( make.par.list(letters[1:5], 1:4, 3, 5, 99) ) $a [1] 1 $b [1] 2 $c [1] 3 $d [1] 4 $e [1] 1 > make.par.list(letters[1:5], c(d=3), 3, 5, 99) $a [1] 99 $b [1] 99 $c [1] 99 $d [1] 3 $e [1] 99 > make.par.list(letters[1:5], list(d=1:2, 99), 3, 5) $a [1] 99 $b [1] 99 $c [1] 99 $d [1] 1 2 1 $e [1] 99 > make.par.list(letters[1:5], list(d=1:2, 99, 100), 3, 5) $a [1] 99 $b [1] 100 $c [1] 99 $d [1] 1 2 1 $e [1] 100 > > > > cleanEx() > nameEx("merge.zoo") > ### * merge.zoo > > flush(stderr()); flush(stdout()) > > ### Name: merge.zoo > ### Title: Merge Two or More zoo Objects > ### Aliases: merge.zoo rbind.zoo c.zoo cbind.zoo > ### Keywords: ts > > ### ** Examples > > ## simple merging > x.date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) > x <- zoo(rnorm(5), x.date) > > y1 <- zoo(matrix(1:10, ncol = 2), 1:5) > y2 <- zoo(matrix(rnorm(10), ncol = 2), 3:7) > > ## using arguments `fill' and `suffixes' > merge(y1, y2, all = FALSE) y1.1 y1.2 y2.1 y2.2 3 3 8 -0.8204684 1.5117812 4 4 9 0.4874291 0.3898432 5 5 10 0.7383247 -0.6212406 > merge(y1, y2, all = FALSE, suffixes = c("a", "b")) a.1 a.2 b.1 b.2 3 3 8 -0.8204684 1.5117812 4 4 9 0.4874291 0.3898432 5 5 10 0.7383247 -0.6212406 > merge(y1, y2, all = TRUE) y1.1 y1.2 y2.1 y2.2 1 1 6 NA NA 2 2 7 NA NA 3 3 8 -0.8204684 1.5117812 4 4 9 0.4874291 0.3898432 5 5 10 0.7383247 -0.6212406 6 NA NA 0.5757814 -2.2146999 7 NA NA -0.3053884 1.1249309 > merge(y1, y2, all = TRUE, fill = 0) y1.1 y1.2 y2.1 y2.2 1 1 6 0.0000000 0.0000000 2 2 7 0.0000000 0.0000000 3 3 8 -0.8204684 1.5117812 4 4 9 0.4874291 0.3898432 5 5 10 0.7383247 -0.6212406 6 0 0 0.5757814 -2.2146999 7 0 0 -0.3053884 1.1249309 > > ## if different index classes are merged, as in > ## the next merge example then ## a warning is issued and > ### the indexes are coerced. > ## It is up to the user to ensure that the result makes sense. > merge(x, y1, y2, all = TRUE) Warning in merge.zoo(x, y1, y2, all = TRUE) : Index vectors are of different classes: Date integer integer x y1.1 y1.2 y2.1 y2.2 1970-01-02 NA 1 6 NA NA 1970-01-03 NA 2 7 NA NA 1970-01-04 NA 3 8 -0.8204684 1.5117812 1970-01-05 NA 4 9 0.4874291 0.3898432 1970-01-06 NA 5 10 0.7383247 -0.6212406 1970-01-07 NA NA NA 0.5757814 -2.2146999 1970-01-08 NA NA NA -0.3053884 1.1249309 2003-02-01 -0.6264538 NA NA NA NA 2003-02-03 0.1836433 NA NA NA NA 2003-02-07 -0.8356286 NA NA NA NA 2003-02-09 1.5952808 NA NA NA NA 2003-02-14 0.3295078 NA NA NA NA > > ## extend an irregular series to a regular one: > # create a constant series > z <- zoo(1, seq(4)[-2]) > # create a 0 dimensional zoo series > z0 <- zoo(, 1:4) > # do the extension > merge(z, z0) 1 2 3 4 1 NA 1 1 > # same but with zero fill > merge(z, z0, fill = 0) 1 2 3 4 1 0 1 1 > > merge(z, coredata(z), 1) z coredata(z) 1 1 1 1 1 3 1 1 1 4 1 1 1 > > > ## merge multiple series represented in a long form data frame > ## into a multivariate zoo series and plot, one series for each site. > ## Additional examples can be found here: > ## https://stat.ethz.ch/pipermail/r-help/2009-February/187094.html > ## https://stat.ethz.ch/pipermail/r-help/2009-February/187096.html > ## > m <- 5 # no of years > n <- 6 # no of sites > sites <- LETTERS[1:n] > set.seed(1) > DF <- data.frame(site = sites, year = 2000 + 1:m, data = rnorm(m*n)) > tozoo <- function(x) zoo(x$data, x$year) > Data <- do.call(merge, lapply(split(DF, DF$site), tozoo)) > plot(Data, screen = 1, col = 1:n, pch = 1:n, type = "o", xlab = "") > legend("bottomleft", legend = sites, lty = 1, pch = 1:n, col = 1:n) > > ## for each index value in x merge it with the closest index value in y > ## but retaining x's times. > x<-zoo(1:3,as.Date(c("1992-12-13", "1997-05-12", "1997-07-13"))) > y<-zoo(1:5,as.Date(c("1992-12-15", "1992-12-16", "1997-05-10","1997-05-19", "1997-07-13"))) > f <- function(u) which.min(abs(as.numeric(index(y)) - as.numeric(u))) > ix <- sapply(index(x), f) > cbind(x, y = coredata(y)[ix]) x y 1992-12-13 1 1 1997-05-12 2 3 1997-07-13 3 5 > > ## this merges each element of x with the closest time point in y at or > ## after x's time point (whereas in previous example it could be before > ## or after) > window(na.locf(merge(x, y), fromLast = TRUE), index(x)) x y 1992-12-13 1 1 1997-05-12 2 4 1997-07-13 3 5 > > > > > > cleanEx() > nameEx("na.StructTS") > ### * na.StructTS > > flush(stderr()); flush(stdout()) > > ### Name: na.StructTS > ### Title: Fill NA or specified positions. > ### Aliases: na.StructTS na.StructTS.zoo na.StructTS.ts > ### Keywords: ts > > ### ** Examples > > > z <- zooreg(rep(10 * seq(8), each = 4) + rep(c(3, 1, 2, 4), times = 8), + start = as.yearqtr(2000), freq = 4) > z[25] <- NA > > zout <- na.StructTS(z) > > plot(cbind(z, zout), screen = 1, col = 1:2, type = c("l", "p"), pch = 20) > > > > > > cleanEx() > nameEx("na.aggregate") > ### * na.aggregate > > flush(stderr()); flush(stdout()) > > ### Name: na.aggregate > ### Title: Replace NA by Aggregation > ### Aliases: na.aggregate na.aggregate.default > ### Keywords: ts > > ### ** Examples > > z <- zoo(c(1, NA, 3:9), + c(as.Date("2010-01-01") + 0:2, + as.Date("2010-02-01") + 0:2, + as.Date("2011-01-01") + 0:2)) > ## overall mean > na.aggregate(z) 2010-01-01 2010-01-02 2010-01-03 2010-02-01 2010-02-02 2010-02-03 2011-01-01 1.000 5.375 3.000 4.000 5.000 6.000 7.000 2011-01-02 2011-01-03 8.000 9.000 > ## group by months > na.aggregate(z, as.yearmon) 2010-01-01 2010-01-02 2010-01-03 2010-02-01 2010-02-02 2010-02-03 2011-01-01 1 2 3 4 5 6 7 2011-01-02 2011-01-03 8 9 > ## group by calendar months > na.aggregate(z, months) 2010-01-01 2010-01-02 2010-01-03 2010-02-01 2010-02-02 2010-02-03 2011-01-01 1.0 5.6 3.0 4.0 5.0 6.0 7.0 2011-01-02 2011-01-03 8.0 9.0 > ## group by years > na.aggregate(z, format, "%Y") 2010-01-01 2010-01-02 2010-01-03 2010-02-01 2010-02-02 2010-02-03 2011-01-01 1.0 3.8 3.0 4.0 5.0 6.0 7.0 2011-01-02 2011-01-03 8.0 9.0 > > > > cleanEx() > nameEx("na.approx") > ### * na.approx > > flush(stderr()); flush(stdout()) > > ### Name: na.approx > ### Title: Replace NA by Interpolation > ### Aliases: na.approx na.approx.zoo na.approx.zooreg na.approx.ts > ### na.approx.default na.spline na.spline.zoo na.spline.zooreg > ### na.spline.ts na.spline.default > ### Keywords: ts > > ### ** Examples > > > z <- zoo(c(2, NA, 1, 4, 5, 2), c(1, 3, 4, 6, 7, 8)) > > ## use underlying time scale for interpolation > na.approx(z) 1 3 4 6 7 8 2.000000 1.333333 1.000000 4.000000 5.000000 2.000000 > ## use equidistant spacing > na.approx(z, 1:6) 1 3 4 6 7 8 2.0 1.5 1.0 4.0 5.0 2.0 > > # with and without na.rm = FALSE > zz <- c(NA, 9, 3, NA, 3, 2) > na.approx(zz, na.rm = FALSE) [1] NA 9 3 3 3 2 > na.approx(zz) [1] 9 3 3 3 2 > > d0 <- as.Date("2000-01-01") > z <- zoo(c(11, NA, 13, NA, 15, NA), d0 + 1:6) > > # NA fill, drop or keep leading/trailing NAs > na.approx(z) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 11 12 13 14 15 > na.approx(z, na.rm = FALSE) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 11 12 13 14 15 NA > > # extrapolate to point outside of range of time points > # (a) drop NA, (b) keep NA, (c) extrapolate using rule = 2 from approx() > na.approx(z, xout = d0 + 7) Data: numeric(0) Index: [1] "Date of length 0" > na.approx(z, xout = d0 + 7, na.rm = FALSE) 2000-01-08 NA > na.approx(z, xout = d0 + 7, rule = 2) 2000-01-08 15 > > # use splines - extrapolation handled differently > z <- zoo(c(11, NA, 13, NA, 15, NA), d0 + 1:6) > na.spline(z) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 11 12 13 14 15 16 > na.spline(z, na.rm = FALSE) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 11 12 13 14 15 16 > na.spline(z, xout = d0 + 1:6) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 11 12 13 14 15 16 > na.spline(z, xout = d0 + 2:5) 2000-01-03 2000-01-04 2000-01-05 2000-01-06 12 13 14 15 > na.spline(z, xout = d0 + 7) 2000-01-08 17 > na.spline(z, xout = d0 + 7, na.rm = FALSE) 2000-01-08 17 > > ## using na.approx for disaggregation > zy <- zoo(1:3, 2000:2001) > > # yearly to monthly series > zmo <- na.approx(zy, xout = as.yearmon(2000+0:13/12)) > zmo Jan 2000 Feb 2000 Mar 2000 Apr 2000 May 2000 Jun 2000 Jul 2000 Aug 2000 1.000000 1.083333 1.166667 1.250000 1.333333 1.416667 1.500000 1.583333 Sep 2000 Oct 2000 Nov 2000 Dec 2000 Jan 2001 1.666667 1.750000 1.833333 1.916667 2.000000 > > # monthly to daily series > sq <- seq(as.Date(start(zmo)), as.Date(end(zmo), frac = 1), by = "day") > zd <- na.approx(zmo, x = as.Date, xout = sq) > head(zd) 2000-01-01 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 1.000000 1.002688 1.005376 1.008065 1.010753 1.013441 > > # weekly to daily series > zww <- zoo(1:3, as.Date("2001-01-01") + seq(0, length = 3, by = 7)) > zww 2001-01-01 2001-01-08 2001-01-15 1 2 3 > zdd <- na.approx(zww, xout = seq(start(zww), end(zww), by = "day")) > zdd 2001-01-01 2001-01-02 2001-01-03 2001-01-04 2001-01-05 2001-01-06 2001-01-07 1.000000 1.142857 1.285714 1.428571 1.571429 1.714286 1.857143 2001-01-08 2001-01-09 2001-01-10 2001-01-11 2001-01-12 2001-01-13 2001-01-14 2.000000 2.142857 2.285714 2.428571 2.571429 2.714286 2.857143 2001-01-15 3.000000 > > # The lines do not show up because of the NAs > plot(cbind(z, z), type = "b", screen = 1) > # use na.approx to force lines to appear > plot(cbind(z, na.approx(z)), type = "b", screen = 1) > > # Workaround where less than 2 NAs can appear in a column > za <- zoo(cbind(1:5, NA, c(1:3, NA, 5), NA)); za 1 1 NA 1 NA 2 2 NA 2 NA 3 3 NA 3 NA 4 4 NA NA NA 5 5 NA 5 NA > > ix <- colSums(!is.na(za)) > 0 > za[, ix] <- na.approx(za[, ix]); za 1 1 NA 1 NA 2 2 NA 2 NA 3 3 NA 3 NA 4 4 NA 4 NA 5 5 NA 5 NA > > # using na.approx to create regularly spaced series > # z has points at 10, 20 and 40 minutes while output also has a point at 30 > if(require("chron")) { + tt <- as.chron("2000-01-01 10:00:00") + c(1, 2, 4) * as.numeric(times("00:10:00")) + z <- zoo(1:3, tt) + tseq <- seq(start(z), end(z), by = times("00:10:00")) + na.approx(z, xout = tseq) + } Loading required package: chron (01/01/00 10:10:00) (01/01/00 10:20:00) (01/01/00 10:30:00) 1.0 2.0 2.5 > > > > cleanEx() detaching ‘package:chron’ > nameEx("na.fill") > ### * na.fill > > flush(stderr()); flush(stdout()) > > ### Name: na.fill > ### Title: Fill NA or specified positions. > ### Aliases: na.fill na.fill.ts na.fill.zoo na.fill.default > ### Keywords: ts > > ### ** Examples > > > z <- zoo(c(NA, 2, NA, 1, 4, 5, 2, NA)) > na.fill(z, "extend") 1 2 3 4 5 6 7 8 2.0 2.0 1.5 1.0 4.0 5.0 2.0 2.0 > na.fill(z, c("extend", NA)) 1 2 3 4 5 6 7 8 2 2 NA 1 4 5 2 2 > na.fill(z, -(1:3)) 1 2 3 4 5 6 7 8 -1 2 -2 1 4 5 2 -3 > na.fill(z, list(NA, NULL, NA)) 1 2 4 5 6 7 8 NA 2 1 4 5 2 NA > > > > > cleanEx() > nameEx("na.locf") > ### * na.locf > > flush(stderr()); flush(stdout()) > > ### Name: na.locf > ### Title: Last Observation Carried Forward > ### Aliases: na.locf na.locf0 na.locf.data.frame na.locf.list > ### na.locf.default > ### Keywords: ts > > ### ** Examples > > az <- zoo(1:6) > > bz <- zoo(c(2,NA,1,4,5,2)) > na.locf(bz) 1 2 3 4 5 6 2 2 1 4 5 2 > na.locf(bz, fromLast = TRUE) 1 2 3 4 5 6 2 1 1 4 5 2 > > cz <- zoo(c(NA,9,3,2,3,2)) > na.locf(cz) 2 3 4 5 6 9 3 2 3 2 > > # generate and fill in missing dates > z <- zoo(c(0.007306621, 0.007659046, 0.007681013, + 0.007817548, 0.007847579, 0.007867313), + as.Date(c("1993-01-01", "1993-01-09", "1993-01-16", + "1993-01-23", "1993-01-30", "1993-02-06"))) > g <- seq(start(z), end(z), "day") > na.locf(z, xout = g) 1993-01-01 1993-01-02 1993-01-03 1993-01-04 1993-01-05 1993-01-06 0.007306621 0.007306621 0.007306621 0.007306621 0.007306621 0.007306621 1993-01-07 1993-01-08 1993-01-09 1993-01-10 1993-01-11 1993-01-12 0.007306621 0.007306621 0.007659046 0.007659046 0.007659046 0.007659046 1993-01-13 1993-01-14 1993-01-15 1993-01-16 1993-01-17 1993-01-18 0.007659046 0.007659046 0.007659046 0.007681013 0.007681013 0.007681013 1993-01-19 1993-01-20 1993-01-21 1993-01-22 1993-01-23 1993-01-24 0.007681013 0.007681013 0.007681013 0.007681013 0.007817548 0.007817548 1993-01-25 1993-01-26 1993-01-27 1993-01-28 1993-01-29 1993-01-30 0.007817548 0.007817548 0.007817548 0.007817548 0.007817548 0.007847579 1993-01-31 1993-02-01 1993-02-02 1993-02-03 1993-02-04 1993-02-05 0.007847579 0.007847579 0.007847579 0.007847579 0.007847579 0.007847579 1993-02-06 0.007867313 > > # similar but use a 2 second grid > > z <- zoo(1:9, as.POSIXct(c("2010-01-04 09:30:02", "2010-01-04 09:30:06", + "2010-01-04 09:30:07", "2010-01-04 09:30:08", "2010-01-04 09:30:09", + "2010-01-04 09:30:10", "2010-01-04 09:30:11", "2010-01-04 09:30:13", + "2010-01-04 09:30:14"))) > > g <- seq(start(z), end(z), by = "2 sec") > na.locf(z, xout = g) 2010-01-04 09:30:02 2010-01-04 09:30:04 2010-01-04 09:30:06 2010-01-04 09:30:08 1 1 2 4 2010-01-04 09:30:10 2010-01-04 09:30:12 2010-01-04 09:30:14 6 7 9 > > ## get 5th of every month or most recent date prior to 5th if 5th missing. > ## Result has index of the date actually used. > > z <- zoo(c(1311.56, 1309.04, 1295.5, 1296.6, 1286.57, 1288.12, + 1289.12, 1289.12, 1285.33, 1307.65, 1309.93, 1311.46, 1311.28, + 1308.11, 1301.74, 1305.41, 1309.72, 1310.61, 1305.19, 1313.21, + 1307.85, 1312.25, 1325.76), as.Date(c(13242, 13244, + 13245, 13248, 13249, 13250, 13251, 13252, 13255, 13256, 13257, + 13258, 13259, 13262, 13263, 13264, 13265, 13266, 13269, 13270, + 13271, 13272, 13274))) > > # z.na is same as z but with missing days added (with NAs) > # It is formed by merging z with a zero with series having all the dates. > > rng <- range(time(z)) > z.na <- merge(z, zoo(, seq(rng[1], rng[2], by = "day"))) > > # use na.locf to bring values forward picking off 5th of month > na.locf(z.na)[as.POSIXlt(time(z.na))$mday == 5] 2006-04-05 2006-05-05 1311.56 1312.25 > > ## this is the same as the last one except instead of always using the > ## 5th of month in the result we show the date actually used > > # idx has NAs wherever z.na does but has 1, 2, 3, ... instead of > # z.na's data values (so idx can be used for indexing) > > idx <- coredata(na.locf(seq_along(z.na) + (0 * z.na))) > > # pick off those elements of z.na that correspond to 5th > > z.na[idx[as.POSIXlt(time(z.na))$mday == 5]] 2006-04-04 2006-05-04 1311.56 1312.25 > > ## only fill single-day gaps > > merge(z.na, filled1 = na.locf(z.na, maxgap = 1)) z.na filled1 2006-04-04 1311.56 1311.56 2006-04-05 NA 1311.56 2006-04-06 1309.04 1309.04 2006-04-07 1295.50 1295.50 2006-04-08 NA NA 2006-04-09 NA NA 2006-04-10 1296.60 1296.60 2006-04-11 1286.57 1286.57 2006-04-12 1288.12 1288.12 2006-04-13 1289.12 1289.12 2006-04-14 1289.12 1289.12 2006-04-15 NA NA 2006-04-16 NA NA 2006-04-17 1285.33 1285.33 2006-04-18 1307.65 1307.65 2006-04-19 1309.93 1309.93 2006-04-20 1311.46 1311.46 2006-04-21 1311.28 1311.28 2006-04-22 NA NA 2006-04-23 NA NA 2006-04-24 1308.11 1308.11 2006-04-25 1301.74 1301.74 2006-04-26 1305.41 1305.41 2006-04-27 1309.72 1309.72 2006-04-28 1310.61 1310.61 2006-04-29 NA NA 2006-04-30 NA NA 2006-05-01 1305.19 1305.19 2006-05-02 1313.21 1313.21 2006-05-03 1307.85 1307.85 2006-05-04 1312.25 1312.25 2006-05-05 NA 1312.25 2006-05-06 1325.76 1325.76 > > ## fill NAs in first column by inflating the most recent non-NA > ## by the growth in second column. Note that elements of x-x > ## are NA if the corresponding element of x is NA and zero else > > m <- zoo(cbind(c(1, 2, NA, NA, 5, NA, NA), seq(7)^2), as.Date(1:7)) > > r <- na.locf(m[,1]) * m[,2] / na.locf(m[,2] + (m[,1]-m[,1])) > cbind(V1 = r, V2 = m[,2]) V1 V2 1970-01-02 1.0 1 1970-01-03 2.0 4 1970-01-04 4.5 9 1970-01-05 8.0 16 1970-01-06 5.0 25 1970-01-07 7.2 36 1970-01-08 9.8 49 > > ## repeat a quarterly value every month > ## preserving NAs > zq <- zoo(c(1, NA, 3, 4), as.yearqtr(2000) + 0:3/4) > tt <- as.yearmon(start(zq)) + seq(0, len = 3 * length(zq))/12 > na.locf(zq, xout = tt, maxgap = 0) Jan 2000 Feb 2000 Mar 2000 Apr 2000 May 2000 Jun 2000 Jul 2000 Aug 2000 1 1 1 NA NA NA 3 3 Sep 2000 Oct 2000 Nov 2000 Dec 2000 3 4 4 4 > > > > > > cleanEx() > nameEx("na.trim") > ### * na.trim > > flush(stderr()); flush(stdout()) > > ### Name: na.trim > ### Title: Trim Leading/Trailing Missing Observations > ### Aliases: na.trim na.trim.default na.trim.ts > ### Keywords: ts > > ### ** Examples > > # examples of na.trim > x <- zoo(c(1, 4, 6), c(2, 4, 6)) > xx <- zoo(matrix(c(1, 4, 6, NA, 5, 7), 3), c(2, 4, 6)) > na.trim(x) 2 4 6 1 4 6 > na.trim(xx) 4 4 5 6 6 7 > > # using na.trim for alignment > # cal defines the legal dates > # all dates within the date range of x should be present > cal <- zoo(,c(1, 2, 3, 6, 7)) > x <- zoo(c(12, 16), c(2, 6)) > na.trim(merge(x, cal)) 2 3 6 12 NA 16 > > > > > cleanEx() > nameEx("plot.zoo") > ### * plot.zoo > > flush(stderr()); flush(stdout()) > > ### Name: plot.zoo > ### Title: Plotting zoo Objects > ### Aliases: plot.zoo barplot.zoo lines.zoo points.zoo > ### Keywords: ts > > ### ** Examples > > ## example dates > x.Date <- as.Date(paste(2003, 02, c(1, 3, 7, 9, 14), sep = "-")) > > ## univariate plotting > x <- zoo(rnorm(5), x.Date) > x2 <- zoo(rnorm(5, sd = 0.2), x.Date) > plot(x) > lines(x2, col = 2) > > ## multivariate plotting > z <- cbind(x, x2, zoo(rnorm(5, sd = 0.5), x.Date)) > plot(z, type = "b", pch = 1:3, col = 1:3, ylab = list(expression(mu), "b", "c")) > colnames(z) <- LETTERS[1:3] > plot(z, screens = 1, col = list(B = 2)) > plot(z, type = "b", pch = 1:3, col = 1:3) > plot(z, type = "b", pch = list(A = 1:5, B = 3), col = list(C = 4, 2)) > plot(z, type = "b", screen = c(1,2,1), col = 1:3) > # right axis is for broken lines > plot(x) > opar <- par(usr = c(par("usr")[1:2], range(x2))) > lines(x2, lty = 2) > # axis(4) > axis(side = 4) > par(opar) > > > ## Custom x axis labelling using a custom panel. > # 1. test data > z <- zoo(c(21, 34, 33, 41, 39, 38, 37, 28, 33, 40), + as.Date(c("1992-01-10", "1992-01-17", "1992-01-24", "1992-01-31", + "1992-02-07", "1992-02-14", "1992-02-21", "1992-02-28", "1992-03-06", + "1992-03-13"))) > zz <- merge(a = z, b = z+10) > # 2. axis tick for every point. Also every 3rd point labelled. > my.panel <- function(x, y, ..., pf = parent.frame()) { + fmt <- "%b-%d" # format for axis labels + lines(x, y, ...) + # if bottom panel + if (with(pf, length(panel.number) == 0 || + panel.number %% nr == 0 || panel.number == nser)) { + # create ticks at x values and then label every third tick + axis(side = 1, at = x, labels = FALSE) + ix <- seq(1, length(x), 3) + labs <- format(x, fmt) + axis(side = 1, at = x[ix], labels = labs[ix], tcl = -0.7, cex.axis = 0.7) + } + } > # 3. plot > plot(zz, panel = my.panel, xaxt = "n") > > # with a single panel plot a fancy x-axis is just the same > # procedure as for the ordinary plot command > plot(zz, screen = 1, col = 1:2, xaxt = "n") > # axis(1, at = time(zz), labels = FALSE) > tt <- time(zz) > axis(side = 1, at = tt, labels = FALSE) > ix <- seq(1, length(tt), 3) > fmt <- "%b-%d" # format for axis labels > labs <- format(tt, fmt) > # axis(1, at = time(zz)[ix], labels = labs[ix], tcl = -0.7, cex.axis = 0.7) > axis(side = 1, at = tt[ix], labels = labs[ix], tcl = -0.7, cex.axis = 0.7) > legend("bottomright", colnames(zz), lty = 1, col = 1:2) > > ## plot a mulitple ts series with nice x-axis using panel function > tab <- ts(cbind(A = 1:24, B = 24:1), start = c(2006, 1), freq = 12) > pnl.xaxis <- function(...) { + lines(...) + panel.number <- parent.frame()$panel.number + nser <- parent.frame()$nser + # if bottom panel + if (!length(panel.number) || panel.number == nser) { + tt <- list(...)[[1]] + ym <- as.yearmon(tt) + mon <- as.numeric(format(ym, "%m")) + yy <- format(ym, "%y") + mm <- substring(month.abb[mon], 1, 1) + if (any(mon == 1)) + # axis(1, tt[mon == 1], yy[mon == 1], cex.axis = 0.7) + axis(side = 1, at = tt[mon == 1], labels = yy[mon == 1], cex.axis = 0.7) + # axis(1, tt[mon > 1], mm[mon > 1], cex.axis = 0.5, tcl = -0.3) + axis(side = 1, at = tt[mon > 1], labels = mm[mon > 1], cex.axis = 0.5, tcl = -0.3) + } + } > plot(as.zoo(tab), panel = pnl.xaxis, xaxt = "n", main = "Fancy X Axis") > > ## Another example with a custom axis > # test data > z <- zoo(matrix(1:25, 5), c(10,11,20,21)) > colnames(z) <- letters[1:5] > > plot(zoo(coredata(z)), xaxt = "n", panel = function(x, y, ..., Time = time(z)) { + lines(x, y, ...) + # if bottom panel + pf <- parent.frame() + if (with(pf, panel.number %% nr == 0 || panel.number == nser)) { + axis(side = 1, at = x, labels = Time) + } + }) > > > ## plot with left and right axes > ## modified from http://www.mayin.org/ajayshah/KB/R/html/g6.html > set.seed(1) > z <- zoo(cbind(A = cumsum(rnorm(100)), B = cumsum(rnorm(100, mean = 0.2)))) > opar <- par(mai = c(.8, .8, .2, .8)) > plot(z[,1], type = "l", + xlab = "x-axis label", ylab = colnames(z)[1]) > par(new = TRUE) > plot(z[,2], type = "l", ann = FALSE, yaxt = "n", col = "blue") > # axis(4) > axis(side = 4) > legend(x = "topleft", bty = "n", lty = c(1,1), col = c("black", "blue"), + legend = paste(colnames(z), c("(left scale)", "(right scale)"))) > usr <- par("usr") > # if you don't care about srt= in text then mtext is shorter: > # mtext(colnames(z)[2], 4, 2, col = "blue") > text(usr[2] + .1 * diff(usr[1:2]), mean(usr[3:4]), colnames(z)[2], + srt = -90, xpd = TRUE, col = "blue") > par(opar) > > > ## another plot with left and right axes > ## modified from https://stat.ethz.ch/pipermail/r-help/2014-May/375293.html > d1 <- c(38.2, 18.1, 83.2, 42.7, 22.8, 48.1, 81.8, 129.6, 52.0, 110.3) > d2 <- c(2.2, 0.8, 0.7, 1.6, 0.9, 0.9, 1.1, 2.8, 5.1, 2.1) > z1 <- zooreg(d1, start = as.POSIXct("2013-01-01 00:00:01"), frequency = 0.0000006) > z2 <- zooreg(d2, start = as.POSIXct("2013-01-01 00:00:20"), frequency = 0.0000006) > zt <- zooreg(rnorm(1050), start = as.POSIXct("2013-01-01 00:00:01"), frequency = 0.00007) > z <- merge(zt, z1, z2, all = TRUE) > z <- na.spline(z[,2:3], na.rm = FALSE) > ## function to round up to a number divisible by n (2011 by Owen Jones) > roundup <- function(x, n) ceiling(ceiling(x)/n) * n > ## plot how to match secondary y-axis ticks to primary ones > plot(z$z1, ylim = c(0, signif(max(na.omit(z$z1)), 2)), xlab = "") > ## use multiplication for even tick numbers and fake sekondary y-axis > max.yl <- roundup(max(na.omit(z$z2)), par("yaxp")[3]) > multipl.yl <- max(na.omit(z$z2)) / max.yl > multipl.z2 <- signif(max(na.omit(z$z1) * 1.05), 2)/max.yl > lines(z$z2 * multipl.z2, lty = 2) > at4 <- axTicks(4) > axis(4, at = at4, seq(0, max.yl, length.out = par("yaxp")[3] + 1)) > > > # automatically placed point labels > ## Not run: > ##D library("maptools") > ##D pointLabel(time(z), coredata(z[,2]), labels = format(time(z)), cex = 0.5) > ## End(Not run) > > ## plot one zoo series against the other. > plot(x, x2) > plot(x, x2, xy.labels = TRUE) > plot(x, x2, xy.labels = 1:5, xy.lines = FALSE) > > ## shade a portion of a plot and make axis fancier > > v <- zooreg(rnorm(50), start = as.yearmon(2004), freq = 12) > > plot(v, type = "n") > u <- par("usr") > rect(as.yearmon("2007-8"), u[3], as.yearmon("2009-11"), u[4], + border = 0, col = "grey") > lines(v) > axis(1, floor(time(v)), labels = FALSE, tcl = -1) > > ## shade certain times to show recessions, etc. > v <- zooreg(rnorm(50), start = as.yearmon(2004), freq = 12) > plot(v, type = "n") > u <- par("usr") > rect(as.yearmon("2007-8"), u[3], as.yearmon("2009-11"), u[4], + border = 0, col = "grey") > lines(v) > axis(1, floor(time(v)), labels = FALSE, tcl = -1) > > ## fill area under plot > > pnl.xyarea <- function(x, y, fill.base = 0, col = 1, ...) { + lines(x, y, ...) + panel.number <- parent.frame()$panel.number + col <- rep(col, length = panel.number)[panel.number] + polygon(c(x[1], x, tail(x, 1), x[1]), + c(fill.base, as.numeric(y), fill.base, fill.base), col = col) + } > plot(zoo(EuStockMarkets), col = rainbow(4), panel = pnl.xyarea) > > > ## barplot > x <- zoo(cbind(rpois(5, 2), rpois(5, 3)), x.Date) > barplot(x, beside = TRUE) > > ## 3d plot > ## The persp function in R (not part of zoo) works with zoo objects. > ## The following example is by Enrico Schumann. > ## https://stat.ethz.ch/pipermail/r-sig-finance/2009q1/003710.html > nC <- 10 # columns > nO <- 100 # observations > dataM <- array(runif(nC * nO), dim=c(nO, nC)) > zz <- zoo(dataM, 1:nO) > persp(1:nO, 1:nC, zz) > > # interactive plotting > ## Not run: > ##D library("TeachingDemos") > ##D tke.test1 <- list(Parameters = list( > ##D lwd = list("spinbox", init = 1, from = 0, to = 5, increment = 1, width = 5), > ##D lty = list("spinbox", init = 1, from = 0, to = 6, increment = 1, width = 5) > ##D )) > ##D z <- zoo(rnorm(25)) > ##D tkexamp(plot(z), tke.test1, plotloc = "top") > ## End(Not run) > > # setting ylim on a multi-panel plot - 2nd panel y axis range is 1-50 > data("anscombe", package = "datasets") > ans6 <- zoo(anscombe[, 1:6]) > screens <- c(1, 1, 2, 2, 3, 3) > ylim <- unname(tapply(as.list(ans6), screens, range)) > ylim[[2]] <- 1:50 # or ylim[[2]] <- c(1, 50) > plot(ans6, screens = screens, ylim = ylim) > > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("read.zoo") > ### * read.zoo > > flush(stderr()); flush(stdout()) > > ### Name: read.zoo > ### Title: Reading and Writing zoo Series > ### Aliases: read.zoo read.table.zoo read.csv.zoo read.csv2.zoo > ### read.delim.zoo read.delim2.zoo write.zoo > ### Keywords: ts > > ### ** Examples > > ## this manual page provides a few typical examples, many more cases > ## are covered in vignette("zoo-read", package = "zoo") > > ## read text lines with a single date column > Lines <- "2013-12-24 2 + 2013-12-25 3 + 2013-12-26 8" > read.zoo(text = Lines, FUN = as.Date) # explicit coercion 2013-12-24 2013-12-25 2013-12-26 2 3 8 > read.zoo(text = Lines, format = "%Y-%m-%d") # same 2013-12-24 2013-12-25 2013-12-26 2 3 8 > read.zoo(text = Lines) # same, via heuristic 2013-12-24 2013-12-25 2013-12-26 2 3 8 > > ## read text lines with date/time in separate columns > Lines <- "2013-11-24 12:41:21 2 + 2013-12-25 12:41:22.25 3 + 2013-12-26 12:41:22.75 8" > read.zoo(text = Lines, index = 1:2, + FUN = paste, FUN2 = as.POSIXct) # explicit coercion 2013-11-24 12:41:21 2013-12-25 12:41:22 2013-12-26 12:41:22 2 3 8 > read.zoo(text = Lines, index = 1:2, tz = "") # same 2013-11-24 12:41:21 2013-12-25 12:41:22 2013-12-26 12:41:22 2 3 8 > read.zoo(text = Lines, index = 1:2) # same, via heuristic 2013-11-24 12:41:21 2013-12-25 12:41:22 2013-12-26 12:41:22 2 3 8 > > ## read directly from a data.frame (artificial and built-in BOD) > dat <- data.frame(date = paste("2000-01-", 10:15, sep = ""), + a = sin(1:6), b = cos(1:6)) > read.zoo(dat) a b 2000-01-10 0.8414710 0.5403023 2000-01-11 0.9092974 -0.4161468 2000-01-12 0.1411200 -0.9899925 2000-01-13 -0.7568025 -0.6536436 2000-01-14 -0.9589243 0.2836622 2000-01-15 -0.2794155 0.9601703 > data("BOD", package = "datasets") > read.zoo(BOD) 1 2 3 4 5 7 8.3 10.3 19.0 16.0 15.6 19.8 > > ## Not run: > ##D ## descriptions of typical examples > ##D > ##D ## turn *numeric* first column into yearmon index > ##D ## where number is year + fraction of year represented by month > ##D z <- read.zoo("foo.csv", sep = ",", FUN = as.yearmon) > ##D > ##D ## first column is of form yyyy.mm > ##D ## (Here we use format in place of as.character so that final zero > ##D ## is not dropped in dates like 2001.10 which as.character would do.) > ##D f <- function(x) as.yearmon(format(x, nsmall = 2), "%Y.%m") > ##D z <- read.zoo("foo.csv", header = TRUE, FUN = f) > ##D > ##D ## turn *character* first column into "Date" index > ##D ## Assume lines look like: 12/22/2007 1 2 > ##D z <- read.zoo("foo.tab", format = "%m/%d/%Y") > ##D > ##D # Suppose lines look like: 09112007 1 2 and there is no header > ##D z <- read.zoo("foo.txt", format = "%d%m%Y") > ##D > ##D ## csv file with first column of form YYYY-mm-dd HH:MM:SS > ##D ## Read in times as "chron" class. Requires chron 2.3-22 or later. > ##D z <- read.zoo("foo.csv", header = TRUE, sep = ",", FUN = as.chron) > ##D > ##D ## same but with custom format. Note as.chron uses POSIXt-style ##D > ##D ## Read in times as "chron" class. Requires chron 2.3-24 or later. > ##D z <- read.zoo("foo.csv", header = TRUE, sep = ",", FUN = as.chron, > ##D format = "##D > ##D > ##D ## same file format but read it in times as "POSIXct" class. > ##D z <- read.zoo("foo.csv", header = TRUE, sep = ",", tz = "") > ##D > ##D ## csv file with first column mm-dd-yyyy. Read times as "Date" class. > ##D z <- read.zoo("foo.csv", header = TRUE, sep = ",", format = "%m-%d-%Y") > ##D > ##D ## whitespace separated file with first column of form YYYY-mm-ddTHH:MM:SS > ##D ## and no headers. T appears literally. Requires chron 2.3-22 or later. > ##D z <- read.zoo("foo.csv", FUN = as.chron) > ##D > ##D # read in all csv files in the current directory and merge them > ##D read.zoo(Sys.glob("*.csv"), header = TRUE, sep = ",") > ##D > ##D # We use "NULL" in colClasses for those columns we don't need but in > ##D # col.names we still have to include dummy names for them. Of what > ##D # is left the index is the first three columns (1:3) which we convert > ##D # to chron class times in FUN and then truncate to 5 seconds in FUN2. > ##D # Finally we use aggregate = mean to average over the 5 second intervals. > ##D library("chron") > ##D > ##D Lines <- "CVX 20070201 9 30 51 73.25 81400 0 > ##D CVX 20070201 9 30 51 73.25 100 0 > ##D CVX 20070201 9 30 51 73.25 100 0 > ##D CVX 20070201 9 30 51 73.25 300 0 > ##D CVX 20070201 9 30 51 73.25 81400 0 > ##D CVX 20070201 9 40 51 73.25 100 0 > ##D CVX 20070201 9 40 52 73.25 100 0 > ##D CVX 20070201 9 40 53 73.25 300 0" > ##D > ##D z <- read.zoo(text = Lines, > ##D colClasses = c("NULL", "NULL", "numeric", "numeric", "numeric", > ##D "numeric", "numeric", "NULL"), > ##D col.names = c("Symbol", "Date", "Hour", "Minute", "Second", "Price", "Volume", "junk"), > ##D index = 1:3, # do not count columns that are "NULL" in colClasses > ##D FUN = function(h, m, s) times(paste(h, m, s, sep = ":")), > ##D FUN2 = function(tt) trunc(tt, "00:00:05"), > ##D aggregate = mean) > ## End(Not run) > > > > > cleanEx() > nameEx("rollapply") > ### * rollapply > > flush(stderr()); flush(stdout()) > > ### Name: rollapply > ### Title: Apply Rolling Functions > ### Aliases: rollapply rollapplyr rollapply.default rollapply.ts > ### rollapply.zoo > ### Keywords: iteration array ts > > ### ** Examples > > ## rolling mean > z <- zoo(11:15, as.Date(31:35)) > rollapply(z, 2, mean) 1970-02-01 1970-02-02 1970-02-03 1970-02-04 11.5 12.5 13.5 14.5 > > ## non-overlapping means > z2 <- zoo(rnorm(6)) > rollapply(z2, 3, mean, by = 3) # means of nonoverlapping groups of 3 2 5 -0.4261464 0.3681067 > aggregate(z2, c(3,3,3,6,6,6), mean) # same 3 6 -0.4261464 0.3681067 > > ## optimized vs. customized versions > rollapply(z2, 3, mean) # uses rollmean which is optimized for mean 2 3 4 5 -0.4261464 0.3144318 0.3630533 0.3681067 > rollmean(z2, 3) # same 2 3 4 5 -0.4261464 0.3144318 0.3630533 0.3681067 > rollapply(z2, 3, (mean)) # does not use rollmean 2 3 4 5 -0.4261464 0.3144318 0.3630533 0.3681067 > > > ## rolling regression: > ## set up multivariate zoo series with > ## number of UK driver deaths and lags 1 and 12 > seat <- as.zoo(log(UKDriverDeaths)) > time(seat) <- as.yearmon(time(seat)) > seat <- merge(y = seat, y1 = lag(seat, k = -1), + y12 = lag(seat, k = -12), all = FALSE) > > ## run a rolling regression with a 3-year time window > ## (similar to a SARIMA(1,0,0)(1,0,0)_12 fitted by OLS) > rr <- rollapply(seat, width = 36, + FUN = function(z) coef(lm(y ~ y1 + y12, data = as.data.frame(z))), + by.column = FALSE, align = "right") > > ## plot the changes in coefficients > ## showing the shifts after the oil crisis in Oct 1973 > ## and after the seatbelt legislation change in Jan 1983 > plot(rr) > > > ## rolling mean by time window (e.g., 3 days) rather than > ## by number of observations (e.g., when these are unequally spaced): > # > ## - test data > tt <- as.Date("2000-01-01") + c(1, 2, 5, 6, 7, 8, 10) > z <- zoo(seq_along(tt), tt) > ## - fill it out to a daily series, zm, using NAs > ## using a zero width zoo series g on a grid > g <- zoo(, seq(start(z), end(z), "day")) > zm <- merge(z, g) > ## - 3-day rolling mean > rollapply(zm, 3, mean, na.rm = TRUE, fill = NA) 2000-01-02 2000-01-03 2000-01-04 2000-01-05 2000-01-06 2000-01-07 2000-01-08 NA 1.5 2.0 3.0 3.5 4.0 5.0 2000-01-09 2000-01-10 2000-01-11 5.5 6.5 NA > > > ## different values of rule argument > z <- zoo(c(NA, NA, 2, 3, 4, 5, NA)) > rollapply(z, 3, sum, na.rm = TRUE) 2 3 4 5 6 2 5 9 12 9 > rollapply(z, 3, sum, na.rm = TRUE, fill = NULL) 2 3 4 5 6 2 5 9 12 9 > rollapply(z, 3, sum, na.rm = TRUE, fill = NA) 1 2 3 4 5 6 7 NA 2 5 9 12 9 NA > rollapply(z, 3, sum, na.rm = TRUE, partial = TRUE) 1 2 3 4 5 6 7 0 2 5 9 12 9 5 > > # this will exclude time points 1 and 2 > # It corresonds to align = "right", width = 3 > rollapply(zoo(1:8), list(seq(-2, 0)), sum) 3 4 5 6 7 8 6 9 12 15 18 21 > > # but this will include points 1 and 2 > rollapply(zoo(1:8), list(seq(-2, 0)), sum, partial = 1) 1 2 3 4 5 6 7 8 1 3 6 9 12 15 18 21 > rollapply(zoo(1:8), list(seq(-2, 0)), sum, partial = 0) 1 2 3 4 5 6 7 8 1 3 6 9 12 15 18 21 > > # so will this > rollapply(zoo(1:8), list(seq(-2, 0)), sum, fill = NA) 1 2 3 4 5 6 7 8 NA NA 6 9 12 15 18 21 > > # by = 3, align = "right" > L <- rep(list(NULL), 8) > L[seq(3, 8, 3)] <- list(seq(-2, 0)) > str(L) List of 8 $ : NULL $ : NULL $ : int [1:3] -2 -1 0 $ : NULL $ : NULL $ : int [1:3] -2 -1 0 $ : NULL $ : NULL > rollapply(zoo(1:8), L, sum) 3 6 6 15 > > rollapply(zoo(1:8), list(0:2), sum, fill = 1:3) 1 2 3 4 5 6 7 8 6 9 12 15 18 21 3 3 > rollapply(zoo(1:8), list(0:2), sum, fill = 3) 1 2 3 4 5 6 7 8 6 9 12 15 18 21 3 3 > > L2 <- rep(list(-(2:0)), 10) > L2[5] <- list(NULL) > str(L2) List of 10 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : NULL $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 $ : int [1:3] -2 -1 0 > rollapply(zoo(1:10), L2, sum, fill = "extend") 1 2 3 4 5 6 7 8 9 10 6 6 6 9 12 15 18 21 24 27 > rollapply(zoo(1:10), L2, sum, fill = list("extend", NULL)) 1 2 3 4 6 7 8 9 10 6 6 6 9 15 18 21 24 27 > > rollapply(zoo(1:10), L2, sum, fill = list("extend", NA)) 1 2 3 4 5 6 7 8 9 10 6 6 6 9 NA 15 18 21 24 27 > > rollapply(zoo(1:10), L2, sum, fill = NA) 1 2 3 4 5 6 7 8 9 10 NA NA 6 9 NA 15 18 21 24 27 > rollapply(zoo(1:10), L2, sum, fill = 1:3) 1 2 3 4 5 6 7 8 9 10 1 1 6 9 2 15 18 21 24 27 > rollapply(zoo(1:10), L2, sum, partial = TRUE) 1 2 3 4 6 7 8 9 10 1 3 6 9 15 18 21 24 27 > rollapply(zoo(1:10), L2, sum, partial = TRUE, fill = 99) 1 2 3 4 5 6 7 8 9 10 1 3 6 9 99 15 18 21 24 27 > > rollapply(zoo(1:10), list(-1), sum, partial = 0) 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 > rollapply(zoo(1:10), list(-1), sum, partial = TRUE) 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 > > rollapply(zoo(cbind(a = 1:6, b = 11:16)), 3, rowSums, by.column = FALSE) 2 12 14 16 3 14 16 18 4 16 18 20 5 18 20 22 > > # these two are the same > rollapply(zoo(cbind(a = 1:6, b = 11:16)), 3, sum) a b 2 6 36 3 9 39 4 12 42 5 15 45 > rollapply(zoo(cbind(a = 1:6, b = 11:16)), 3, colSums, by.column = FALSE) a b 2 6 36 3 9 39 4 12 42 5 15 45 > > # these two are the same > rollapply(zoo(1:6), 2, sum, by = 2, align = "right") 2 4 6 3 7 11 > aggregate(zoo(1:6), c(2, 2, 4, 4, 6, 6), sum) 2 4 6 3 7 11 > > # these two are the same > rollapply(zoo(1:3), list(-1), c) 2 3 1 2 > lag(zoo(1:3), -1) 2 3 1 2 > > # these two are the same > rollapply(zoo(1:3), list(1), c) 1 2 2 3 > lag(zoo(1:3)) 1 2 2 3 > > # these two are the same > rollapply(zoo(1:5), list(c(-1, 0, 1)), sum) 2 3 4 6 9 12 > rollapply(zoo(1:5), 3, sum) 2 3 4 6 9 12 > > # these two are the same > rollapply(zoo(1:5), list(0:2), sum) 1 2 3 6 9 12 > rollapply(zoo(1:5), 3, sum, align = "left") 1 2 3 6 9 12 > > # these two are the same > rollapply(zoo(1:5), list(-(2:0)), sum) 3 4 5 6 9 12 > rollapply(zoo(1:5), 3, sum, align = "right") 3 4 5 6 9 12 > > # these two are the same > rollapply(zoo(1:6), list(NULL, NULL, -(2:0)), sum) 3 6 6 15 > rollapply(zoo(1:6), 3, sum, by = 3, align = "right") 3 6 6 15 > > # these two are the same > rollapply(zoo(1:5), list(c(-1, 1)), sum) 2 3 4 4 6 8 > rollapply(zoo(1:5), 3, function(x) sum(x[-2])) 2 3 4 4 6 8 > > # these two are the same > rollapply(1:5, 3, rev) [,1] [,2] [,3] [1,] 3 2 1 [2,] 4 3 2 [3,] 5 4 3 > embed(1:5, 3) [,1] [,2] [,3] [1,] 3 2 1 [2,] 4 3 2 [3,] 5 4 3 > > # these four are the same > x <- 1:6 > rollapply(c(0, 0, x), 3, sum, align = "right") - x [1] 0 1 3 5 7 9 > rollapply(x, 3, sum, partial = TRUE, align = "right") - x [1] 0 1 3 5 7 9 > rollapply(x, 3, function(x) sum(x[-3]), partial = TRUE, align = "right") [1] 1 3 3 5 7 9 > rollapply(x, list(-(2:1)), sum, partial = 0) [1] 0 1 3 5 7 9 > > # same as Matlab's buffer(x, n, p) for valid non-negative p > # See http://www.mathworks.com/help/toolbox/signal/buffer.html > x <- 1:30; n <- 7; p <- 3 > t(rollapply(c(rep(0, p), x, rep(0, n-p)), n, by = n-p, c)) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 0 2 6 10 14 18 22 26 [2,] 0 3 7 11 15 19 23 27 [3,] 0 4 8 12 16 20 24 28 [4,] 1 5 9 13 17 21 25 29 [5,] 2 6 10 14 18 22 26 30 [6,] 3 7 11 15 19 23 27 0 [7,] 4 8 12 16 20 24 28 0 > > # these three are the same > y <- 10 * seq(8); k <- 4; d <- 2 > # 1 > # from http://ucfagls.wordpress.com/2011/06/14/embedding-a-time-series-with-time-delay-in-r-part-ii/ > Embed <- function(x, m, d = 1, indices = FALSE, as.embed = TRUE) { + n <- length(x) - (m-1)*d + X <- seq_along(x) + if(n <= 0) + stop("Insufficient observations for the requested embedding") + out <- matrix(rep(X[seq_len(n)], m), ncol = m) + out[,-1] <- out[,-1, drop = FALSE] + + rep(seq_len(m - 1) * d, each = nrow(out)) + if(as.embed) + out <- out[, rev(seq_len(ncol(out)))] + if(!indices) + out <- matrix(x[out], ncol = m) + out + } > Embed(y, k, d) [,1] [,2] [,3] [,4] [1,] 70 50 30 10 [2,] 80 60 40 20 > # 2 > rollapply(y, list(-d * seq(0, k-1)), c) [,1] [,2] [,3] [,4] [1,] 70 50 30 10 [2,] 80 60 40 20 > # 3 > rollapply(y, d*k-1, function(x) x[d * seq(k-1, 0) + 1]) [,1] [,2] [,3] [,4] [1,] 70 50 30 10 [2,] 80 60 40 20 > > > ## mimic convolve() using rollapplyr() > A <- 1:4 > B <- 5:8 > ## convolve(..., type = "open") > cross <- function(x) x > rollapplyr(c(A, 0*B[-1]), length(B), cross, partial = TRUE) Warning in rbind(1, c(1, 2), c(1, 2, 3), c(1, 2, 3, 4), c(2, 3, 4, 0), c(3, : number of columns of result is not a multiple of vector length (arg 3) [,1] [,2] [,3] [,4] [1,] 1 1 1 1 [2,] 1 2 1 2 [3,] 1 2 3 1 [4,] 1 2 3 4 [5,] 2 3 4 0 [6,] 3 4 0 0 [7,] 4 0 0 0 > convolve(A, B, type = "open") [1] 8 23 44 70 56 39 20 > > # convolve(..., type = "filter") > rollapplyr(A, length(B), cross) [,1] [,2] [,3] [,4] [1,] 1 2 3 4 > convolve(A, B, type = "filter") [1] 70 > > > > cleanEx() > nameEx("rollmean") > ### * rollmean > > flush(stderr()); flush(stdout()) > > ### Name: rollmean > ### Title: Rolling Means/Maximums/Medians/Sums > ### Aliases: rollmean rollmax rollmedian rollsum rollmeanr rollmaxr > ### rollmedianr rollsumr rollmean.zoo rollmax.zoo rollmedian.zoo > ### rollsum.zoo rollmean.ts rollmax.ts rollmedian.ts rollsum.ts > ### rollmean.default rollmax.default rollmedian.default rollsum.default > ### Keywords: ts > > ### ** Examples > > x.Date <- as.Date(paste(2004, rep(1:4, 4:1), sample(1:28, 10), sep = "-")) > x <- zoo(rnorm(12), x.Date) > > rollmean(x, 3) 2004-01-11 2004-01-15 2004-01-23 2004-02-05 2004-02-21 2004-02-25 2004-03-13 0.1350951 0.6005117 0.3362392 0.5940580 0.5320787 -0.1043585 -0.8153657 2004-03-14 -0.5703365 > rollmax(x, 3) 2004-01-11 2004-01-15 2004-01-23 2004-02-05 2004-02-21 2004-02-25 2004-03-13 0.7383247 0.7383247 0.7383247 1.5117812 1.5117812 1.5117812 0.3898432 2004-03-14 1.1249309 > rollmedian(x, 3) 2004-01-11 2004-01-15 2004-01-23 2004-02-05 2004-02-21 2004-02-25 2004-03-13 0.4874291 0.5757814 0.5757814 0.5757814 0.3898432 0.3898432 -0.6212406 2004-03-14 -0.6212406 > rollsum(x, 3) 2004-01-11 2004-01-15 2004-01-23 2004-02-05 2004-02-21 2004-02-25 2004-03-13 0.4052854 1.8015351 1.0087177 1.7821741 1.5962360 -0.3130755 -2.4460972 2004-03-14 -1.7110095 > > xm <- zoo(matrix(1:12, 4, 3), x.Date[1:4]) > rollmean(xm, 3) 2004-01-11 2 6 10 2004-01-15 3 7 11 > rollmax(xm, 3) 2004-01-11 3 7 11 2004-01-15 4 8 12 > rollmedian(xm, 3) 2004-01-11 2 6 10 2004-01-15 3 7 11 > rollsum(xm, 3) 2004-01-11 6 18 30 2004-01-15 9 21 33 > > rollapply(xm, 3, mean) # uses rollmean 2004-01-11 2 6 10 2004-01-15 3 7 11 > rollapply(xm, 3, function(x) mean(x)) # does not use rollmean 2004-01-11 2 6 10 2004-01-15 3 7 11 > > > > cleanEx() > nameEx("window.zoo") > ### * window.zoo > > flush(stderr()); flush(stdout()) > > ### Name: window.zoo > ### Title: Extract/Replacing the Time Windows of Objects > ### Aliases: window.zoo window<-.zoo > ### Keywords: ts > > ### ** Examples > > ## zoo example > x.date <- as.Date(paste(2003, rep(1:4, 4:1), seq(1,19,2), sep = "-")) > x <- zoo(matrix(rnorm(20), ncol = 2), x.date) > x 2003-01-01 -0.6264538 1.51178117 2003-01-03 0.1836433 0.38984324 2003-01-05 -0.8356286 -0.62124058 2003-01-07 1.5952808 -2.21469989 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 2003-02-13 0.4874291 -0.01619026 2003-03-15 0.7383247 0.94383621 2003-03-17 0.5757814 0.82122120 2003-04-19 -0.3053884 0.59390132 > > window(x, start = as.Date("2003-02-01"), end = as.Date("2003-03-01")) 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 2003-02-13 0.4874291 -0.01619026 > window(x, index = x.date[1:6], start = as.Date("2003-02-01")) 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 > window(x, index = x.date[c(4, 8, 10)]) 2003-01-07 1.5952808 -2.2146999 2003-03-15 0.7383247 0.9438362 2003-04-19 -0.3053884 0.5939013 > window(x, index = x.date[c(4, 8, 10)]) <- matrix(1:6, ncol = 2) > x 2003-01-01 -0.6264538 1.51178117 2003-01-03 0.1836433 0.38984324 2003-01-05 -0.8356286 -0.62124058 2003-01-07 1.0000000 4.00000000 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 2003-02-13 0.4874291 -0.01619026 2003-03-15 2.0000000 5.00000000 2003-03-17 0.5757814 0.82122120 2003-04-19 3.0000000 6.00000000 > > ## for classes that support comparisons with "character" variables > ## start and end may be "character". > window(x, start = "2003-02-01") 2003-02-09 0.3295078 1.12493092 2003-02-11 -0.8204684 -0.04493361 2003-02-13 0.4874291 -0.01619026 2003-03-15 2.0000000 5.00000000 2003-03-17 0.5757814 0.82122120 2003-04-19 3.0000000 6.00000000 > > ## zooreg example (with plain numeric index) > z <- zooreg(rnorm(10), start = 2000, freq = 4) > window(z, start = 2001.75) 2001 Q4 2002 Q1 2002 Q2 -1.4707524 -0.4781501 0.4179416 > window(z, start = c(2001, 4)) 2000 Q2 2000 Q4 2001 Q1 2001 Q2 2001 Q3 2001 Q4 0.78213630 -1.98935170 0.61982575 -0.05612874 -0.15579551 -1.47075238 2002 Q1 2002 Q2 -0.47815006 0.41794156 > > ## replace data at times of d0 which are in dn > d1 <- d0 <- zoo(1:10) + 100 > dn <- - head(d0, 4) > window(d1, time(dn)) <- coredata(dn) > > ## if the underlying time index is a float, note that the index may > ## print in the same way but actually be different (e.g., differing > ## by 0.1 second in this example) > zp <- zoo(1:4, as.POSIXct("2000-01-01 00:00:00") + c(-3600, 0, 0.1, 3600)) > ## and then the >= start and <= end may not select all intended > ## observations and adding/subtracting some "fuzz" may be needed > window(zp, end = "2000-01-01 00:00:00") 1999-12-31 23:00:00 2000-01-01 00:00:00 1 2 > window(zp, end = as.POSIXct("2000-01-01 00:00:00") + 0.5) 1999-12-31 23:00:00 2000-01-01 00:00:00 2000-01-01 00:00:00 1 2 3 > > > > cleanEx() > nameEx("xblocks") > ### * xblocks > > flush(stderr()); flush(stdout()) > > ### Name: xblocks > ### Title: Plot contiguous blocks along x axis. > ### Aliases: xblocks xblocks.default xblocks.zoo xblocks.ts > ### Keywords: dplot > > ### ** Examples > > ## example time series: > set.seed(0) > flow <- ts(filter(rlnorm(200, mean = 1), 0.8, method = "r")) > > ## highlight values above and below thresholds. > ## this draws on top using semi-transparent colors. > rgb <- hcl(c(0, 0, 260), c = c(100, 0, 100), l = c(50, 90, 50), alpha = 0.3) > plot(flow) > xblocks(flow > 30, col = rgb[1]) ## high values red > xblocks(flow < 15, col = rgb[3]) ## low value blue > xblocks(flow >= 15 & flow <= 30, col = rgb[2]) ## the rest gray > > ## same thing: > plot(flow) > xblocks(time(flow), cut(flow, c(0,15,30,Inf), labels = rev(rgb))) > > ## another approach is to plot blocks underneath without transparency. > plot(flow) > ## note that 'ifelse' keeps its result as class 'ts' > xblocks(ifelse(flow < mean(flow), hcl(0, 0, 90), hcl(0, 80, 70))) > ## need to redraw data series on top: > lines(flow) > box() > > ## for single series only: plot.default has a panel.first argument > plot(time(flow), flow, type = "l", + panel.first = xblocks(flow > 20, col = "lightgray")) > ## (see also the 'panel' argument for use with multiple series, below) > > ## insert some missing values > flow[c(1:10, 50:80, 100)] <- NA > > ## the default plot shows data coverage > ## (most useful when displaying multiple series, see below) > plot(flow) > xblocks(flow) > > ## can also show gaps: > plot(flow, type = "s") > xblocks(time(flow), is.na(flow), col = "gray") > > ## Example of alternating colors, here showing calendar months > flowdates <- as.Date("2000-01-01") + as.numeric(time(flow)) > flowz <- zoo(coredata(flow), flowdates) > plot(flowz) > xblocks(flowz, months, ## i.e. months(time(flowz)), + col = gray.colors(2, start = 0.7), border = "slategray") > lines(flowz) > > ## Example of multiple series. > ## set up example data > z <- ts(cbind(A = 0:5, B = c(6:7, NA, NA, 10:11), C = c(NA, 13:17))) > > ## show data coverage only (highlighting gaps) > plot(z, panel = function(x, ...) + xblocks(x, col = "darkgray")) > > ## draw gaps in darkgray > plot(z, type = "s", panel = function(x, ...) { + xblocks(time(x), is.na(x), col = "darkgray") + lines(x, ...); points(x) + }) > > ## Example of overlaying blocks from a different series. > ## Are US presidential approval ratings linked to sunspot activity? > ## Set block height to plot blocks along the bottom. > plot(presidents) > xblocks(sunspot.year > 50, height = 2) > > > > cleanEx() > nameEx("xyplot.zoo") > ### * xyplot.zoo > > flush(stderr()); flush(stdout()) > > ### Name: xyplot.zoo > ### Title: Plot zoo Series with Lattice > ### Aliases: xyplot.zoo xyplot.its xyplot.tis llines.zoo llines.its > ### llines.tis lpoints.zoo lpoints.its lpoints.tis ltext.zoo ltext.its > ### ltext.tis panel.lines.zoo panel.lines.ts panel.lines.its > ### panel.lines.tis panel.points.zoo panel.points.ts panel.points.its > ### panel.points.tis panel.text.zoo panel.text.ts panel.text.its > ### panel.text.tis panel.plot.default panel.plot.custom > ### panel.segments.zoo panel.segments.ts panel.segments.its > ### panel.segments.tis panel.rect.zoo panel.rect.ts panel.rect.its > ### panel.rect.tis panel.polygon.zoo panel.polygon.ts panel.polygon.its > ### panel.polygon.tis > ### Keywords: hplot ts > > ### ** Examples > > if(require("lattice") & require("grid")) { + + set.seed(1) + z <- zoo(cbind(a = 1:5, b = 11:15, c = 21:25) + rnorm(5)) + + # plot z using same Y axis on all plots + xyplot(z, scales = list(y = list(relation = "same", alternating = FALSE))) + + # plot a double-line-width running mean on the panel of b. + # Also add a grid. + # We show two ways to do it. + + # change strip background to levels of grey + # If you like the defaults, this can be omitted. + strip.background <- trellis.par.get("strip.background") + trellis.par.set(strip.background = list(col = grey(7:1/8))) + + + # Number 1. Using trellis.focus. + print( xyplot(z) ) + trellis.focus("panel", 1, 2, highlight = FALSE) + # (or just trellis.focus() for interactive use) + z.mean <- rollmean(z, 3) + panel.lines(z.mean[,2], lwd = 2) + panel.grid(h = 10, v = 10, col = "grey", lty = 3) + trellis.unfocus() + + # Number 2. Using a custom panel routine. + xyplot(z, panel = function(x, y, ...) { + if (packet.number() == 2) { + panel.grid(h = 10, v = 10, col = "grey", lty = 3) + panel.lines(rollmean(zoo(y, x), 3), lwd = 2) + } + panel.xyplot(x, y, ...) + }) + + # plot a light grey rectangle "behind" panel b + trellis.focus("panel", 1, 2) + grid.rect(x = 2, w = 1, default.units = "native", + gp = gpar(fill = "light grey")) + # do.call("panel.xyplot", trellis.panelArgs()) + do.call("panel.lines", trellis.panelArgs()[1:2]) + trellis.unfocus() + # a better method is to use a custom panel function. + # see also panel.xblocks() and layer() in the latticeExtra package. + + # same but make first panel twice as large as others + lopt <- list(layout.heights = list(panel = list(x = c(2,1,1)))) + xyplot(z, lattice.options = lopt) + # add a grid + update(trellis.last.object(), type = c("l", "g")) + + # Plot all in one panel. + xyplot(z, screens = 1) + # Same with default styles and auto.key: + xyplot(z, superpose = TRUE) + + # Plot first two columns in first panel and third column in second panel. + # Plot first series using points, second series using lines and third + # series via overprinting both lines and points + # Use colors 1, 2 and 3 for the three series (1=black, 2=red, 3=green) + # Make 2nd (lower) panel 3x the height of the 1st (upper) panel + # Also make the strip background orange. + p <- xyplot(z, screens = c(1,1,2), type = c("p", "l", "o"), col = 1:3, + par.settings = list(strip.background = list(col = "orange"))) + print(p, panel.height = list(y = c(1, 3), units = "null")) + + # Example of using a custom axis + # Months are labelled with smaller ticks for weeks and even smaller + # ticks for days. + Days <- seq(from = as.Date("2006-1-1"), to = as.Date("2006-8-8"), by = "day") + z1 <- zoo(seq(length(Days))^2, Days) + Months <- Days[format(Days, "%d") == "01"] + Weeks <- Days[format(Days, "%w") == "0"] + print( xyplot(z1, scales = list(x = list(at = Months))) ) + trellis.focus("panel", 1, 1, clip.off = TRUE) + panel.axis("bottom", check.overlap = TRUE, outside = TRUE, labels = FALSE, + tck = .7, at = as.numeric(Weeks)) + panel.axis("bottom", check.overlap = TRUE, outside = TRUE, labels = FALSE, + tck = .4, at = as.numeric(Days)) + trellis.unfocus() + + trellis.par.set(strip.background = strip.background) + + # separate the panels and suppress the ticks on very top + xyplot(z, between = list(y = 1), scales = list(tck = c(1,0))) + + # left strips but no top strips + xyplot(z, screens = colnames(z), strip = FALSE, strip.left = TRUE) + + # plot list of zoo objects using different x scales + z.l <- list( + zoo(cbind(a = rnorm(10), b = rnorm(10)), as.Date("2006-01-01") + 0:9), + zoo(cbind(c = rnorm(10), d = rnorm(10)), as.Date("2006-12-01") + 0:9) + ) + zm <- do.call(merge, z.l) + xlim <- lapply(zm, function(x) range(time(na.omit(x)))) + xyplot(zm, xlim = xlim, scale = list(relation = "free")) + # to avoid merging see xyplot.list() in the latticeExtra package. + + } Loading required package: lattice Loading required package: grid > > ## Not run: > ##D ## playwith (>= 0.9) > ##D library("playwith") > ##D > ##D z3 <- zoo(cbind(a = rnorm(100), b = rnorm(100) + 1), as.Date(1:100)) > ##D playwith(xyplot(z3), time.mode = TRUE) > ##D # hold down Shift key and drag to zoom in to a time period. > ##D # then use the horizontal scroll bar. > ##D > ##D # set custom labels; right click on points to view or add labels > ##D labs <- paste(round(z3,1), index(z3), sep = "@") > ##D trellis.par.set(user.text = list(cex = 0.7)) > ##D playwith(xyplot(z3, type = "o"), labels = labs) > ##D > ##D # this returns indexes into times of clicked points > ##D ids <- playGetIDs() > ##D z3[ids,] > ##D > ##D ## another example of using playwith with zoo > ##D # set up data > ##D dat <- zoo(matrix(rnorm(100*100),ncol=100), Sys.Date()+1:100) > ##D colnames(dat) <- paste("Series", 1:100) > ##D > ##D # This will give you a spin button to choose the column to plot, > ##D # and a button to print out the current series number. > ##D playwith(xyplot(dat[,c(1,i)]), parameters = list(i = 1:100, > ##D do_something = function(playState) print(playState$env$i)) > ##D > ## End(Not run) > > > > > cleanEx() detaching ‘package:grid’, ‘package:lattice’ > nameEx("yearmon") > ### * yearmon > > flush(stderr()); flush(stdout()) > > ### Name: yearmon > ### Title: An Index Class for Monthly Data > ### Aliases: yearmon as.yearmon as.yearmon.default as.yearmon.numeric > ### as.yearmon.integer as.yearmon.date as.yearmon.dates as.yearmon.Date > ### as.yearmon.timeDate as.yearmon.jul as.yearmon.POSIXt > ### as.yearmon.character as.yearmon.date as.yearmon.factor as.Date > ### as.Date.numeric as.Date.ts as.Date.yearmon as.POSIXct.yearmon > ### as.POSIXlt.yearmon as.list.yearmon as.numeric.yearmon > ### as.character.yearmon as.data.frame.yearmon c.yearmon cycle.yearmon > ### format.yearmon is.numeric.yearmon mean.yearmon print.yearmon > ### range.yearmon summary.yearmon unique.yearmon [.yearmon [[.yearmon > ### MATCH.yearmon Ops.yearmon Summary.yearmon Sys.yearmon -.yearmon > ### xtfrm.yearmon > ### Keywords: ts > > ### ** Examples > > x <- as.yearmon(2000 + seq(0, 23)/12) > x [1] "Jan 2000" "Feb 2000" "Mar 2000" "Apr 2000" "May 2000" "Jun 2000" [7] "Jul 2000" "Aug 2000" "Sep 2000" "Oct 2000" "Nov 2000" "Dec 2000" [13] "Jan 2001" "Feb 2001" "Mar 2001" "Apr 2001" "May 2001" "Jun 2001" [19] "Jul 2001" "Aug 2001" "Sep 2001" "Oct 2001" "Nov 2001" "Dec 2001" > > as.yearmon("mar07", "%b%y") [1] "Mar 2007" > as.yearmon("2007-03-01") [1] "Mar 2007" > as.yearmon("2007-12") [1] "Dec 2007" > > # returned Date is the fraction of the way through > # the period given by frac (= 0 by default) > as.Date(x) [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" [6] "2000-06-01" "2000-07-01" "2000-08-01" "2000-09-01" "2000-10-01" [11] "2000-11-01" "2000-12-01" "2001-01-01" "2001-02-01" "2001-03-01" [16] "2001-04-01" "2001-05-01" "2001-06-01" "2001-07-01" "2001-08-01" [21] "2001-09-01" "2001-10-01" "2001-11-01" "2001-12-01" > as.Date(x, frac = 1) [1] "2000-01-31" "2000-02-29" "2000-03-31" "2000-04-30" "2000-05-31" [6] "2000-06-30" "2000-07-31" "2000-08-31" "2000-09-30" "2000-10-31" [11] "2000-11-30" "2000-12-31" "2001-01-31" "2001-02-28" "2001-03-31" [16] "2001-04-30" "2001-05-31" "2001-06-30" "2001-07-31" "2001-08-31" [21] "2001-09-30" "2001-10-31" "2001-11-30" "2001-12-31" > as.POSIXct(x) [1] "2000-01-01 01:00:00 CET" "2000-02-01 01:00:00 CET" [3] "2000-03-01 01:00:00 CET" "2000-04-01 02:00:00 CEST" [5] "2000-05-01 02:00:00 CEST" "2000-06-01 02:00:00 CEST" [7] "2000-07-01 02:00:00 CEST" "2000-08-01 02:00:00 CEST" [9] "2000-09-01 02:00:00 CEST" "2000-10-01 02:00:00 CEST" [11] "2000-11-01 01:00:00 CET" "2000-12-01 01:00:00 CET" [13] "2001-01-01 01:00:00 CET" "2001-02-01 01:00:00 CET" [15] "2001-03-01 01:00:00 CET" "2001-04-01 02:00:00 CEST" [17] "2001-05-01 02:00:00 CEST" "2001-06-01 02:00:00 CEST" [19] "2001-07-01 02:00:00 CEST" "2001-08-01 02:00:00 CEST" [21] "2001-09-01 02:00:00 CEST" "2001-10-01 02:00:00 CEST" [23] "2001-11-01 01:00:00 CET" "2001-12-01 01:00:00 CET" > > # given a Date, x, return the Date of the next Friday > nextfri <- function(x) 7 * ceiling(as.numeric(x - 1)/7) + as.Date(1) > > # given a Date, d, return the same Date in the following month > # Note that as.Date.yearmon gives first Date of the month. > d <- as.Date("2005-1-1") + seq(0,90,30) > next.month <- function(d) as.Date(as.yearmon(d) + 1/12) + + as.numeric(d - as.Date(as.yearmon(d))) > next.month(d) [1] "2005-02-01" "2005-03-03" "2005-04-02" "2005-05-01" > > # 3rd Friday in last month of the quarter of Date x > as.Date(as.yearmon(as.yearqtr(x)) + 2/12) + 14 [1] "2000-03-15" "2000-03-15" "2000-03-15" "2000-06-15" "2000-06-15" [6] "2000-06-15" "2000-09-15" "2000-09-15" "2000-09-15" "2000-12-15" [11] "2000-12-15" "2000-12-15" "2001-03-15" "2001-03-15" "2001-03-15" [16] "2001-06-15" "2001-06-15" "2001-06-15" "2001-09-15" "2001-09-15" [21] "2001-09-15" "2001-12-15" "2001-12-15" "2001-12-15" > > z <- zoo(rnorm(24), x, frequency = 12) > z Jan 2000 Feb 2000 Mar 2000 Apr 2000 May 2000 Jun 2000 -0.62645381 0.18364332 -0.83562861 1.59528080 0.32950777 -0.82046838 Jul 2000 Aug 2000 Sep 2000 Oct 2000 Nov 2000 Dec 2000 0.48742905 0.73832471 0.57578135 -0.30538839 1.51178117 0.38984324 Jan 2001 Feb 2001 Mar 2001 Apr 2001 May 2001 Jun 2001 -0.62124058 -2.21469989 1.12493092 -0.04493361 -0.01619026 0.94383621 Jul 2001 Aug 2001 Sep 2001 Oct 2001 Nov 2001 Dec 2001 0.82122120 0.59390132 0.91897737 0.78213630 0.07456498 -1.98935170 > as.ts(z) Jan Feb Mar Apr May Jun 2000 -0.62645381 0.18364332 -0.83562861 1.59528080 0.32950777 -0.82046838 2001 -0.62124058 -2.21469989 1.12493092 -0.04493361 -0.01619026 0.94383621 Jul Aug Sep Oct Nov Dec 2000 0.48742905 0.73832471 0.57578135 -0.30538839 1.51178117 0.38984324 2001 0.82122120 0.59390132 0.91897737 0.78213630 0.07456498 -1.98935170 > > ## convert data fram to multivariate monthly "ts" series > ## 1.read raw data > Lines.raw <- "ID Date Count + 123 20 May 1999 1 + 123 21 May 1999 3 + 222 1 Feb 2000 2 + 222 3 Feb 2000 4 + " > DF <- read.table(textConnection(Lines.raw), skip = 1, + col.names = c("ID", "d", "b", "Y", "Count")) > ## 2. fix raw date > DF$yearmon <- as.yearmon(paste(DF$b, DF$Y), "%b %Y") > ## 3. aggregate counts over months, convert to zoo and merge over IDs > ag <- function(DF) aggregate(zoo(DF$Count), DF$yearmon, sum) > z <- do.call("merge.zoo", lapply(split(DF, DF$ID), ag)) > ## 4. convert to "zooreg" and then to "ts" > frequency(z) <- 12 > as.ts(z) 123 222 May 1999 4 NA Jun 1999 NA NA Jul 1999 NA NA Aug 1999 NA NA Sep 1999 NA NA Oct 1999 NA NA Nov 1999 NA NA Dec 1999 NA NA Jan 2000 NA NA Feb 2000 NA 6 > > xx <- zoo(seq_along(x), x) > > ## aggregating over year > as.year <- function(x) as.numeric(floor(as.yearmon(x))) > aggregate(xx, as.year, mean) 2000 2001 6.5 18.5 > > > > > cleanEx() > nameEx("yearqtr") > ### * yearqtr > > flush(stderr()); flush(stdout()) > > ### Name: yearqtr > ### Title: An Index Class for Quarterly Data > ### Aliases: yearqtr as.yearqtr as.yearqtr.default as.yearqtr.numeric > ### as.yearqtr.integer as.yearqtr.date as.yearqtr.dates as.yearqtr.Date > ### as.yearqtr.timeDate as.yearqtr.jul as.yearqtr.POSIXt > ### as.yearqtr.character as.yearqtr.factor as.yearqtr.yearqtr > ### as.Date.yearqtr as.POSIXct.yearqtr as.POSIXlt.yearqtr as.list.yearqtr > ### as.numeric.yearqtr as.character.yearqtr as.data.frame.yearqtr > ### c.yearqtr cycle.yearqtr format.yearqtr is.numeric.yearqtr > ### mean.yearqtr print.yearqtr range.yearqtr summary.yearqtr > ### unique.yearqtr [.yearqtr [[.yearqtr MATCH.yearqtr Ops.yearqtr > ### Summary.yearqtr Sys.yearqtr -.yearqtr xtfrm.yearqtr > ### Keywords: ts > > ### ** Examples > > x <- as.yearqtr(2000 + seq(0, 7)/4) > x [1] "2000 Q1" "2000 Q2" "2000 Q3" "2000 Q4" "2001 Q1" "2001 Q2" "2001 Q3" [8] "2001 Q4" > > format(x, "%Y Quarter %q") [1] "2000 Quarter 1" "2000 Quarter 2" "2000 Quarter 3" "2000 Quarter 4" [5] "2001 Quarter 1" "2001 Quarter 2" "2001 Quarter 3" "2001 Quarter 4" > as.yearqtr("2001 Q2") [1] "2001 Q2" > as.yearqtr("2001 q2") # same [1] "2001 Q2" > as.yearqtr("2001-2") # same [1] "2001 Q2" > > # returned Date is the fraction of the way through > # the period given by frac (= 0 by default) > dd <- as.Date(x) > format.yearqtr(dd) [1] "2000 Q1" "2000 Q2" "2000 Q3" "2000 Q4" "2001 Q1" "2001 Q2" "2001 Q3" [8] "2001 Q4" > as.Date(x, frac = 1) [1] "2000-03-31" "2000-06-30" "2000-09-30" "2000-12-31" "2001-03-31" [6] "2001-06-30" "2001-09-30" "2001-12-31" > as.POSIXct(x) [1] "2000-01-01 01:00:00 CET" "2000-04-01 02:00:00 CEST" [3] "2000-07-01 02:00:00 CEST" "2000-10-01 02:00:00 CEST" [5] "2001-01-01 01:00:00 CET" "2001-04-01 02:00:00 CEST" [7] "2001-07-01 02:00:00 CEST" "2001-10-01 02:00:00 CEST" > > zz <- zoo(rnorm(8), x, frequency = 4) > zz 2000 Q1 2000 Q2 2000 Q3 2000 Q4 2001 Q1 2001 Q2 2001 Q3 -0.6264538 0.1836433 -0.8356286 1.5952808 0.3295078 -0.8204684 0.4874291 2001 Q4 0.7383247 > as.ts(zz) Qtr1 Qtr2 Qtr3 Qtr4 2000 -0.6264538 0.1836433 -0.8356286 1.5952808 2001 0.3295078 -0.8204684 0.4874291 0.7383247 > > > > > cleanEx() > nameEx("zoo") > ### * zoo > > flush(stderr()); flush(stdout()) > > ### Name: zoo > ### Title: Z's Ordered Observations > ### Aliases: zoo with.zoo range.zoo print.zoo as.zoo.factor summary.zoo > ### str.zoo is.zoo [.zoo [<-.zoo $.zoo $<-.zoo subset.zoo head.zoo > ### tail.zoo Ops.zoo t.zoo cumsum.zoo cumprod.zoo cummin.zoo cummax.zoo > ### mean.zoo median.zoo na.contiguous na.contiguous.data.frame > ### na.contiguous.list na.contiguous.default na.contiguous.zoo scale.zoo > ### xtfrm.zoo names.zoo names<-.zoo quantile.zoo rev.zoo transform.zoo > ### ifelse.zoo dim<-.zoo index2char index2char.default index2char.numeric > ### head.ts tail.ts > ### Keywords: ts > > ### ** Examples > > ## simple creation and plotting > x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1 > x <- zoo(rnorm(5), x.Date) > plot(x) > time(x) [1] "2003-02-01" "2003-02-03" "2003-02-07" "2003-02-09" "2003-02-14" > > ## subsetting with numeric indexes > x[c(2, 4)] 2003-02-03 2003-02-09 0.1836433 1.5952808 > ## subsetting with index class > x[as.Date("2003-02-01") + c(2, 8)] 2003-02-03 2003-02-09 0.1836433 1.5952808 > > ## different classes of indexes/times can be used, e.g. numeric vector > x <- zoo(rnorm(5), c(1, 3, 7, 9, 14)) > ## subsetting with numeric indexes then uses observation numbers > x[c(2, 4)] 3 9 0.4874291 0.5757814 > ## subsetting with index class can be enforced by I() > x[I(c(3, 9))] 3 9 0.4874291 0.5757814 > > ## visualization > plot(x) > ## or POSIXct > y.POSIXct <- ISOdatetime(2003, 02, c(1, 3, 7, 9, 14), 0, 0, 0) > y <- zoo(rnorm(5), y.POSIXct) > plot(y) > > ## create a constant series > z <- zoo(1, seq(4)[-2]) > > ## create a 0-dimensional zoo series > z0 <- zoo(, 1:4) > > ## create a 2-dimensional zoo series > z2 <- zoo(matrix(1:12, 4, 3), as.Date("2003-01-01") + 0:3) > > ## create a factor zoo object > fz <- zoo(gl(2,5), as.Date("2004-01-01") + 0:9) > > ## create a zoo series with 0 columns > z20 <- zoo(matrix(nrow = 4, ncol = 0), 1:4) > > ## arithmetic on zoo objects intersects them first > x1 <- zoo(1:5, 1:5) > x2 <- zoo(2:6, 2:6) > 10 * x1 + x2 2 3 4 5 22 33 44 55 > > ## $ extractor for multivariate zoo series with column names > z <- zoo(cbind(foo = rnorm(5), bar = rnorm(5))) > z$foo 1 2 3 4 5 -0.04493361 -0.01619026 0.94383621 0.82122120 0.59390132 > z$xyz <- zoo(rnorm(3), 2:4) > z foo bar xyz 1 -0.04493361 0.91897737 NA 2 -0.01619026 0.78213630 -0.05612874 3 0.94383621 0.07456498 -0.15579551 4 0.82122120 -1.98935170 -1.47075238 5 0.59390132 0.61982575 NA > > ## add comments to a zoo object > comment(x1) <- c("This is a very simple example of a zoo object.", + "It can be recreated using this R code: example(zoo)") > ## comments are not output by default but are still there > x1 1 2 3 4 5 1 2 3 4 5 > comment(x1) [1] "This is a very simple example of a zoo object." [2] "It can be recreated using this R code: example(zoo)" > > # ifelse does not work with zoo but this works > # to create a zoo object which equals x1 at > # time i if x1[i] > x1[i-1] and 0 otherwise > (diff(x1) > 0) * x1 2 3 4 5 2 3 4 5 > > ## zoo series with duplicated indexes > z3 <- zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5)) Warning in zoo(1:8, c(1, 2, 2, 2, 3, 4, 5, 5)) : some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique > plot(z3) > ## remove duplicated indexes by averaging > lines(aggregate(z3, index(z3), mean), col = 2) > ## or by using the last observation > lines(aggregate(z3, index(z3), tail, 1), col = 4) > > ## x1[x1 > 3] is not officially supported since > ## x1 > 3 is of class "zoo", not "logical". > ## Use one of these instead: > x1[which(x1 > 3)] 4 5 4 5 > x1[coredata(x1 > 3)] 4 5 4 5 > x1[as.logical(x1 > 3)] 4 5 4 5 > subset(x1, x1 > 3) 4 5 4 5 > > ## any class supporting the methods discussed can be used > ## as an index class. Here are examples using complex numbers > ## and letters as the time class. > > z4 <- zoo(11:15, complex(real = c(1, 3, 4, 5, 6), imag = c(0, 1, 0, 0, 1))) > merge(z4, lag(z4)) z4 lag(z4) 1+0i 11 12 3+1i 12 13 4+0i 13 14 5+0i 14 15 6+1i 15 NA > > z5 <- zoo(11:15, letters[1:5]) > merge(z5, lag(z5)) z5 lag(z5) a 11 12 b 12 13 c 13 14 d 14 15 e 15 NA > > # index values relative to 2001Q1 > zz <- zooreg(cbind(a = 1:10, b = 11:20), start = as.yearqtr(2000), freq = 4) > zz[] <- mapply("/", as.data.frame(zz), coredata(zz[as.yearqtr("2001Q1")])) > > > ## even though time index must be unique zoo (and read.zoo) > ## will both allow creation of such illegal objects with > ## a warning (rather than ana error) to give the user a > ## chance to fix them up. Extracting and replacing times > ## and aggregate.zoo will still work. > ## Not run: > ##D # this gives a warning > ##D # and then creates an illegal zoo object > ##D z6 <- zoo(11:15, c(1, 1, 2, 2, 5)) > ##D z6 > ##D > ##D # fix it up by averaging duplicates > ##D aggregate(z6, identity, mean) > ##D > ##D # or, fix it up by taking last in each set of duplicates > ##D aggregate(z6, identity, tail, 1) > ##D > ##D # fix it up via interpolation of duplicate times > ##D time(z6) <- na.approx(ifelse(duplicated(time(z6)), NA, time(z6)), na.rm = FALSE) > ##D # if there is a run of equal times at end they > ##D # wind up as NAs and we cannot have NA times > ##D z6 <- z6[!is.na(time(z6))] > ##D z6 > ##D > ##D x1. <- x1 <- zoo (matrix (1:12, nrow = 3), as.Date("2008-08-01") + 0:2) > ##D colnames (x1) <- c ("A", "B", "C", "D") > ##D x2 <- zoo (matrix (1:12, nrow = 3), as.Date("2008-08-01") + 1:3) > ##D colnames (x2) <- c ("B", "C", "D", "E") > ##D > ##D both.dates = as.Date (intersect (index (t1), index (t2))) > ##D both.cols = intersect (colnames (t1), colnames (t2)) > ##D > ##D x1[both.dates, both.cols] > ##D ## there is "[.zoo" but no "[<-.zoo" however four of the following > ##D ## five examples work > ##D > ##D ## wrong > ##D ## x1[both.dates, both.cols] <- x2[both.dates, both.cols] > ##D > ##D # 4 correct alternatives > ##D # #1 > ##D window(x1, both.dates)[, both.cols] <- x2[both.dates, both.cols] > ##D > ##D # #2. restore x1 and show a different way > ##D x1 <- x1. > ##D window(x1, both.dates)[, both.cols] <- window(x2, both.dates)[, both.cols] > ##D > ##D # #3. restore x1 and show a different way > ##D x1 <- x1. > ##D x1[time(x1) ##D > ##D > ##D # #4. restore x1 and show a different way > ##D x1 <- x1. > ##D x1[time(x1) ##D > ##D > ## End(Not run) > > > > > cleanEx() > nameEx("zooreg") > ### * zooreg > > flush(stderr()); flush(stdout()) > > ### Name: zooreg > ### Title: Regular zoo Series > ### Aliases: zooreg frequency.zooreg frequency.zoo deltat.zooreg deltat.zoo > ### cycle.zooreg cycle.zoo as.zooreg as.zooreg.default as.zooreg.ts > ### as.zooreg.its as.zooreg.xts as.ts.zooreg as.zoo.zooreg as.zooreg.zoo > ### index<-.zooreg time<-.zooreg lag.zooreg > ### Keywords: ts > > ### ** Examples > > ## equivalent specifications of a quarterly series > ## starting in the second quarter of 1959. > zooreg(1:10, frequency = 4, start = c(1959, 2)) 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 1 2 3 4 5 6 7 8 9 10 > as.zoo(ts(1:10, frequency = 4, start = c(1959, 2))) 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 1 2 3 4 5 6 7 8 9 10 > zoo(1:10, seq(1959.25, 1961.5, by = 0.25), frequency = 4) 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 1 2 3 4 5 6 7 8 9 10 > > ## use yearqtr class for indexing the same series > z <- zoo(1:10, yearqtr(seq(1959.25, 1961.5, by = 0.25)), frequency = 4) > z 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 1 2 3 4 5 6 7 8 9 10 > z[-(3:4)] 1959 Q2 1959 Q3 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 1 2 5 6 7 8 9 10 > > ## create a regular series with a "Date" index > zooreg(1:5, start = as.Date("2000-01-01")) 2000-01-01 2000-01-02 2000-01-03 2000-01-04 2000-01-05 1 2 3 4 5 > ## or with "yearmon" index > zooreg(1:5, end = yearmon(2000)) Jan 1996 Jan 1997 Jan 1998 Jan 1999 Jan 2000 1 2 3 4 5 > > ## lag and diff (as diff is defined in terms of lag) > ## act differently on zoo and zooreg objects! > ## lag.zoo moves a point to the adjacent time whereas > ## lag.zooreg moves a point by deltat > x <- c(1, 2, 3, 6) > zz <- zoo(x, x) > zr <- as.zooreg(zz) > lag(zz, k = -1) 2 3 6 1 2 3 > lag(zr, k = -1) 2 3 4 7 1 2 3 6 > diff(zz) 2 3 6 1 1 3 > diff(zr) 2 3 1 1 > > ## lag.zooreg wihtout and with na.pad > lag(zr, k = -1) 2 3 4 7 1 2 3 6 > lag(zr, k = -1, na.pad = TRUE) 1 2 3 4 6 7 NA 1 2 3 NA 6 > > ## standard methods available for regular series > frequency(z) [1] 4 > deltat(z) [1] 0.25 > cycle(z) 1959 Q2 1959 Q3 1959 Q4 1960 Q1 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 2 3 4 1 2 3 4 1 2 3 > cycle(z[-(3:4)]) 1959 Q2 1959 Q3 1960 Q2 1960 Q3 1960 Q4 1961 Q1 1961 Q2 1961 Q3 2 3 2 3 4 1 2 3 > > zz <- zoo(1:6, as.Date(c("1960-01-29", "1960-02-29", "1960-03-31", + "1960-04-29", "1960-05-31", "1960-06-30"))) > # this converts zz to "zooreg" and then to "ts" expanding it to a daily > # series which is 154 elements long, most with NAs. > ## Not run: > ##D length(as.ts(zz)) # 154 > ## End(Not run) > # probably a monthly "ts" series rather than a daily one was wanted. > # This variation of the last line gives a result only 6 elements long. > length(as.ts(aggregate(zz, as.yearmon, c))) # 6 [1] 6 > > zzr <- as.zooreg(zz) > > dd <- as.Date(c("2000-01-01", "2000-02-01", "2000-03-01", "2000-04-01")) > zrd <- as.zooreg(zoo(1:4, dd)) > > > > > ### *