party/0000755000176200001440000000000013437717323011423 5ustar liggesusersparty/inst/0000755000176200001440000000000013437524315012375 5ustar liggesusersparty/inst/CITATION0000644000176200001440000000756511674356046013554 0ustar liggesuserscitHeader("To cite party in publications use:") citEntry(entry="Article", title = "Unbiased Recursive Partitioning: A Conditional Inference Framework", author = personList(as.person("Torsten Hothorn"), as.person("Kurt Hornik"), as.person("Achim Zeileis")), journal = "Journal of Computational and Graphical Statistics", year = "2006", volume = "15", number = "3", pages = "651--674", textVersion = paste("Torsten Hothorn, Kurt Hornik and Achim Zeileis (2006).", "Unbiased Recursive Partitioning: A Conditional Inference Framework.", "Journal of Computational and Graphical Statistics, 15(3), 651--674."), header = "If ctree() is used cite:" ) citEntry(entry="Article", title = "Model-Based Recursive Partitioning", author = personList(as.person("Achim Zeileis"), as.person("Torsten Hothorn"), as.person("Kurt Hornik")), journal = "Journal of Computational and Graphical Statistics", year = "2008", volume = "17", number = "2", pages = "492--514", textVersion = paste("Achim Zeileis, Torsten Hothorn and Kurt Hornik (2008).", "Model-Based Recursive Partitioning.", "Journal of Computational and Graphical Statistics, 17(2), 492--514."), header = "If mob() is used cite:" ) citEntry(entry="Article", title = "Survival Ensembles", author = personList(as.person("Torsten Hothorn"), as.person("Peter Buehlmann"), as.person("Sandrine Dudoit"), as.person("Annette Molinaro"), as.person("Mark Van Der Laan")), journal = "Biostatistics", year = "2006", volume = "7", number = "3", pages = "355--373", textVersion = paste("Torsten Hothorn, Peter Buehlmann, Sandrine Dudoit, Annette Molinaro and Mark Van Der Laan (2006).", "Survival Ensembles.", "Biostatistics, 7(3), 355--373."), header = "If cforest() is used cite:" ) citEntry(entry="Article", title = "Bias in Random Forest Variable Importance Measures: Illustrations, Sources and a Solution", author = personList(as.person("Carolin Strobl"), as.person("Anne-Laure Boulesteix"), as.person("Achim Zeileis"), as.person("Torsten Hothorn")), journal = "BMC Bioinformatics", year = "2007", volume = "8", number = "25", url = "http://www.biomedcentral.com/1471-2105/8/25", textVersion = paste("Carolin Strobl, Anne-Laure Boulesteix, Achim Zeileis and Torsten Hothorn (2007).", "Bias in Random Forest Variable Importance Measures: Illustrations, Sources and a Solution.", "BMC Bioinformatics, 8(25). URL http://www.biomedcentral.com/1471-2105/8/25."), ) citEntry(entry="Article", title = "Conditional Variable Importance for Random Forests", author = personList(as.person("Carolin Strobl"), as.person("Anne-Laure Boulesteix"), as.person("Thomas Kneib"), as.person("Thomas Augustin"), as.person("Achim Zeileis")), journal = "BMC Bioinformatics", year = "2008", volume = "9", number = "307", url = "http://www.biomedcentral.com/1471-2105/9/307", textVersion = paste("Carolin Strobl, Anne-Laure Boulesteix, Thomas Kneib, Thomas Augustin and Achim Zeileis (2008).", "Conditional Variable Importance for Random Forests.", "BMC Bioinformatics, 9(307). URL http://www.biomedcentral.com/1471-2105/9/307."), ) party/inst/NEWS0000644000176200001440000005605113437174207013104 0ustar liggesusers CHANGES IN party VERSION 1.3-3 (2019-03-04) o make rchk happier CHANGES IN party VERSION 1.3-2 (2019-03-01) o move ExpectCovar and ExpectCovarInfluence classes from coin to party CHANGES IN party VERSION 1.3-1 (2018-08-08) o varimpAUC() now calls varImp::varImpAUC() CHANGES IN party VERSION 1.3-0 (2018-04-20) o New scale argument for predict(, scale = TRUE, ...). For simple regression forests, predicting the conditional mean by nearest neighbor weights with scale = TRUE is now equivalent to the aggregation of means. The unscaled version proposed in can be obtained with scale = FALSE.} CHANGES IN party VERSION 1.2-4 (2017-12-13) o Bonferroni sometimes overcorrected (by taking constant variables into account). Spotted by Heidi Seibold. o Bugfix for long-standing problem in conditional variable importances by Dries Debeer. CHANGES IN party VERSION 1.2-3 (2017-04-10) o predict(, OOB = TRUE) in party < 1.2-0 was _correct_ and version 1.2-0 to 1.2-2 contained in incorrect "correction". The test set error and the out-of-bag error are now (again) roughly equal. There won't be any correlation between observations and out-of-bag predictions when the response is independent to all explanatory variables. Out-of-bag predictions in package partykit (>= 2.0-0) are now based on the same out-of-bag weights and the results from both packages are roughly equivalent. The issue was first spotted by Julian Karch and later by Andrew Sage. o comment on false alarms by maacheck / bcheck (email by Tomas Kalibera April 10, 2017) in party/src/*c CHANGES IN party VERSION 1.2-2 (2017-02-27) o free memory in src/Distributions.c (pointed out by Martin Binder) o register C routines CHANGES IN party VERSION 1.2-1 (2017-02-08) o fix a memory leak occuring while searching for surrogate splits in the process of predicting the terminal node ID o surrogate splits might have used statistics with slightly incorrect weights o party::ctree gives _same_ results as partykit::ctree (version >= 2.0-1 from R-forge) CHANGES IN party VERSION 1.2-0 (2017-02-06) o predict(, OOB = TRUE) relied on incorrect weights and gave suboptimal predictions. varimp() was not affected. The effect was pointed out by Julian Karch when comparing party::cforest to partykit::cforest CHANGES IN party VERSION 1.1-2 (2016-11-28) o remove ctree_memory(), also from examples CHANGES IN party VERSION 1.1-1 (2016-11-23) o fix memory leak CHANGES IN party VERSION 1.1-0 (2016-11-18) o don't change values of R objects in C code, this caused problems with byte compiling. ctree_memory() had to be removed in this process. CHANGES IN party VERSION 1.0-26 (2016-09-01) o compare with libcoin instead of coin CHANGES IN party VERSION 1.0-25 (2015-11-04) o remove show from export CHANGES IN party VERSION 1.0-24 (2015-08-25) o initialize, show needed import CHANGES IN party VERSION 1.0-23 (2015-08-14) o update Rout.saves to coin 1.1-0: logrank_trafo now has the same sign for each tie handling method which changes some of the cut-points CHANGES IN party VERSION 1.0-22 (2015-07-28) o NAMESPACE update CHANGES IN party VERSION 1.0-21 (2015-06-06) o reference output updated for recent versions of R CHANGES IN party VERSION 1.0-20 (2015-02-18) o is.na.Surv is now an S3 generic in survival 2.37-7 CHANGES IN party VERSION 1.0-19 (2014-12-17) o directly link to mvtnorm and thus make duplication of FORTRAN code obsolate. o export prettytree (for package mlmeta by Andrew Z) CHANGES IN party VERSION 1.0-18 (2014-11-10) o internal call to svd acummulated memory until the garbage collector was able to clean up (only after the whole forest was grown). Fix by Philip Montgomery . CHANGES IN party VERSION 1.0-17 (2014-09-17) o move initialize methods of coin classes to coin and re-import them CHANGES IN party VERSION 1.0-16 (2014-08-18) o import("grid") CHANGES IN party VERSION 1.0-15 (2014-06-26) o allow for missing predictor values in new varimp for right-censored responses o introduce varperm argument to R_get_nodeID CHANGES IN party VERSION 1.0-14 (2014-05-30) o add experimental varimp() for right-censored responses CHANGES IN party VERSION 1.0-13 (2014-02-01) o deal with protection issues in R-devel CHANGES IN party VERSION 1.0-12 (2014-01-15) o mammoexp -> TH.data CHANGES IN party VERSION 1.0-11 (2013-12-13) o deal with empty levels for teststat = "quad" (bug reported by Wei-Yin Loh ) CHANGES IN party VERSION 1.0-10 (2013-10-24) o new demo "strucchange-perm" o proximity has newdata argument CHANGES IN party VERSION 1.0-9 (2013-09-02) o export initVariableFrame (for usage in RWeka only) o fix NAMESPACE problems o data is in TH.data, not ipred anymore CHANGES IN party VERSION 1.0-8 (2013-07-11) o update mvtdist o documentation update CHANGES IN party VERSION 1.0-7 (2013-05-31) o ctree and cforest ignored the scores argument for the response. Spotted and fixed by Silke Janitza . CHANGES IN party VERSION 1.0-6 (2013-01-09) o use hist()$density instead of hist()$Intensities as reported by R 3.0.0 to be CHANGES IN party VERSION 1.0-5 (2013-01-07) o fix class problem reported by R 3.0.0 to be CHANGES IN party VERSION 1.0-4 (2012-12-18) o export varimpAUC() o add where() method for RandomForest class CHANGES IN party VERSION 1.0-3 (2012-09-26) o new function varimpAUC() for AUC-based variable importance measures o the `weights' argument in cforest() can now be used to define alternative case weights for each of the trees in the forest. CHANGES IN party VERSION 1.0-2 (2012-04-26) o version 1.0-0 introduced a new bug in plotting Kaplan-Meier curves when fixing the weight problem in survfit; the x-axis labels where incorrect. Spotted by Sarah Vowler . CHANGES IN party VERSION 1.0-1 (2012-03-23) o fix -Werror warnings suggested by Murray Stokely o make sure no factor variables are evaluated as surrogate split o fix confusing warning messages in varimp and check for non-unity weights CHANGES IN party VERSION 1.0-0 (2012-02-17) o varimp can now partially deal with missing values o Kaplan-Meier curves are now computed _after_ removing zero case weights (see comment in ?survfit); plots may change slightly. o use cforest_unbiased instead of cforest_control/cforest_classical in examples and regression tests CHANGES IN party VERSION 0.9-99996 (2011-12-20) o don't ship doxygen documentation with package o ctree() and cforest() don't handle `-' in formulae, warning added to Rd files CHANGES IN party VERSION 0.9-99995 (2011-10-27) o observations with missing values in newdata might not have gone with the majority in predict(, newdata) when no surrogate split was applicable. Spotted and fixed by Vik . CHANGES IN party VERSION 0.9-99994 (2011-08-22) o reuse classes exported by coin CHANGES IN party VERSION 0.9-99993 (2011-07-26) o attach NAMESPACE properly in tests CHANGES IN party VERSION 0.9-99992 (2011-05-02) o fix partial matching problems CHANGES IN party VERSION 0.9-99991 (2010-11-19) o fix tests/ dependencies CHANGES IN party VERSION 0.9-9999 (2010-09-13) o add update slots to tree and forest objects (later to be used for crossvalidation) CHANGES IN party VERSION 0.9-9998 (2010-08-23) o allow for internal permutations in predict via R_predict2 CHANGES IN party VERSION 0.9-9997 (2010-07-06) o update mvt.f (see mvtnorm) CHANGES IN party VERSION 0.9-9996 (2010-06-24) o print progress bar while forest grows (via trace = TRUE in cforest_control()) CHANGES IN party VERSION 0.9-9995 (2010-05-19) o assignment of observations based on surrogate splits during fitting might have failed; observations went with majority (in a sub-optimal way) CHANGES IN party VERSION 0.9-9994 (2010-04-14) o varimp() gives warning for non-unity weights o "no admissible split found" warnings disabled CHANGES IN party VERSION 0.9-9993 (2010-03-04) o just internals needed for mboost CHANGES IN party VERSION 0.9-9992 (2010-02-26) o Bug fix in mob plotting for anova models CHANGES IN party VERSION 0.9-9991 (2010-01-27) o Bug fix in error handling of mob(). CHANGES IN party VERSION 0.9-999 (2009-09-24) o minbucket was erronously interpreted as minbucket + 1 o p-values for teststat = "max" were wrong in the uncommon case of zero variances CHANGES IN party VERSION 0.9-998 (2009-06-17) o mtry may vary with tree depth o finding surrogate variables may have failed, fixed. CHANGES IN party VERSION 0.9-997 (2009-06-04) o documentation fixes CHANGES IN party VERSION 0.9-996 (2009-03-27) o survival fixes CHANGES IN party VERSION 0.9-994 (2009-02-10) o fix bug in new varimp function (which was triggered by splits in categorical variables) CHANGES IN party VERSION 0.9-993 (2009-01-29) o new C-level function R_remove_weights CHANGES IN party VERSION 0.9-992 (2009-01-19) o update CITATION file CHANGES IN party VERSION 0.9-991 (2009-01-13) o new conditional variable importance measure (Strobl et al., 2008, BMC Bioinformatics) available. CHANGES IN party VERSION 0.9-99 (2008-10-28) o a suboptimal split was implemented when the best split corresponded to the last row of due to a coding error. This should have happend only very rarely, however, the glaucoma example is affected. CHANGES IN party VERSION 0.9-98 (2008-10-15) o don't compute ordering of censored variables (thanks to Brian D. Ripley for the report) o experimental version of partialPlot for cforests o teststat = "quad" and testtype = "Univariate" produced wrong criteria in the presence of constant exploratory variables. Spotted by Sebastian Wietzke CHANGES IN party VERSION 0.9-97 (2008-06-26) o predictions for new data containing missing values were wrong. Bug spotted by Wei-Yin Loh o vignette updates CHANGES IN party VERSION 0.9-96 (2008-06-06) o make searching for surrogate splits a little more stable CHANGES IN party VERSION 0.9-95 (2008-02-27) o proximity() now gives _relative_ numbers (similar to `randomForest'), not absolute numbers long-standing feature request by Henric Nilsson CHANGES IN party VERSION 0.9-94 (2008-01-30) o documentation updates CHANGES IN party VERSION 0.9-93 (2007-11-30) o It is now an error to ask for more surrogate variables than actually available. Thanks to Henric Nilsson. CHANGES IN party VERSION 0.9-92 (2007-11-22) o predict() computed predictions for observations with zero weights (by passing them down the tree). This was already done this way by predict() but resulted in an error for ctree()s. o minbucket added to ctree_control() CHANGES IN party VERSION 0.9-91 (2007-09-26) o bugfix: NAs in factors lead to segfaults on 64bit machines as reported by Carolin Strobl o related to this: be more careful when splitting in variables containing missing values, especially factors. o add examples to regression tests o new function `proximity' (feature request by Henric Nilsson) CHANGES IN party VERSION 0.9-90 (2007-09-24) o new defaults for `control' argument of `cforest': unbiased forests are now grown by default o new defaults for binary classification tree visualization: stacked bar charts are used by default. CHANGES IN party VERSION 0.9-14 (2007-07-23) o fix problem in `varimp' introduced by new weights handling CHANGES IN party VERSION 0.9-13 (2007-07-23) o update `mvt.f' o improve the memory footprint of RandomForest objects substancially (by removing the weights slots from each node). More careful revision of the predict and fitting code is needed. o predictions for cforest with multivariate response are now returned in a matrix (should be a data.frame) o remove confusing `no admissible split found' warning (which simply meant that the `minsplit' wasn't met). CHANGES IN party VERSION 0.9-12 (2007-06-28) o adjust to coin 0.6-4 CHANGES IN party VERSION 0.9-11 (2007-06-11) o populate `where' slot in `mob' objects. o `mob_control' now has an `na.action' argument o cforest with replace = FALSE, fraction = ... can now deal with weights (spotted by Carolin Strobl ) o interface to LAPACK (`dgesdd' for computing a SVD) directly. As a side-effect, the svdmem class can be simplified and no memory allocation during tree growing is necessary (which results in a measureable performance gain) CHANGES IN party VERSION 0.9-10 (2007-02-28) o internal infrastructure for fit(x, y) interfaces, including a VariableFrame method for matrices. o deal with factors with only one level and variables where all observations are NA o don't compute design matrices in `ModelEnvFormula' CHANGES IN party VERSION 0.9-9 (2007-02-02) o internal changes to data objects: joint transformations only necessary for response variables (new class `ResponseFrame') but we need to distinguish between testing (using ranks, for example) and prediction (means of raw data!). Problem spotted by Henric Nilsson . CHANGES IN party VERSION 0.9-8 (2007-01-15) o thicker median lines in boxplots CHANGES IN party VERSION 0.9-7 (2007-01-15) o fix problems with multivariate response variables (spotted by Henric Nilsson ) CHANGES IN party VERSION 0.9-6 (2006-11-28) o R-2.5.0 does not allow to change the storage.mode of factors CHANGES IN party VERSION 0.9-5 (2006-10-27) o adjusted p values computed with testtype = "MonteCarlo" did not take dimensionality of the underlying linear statistics into account. It is now ensured that _p values_ are resampled, not test statistics. o fix escape problems CHANGES IN party VERSION 0.9-4 (2006-09-15) o make sure `maxsurrogates' exceeds number of input variables o fix problems reported by valgrind CHANGES IN party VERSION 0.9-3 (2006-09-08) o don't call RNG functions in mvt (this is done in C code, once) CHANGES IN party VERSION 0.9-2 (2006-09-07) o mob() can't currently handle missing values, they are removed and a warning is given. o add `methods' and `vcd' to Depends: CHANGES IN party VERSION 0.9-0 (2006-08-31) o node_barplot() can now also draw stacked barplots. o simplify handling of ordinal variables. It is now possible to have multiple (ordinal) response variables. o some documentation updates o fix problems with NA handling for factors o make sure minsplit criterion applies in the presence of missing values. Bug spotted by Han Lee . CHANGES IN party VERSION 0.8-8 (2006-08-23) o export `varimp' (variable importance measures for cforest()) o documentation updates o add codetools checks CHANGES IN party VERSION 0.8-7 (2006-07-17) o REAL(NULL) now gives an error in C code and scores could be potentially NULL: fixed for the time being. o add `show' method for BinaryTree and RandomForest objects CHANGES IN party VERSION 0.8-6 (2006-05-22) o add some validity checks for hyper parameters o add function `varimp' for computing variable importance measures for some random forests (this is still experimental and thus not exported yet, so use `party:::varimp') CHANGES IN party VERSION 0.8-5 (2006-04-25) o all hyper parameters to `cforest' are now controlled using objects of a new class `ForestControl' which can be created using `cforest_control()'. o sampling of a fraction of the observations without replacement is now available for the `cforest' implementation of random forest. CHANGES IN party VERSION 0.8-4 (2006-04-04) o renamed argument `teststattype' to `teststat' with defaults c("quad", "max") in order to be compatible with the `coin' package, version >= 0.4-5 o use `1 - (1 - p)^k' instead of `p * k' for Bonferroni-adjustment. Node 7 for the `GlaucomaM' data is now splitted in addition (in tms). CHANGES IN party VERSION 0.8-3 (2006-03-20) o `predict' returned nonsensical results in case a tree was fitted to a multivariate response variable. Now a list with one element for each observation is returned. CHANGES IN party VERSION 0.8-2 (2006-03-01) o plotting buglets fixed: improved axis in MOB plots, correct (transparent) background on jpeg() and png() devices. CHANGES IN `party' VERSION 0.8-1 (2006-02-23) o `testtype' can be Bonferroni, MonteCarlo, Univariate and Teststatistic (instead of Raw) o removed unnecessary constraint on weights in `cforest' o maximize raw test statistics for random forest by default. CHANGES IN `party' VERSION 0.8-0 (2006-02-15) o `cforest', an implementation of Breiman's random forest ensemble algorithm based on conditional inference trees (`ctree') has been added. It is somewhat experimental and thus for advanced users only. o `mob', an object-oriented implementation of a recently suggested algorithm for model-based recursive partitioning (Zeileis, Hothorn, Hornik, 2005) has been added. It works out of the box for partitioning (generalized) linear regression models, others can be easily plugged in. A new vignette "MOB" describes the implementation ideas and provides a few examples. o new S3 generic reweight() with methods for (g)linearModel for re-fitting a model with different weights. o new argument `maxdepth' to `ctree_control' which allows for growing trees of a fixed maximum depth. o LazyData: yes CHANGES IN `party' VERSION 0.3-6 (2006-02-06) o use a different way to deal with NAMESPACEs during in tests/*.R following a suggestion by Prof. Brian D. Ripley o use LazyLoad: yes instead of SaveImage: yes CHANGES IN `party' VERSION 0.3-5 (2006-02-02) o make R CMD check happy and move src/README to inst/README CHANGES IN `party' VERSION 0.3-4 (2006-01-18) o documentation updates CHANGES IN `party' VERSION 0.3-3 (2006-01-18) o some new convenience functions, not exported CHANGES IN `party' VERSION 0.3-2 (2006-01-12) o isequal must not check equality of attributes CHANGES IN `party' VERSION 0.3-1 (2005-12-02) o fix bug introduced in version 0.3-0: coin:::factor_trafo applies treatment contrasts in case of a binary factor but we need the full design matrix o documentation updates CHANGES IN `party' VERSION 0.3-0 (2005-11-29) o `ytrafo' and `xtrafo' functions make use of `coin:::trafo' now, i.e. the handling of influence functions and transformations has been unified in packages `party' and `coin' CHANGES IN `party' VERSION 0.2-10 (2005-11-08) o new slot `data' in BinaryTree objects, slots inputnames and levels have been removed CHANGES IN `party' VERSION 0.2-9 (2005-10-19) o splits in categorical variables could have failed due to weired internal checks CHANGES IN `party' VERSION 0.2-8 (2005-08-06) o fix problems reported by codetools CHANGES IN `party' VERSION 0.2-7 (2005-08-31) o extract inputs using menv@get("input", data = newdata) in predict CHANGES IN `party' VERSION 0.2-6 (2005-08-29) o make gfortran happy CHANGES IN `party' VERSION 0.2-5 (2005-08-19) o ctree() now searches the global environment for variables given in `formula' when the `data' argument is unspecified. CHANGES IN `party' VERSION 0.2-4 (2005-07-07) o names of `criterion' element in `SplittingNode' objects were wrong o categorical splits with `ctree_control(testtype = "MonteCarlo")' were potentially wrong CHANGES IN `party' VERSION 0.2-3 (2005-06-29) o print and plot only levels which are available in a node (for nominal splits) CHANGES IN `party' VERSION 0.2-2 (2005-06-27) o ./src/Makedeps will be automatically generated (on Windows) and must not be part of the source-package. o vignette cosmetics party/inst/doc/0000755000176200001440000000000013437524314013141 5ustar liggesusersparty/inst/doc/party.pdf0000644000176200001440000055533213437524530015010 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4302 /Filter /FlateDecode /N 68 /First 559 >> stream xiSܸMd[孭TqI`y̌ΌI-Cȫa]n[G!""HrAB*IQ#=}2c07L#N(%C!`,2IȀ0t ,D/P"[>W"L-8nd@> / )q Y(XE-Y6 `OB'I2&3%\ *T$EvE^ ug[tI>'"Iqe"o3^Ny |+ɓLn\&GŠ<|Kkr hyrIn? KyAͲmSD"<%%@/_vQwP蒘E,e3Q >3Z/, j&ыX:wRq)7q j03w0a<)fYcLz]rinOD| B~<2_'vHtӇv& M,0"4]mmмsHr[-A1=u RϏX52ft^^t Po>bzJ #LׂEvhтL $*xPFndvLcA0+ T)u z̅X }|82!B C@aS`5fyu UM^ !zC~lgm3͸9uհ:'l=|]1{ 5#W˸bSzF5SK`"^́=/rpQ/˺|ȷi>[//m³lD5O*8ZF<.ie/4|Y*#d5X]{ps:x ͩ%e @kmiDYR$ԬH Ezȗo(a$,A#aA{HVO ވ[4XIngeM7 P'A |8t@sV"',:eYt rQ|9Z]gHɮOr~|0fY 6= 4ףD><9~ڂَGS .ʱt k׮w=kocAfkM$0RRAۇΌ"*fiZyE?4.J*j4Pz:F U5(g*ŲQ} TYfgYܥODO^rS}1[Ήٌ-cF'o&zwU[w|c+SB):huPct݋7|}012&jANt:& qn.=ˈC] Ј\D3Ǽ ЌA+3OI̕ҡ/-Kӗ-l]=۞{ ayywfl&m`uD}6jM.=5&W{ZւQC#BlGפ[@}bՆXb8͇DZ}v럝#4a|>9݇pp||q}{C k7:TۘIA7%{Vr`orp>Vc:A%cA Gr)>gWr0#;D'o߼&=[z[;lݣ:u'| ëpki a6FLFH@VBt#0/*"n#Z*Psqq@I_ G=^ 3l!(QѲn\37&`s*Ƌ:H*rkvIk6Į=hdަ=,`t=O=Klth.ԹMosi(Ev}mC?\Zc_nG@<᨞Q:#&'H9ۘnJ7!<Ͼ6]ĹߒƓp[\$Lo)/1WM3eZV^%Wp M5(rT Eh;Q;zD: Ó;1,eקSAKmQw}j"BS4f^Q*T@HgMeq;mU$ЎqPmv}{7JQ\|LG`N:f w993=xEzd%[n\9OZ8H+YVҷiy~3Em-#̴jcVр}s5ӵFձM| 0; ~VߥWg&;aǃRUzZXx2;FwU(w̘^uW=6!m$ּMQTV&eNJvܶlkE7BZt/.@Aiq .}jH,މDYickG{i,z OxbV<_bĎ,jŊU\i݉S+W MbE*I7I%QcVH(8&,I*$D5Ml {NMb;w۴)ҩxJ`dmulâ!bgYƬH'he݋:$7jendstream endobj 70 0 obj << /Subtype /XML /Type /Metadata /Length 1714 >> stream GPL Ghostscript 9.26 conditional inference, non-parametric models, recursive partitioning 2019-03-05T17:52:39+01:00 2019-03-05T17:52:39+01:00 LaTeX with hyperref package party: A Laboratory for Recursive PartytioningAchim Zeileis, Torsten Hothorn, Kurt Hornik endstream endobj 71 0 obj << /Type /ObjStm /Length 2146 /Filter /FlateDecode /N 67 /First 565 >> stream xY[o6~_Ř")"Pȥә&uLL"@&ٲER'BMI$;VYńTLEYb5Lxgx`)9X1و% H&YbX3c+Mb бcmVaܻn 9c7lR>YVz4+w0+7hKt[r)~BYZLYݔ2cʐ46-l4)\;=B<&䖪WBrՐ,;턷 ЂϒrrI,-#}3><~QWXJ"pI$ѽ0I0 a kl`\2p#z )&2/5++6IwҏU< dH_n ig̙/ӗT2% h~x3ӺfwvMª2΀C6_iFE^$G a Sx ^}1ϛmU /mU\7""ɕa yT`΀ w ^$m^ }lͲ7bS\ q@N 1!xNl#zWE[d`ޢW=qza c5rG=^SKY.j^Q"u_/|^P/Fa`G EPUʥ>^ J(;ÎED7FMH1muctZ@84n-2խECHqRhl۞OU"(+|Q.w> `I9اiA>dSg ָΡΏ_o* gMK5G$^V6QePJ9EWB#XP1m\f(QFrI~i?֑\b'|v:'m"tgw-LS~/%W)>垷K<-9ښ?T5/8aoŨj7h/5/x=zN?|U~߂O+)?Ojw]$Э}]|^QvoMzᤸBEE{:Ye~Omaσ7b̃HX"ލtI{L*h\k$5Ix;e sçw?]\})IQgkȲd,,tdE ^.nWA!.6f#NoN|z o)DTVWPc._rm@w]TnBo6DWNloW)貭pQ-˶? MuI(A09)צ{ieQlORR>RF;'H I wiw{,d k_tO]=QA^ӤC+qTq.Tb#w^ړγDb4cjkL}zk8Z}_Tqendstream endobj 139 0 obj << /Filter /FlateDecode /Length 7059 >> stream x]Ys\u~GGw<I9HbJUU! !D1/9K/BR[\>},Y/|.o/~_// GKF{wa:x>h/_|;ީS*4w{uP9uQ΄CTVOpD9ݳu\ǩW{v Sۻ^FpybkhA9lNT"2`!gh `UFf^髲qUn c\ivι3U_Pn]~#/n d)Cg@џ};U X6 mN&4I\ᖂx)H (&Ya EԿd86 xΘA^9lk*L!QSyPaa 9dI,A~I{8\~- zcipZh,C#L{!qMEHxRGxcsӞ·Cp;03Mw"0 3bn!u?&c'Zv$<odW7?rj^t {>巓XxAO//t-L/ ` z`7yw&q2s nLeP`LA71-9 |qR)Lv H #11+|E+4I:g/Szg9BEPA,Xb3"Nc[Qh&w 0 `e^KwxC@H:Id@ J\>nЁvNi] ާsD⯽I:BSuȈ,ƓCL"k:uTVAK2%wBlN׀P9d^#Bݙs$\Uۗ]^TY")ې7c % jYS&+fb:3T 8g{_nk$M9љBF.ݱak#!WYf… (w~ ?*$ǂ3@ 1nL}ˏa8P|O '?:5(Yw"3M<<@S) @FMMpARweWoT1R7aΆG-SKFc/AG% 2e$O;I6ImXqd"b<Ӡ]$'G7" 4 H "IrH dQD2۾?Įd? \7 1BolbTpSa]UJ@L1Y=((x,dMȪ"!9 Ezqk%zGf f1I:^B?̲0+vY~mU[yqB"N$#rGRH^?@>v$n4gG(JZTl总9YZ^ 9\ l#(CI$bb::..XYIOvȾm#vx ^i ?vi? QOpuPpo !;%WAXb6j)w4(x-xO"#l,SC,1L|Jea#I ci{Eָl Rɓϳ +|x+ \>KC|ўS{k-b"@_YT-7v98: =''?3JvzML1YQ^}KuDN#ص(dLVy] / :69m9S:`߱X@"oqær;8z-OϬ2p<§VlnNGƲdS'&,(:ʋ^rdrdN ;WߣB))ɖW rt#lգjց]ֱeWi8[!*auط!h5RW} [,.hKKI@E%A=]j'QU0z]775;öhF0T@/qAY_vPf<4nȥ V -F]7zN*.1Q̘x?3[$ih-%LJ'DD@&_twz3OIؘԵפYfzS*btTeQM 3/&f D,dbr+y}ޔmӠ0XJ ը$W3N( L/mwXOi]0Vps^XN-UI3@  v7ҹ"`EGV8m07BV}n7TZFlM `%Z[{jQх=.`𔦮+\>GiX]媪q˻PH$ę L"=`?j 5uoZ[Sq=[ I8qEh7WMԩQ(?E7"$1}[*2sCS87m>|Uљ@5s^9c2J,' mq}9`@ bA:׀L< nZl+kjoHuד%@˖$=.<O=P^gKx*Hx0zG~[q w$M)Xe~1i?D&{^{B0>\/yN6ϖfĚq n3&@ܔrTO5qp`P!GqP\2jsZeZgֈZw苘)(Ǎ)iɳr۲;193*zT4#C]疑- 4 aEܒT oM80m 6yT'Y yx\SdL'`s %jxI]X{,zD`sKYRN oYyoW/o ߖ DA{phZ3~` -y8+'|kT|+p"ZNE6ۀkJz7Q@7nm i72P2\Ix+Hd,-^f/e:̄vQ)ܻB؊۹-[kjuX)Zwm,™ `hP2d1}ca̍6rt3sNY:롃VqJ "Un8R x2p_DCe#Pf:,-Sf&_/vm P~VctrgO2QZ6xm[Y>Z8%wb0ʹ4G$Xctkqeq?VrvR!DrK-Er7J$ntWmy7̹2(4`|?pÌ#Ѡ# R|d#s#lkٜ}tzz - }E.)3PF<%4'~o++R=NL*`F_:mq G _sW߃xIjxO }[,"PI./=^4Ɔu0+> aUc 7ȂWVJ#(pZf˾.˙Jݭt餱J 귷c8pZ].LEkJ5S6$ˉk|"wˈ[q:"ݖ'=&(Rz4!!f͜flHMoa]ŪmE lhbw)MAĤ๏ut'Up v Le1ac=l{ ;?мW] %k O+r^ν{Oִa,7/g.K!czԩٝJF ̥N\|=5 ,}ZKP_s涛BWʹw~>~a{bkΩ==a/ญ[~˭՘,5O:/@қC"l>պ!ȭnKe کg[O?7ܻ 0`jC١>K?* 1XQ]1Sƌy/oJK3rciT~Fo{+C8rߛ{FaCηKpػ*">''p`@o!Cp )!7TG>$*% ?4lXY2I:Ə7 hYwk:]@dgu"pt&opjz_o5k qItbR5I%$fEr "bڗlendstream endobj 140 0 obj << /Filter /FlateDecode /Length 7553 >> stream x=ےui+O1ݸR*qR**ea$KJ>z]Kjou+/QzqODE닯oqţG;y;k$%8ɳGؽ\5?TVݻK.^HpyO!Xɿ|'âe/V}yy\B}zy%bq5dP.d޽M! z _nx} jovɗqnVip 5\^?/]Xd Fpb]|E&=^"\h a~wKູLGʯJ(8T/Ydl)B[X0.g`W{8 Ez&~1> ;^q,"qG_puk kvpu>ϭ=\O<=a pLqj6y8LHD\3^|/ C{lGv˄uy:~Dpyr>"ZeGpMn`  ~Ӈ#G }Lp@#pi  gD؏y^AG&F޾k$_p^K{nrNwtUdًTN,Oϊ- NjoqUჀ@P"?s I)xd& 6p@{JG6kT-ž^GF\ ihNDGx&WM`;`$,0¸nEP8m`%Q?:[/7x>9(?V1^++wN:8\d!>p6*"+,.I6rBoڹ ud4\1D)C!=(0O%&jUBj) nX !E$Gc]@i8۰ o#98JķM߲"?`N|9mO![aL=k gm 7@X`B f7{;.JcLe26M^s c'.4ul5A|yV :F **Iϒi`M)YUr|ZS/p/PkDI oNKvD7x>4mQ{\;oZjP}S*jsyc#(@tLwBX4BDQ:Xw7œ ЋVF@*8t$y:!fj /N6޿مYtTXW9nO̬FK`>p!갮kFJs$71M#}}hoۛ6`ZQ/kLHgK`c eSCTZ 0I5ݷA5&1ɂ"Fn:MX["q@Jg^<"e0lM!ET1f"7*jT`mwN,uJniVXO4 $*4=@ѸW'#t^{ՓκpLeq_ uL8tU%8"7\{7YY hh|l0$/#z}L3(Fc)Ad-6sƈFTyѹ(t _#v $>©͘_WM@ j\7BV;z<&mYm8 פ\ Y {BCl-f,oKӻ'oexYy^ٛh adg%X(~kw`5Rz!D7"vmP(`}8q F,ܤV!,mQc 1|̸K[L0\7x'bºБrqg0W np6NF_rIh;j5(=za'H=wG*0Ec|5,&Uq>IIAr\J'^ޒH&'w*+YJ2ӈ`]X42|l}b/&q_47@_'uz@.WLi%}#ҕz@ d(8 Wº-k Zdj^gíL\z ybY=AAeYQ8f ]1Hf͞Hnq?-VԒ](X{g#*R;o{:RpmdIY ݃DAM8&WdV"xQ.EON9Q']%z̈~,s%㍑e?߇ۇs2qrA̹O8rwLޘwJ5[wu({ Y{EA׾qs3chv ]?N 6"U U 5xΈ葰 q*e7̣H_+EN44j%5I ZCX^UV@cÚq;b&p W.j[$2U#}J\J$^R b;dx$&%T>BGrS#urjmA҄\_u? w?m:gPp`C γmc#PR5)*:Ʒ *H]*`_Rx35Qd2^) D:2ZS-@!MR=CcswN*5FVI3VisVѢaZt&,Qvl e\D$Jo[ͥY{oo=}GC}&8`*۫Ϫ=>nߙv |]@y=÷{p,pF|sފ}co+#߶ɀd]>2 z?.=/r}rm^e59'wQiԴL??nXVpRyoCD$ڣi2ly${H M>8"mlW%=(,K݄6S&ͻl@b"٬mҥy"g֛D0^pXpnJtgJi'8X¢؉M3Yhuyh 2/Er XH2Ї `XN5MwÒ=:M:'$ rR69j??̳[hg qÛzBЃKU-E%mr:iE.6-{5iXb)7ɾK>Y2I,rRqrOgsÓU*Fn1o>-1bHT6ϸ6@$:6]RIÃ}r8ھKEL~x!n^~LO]a׻콛>A@vj ΓU%ΩNdGWιU%9~@Kp ]\;A&'oJNH@9ybk[,vGV[L0"ژF5Cc וa"ix*cw魎Ѣ*_Iu@I9=$ge#,iX2wP6HbUmsuEx5Ԕi3^NbT3.kL( ť,9!`6DJوPbspgpf"%2 CNI;F KccYKh\z{O&|+k`BJvb-e]ܲgQ@0`p*3);$+!['J6%.)q[+s7*k]9QH BՌ\6<8UZ͇*$~}ze +y (Uh夙[,x2EMƳ͖Rڨ C1~puOK>@6⊙bzv0 H_d9 5K%& <ӕ`9}2Wj\=qqU=Q+Bd 8|i]nq`F$(*ܵ#3t;Q-e[D#RHDP<2"_A>zz ;y(j/Iǎt[_(LN<e)":g?FR{tjE=njөM㇎l[E\FI7&/}nb%~m=Szԍ߹1?|hcX)ۆ8IK"zJyװ&lw+Rkzxa}x޾ۨ4ꒂ3m,G3ιPM-ґzCMS}qC]AN{u"fɨ8gy!J#͐ U@`]*d˖&rHaMItLd3&jE>U#:_ +H5,.+-UL1#X8H-c;Z0)6q&X=&| "|(,slu],z[R`cN= D{ >V -TjV1[vtE&YEo\MB9c>{hY{xB Nv(8v;&~wY T[y\=]O2sD=4#?D hu^l bBp+$MSK㆏vu~Xw1Z1Qw$Ԙu B`-NsP/Ag;椃yγmEMr,[^R?It0m $W1cJ-]> stream x][sq~#<Lw`]u!::"%ZZGKRko!%ˮTK/__~{1ObwW]?/n}Lo/W.~z -7S|,.T2EpaJg_ᄎk?yykvQ{?*&2a+6!vo;.4opOoaq;>.QOqfwQ=~fR45Jm^'lfԧ=+d3R1>P CncZFdgM?/ 6|3O6/<;X.M{|#®̳'7+ FL\yilp#uє&n nϙʛ ޹IãK6u+;:]_bȎVi,̺ Xt ihIm:`w*(Ͳ+X2ȳZ>yή҂kT%~0}:DRc`"4G~.*$pl#POɻPxŦ5\;7L8O8)`ߪq9X:8o=@͚dm~C(r#;|ۄ X`=ZĦI=2o^ƑmdV*8:رG֛29XVGE pI$XTyacfĭfYk>P;o2c*9b#NOQ[=" vi=]gDcCVuF~EL7^)Pwg@NL+q|Քf8)#A nʏ'b4Yn˶SgtԑS^M6J#{:7W)u *ܱ/GHyHKf6̎4t!| >zRc_to[4Bm7@iI|z/s/" !Df;-USEUzift3ʹxo+Gd4,M)1M3@aL۴yiv׆i }kUʆ=zlmFh-:GE9rkq8t=QCahj*/+>D|;*+]u&FEk$KlfS?ęb *yks<9ǻx=nמ=aoiZU[pG>[h@5[VOmiw_Ƿ}{,XiR_]3::)= Kč5ܣU.]AOWdkȇ|//qi݆6Cq{F`}ׇJzdIݙ@RG: `m=n7C^>cbVC3:UgJH<1EJ $BguVq0`( 5>Oa#lՇ;j?'oh5Zeg0er-8owH9]?_?D[}M3QMw3e0Dvub^OVq{}M^Ӧ |j_iUoO#8X7ܽ8 .ъ61ZS43n313jTwj 0ػ0xqY w$FӜ@4#7ؤߒ|UKNJt)e i؊l f:gBgZ'%;%LmġK*ȑc{#'o٠ ZbL BLŒWRpv CHnK4K2lEB mIl;ɸiEY[8FxpurAYQ+M,  6XHR+GkRRg|th_mtXhaK҅Xk,SI,Z.s-G7hU@̤~1?v&)  `eDTгqv@qOA~*hf1 0쒅Es&]@< F mle`P`[N6c+ dQ O-s?ua̖ޑ"HGbtP%>gڇVt1#t1Jny!3b1HIn8tY5Ǩ%74 -G1#55LQ&g :|Uau1f&%Pd?iNuV<0Q /vhxXngIi Wd :UK,; .֗Ow!ѱ0@1࿑\C۬%TZG]Z])TjCC g}&55dS)NȽi b[A[n57pcB1NᕐY`;YH02*la A չ Zz9h Wӛse%B䀾O U,rɂ3yxDSu>} QjdJa6̤x{@oDos46w{ǛfhaE󈬷s&X {ԏ.X1ۻֽ$T 豂5;U"H;SΨ.ֱ pD*?bbpJ: (t4xʃAmwûUbc*bSU/3+4ϩυDuG0$j 8fFX#E9G#-+1uદLYT>PJTQ|# 5lEN- 7BNU"]wHRZAi$CT( /_$)S ʮ5,,Yљm$ۨ jA}0 <ȡ4:,aI}(dW/aUat| 2jGYg7[l?*LDs@f|Y) "bHKİݡ *|LX? Ye&%3QL55&.W#q/ \"+En"̗)Te+m8ó.3e.Ecy+f&}TXA>as*44!t5EZuţ66T9yCw_ eo+:ʑPg0 sO-9w"H,fl'oHnSE1(ŭf~]b_ âGa&hUaK'd"^*gp+C=KtjJ7yYDEEP#PBjXD['t0KTMV;Xt[(e֝ %'cN@IOU0ܜiM0\1kM|fDj!Gښذ gvC@>|Ic9H~ "xCY2(ʾd|K7|7ܡ},<3ܹtan$ >' Y ADM>p!NJT`su tGkV̑a #QEq+V1E ?D{M6"$\I)Ad@\-X7~iY(,@?cЯd Oc=&b_TvX׊R6Cg( nO pR9O(g\ ",cKEgeBV7q}~qXpD{H* (ϡ'Ӽ֎Þb[T>1,-(ʜZha紙&&)0Mi0:7 FgG tJv/ixX'&$.O2,F+\c ?ֳ]%J<*óLx~.[U<-P9B7 ~Mq)X ~Y4r2RR-)4M@,a_Ht U~׌?ՖըUȞ,h>tK]'ٔQ XEдͩS+0˜qORP.:Fa_Ɲ@,& jl:Z?`Lc0`pKx `Cϒ}50&if$#*KWyh!/0kzk6窐2;e's EG`P"N!Dڙ^cWrLZ%y`#o-8ևC6%N(sܳtV >G0P KoVrqЊ&!oj,45ZFnl}V-u9V$i8Yky2u^z>Nm7PGXO{$zBEU3>9ic}E\ND]#g c7Pn N?3W}<ҨOp9y݃>5&~7_]e 4D=< H;F[ <ʃ-:fk-Τ8YD]zJΣÈY;c.ѲDwvo BwI*[?'+_'.BR@~RZA`?`m;~kD1% 35mit)؃KgG@حQ+ xlvK@FyX'y ͛OJXv\_vI4冁;luյ47q«ZT8f}?!}0,-0!%GvH)f1%) 5oot7p~2 ʜLpN;Dt )t% 맇ls^O0.6eŌ[#5n)#XJ8$e`:̂~RQ܀e@8y犓xq<2 F9I xanHӜĺ1*(=aǩwxG"8ۣp] ȭ*d\K܃Coף]{R&σg '^md,u| | vާ85܊qrkT)6:Vc.Lmhh0{=3sU* LpNt^RBusRʴmkhGfWyk]n X Hm:\ōlH54bV v0ǖH*oO CI@Hjǎ c-mPMoc@Z2}!J69Y78xZդ8)E@ؕP[me28o(E84|q:;nG~oB tx74%/Γ3[g1cX]\QG⫚cs; vArwгZ6 5 Sy='>\7nXp$.g6YeudLXؒ` f}}~?ss^Q⫋8)3nevͤZOE=3_ػkj}ݡ757k^^g]wUR?kW\6E6]r=qN>)M;*q>e=fN(i> stream x]I$u6`aH\T:ږ!JÖ)èir՜~/^dċȪBX%^}/?V'bs'2uw~LQDy }*72I O:yv/ϔv噘tW.lovZÇll‹Nj11DNUj`c^[E>ŎggAMA=kLǠ۾kjsR'6gl$Zveԧ[!e۷E 5Z0!C4_~ZE ֞={ MMvN){h}Θ*=!l[KLۓ_7}m ۿ6Pimpv_m~Rkn6@az&*x{jcX:O;nIC}nƫa[.DF7#kyD"1>!69˂h~m20q<1REbA8H؀"5V@I^J&qz VDW4я#|}3^T1gqGf?v;{B"}}$"<큫{0{oT)\05KƱ`: " DFKSjRZ`ݦ3'tKBFh^\_;8({<ZY l).M^f!O#~ 11$A"#j )¬l`3l3 04e3u@<\ElD2( >Ac{ $˼48uvM3tO/7g=k"7{ W- bs#vV\m (13"};pNQw%`iMfKgZ3 A0_%&Q83Q XTB/dܴ`B6m:5~TUW,ٶ<Жyq$t e0#{K? nLƠdͭ@dY$jq,AȠ}T\(72D[&*:ty`FЈ3+7I/j B/Pa~9^8cxߒLNdU;EZ"Vt>.FzmP 1>`ӒA茿p]7vET>"tZG]SboEsAN(4Z8'hosmb#ۙR׸n#Š Kta\ Kԉ`FAeIm Y`<7Z ^l\ozlҟNmiLOïr\uJAT$HaY!HIxi קNN%7>p75|/|##K0>7 وDZPM^_Qk*tZHƄȨx/Z^ZL# j?$ M 47rbc*h19 &ogpڴֺfۣm]gt;>A*vYH0"j.PJaRwh"&^БG-Os0:f9f99P[rQ,439χ ;gP4?|U Qj<[C{k|Y7BS>__+c2yMK7/ 5kGegbȄl:?V½NGq*{֖(: Gx 6I4 k͎D.ͻΙX@Z}c>FD4"h/=Z=p ?fXMfM_=4B_M;B[BݷZؗ zopq՝EVbޅXV)}mk%K:Ǡ3?Be%M%(X |j11".9ps㎼{%]/R:q`$X{E~>񄣃Z$^Wu -֖AI/TC%P _H϶){= WI*L`<  pcG^5DTh= pį~GJG4,bEI`G3AMI+(^.u4bP'`7#&ӼDtPD!#8lYҮyG"#07W0n13ls[T=Gg:fjv33 iX)(=}ѽ N>@JG 3eHaq!Vc6:Nrq)pBZq'nܑ뗫'6 y@]'z&jOJ~d^~FVqμ\]Pul=#qF:^6u PS!nvOPXg:;ή2gi8[C0i!$3,i>aA*&" s{<7>gиC H$eQ3_wxQb,K/ XjtP. ' e<"=L8󭰄eϫ#kp @@3:9wxf3fV}ID` ..g4v4Db⇫v Ŏf ] #~ ;~vbATD%A.cT2=7إ#w`@(r(OJ& # x89A(]𽏸 AύׯWci%LN ^fV0R5l<ӡe 2Rr7@ь1pk hLbP"7XO9WhSWPժ }B,5?`}xvˉC75}٥F?.qH(`I̔w鳺KCS+Zć ZHTF P-CU7Uʡ%q/>%:1˖h`4 \ `<4|1X L( #TMmi}`EmN~%=zk>ad(E٠D.tҥ6uB0V5}^aI~@'猞9DcQЄX {=F 0OV9(H7"4`W,C9iC=>1źcdο`2 423J1V c6l4ф+fNjBf߰WW"^(0_xn{Uy63_A} }$6͇OH>di }B6Ȩ0)L/%Jh Eڳx-(_:j]uPq@}p7~/Ӆ`>i7"u^+f OGg_If3%Z15&2O] |(2w9$ YD[|?OZj]+;j ZW9A#Ycte>]($ǘphJk69̬ubh`dSM/p[Kng@ILq'ky`KY,#ep["^k3Z);P;X 0v>y4 {q:S^!BUXx; LsQi&_W_PC!F5`u#L'}BUsio%pQĀ0j%_)R>l.yh5SIb[]kWEeUs[D0,=0+lytذtafcs7iMtO#hJ8liג!lh9"'tPt}γ|:`$6[Hlk:z{E./{2 ~&l}=miWkwɆ!םH4ǚ3B5)qlJ8Jr$Jxvu iFR6(6uY]bY{JrɝG<=̧6:'t&%7ub"mi d bLCnQ> cFh{5˴ s(930g=7/[Q]mwpUn6|NF2{]S9VLE]UsfvJUWsZr㸌G~{5I%j X_͹\ɝh}$eIK]Q|V.pHسؔ< 3~{V75moeyU솶W**T1cG^8pBSU>bZ/xgqWc5"RWOLriCwjgM;^lNd+Od$ŻĽ[E%.܂%5ay{c y)e}d]'lf|AIo+kQ46S-6tSuM#* 8QnqDvSW^:b q'L}t[qUܧ(>3``3}XTZtWN_Ļ]ʊ0YB)w;϶+ՈL$NH/+qvy]ֵ Yanu3:6}QWSbɜh zש51 EZؐB+f=yY*2pmTQ畕IE|1dildJ5ީLN0B5mWU}s.,NӺ(=yAL\S rܭuϹQuo"YQUzSb™b3F X6ťF55aI5#"zɡ7_{o#'}I*qX֧B\1:~a/PFsS2g p㏥1DM=<_aR)Mܜ1'b=9.RA%{i3YQ[ٙXox)[ XJ_`M __&ق<ˎE2N :lWyJ;` mr8Zr<}o"jJRlVww5*'XIRYe][Pnq0-"WZ/id5J%nuyiꦄA 榴ҙ.Ĝ[.BVs{1['mv"eqcߣX ͸4ԨXҴ附Wy*ک"9E6D AEt j %a7{|g]TdNl.PtV͂@ޠ{kXh pPC,: ̅+NwQ49+eXHOqLgw{_TL&ֈq.TߟSs#qYa*ÓU w/xE`>oz_{` .;p$S/{j;S}o|}rc8RX3fd`*f~4^XA 'iCvQw]nkTqP`OI4,mScRdZNkוGo!{ܕk:/% @&}[q)Wӫ~L.K)r?G,Ż}-RU JoњQ%up}tdPh䵿D!RAnԋ4ռ Q+DɇP̯ cϱgZ 4yM2-/~yXiZ?M6PC¯}Dl&$̯ 2J& oV;!s >V*"q V[Y9vS)hVt%j-o)LXs|HgH*ދ|#1#wiZC16 ,/=97&'vh-{ϻaCȰT~/endstream endobj 143 0 obj << /Filter /FlateDecode /Length 6525 >> stream x=Kq>9<&IJl@A0\+JES_wU3"AFk߈Z3}3a_QD~,O 7}omw0*6V}8ųoWb/3jx>H%v3t=ڹ]V__; {qj{x̓WA(?A+}~wlE o_7}GfQj_68m51D ΧDĵp#߯) \qp!G5[, q3 0:lȹn2HsieȦ^Xo,Ir;o-6m %2ΰ3=,:d`U>A~[r9eUr1!re]xi &M|Ji*dz^dď\*>'-<(>@Gsr+ͥ%~?wpiwە쭉*1CwEc64xaC~>zDSy=z=G-@4d}H yGA#B_c%.83vr<-P(.L,S&y_ K2F&†/rܪ&xYO1>R "w wa"vE:* |wA5փP*'i""PZw4e0;OȻ M})#(%* q#ǻD+ 4쩠Tk`ڠ&N<0OKv%:/@9 @gE,$ٚd !e!%^ o% u•N@%0\dq /h)|_Pay8SpIIѷS$I}P$  *dRG^R}6+KVw2gG?~IXrʇ1cب: Yzl<`t6Y$Lc3YCJ9*~/h l'QOlhԀM/d!Gj~?3O|7ȑ$w Hrkl\}\e'Fb/MoG!P2^ěIg^Ȓų'ɊTqLSC#H9cd*l PuK1`-u#ꯊZmؔZ{xĪ]mI &Z 0p!> 4.5+} k>i2HLA!|tsfVpEïvM!\6:%$$ %E58Ĝv81(JXGY%*x4С)]7\[7 țOFs&}QRbp)LإcZCeC=OvpUW'g zOGVjHxH<0O4=.}r2#?+,hK{\ ܤ #0$RV:c^u]T/_/71&ea%QjUϛylws.}&NZ}8<{>mu|l_hկ }G} szP f n 4gLe I^U5w2GjJrVRi&\':$hMh!/agyDz'hA9G1B`'{;1OblrQ@r~SlȦ"|s;OkS0_%p66DKŋ%oie<hG$-sUj 'btP&~4&*^Z\+0 Ӓw'8ιEOx:<$7W[zwJ1=ky~<)_7v'ZgW)4Q/)l%_N>{oAauuC̣D4һI!h(2 !QBKrDsΊKˠ|N:-Kӛ^@ԑhh)vňI=黤ȫ2rD-POV!vGg=wvz̫OH7`"- 8(Y V}@!KJBH5! C Z<@2Z=]gr>맱դU3@6{;j̡cK4mR :H׭0VR$RfA +z)<mnϘaT iwg$J7C'V]ܼ::v9̳|]!6UgM y y]Py)\'P7p{m/\5TӣL6xT3CRcՂ3՜Xdfw12,-QH<@sx.)&㤊6E![2GeZuzNmkk/&*IQ[6Cr0U[8O5BlLZP}ɢ.$߁STj`+AUKҩ i<B>;N4 Kr\ifF հ}/E04`59oSXb'\J2uھKy%$$ [G߽?ӆ Ib` _oөlG2" |/$\s{&F{M?!KaFAh' FTfcalV8y#I0{ g#cmʕ<+X%㤊ʮ11-uUFkŅ"l.(t60q[Us}HdC1I"PfV繑Bs-.|1ca,*č'YLuY&W䒎 J@1@gt(RwR7#4R(ga ʤ%*-=%kG5#iQ/[ ,8l?D_@Nɭ/ Lt["s-,};<( h.1t{m?J+ZQГ\'|u$~M$NUN`liTe]EY؈kWVj/jzW.n[<%H0oIN'`JCō_'+c@W`Pc $y-pX!C֙x*ͧ9B,Rs$IVS | g-@_ m\FLJ(lV$XYIm![:\rHp$qs8UrXz[>^H5>یzt^nRHP#=hc$?ML6>}H}i;5OW:ޣ@^-.SoXg1Uzۣ5A4 ,奛렏l遛tźf%Cyɲqxf#$W\U aSEPՐ_DsIyEM:pY!YjscwlR_ʆ{X~ aZ"D˯n wWBO!gJvj> 6IC xqC#/P`jgendstream endobj 144 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1116 >> stream xmRmLSg~/`-n1L! !BBemMp Ή! iCSKGePs?v!ٯ-O9'y.D$}W *Tѝcsx$0V{])n*fdggmwghNbt*#~[U"nytھ)hql&69&h mVbWu6K}dm&[ow6TF>$$$ē8eSMZO9Byv=[Ŷ]j= ar@^b!nb7Nq-k9gm0~n=Fvh" gp{uEr<jhb遃Gƛuj9$ (Y,F̓>yuZUl.;dtnкrt m/Tm\i .PzWI!z s_{"]+FWO wO/xS/KׯUA  †S5gʀ*`QX˴vbyy!O2IQ`Qȱr&k~]rĤd9[k87.X)n|F8T{6Ng'PMfQ93QbG> /JL?\ j<; Ha89^ٍw_VWgtoP %mOS:xǴHr{q(nIwߩo`JYӆWK:rB-0KR8Oo{y]Mn3ٙ)]%{NH|q P֡mSpЅg#&A.Rn2ч .<iGĝ(o%.> stream xX Tq *1@w\^$Ww#.3amE`g7eQh4c=,)X{n;,CD;&/aw0i 0`wUO*'a]NI/ED~q̨!aL''LJз}\CvGF9x3 3{ap-—D,\VZ{]~k׭1hYNj6 <`1k :f=3Lf62SMk4uƕla13Lƍqb02fYɼ3*Ɩ1Ø ό`F3AA3c$0KK 7 swE{Ve.lu<F[Zf͡?}gHА^f3vv v)vⰌa_ ~"ۚ L2N1 lR`fhw4|)#-2OnkI6JP܎xyI/p$ɔ{Y )JU8LǯwC/H_Mam)MFI=`>H qdq; #OY៥M'JL64.)M^5wƛpS./G/=tR;@Wj'C@4Vy6>iAg\xHD,Ry16T$20 @ dl5a) Q8"+y\M&r!iNz^}E+֩jTS,B'9NBs`z~RvwTer[qG?~17f(KH1qOucaϗT(r2ܻAϡXs)VE:I8X\BVlc])@F'㭈^:UeAr`DJ)s„%>ܴnw>_: nRBnbIӓ.G%[kj{OMr⯞э:~/We3`*WӪ=K~瑆x9Iп(Dž2  ]pxV5~_pjz{b@iC3g / WomSsmeN:i3 KZ*@>?4{uT!9zҙԄ8Ǒ826UiuXT{˛ o6sq[L%}7'z(O4]|lHIx$_MӟrY:]hZ6J\R^iס?^kA$<#xNxFbu25`_ <`x 5}MğUC"$ib>"iͯ&in'!dL{bn˘I=^js=2p4FU4+ϞϬh1z.bJMxMNE(BȊI=u`_ s*CK ejUBY/CD/K*0@Uzm^\ )M_ f +3.ƶvu]Kya<#p*N=]\ ){uq)ԖT3^*j -cM G*LTdru fЦ^c^Rs%~ãp #d H|/:GM:@ze~9yZ4q僶Vekݩ[LJ[z p}@a8 ܲw-9(brH"cAb5{@l9TTۺȉH}'_Nu2з6cgs<"Ǘiw|Eϴ/b3aeLf*;it;O570QR û3oIq.OBXÎ\EmQbCz*V8CW4^U坳nŁ^=1~ GZR\/~WkjϪ0vD; Ůo^/+pP&?< Wܶmēa&?544=|*~u,/ڝ [Y"O1ߌ7MxԈM&hFǑbCn2^&B yܻ!?fGao qh R::OUcIqѺ8"@uIa) cZYƓD_=撗xEY(poy+ǧ޿嘱E 2? Why.]jx=.y^',q%?"*:绺JF jЕgb`-=9]I[_?6diփ7Ny02_[. ͜R2Cu8!IЕ@Fԯ9ݣ/9B^^NAum,mߺ#jJJJNKS9zVN)%wpp|E*7 N ;X7U&K'd;5lҥx{NevŒQdnC۴z%vu*9ҏz+r/<$1>`uM@+$%. 8 R"?(jdߘکCI ʉY2s.SsycGߏ|ާՄK {,)\Saړ>$p"o࿘B o./N)^E}9 IOm'諽@//cI֔aj+>Ik ,\Aۢhetf/z*Bɶ~v:yCXnf"w$g=pT4`͎dXMR Rў)on<~A|ϡGTbeSVLho*?X_8~s9p^uuT I#γ|21m$ůmoXHFO)긖Z/Upj 87þ#3kj}>n^ b5׏=T{dqkdw܂Ҷ tiڔtH4nO&IrXa1LSąj- gLGH,]*؍?MK GPO_ʜKW9C,juVp oxR5¶[3okq!ݐ\7[?v _vdȮWth Fֹ9 u/ɘIJE7nܟE:L8Цr?idC@ֹ NąC(&xs(``a2Op1[S\ck8E'xie\Aնh%22HW?Cƛ ژ!(1VMLuvtiGOw|葃;rd[kF ʹf`c J*m-W5endstream endobj 146 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8740 >> stream xxWGkf 6edz'C ލƽ{nؖlIG{/\mMqC $k`! 1כ}dd;oG43?;WPݻQ@pɓLXFޖ`1XBo!oV|`?t/~.&, f;}Yf2i,[;ϐ\|<]~;<"mG ]C'x8fm0!<=lٮv5/tua43vUgHoW6l^eaE,]Tlpn+#WEy\{;7:mg.&O:mf̜5{ΈNlF9-xQ/KJfQèlj8CS#){jM9PcXj5L-S[j+Hm>ާS%dj)5ZFMSӨtj%AfRԇ%H~%ޥX=*OYS6j 5Q4KqT6P;TOj.HS}*AOA/j3Y; <3V;gQ+&ʦEt)GY_zK{t}tc,3~iV+CYv{=?+Z^lMd?tރr1 ¶~hHC m8~t#jG9QFٍncnm `D[2Nm[&)3!uf*Əޣ>#*Uz3[B ZuZ#9[ )9CGipK"5!afe"KETo]Fn9Ki',%7Uh*<{_dzr! {ѯ.hn,GU+Y_f&m&0 {,U?Vi2ak^ aT&ɰϳ,rPj3!rEՌQ,OUj/$$hgp#Lݤz8 u 귫*9h(FSp&E FV{$m#Hлv˶d/Gg/x_̣Tt&C~qX(&}^r"\cǵw+ȼ%eR!!'hu,̕·YǪriEf X TG{ y_Ez~cPؑuҠ#!<8QvHsirrXGR Rgs`zP?`ϟMw?*}&Xmޭˆp<6E.p)^>I ٔRsFڛlvy/ SVxN{\ܦ0CE r-ۼƶ FS/yCS[dI 2ǫD{h<ܤ+rgnOWSjʡZ/tpc%9\hqB骖U-\=?[>ϰs5IbJA :ƒG(lWAlFy+)C8׾A$R (Y콋fM۴$ &* J9UTt!D,Wg,R;{ȋ_k~etVM"Fkz<M%ݿٲf;JS,mYtpmtX{kxu#Μ5Gġg;i)9B2œ:=_BA}E~,Bod4467#;M6OKAVgh-+k&CR'-t <rQY 1Ԣ\W[lo9kuĤ#[f͚Jhfh0.NS'A<S ,ݭ/6VWUp {i )d[fs #6m?ֆJa)Fw!VTﲻs7w[Ƃs$`KJj !HC'ŏSEBfާyx`b!)R(HISKJ84%\Jv#uo\dgGk&/9K -o|Mp,b9LH~4tb9EJ|B³ vݳ\jSX!WWʿ!1H :bG>Ż'5}FZ 6'Ns+3|vxGcq,nE|7k F~f[Zq}XL/m"Z"4ca?N8J!z[.x1=mے3R[9u;@1E`ω#NʪOKNX9rSdsI\03r32l.lZmps\yeR~QPi!%)Ta 5Q^LIָ;jl@1^A7Jpc4yYDRԝe4hC!:Fo(_gܽu@g+kt9u&y>_K7Dgʑtib}=zuUlؿl1c^),) K उN$?A; gYF)*TyFj2!+z(TfǦs3"dHKuEGR`ڻcEVm)QO>UfMh;r飌W_d#z۞p?`S+\)=Wr*Ğ^"L9!G z[ 3k2]Tye<7fZRQ{4pS$^͊+? C.p!HCI3f w8mu=v>NJ7,Z235p—Î.NOL—p5_(ȅ4bD 'dBAZ߉J?dj٦ej!j@q MV&ovȢTKdy~L0aa dW)a8:6KPY ׶ukL^1ˡ e &Ajucu,//!awOiv bB4=L0n7>,̆@ՙ͌hXAӖk`mXDy8FGX+d %)v2Β_K:Xz6=1ƥ(E35Ϻre+uE{C}Lw8+\T *Wry#7N=K,ߌ+Jư zYeCQ2.NM#ߺŦ635Xۯ^yV_U|YWey`UR$l?gM2]ɀ>%=f KH_%>{O%WImb2vM=w9cS1m̢;'e4[<{c?:Υtc0ߏF&e_ *]i",$5ל FѴEqP%?RvMarUDS(*`Kd'd*UΏonVe%(]/B}T[;a'lt%8I/E VdNNb]wƦ1 yzHp.UZ(9>ḟhnd`<%ى_ ibO S#"I t'Bb>dn_]Z*YJ ☨쒌=Eqr7WεU+f:= $#w#n/&ܙ?l@-jcZ6Wr+j.MeR&evGJΊ0aі1Ɨ 2XzA]4c)tuWE1(} 3!CqS-(/B)dT8w]#i`Q_wcIvNh&kӳ8?S iɆY*1^%;# tDBp8de[TOy\ZV{Tbߠ0E4\6[S:`)xxE,y|E(M]`hZB;{,}R[E*!'V I$u|"C`+$dY|5ݞKv6"RZ):yx΋ol)Rh|H3C~ztFFDg7\˪J.!%:!2swdXf|jm ,c`%z֜b!Bk3xAR"4|OA=EJ*k!pgKC{yJ/EM gˣ*crNTT(!?: JrM)Z_Y6s>`mqE9 Z/8pe.* w\ݬBWX &.Nsɍξ~NCV_N썯bpA9/硱i! Bd=_6W۟WKHfGSoJ1v*g{i?{>hKC)tD?gBvI ;R^spj.C0a=VH/8)Zo@M66G6=Kt&'!K$,Y>U E _4}}Ǩ{>4j|u,n@1=UnwXH,;!;[l<4,xPLmZI¯ioY"zE뙦uhDzA@:W)l[+v:ljxGnTZ؄^J0Œ#J!0i}7PD_nSIcʹ{+zџ/'9l`Snɽ[2gXN,yJ\ʒHO㩀=‹;*#iԔ'_ YuEBx{I7kنo?omB] ^3w,?P* K+8^T [Wr]wя̿OHF*!ZeJJ'6|.>Lǹ),-ٳp MvqXAXJأCjbh{ s39BVŬ\(ɪR"̽}#&M\.tʆT fJ"(Z1R?m(endstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2927 >> stream xUV TT>8 IOQS!Ű(,ߺ*| GqxH%#203{fm"((C32Mv{h,ۇ~Z@]Z9k֯`F` xŢй?d%~wTMf]`6O]x3$ZEg({}Gose|ul&q@;vY:2C5:.耯u(I|' Ȓfd}xI)OpTTNzg 4$z eqSt\ jY V &4 S}!ٰ"!b"sh &ooɰ2OԱ'g(v0,!(.q81q1ױD%՟$p#p?MPV] 5Ilm5c>Gk!Pdi&xVAOa7fǀBE2pچrfpr 8!2K݃xW@G^ثqW]!WV{ ŜZz$lYِGd45uдIT,0c)-N?W+@~ n%/9:SeZ!3JL->Y\Sfū曹'.x Ҧ-T.Sl y5.ppq*ߌsgte6jԽQM%/UQ * %K*[=ouԤ5!hNfkcc%ECݠBqUQ%hMB2i!)LfL%ecKodM=CQW0 #Sb00a7 g v,> PT+{GY^2$\u[p8Rˣ{7`/iBf\ߒZYLxk斺G3[bcI8N--W>qHT RN+f=klF>=H;JmǪK\_Z7 aUC2 o?Tb CwyW.ؓe)!3C'.>B~JaA| /65 |A;,lITZ8oN95,GF'%; 2* *JaL}ԉX[?}0r2I&I~[qR|{%e?HY6Ė3|ށ_^pE g˷oq8 _,',/u[ƭ J0^p/1I61߁;IXw0F9.u\eߵz8o)Lm9 Ӯ9!Jv7Kݵ ܍(~pSLV_^e߄+jq·p= ^ D2Ni \RFc-y7@6u&+9K=ܴO2էs[:=3Hlopˢ/]![>w7u ,y`JSW :Nnkھ"N0+*|Tw2{_yy5'4x{CE]lm.m k;rmkYa l{l=`rYT_OKTttXYCt=йVoH;dzpQ!Kio 6 IOkqR͖[$?a'Q:᫿,渚x ];2N|<^h&nD *7\֊j&ڴm06H)ˣ`~5NG*GQKl?u>xEE0x_֋nGS=~~۾ԜMy+տaBܧqAYD\8K=!pd\ w[c !;^)d ~a^ًˤRQ*>ljqѨhKMܾ5< ]̜ gx_|P[ʓm]EE2k9ccm"GEg@6Ydb8_M)N;O뮴vC(;n ^6˩BvY~8_lSnp o?hΛ^r;\Tm_p"e&Vg_dE2К%%_|p"6Ak־u!]u8 0IKgsNlxYH`QꜸQ۶.,q$V:OTC;K,|XI/Dq>Jnv'a6>|ەCi*wCR yun+`'FqȠZQ.d==<tBendstream endobj 148 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5685 >> stream xX \֟ j .KN$dl.X[qĥm\[[}mjk{^$~ ;]+zQ"H2sD㿓"^X-T=w~ullƪ7 &[2Dymjyqюfxqĉ3]B|}B=|!> v\)P;Pls0AT / P; Gnq\( U8. u4mtk,d[W!+(jKZWټm"">U7GmYu@ϠU!ƍ0q)1Lf8Ϝ5{ΨsǬw0j5ZNͤަVR*j4CR!5GSj!>5ZDQS(wj15ZBM<?eKͥP);JJFyS,5LSB ^ޠ8zS}7,x"Yw{ՊUKV.YG;^%yĄ3w@c})W_YmfT~_vv .8vvv_HJ7^ |2;mrP`np~}]a' :qhнBu׃h(pMدFH|q*{-R䴸xÄԡr)]56)_5LkY)QpNT?Pcqʎ>9+E#" 6Xc{kQ8=2akp^cQfΕDu?{[0.!6ɑO*}aI׸]q,EOI^T*kmApat0($90ZW妮0UJlpv&]Kn&)WZrqE"ॷц#ca }G 1pV؋ՇO̵ÑָZTg,LNu{MKΕ.b"otZe;lnAXL@U=O䳊le<'4"1S?JB²̨nG$Fo&qUHE1S1o³Z^5ۘCn ›r.b{abFH4HXPRĵJ'Oy;frξ? @0. H ߦ{0a#.N~wC?0=2KX@tVDHf ˽= Q۩[XG] Q-j(/M{>n{|&'g46)FߙJkÑ&zZ1@?{醩p==7=yAS$@(tɮpC5Żxu]z^l }(<Ol~ MD`ہme/;`ݣ*$ gљK+Q=HWI[}j!14z=R3Ck9DH&Rřҩjn 6&RFr qQAJ/ы/5lMV';) UI!ɾD[yv#F2rQ1SoRfs= 5w[5i$.9F bͻ U>ÿR1; C^x)槷= ۮl.# wn0odJ%LOEQ&l\CYjɋ^,T}N 6ŢNXAAdW}AV%+ϙ/]غӌmIpp 1[QzZX ˠaIgjYzrh, oZ,[_oI 9 VUſAؑ${d`^qTUvU Esk~`2ْkN_F$  bH rbU7@-{u5e3f pG >?B5vUcDwDz 46ΐfLv{XcNmEĚ' C W޸p,11rt;lhk82*g_,30]sԙÇO~GWx{'YijGcBCT=_U38#w[MĔ5ԨVŭKk +7 f6x)4 !C ☩ϖkڳ߷TOB:ŠLc6[WC(;${}vC+ u|mYFSn<]u% b=8ˠE`8uU|@ǎdIn&J?l:y4xTAn>^Ki$kDͲH|; *A̅o&IBĴQ2tP6(=н|/${!)~Ҭ#e:e20kgUàq4Ba|lLq(WG*"BEN@KHٯ{ݝC_Q8tjH kztK¼WQY^nvxvg<ک]g׎7/u .1Ol@HZ@hG5kV)̫FJc;?sl~񲯺aIoYm dyq ?U$ͦ5*1Aի>EvG]9#K)rVzf7^_L!bȸ=@HomxχjYO?nq0dv3e UyY&L 3`'[by|G{QQ@|p<R+ּhl89W=WDg'ܖ+@(.WF$E$s\IG(A]+-z%cP8ҷa0FvB,}C/z CX糳ݡ__<ģqrSRNS]P%Ʀpĩ4iH+RJ+?u:O+ی 'o@AY6!19ic}뺳 o:pE-6#nϬӶǕWՔ'qG5F7LYnz2ۍWK;>m̈́ bö?>c~%fZqY\Scq?hm|P*Aq-oG#=ɑ˝Vl4^U0?#.d|+Jc 2xyJ:g_WGp6sx̺QCB328L]$䠌QG D0,6)&) BPhwACiu9{}kfw7s$87~G&sa)\"2ˈ|7H=>UBDO?^-{oV6wedq y^!y}C_Zf[occGQ ̊endstream endobj 149 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5671 >> stream xX tSպN *-"zNDP@QfŖY;MҴifh'i&m!MZ(2#ʠEAg;Ozo'>ﮬiv7l.g hӧ^N{(G=yhâ} y0|pc A9<.7CY!JIJ7)lٳ&=7m Y)q11 15q) ya_Jyܩ1ۦfd%^4{sTNjDCfҥq0*XʌFX} D2ZQ٣-ZK+m62ؿ OjvEoY|z8v߭蠋"gE^fv,;aH)nA|ҡk=FhhpJM@$^/=)?O`,6Z01vA"VUl!˦VxD p@Հd#^{Y3khu?ԥM4+I|"vM?/]H:MM3DFƢQM m*(|ډ&c4M!`,ͺThAɠNf m Dcuj}@Ȋ^&T7fdz^<4@[ Ͻ=G$hܜ=;HF"Dl OQV/ {쟃yʋq+yWB`4KH8@i."Wd vl=k/Om2)P(0@ XfSU16&arstT29^ط6)D#SXl(F *Y¾$~ 6pb>P&ɷ"}5UF 40YIH廎pn]Q"#G㫷Sbkԇn\ۗyPp@E {TjK3t[,?J*Ph)M1߭nc ݰ AI)"Q*B؅asz'MqrbQ?"@T]*XG玗-LD,';#?򍞤?;PpbK3I՜خwzTҚ_WP;vrvh3sMZ%/*K'DzK)iE-\\_LSC(=  &~ {Ќ_J/P_Qw@cLl$9&Ie^ȍ n+w+>ߎ& &ߢR`gg ݌^/BqG~)SyB 65mK<7F`b ڕ BK"P!J"h_ԟ5r&mFOMf'jT^Lڽ_tҙTx*sI@;RGV۫vwy:J{0(0-YFz XVnuZoq4 ϧ PxEYrƪ!2ͩX3uC{Z?mDZ*e ᰅvVtԍG9_{[ f…{S5)t DsTZ oG)0 D_hKB,$׫;M c7cqgozz/ڋRF/ 4Lʴ/ʎ5U[ ĐbOi֚EWbQrؕ[|NΖ?߅Qj qcc%RcbsOιڃ^z #҈1|8+B?@8)pnjq?A&Eǐ]{cX;Nx{T;a_1dlaWSWY --hhP'vb ΠU.P=/@)Ocڍ#T6EC@ ɐ`N 4Z+PLsG^~L~v.[3 )*Ƥ 85]:]E @*X*j(Vk¤&0reݼN.N|JvX`A%)>:#F`yEǓN1k>MͺNc?ނ-J]t㗿gr];1u T*;NbI\ Z].:_7TRS@Rb)7sȲr#D;<~:EY> AcX7'0yFS]?EOg[0)!J( *Tm/؃ Qߡ/ rf)6js2Rq[ӐCn{i V̼]yJ5.,bVdͅ1`v;}˰~wvP ]N}cu+-hh~ؾ.ORrncrN1g*K k*fՊ5 4Zݭ{\O༚.N#^/q۾y-v ?Z)Zutl'QxySL\};d+]PE-* P-B zShn3XrF5i@Ӎ :se8ͪl DQy|1 h** eکG3Z))$ςTV 鲷)E)|? z^#rMxӚhyu&\L\3dg}Kp;],tJ 6yhv`20EU'&@Mc6a' ug E!͚V*˫0OnZJtW~+tMd2d OGǶsv#n;+q$PEP%hB(\e&[2c1X BbEFVfd2 M5HD;XۊT30`)Xp|1v* DCYW XU10P{OчH ;tgq @LMjHc2@{~}mA04snx@fu79FE>AX޲dcTT::a֔׽bw?Oȝo)??#&# 90ZiQh>2˙j;O ?G%|K)TMWKy6 $ оz>q]wuV>RqK35r f+ȏf#? ?Yy Tc̛KMVO|?  Z4pf*|EACYgYMFU m-5hFKMϷ盎6L4l3|=Iا†Nȑ (3{J(f5VvD;|1KĎ|nЩ #6*;{$Tv(tu*:4Z`z"R.sZv4 ¦semi@EiҀtFl&D|V{yu^=f'`'q՚ZԠϮlZM̍TC;DZޤ_jWQuf2lSo4N^V46'!IP~d)-/ޠH]w'h$1hը+3ߊ%RA߇rz? '#VHIKMˮmjzɀ ݇OG_6; XbA<̛ YUL$7yկYdtd,96S8x6x{POMendstream endobj 150 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 929 >> stream x5OuhZ*Ĺ%tSG )8LݜkG-hiV)& w}_[ ÍAf*1J1hmQ?Dy'y^σc2 qe};G;F/Ueb $zv[_.RJ*yߺJ4X<ȱx 0;K455M.Z(\dmu@e= >ֻ|NkژnR,.hs"Py'$9a= _p%DxTPWD'q4"d(/ӠxH` BD;i>ðyanyb\7MPd7o2g@a$!,mY Q:ǿFJĕg2pgaZBXF[yH)ڒV0蜹⒁ \Eli4&4^ ;GX]m̟={N)s?ƣH8Ñy1t]v+hvaΟ8z<+׀Dv)rL{Θ.޷mn~,'5qN8)N sv"IJ]HnqZ'U*Aư<Ԡmendstream endobj 151 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3408 >> stream xWyp^!$`LvA&p$i8BR706S˒|K|HbЄ@3!AI~)є|Oͤ3h4x}>'!Ə#$ɄS6,@.'̐2bfRtl1eŲ}qR~@'~LSPT"כWstvN\x9OΟ8qVUޕ1CfMbJ.JW8kiNWd޼EϞX$&UE{UYt2ıF}učY< f,ZT[ߛ>sC.d\vx%DI/{8?G`F"vIotTh6Q`*Go&3r kjY@;gq3]aEǰlN}Xs7@%bz(Rr&3007Zcod|%޺~R\/32Q/NBDP$B[RT>Z>gZ4-lQcLYc:H&?eN8ZsFd/ d##g#ᮡ> ldk/jq[6Sͷt GkZvR/0!a~@r :TG>H"-*f^Z#PzT)6f*ŽC"'cW.8ZZ)יD"g-IެI2^@/-"9#EN5 J^Gci@yњѿ V (jW s]V$׈3w/7).Nݼ.E:)o,8(K`̔;DjY N9 >zcCy,oq{/t˫o~ $7\[%6dނ[cԔ6ɵS(Tx\xyv8MV+5F@ݞt}_V7.]qx6ޚԂ&)fpր8)ӉX#`%kJtv 1Z >9T*k…TOJ'y~vW(Z<]1+)4S~q<6`+y OHCdpՊǯG"Vek}HkVUՅJ] cmG$}!i4]M9{ 1se,X v<{{ͬ3*L&@FgĶ*(gSK.[ؤro r+P yGP ^V7bX~T6Q"e`8Z?sKӘv+rs5 +6';3{TSRץ乪 xWm&\RVV/LH FAש}С3c8v[SVfbsfS-kQllCЪˉ+1ѣx4zL0޳titU%J6mw;)\mPU=,`t%>pJYv; :ޞ5[KT&.|{Ί%%9h (xܒޝRE%WރYV!PqKසD"a}7a6321?^5p@PW"Z71湆y}5Tm1âu-s0)y7r)Z8-n[Ů6Xޓ 5Pjjp6]/ߝ9g"jC![WQM0Jc-` cTuxsex8C+`h 46,&SYE n@6z3lN=v֏V$箠z *6{E2~P)o y Fk5X/[Z[5=h~j=u)u]:N+ '2>"6fĉOGA;41n&T2³7 gg=Lr)ݒkގ逥0q@g>@;.KOvS}gGXAY1B%Yl{;u}Y;˵jL'RT\NL]Mե/r݇BqЬxL0["C N>[8d +׺zaᮚ}fWn;!:dpzu...+"jn__-XGw Nvh&c-(9 wlG[iNw"k7}9<1'A:}T|_JO CJ9AA1j`-CHLn͚{9&gaijt A@h4^&g(Q"AM?mw(<^|%!D$EIoM-A(g;#==@LƂ{/ro/W`'"QA'V3}N d+$Η ƺغ{L!!lɓChw?zV]u2eԨ?T? )>WpJL;/B {%B/j8 xE(ì Bβbro+NԐ%UBlDz.]uwjAТ^II{ gwn[ԸW]ZtHg~ סR2<2aiq5qFS_ty ښ=ze> lAy \7!rI/lendstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4926 >> stream xXy|SeN#K5NrNdpFDQQ١X}Iitɾ;M&ЅE\+|Kwƹ#]~9{جXl6{W/ZsQAv 9%L韧0kƋ?쇉0&v=s[3QhEJhs{WaQA(eNܔEK<=?e…KR^ rRg x"Oi~NQH2gYH$XbxA6b_X)"Qa漊Vy :[7@Ln%dkx;Am?AP/Ϭ(t#C'1N# -pnw'D9noj owj%T!`3Y6-> Jf%Ն@;wHcS@0~D؁S*2f^ 'lj-Jyv2V,df; ]ER2,ac6 @b54ױ<DZŰ\2nh @Ji; ѫ*fy+ӶB9j v0j$鲕3~s _bdie7#_G8t;dXM f\K@7jEi\ ͠]64335Z )L#Y. mk/j8pm(z 5BayԦqHv@QmiAfNv#~5uq0|nZLuev\vY B wSeuީpJx"p0[A9U&߳s⟘Y=怘?I{NmAs;Es& .ˠd4;s$9(F-y)ʎM B7."kB3`40p4W0M$#^u1k30& @4(7֬gRYTy[ +uиgRW|'CRK.<7$7ls>/tc7Z]؁'Kg4yt-׬+Cܱ|hkHfe1K3Q)EKakh#LKmĵ$u-L5kf5}ު?'X]D:P4 E0L3%: hH(=.o&듘y E Tv{TD<6N24z[ׁeǞ<9aYUA@K7l%o&X=gohlrg^;/c~Y#yYS7myiuDm􇵰Ԡz>>Ajo hӤE6,jo Y) X;FCCï? 60xxИ `0w\5Gb]=;gVEy9yuD'Q|/׉EMZw+oi=.L8RV"۲I懅-%V!,5"쮝M 65.angE,\wb}ɔulTZ[\{:f}4P$GoKpqun0H{t/Z5%?p^Sך5@gCu Ґl ëP"3lZlX{dŞc{ܖXw3Z qFF\axTVK@!W*JƧbAxZ (NیVj z[6Z,#?X, x4Xhpcq1?Cwfcb?8 Φj HGW*N*_M[wlVѵܟ]e||U*q%OcVB" rEgyr[O8~ki&mi+ýq3&'V\hxY0sCg%i{J19hט5jVӔ$OL1u MiA !$yTb'{NF+zr O_ga)n0>%v2qF717bmZLUHruGkZ/ϣ{A i.^Q8bvMtة{g$5PF$ҬCNj,^ 8;xJ[R!vT7vx0?hO8uH.S.|MD{*C> stream x]An EhB)fE8,Lf6!=49n-~ࡗ5o}gYY5^CQ%ϯ pؼ˖MqKx+!d L swd}혗?s{VD΍9߲v vThxɎVF'8g6` jA I~fA Mt'Cʣ<@Qy<xẇdl4}endstream endobj 154 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1953 >> stream xu l1k}͇< ẹB^$rIRxǛM& _\$_^Rf|EqqFFR*4 C=Ө0 |Vb &µCSeFqQT[hܨ2w0zFi5yyƦfo`t S'Vjj^i3@JNfUTc'fA3&A/XMz (Gx82 G|Y.hhbNtGuS{agJEk%5u̮n|a9Ii{׸1}msx;}'CBN3dfNv-A5TlIhûVAs*'fH&%T4 LxlwГoOM<%Ct>AU?<]'j4zF3 X\< x[sĠ5 ̹8.}U<{r@ W[ CK|+(t0.{F[5].JD&v<'%hej4 L&U9&0A"=z}OsRPކIGF!yi$䙱q~3P[W=4~FǕ˺T@٬`(ahCp){[,EQ"R\-1Cag٨UlY\a,8 ]0b4/%V\X8 8D˫mh@'zyQBHL'bV+-I IRE,M@_ ̲l ҮM{[DxHθRd0'6:{=(lV؀E?6]D$X}ico8pOe]}< }k Zq>3Pv XHrY_p#٦4^B&jِ09D$uPlZTEx x+@"щJғèAߣ/]fpCCxw.b03^}vzͦ_3H- R 9ܥpA@L'~a/mjP ]rAY6%슺d> FCsZ#3qZõZM6y.RKI0/HKrA BzWd x~«8 2ϋ9Xլ,tf5m{`/[C%ò>e IӓP&(&)6> stream xU{Tu`g +ɴښ *H05 D|8Q vY]< ‡P^.e\D⃪=bP)&c;t949=3gs}wy<{Xkqa~ccŁ y6h.f(t#+ 0Xlicm]<,1[D#E.nnkEn2"&",^ea*n #bĪ4*}ʔ0IQvbE8R#Wdb -%$ #_JW{z`AN.HiZPkӇn LMYlXylK.B3 BxVpigZ-GZ܎#ƎBFJENR㴾'$IH[Q-mLkh~E\]pzF m 4Bց'c+bw>47shb9zh5~z&Ph;άEggk7m5GuIetW(ҥH7خ٢JbK5{D#]&։{Ei /9 h[bDphgDeܡ8yF2)}h]+&DB>|XHaidBf~VwO94ASD&! >\M(.:Y,Rȣ= ]%F8:PKZZt ZB橕EI\p[t ,+P=&vhbMa =` 9&Z?_lF/yAxAq 2R!=ʮ8+N6u6wB?+ۂ9(BymS&θpm<MS.px]R[lۃJ5مy 5i! >Y\6XGU ],}XEZAz}G& 52OViOL2Ht!ufb'_=f@[FP6r;q%-Q1h>XQ^qJѝ O?  4L;Y_]WTYAXr/ {ta"76#!~"4Su'Wk=^yC[W|Ki? Ϛ T23)56>Q'1$: :u`9^I?5pι ʺ Feg.c6'@ !bY2M/>@2VnnL ٥?ak#U"9ZNK=j5Mqo B~G{.`Zu}爛Q]K`dU>C-Sņ*[nk'l<%+ G \c9Ǝ{"kG7fl:<"Hr_n%_WQ,GZ?YzgNΞBB8ju3#4RGs攱EDo-˙`vAm2%^%;_ڲlQ hIݕ?׃cIևo"Hu;/PqtMRX=%c-Mƣyz ?GícKp2D#e]h芫N*O][Rn,Ma}BTU_Z[Yhh~r 3rBS2?X3RiF83P5LiƆ4s3\% Z1Ù-(BgՍ$P 3_ *$i'I\p#T 7! iƻ+haUr-lV`/j1_!endstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2124 >> stream xU{l?d+w*(¤6@*HB³IH 8q?q:cljM^pHjx({hCHtڟÅiG6VtN~x<`}~+_H~1#`>̛*g DkdC2_y&G<^eY^[s@)ZTX"/ﵥ._'Z+k*EbImVՊ͢EP*VjSSӲJbT^KEMbB,WEoH땢JX4syTШEjð 2MkZa B+ƶa%Rlۂ`q,2͙2Ϻ'P}lΪ4=5 )TJ;ChpϺ}DipuB7ɬ< T1*?tA]E9(!d7tPӌ=8dnX@/EE4 VՄuBTwgeO嘒i2KBW$8ꊴ;:ub Ý핬@]B x ?CpE(*ŀknWpkx]%zrbp7Ԁ\SÌ;#BmjAamuV9qeFB!'4rAy ]I+mӃ_~4 +jB6tT}L_U SxçS*LvL =DG'w>+)(l%e;J+ߠs:[r!fvq_TKLc͒좗~l?-+Y|!<=Q$õu>:=)Ҷ+e Ic;O/O;X¦qXrKFkӿr}\xD/ `51IN;4dݯT"Ó]D~ADMnwײ{=@ OLSHdR:'+~cdShAv0wxOsXU ?(_2FQV?q=t~䞫x{_B,#>= xgHPOqaҔDEH{DkwPa #Bؤ/ϷSo~s͹8$mƤ#=6Vu[[QC=8> stream x]A E(X6vMa!Eo.>ɛ?O@_ *y tX* ;W‘ 8:]P<٥N%`uBvҕ%<0Q#2[ UѩFx2'{N%8{!Nbc/nqqeendstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1695 >> stream xT}PTz%HD #cԈڄhI1c]sY@>cw.C2Q̈́MRubNg6v::ƴ]`Pܹ}sw犂>FEєWKE "cXokd/3$ nOY< NB6ͮ` ~ksUB !aR>.  b,9O]NGۖVn[9öaݺ,ێ YRTi+(r+|Qn{iw7/s>hCCڢڵU.GNz.=oUn۳Ev :e+**\r~wk%n'j?ǝw:8\Eںh *z>핥JG})Y[]^x']t^{\nA//LBKy!*ŀ'qP CauqX:ŋ1żt:~_?kH2 fx^_.3~%ء4a >:~! K=v <|2!lAW%#F֝%)h+P;rbP4zn")3vyF{s+8' [&CYEkhEealLAB1c5g 3T>~H/c]kC~ }~ut'Ny@Iqtia? -/Zgq 'p`&K@!?.쓿m6G9X6|`7ZA<#rb^?ؿe>EQ vesD> stream xX XSWھ1zQU{ދ:uUkźŵ "@{BB d9XBH’2ݕhmն֎i{n<3v< ;|]ѻWX~4/ӹ1 AD_bџxX"z9<O;kR|_ћ-#}馆QAÃ*u/o=:0hg<(sUC†8}ṻ3tv 64yaøl 9=|#4⧑sG mM`oK:YdA&)M{Mt̢\ڶq!A>+"ME7 zh{8B:i@$%&ֽK7Fgv1`(fʳYwNr:'iF`8䀵Ի܀:Z-,T,n' 8P&TEg?kw+?:]oQoh}܂`>O5$Xbg;^wmӰ+S =XD};86zYo_ݼ,3Dܼq>z({-+PQꢤ1U[( mDuDУon!TfMEIɀ}8o;<1%&n8ՇvEhMxPQ«nKNcm|،?8& FQ%u5&`\jk|upDL1ۇ''H@UyJ j; 'p%\fHA,CJ =BCɤfyWq>-0z`=ZYt#w$ Ǚ| @A$WrMD 7_UH*X ㋭|VpGrJƦz2@n ;i8kr@1%v+͕5Fc)Ib4l!5E;J)*L>V  J'c@o.?mvCT\(^"=6MS>F6ǏF/zq-j kge2kU+Z=<i8Tg-PQfPjp86Tx9mn\1Fp l^?>S}Z%6qYAns˸tM Šωo~c](1n`N=mMm| (rjcɾZγ ?<ՔRqQk^$'KX(hk~SCI`,EJZag17&fXGnyy]þC.PK\\ I8w:/ҳ fFol1^P) NQ'rD+B#QF㮏VNԀZK5{Q_jyp!Iy~~h&o`/ɝHŸC'<`gjFp:P`UOu#wn!M=8~,Zr7.@ "5RɼG "jw eGA##=ҎlONVI\ZgUi S#kn65W1ǟHM"dϠhI(t_Cpb/E_ ~ j_Tr>Ű Q yXS2gY422@ӴZfT^Dw{xNW.g)9]J%d(LƄ8>].gxD6DD԰ƮYZ'h%G R䤂,x $f>?Y>@ↂ^_ɝڀU?C&Sa20 BOa&wyNC>x:Q;H\'[f*E+K"oφd76?CH9dOhHFK ]PQvD̥f(ZanbێnsP?@+z,P*EOHSo1Ֆt4w^Ƙv`պ@86V7- )rRSpC d6qPKgI8ӵ^,/^ǘI{佦7""eG{u! {]p[v%>ˇ)nJ;+k F֡h?ns^RVvRo; r:k%)[4gR@〈 d͖vcvɬmE zp8.t}DM!CoM8vLV\ я# l .z qa죁ګa~~:=8Oc׵FUÆHQ=#{uWA߆cI^lQub%P|/|UH*BUnd5XS TRCڿkbo+b7]61o8bG}>7;OgD8͙ ) 4~#߁W}!htKw8#u>9gV&ѹ|'}&8qc6mNmT}a^I+S"gf JĪi!V N#5̑oL߂w&vWM٦1 R!ٚPg/y 21f+5LeJP, VoюY<3)z]\߮n{<}~8Q7a]Da?P%Q$>0+8NUv'Y4DtbxUohE?, _BvY@>4 yof綽χJ7-N<{/("܆+‘@YlN>YO[_qjP+ S(=b IuSg~y{VYgo1S%z3._ 5DiIX a}77nKtt$zˤ<$&v t)1))%>ŕݼ S'a _i߻ ߾ZhHy/z$ZbQG~p=f}C//0͕ahXߵ_=<(ÄuѦ5P6=q8LʦLe QuɢzvJ6WϪ끌 M"IчQPj6,g{}MUNl=e~-&_mJ{fnBfmL-H%:]̒xi.{FSGn>FӐ꽛kW`72zJ\jr5XTV;|y@}P\LjTQ\d!^3U,%@,l2HN>ϼYuTr \ $j֕0{:4@KC}Қr"1 R6Kii.4AK)+)öw\ 6㍔Ҝ14ʀh[؉[%6}wmK^[0.wm1k2ڬj̲gl &== Ooލ}kHpIoJl+i=[oTԝ̘x!+5E]0ZޜCpr؟|FWTcUi%&& =)ȡd9ՖU_RlH-xksW6b@(EpOXE')r*1U:X^Μ%F1YhV&ЂԶab*Xa\MS%Sv/ |n(65$^,R*RrVu3c-X ^㓪MS3Z&[_|- "-DN$ ~pVit5f8275ndET[gL |iוǷ` s{Ug%`%Xvb;h,\m)Y0]9BmQ>lEȩT4xTSU"3 n5N 'xOkimMyHE~r?5-FtK- l$ZXZB &uQr14B, 7VX"/z6셧-0 %R`8T^Eb3dF6CM5Kt%VeTV%{A WD( 0*4g5v8a~pZIZdD`Mڧ` XZ nsqI$h(*YufJ@ˈ$p$FY_!g5:a_=͇hYJV,J^<{vs{LZž̶2 .Zp(~L9Atendstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 451 >> stream xcd`ab`ddds 4H3a!cTVY~'Yxۗ|<<, X}/=G19(3=DA#YS\GR17(391O7$#57QOL-Tа())///K-/JQ(,PJ-N-*KMQp+QKMU;SL:)槤%ٙ@2Y)v?R+.1gk&6G,X>SN5igU55V2ٿgdǻp̩QYU]W9Ű]?S U5Z'+WB51|v͜sM.7sڅ3Y0}]]ZU̝5cNOӮ r]7v+^~ os_ļ )endstream endobj 161 0 obj << /Filter /FlateDecode /Length 186 >> stream x]K E笂QcL&uҁƨhw/kKrυyp6ar^= ac5*#L!Ʊ*}j"gW9SbHy K tR#8thqqθDhNTes*ں%/VkRMYS孃GJBof`:endstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 681 >> stream x=oHq6s ?"Ci :ss;ssn9i*A" m^+4<~0P[0 ?~LnpQR6xv984֖sh,wa 9',>j#{z{u{;n{!;vV[\0=~]]uL'uu({%ydn|=F]N2/=]¤FJ{CrW/̒OUX,$TJq4>/EhJ,quKQِl@7򨞄ВdTtƒtAE\CęeX7݌l&yg$7k_q5Ӌ"L@C~-^ ̮Z1KSJ,Sb&)f` -݄zㅥ-ܬ8gׯ6rN 0 -3s|`*{69Iӂ0^BB 5>-ϪWB8+72e 4諘\AՌHt V/4W*'L̦rS I_=UmZ/H2endstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1066 >> stream xukL[eYWL̎mA.S3-brʸu(FZ.aG #ndhLEf&f&K4o>{{(K+ !:'+C9U7_z.vd Sa(nƍq#;/z[tѦc|JUǟ(,T%&BktuҢOw6kt6륂^i}Xo׵^MO/@Qwh>ZMEQS5u*%s(&GR E$/"~^'4.:}Z_508 hf"+6]&Fا.[[Q+|)g9#Gܙ`~Q|4p;NB"d$xgE2e1RںեjU1U5(56EbXћ]H0 1A~o="(Xb)E\k˂XeAě"}WM*q[%7YBݝ;09pp KݰǘH"F0W:qXgإ5 X Fw({@ ;9շ]$NL)!/\6k 4]N|S?xyfd(ֿYӘvk7f?8.x7SXmreV|)"x׷HarB)Qn)abrCy/~{BP/HO/!i|.,k>4.@ MS5BΘj<ma> stream xcd`ab`ddds4 ~H3a!;GOVY~'Yxۛ|<<,+&={3#c^qs~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWvt-(-I-ROI-c```b`f`bddc?n.|o7fEte좜K\Rw_C nY'űpRmAniZة-lγR_Stϔ<7o3{gN[qC+'uvu-~ endstream endobj 165 0 obj << /Filter /FlateDecode /Length 7520 >> stream x]IGruС/9W}[4m vMb~#"*#ݔ%ЁUEddw1ȍ/O m7nNw'<x/CQn<=IMo'[sxת]'_o_AD۳W?:JgCJn:Sz/؞8hOw!l?9i=:)?8 }\c*j5v BU)}>m+f.b0~~~ 8L7Kj;7dl_ >hߟ`D~~`뒇\0HQhg!kq3,bzvΝ԰:lv463hD)Kiqm4z, })y#v{1 BE}LT!-2yȎ9G*j4iFx! -!v0[!I/x 70ԅASR{i]ae®q=/ K:d*-ҍ/u &B@H_b !Ω ,,H!Cj*4z C>ݱoKWHqx_3\D,AI[,` X kGXl-h@@e량$T|3rCvhzp 5lh$ $RD4_m\vap:WA0bCbj.H*L֐$n]uwRV+<ЂIG f10豟26̣@ې[~hR/qk@N.RVEBz8&FXOF]( S\Ei3XBA:@1,wZѤ@?ec) hOƦz1Z~ۿK_ȷGqy'KœM>j| y-@F.|y~ڴ+0<9Qws6'ݖE!(g5DžYyZ1΃7$`Om)0c*ϫHb*?J?i'ŏ xd5_dz<^w"{Idx7fWĆVgG5ϡJ/DyuIGd~3RMq~Z 2)Ai`*dW8!W^pQm2=@6bTgBt= V1ӷqVn兩 2l:@U!!MDyM_53gIMtUX4ĭ +ʁ4@D%T6}%ZBl Կ_w q#l7Ċ^_y{8k XKv؀Pk,鲧˞EˎƾUGcB RM.B}!GLLeqkP2"Ia#'r<~;`$̽qt$a mNWx ЇPY¡A4o`#nȭD}Lk$4:r` Hn=wfN*rZ+<+|OY `nfuV,rs8=W 4&&^@(#(PL-/ g;'31uoR]ʝԒa7Nv0dڙlL8 Cd ż#\j[#g4zᘱD2ђn|p2};JXp49{Y.FS+ Ӻ]IߟZǹ8uWYK YܗL=8Ef .ŝȏ8Zo/@H4ŒZT\\3jO&ɣ2fXk8db;yJʯ}<iElce2Sx2gGL8Tu֖UB0D$[ik%1tp`Y70[ H{d0,t,*עO+:MnuUU_yfOHz`;o)0&a;c p tIG~A4*?ߤNbW(i"+/xw.~1 D['CXfokaisҺzloM*9H; qҍ5^1xXo*_UYb31m Gf' eNK)Fk-I: ;g:t[sp[V՘Mɨ( D]L#0ea\v8&a葮qWɞP8`BH5ƺB p6OL z ,uVv=.^0hwM=;fM,Gw>:ҞJS'o8 X8-\qu2SҦȽ_asoղ;}a[SSH6Xh4N5_ +gs_`$m\H纞\)Eq_Ci-lp_E9a" B*gњRLZo H,N$]|S>hE ȏ[aĐoHmGZӝoTfDV^>@G6G{8L^W{V +OAO~ `!OȈD`9kST5 mNwx6 / ѱ#G$ hOG|mO!Љ`"xS4_raZfnsI£`[ò d%vWbfaZhw(x[ͧ7蝃m܆ŪP7]:3ӷ0'~Kx_V⭰\7פ%i_@ Ȁ:8s z]Q#+F\TLBcnHp -?XA/D;,^q9ͣ~G7GhRe0n4rQG1qM=o~;(Nr;D+;b UB$Ηx <\C #qҷ@[+mK٭/n|"g6h={1XO\|l֞u0chIFI;>a(Cޛhv};`rM^ }Ƀz͕:z%ޕ҃ޚh^ԅ+}xcfNYh?U17oʕOӳav'lHvpLT{;d ?ja5f~*C K/,Ļ%b]fAͮL!;#.xXGCstz=JE<[i?+:][s V6$*A,ͬZn9`=9t֖y&tC2P6L.[N=N 8 FJCΪ97 s9fjRKB8պ5P}] YMH,lE2@+g{IH:ʙ23h=>U;7xSC Ő s"t@i*{6\/ hò_.V1 w7g/Vshؚ$2s=."Zffhtyz1;\У*IiSAY1=SJzQKgktghk f7muSEv!foM\rTKY92:2b65<_2q{><ߞޭYݞТ#ݻ<~ǸG}߀fӇ3艹5x<3:U3ߣ_UCn 6C~4m{?M=X{ؙhp{ўrwƂs-{}_FqtNB @[cp}[bmZ}FBI"~V߯H1<{=+0 F7M3{f7?A?QG1iΔ@iN߁ Yj5~2bpMyPcp䮉pXI?ms9hR;|9e.Xe ʥ5g^}5`ufYDHXgɎR2rJ4X2E考UWGǔ.U)3F~by=ћ9/WWQj̫4uuLI]׺#a߀:#lUňkYW& WgIY*#K@]ɞ&^^ªn3v愺Č.&\ʷakhjQ+TkbMPf<{ZuF,ت2<'l4|Qyb%4A]WRs~,ى@F!Uug'{  \F&? ӷ(iǘ}r<Ù\ҍLci̥²Juܲ|Ի[!+jvt֬h mʙLƗQ1'BvJɪDžTT,[m PUVrb/ KkTDB`GЂҧ7oӇ39llJ OR1[`;'T+$AW,FoD8G&9_c M9Q]ڀUȔ*:8[(EZa"Zlf;h7~a.Ru,SHy$\E<u]4{$Hݸ&;y$nΓkw9i,!oqS] ւw56j7$(7 5{NS抠U Y=nO%K[:A||Q] g8[ D櫝;?hǐo>؀ő਎q`ݲfy4 F%PO@bC+.vܩHLy+7^dǒv-9Y| f`JSi*$2ZW X1nShq( WdLҫԐrSzT֪j"+[\2ݎl7<Ē%*b>z`}XCe}P %r:WhGtU樠꛻;.U ؽ+lQW3>HYO' 7-7Wj gU]Qz_b?t7/{ͤIbT,1joeBNg܂_IˇMy%d_e][LzϯЭ𩯹-b^ V," |enonB#:v v+|A9yl?mmuaϓ籾'Z \͊eߏ9z璋[)i )ezJ8FH!PC~ԹoM4NJ %^(KL&\XrNӫu8Uñ0Ħrks2i(H.7.fzP|U+>DNq'sh"ovv[ +?ve9>}+&P(,+O]xUw/=49ydJg\ *䣆!VW4g (8NZżmE' t|endstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 359 >> stream xcd`ab`dddu 21H3a!]cO]VY~'Yx|<<,k$={3#cnas~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWrp-(-I-ROI-c```4``d`bddI{L~]/^wK/r@U~}\<>c] g8uu{wU8eus-<{ ~'Ncu[|>I<<20]endstream endobj 167 0 obj << /Filter /FlateDecode /Length 6950 >> stream x]K7rV䃏㓫cZ[+ڲ-!))띙@ rw<gK(.&|~œœ?<EůB  .>~_"QM7\nfxF-4axËV)xQ7[4 %6.`z )%FuYi?f-ޔcslG1}v2]|I/zVvSWE0wU X_lH "vTdPAƣ~xGN;w o\5\KГJ L7Q2K;r") I2B5;餷=z'S!M;{2SD P5)o5>Ə>= ir}=zG |)JIAIM6tkFgtcԣ0-,l';fV-NۍƻwQip&J_$5-m$)?.+3Kٻ4ȶOl-%Lk~.KLmQ.'isJ&LzH[%} ڃE l>hH[8z$$6e.XSx #uaGiD$5٫ڡdce<9 #Js9Y;b`q4!v\='PpO,4?daJuYS٢Ҕ4!z ȁڎXH_8M| & ˲R)Nq]LJիR|≩U$Oa*{B _ժ[S=t{,իE5=jޥ^S@éW)WyWtmj 8Ν)n=W0f]S҈`fwy:#R|L9J&~$(nzɣV~;eZQuI32BfMETna1#EaKྞ1lr!u5˓ K?BbC"Rf][ϏV`\z.y0rgJaZ|BN/XM_٬V1ن?;:]ۨhLh(Sm7kumhTjwsn+$6GсHx+2D$=_UՂE} /A:r Dh:mU 2iA 2V؋ʶ.|i除% a7[G-P 0Bص v?fU0*QTX #8NsJ3rv̩bv3Fr&$Pu| dEA)\*Y_6)'Q+aN4Fڇ=Ra1J8{sYBYP 3Qi~#.nX$,w"U?paWr[ I;bk!QARP$?)L fL U5/1 25h%JPs̒fGzWO_9jFRٟ؟;7XX0ة|WmHlb}+.0RX̖M7mqΛQ$д&}ݎw8C!Bum>`)\Zk%h[y@F1{;i,##%wdA ر4[ƈ& ܵcv{@BN^ dgw8c@(΀}K; ,R?BZɗ_e[?6uO_e23it #R)昢bI&HaKf'ؤrꉐo{NY f282hZ6>dAGE\YϋF]kg͔2Od"oߢ 9t;p1I 0 탈pL]Ze6lej &P'I}ݟ.SbFM~fN{3ւ[~؝ rUV&UxzڈlQcGnUkо b j`w 6iwZ+*q]*ÞKS@97k&x["L$ IGI\!, /DtH0 $>-@G0> $Ev { m&h4pm%2 %b@@;1G x5B@u+ɢd=ΐjp5XD!s3C-0x: |Sʾ3-4Ћ5mCoOز-ff2EΩżn(2hu:q!DA\J#m!k:Y{uO9%tO7R%XM#rӫ%MpN '^t›_Q^S苷w.q[U>+{' |H<aMi3B=aCM>aocq?m;ӷR)1ؓXϢiYoWgOg8\Q>5□B :S FD b$3tTFhS .&7Y (-fyM+-kSժ>maMa}FQֳͧtײo̘s9pPxeobtxQXdçVp:>Nds)m֬%Y D=4WU LBnӀq?Ru-hU_c _=~UQ [|)wI 1)'Ohg3Or<)՚8[O178:֗*_0E[0~amJ57|%Ⱦ܉Km)ͪj6i g_XVyꗾTaPLA'cj| !5c~4Ԡ7 վG&q4S!, >pF, bϵ kUŢ9 cÒgXC=y),2p-l0&k^÷,ח\?yr]Xˎe'U4zr!(1X_A?*"Ąb~N=%^ #eO8 teβheXޜ: nT=|'m8 渮6=1Ly`bǰNToۇ(eU `A `v굠Ӎ(ĽJ|gȋ"(RZBithV-ld&jE(47иTM8c }"kϥ5@@5zeH,jj¨<+?ﵘ*x9qT8?* 7I=!XZi.[Z'] C69Rٱjtex8f*@!/8ռc$bߛ|v^ޔ.1BZ-}y"t=pR}}tI7Ty;]DCusViE%P,[I SQL QQ];yIk*˚:T{T:X`dGJWPٌ0'rJ)?Xc:\c)x PpYl-I](ʓE RO1-ȫuZGi=~WDf[ 83^%!mX7WDENO6c4kG*9ƑUud2w"c,/[Հ't5Gyb 5Z zCUVtSKR8cEU"+Z0 2K7(Nmaij/>P~h䟭Qԫj(DW=DzxpkATxy$qIw?"b>o&oXZ%`e,8 #MiW ˱7ɃGTGG+J8:r%J ![oPCm߶@ [ 8%d#NBOp*zҊp-T p/c73's\uH;OOp>H5Of 8 t[!?Ejn~sK!S. g]yeGQј ziWT(`3G)1+[F+ Niji]qf> stream x=Ms%qwJnU)KÎ\[NNޒ\Z$JKӍ URa@w} /{D.O>]S9(w/NhƟ9؟ >X( NOnbQht| CZA*9)Fg3|:gZ`c>?>%q j: T{^6F'齋f1?]3 gޱi`n^>hoFL ~)Z$Y3!RؤWHK:LW =΃4Psp(:CZ<.y%Hg/]F*e %>:}%pF3b--50gow[z̜dy]'ؠ'y7NN1BxtJ"lU ?] l |c_ֹ/ |5-l`3|1h2C5"E$)iv*H_+ gAVx30 i5c*\f ї I:p IsP@̰4[bN4ARKBKɐa@15cpP}6Q2.Js0aLW=Lm&x3F$3s0Am%8+m_r?D =Qk8'.۸bEט A0;k\,Qf | L@xj*F+͂@p[h̫J r'Ta!@?"vڎQX#ױ vT"}R9NnV蝙1EAl Ārh\rE)H u=b&n%1~ H , Q\Q ܯS7 {*h, C@q!f+M0'=j͆Ž}~Zdf6iڜ^#)#+`eVZRZһ' ,qKmk#{K aJ(Fy|d8#mCb_8p Y0&t\9#׽j|s 4`@s4Ls+!@dOPKgo {@Vv(hA vidx0z}EH$Y pqdaJ#}4ɝ k ҉{81z:0J]:a%[ Ee㰩d -Xz&9 ^%)/H1D'@8cS*J 爰dkSwN7)WfÒ?*hL[Տ1~]+|lI-i5M xGHE }]L"OU3d/lgMY#Q$h hye0Ȣ#P1:Ra*j `OI 2_' i-fTM$-fin3ĀR0[^l̉Hi3ȘJYI=Qi&т_ |&4,Q_'@|2L$hfr?,"Tz~)!vrѥUr -QVy9f+G=8 P4`beHWbEU{ TA벛z؁ۂ+s~k"n|8TvS[ʈ}~2} 0XGt)5 m++e)@ܽ%)L,,09^<`+.醧lOlL@H{Ѥ?{z`|@9;g/;?CX~o&fb슻n`-PM(qzbOtp\[4_iPozx+qXE K (Y~[-zQQ^$ѣIwtbws7ؚ ڷ5bՂXd}J/ƥ8 FM[D ̴m':N'ٕ|RJBH7>qE`&qѶ.FQSE\Jpf"܅=F C)$9$gL _%!E(r6 W:.^[',a|#EynIKbJO|UɶZJ銆9L)0!Ϟ5>%5;IX?Uhiŕ tb:Q)R%NڸfmM٣g=L$KRLG6PȹfhuI9Gk5YF`;@gI$mA~DB{FI1:M(~F$FjAZl(t !v:&ht+3vt*b 1D85,Uvhё^̛$ #غ\uM0}`: ZTOM-TmRkܮ?< HT%z`}+ifE^Od u +ɢڈ8tgLePI~V}ySNbT9&eo%wU^2rJ'*vrȿT0Vw\ _JMoJOrQP%"oe|yCS3}->?̴ O0;4hRB%{d^PҀ $gɊx˩*Ү\t3rKrp9hUS*{< #jAubDKΊ?>T' (ժqLl߱ƣ3u]dfol]]w9YqS/D2 pG㕍oya:RM* ds])^&LSj:'LHhkclE7SG>g?lļRƺx+tm_B}~Ҕ!YǡߊB,\>,fk3!Y ͤrAa苫g)`4n^KMH?r+D|3^171!-?mp—Jjc1ՂthJFH;Xu9:r/Y25{#mq,o)م{:g 쓦$+x7 :{sI1ΎDZVa\ 5:kK4]|N.,aKy>bJ-rz,,] ߢ KLNO*Y7,pфG:}6Gׅp~pTERiUX( nvSyY`#|ImbƘ "; lp2؁A_=޸+42͏ ,y 2>njdrJUd5cN74 {mۭOQWT+*\K-_3λ̍N 2q%c{)N]=<6cMV6;~n,۩+S֑^11Z!p:(WYNC䜖])aՄ굶!l}=>g#u[y>ÆB4ro%x<xS)!m4L"KHt,jr_ָ./Cx}~(e% ˆ"ᚂ#w%-#Ӫ(ZO+1tjz\Uñc<T^e1DsQ#^3>.`.DFb3ҳJ*urL'=I~dm|NQ wX(ܘI`>PTIo-ՒB6ʼnRn} &Bv_ qF vf97GWMت / QW^\9"M߬o8&Mݩ1Xr1+[Uk2tY~2 F48B5caG+H30m# V4r?j9$vv%ޠ~ީrC5jEc5]S3M :cf uS[~P*,Ju<~K~9 ?j+7Co=[`w|Aw}Ub, -?N^ǫȆ}O,Ý*oDǂ׷iݐ}eS\w!|Wo+>gpWѮmfWwm[uxJ>`6j<=M/]z#w8/hϪ$͠d>u Wya~uPNq|Jo(Z:OpX bS-49C%_hDh_2\lz:kKܷu ]1K)$.6Ku5adz ^P1*ȧ{"Q)hJn_o5{dZUIZKX6ߥn#->5RcwBkj|@֡_Yݞy^c΅RB-0xIL^^ 'Itw:Wͱ߾ؐ/V1{'urk VRmǛY%u[͔'$ ."_Y>7teXu OB\.]0pgte6z#e>o%luXֆ]h]uABXG*#Ȥ?wѹ2 :{p#GJ2 Z+EC5R xXIm&t-FJфYr(䪲0$xucbSp&|٪Ls3KJ#lsϐ`$S۔Gٹ q3\LY7so< EO%'DI߁16QM}Bv-6ͮ2ykگq[#Q9tW P75o}uQA0E lA8SοʂF2RӔc|>`-pHށtFY[f..M:uTxYKl4j{2 wOxE5%dr3G+++\]UtnQ4ob,-d o X^d9k+.u/%ө3Z`y[Zz9Q]Z5)b%f(7Lv]y͞Aw*HȐXyO_ٙڸ6[f>0/W [NNFh,_a+AH1 ҍB'\:ʂltYRf!3nV*A{sf %Ϙᶧ#B6g{{DHTQ0db}0%ϒn-F˧O)^J.tn'lK]22/_k[3om u7y:#r)]Y-VcH, ?̪h zH]֒%5"* AQUU̻^ ~?}vendstream endobj 169 0 obj << /Filter /FlateDecode /Length 5651 >> stream x\[\7r~h,tV}/ī D̨%{fz<{W$Y<}Z#za0)źWN\ _jww"VNdjϧ3cQN_r%+oᳳrb4)*) z5J3zD" pRH1D;\uJ6FK" Ohcy?0zQK,e:mpi`.uF7yO@RX ǧ=p]oN B!=3hgܦaBMh__FpfhF-rz~2H>0q1rIpχ?7VnpVΘȍ; }޷m^,LH8bq6|݆mMCt46iC{݆|Y>mCou޵}ϧogoOf' -c4cIBYȞ7A$ >iC׆6dc6|}fpۆm wd_fFњe4U&LϢ0ydm& 6 1(ѧ /mmu7&~qzF0JD8XVR޺Q?V'vF)+'ZH; rVQՉΏN3jnuylJ})bdK7 (Rtp8e&ߜ UҌzZ"p1*dV rf,쿤I3mC`-3~ByGIK3f,\f@ hh(d'`L`QB.@ @$O3qJ,@eE""#3t^ njniHK]H̠\p: jJ3a$T9pgv]`d'iAb˰Z0FK-(a؍8{T3#0k33aJ+HZAbnjeRV~ԳLf\-UL6x:&V VY\mkD5[DO VZ*T٩Wu)UשrZ=S꽪WWuz7SVժ޴_UE^GOS=GOSǞ2+lWAy\l+gu 釟 wۋ5& AHZA͛է+A™ )${Xj%^Pȯ"4/00b {Դ dfa񉌉`r~Z<+;CՃR6N0b>=)*ODZ&E0BGEI G1"1abV0e_WD D{2 KO++M<}g'J`ȫSJqToQg'JmaC@c{3q d}/ Ba@!cY`(ŀG#E6GLKɀL00 T x$ߩ4 /Nm.ïW~Pl 64=^F`h AnV$JN'BL7;hEP:2@<%)3 L3 $x''@`~_ Ώ J&s $k0I9))>WY pYl; +|y]+KK??,SAa{{aOKn6m#5֭έPHme7yջ7G*Jm]K:CRa ۗ!19Z1_>_gZk)sc;I%,udB8[ww ֖>#=G tuo@ \i.vyxK.Lr(LC/ np}d8eYwcx}9V7A*C(Dio5nYo" iOPV (m8m:[7D%$6N^$M^w`# )3E|ZjKw6ک SDm8&y` mUp=\ȩBİhv$ %! !{q̺+ۢSh -MHȞN{7mה3:SR'De xJRrC*Xq)3ݯSLCaD3#U`?dסۋ% Ė @ k; NJ첻`NB/aKB"mqrسɒ6;>=_Cw(y/(X#ÓyT'Edď o$ͼiK @V 763yavEu}\(pL-Jƒ&jg:U9w:A-8y&zqc?2cEZ*{fR-IeӫtE%{r$ Oo'7 ΘRlgbUBOiK11^&!@T.}dA>{9z[oeQJm)Qг@zQIzg?9”˟մc'YBVؿcVh`XJ+U |MtJPk9R%]H b EH˴H؀m2lFgDgXXڬD$IE~H$Cdk !7 -Y^ō_{8C_YѴ  Va,emg/Rҷ(z".%LZYr/=mtͺ=Y.e,zoRY* /Xpl#gپL]ʮq6i珱+! G2@%=m;<,jq7 ık REJ-Ƒ}"'75{R`l`b>mhȶ]1MGV6F'zP\ў? 'GB 9Etn6sۉ_i_`;/Ԕ`E6ЉFCQ)O6,F>8vT]&ɲ .3/'ʨhubsw->$Ҩ6o 8Ke{b&ϕ_KgR cQ3wV@J/oK%#:}3+4@A@DUA`$1Fj5%4ZJ@928<>ygdtڬϚY~N\5j{wfFvGb:YcNyPœe3xӇe>kV*&6y3mP`^I* br^6Kvʜɖ6Nh)ivY29y|q3]+nYӕ>=Ar*E \N-`[a=ɦbYnC_drRv)+ZlyDsvBw,`C A?gdΚ*r;N^7un7= `|ǧ#/#hsޚ1{eAq;=p3幙MD2r==jH+8p]uKβ5B&@5#jzEIp>̬&ecSPJOEnޯ3DDK 2Vp=mR5 DΠ[`j|* t &R ߚNwVTDZN&}>i?.?oC-m8.nczJp~5%hC[2gw`~KA#Iqʦl UClzsu>*%kqb6)Zѕ\t7|ܗ]yt,O{>@o%tt:| J¾;@yxg(E9^ȭ Rޝɴ+UQyH帟=YT3f-:R8RηkOd*:oX/,@v3K7 -D08=6rqy'+?ңE$@%$?TBFt0Hd?͔љ^wMw4xyٴH3r` 83H~X.S2*Yq>ıi٫e~fSQ^z~m! 2ricFҝ͞.Je%8`~TFI2t*24DLy=卍!dhByihbTduT:k9Ğܭz,so,wj.ߵ_0+K1d|w}1endstream endobj 170 0 obj << /Filter /FlateDecode /Length 5887 >> stream x\[u~_10Нtw2&X{ȃ,z.j;Od+_ϹCkFz|S_;?w~8M燳?)yw]:|}Ư΃ _;(tvj/\ޜn/w/r8v=O k.n^w)m~_m/tySq z¹cq>q8K)B}?)E6ش5 'oۼoj9AEoݼ!6>=% gS~gՔɒ=',N;}i xR!\YA︹:lq^(ka }~a.zϔ IymґGB׸b$^SiSTH &aH4tTZ>xQVohr'nbyfr;p猛?hAyiR4˦-Re#٣6rz\|.^;\*l1*%8FjtS x޹'6b>$홫LQϜ<,*!3KÔQ5!< Ś?` f ܕvEnOU;,+kx<<,,-#1;j`(zO9)2Dgż evvÛ˒,ߪ`B8M5˷!'u+dmAS_sd{19fO(2ɬ` ]U{>o*wCP3C,^E݉tRd#?Y2HքuhY%a|[QLz`}]ǡ=ifwI:$D;rc%cyVXY5|,{ CͼTry1r{jNf0ښ !X+l~:tdCנܦ;Ѕ&ZOc yb e/I *Գ<|G~e9hp+,xE/jzR$~+pRIy$!\]P.o,7= SO[4Hbijs r&h燿n->.$ g:ifWM1D32~>#o;Kh1)BVbR"J_Uc&`߁H٥g;5֔O 2ZB\6x]oeՀ[ooo GHV?珵i|>3*zf\]&+1LP |2167р/ zPdaI\]V 珟ҹvB$ՠGѢ rW yzXH]czjStdZ33742/4vWp !@MtpӄnJi>&0pi=kv~2.jducIz24*kE A1e]u#A d1EƁFϞ7*<}&HZ=8B7U̐.6@{Nqc> ց6ԁaŁ}%?>N= cgZ "kw z3iQz+ڍH܅n0朿 @`һ'S#HaޙXT(D3 :<"|qUǫmv%sãNauXԋ6\ܑS6ZZ. ĩ3AY8}V2BN%9X%*|.%.ĥ: a+8Cm|~Kڢ$ _^HP*Ē7<%rҡʒҼƃy+d1g{JRfgJ (t1|1fYdURS_+caP:H $a/;yDh^s.). ̕uTbAu#+8kasYX};tU Xmj4T)jsU 5<3ČXĘgQR]8x˯s)&01|~gY"%]$t|t GnesX"HX!Co\XvYV+ϕqFGMJ*C)”έ@q<}+`'S( 2UP KOKAԃ%¬JTm7/8\&ZW>%M(rcK: Ee2]^q_4V!B%E,-[޾|侱ɽ7HQH|vWz))m}SYKZh 쀌0\F)yNDv I:ɮ{/dyQ񘱇Յ٫b^j^%|EZĵ{uc^qR-TgTL%&R?U9Tڵ'G ZoT뢡@sO%zDbI(tƇ?,.>#!7C1/-ρ> =bB@ϝEg .\EAK>>;`0v4:F1 `d`= [IںPSgKrDjʢM]gRԗO g%Zr*u)G\8-Cjz);sfX ֟l. ~._8T1kφ7^LWEu\Vg*g+̜$r | R#pN)Ӈ@G~lDBH +ؾuJ뚔ދUޏ#(Ai ľVЬhXYH83%MהR~u8(.߮Jr d0@GgU|`n ΋n!,!`yW5„I86yul92^+v@.R/M˳k1Be`TWB?n_EU$隴ƘTb/Ӗ}lj(V49xtȷٰ4*1 <^!}u/Zg+D|҂ٮm.VX?(!ہS}w-դүJƔyRBeT8©3Q1Q"uQY#(d(6"/$]+VŎ2ݿOE\T<!"no^4ldzk _})c|?(y'_+r^ aCP쫬xaMOm2q %1 eIeu`ѱ+/2YSӂ5crb+3xL̷°|Xf6PT&MSn+8_ %z]IQogqJ nkzkBWt-&8%lZbP/_0Nsk6EqkǓ-eŲM8C+0F:m>yۣ:#;ae'C(zG ++ZeT\}47|+, \ӿoK5luŚ.R!9_+b@AxV\75-UM<}\<lP=_#(g pԤ ZLoNW77C Q!H'=U5+0 ya u ]=`V9$=MdiTU69&'~5xWZXT3 QDwӰ }2pZyTV6MQK*MžOŸavHTi _Ӌt _a3E܄aQۢn8'׈%]mT^ W;<9[ƆrT2~h8!ڇx4 {1JE7CS\47E=-2 MxLR+ZQ00څ|LbդbDU"}yZ/H&@Y}L:wv$ThZC'K*Q1 (TX ݢʡJƾف2X5.V,s'vIN_}Q+vY }QL^HFvB9J2SHy0~ SGn"CY(W"\Xq JHlj2Ɋz 3͟rk][kAfCy!"'6nl(pSNj/2yQ ~Nk=04&SW?>OA$QmۋлvYfľ*U@]+v;v4qKşR sLèTmqhR%F8%2M5xTh!2(m<{)JU< SJ)Hlq${PL֭xU||+mC/T_Rm m'_->% X3Gcd{*Q䒅uZc}x1bQJ͜&^NПԃ1?~N=jr* j#gDW(6!RQ,H,Ce 0)&݇6y-mV2,ڏC2d$G9mٕ䛾"^2`*57lvq Te YXNZ5J$+7d"Op^UKUW2{I/rt[|rEV=Č.K7܁$}Rn[Ci> stream x][oq~'xa/Hı@(QKE+Jſ=_ULWK$A)vtW}`&{0ǿpubW'_X S5ο:T{OCy r~s/N]L&5{ p3,Ęl%f$mZj<^3xB5g'3(ω<O x(TovOhs^*5yGly<&eDs{a3H,Xdj5x{1&K &h~SqLF?`NJzYpG\,{vӳY*/{4<7C:C/?]ʄX }û>ݜ(5>|U9~ա7bqڇ^7*G+>}6_Y?PW' eu8}xۇn2VOx>M7h~o6Oi M}ijl<-6bźC}ҁ*p-¶Ua }z(AQFrSߕ&jOSQ`v}6*i͒[%H6}ԄOSM=wCLPPɆ>_lʔeE^lDu>*6^\%]o6єzfkEĶ&k^umi^l|47ӮlYVZSO>b?>Els=۾)XE^wOZY^з}|ӷ|և"gΖlMD TϤeaqJNٺn?`VJ G-QgG=)lgCs9(YTH溂4I;'$K:wu $G l>6Zޜ51k^mZK%8?C˕^mB#mb6jv~}8',pw-{P/ҩ>'(IV^φg~v~'_8d! W=dӡF޾q'Yc1%hD<&FNԀd0zOo vJD:٨!+,T0.VkQ*1M&Me W%iȈ{sx'Pɴ5<.BYr p;2_ ):ʼ3Ȉ%Sņ)eMKFĄ"rXm"/)V;bn1Ā2b %u/):7y^tE0@$DlxaJ"S/(h)#\12ʂF3y@ل8Lg0ّv-C;&0M{L ݳ!Ջ]xL* Me0F\awÐ9F0 99ǎ)VLWD*z^a{!r(BKZ>(Oغ:H,%hL̻ *ϩ=v43{RG#/"4"qOyXHwvT#^VSva9;=(40]fzT . $!GDAApCv-守7dO_B%.&L9>yh鰼GZ a/CSȻǣ.%OsKE!OΈp&wϻhUN»Dj.R͒'WK4<ǚTRtw鵛Rd(QagOd.kZyiJ܋sEnyKzyJ.`=.]B%z:y{loW^y% s%Y&쒣, o8R!#x`ɠqrPBu 5P"1N}GZΥ&t=^JH@W܅*f0֞\fp5rOpԡjmm_LpI<}hj{F_<<&`)5)uz,, ^tJt;d7@w5"w"'6\J1)RmWli+}p2\D`CҴAߡټ3 [y[E/{k/~ѧFg!f76?Pu T}׾m[|IfC'JiTlFN':PC~tu6[PgYH.kVw S'?L}rLU+wm؇/4{Gs<o%=\zgzFSξzCm Lǿ`@UX c  *jrY@],mԬ(Bq~ڳD2t:FRhmDDxىhF?yuyV7PZ4b=0V=zk^mE\6 7v"CAlF]lBPY9_IGlwSOSM؇JC6zO5=_n*#mB]|$u70>9Ui^j4N}x<'g[lq.C?Ae9!998ʤOGQC"*K6E$:u #w!AK!7B}=9co8=譼t:)9BZqU=@#g_*Q ;| hkJ,ٷDD, ݰHp/3W6rb1#`蠳bKDB%j\(ɇGƎ96}mH#Cd$UҾV?юdH7$lsWr߫]dXfjdWlJ*T©EIuGB /t.@0z =6|ڔ7lt8\ѷ4dXH/XK =dRQzIgj: xuxxoKm;Xj|RWzȆM>T6~!w$'JĠ YSۜRr&Ζ}'fHߗ9Gq~S`hK?]~tHWU@ AIGcF}FxyTD>{أ49m(Ho?FmוOQq99;'t>:Ye,; 2Z[[!gi%̄8Ӏxwu9^tV(R1I*PZ̪.v<˯PƒJP߅žy:6gƵX*$tJݑ*BoY(b3jޘ V&&,ke:MnZJ7 etkβ,(5#Wive=ڻ(7 tP#_h?㝪G)oOʾ |rA1q tٞƷ'_* .O=H.Z 6p}>L~,#+L*yVG.1w q|;ϵS䗤]f0/:)!Z;~iV\̣V,Vo>TO0(=(%GӼ"6d"zu7 -$ߌ9f 0Ǘ2;QC%Ƣl\O/Ze >TLIaHHhO7D ̍L>:y5;Ы͓=Sb(S(*ñ*A>_W(> (I|T .ZP{dgo;Jd3S h<\'ޗHAe->ttQ x,K/#[hR-+F9:ؓ2s(G[ G=fn~ _}~*?6oY(\xZuvPhheUO Udr~טM 9;(P?bno2ʽJjQav$Ҋ7+ L/;`endstream endobj 172 0 obj << /Filter /FlateDecode /Length 2903 >> stream xZ[o~?=ϖ MoX@}%Yvrdر{G K, zp8.M)7=٭~|RJ_ɮ2$twbUN'H.0$9ڭ=Y?x]rqъ|w 6ju#J3`xM:12!mއMFp)`$>CE0ax QY/B"m{F)[A5 E!HZ9-d3MR?1nTZؿ:D&pUE)35*+S?VIcO9:]a}jc6=C&XV>۪ԟ0a"r{$[8\Q]\z] h:%L##X1U iff-iFPޏNόL#Cx=qԎlS@U[^apcRяXe ; \Q1aI"gqghlәNӅ7y̒M]^i[j˷e m7(E[-lqۉD# p/_Pxpns6-OOgso}M@bW-_f}[VxMCm苧ãݢ'hPݖ' Sy][>_ 4b6}]ϋq7 =umF&( MgAfR~ՠT5ЖQZ.R E i*#qWE m)A/Bi"!Жiq#a69X+U_4z \m&%5_rcr'|pƛI5m:RKҴ;܃U!{g :dsqcB'@udl.Ds^24nF4µyiϭI?~-)Dtۑ"n|5Fa`立^L.1dG_2c~c8VpnXƹҠޒ3k3ݳ{%l> 9WܐS;qݧ `T9(=G,좐3[QZ<PN%nx6k;.bufLOVF!-Cv"(˳ؗ_Zzmǁ: yź}fJ/jE߹%% 'r#PFHCXL2BJBIFHEAK4 PFZUv%悙rԨ< f fÿ@ ߤ\%"JՑ<2'g;jߵ,Bcqv!EG$Oܿ, -P,ȌC8-Xt&܄^Ka' =YGV֥|sAZ*W$yN@}y/J+>  Xw̴4aSDX5T,e*VM4K$k55 O7d?_N7"!nqN#q]fh,ʤp@fSjk {f~Mn,^8ly5mEՃ{1JX&^mjxN3򃹱Zљr,+3cH.t6; <CZE(ط dӻDk+'i02mJw4RV%YCco?h?ysB$8b[5r._> Pp:<@4.ϭ6oz׶s®I> stream xVyTWlf@DT%E7 "1Qh|8 DaQK@$*-UFg5LfNӧ~2GD"C䌼ܴx`&ffVjwk $,# ƭ&r k&SbhVȰUϷ*NKI5w_dP`̽sRsE^rFf"YHؐc߇PE-SzfF{eenȋO(H L JIIM P/tptZ|ՂyeASTMRTIEQ(O*b(oʖ=VP Iʄ⨩OMNR3YOUR=2 )Elǥ'6+ ( K%#ڑMcV1f|}:m|&Cu?MX4yB҄!PlF?=h vVw "A |'Δ>BhBL Ǜh0c aSM:<`wCuPpllK  ̐\gqѯ{`SIz4A)gwCu5WuNlf9ΩM3ՍO>t&;bwx~tc7PDXX1;_*aldw}X7X9I>KUAӐ aOtI#Z W]7vB[Fd K 6:;z转W/C$;%mRNjc,C0`rPyR^}Pm[&mo!)z+8NGr 3 W^\{@l y~W&wIp)w~)+`3m["QBjw y ;8[Ă`|H1v vK ywOEGZukΓm>β<=f1!YSՅwdѹv~1%-x/:s:Zz]W%`>BĦl)9+<衻Ϥ)iB3ndpnYg8&㼻Ruԗ8 jAP!Y@c+;6%*$+]!/~P[ގBӃp6b#hCR,'kU݈}x>3ZٙRw+6T=}s8ڴtjW]U{Y<|y0;7-#'jV]5_lO~I7Q}&8 @Ć/\q9 R'GIQ.vY?\!,UwNtIy d OX˽> I  ^3F?K؁}کD9:Z(xpP9:7;F7G?qF/V߶\v$eQpmβ5+cdp1mIۀ3aIκ~{U, ZEADJyԸINV.xrXZs~- 3EIyyq[B+:ZggDbT!KjUVpxU%^x4 5ZUubLhOtw]fz=a`CPX^,Oʝcc;lu&OooV' gW2"A?`Nb[ZDŽi0C6_kcVGxwblp+ox&[r/ZpBy`58|"(U@+UkSB ,޸ ,`W xPh&eX,u}7~jz<t#96f~h!#.ɀDV}sW6!F{]$Z6`*d)2ˇ]XY5Nֱ߿ -I.K?s7u8gj4qI93`Nl-?p vtqc.?_b/ƺTT(ْ=h';Z< ^ÜOdy16|n |XQ+}:|֐\?3n𗤔2}J';r9E36>Uic#>nð܈`&L4F,N=v8a#dܛ !3;?2nPw^Zfه::.5tʹ7F0E--ןV%tj慸 \2l(ԃ:jZ)W#"0.9%~4ͱzNn5Ou0UZn8Ƌ_[r pY" yuS;9cg2_jEsBncWX^28!pT,X}h> stream xZo _!imK"(҃{Ae'[EJ|KpV#e>~0=r$g#Xg ٟ~zv;cx,Z~\•3g(9>v_ܞ5] Zw˳w]:7([:os7ھ_)*ONzy߷sd皋v.o,?sa;a-!V4=npLuL5W֍WOμSY#Ӱ!t<d;%DJ;#j>!k Qk޶td9 E&V gSDvӢ^^+́5uM ιJ7K9ce߁R<iCrill;KεiWWY^22)2$aPU λ@j|0e"\gλws3,>3#5<).#:j*kTtg{[Y lc۰t`v#=CÍ'pD &x_A1yx*#9ՠtṠL .;%^x2kWx'\U`1[z.o\᚛S*ԦW=.s$z:X 0I˷y<`]^i*} wy"!bBdW%2yS\9y84G8lWA6nJGd0B촋z+O/#V$AH2Pb ̘"\(/VPXjYh TU|5ŭnvR/3#\qM,T+wA5hvD4X e$1^H%" [jThr jU29$2u檍\yHÃԀ)I{$+@[< ?jF"})6L3yY|V1 8m!^WH6Xڎj%>=Ըt`7,|sߵ:T 0Uٸp6R2<(<+e?FH12Xԍ p\U&&KU^Zrzp`tº/T*bp Azvtﯭ֡Q4+Kcqr\ꑴ(%įF۲2.VVt 4 A;QC\5<#mNuHcܓP}ueUزR : N;u9&S^3ˇj]ʄM|N SR䄒C^gҞ$#R^yF:+Ta]gǓ/uroi֙:^7H;jHP+? 9:3BCxa8 [\B7!N%b_.0dIMu./p#&iˬCUn!. $5"@>L!zޕp~/ @:Z [{!c ɲa%E, fskۯnPk!QhO~^iLBi@phEݴȥ!/{м h_ڻ%p[% #BQJTygƍvozL(H5)<\b ʛF&鹁 mzU[#X :#V6@-]8`BBUbF`HͤaL)ŝ«fUk(SdU.1?{LwԄST&5tsلXFwUaEFo?6G[{"T['v\ *ֲn(n[YKQ% G IqNxcr a6tw~,щhUǪ4RS 2y]auF{ Gp*km?۠i 4D>3D > stream xcd`ab`dddw441H3a!]O{VY~'Yx|<<,+?!={3#c~is~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWqr-(-I-ROI-c```b`f`bddccs~4`ǪD'읺cӚ۫*:+C{9+'www/a\^-OlGTtdfw]9,]bvF/񗟽j<_قSM^wT\gXp.؋endstream endobj 176 0 obj << /Filter /FlateDecode /Length 5720 >> stream x][\Gn~_я=I/ll88 qٽmݍ? 1TS٫o.ǼT /|~Ғlrď{NK. },S0%Ca- G_j@ 4. io;D욦R"QR,+4PAvSH@4mU̅g}\j=OP\fSVEh2!% .Dre &xM i@܄^aXR*oJJfq<׵{`;fIIdo QiOe?@OZDeNt?a{ tV(pOh~-8倠'졈` Ay1(J<o1%*P 8(l%TA x"ΫK>>%LޫYb7 < umb]c !ߵ J@\UŲƚqZ@Ơ :v3^J{z(^l xv*iS 0gQ `NP:@RuLrfT+jA D!K8@ u01_5"̔Д՜&S89!8N[q8> >B o8cLj)e韜s~mbs̓Kw326sW<}ӗ<}ӗ<}ӗcZ‡aS,2YBi2(%aذbRl*A,C~ŢfFk:](5vX1lS~VC)zlIy", EA]m 0N s yaTr/gcYj<B))E呸’p KIQ¥%\*R.p)\Hq -Tk:~+hՃFӻ+ŢfuphIUrn%/c)6-%rl@Svgi (r@)(] VyJMR~7X)%cJٸMYvk&V]4( bC:kCotX?M~F}`q]GΝ00S]Ɍ}n1+>gNF\]UPK*¥*%TRT p pIUTpF *rY@=~Gg\=W a\myε\ŒA-E-pŸ25#(JJ\%..p p KK\¥u8#u.HRkE)[ۓ[36B&~?q5K@ TGH$cJ"R<ݚrC`@͹ SڿPB5=-Alͥ(jWVשtQu"`Waޔ۬W4z6VnES]rK7LwOgkuPx Sk`Yo,}W,L( bm5VɦvL#jRw¼]MB؂ŒGͶ_LNwve~u0[qj yuߍz[7`ۋ؜Rоyvnvg+pƃ ui7jۮz8DPn1qE?4 EUAE3tt[N_{_M u\gnrKYM@G惬UUݿQVͲ Irnj7$}!:)ozvFz2R$YHAjNv+x'`Iٱ *L}Q24YfOiOATê_amC< UO; LcЇማ,7oy9t@xu+b?t+mDw+]q-r̩涝/Ddgg!&HVY|p\IF=Sf)FXSݭyE.pA$i*~W(>Q3sc/̑n0gWg[jr$ H V+LN(8Xʫq ʭ^+LI^s ʊIIs ʊ1Es ȌZ.ƌ2m!;7L:X=+/0l@$_Pyq_$RGMd3n֍ t!B\l_, ES&K|`/2(kZ}aqtbadiciY2YE0^>9܉00V d!?8C>8'O0~Ѿ[%'d/l $L^տ`P.Ap)4 JD siL JgEUu4s_U1qZ Sna%#VɶUBr81.VY<$3BRBd)LjL&d1eLzy0t"2|E);ZDr)?s?sX0<!nϜd&75ZPt .I¥RpI .E I̥SpI .gMfw#l=}h"Ol=}ƙvZ8t[ŭ%4LnP4K%\ Z%.-B\Z%.)s3_[o3go ~}Rm-tkA讥~R/d#ߡ[8H䉎 N_24(ԹBn> stream x]mq~ȏX"Dl'F,1Z@GͻyGLS=;]3;e ޫz;3ٝ?/~􅏻gfgwy虪v1Oru 8Spxs3k vxK?|νuvZz/.\|8g!r~Ὓj)Yz ^᪷wxwɮl1a5k͙A?հ/ D꾤AI;$]s[jŒ|ȵԸLXxC0eo.M-i[4I4>Ű:1\Sw6-AҔ$J/l4]x;|C/I 3F3i;fIX?Eb_=ի^W]gDSLC`}o;KO(3wv솽Q qjQJ MGO+ CXy-d8`z[zzǯ{z{;ƱxN7t{ub,ᛛ7+x@܄ f(D#4WC  ;AZC2FXۇ0Z"{~0bOs}3\'=]Ə 4X?RE`ZHPuz鶹'CD~<pl6d~=|jհ.Z$ǽiLӹK )LߧC5K?FB'_ [Yfxᤦg9,#Ou|"c\r~ӛ{S{zs;.!jlc珳 ^,=j=v{xa?f } SK<?foCc#SXU4Epx2A_jSc> =RTvjK[hWL D~3x?GǐC ;.'_w5ɐSR/v]ϐ;;"'}֧r4ʄn2BSY?3Z/F ;@ZD1ɻNhtҪ3ʚ+,Қʚ=X."Ud{ NcZ&Pʈђi"1b(S̞FSJ*#HVJmdcu2pOJqՑt:O$6ץ#.! Uu$BqD!`j!WZz':v "=jfJdуMÞ_8g/WrmIe{d2`E1s$<(X%,J&<%@vE#.f@ m !{eӃm680IGVk&={WIۗT^Hu<2TjWh=TG@J/@PS <;*%{3hT lUQ=Ҽ<'/Xew';Z.L*$cJ{zR(T!1 U;! VNQ RSf$QT/|nV%Krbj.dprEJ V! YYHǴ[V9fB𷷓Rt$ENw"SΓ)謺ì5|-B! ZHʀMjJSMS t8S5\Bdx턐3ETġTZ'p$~SgS>;U>(DJxl]ie N`NGNr6ȠoGN0i<ˠy+$o+ B'pɳ<#aIDzRU M0*}l+JPGbҔy*mjNj JS?iZC-Vdg UUsʷQsњb}4jzr |lL` cc:F43r rmКy:1LŇ"۶DQQaL;tHk|u5!IqfQ9"pUt:-ht`2,梷I!6gT+}WF:@ _\ ӭ> 81h7PWx c4+G@=j;W9 $, F>6'XepH  ˮRr쑵(G~d# R?@eKJ֏,PK%G+PQ? \ը\?BD|JpW0n{#V~$Ė^H֏$|/pXGwW]0o;_Q3ڍG֌Ƥ5HAoۊ1~N^)p?9W۝b%_ Y˷Bxbv_p9"}"#&k+wwyVX|Tak1ly}H Kj-%KM>nỹn'6az]*k񑆸< Sؿ2njqwd`z[f<<7[/R…nz A)yB/#Q-%Kjjol|=h_+B  23ڸj^b? WDy.w2fw6sysɵ+1982!]x8qM#ْ(ܯ3Njs2' LxgW7` zԬ$b͗lAlP~ $☛1ȷ+4aێpI&.5N&Ygk6:Ө&iY# Q7BXUgBHLvejs$7yX7HL;7k•C7_9j}DI;n &3 4&Ԯp5~@dkF|_׬ɺ툞 dC~!|Ao\+\Yk^Gǖxl4֭b:E,oyƄ2%UBjߴ P7RhʆtC]gDd Z8/;y[|)6+9pl}f,'`/Fyd%גJjBS1Հ]?z׸FdF֜بXϘQ6knpN0^`m-qEHKٵU{Ka5Q)qCz~) 'Z دI-f -u0"Vꄪ9SC%&xݲٕfHqQ>ln߯ID~uH _9 /K˖"OyT+D s7,~'E*?t׎C7a6aO]ݛ7_7ì<[\`l,٣9+n-N VurZ\1HdJY[ocb@;nJ3oՍFɒP<{#&ׅp0&ws`lO.p 2Paf@UP襀MR '@>l6Xkx!C/໚x5d?WCځ6aS9<y* 87]|6\>Go+Έ?nB>)QH\WqQ$'f은h3wurLђB8z`1moH^a݌ zh~z\QT77d_eV0]j^(endstream endobj 178 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O10 DЅj8(Nߗ,N>ˮl#GpƲ5 HeQV-ƃ剳BvwO|P3gyC4-^!(ƘV?p^ͨjyp 8榹I*`~xS 6/pzSendstream endobj 179 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 738 >> stream xoHSQuYssU`ۜ21(90JńeN]m* C-̢ a L#B]DBCED_"(();"}`Ccm(jžL4 q4UA|sīF5"jQ+oEfПZh!%y szuOsKG'lͶIҟTjs74Iiin|eno6б6)/!̕+!tQ*Azd@)@ptqP V@'AA1C"gZe;>̖lLU-2t+$ͯ-΁I ELbC\c榃L03+Q8U!L??> stream x][\q~_G,I/F@N|8Hufj(v?,bgӧ]}_;Oc~]?Õ_ǟ'Z$ ~ŕ\ꯛ;]As5B ?͍;{Op}=vxwݱҧKttwcav۔>1{?P-qУpn54v?|+6_Z 㥧ç]ocr.:)_+B8OK4| /p_oB9&Yޡ#j tt_WWr,`#MգxL!4"!!1%jZ uB_)|!&( ,hm7w&&t _U;zM@ Ɏ I)1Ҏc)ԯ)/)8n􁯩4 H"y 4 T!c0KtHkUeN 52@Mw@1tq#zvb#&!: $5棋9}PDGFѨBRxn㍞:EMD::H=qBl|q qكm*@wPcj1/<Ty\3,9(拾PO G`8M4Rb@߻\2%;樄z^ \ KO$$UCp/ rU%U\I!^iz#dBTsa2Ҝf)Qي&VuAӳ:&yu~\1+4ږ&2֟ؑT\DBF3xpR3ůi'Fhŧ0["V Uaqf-%,dENQ_/u0Xcei5xhrZ32Qr2K.-e9 {D-6E<$IÛ뿻vG<p~NZ4׭!O\ja;ߎlۏ+"rڵ'IYFۆۂ ~!m[ozdbiC +&PgVHc{XHڜdi^]H^L&< eR.64rR;Iٍ U$ݍ2\|FFX:f!x]K$VF:jH@X3R*q/R 8 BB=r!P"fٷ)Hˍ&$!h!O*<;*?h"&@ Kf ,자.UVbD2~}@&q&q ot%56U5d= fe=)&m#;ZZ䒹L)pQ-%!d_ZnB:3b r\5نLX+x|ʊ;%LL?!CjJ !z ].2G_d^rIHf2DU么5\=7(##Ϝk4]m#xpd#[">$+yG8+40LKzGYvLˎ Nde\bG#``GGΡet;>\ !{E #"!2>Z&&:\TD^5jafVS,Ԛ[Y qp)EWJ,ջj絜K%_j~2uXLbiu.ôyٮӼ-yXp2K6C:DoS:O186F?`lKҁqȪQ xqҡŋӤ#.KgI)+9KR|w@G6M T6Ju"%i?1n[Hsmwƃۭ"3Ko`JZ?i'A~7 iUYnGyO&2cr_?}v?;&}vOA{f*Hܒ*rC2-8l"%q;J=ٝm ): )S{0pXZH , #x;:"'ɒF-`g*ɛt'@/qPzDӯ{$m"'}$"D;*̚%yHwHZ'F M$=IL>Y!m(A3$H J^^2b|iZqNl[L$mT_ȊE!'LfQHo!:J,1jmƏ׸hH`g)WMOn40$BTHqBThMlUV'Z`+R)îNz߅p amX}#!f.v&:a˜fMv 6mI @IdnmllQ!'مM9bP;_pGCvx$E0~s+`uyyW[aU^PPQ-^x|a ssҩsxw wԂ,$*jD2E.U@ᒜ#et5!.=Y l#Ib5B2> !{n"d@U20Ts"%1›&A%F! tl$ʦ=Tg.L Y&GE&B ،金ٝ"$O a"^U ǰnN .x#Qq{59Ccm ) uӧP ߓ\ctD3RjIEC2SAper22BpF90BX"il$te@%d &G+fBH2&fFL$)2SROfBe:e[Y| &Ghl/@+h",Z2,K@4/=)~Ffeg$˅U1)钽48BP9HJfG3S&B!)wLd&n"WK*v$Ͷ} #MBsc[h!DI'&|8ڑsݺL $kk W6R\&La_x(,=C抍xXbF8)j!mKd䇫 L .C=—X!Dr!9)7 )-Mb622t U!&2{ ̷`H60@.!9h' M@+', $̋8әދ<(lԏq8m"_p'f4d!lTu*?M@ jd&zn @a7wHNԓLES-Λmƪ l2G K*+-T#ُ|!ǶNz>w+^O߾q>|+KDTD7Y[~b###$$ EY:4!!6D;#Yz>GJإ7HN,-ϑT>Pᢍ&%?DŒw q%#l:-GԄ.⪤#/Q&&=!ɽ.9^Bd;e!^Dp=(0BRW%>` i>)ۈJRyv8}^p287JCZI&D$@|r Mg ;sI_DHBEb$.2l Cc.j ,JB!NmYقA(\y"|.RM$gEn"^ƦW?. / $B-qmĉI0Sd|`ӯՓOD|S$FC0<#Qh i<*V.k)b ̊]u7d3"Yl$ 5"4~uX/)8ڀWiS$z Aiwg+}Ml\KHApDS10 !̾sIpX%ќ:G\\3X@B1|/02Hfxpx!'QPLHx =h!QΡ%}s*~amBj&5;q@-%2%rq8 G6Oֵ?^ c#nn-d?&cH` [hRPpD'&!+{ I!sf҉9G8sdhH8@ 'SUgHZt:G1Ōu $: $/ iz#;y<-B8 De/)Aot9N[86ݠbjGi#qC76"F$Α^qec$bKJDzxv/&B~M3XlI̓$zHRO:9o4-K|NZasnwaCTTswTSYh<\u (HAO,Yc%?;6+ѻԉܑMhDUW3{KNDQ!SpG}9rNf޷ZoTL52;R ILidnh/7* u&S:]W Uvi$!Ht=͒7:ŷkYB }1xX5'C⺻7F/0$on4YtKULb i|3dJ դidX~om>]D>~}|7!Ry"堳V-O6{ L$&@(%)T>k:ҭOL͎ +憾=!Us'o?DHв@^cQ}ܒV5<$?@rv( ;^^[;)Cc2oLUhDk=Kc>9 /F{2|g7s̺˺Y{,^KeG#F)X[(`LZ"h[y!wFZ;a־SJY!utR {z#Kۺ.\ѿ7m7tSA&pX*">ufCP%dOߞF7=w1Hjwٽo-WN>w2 qP.ʽ5תLjӁ̅jt"s?bRMnv׏í!\r O0LC;і1KRg&'V|/tҋQ[%j{OcFE*oOq1v%sq>;=TWv0:e(?%NŒ[<#!n m<a$K:1Pӕ# eg#*>F4DžxمZӂnBO{CTdkC̾L5wpbz?EMN;iI||g[1}.>RpR<I & 4p(e&we·OxiK ^B ,.D3o)/ ņ~ ˉrWRseO%SvEb]λrݣ҉ 4ܙG|=/MHB1xt"YC>.O$XQtVZ 'R{D^3hf 򭺋)UUrZ~Nـ&'>,+11\V/L$c&k*¿醞d驘yV/|pGn6n O-BOd>߂"4ak$ R]Q*JW>N$'8c&;Qˈΰ#U]8Uq?U4Sa+JImjugFv|&L\IN>^R*ï e Wx n?VOnn?o gF7ۮr9͡r SPI}((tvIkP8/+@ gçrGp ݞl_/XE9|@g}O;qq$UunDD?U>q.Wބ6Qͩ>ǭ_XFߤWV3551>em&%1_+Rxж+ѩA 1CVr'͘GO+,4jT- <^'̊D%sާPPKAd'zܴ>UH~>ʯuLEPq߯}o*C֮fJ J,f7xfx`y,SK6mNO/\I2뉪n=u>wػOK ^*1h:^NLyV bOVao7%~qO"x{F,laNwmRr7:a9~S{ڠ\Мendstream endobj 181 0 obj << /Filter /FlateDecode /Length 6305 >> stream x]ێǑ}#T yk/iY}h!!%|؏Qz9Qq9q5ꍢ?;77'jsqn?m>9wzsIyUotU~}3&9}vhք1hjt:x4Zِg۝xQῶ;0TTi8EVg"p) c4GE> pMfLfVzd}^b2͹^&9 ""N{MVv(V+&uJ+SLo,YEq{Q%ͦ씓GOANIeXƐ=rdq{wЄ ivK4=~ycG~xre7Tx6g|l}+[96`:}M\osďc7?~zbc #td6Nti\\<\!Q[;h* 7˨4*Q2)Ɂ#fue$i8RHx_@1bݘdX83B1iD+Ѐr<&#4`07:[!gFv @4n HI@0)-p\$"L2IcjU1,\.`#HG륑mRZS$<3T5fHHueV1hhk3`5#z=$]:(Weܾ4h4K54,7Z)`Ags׮]] JwWd;-ftjq[`=J[|bXGXؽX-Nׂ䜋|y]w.VX}ѱ;Tok+i6&_ u3⨭47}磼3l`NæMgJG0Zn`So:߂7Mb䲟l=|7-FKKbtx;iȯ7LarBlRM#QlR99UDzr6Oj9۶ {uۈlӮP3Q6rG[цy0G:wZmF3`ִ%@P^$n4 C0}_!nA1 D$CaGk zx⺣$5rNF:8GqY4"> B%o [r{HFUA3Q6 &*JՄJ@ DjBJrGQɦ_*-5TP)Q髣]i{L6vD_`D|Fe݄A1iP͡IӐ~䋨/x3]yWlPeDyŦ\(*e-a6NRV<\,}I|; ;ySye6"MLT}#% ) ÞD)lBf  }^-n>5ߺeb~tמ/aÞ(Bo?fv:e\rE6;c HmIˣn$j.)䮳]IuL [JHKTz.j73j,:BUTEdvKQ26iM0ha Vzט&KlS: l)x;q hAQEel)W۳2`9н0$AO']_y]Po4]i'W`wiأu ̸yd(߿*\GVVeyPq^# B Lΰ"$t_v":"}~ȋMW&~#0xuC=/b- m;%WLmR"O&+laj/Xf~;J+g( \e'7[bFT&?z5|> \`Xq=^0x3vETE177C~z TMjΚL/aXXv@%&!x6zu ܝ>Gt CWTLrpW"Oo?1y*AZ%PGvuAW[]4(88E6\ 0X3ُdKm%ZEFE E7|lY]-pQ=AYF:LGA=M'Å2ЛNDp$ٸ},=uBx@Δ:MׇV yc"^y20{W%Qr)qLқ|Rfa%~5E :da&8Ÿ%N[R~ׅ?N`L[mGCyC] ʢQZen(Uӵؼ !55@HXlr71Y> Wu Yp}6 *E9Q9'T*a+<2cҗ7e $W|_*x|s8s3Mm=5kczlt^6KAM+8ȧ=3vk#HG:Mt~&Kƛ^Py*'¸ATDŎr =rFE浧V]MpvXDr*)fNZ@t¯sv! f E;zeDپ^2l+ra'49_?қ}GE%Ev-a.q$1))kcI&,ͫ* *.ayf *Ϻщ|^kBku;"oX#8)mFShUӥ / $Nj@jԢ&tH8 +;+]8 .iVT7:ƺ(^v:8 P~P8M$V`Ylv>I(}S+X:Xy : !cє=]G=|z1qH^"Y|uXNHpSS7!Yq8l :"L{J]vYoMn *,!Ap,ԇ+Wϗ=~kֻ1tߋ뱦O"ԙACz>`C_Y,:$zaF/S75]6&!3W܉ JKD92?MG5J:1mgo\x~CW ىVbaqP]=y5iަ0q Qo\&hQ0Toq軺%%A|k6s;xǟw@$&n.NU0/ĄCd;GeQkiC9rt GS0.G;V7WhrI[6 /gg\ǬlĘr^@Db,|%'W{|9R/Xgy=ĭW\RyԚ(s 㤅c픆Y G&_CCYU:ɕAoutl]/fq5-%To,j5SÉNM!L{$H kj3# l5ˤ[z5{Zf3:β{,(Gxi˷ {`$txi6WdG샾}nZuՅ n@ʶY?qy|utP˝ݔ-P߫u̾ W|%եd?4G^e+D櫓!endstream endobj 182 0 obj << /Filter /FlateDecode /Length 5114 >> stream x[Koɑ}#`W/ԥ|?dxlٖgEIḢe_xdUFVWFwJVg#2/"z_|iuw|p*{Oz?gx|iuMY/{R6g%aM^Y'mt~V<=p&6D3 jSwZ[kǛ竵}00h5ΝI4?wrK#u!\N *&1| ֹ;Ĝq,=Y;XҮi"ᡲt{1\YC]uZH\k Lvm}B`ɖIKk8ژp&'84E}݋(o07hW,gx)߱xr+C=@mzR'zWt~OM)c[Q~t.hb}YfԮ{6.q9My7|he > G; `^O{#H<=xmxySf׈pL*N}8x}FFl!dm8G෣=e8@Cw q0ϵ˷:G~ "UE .DfqYr/ɲ`E2x| rx^NAso)փޤF*Y%v^cQKPfr4);O2Z;1 XtqaHwg*<?(҅lNzADGYVLj5nIvD"8z#AFs;qZف?AID9"@ d S" DOd1 1yeaprIouǓ(C ƀh X$A&.Y&C0S_KLr^w{H%˭qvNDfCϷBW@$ NsR=uZNBꀰB,4MG@bDEAIdVQ˖6^ݣ܎@'@&4S'#{?m Ħo{-3Jjt#0 ^#v@ʻCC\Dq[ n}c}GŒȇ dfؓ5W,miCٔ,ʘ*H\30P5ɾU6ތΧxdQ$yNFOnm dnZ\pB%a2`6B,D^pd1Оdʐ7tC{!+1zy$џV,ڹ] uƘw>;A>Zh3FՄ䀯I6N'%UcisVS#+@f-1r.ӛu8)]J׎t-M>D5/TPXh֎B& ÌLi9Tܐo ̞! K٬W`dx!!5bX欢 ETg"%XΠ#I`d* ȒL/0k7ljfx1c =5@e{$7+aSަ),J1 +Qb~1 n1~n?z5Tg,q)6W6Ÿly͆<0GbwG]2dVJBLcG[(],IHL !yoʇo.t<p(#C#1lPUo"D,+G[2 ՗|3}x?~0%,ٔX'*,e}eq*xy!m'FDUI^C{Aö" v¿-T[leGo׻Wn|4VYHIx[o*%wtg&vcOmM0t+вaX+0M`I7I$`r2\VMnwG-@!|TĠI:RPP % ˜iB/{")PHr=Sq>x<|h,d^>UD#%mXCEŕ mSF_W.%V 3룽o#}y7'7!7V_o"6#X]ڼ<͋kbwMҧC\ڼmm6Oj6kAQȧ|> No2;?tv׳'"ok|8|wWShż2mfnVJUX;$h3.Oofb_Whŋپkft}W52}DPYrTϊY)pUbbKVk@%͜އAL»z"7紙=E穦7rܟb9LN쳛9a4^ܭ&T۽V͵zendstream endobj 183 0 obj << /Type /XRef /Length 207 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 184 /ID [<37c584691fe0eb51e9d8ae99552a5085>] >> stream xcb&F~0 $8J"?^ G/`"3(dKŋi)"-AqɲD / db5|AL "9H`r9XD I, "$k+XUj]U"eƂ vɳDH.g`[uu|Dnva%D endstream endobj startxref 186616 %%EOF party/inst/doc/party.Rnw0000644000176200001440000012164312265463410014774 0ustar liggesusers\documentclass[nojss]{jss} %\VignetteIndexEntry{party: A Laboratory for Recursive Partytioning} %\VignetteDepends{coin, TH.data} %\VignetteKeywords{conditional inference, non-parametric models, recursive partitioning} %\VignettePackage{party} %% packages \usepackage{amstext} \usepackage{amsfonts} \usepackage{amsmath} \usepackage{thumbpdf} \usepackage{rotating} %% need no \usepackage{Sweave} %% commands \renewcommand{\Prob}{\mathbb{P} } \renewcommand{\E}{\mathbb{E}} \newcommand{\V}{\mathbb{V}} \newcommand{\Var}{\mathbb{V}} \newcommand{\R}{\mathbb{R} } \newcommand{\N}{\mathbb{N} } \newcommand{\C}{\mathbb{C} } \newcommand{\argmin}{\operatorname{argmin}\displaylimits} \newcommand{\argmax}{\operatorname{argmax}\displaylimits} \newcommand{\LS}{\mathcal{L}_n} \newcommand{\TS}{\mathcal{T}_n} \newcommand{\LSc}{\mathcal{L}_{\text{comb},n}} \newcommand{\LSbc}{\mathcal{L}^*_{\text{comb},n}} \newcommand{\F}{\mathcal{F}} \newcommand{\A}{\mathcal{A}} \newcommand{\yn}{y_{\text{new}}} \newcommand{\z}{\mathbf{z}} \newcommand{\X}{\mathbf{X}} \newcommand{\Y}{\mathbf{Y}} \newcommand{\sX}{\mathcal{X}} \newcommand{\sY}{\mathcal{Y}} \newcommand{\T}{\mathbf{T}} \newcommand{\x}{\mathbf{x}} \renewcommand{\a}{\mathbf{a}} \newcommand{\xn}{\mathbf{x}_{\text{new}}} \newcommand{\y}{\mathbf{y}} \newcommand{\w}{\mathbf{w}} \newcommand{\ws}{\mathbf{w}_\cdot} \renewcommand{\t}{\mathbf{t}} \newcommand{\M}{\mathbf{M}} \renewcommand{\vec}{\text{vec}} \newcommand{\B}{\mathbf{B}} \newcommand{\K}{\mathbf{K}} \newcommand{\W}{\mathbf{W}} \newcommand{\D}{\mathbf{D}} \newcommand{\I}{\mathbf{I}} \newcommand{\bS}{\mathbf{S}} \newcommand{\cellx}{\pi_n[\x]} \newcommand{\partn}{\pi_n(\mathcal{L}_n)} \newcommand{\err}{\text{Err}} \newcommand{\ea}{\widehat{\text{Err}}^{(a)}} \newcommand{\ecv}{\widehat{\text{Err}}^{(cv1)}} \newcommand{\ecvten}{\widehat{\text{Err}}^{(cv10)}} \newcommand{\eone}{\widehat{\text{Err}}^{(1)}} \newcommand{\eplus}{\widehat{\text{Err}}^{(.632+)}} \newcommand{\eoob}{\widehat{\text{Err}}^{(oob)}} \newcommand{\bft}{\mathbf{t}} \hyphenation{Qua-dra-tic} \title{\pkg{party}: A Laboratory for Recursive Partytioning} \Plaintitle{party: A Laboratory for Recursive Partytioning} \author{Torsten Hothorn\\Ludwig-Maximilians-\\Universit\"at M\"unchen \And Kurt Hornik\\Wirtschaftsuniversit\"at Wien \And Achim Zeileis\\Wirtschaftsuniversit\"at Wien} \Plainauthor{Achim Zeileis, Torsten Hothorn, Kurt Hornik} \Abstract{ The \pkg{party} package \citep{Hothorn+Hornik+Zeileis:2006a} aims at providing a recursive part(y)itioning laboratory assembling various high- and low-level tools for building tree-based regression and classification models. This includes conditional inference trees (\code{ctree}), conditional inference forests (\code{cforest}) and parametric model trees (\code{mob}). At the core of the package is \code{ctree}, an implementation of conditional inference trees which embed tree-structured regression models into a well defined theory of conditional inference procedures. This non-parametric class of regression trees is applicable to all kinds of regression problems, including nominal, ordinal, numeric, censored as well as multivariate response variables and arbitrary measurement scales of the covariates. This vignette comprises a practical guide to exploiting the flexible and extensible computational tools in \pkg{party} for fitting and visualizing conditional inference trees. } \Keywords{conditional inference, non-parametric models, recursive partitioning} \Address{ Torsten Hothorn\\ Institut f\"ur Statistik\\ Ludwig-Maximilians-Universit\"at M\"unchen\\ Ludwigstra{\ss}e 33\\ 80539 M\"unchen, Germany\\ E-mail: \email{Torsten.Hothorn@R-project.org}\\ URL: \url{http://www.stat.uni-muenchen.de/~hothorn/}\\ Kurt Hornik, Achim Zeileis\\ Institute for Statistics and Mathematics\\ WU Wirtschaftsuniversit\"at Wien\\ Augasse 2--6\\ 1090 Wien, Austria\\ E-mail: \email{Kurt.Hornik@R-project.org}, \email{Achim.Zeileis@R-project.org}\\ URL: \url{http://statmath.wu.ac.at/~hornik/},\\ \phantom{URL:} \url{http://statmath.wu.ac.at/~zeileis/} } \begin{document} <>= options(width = 70, SweaveHooks = list(leftpar = function() par(mai = par("mai") * c(1, 1.1, 1, 1)))) require("party") require("coin") set.seed(290875) @ \setkeys{Gin}{width=\textwidth} \section{Introduction} The majority of recursive partitioning algorithms are special cases of a simple two-stage algorithm: First partition the observations by univariate splits in a recursive way and second fit a constant model in each cell of the resulting partition. The most popular implementations of such algorithms are `CART' \citep{classifica:1984} and `C4.5' \citep{Quinlan1993}. Not unlike AID, both perform an exhaustive search over all possible splits maximizing an information measure of node impurity selecting the covariate showing the best split. This approach has two fundamental problems: overfitting and a selection bias towards covariates with many possible splits. With respect to the overfitting problem \cite{Mingers1987} notes that the algorithm \begin{quote} [\ldots] has no concept of statistical significance, and so cannot distinguish between a significant and an insignificant improvement in the information measure. \end{quote} With the \pkg{party} package \citep[see][for a full description of its methodological foundations]{Hothorn+Hornik+Zeileis:2006a} we enter at the point where \cite{WhiteLiu1994} demand for \begin{quote} [\ldots] a \textit{statistical} approach [to recursive partitioning] which takes into account the \textit{distributional} properties of the measures. \end{quote} We present a unified framework embedding recursive binary partitioning into the well defined theory of permutation tests developed by \cite{StrasserWeber1999}. The conditional distribution of statistics measuring the association between responses and covariates is the basis for an unbiased selection among covariates measured at different scales. Moreover, multiple test procedures are applied to determine whether no significant association between any of the covariates and the response can be stated and the recursion needs to stop. \section{Recursive binary partitioning} \label{algo} We focus on regression models describing the conditional distribution of a response variable $\Y$ given the status of $m$ covariates by means of tree-structured recursive partitioning. The response $\Y$ from some sample space $\sY$ may be multivariate as well. The $m$-dimensional covariate vector $\X = (X_1, \dots, X_m)$ is taken from a sample space $\sX = \sX_1 \times \cdots \times \sX_m$. Both response variable and covariates may be measured at arbitrary scales. We assume that the conditional distribution $D(\Y | \X)$ of the response $\Y$ given the covariates $\X$ depends on a function $f$ of the covariates \begin{eqnarray*} D(\Y | \X) = D(\Y | X_1, \dots, X_m) = D(\Y | f( X_1, \dots, X_m)), \end{eqnarray*} where we restrict ourselves to partition based regression relationships, i.e., $r$ disjoint cells $B_1, \dots, B_r$ partitioning the covariate space $\sX = \bigcup_{k = 1}^r B_k$. A model of the regression relationship is to be fitted based on a learning sample $\LS$, i.e., a random sample of $n$ independent and identically distributed observations, possibly with some covariates $X_{ji}$ missing, \begin{eqnarray*} \LS & = & \{ (\Y_i, X_{1i}, \dots, X_{mi}); i = 1, \dots, n \}. \end{eqnarray*} For the sake of simplicity, we use a learning sample <>= ls <- data.frame(y = gl(3, 50, labels = c("A", "B", "C")), x1 = rnorm(150) + rep(c(1, 0, 0), c(50, 50, 50)), x2 = runif(150)) @ in the following illustrations. A generic algorithm for recursive binary partitioning for a given learning sample $\LS$ can be formulated using non-negative integer valued case weights $\w = (w_1, \dots, w_n)$. Each node of a tree is represented by a vector of case weights having non-zero elements when the corresponding observations are elements of the node and are zero otherwise. The following algorithm implements recursive binary partitioning: \begin{enumerate} \item For case weights $\w$ test the global null hypothesis of independence between any of the $m$ covariates and the response. Stop if this hypothesis cannot be rejected. Otherwise select the covariate $X_{j^*}$ with strongest association to $\Y$. \item Choose a set $A^* \subset \sX_{j^*}$ in order to split $\sX_{j^*}$ into two disjoint sets $A^*$ and $\sX_{j^*} \setminus A^*$. The case weights $\w_\text{left}$ and $\w_\text{right}$ determine the two subgroups with $w_{\text{left},i} = w_i I(X_{j^*i} \in A^*)$ and $w_{\text{right},i} = w_i I(X_{j^*i} \not\in A^*)$ for all $i = 1, \dots, n$ ($I(\cdot)$ denotes the indicator function). \item Recursively repeat steps 1 and 2 with modified case weights $\w_\text{left}$ and $\w_\text{right}$, respectively. \end{enumerate} The separation of variable selection and splitting procedure into steps 1 and 2 of the algorithm is the key for the construction of interpretable tree structures not suffering a systematic tendency towards covariates with many possible splits or many missing values. In addition, a statistically motivated and intuitive stopping criterion can be implemented: We stop when the global null hypothesis of independence between the response and any of the $m$ covariates cannot be rejected at a pre-specified nominal level~$\alpha$. The algorithm induces a partition $\{B_1, \dots, B_r\}$ of the covariate space $\sX$, where each cell $B \in \{B_1, \dots, B_r\}$ is associated with a vector of case weights. In package \pkg{party}, the dependency structure and the variables may be specified in a traditional formula based way <>= library("party") ctree(y ~ x1 + x2, data = ls) @ Case counts $\w$ may be specified using the \texttt{weights} argument. \section{Recursive partitioning by conditional inference} \label{framework} In the main part of this section we focus on step 1 of the generic algorithm. Unified tests for independence are constructed by means of the conditional distribution of linear statistics in the permutation test framework developed by \cite{StrasserWeber1999}. The determination of the best binary split in one selected covariate and the handling of missing values is performed based on standardized linear statistics within the same framework as well. \subsection{Variable selection and stopping criteria} At step 1 of the generic algorithm given in Section~\ref{algo} we face an independence problem. We need to decide whether there is any information about the response variable covered by any of the $m$ covariates. In each node identified by case weights $\w$, the global hypothesis of independence is formulated in terms of the $m$ partial hypotheses $H_0^j: D(\Y | X_j) = D(\Y)$ with global null hypothesis $H_0 = \bigcap_{j = 1}^m H_0^j$. When we are not able to reject $H_0$ at a pre-specified level $\alpha$, we stop the recursion. If the global hypothesis can be rejected, we measure the association between $\Y$ and each of the covariates $X_j, j = 1, \dots, m$, by test statistics or $P$-values indicating the deviation from the partial hypotheses $H_0^j$. For notational convenience and without loss of generality we assume that the case weights $w_i$ are either zero or one. The symmetric group of all permutations of the elements of $(1, \dots, n)$ with corresponding case weights $w_i = 1$ is denoted by $S(\LS, \w)$. A more general notation is given in the Appendix. We measure the association between $\Y$ and $X_j, j = 1, \dots, m$, by linear statistics of the form \begin{eqnarray} \label{linstat} \T_j(\LS, \w) = \vec \left( \sum_{i=1}^n w_i g_j(X_{ji}) h(\Y_i, (\Y_1, \dots, \Y_n))^\top \right) \in \R^{p_jq} \end{eqnarray} where $g_j: \sX_j \rightarrow \R^{p_j}$ is a non-random transformation of the covariate $X_j$. The transformation may be specified using the \texttt{xtrafo} argument. If, for example, a ranking \textit{both} \texttt{x1} and \texttt{x2} is required, <>= ctree(y ~ x1 + x2, data = ls, xtrafo = function(data) trafo(data, numeric_trafo = rank)) @ can be used. The \emph{influence function} $h: \sY \times \sY^n \rightarrow \R^q$ depends on the responses $(\Y_1, \dots, \Y_n)$ in a permutation symmetric way. %%, i.e., $h(\Y_i, (\Y_1, \dots, \Y_n)) = h(\Y_i, (\Y_{\sigma(1)}, \dots, %%\Y_{\sigma(n)}))$ for all permutations $\sigma \in S(\LS, \w)$. Section~\ref{examples} explains how to choose $g_j$ and $h$ in different practical settings. A $p_j \times q$ matrix is converted into a $p_jq$ column vector by column-wise combination using the `vec' operator. The influence function can be specified using the \texttt{ytrafo} argument. The distribution of $\T_j(\LS, \w)$ under $H_0^j$ depends on the joint distribution of $\Y$ and $X_j$, which is unknown under almost all practical circumstances. At least under the null hypothesis one can dispose of this dependency by fixing the covariates and conditioning on all possible permutations of the responses. This principle leads to test procedures known as \textit{permutation tests}. The conditional expectation $\mu_j \in \R^{p_jq}$ and covariance $\Sigma_j \in \R^{p_jq \times p_jq}$ of $\T_j(\LS, \w)$ under $H_0$ given all permutations $\sigma \in S(\LS, \w)$ of the responses are derived by \cite{StrasserWeber1999}: \begin{eqnarray} \mu_j & = & \E(\T_j(\LS, \w) | S(\LS, \w)) = \vec \left( \left( \sum_{i = 1}^n w_i g_j(X_{ji}) \right) \E(h | S(\LS, \w))^\top \right), \nonumber \\ \Sigma_j & = & \V(\T_j(\LS, \w) | S(\LS, \w)) \nonumber \\ & = & \frac{\ws}{\ws - 1} \V(h | S(\LS, \w)) \otimes \left(\sum_i w_i g_j(X_{ji}) \otimes w_i g_j(X_{ji})^\top \right) \label{expectcovar} \\ & - & \frac{1}{\ws - 1} \V(h | S(\LS, \w)) \otimes \left( \sum_i w_i g_j(X_{ji}) \right) \otimes \left( \sum_i w_i g_j(X_{ji})\right)^\top \nonumber \end{eqnarray} where $\ws = \sum_{i = 1}^n w_i$ denotes the sum of the case weights, $\otimes$ is the Kronecker product and the conditional expectation of the influence function is \begin{eqnarray*} \E(h | S(\LS, \w)) = \ws^{-1} \sum_i w_i h(\Y_i, (\Y_1, \dots, \Y_n)) \in \R^q \end{eqnarray*} with corresponding $q \times q$ covariance matrix \begin{eqnarray*} \V(h | S(\LS, \w)) = \ws^{-1} \sum_i w_i \left(h(\Y_i, (\Y_1, \dots, \Y_n)) - \E(h | S(\LS, \w)) \right) \\ \left(h(\Y_i, (\Y_1, \dots, \Y_n)) - \E(h | S(\LS, \w))\right)^\top. \end{eqnarray*} Having the conditional expectation and covariance at hand we are able to standardize a linear statistic $\T \in \R^{pq}$ of the form (\ref{linstat}) for some $p \in \{p_1, \dots, p_m\}$. Univariate test statistics~$c$ mapping an observed multivariate linear statistic $\bft \in \R^{pq}$ into the real line can be of arbitrary form. An obvious choice is the maximum of the absolute values of the standardized linear statistic \begin{eqnarray*} c_\text{max}(\bft, \mu, \Sigma) = \max_{k = 1, \dots, pq} \left| \frac{(\bft - \mu)_k}{\sqrt{(\Sigma)_{kk}}} \right| \end{eqnarray*} utilizing the conditional expectation $\mu$ and covariance matrix $\Sigma$. The application of a quadratic form $c_\text{quad}(\bft, \mu, \Sigma) = (\bft - \mu) \Sigma^+ (\bft - \mu)^\top$ is one alternative, although computationally more expensive because the Moore-Penrose inverse $\Sigma^+$ of $\Sigma$ is involved. The type of test statistic to be used can be specified by means of the \texttt{ctree\_control} function, for example \begin{Schunk} \begin{Sinput} R> ctree(y ~ x1 + x2, data = ls, control = ctree_control(teststat = "max")) \end{Sinput} \end{Schunk} uses $c_\text{max}$ and \begin{Schunk} \begin{Sinput} R> ctree(y ~ x1 + x2, data = ls, control = ctree_control(teststat = "quad")) \end{Sinput} \end{Schunk} takes $c_\text{quad}$ (the default). It is important to note that the test statistics $c(\bft_j, \mu_j, \Sigma_j), j = 1, \dots, m$, cannot be directly compared in an unbiased way unless all of the covariates are measured at the same scale, i.e., $p_1 = p_j, j = 2, \dots, m$. In order to allow for an unbiased variable selection we need to switch to the $P$-value scale because $P$-values for the conditional distribution of test statistics $c(\T_j(\LS, \w), \mu_j, \Sigma_j)$ can be directly compared among covariates measured at different scales. In step 1 of the generic algorithm we select the covariate with minimum $P$-value, i.e., the covariate $X_{j^*}$ with $j^* = \argmin_{j = 1, \dots, m} P_j$, where \begin{displaymath} P_j = \Prob_{H_0^j}(c(\T_j(\LS, \w), \mu_j, \Sigma_j) \ge c(\bft_j, \mu_j, \Sigma_j) | S(\LS, \w)) \end{displaymath} denotes the $P$-value of the conditional test for $H_0^j$. So far, we have only addressed testing each partial hypothesis $H_0^j$, which is sufficient for an unbiased variable selection. A global test for $H_0$ required in step 1 can be constructed via an aggregation of the transformations $g_j, j = 1, \dots, m$, i.e., using a linear statistic of the form \begin{eqnarray*} \T(\LS, \w) = \vec \left( \sum_{i=1}^n w_i \left(g_1(X_{1i})^\top, \dots, g_m(X_{mi})^\top\right)^\top h(\Y_i, (\Y_1, \dots, \Y_n))^\top \right). %%\in \R^{\sum_j p_jq} \end{eqnarray*} However, this approach is less attractive for learning samples with missing values. Universally applicable approaches are multiple test procedures based on $P_1, \dots, P_m$. Simple Bonferroni-adjusted $P$-values ($mP_j$ prior to version 0.8-4, now $1 - (1 - P_j)^m$ is used), available via <>= ctree_control(testtype = "Bonferroni") @ or a min-$P$-value resampling approach <>= ctree_control(testtype = "MonteCarlo") @ are just examples and we refer to the multiple testing literature \citep[e.g.,][]{WestfallYoung1993} for more advanced methods. We reject $H_0$ when the minimum of the adjusted $P$-values is less than a pre-specified nominal level $\alpha$ and otherwise stop the algorithm. In this sense, $\alpha$ may be seen as a unique parameter determining the size of the resulting trees. \subsection{Splitting criteria} Once we have selected a covariate in step 1 of the algorithm, the split itself can be established by any split criterion, including those established by \cite{classifica:1984} or \cite{Shih1999}. Instead of simple binary splits, multiway splits can be implemented as well, for example utilizing the work of \cite{OBrien2004}. However, most splitting criteria are not applicable to response variables measured at arbitrary scales and we therefore utilize the permutation test framework described above to find the optimal binary split in one selected covariate $X_{j^*}$ in step~2 of the generic algorithm. The goodness of a split is evaluated by two-sample linear statistics which are special cases of the linear statistic (\ref{linstat}). For all possible subsets $A$ of the sample space $\sX_{j^*}$ the linear statistic \begin{eqnarray*} \T^A_{j^*}(\LS, \w) = \vec \left( \sum_{i=1}^n w_i I(X_{j^*i} \in A) h(\Y_i, (\Y_1, \dots, \Y_n))^\top \right) \in \R^{q} \end{eqnarray*} induces a two-sample statistic measuring the discrepancy between the samples $\{ \Y_i | w_i > 0 \text{ and } X_{ji} \in A; i = 1, \dots, n\}$ and $\{ \Y_i | w_i > 0 \text{ and } X_{ji} \not\in A; i = 1, \dots, n\}$. The conditional expectation $\mu_{j^*}^A$ and covariance $\Sigma_{j^*}^A$ can be computed by (\ref{expectcovar}). The split $A^*$ with a test statistic maximized over all possible subsets $A$ is established: \begin{eqnarray} \label{split} A^* = \argmax_A c(\bft_{j^*}^A, \mu_{j^*}^A, \Sigma_{j^*}^A). \end{eqnarray} The statistics $c(\bft_{j^*}^A, \mu_{j^*}^A, \Sigma_{j^*}^A)$ are available for each node with <>= ctree_control(savesplitstats = TRUE) @ and can be used to depict a scatter plot of the covariate $\sX_{j^*}$ against the statistics. Note that we do not need to compute the distribution of $c(\bft_{j^*}^A, \mu_{j^*}^A, \Sigma_{j^*}^A)$ in step~2. In order to anticipate pathological splits one can restrict the number of possible subsets that are evaluated, for example by introducing restrictions on the sample size or the sum of the case weights in each of the two groups of observations induced by a possible split. For example, <>= ctree_control(minsplit = 20) @ requires the sum of the weights in both the left and right daughter node to exceed the value of $20$. \subsection{Missing values and surrogate splits} If an observation $X_{ji}$ in covariate $X_j$ is missing, we set the corresponding case weight $w_i$ to zero for the computation of $\T_j(\LS, \w)$ and, if we would like to split in $X_j$, in $\T_{j}^A(\LS, \w)$ as well. Once a split $A^*$ in $X_j$ has been implemented, surrogate splits can be established by searching for a split leading to roughly the same division of the observations as the original split. One simply replaces the original response variable by a binary variable $I(X_{ji} \in A^*)$ coding the split and proceeds as described in the previous part. The number of surrogate splits can be controlled using <>= ctree_control(maxsurrogate = 3) @ \subsection{Inspecting a tree} Once we have fitted a conditional tree via <>= ct <- ctree(y ~ x1 + x2, data = ls) @ we can inspect the results via a \texttt{print} method <>= ct @ or by looking at a graphical representation as in Figure~\ref{party-plot1}. \begin{figure}[h] \begin{center} <>= plot(ct) @ \caption{A graphical representation of a classification tree. \label{party-plot1}} \end{center} \end{figure} Each node can be extracted by its node number, i.e., the root node is <>= nodes(ct, 1) @ This object is a conventional list with elements <>= names(nodes(ct, 1)[[1]]) @ and we refer to the manual pages for a description of those elements. The \texttt{Predict} function aims at computing predictions in the space of the response variable, in our case a factor <>= Predict(ct, newdata = ls) @ When we are interested in properties of the conditional distribution of the response given the covariates, we use <>= treeresponse(ct, newdata = ls[c(1, 51, 101),]) @ which, in our case, is a list with conditional class probabilities. We can determine the node numbers of nodes some new observations are falling into by <>= where(ct, newdata = ls[c(1,51,101),]) @ \section{Examples} \label{examples} \subsection{Univariate continuous or discrete regression} For a univariate numeric response $\Y \in \R$, the most natural influence function is the identity $h(\Y_i, (\Y_1, \dots, \Y_n)) = \Y_i$. In case some observations with extremely large or small values have been observed, a ranking of the observations may be appropriate: $h(\Y_i, (\Y_1, \dots, \Y_n)) = \sum_{k=1}^n w_k I(\Y_k \le \Y_i)$ for $i = 1, \dots, n$. Numeric covariates can be handled by the identity transformation $g_{ji}(x) = x$ (ranks are possible, too). Nominal covariates at levels $1, \dots, K$ are represented by $g_{ji}(k) = e_K(k)$, the unit vector of length $K$ with $k$th element being equal to one. Due to this flexibility, special test procedures like the Spearman test, the Wilcoxon-Mann-Whitney test or the Kruskal-Wallis test and permutation tests based on ANOVA statistics or correlation coefficients are covered by this framework. Splits obtained from (\ref{split}) maximize the absolute value of the standardized difference between two means of the values of the influence functions. For prediction, one is usually interested in an estimate of the expectation of the response $\E(\Y | \X = \x)$ in each cell, an estimate can be obtained by \begin{eqnarray*} \hat{\E}(\Y | \X = \x) = \left(\sum_{i=1}^n w_i(\x)\right)^{-1} \sum_{i=1}^n w_i(\x) \Y_i. \end{eqnarray*} \subsection{Censored regression} The influence function $h$ may be chosen as Logrank or Savage scores taking censoring into account and one can proceed as for univariate continuous regression. This is essentially the approach first published by \cite{regression:1988}. An alternative is the weighting scheme suggested by \cite{MolinaroDudiotvdLaan2003}. A weighted Kaplan-Meier curve for the case weights $\w(\x)$ can serve as prediction. \subsection{$J$-class classification} The nominal response variable at levels $1, \dots, J$ is handled by influence functions\linebreak $h(\Y_i, (\Y_1, \dots, \Y_n)) = e_J(\Y_i)$. Note that for a nominal covariate $X_j$ at levels $1, \dots, K$ with $g_{ji}(k) = e_K(k)$ the corresponding linear statistic $\T_j$ is a vectorized contingency table. The conditional class probabilities can be estimated via \begin{eqnarray*} \hat{\Prob}(\Y = y | \X = \x) = \left(\sum_{i=1}^n w_i(\x)\right)^{-1} \sum_{i=1}^n w_i(\x) I(\Y_i = y), \quad y = 1, \dots, J. \end{eqnarray*} \subsection{Ordinal regression} Ordinal response variables measured at $J$ levels, and ordinal covariates measured at $K$ levels, are associated with score vectors $\xi \in \R^J$ and $\gamma \in \R^K$, respectively. Those scores reflect the `distances' between the levels: If the variable is derived from an underlying continuous variable, the scores can be chosen as the midpoints of the intervals defining the levels. The linear statistic is now a linear combination of the linear statistic $\T_j$ of the form \begin{eqnarray*} \M \T_j(\LS, \w) & = & \vec \left( \sum_{i=1}^n w_i \gamma^\top g_j(X_{ji}) \left(\xi^\top h(\Y_i, (\Y_1, \dots, \Y_n)\right)^\top \right) \end{eqnarray*} with $g_j(x) = e_K(x)$ and $h(\Y_i, (\Y_1, \dots, \Y_n)) = e_J(\Y_i)$. If both response and covariate are ordinal, the matrix of coefficients is given by the Kronecker product of both score vectors $\M = \xi \otimes \gamma \in \R^{1, KJ}$. In case the response is ordinal only, the matrix of coefficients $\M$ is a block matrix \begin{eqnarray*} \M = \left( \begin{array}{ccc} \xi_1 & & 0 \\ & \ddots & \\ 0 & & \xi_1 \end{array} \right| %%\left. %% \begin{array}{ccc} %% \xi_2 & & 0 \\ %% & \ddots & \\ %% 0 & & \xi_2 %% \end{array} \right| %%\left. \begin{array}{c} \\ \hdots \\ \\ \end{array} %%\right. \left| \begin{array}{ccc} \xi_q & & 0 \\ & \ddots & \\ 0 & & \xi_q \end{array} \right) %%\in \R^{K, KJ} %%\end{eqnarray*} \text{ or } %%and if one covariate is ordered %%\begin{eqnarray*} %%\M = \left( %% \begin{array}{cccc} %% \gamma & 0 & & 0 \\ %% 0 & \gamma & & \vdots \\ %% 0 & 0 & \hdots & 0 \\ %% \vdots & \vdots & & 0 \\ %% 0 & 0 & & \gamma %% \end{array} %% \right) \M = \text{diag}(\gamma) %%\in \R^{J, KJ} \end{eqnarray*} when one covariate is ordered but the response is not. For both $\Y$ and $X_j$ being ordinal, the corresponding test is known as linear-by-linear association test \citep{Agresti2002}. Scores can be supplied to \texttt{ctree} using the \texttt{scores} argument, see Section~\ref{illustrations} for an example. \subsection{Multivariate regression} For multivariate responses, the influence function is a combination of influence functions appropriate for any of the univariate response variables discussed in the previous paragraphs, e.g., indicators for multiple binary responses \citep{Zhang1998,NohSongPark2004}, Logrank or Savage scores for multiple failure times %%\citep[for example tooth loss times, ][]{SuFan2004} and the original observations or a rank transformation for multivariate regression \citep{Death2002}. \section{Illustrations and applications} \label{illustrations} In this section, we present regression problems which illustrate the potential fields of application of the methodology. Conditional inference trees based on $c_\text{quad}$-type test statistics using the identity influence function for numeric responses and asymptotic $\chi^2$ distribution are applied. For the stopping criterion a simple Bonferroni correction is used and we follow the usual convention by choosing the nominal level of the conditional independence tests as $\alpha = 0.05$. \subsection{Tree pipit abundance} <>= data("treepipit", package = "coin") tptree <- ctree(counts ~ ., data = treepipit) @ \begin{figure}[t] \begin{center} <>= plot(tptree, terminal_panel = node_hist(tptree, breaks = 0:6-0.5, ymax = 65, horizontal = FALSE, freq = TRUE)) @ \caption{Conditional regression tree for the tree pipit data.} \end{center} \end{figure} <>= x <- tptree@tree @ The impact of certain environmental factors on the population density of the tree pipit \textit{Anthus trivialis} %%in Frankonian oak forests is investigated by \cite{MuellerHothorn2004}. The occurrence of tree pipits was recorded several times at $n = 86$ stands which were established on a long environmental gradient. Among nine environmental factors, the covariate showing the largest association to the number of tree pipits is the canopy overstorey $(P = $\Sexpr{round(1 - x$criterion[[3]], 3)}$)$. Two groups of stands can be distinguished: Sunny stands with less than $40\%$ canopy overstorey $(n = \Sexpr{sum(x$left$weights)})$ show a significantly higher density of tree pipits compared to darker stands with more than $40\%$ canopy overstorey $(n = \Sexpr{sum(x$right$weights)})$. This result is important for management decisions in forestry enterprises: Cutting the overstorey with release of old oaks creates a perfect habitat for this indicator species of near natural forest environments. \subsection{Glaucoma and laser scanning images} <>= data("GlaucomaM", package = "TH.data") gtree <- ctree(Class ~ ., data = GlaucomaM) @ <>= x <- gtree@tree @ Laser scanning images taken from the eye background are expected to serve as the basis of an automated system for glaucoma diagnosis. Although prediction is more important in this application \citep{new-glauco:2003}, a simple visualization of the regression relationship is useful for comparing the structures inherent in the learning sample with subject matter knowledge. For $98$ patients and $98$ controls, matched by age and gender, $62$ covariates describing the eye morphology are available. The data is part of the \pkg{TH.data} package, \url{http://CRAN.R-project.org}). The first split in Figure~\ref{glaucoma} separates eyes with a volume above reference less than $\Sexpr{x$psplit$splitpoint} \text{ mm}^3$ in the inferior part of the optic nerve head (\texttt{vari}). Observations with larger volume are mostly controls, a finding which corresponds to subject matter knowledge: The volume above reference measures the thickness of the nerve layer, expected to decrease with a glaucomatous damage of the optic nerve. Further separation is achieved by the volume above surface global (\texttt{vasg}) and the volume above reference in the temporal part of the optic nerve head (\texttt{vart}). \setkeys{Gin}{width=.9\textwidth} \begin{figure}[p] \begin{center} <>= plot(gtree) @ \caption{Conditional inference tree for the glaucoma data. For each inner node, the Bonferroni-adjusted $P$-values are given, the fraction of glaucomatous eyes is displayed for each terminal node. (Note: node 7 was not splitted prior to version 0.8-4 because of using another formulation of the Bonferroni-adjustment.) \label{glaucoma}} <>= plot(gtree, inner_panel = node_barplot, edge_panel = function(...) invisible(), tnex = 1) @ \caption{Conditional inference tree for the glaucoma data with the fraction of glaucomatous eyes displayed for both inner and terminal nodes. \label{glaucoma-inner}} \end{center} \end{figure} The plot in Figure~\ref{glaucoma} is generated by <>= plot(gtree) @ \setkeys{Gin}{width=\textwidth} and shows the distribution of the classes in the terminal nodes. This distribution can be shown for the inner nodes as well, namely by specifying the appropriate panel generating function (\texttt{node\_barplot} in our case), see Figure~\ref{glaucoma-inner}. <>= plot(gtree, inner_panel = node_barplot, edge_panel = function(...) invisible(), tnex = 1) @ As mentioned in Section~\ref{framework}, it might be interesting to have a look at the split statistics the split point estimate was derived from. Those statistics can be extracted from the \texttt{splitstatistic} element of a split and one can easily produce scatterplots against the selected covariate. For all three inner nodes of \texttt{gtree}, we produce such a plot in Figure~\ref{glaucoma-split}. For the root node, the estimated split point seems very natural, since the process of split statistics seems to have a clear maximum indicating that the simple split point model is something reasonable to assume here. This is less obvious for nodes $2$ and, especially, $3$. \begin{figure}[t] \begin{center} <>= cex <- 1.6 inner <- nodes(gtree, c(1, 2, 5)) layout(matrix(1:length(inner), ncol = length(inner))) out <- sapply(inner, function(i) { splitstat <- i$psplit$splitstatistic x <- GlaucomaM[[i$psplit$variableName]][splitstat > 0] plot(x, splitstat[splitstat > 0], main = paste("Node", i$nodeID), xlab = i$psplit$variableName, ylab = "Statistic", ylim = c(0, 10), cex.axis = cex, cex.lab = cex, cex.main = cex) abline(v = i$psplit$splitpoint, lty = 3) }) @ \caption{Split point estimation in each inner node. The process of the standardized two-sample test statistics for each possible split point in the selected input variable is show. The estimated split point is given as vertical dotted line. \label{glaucoma-split}} \end{center} \end{figure} The class predictions of the tree for the learning sample (and for new observations as well) can be computed using the \texttt{Predict} function. A comparison with the true class memberships is done by <>= table(Predict(gtree), GlaucomaM$Class) @ When we are interested in conditional class probabilities, the \texttt{treeresponse} method must be used. A graphical representation is shown in Figure~\ref{glaucoma-probplot}. \setkeys{Gin}{width=.5\textwidth} \begin{figure}[ht!] \begin{center} <>= prob <- sapply(treeresponse(gtree), function(x) x[1]) + runif(nrow(GlaucomaM), min = -0.01, max = 0.01) splitvar <- nodes(gtree, 1)[[1]]$psplit$variableName plot(GlaucomaM[[splitvar]], prob, pch = as.numeric(GlaucomaM$Class), ylab = "Conditional Class Prob.", xlab = splitvar) abline(v = nodes(gtree, 1)[[1]]$psplit$splitpoint, lty = 2) legend(0.15, 0.7, pch = 1:2, legend = levels(GlaucomaM$Class), bty = "n") @ \caption{Estimated conditional class probabilities (slightly jittered) for the Glaucoma data depending on the first split variable. The vertical line denotes the first split point. \label{glaucoma-probplot}} \end{center} \end{figure} \subsection{Node positive breast cancer} <>= data("GBSG2", package = "TH.data") stree <- ctree(Surv(time, cens) ~ ., data = GBSG2) @ \setkeys{Gin}{width=\textwidth} \begin{figure}[t] \begin{center} <>= plot(stree) @ \caption{Tree-structured survival model for the GBSG2 data and the distribution of survival times in the terminal nodes. The median survival time is displayed in each terminal node of the tree. \label{gbsg2}} \end{center} \end{figure} Recursive partitioning for censored responses has attracted a lot of interest \citep[e.g.,][]{regression:1988,relative-r:1992}. Survival trees using $P$-value adjusted Logrank statistics are used by \cite{statistics:2001a} for the evaluation of prognostic factors for the German Breast Cancer Study Group (GBSG2) data, a prospective controlled clinical trial on the treatment of node positive breast cancer patients. Here, we use Logrank scores as well. Complete data of seven prognostic factors of $686$ women are used for prognostic modeling, the dataset is available within the \pkg{TH.data} package. The number of positive lymph nodes (\texttt{pnodes}) and the progesterone receptor (\texttt{progrec}) have been identified as prognostic factors in the survival tree analysis by \cite{statistics:2001a}. Here, the binary variable coding whether a hormonal therapy was applied or not (\texttt{horTh}) additionally is part of the model depicted in Figure~\ref{gbsg2}. The estimated median survival time for new patients is less informative compared to the whole Kaplan-Meier curve estimated from the patients in the learning sample for each terminal node. We can compute those `predictions' by means of the \texttt{treeresponse} method <>= treeresponse(stree, newdata = GBSG2[1:2,]) @ \subsection{Mammography experience} <>= data("mammoexp", package = "TH.data") mtree <- ctree(ME ~ ., data = mammoexp) @ \begin{figure}[t] \begin{center} <>= plot(mtree) @ \caption{Ordinal regression for the mammography experience data with the fractions of (never, within a year, over one year) given in the nodes. No admissible split was found for node 4 because only $5$ of $91$ women reported a family history of breast cancer and the sample size restrictions would require more than $5$ observations in each daughter node. \label{mammoexp}} \end{center} \end{figure} Ordinal response variables are common in investigations where the response is a subjective human interpretation. We use an example given by \cite{HosmerLemeshow2000}, p. 264, studying the relationship between the mammography experience (never, within a year, over one year) and opinions about mammography expressed in questionnaires answered by $n = 412$ women. The resulting partition based on scores $\xi = (1,2,3)$ is given in Figure~\ref{mammoexp}. Women who (strongly) agree with the question `You do not need a mammogram unless you develop symptoms' seldomly have experienced a mammography. The variable \texttt{benefit} is a score with low values indicating a strong agreement with the benefits of the examination. For those women in (strong) disagreement with the first question above, low values of \texttt{benefit} identify persons being more likely to have experienced such an examination at all. \bibliography{partyrefs} \end{document} \subsection{Hunting spiders} Finally, we take a closer look at a challenging dataset on animal abundance first reported by \cite{AartSmeenk1975} and re-analyzed by \cite{Death2002} using regression trees dealing with multivariate responses. The abundance of $12$ hunting spider species is regressed on six environmental variables (\texttt{water}, \texttt{sand}, \texttt{moss}, \texttt{reft}, \texttt{twigs} and \texttt{herbs}) for $n = 28$ observations. Because of the small sample size we allow for a split if at least $5$ observations are element of a node and approximate the distribution of a $c_\text{max}$ test statistic by $9999$ Monte-Carlo replications. The prognostic factors \texttt{twigs} and \texttt{water} found by \cite{Death2002} are confirmed by the model shown in Figure~\ref{spider} which additionally identifies \texttt{reft}. The data are available in package \pkg{mvpart} \citep{mvpart2004} at \url{http://CRAN.R-project.org}. <>= data("spider", package = "mvpart") sptree <- ctree(arct.lute + pard.lugu + zora.spin + pard.nigr + pard.pull + aulo.albi + troc.terr + alop.cune + pard.mont + alop.acce + alop.fabr + arct.peri ~ herbs+reft+moss+sand+twigs+water, controls = ctree_control(teststat = "max", testtype = "MonteCarlo", nresample = 9999, minsplit = 5, mincriterion = 0.9), data = spider) sptree@tree$criterion library("coin") data("spider", package = "mvpart") it <- independence_test(arct.lute + pard.lugu + zora.spin + pard.nigr + pard.pull + aulo.albi + troc.terr + alop.cune + pard.mont + alop.acce + alop.fabr + arct.peri ~ herbs+reft+moss+sand+twigs+water, data = spider, distribution = approximate(B = 19999)) statistic(it, "standardized") pvalue(it) @ \begin{figure}[t] \begin{center} <>= plot(sptree, terminal_panel = node_terminal) @ \caption{Regression tree for hunting spider abundance. The species with maximal abundance is given for each terminal node. \label{spider}} \end{center} \end{figure} party/inst/doc/MOB.R0000644000176200001440000001040213437524312013674 0ustar liggesusers### R code from vignette source 'MOB.Rnw' ################################################### ### code chunk number 1: setup ################################################### require("party") options(useFancyQuotes = FALSE) ################################################### ### code chunk number 2: MOB.Rnw:232-233 ################################################### library("party") ################################################### ### code chunk number 3: MOB.Rnw:238-239 ################################################### data("BostonHousing", package = "mlbench") ################################################### ### code chunk number 4: MOB.Rnw:253-255 ################################################### BostonHousing$lstat <- log(BostonHousing$lstat) BostonHousing$rm <- BostonHousing$rm^2 ################################################### ### code chunk number 5: MOB.Rnw:270-272 ################################################### BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1, labels = c("no", "yes")) BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE) ################################################### ### code chunk number 6: MOB.Rnw:283-285 ################################################### ctrl <- mob_control(alpha = 0.05, bonferroni = TRUE, minsplit = 40, objfun = deviance, verbose = TRUE) ################################################### ### code chunk number 7: MOB.Rnw:298-300 ################################################### fmBH <- mob(medv ~ lstat + rm | zn + indus + chas + nox + age + dis + rad + tax + crim + b + ptratio, data = BostonHousing, control = ctrl, model = linearModel) ################################################### ### code chunk number 8: MOB.Rnw:309-310 ################################################### fmBH ################################################### ### code chunk number 9: MOB.Rnw:316-317 (eval = FALSE) ################################################### ## plot(fmBH) ################################################### ### code chunk number 10: BostonHousing-plot ################################################### plot(fmBH) ################################################### ### code chunk number 11: MOB.Rnw:350-351 ################################################### coef(fmBH) ################################################### ### code chunk number 12: MOB.Rnw:357-358 ################################################### summary(fmBH, node = 7) ################################################### ### code chunk number 13: MOB.Rnw:365-366 ################################################### sctest(fmBH, node = 7) ################################################### ### code chunk number 14: MOB.Rnw:372-375 ################################################### mean(residuals(fmBH)^2) logLik(fmBH) AIC(fmBH) ################################################### ### code chunk number 15: MOB.Rnw:378-380 ################################################### nt <- NROW(coef(fmBH)) nk <- NCOL(coef(fmBH)) ################################################### ### code chunk number 16: MOB.Rnw:396-398 ################################################### data("PimaIndiansDiabetes2", package = "mlbench") PimaIndiansDiabetes <- na.omit(PimaIndiansDiabetes2[,-c(4, 5)]) ################################################### ### code chunk number 17: MOB.Rnw:418-420 ################################################### fmPID <- mob(diabetes ~ glucose | pregnant + pressure + mass + pedigree + age, data = PimaIndiansDiabetes, model = glinearModel, family = binomial()) ################################################### ### code chunk number 18: MOB.Rnw:425-426 (eval = FALSE) ################################################### ## plot(fmPID) ################################################### ### code chunk number 19: PimaIndiansDiabetes-plot ################################################### plot(fmPID) ################################################### ### code chunk number 20: MOB.Rnw:460-462 ################################################### coef(fmPID) exp(coef(fmPID)[,2]) ################################################### ### code chunk number 21: MOB.Rnw:465-466 ################################################### risk <- round(100 * (exp(coef(fmPID)[,2])-1), digits = 1) party/inst/doc/MOB.pdf0000644000176200001440000041323513437524527014267 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3008 /Filter /FlateDecode /N 55 /First 434 >> stream xZks۶~56A0lD诿)v;6,v],p"#"T($P I(}y ?1e~a&'L 3t$qQ( G!7="Ba"ғ!}"EsNd L'DyԇLxR< ~1.TQ$ HCNH 8Iᜄ0$ $W&X}H"!0H#Q!CNE {Lc0:bV 2GCatfyK(h 0O =zamD Ahd&~Б.Y\7!X$+t|_D7_޺y7'KN' 俐4 "Rs{ 9]gβU!:t\$0.4ypo=gy?ULs}I>'Ŝ!F+rO?B>4;_?,'n,^"KdQ%zUQ!n.l`# -rw1ҳ$O@&3ce(c`y<Mt):4=RF偛=BYY:=z#ȣɓhM AAG ><Ʊrj*(^}GB}q^,/`2`'Q(-O֧Gܧz;g#Ww1NeG))ZoGn}0}3&Yd{z<@NZE.[om, ;U¸q$bnp(B~p{:{g">+ҫ #՟ĵnͧ{L'">1@tF5]M hN u#ӣE|xf'_ L#P97qzkֶOx(sh*ΕzyujVǺ_3]D[ʒ{F56Q#iu*DVkS!{E(в"-~ MֻRaS|%V"vH?8 "#nm.|4(^Tw2<}t{tg =]t?_ѫ^s5qW47~4|@J/ִ5D?!*.Le i[hyP i1qw 0i^u^u>HrEÒso3k}CUqwcx6=d~&BHVf8Wyjg̹Pcw(Z({C#1\S3~K=sduTfo6۷gvp%=:O={/qX{M/rwDg:OrЎBrsWn:^Xh:tOF_>,:fܠF{]C5pG6 kۆՉkke⦓O8OpMY #ṻMdޢMMf6mXhy0Dz5LL ~Ie 4YO73ڸo KͨM0WDY~7Q~O0:6ON+nj/{Iɱ mnm!}qNUJGVHv_[]2jT7Iݪ|4a?Z*R 8Ji?R*Cy]-<7>VW["`0]igy|h'pͬZ4y_w4J~Ҝ@nozN > stream GPL Ghostscript 9.26 parametric models, object-orientation, recursive partitioning 2019-03-05T17:52:39+01:00 2019-03-05T17:52:39+01:00 LaTeX with hyperref package party with the mob: Model-Based Recursive Partitioning in RAchim Zeileis, Torsten Hothorn, Kurt Hornik endstream endobj 58 0 obj << /Type /ObjStm /Length 2033 /Filter /FlateDecode /N 54 /First 435 >> stream xY[O~?wWi00v,8vXfjIN V IݮK{t8RP -HZxA = )\;FIA$4/AFQ u3@*pCc!B*TMW`9VZ*$I[ 2M_R(qP)4ڄJIP)PYpKR@S"VCx^4@P8j!AIScx #멇o=W~2~(<+΋Y>lzSy}{3[PyibG!jmm먀w;_Pd~ўOm577 6@FFhuQYUg4w#ظ'9`u%{tua}cۭ>!~<. HWO*9 .غWڑ_Tu1bQWYEVj| !~s!;M+ fUp`8)yl$Pee #xkeBeiE^5 "`on!dw9}QivC>T=:pWTAPE3wO=VԬ]zjqM1OICI^QFwƵuJ(k㣽px+Vp7m1prY䆤VJێԟ=ؾ 8Ёr ;a 8 !wlڿsX6FWT:MD_Ilcd]2ؘ {,؜0ɮaטKY1d*`5*߾1EyDzG!vIsز>̀P߾΄jH('5Ip"Uq;6Qӱf%} *4w[)"u3[ƴJ(\F:`>O석36FMCvr6Ų0cl_G0CX*ea XEؿK1)sóϓA )=71?^kbmG,"rl;MTB?HL3'.曪E?̑lR=dW`BlpF8!])-+iAɪ5Ym /<±{! zfrQһ磰N}{?Ml8nPfˬ4df6;l OoFO~q-V[ԷY@9rm] 4).rO S9n?E6z*оB/9QifT̋^Xͳ>tRp'ͤG$8c['HqxqwYL;z>Ps {6~O_fΑm%e;Hsqކ/Rq-Ƚjq2/@Ӥ= T%//nݩ'|Aٹ> stream x][u~O8h:]*`DFbF2].ݡ( As.u9U=@6N:\ffVNjyss݅?.7z#FI+g7/^]jTMդnγq{iN)J.n~fpDH)/ r!& ?)gL f'vz7N8 ce/W a.IJ=m@G qYH9Uț7c錂gWm&_o Kn^cgWej rvO4XoQzi;ioax0qMGڿxM4S3-NrfQ<~d= ĢD=2c'@R7KB;pN轶z*l3~0Zo/qo_8<v1.X8W9/ӁDrLA&E* ۚʀp?lv<@ ̉s)z;yIxħ1 b|3 #L tZq?@ў}=#cs=!h^QjttƤ|QK0Cؾ[:I5[8bXA6QJf2l:@mAA_-HWR|=M;+xlly~J#լtd*ifOéq=C"*#Oᩳdt16]}u-6e>^(La\eϕDؖKa2G]wtO*n&@o`9g:;~xǮ-jHz3k,bl1D$kfQ )nk"{f#lFOBϳ*ՒADo/̔#LK6 uV1ћ4 L NL1D%Ӓ5`"H g,D#L8p Er(+'%*t1ml^.A/ lpWqoIhAҸQ`x pBh}Z7;`^ leǩ'Ȱټ[ 897΃ :(@Xꃫ<5o/< 6_HӾ-TY\.sa:kͶdZw>z<j? }&3p8&B [BC*e$V#3&;,2_/gc",V )h`*z\1?w%tL&gC;,?r. `i@&FkJ'Ug岻4NIy&V*'(@lB4#ϴ|GvVِ1CӉ~($ >I:kA( zBx3S ȃ)h:At9E$F% Y_u7Xֺekդ3 6i"0 "q1?H4# eҀ,E edB x0dbr+,` (s V{bWqͪx(3pg_ \ X/G0]Qy@о761z4MQ%x=0'S:oY7 r(p$F[ahpỴAMW|Wi k.!D^62. e,dUwP*K*t1 *@V'T䉑W?/[oUMdW`8(..0-Dؤ*{%;96:x,0I|֞$|g+b gST9Jx<:$~s)jJs )B7 ]>e6 L60/=p(Itۜh0@)ti `k<,J%pfK);8~ُQ6" (-k?G%c+]?^" h~; 9ˏ<;Z$>l奐7s)F3>VreLefIǒjgI5( )jסJ1'n-rl2t^k&TnAO5BYJҲYl@QRiMޒtl``o&/Ye^ X*=CB$^D>h_@_!<`܋jk54ΒB@,OHSJQFœ&0'jʠx.eH)}D=5 g6$P^4I2)M~}ikU2y>zi#pKL)`%iغe 5abd2VT:52/ %l؎1ғ6s is#SK5o"BRB d:JGȣ`)dCFq_Xc>$O'bK`/ӑ2p]w4-AuIC:m`,>1"f}>_z0M=U(,'я7Qx%R+(\={iTYm2+Q"qDtI:vÎ5qCEi<]]+z\L!'Z}l_]XSR;( +IǎYҐߴ 0xwo`RZ{l;SÍK]-f:#o%37ȴ@I1rd5r*L~t"^e;U _\!ethe&PZvXx){3V:C"hNd9.(+GrA]b*sgoqW'gl's#ej>E㓁hu:5m )i7 g`0e~7>z"U]Zv՜s/pu;'f>0evkL[Jdѧ>jJ"?VR}i:PlƋKiFwW;s&J( bX~o {?Bn{5iUA(ٱ^yOX6 .!ǜK*6i_#R<9*z'9yi[eGn4@z^4|r< u\3seز m7vJZ9獵ݫVedfpt֠XNuߊy"HXWF:Wwo ~0ji9?̕8]0^G<4b#2(&(µKGRĩs&oW eR7e3v_-1"+p Mum+1p(ՔIB/C8I1uCJX8'M& ?9$a=w{q@тs IɎoJǣɓ-G!>9!pljق~',4d3J;{٦ PT܏(7c4sAD8yQSpĻm*G ٮlr91j؃dUWb:A7\9s<>2{;P-~u?X'ce+W.9)<i ky%5!l[^6k$e:s(\UdIk~f[iT~x1)iؖ  *:(rp``fck)rWVL:jA0~7T,}(-Xt~x= *vdzY3!1>CsW\DL=>+qOQt `[xIMwEah,߁[ynDlజ;@ ś#4+|V.R=,nE9??JN35 n-,9KBe4 L&V`zI ՛0}F)f5  2;{m˚=KL"e8PxsbXsE+c-~$56!e\F  3',aIku {&+-`DxyXrɀPwua Eh(\:g@@tB!en sa2䔹c' ^ O"CK-8T5:6w&(jgs=ۚ6{=iCN`<`W䁉F*廊/@)-O}dNv(aGH[̦u/rx?|hxv&*紘 K2"5t3'DQ 4tkeS"?k V"<ٌQR&.`/]30܋`Xq u|y"xX㨷Yd Bgg6:;xW- $Mcn |)!hAyXRح5$I oYuHYRԖ%醡4LS;| њFx?es7` ̤/yx#n"nZ9k 8[ ʀq8QCۖ]Ê7څz.siE֝{)31VblMR j@:jIp[rrxgZ>]}#}l'q+'4xtC9?Dw͑!33(wIyS/~;1KVt@ ֽDt36Xd%y3i^B튯bLk kNA@f=40Ons/҄JḂiE-^;7wH EFG֧ ֫_\(44cm|x>N,]]Cőc"AБ&>WH O?̶KvM0[~c@J,(RլD=wL}k;%9p]KTN@g*_6M%8pĽ@xPM1r OqDC@~%g !*įnF6h6bි#.4+t"}[Ͱrސ ՎA_ú7%9䞌ւ9YA+k^Ŗ[ɭ.ʚzea:e]6a&Y4ZJɽ"XE?$dV~B g(GU5bgӏ9n݀ ٠Sq,PW[7'(vsd:TE* $gz>KOe3yY?'I70Z3c]$A2Ȥ})5{ .]Y:hr^)UYfo lgt/}RrsrOO!I=T$kY/…?@Dʜ[uGt$S>VTd(J b%7riYĐkZegZe˽ | Sӥэ8Y-Xy/6Ii]mV_&j?_%߻VR+| gՠ6^6 jFi0ļ,1u;f<ͯk0 q4 e%ҡO(m dƮ8dATT.-c5RoyO 4хN-(D 1MyD[m.#aC+2 Vtf/iV&Z0yV"] uendstream endobj 114 0 obj << /Filter /FlateDecode /Length 6896 >> stream x][o\q~`7~&;_l!b Hl> #8(VߞT`Q.A^/݋Fɋ^.~y-49Dի[^\{SWB[k>DW7/~{)Qx!H%w_.{s71FUe҇MI儃^˽lv H#`[|c mmqwj//~ڃ{m9xC cr?8v]BS%]Q(!S1,;#uO#R#w/"@ia1ov'/dT;NnvĶBBXeLvolqDhv_A000{E96FvOP9핃g| }Ì1{ᇅ^IiI{l즙wGL o`B[@Ve{S{c">`?Ck=ڲN)Y*DmW0~hŠ}Jd >Y!q8+\%2#K Os vǷ0iVq} g ;]烼]p2l@ӫC-@F۴Fo' it ]BY T>P^ނDD~VX&-r@6qM6}d-;NwkETy62-o~z:fgH{<׉  ?eW&r*AqACtB) U ln"<#SBYNUm_K;|-w{͚|t\#[/H;b\@w<$-~QMMS"H7JMS%ij@5ʹ?Яhȓlak HڴuhY*({PƩGy~^jy}3R"zퟸ"yfR@_#5b\D:M:! %%5EwW.:$g )9cȅVwV"׶Z_V!OՓ'lj`\ҤVu;X֓c.F ]#)=5cGvY, v:.7ۈL}Ohʥi/EʃdW*T~NuBDW'o?1w$‚Ճ,mɔ_ 3S.g&r5_@Sнo/mg]&E oxRZ~Y:˃e1s#W|X Թ;dyݷ e{ 0!|s9Ai8}T_ݴ8w|<㫺)6UB@\π쉄U ܪ1@zKr0Liڢu(mP}SM !K:" =b=)8f>|T8Xw50-%/zgo:۲XI{ ̠Θ~wJ $,˭G\]S؜Q4b!hєʈ#0J-J)ro߸ʱX"3Zo/g4L:2>:ICY}yOy@勯A?\Ϝ5zIز L@2=K:CKq}lۯ=޴xFڹŀ3eU'ir ,$BnX nIuIcj3/¬}{m=~Of|[@h86|^WrǵM}|栗N!:w_&x.@7 7&s3t*b\[^|\%<揝jځkL imCAs^6Uߝ[oe u.ÓT )@Wc'm&sObToڑC`JV F47Q%9کHʃw#ν ,/I, ׁq]ٗ!&0%3f?=\xDO z ]rK {  %( U g3ph \p V w0b#ҤnA^ߒM`ciaw7L,x&ۿ<NEBbc jr디~C hKj}?J~H?<ĆV'w4;>)+iKy_k?AsmZ08FZ ïd6X}mG6IQطIzкmN<݆ds< QѭDq`Y*}s{aW9at',CKIbCBY8c' 6?sJk̜>FU@.rEV~!e&q(=c7|݊,@/wP\}gÄ0zw$Yj`*5듏R0"ƀt^ >'sm lanѸTa:hTsF N1\8TNUAtE#ڢ:-I2ÄA\A_4ӕs)u :Fꏇ?SC?J_͗2@Z%4Vjr'XO9 If'`>`23\{&G:~ZkQH:E8%ӿJ&@ [krc4tmuT.\iz`HNE1#c [/QnL)+!CUgw@ 3[֖EЃ' zsA,M -..mVx$6AiԳ<^j;4⎎kCZل X+d(?69[N {W=9򙉺b5 Ԉs̰q%޷hJ32Og]uΘcCNEJܶC"r;?3G կSxgi){*􏷧9a8Y`A"01/w;{&` 4QƸp(Ju /l p!i-N^-!W~ +7$wiӢڒ'0.f?ƈ?Ž?[ 0s9#-sCL/+GY.9Q -L$@̗;3Dfmn]yrl&+WM/|{|o?GP՟oyA#")N{PR!` 3gP\4[<|Vu1P%O$Đ:OxKCORžͭQpwl&ivgYk>ɗE@%1}U;֬b pU Y908VQa=oR·,3 ݽJOg!Y15&þS~`u)hNXWB9TbSϝިSZPD+<~͌apڦI-`%,FB#Ǚmb9:Mk(!@ĭB&}6rJ%OJ4An@NS'G۫ Ƽ)+ԦxRU #eKE!]#c3~ẁtr+B 2p&HJ&<{B 4}\Du qў~ΊmXʩ%,J?Pި7ԑjGPOW(1)23F?"t :K11(/}gcaBVScwKmX9Iv碖 Y໿ah)aXג/g[mB♱rTRunĢ3jS$R]8I͂xB{ǟsS}o_o=WhoˮX;bM6hM$ۤP6Ao\pG5-Dr/vd:)rteUr)1>5^]-1"4}I%ULxx̘s [Xf{Dd#:pċN6VW"9]3bn#? }9VcΣdX/db&1!U0mY[DdTԥ wMk4yYv:&2o/m ASiI*_f \D|%' MaIJ70V 8ѡ[Y 91)nK[2~TUȟݔ]"7ָdv)|<{:·t:8EDmyZyLWevPI/$ Fy0WlSlU!,="B8ep* w?fY[vuڷs/&߬b[X(<*hKf2o2U[ص\/,jݻ$ef8C; uH%gu;v1*U5lP]cD$O= 8cZߔˠ!t=֌y>KƇKD_QWv\M`s'B`r#}z$apn 5pv<^jq ?;p^*QD-|=$6c#׌Z,*Q{[g4᳘&pc5N{ d5>>:.ԉ86Jc8g c%KedvAZp%5'& 22h_c3W> stream x]Kq>$j'|v˅7 UؖmAiv5DR+ޙ z۱-֠w~ͺ+JG?x;lnvOR_|YQ`R.j&|G"3F-W~{B ~_ڝ^ iFobYٝ(ǧ-t|v:-n_rsPfq6鼦3&VvHY߫ @%$3dϨ>4 .ah/em47ws)-C-Υ8,'FQz .s>s#Q0yJnTIaa:{O]aZum]WLč6)gdWQ^}pܗ1Џb$m>UDPȦ `9\RyӹLgiMд2]ղ:6d^f`x 9HG;[ZA8G„9>iyrFLekŦYĘoڄWpK +}k=4=śTwY dHfIN]9\;4*KU}]Yj0> cGN ۳&O:ioMtf;UZLJ@&jh lq @BRJg fĨa|^&S(UtZVuwyBa-T% 9v&MV3w[|Ȉئr39F5 H\I^tBnGsF^"L@pɆFp 34^M1Dnn}%Uя _AI HRfd"F#,zqmg)f78 Ԣ,D)9T,Jd>3N'8KtcQ k;鿬j4LzP7f%M4HdGt] ̿YՠV(]fğUو}#}nyac]BQr)ih&\՞O}&#߱1g4n[7QzbK,z1# i>&D2~"J\nw|J2[y`dLQ!\wMVOyw%D3`eZι Ë,Rab۸ak%萭 f@  XF|k[@/Ab:\IF7PV>L V"tÈ㑊Z5\Q1I&dӤ!ljEy| >e ]=ɮGn\;BHe1mֺs#8?`cg/4RSF)ӑ &򞑱 r~$89 :$#*7 :U EptFh'V>\+RoƻQBjzKjqyҚvApAA +[J X4?4ØewTt"ZƶKRw ;sY{487X;ᰑBkb=%krPꪴR,/kbcxK`p̘tP|?U>b)>I.j19>[D _n@)ٿЪ 27Pkgm"eW߷J"\߶wyqQ\WXF9g:UqCy{|o=ҼBslã#yޏEa38 QWK-/ŸM߷C{|as0hMC[0̸=f7S~=vx -Robsߍ=LJRIg7 oIMmp|j$pL~QF#g}7̽+ll\QXyb^?ӊor t%}͕H -|ֹKUK1DS{|}7fA&EbFCFa=H'mGŝ]2RrGN GxM{^zMLLP10q/`I_H%O"mI;.<.EgP?fщm[q%,Gs@:XvS :)0Ia}MݕyCdO-z\o/ɗ)1ԦaP@jjASNĢ| ˆFG}f=UuzigUw\]̝ [}6k®roۻК`+oƋ(\wA(~USgݱ`Cq"tw&Ҿ/IځG@Aq"; hƲ5vfPjPc1VA&h)qW'06V[LL'nFL->P3uKKl~#IʓX0?mĩJHZ(8Uf07jnzW 72&lHUub 1Ђ{uT/ c`os `8k~]R$NYʭuu_ ߇d&4WN߆`Vޖ`:XBg%)`Qdڃ ùD@E$$tXV/BM~A~s6{L8cq+&&%'!~b,s":Y?{x"XXw2KҘIOm č^@{"\ Es% /RvY-ُ1Rۄ%7Hn_ܩL -+DݢBu$ ^r0[ѻ>#F|Ü# E(<2C%eoTlr, r pa&oKRp0s2A:gy.ɄX6vHaKH"Q{*4b{֊HqsG +ekm' 0 ur5fz[T-lo꠆96JLRcBb}Yͫ XE(j:Kg6TR:s )K̗£0T ci^DPL^&V4:P$Eqj]3x&&3eWyfy[\t2Qo [!#+@Ńoy2GK8.bBt<ʘ%M0xER &$:bddvw)C"I.y6}d bDĀ t4PCCX'~-ϬmoA)  8Ff q#=!^Hxp2 LU7rM~F}18fFS"@;ȏEkXQʪ$aH!ja> ؉4A\eE';cLpg",͇NOtQƀ<}~Lu x }lcYi7FgMs ţxUIijAAW*cq+~5ǥ;/FCdk)^L:{5aQmZ\f򍾖7.-_f!KN 0H̔y= v9Mh{lˬ(j &W}eÝWk1pc_'ʾ01[Ɣ$ߍe6@81dXJsdҖKP4g5ea|%}B IVL!8^rP F"/VcS֌<6k!^ ^ x8!T*,H fi!n}DKR u:#N{g 8#(g x<JQV4+9~^X* 3x`!xXd YdtԺ^Xf6|0 kp L{&6nq4@GPcyЖ62٥ %^g r󵰞gu#,ukkeW` ȣTXۯ`״A{&摒Đl*cXw.*j^"*@ȦՅ.şZJ".3$L `4(LoL",I}AWpsYp43ہevnbPUY֥=!ܾܓy;Ңl !X% X7* GƂ❲ghڢ5pjw:BC<,e ,-w@@( x Kv\ G&kw&Q:{+_ƅ˒ڂ)GxPi*5?cAu\"c+BUfrQL\nR%ˠɆpVD r,u W`)A4gI 3Dkp1`'Ԫfhs%5s7÷ 6y(]z|߷ǂ\nX RND9a-ʼUWXO$vX%Pݐ@^5N&f+u{D=~WCWݤD%JA2eȢqk;K8zЕ/njA[muԶ}^u&6Ɛ2f]BN|qTXpwVcn0u'ΖC+LI~M LtfINuS,ǫ s] \BZu5Mq{*}t#sِ+a=$|NH8"S}բ6篙\iSv3֠W_=}`!HƠ9Gw'|W wlP&(WB?pPd n.y`sCL<~[K6И2A&Z(r-0%T'K7V+,+[P?\E.Sՙ% &S~T r&|}^fc)r}aY]!l~S zFy- Lw,FiʒwjzI{TN *УNeey!LfquS<'ܝ9Kؕkz0B>OE{!{"FAiNdz0CmWcGobZ/k$]Q{0>=>euFnؖyiWԨ9:U]DTtM`@-(w'65=f?Gtõ>NEXL "F( vE?3xAߊ,!2Сx닼 D8F2J0v?7`J aA^S;؄WTxDm^*/-:z:Җo(dTʙ%óz:yoA46Kf"|p@V/5)!P$EpT pr = [ $> k Q.) ISP >4#T'! uXULR=K`I' μ5<(񿤌s'|ajǵĵ[vE?P^Dw~HnŃX@2tNFB^+un0J=f,x?K"D"q TZ' ^ $M! e*R2?Xo 3KHq[ԩ#PH2tt޷jmk耗q~i fw:h+,"#ro^{UqVmEU Kvy*CǓ5{_r>^;bAK~)]mϽ_ņ~=/W65$Ȫdy;3uѧL._ŝ;A& (/( '4mWPƟORG=X3,F:3-Q>G8rVS{$9Փ/ dmG5>< ]G4 c l ?ti (ۢ튞x$'g3CO~n1`l?V[O>i3~\o](šm%tM#=BRBgxrYY#깔R3 o M| x-^7L.lfw;<">Wwҷ;~Q]C-:o-j=۸eSlkjHe^Gkbc{diʽC6 !K%H(+,Уi/Wkԛ[LwT੉Vo3mj~Y-GGR ;e9Wv=jQPR%Y xnY)+0q+M71IC^SU7H26+Yܸ+6P¥7Cr@'2r48 *KU.,M>iw8|=k={X%J&/j"endstream endobj 116 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1620 >> stream x}LwgegzuKuv'm-gp- EeyUpe٥(-,*vwåjϦ(=Ywi`kMmOmw9{'g Y8~F>n, 67*?2.E(H^ұDj ~P_o׵l|1 nRU ˳p,n;> d=hEpҷNAnȲL%ʗS7/ e guZJ '#?Kls.5ޥ^sbRg'Hmqv}G|#0!A x.xy2S!#"o$dEʱo{+pAeٽ,GGdBQ86#; C ZU19+I+3'$8pZchQrH1x?X|#gfAW`~ g\?LV"TLom.8HSWj;6mPlp!RO a aaH-rSԿNendstream endobj 117 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4067 >> stream xX T׶Jq/FcőQ#b7@dE桻 2+2ЈLA/&Q͠FhOn^[.Wuoݳ{_d F&N.K_tʁl} ]إ?drhz~d0F.G$9 }fڽ0nqOvM&'PNح e7] ###gkf:m]>a>Zo;p5>v/:)8pWDOKOh0- vڵ94,|EJmfWvo~o[3 pl]`0㙵ƕȸ1/3f&3ȸ3KYf1rƑYd0ߘ5 :c eF0#gyN6AX0q̏27YݠMoG gEE>Ĺqf5o[MJ1zuM͹^C#9uط_TOI"i$}.T EA5TgPzK1GR⠘V:%߈{yHS(,Zd(GzL.^ 'R 5Ax'jx"sҰE)MO3=&,7pM=Kxuwo8wdH 'V mܽy\l X+ه 7-v"*2|e!akբ5棵\`Oɼ(2,ty17o7ʚOа06MOG7R2>qbZ'g._kNNX $&4ԣ3hVigP%`NѺ ~; Sgm.^{{ ԐƄ* yӌL#V&=%3xg\8p88ws;ΰdof? ;q K]2}Z]@t% !+KЛ#Ve6 ?{/1R!6< XYu 2XuLVڈiC) 砥/.iDq^=–G<^wD+K&5zj},ڈkM]c\".!+:Y B..)E|hG/pd:QqXDm*Ŕ ͡^uC]Br!mpZЅ,#*{,GS!"Wykw.Tٸf*dB-Qcgu[vR:SJ 2r'C%~',w-&YV&>QgȾ(_TLk.٠<5(TȢK樂}A)Zϝ˨B\1&9SXi`@q{7߹zDuT^C4R[Vr-8k0ĦIw<pi8Ggק ADC(SYx&a37eTY8kˢh@{JHڤG$I<@yOH CHj>\ZYny(*aH2NXmlGOFs]1%PG2 L!:>ahuQ .u r '=9tFޑ؆X_Cdf&U3[R1b0JGUDϓu½kuS/aݙ78 WBAgg=!6WU}"ШK!7}Ҋ:K*si. jWGB]toXK8^Zkpwq<*VAJ:+]vZAgsɓpoyVp:G<>FSs/@׈,/RKp?%_5ix̄ }x4#ͱ +`-"*~Q M##O`e3Ŗ{ :4K~݆*eS6VCGIW c"QKl s*D"%61GηUSdmR6?Dr.E!Xs,?cZvoѥB  ]Y)% zsh馦Tn&,r$ [Sx$Q|}@Lu0sj+bQDP鑿&:D+|w)G;|K'URS9#/Moh싾9(˾{P+Rz>dx:K'd!V!o\2D ; AxQWSSzYE&+D54ϤVx,{(@Y!cHGm!"!.m_zjzJ [?dfm}Wm۴Ay!,߹W{{yj]}8sXY- {|%\#tNJ[8Q//S@S{t3p*xSXȥ[nu(td6zˈJͶmtteU /mYvmFk:mkt|bBfl<q;ȡݧTW|]^Pz54 Ch>ّQ ܽ9-|K"$2>"eG|I2 q> $0F2Ce)%K^ӡ?*NW5 DE,.Դp[֖!>iH' R=P_NV8 I>#e..VV2B+޵ 5#J"r}hpSOy)7Ei IӸJ\ IO~=S|*EZ65@d!܎zӑƳN~yMLAs h! 2ݟ QM[eleOEsq6O{Z:}T Z8]sp[InlbV(,XY+ϱFY4k9endstream endobj 118 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8194 >> stream xzt׶aМ`e ddZ(iB &mȖ%" M6)8`; !@bM 9co$!/ߺZZX3g{ރލ9KWٍ3ˎ v?by[;g~0١[8j/r.$Fo :nѶǍb;=xRP/w?P򇯭C6ӼBC~qXXXgm-v{{vw7y˜mk( u]"dEQ+fqnB..ܾ(yq˒ץnܗ{Z{ߵ~;.zOdʐn8bd\=zYR`j95ZA VRRèUԇ5ZMP#(jM6Ps1Fj.5D}N}LͣQ);j@-&RIj2QP%@C(%%ޣX}*GYS6T;5H(ʦQ=T"G=$@[(abamaz#瘞z%bj;ڽ[%~o9˰>ߧXGLn?> h@>JIl-A͐C `aSom `DBmܶMSfDA(1صkT/COSFhQ֨b7ʵlFr@ :ǨS4rHs@Η~ `T5*MK"!efa"KETo]Bn)K-2X@TnT@9{g dp@п\>~\ΚU`PU3ȁ`)֭5`)#ƃdיI%mW.nE'~Ọ`Tt&CM^x=J%OK.̃neT>B|"d\\R|}EʌZ *G+.nP%qzA]T}W o75|z>??CbaGv+8 gvѲJ~'-ZV;xt`,<ƶ1F/y`C?-Cϐ1ِ+yKCl`0Y"u; A8Ā"BЖJP<]K6_#?$<o%F4Z4^_Bw|o"bq9C$n Nu*YYGL质5z H<']"~:¤(j>T ̕3,Ww@IL)AXv R6!2B9qE2,02Em NnӎdD4(xgQY$| ^ Ddٖ 6Qm[Fw Dh!Ӗ5Ã碳pI7Gr%5nΙr_W>f Y&J$?:Y q"%>!E^$z  *qkMPԘCF~_&zGϱy=9dAfͦw]j\a2xj|kZd1-nݱ8!`X l=#;<$5GG ^';xZ%G_[;O\p 0Ot_.,bCВ`jF;O/W^>ϝ^Mq4q*l&:Wfy)fue3q,nA_~ A?!gf\Ww饍$A~X3@OFOD٬E.#WBlDMϤT9 ʔ0iyƦ|7pj?y9HYh RR *;(؋~a|>Zrtm1N./o}qk9u&n'ï9]0͆ ֋УGY&_->l̫3%%fIh;̪W#rP&ǎY#PMJJi6AGWWwY4y_F$l=sRVt!֪=;V\E¿ZhM~Ф_T',SǙ V3+Ђ Wt?aa1*BPǏe*s/wѮP.߲{ lϲߴPLjbWupwr`lX s :t_MZS1<ҍ(iXdU{=!?mfu!F਑vǨ*$FJ!VYc!ҧd+SI7@ ?|/4]`-Z15SLyxah4oKs{O(,>n0޺1SN㑬s*:E!X&8\WTՌݟc ˉ_~AڿΎaP(1v>4IbfDg^VeH6M+ˢj~EJnU|YWf URh?mM<=рΒh燱Y9&c!WbD{ԍ״Imb2H8]"ؗ5{nw 1bژAݩw i4mvjT;,JYߦ-ҭ& ګ8AatՁRڣ([r"9#`J~JEgrUpgUЩ T;j3%":-YJ۟ZgũUCF?DW@KP/F7xFW_c}݁9R4[oE:ӄfuGil:yϰx'lgQHҟ<%|<54 $;Q'*9v: biy}G6wE[G9]1x"v!n,E#4mw{#{rч_}Y`4-x/S/@/>~ Ds9,bb XfB * te k?vi7!!hvs50tEE7n?6{Ð/JhGG*B`FG <4+.;Ъv aUv ;VtW F3ى|G Q0<4P,I p%@bXHE{%rpW~>0R1$2C Qo!{pZΠs˶PHSTbߠPE4\6[S:`)xؼxy,Ep' ^63ΆK_#m<"pEw*!'V I*|WD0l'#o]]Bz[F}^[]{~'s~mM^Ȓ"wF}TSF訮M SvK?ؚ_i`P>Xi(!EjlWiu<Osj9s:Kܿ%TqI**I&0#oJrR㾎dO**=J C1s7̱vh-⼪^f59#m=[Iq&_ KN _=bW.ah_g4-%aP RuPG"‚8qG^R_RUUVVER4APo@( l6mGp\)M*EA1e4dLlh$׌ Wz04UG (ǓCq/ _((&K &<2%W>)%JUqH*Mr:]OggknԔ"^(%lBXLQك5@ӯCM-ŃG}:4U/EyB &@'HTiu{tzڤ^IzfN6aE!mGZD#HmN^6(¶M6o_Yu֢* "r)Q!W؁j 0NGL[Nx Qt4E&--ū:&7k< ':B&ÁoBoؗۤ*.~y_H$b'Te:iOBفتqXsJ!S5“xJK Rs=c{6A$>yh fwh+ˆRt2yxʋ[=)Rh|]H3aEbztFF{# ѓo^ͪJ.!%* "3HN>Z~R -gOD)=S)^ GNZBo vEwVt[ɷnqJ3,A.c}%OOaf^ ;G?\J7쉯n4kjD'@>Shzީ85q۝ ?p*N_u9㡋y=&S rmڦV%BIJRA<#n2/0$8i̢S^dv1:qO"|G;Kn ):o䝉ۛ)D,m7"=Hg H@ң,>ݾ:2*DH0=CK]?m2VP5h3zMyM[<9kjH~Gy銴$ɒa 6g8&jL<$FI!:34T.mḧBl`o/qqLiՑSZBD{" 1^I']KĿ"ŏHlռt;jڪꯚCc["uDhj50IId$.P$7̞hCx~vdne475ʷhW[/}O{xiC$7XOu?b!'n61.&̍ R#W뉄"=o& Ruq| 2K"–K)aE؅maֹ܌G*EM%0pp kX TDl>=lzAhof7W"̅Wίmr/N~p.2ǟ7|ꬱ-\N\CǗ+'9?łW⇻7rQً0ÝY&?Xf3k)朽{wM|o?ECl2C!WF gVC Q~ n |X D>HƯe+%f2#QwN۸${.DJ*ʫ#v[і\%dۨ DN^kKѩ=htZ'8& BE%ӅC{u 4CTSO@j6RmrdQX[R(&J@KP%v5gb CdE .GS e>*?,2<.ص+rGLs0WM_&6lydgXL\Ω* %d|s$aZ_Y syٖ}u&,䭱NI!X.i"p_dVh.4u>$E++[%==9-Nw/&=U!yhE݈,ܐ>rΤ SR PDH8'v<b؎ #OMI~Q\${f]|.xs!r- + Jj]yּ_)肪+JK CtkY/ylD̈u!4JRk#R*!fIDOq.JyD1%;vVZ8k, ;(TKz#'5{>dk gfsZYQ"S9#MDwmzQ +]4.L g|vҮ0l_A~uh,\P>N%NxAMNWIjS 1jBӾX{ `4m =_#q3ջ[Z.o~(THWg!I(]Tx w [ L^@q!63/@k 'dο!-јYۼ  ͂~z¡pPs*:Rf- XH8tg7lF{2)6$¦=o*.Y1Av@6ݧ*87eB4789E?']/.^\=Y{_CQ%]endstream endobj 119 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6604 >> stream xYXT>+p5%أhA1cAQ²C[zߥ cWX֒nL4E15| >, ^/gg7_yEeJ$N`s0X$ !kG{8[K?݅4{Eڲa/mP?ޟI A2/oèm8L1㣱&L0/S#C!'|<fyA~P({ʼf0A#vX) X(wX`4ti@PS") (ju / ^$["_XuY6=wZgMopIcL3g}<{Ԝ0f,E >fPèJj&5ZEVS#)Wj MQX3j5ZO-SEԇbj"D9Q)gj J-Q.rj:5K͡QsʆDIwK l);ʞD PRS=)՛EYS}OI(K*z-QA-Ydߧbq鹰^{mӻoy֯E}_k/t@րg6^g,{'h;p/ lu-=k7A!!!߿޻p %0A*T*wv  (EOܧ]kDrbZTƽ˫Qn~it0+/FK5fə(1xʦױ \QxmD%۸t,TcfLɺe( hɱw>[,Êy ƙϋ_;2|3{ JnGk@nUI F0:ZP #4Uhw8LjQ _E5* !{אO7.X+^k%aytளQ LN0wh}HkGϠ+hTjWҒWAf.R`u~u Xa7w_}lt z[^Ov+ĖGXzgso޺tQOG(c/]<{S,r^ayHB#b@ ~~yo{/yVVjOEw'e='^!aK3{CQ8Ҿ|q8 k0; b=">%x{JT+zON^#D\*}Q[ݫ?Cl%|e2~4> Shlcq VP,| f~*b7֮">KpFCǛ<[/HjQ0.H(~=]~ƌyέ꿹{lgLPl~# ɟtlr7tX#C(؊}{Qes8j+ma3=z[;9߇ki*sqzXVr dЇK)S RSK{x\yW{KtI+'(6U'-z!0XB! o}#{ڕforU6tJ^ieYLYv`'sq߿-#3"ww^lʤ4nv3 '1)'J^9񛘵vqu=R 1QH֐WT5{M#3ۓZlh oߓdtx;3؀xp*=;#*,S#f6:SÛI:1[)F5{_G])3=Ao,A@o&3bpMӢrܦKk#%莰|Mt4rP%y}mN~o3Qw2`>e~LTSfQw:Qd!'qi0sNOӁh,wZeFh㧅>E 1عS ` q&ZA &fgmCWS Q-kZt"q>pd,0 ]+]:ӡ獘ªK#]FVLBOc҄!׆YId c[g-it`DٱѮ(4{"=،yI,oM$C2ŤZ<͔M'HRzJ603 {u#KA->1;#UtJE6b<$ռv0ɊGiHed3bd^i*rYPdDmϏ]A-n!Hu(9*>M%DŽoi Z}OozZjWS>m0U-6vOtfb>17u?6(ANò"RU-o(< qyPC.;:y=TG΂լ5<3ƾ/F v'R+"15<]&A梹~`/ŷ/oE@nC P@_{%jvmߧ*<E͜i vIWFZFte:HՉv4CcO{(boR}yЗ8 v Gam5NsvdTJ;'"E]:ZW'Wj6TYk ž ehv %tbhe OIOLğuh- ag Cw򷐄莆N=oCC!uaܢ]a \/*tÜoӗGtpjVP䁜Q@_Y@]^\@#i| Pi;"٫(7kݵu x>_L{ WAujV-V c'M ?,B+P2jm\ 7..[¸mY1K>k6cêrUܯKvmB1;F֣k^cr>.g$/= =Oބ^%\fhAS;cmݷН$YӖw6*YgT#Nm+^ ݮDw lGHODZ ͈ |r:yY<42p/ 8S᷷zеz׃],{KK7-}ͬ/2{bPg,>31?Lxk:8]ެ1k!ߧCC-\kz7ր@ JEvd MOZ3pSAm֯4>~ܿ4_5V;433hٟmކoEHΦ5(Pbk~_{u#9Ð%mN*tRޅw2NI!I[cKr_HeH!Ap@KuAe!H3 D,37'D%&_U*9J ݑœh#ޘBVU$s%,Cy|:}]]M <"l59 & 钲Y-!({7H<$߼'axٳQWU"Lf@5[by|FPamn~R _Rp_'ĝ(IRr^^Ⱦ:1,!+6 `6 wm hnA@2;C/#޹G9^w6}u/5"H!y#yNs OR!)#+O)8>pkw 6qI)Cӛl!Mc8y#(9RgBˋlBbr R2&'pv p)K{Ֆ7 X^fLQW*+L)JJ}14yN;_ȸl>iT~&XCet3K,֋6,Qj 'frw447NyD{~4U; d$;Nzz嫗M6D0C;SC&=[I 'O93ts%C `|!f+^pƖFF%$'q(%ļ˜"!i1E3jEM=l!ٜg:hˏ-Bx_`S3:4L nuawA^/@_lP_'E(>!5( x[ݱUR|qw>vt-G>ֆ ӫM +дz@楥Ouɮ0($h 2jӿ@DE N*PWDD$4Ԋؤd߉rVZ ' ={ОziIH|k'#c_# 460[av z&)5C a %exP#^3pþL6ecTԈBn|yzy<ϳ^G+Gu^R:kku?L~Oendstream endobj 120 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 532 >> stream xcd`ab`dddw 441H3a!PVY~'Y{ryyXVh-={3#c~is~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWqr-(-I-ROI-c```z b`axOeC?`!bgͱ0aZs_'KԚ.]SWПc'tԕ74u\Ա{%Pw.3{2G״ 9lwa^trcwUtl[1;޼`ߙuiKM-o_]%nqׄǾ+߷;F˿pj3ߙ3{*?٪*vϑ+^~!oi웹6sqpnļ endstream endobj 121 0 obj << /Filter /FlateDecode /Length 272 >> stream x]n0 y /ݥMӶ`* QJ{6c>K؉cW5ͫ?yӜY"ہos2_}6_ߙ-xsg䷢}ҧ9ꦉ /*iOh<פ@O)-IqfQ =NpHH TGR#x&9D(.9E xP{߈"1hreRd:9D<1(#%3Y U7̉,U.endstream endobj 122 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2801 >> stream xu{PSwxEۺ®ױڎ⣭"ZRQ[+$<"$DW/Q6E#atWnzXo5ItP@ FEhG\z)oWčM#ROle[ZԃF Dg 3ڏA2ne}م|"oo &F 寨/ m55gx*1 qy#ƞ;}pRt9ȡ^gAڜZ)YS#$woB2x.%ە_z!0+=v-@Ϛ56BmRp pzP[VS?<ζ4'"1 ^pkq'DAf5A j⦺ ~/uP W'(.|DGhm#3)9m5Y@ UZK5uY+vuuu4 F\A ; 32T=-/bS ݏqY GG𘡊[%ͤ~1jJ@.;KşAKp+Dc6KT2Q õ~IpzRi$u@EcXOBt-]Sjc sZpNg`oqP݇mOffkU@,]F)82IfשBSzL$MFĒ!j2c>EUI? ̬\;;ܧX<~hucfñv\h@ ;0%e yme*%T5>uWe\FlkUy[ mXkzXHg?/&0w/pNg h٪#rv_p(o"qgvVJ%+ȯ;9Xp(߉={@կ3%J`$&XO&Qq#Ap.̃HE|*D?7,d==4aĂ˾huQ#6.S1IPlrS6M@?|2Nm("N\XOL$ `iA(RF57G v-yH!+oB&- u^}xJ;t*yMVwM&3!ˢC =3_)) 1ؕwv+( -RǨ-6jr4h;sKU<4zvS}0`Ǟ&w-m6bvJbD(`lr>|NWt#1?wOWcXT.0aeJD8txt8T׬*/W;{{c b9R1IIJcEG{x&GC%4^<_w>\\cxa4? ؕKx 3Wm0X6f:]# =&#(?M`6Xc;c0\OW0ywXbl{4YA;w(hw4S 8 m,w>6mbm`cٴ>M@$|GupOn4R&ϓ?{^9/TtVTvTD"˿چ{ Dqh/#QɗW)C%,0@0.p\NihtZ[idY۾@lUVg=^98聞}kxh `yo|&Ĺ.D؞( gR׹aOhJ_QN؈?"GgNŽ@EH+FKSΤ$~.?'exw^kod`@2MF6Ҕ&kO͎6=(8Pwe/>'~z:m[JN\>s ^N]uo|mlŗĨ v] FPH\4;JG4S| ?kE/ "ˡ[t9|x{i[agJ_$\.M+(B^;]: LCxٰ{#[i|3sic_rBnwM$: @{[Svڣm6|isA-&{jؓv'bg >HWtd6/,?xC7Ѵ7}5j~ I%G|* \k+B :$Mendstream endobj 123 0 obj << /Filter /FlateDecode /Length 191 >> stream x]= wN DT)bI `""dkHҡó?]쑂~Ay` k@G'SzVb؍j)t0D!)?97O0ڽU$(5b}!ڂgY9FDuՋ:c_הze,<>"X\E=;aendstream endobj 124 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 806 >> stream x-oHq-j͊vAEZTfE蜗ݼ?[k9kr]YAeMD|&^$!"]AKσE0,D9RKk1i]JiE9 C?TA%|tj^,_fzJXsgtnpz{~~!]ld8Nk5Z^|:\O:7ѹ{̚xLkdμ^<L-:` E{*(GAXu@،Ւ[8EI-"+YM+|b24|'䍿qLl.l>7^3!Biw)~OUǵxNƓ&;Y+WZoO H .ew*XO 8o_ X5Fcaq?H[ٹ2m=o2D)`2s7e#e~Bɞxp|?Bī$BZ;]jz }E8*Qv|Rg2*= *qT!aFxh tCВGz+kfX,Ta8+b }G<) iN=D J^#]o+eWm.It_7 GP.x4 ` :]nw{Uu> stream xcd`ab`dddu 1H3a!sO]VY~'Y{yyX(!={3#cnas~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWrp-(-I-ROI-c```64e`bf{ #˻Xf|)(@.)9X#}Y8LeOבb{>ұGyMN ~_b{Y[̞yȱC8s-(jSfm]/ʹ%{9^1WvWo"l+u7GW6wWwsvcy;V; g݋wd).)=K' Y2 Arb _قγOw45\׹Xp.s}6/`endstream endobj 126 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 337 >> stream xcd`ab`dddw 641H3a!O/VY~'Y{2yyX~#=C{*$fFʢdMCKKs#KԢ<Ē 'G!8?93RA&J_\/1X/(NSG<$C!(8,5E-?D/17UL=土[PZZZ`d{N|q00~Ksp跲ֿ^_n=E'l~];\| pBIOpb1y4^*q}endstream endobj 127 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 930 >> stream x5OuhZ*Ĺ%tSG 6LݜkG-hiV)& w}_[ ÍAf:bc0[<ɓ<1y㸲Cm_Ū2ZUUNTcoTy5dDS0pmn豳>~PSS^D12XXeaKIVY-.oy}`Ի6l},uQOH럈6s1mc0 #< kS;bYZɱ,ENU)WD{.P ݐ^ҴwPlZzU-?I3kƊ[= iHFi>Ay|}w;芰 s}$ǯnYM4#W+&fAk$) RD.\ըEQb*Q&^Ed<.\?_Y휡>gM-@/!՜~$A֣WHWHh EttGO#B K i/9M6ZP/Df3< k??-Of > ^d (p$Dc-k݄+a c=(K<#+>AW5a;{.v9nn%G׋x )eJįoxq7û" x, з!1kWÒЄfos/GB ۱a 3 Xae{ B06EI{/ͯ7t&i'œ dN$I47NJ%?ݶ,endstream endobj 128 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2406 >> stream xV{taˀ!bdw5K A!Hk˒w=3}%dw&! B!H-B[j+hROjzg9=!V{ߥ)MS32-^4XK7L)$Hhزo=-[j?k^v!ľ۽jaM5EQ9tw 9jmLp b6퍻Pb%jp3vKQShJع!`$Sk 6"#Oɟ+iVh/f|*1UQ4numAD#ΠҨ2:`InȄW>)JA <3ARGzk9s@<,?QQ R٣ʪG6FZh Ssƺ}eݸiwv>Sȷ&9C]F8wAM?Vn Wi{L}#1zb +o]B3|`*MxN*o܌D1}m>_wuuȥ#ձʐܗڔ 2"|uilMY<s*QzvQ qC0T}h'q?nco=o;vh:RkیQU+טɷob@;ٓ8=Q$Kj_M`*bna;dNJoET/MkRO /.[>ukPz:iQxnպ:#F )qU:D~ {Q!YjP#n#ppr,<`5B􉝢W{ }V36kzk6aO|z׃~(.AEH1z_O~GCDIܯH,AZ+ R *U\b(lsN#n<7nF]?a L̗6%D!]T>ׂgaWj.j&E!YdVbdi/=W m[pI<W- [D)]]jG?}";3@(LHJ*kN8OD}Chv_Krp+Ѹ 0t cAǷ@h<ʦbh1yTvQ!'Vo]O /fp2$eEsMezfv= LnW k'W/Q9 \]B;4}p'uh毑*6;ﶺ4/m(z#!t{y[̂]rȡ/9هW{:Ąsc.FO𬯱d>1j>Oί/諝Ys/QͧMA} qF@# z_վҢ%q ^7'ʕrJxRꂧ`ʭ"j.Hd螑)%L!~F"%荈Iӆ~TWpژHt<҃ /DxG6 >Iuqu7'b9-x>ЫnV]~WUwPZ\A󧗚E_<ӓ/L|%&Zlu=%&-IwNb  .^~ơgU>+3Z{9iexZ@ =-P/?^-AU'T_zo3$^N$vU$zKs6k BY^S.*7wg|vΉe(Iֆr$s8}.)g6ME%{Zʇ:ۛsTfTl5IKӢM9endstream endobj 129 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5026 >> stream xXtW!k 2c !%Yz w˖"YdٲS-˲\^BM $ lH'#o$]=ݹ] ^@ ]r݊'E?Lpzq/s2 Ās_X iA܋a}LHL~8C&IJHF7:rkM99*yi񒤸ȕX)!5r8.)^*|efTĉbӲ&% GM&Fϊ\,NFM|Y NȖK"WwK 5/}xAE,9yVVwY6)y}ʆԴwL5I1թGY_u8AD#ċ%bXOl Foc|b3Ol!"b11XB,%ˈTb1XI"f9b.F "M ! !L 1!d@*8klCB1$$^"sK3j ZglCJ~o3qxu' lMXk72(P{g ͳ=vLp¡ڡGLJEX^:764Ґr ўGY"$[A%3j{۲=wJ吊 \qU3ךRYכvp-kL)$(2Q^ \ߐތC _ nrQzd7}cͥF'ԺMhKPAgKw{u,/X`Բ\rpN'N $h=#(%(޸wUwM}ϯ0]E0Vytm F/[a {EiWe7$,!GaXD}+8}HvzN_nߺ 9re^|p7hT TU+W^R.fJj8ioL6@ h8Z6""qN;]Z6 S5mӝp&vu!{Uy*V߈$^8ߵLO~0!sEݞ6fʣVܛ|S{GT:ժ-]?A:dDL<+N3HI5*#Q;H8+_@(l5 b4b z; h84extZ S&`(צ1 Bv"'Żʪ-j7W6XeXiD^ɗeb K% ߕ4BR¨PmOvqjӽѠg~I[;Oo Lqm:k=gf%+J6< :0 Bn 7(0nڗNJ/Fm\qE<4 E7 Š;U55:1'嶤ձ)b,`/zM c,>:i?`m*; ,F**?Kޟp.A)볠Τz&(*HPE~A|+]櫜S܅@l4s'6K/\vPP=w;_yO=(<*.2S/ъq|E¶.-;amfmV[j8.[O]+:b􏠵(cIn@] i~0P|#0ﭑ(]Gy8_tbQh`4h:x=X7?f3yݵ'ւQꀻjc\txnV@`VG)벞fm PV FH C-w935JTKJuek?Î]Eژx"Y' lzk2 &@AwGKVU4n+W&G{8ϩ{2N|&UgԔhft[e"e$2]V,_L%ձls=ɚiO1|w%GN 4Q AߑHM5j4LovsrG@UXT"A p嶽ֆXx.׆"`(P ˘5~?]2=m ~7B>qOAXb ſ*!CCW}]IZVVڢ7v>ܹ ;p1p^\Q}1 w}PЗ ][brstcwkRPq+y6(hVao,1 v̝q*5:"52P}wx`@ȱ=bqo$л0?AXo< 6DOj'!1[ǭ={sי×y"̔:T֚-[ݮ8 |qQ[a[-&SSR\+-IfzSҫ'&S:6OLƆC Slj9L8@cۙt؛ޖ3oM޾rM*6}G:PSumu;@ݽ x)nx)焀r>q|q%#iEӎs07r{`7Grx1hm7dӷm2mXĪW (>tv#ցb0FfG^-N[6Z@%5X죐^xsS솵KF?MY} ^.ЍyTXinkjjcGf \_&kwhD@_RZ~rzG?%̄dTa<[L8ضJ< n]pFR 7?-{h:&?Y?OhoR u(kغ W?/`?/[3HhB`%Q4:xE>͠&!NK}ɻGz'Л ҿw)(Biא` YUN_`ؼGdŸE ("Pk _B[wx|HO y@u3h QP%YOV Ju`57\<ڹP1Acc͎ENW\Vz؁a]qj :R!T!յdT :'@;z Ñ8#idëK:5D_GPTPx^~n/\Ks?ؿ?7WHU"HLE\t/7\=,7`ˁ=4\Ueķۭf}/܋vilFT8'0LABx.mILJJO8~n >~7w. 6Yˡ%4 E(/zAU z??/: V8 ]yZchHvyvfiqA(l4Q3<Xp9Tn2㸵B_Ը|Kiz I B/IC{sbk1b& Y%׷xZ49}>0e(tPed5F~Qy62lil9'#!]+ je%b PJ"--rk@2#QdKJYnXW[1%UFц7wcu{]3#^.y EQp>ye@"d6(Jz^XP~)Chil*i B/׽`#f^AvCJʨMA~Qreb)/gN:okTwdžcϏ>d7&s!}+X8֦{p >{ٍ;u[}YN(4YUvktx8Q^]e-2ad[ːzAU*?"\ङ@;( EK,r` btj#"hVJa>'\) +=7O 9i_m{=^) JV)m;e~{ۙQf (d^c j}р;wL}x)$v#ep`l1*.\lwF1O[ni1:JT4[M^߁OW]6p |p{g`%XvB%=N V.v] zY\[d(.`#.VcfYƦQ|xUa>TM"'\ίpcg݂\3N,fŬ׎O8\*$~ȥ6еj %tƇ+j`T~J*sЁhEVYd5e[ߞ<pkt"y7fحE9qAcmSNaZF^WBáshpLŚetE{ŀhseZ}0 h3JGC: f6Udm>,x LaTX{$cI*~]%A{Ou̅Ypv^ L00ٰ6GT+krJұJXz90Q02 ["./}k3U[r֘"s|-q׎̄朎230Y nA9SvHVr_OL/ Lendstream endobj 130 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 451 >> stream xcd`ab`ddds 4H3a!cTVY~'Y{yyX^$={ #c^qSs~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWvt-(-I-ROI-K,36d0000230v1012ShR~W]Z=cYLlX |ǭ˧Ν> stream x][u~ᇙ3uWqV 6˫'+N%YRs.UTWDRoͩ۹~Tao._WO k.nOO'<1׋W.>Ӑ'Ss}rՓ^Ni?$~yϛ˥%a}4lowJi \R%5g)%;{7/5vF _avG!ZHa`Rta#F9w^S 1ͱ6mzv68]\qd8x.d#9s2k`M\'9RR_LpH$ލ;\707 ^")6wO40Lii+5M~!mW8ZoԹY1uqRq̳sc;=ha8y<424MwFp~zWG;l{f.p&Z$e ݼ&2sզ^6O]j}m~Kem;3b:#yzͫ6o*_צMݝ;A4sxQWۮ҉?ys`eN; geN'1%E6#p/T60)qN V&hA>mBzO0ϽaCAMF`X|EE4Z% !9&Y&8`Ů&g<Ɠ:9ohx-R2dFX*<cͧ,<07{q 6{iꔑE,';TgHJmm3n6F3ڣ*c>d: 66ύOCJh3Ad-&xU΀1r/-SO<'4g|Vif[ٲg3ɋs 4eH7~9dV*n70rgFpb) v9 7ȵڷxW81w)v# n'M Qx:zƘ.% iL;+<T`İ36)#ٌR_`OY(PQO~˂杖>eyYF |dkbxT17&H(yV I9Cz Ќ-ʒ؟Z7NK#B( =I/HLi> {oWIg+rBKeDJ: que]ht""qz_9&@`G&Dc vQ/iא*(TVħD7w5\9mmJ6d\AFk1 Wa3 9<lP 7㓒vKljKb>~[ 6kȂqB:)!zߣ:x&>Mmm emlO~ nLf ˤ駭uv?]0DJ4Y۹,ϝ}i6?lӮ r'ojU{uW=7)Rh+~+,~N5V+)iL~E䥳)s~]vL"F,}Q9 4ף^/ |e3<ѮE]T_C@8ps6캳`Oa٭t`SR9*PK-H?k:ȳn* #qB( 39rFDEsNB_'$r>p KbRD{QX[4y$a?ۖBJo708<TF`GjPO(EY/N'-s#sl]2 &3[TXh >aLŲeAfɠHcEUp Y0a 4R-JCW^榼Fx?(ϸ33֏4&4lLr?>^駋7[[;]x&Í!i?3 q\,_!0mZltW@TENDNy>v, o?Scr 0r;g۩oJTEInm=@ă?̒5G:Vf\J ~-x,l5;TyP s? C#/Bh͏8U~XW >i3*l$'Ӕ̫*\g1 !O5QywFN'tn3,$jⲱ5(^I /N*`W4P뇽  h#bdcsR)3:"B>ϰWj0hjG$ݦ~"L<3Fc@cISx??Ret9Y-)L7BnS1yK XO|~pڠX.H:D<]vP1<8f:.rz5&nf.Tߦ-};)EGsA1(}M $~r<j(e]p\߈3D4CM-XrB?H^J_9j~P  &ri!E_ԦOkНT3Ͷ ׄ0#NP0gQk~D_4 D`Un@͞bɣ^AI|KA5I_OgH dvˋz3Z{!Q+Љ ׄpsFSȊ9 mٸ9@4uϼ]\RC6uuk€6RBH'烶TE sFp sbץ)TJE=n~yTsY8^) :46Ҽ=H:QMw(gxPjie4]y&*,tE۷쩽S2A9$IxSfF2o+DrDD"}ȀpERpbR~ZrX*ȗ# )m ]>Ov+qgϫ޵Hf=AGvO oR;{LƷQaY4vYG]}2 n.$MRmL52_8|FIpJA;M/sM݉Ko7Tbc%O\7?J8zu95'~*]m.ne4 ]OE ;xԄݻe{a3P*Um|Zկ|V7)*1Uύ?`Iu-vyd^783{gފ iRz%&+ m@+oHY讙6ndzv~mi*FBVo~|Yg8O1.40onQ]R( xșUOv|~tC2[wĝf&Wo;RQBp7[%hr+&6=% sqW3dΪ-2 %W-^';;>Xjgrim|懞mЈJ-פ.Q SZ7rHy]o`G$8IJ#I C\l<Ps{6poF:?7(ʆ4!ےչ lkd n>!dvnmI\mK2R;0mg^ۤ\'!\@z)z1@lAIN{!>͗~Zt9YmtHuE2H{3)z7bдe@wӓ7#QqHѱEdzW?ͫn_(p)MŊQ`(B^$j}m6E))G"ZǠo>Dewem~֝+IE^0/k AWOj۝ nkm>MWum^76psz+(}I쇞tعwy[)htU;϶a Z4槌jzH=l&B4bc|ps֥n!Ǻxr L/23H~G1ǮV &<oTw5XK:rm"u39Y7{BWueN%+5rs]D`Y j $O8lsbT0݋(5qds}= 66WK$Dz\vIr]e!f\1O@Vg%~v&oQ'_pJ؞NjYAr}WGc(i2osSoZ{xJ# VYyҬ_+ښGW54)g|k*ok `JW7-z꿘 >L QBkvq$Z?Azk`m}HW{D[O\M}uZ/`ABU+:! N,d[WwLu2AZqj]L̹pCoa{c6tzkT'[k{O/k6o*?Ԧ"pY0x᧢ |bU *fXWN̈́wXG )ȧ9`ᣡRlO@ۨ@bCS#Ǭ=^giOY/Sp~}IBTعW7kqX-p0ݚwwUŮ_Vc?od>+U/܈oWO yiUԯ33u{Ainlݩ/'kszA<1/x`=$_`pIo~4etVgC:H &ףI05Vr+e`zu:yRQ8qHĻRuo8aON҇w5Z{@ϻ6C#"aP<'?vQNwU!f;&>~XgQsR|yK8ةMhL;{`]u$}uvBkWS&fu7+O5/>iSK1NƢFpU0|5G{7%eeӷC~SJ$c\uE!L7|_'_9Lƚ`%/yw4U[ﵜ]?>o4A#endstream endobj 132 0 obj << /Filter /FlateDecode /Length 2147 >> stream x[nG}Wq'}y^$S})YVVlI6Aoߞ&9uf|!囬Ruw᫩T/O'_lbGW]:]<>\d 糤N*d5TOuUn\uQk3U7 Vt66Ml Q*Xf NrNʸwS\J!T(lEj'6Y,:Vg <fSWYg-: %_}*itl^eN|VG1VynJ58/{Qe6S|^{> 0O.`R"̛FOVQ['_=+&ia%U~_D:) ;TJ0( <F&CIQp1rkx) JbuO(w :1*t@k4Ͱt> V;dQP <=c2.ӷvQh *,v@WoRΩaaP5ppmdVf%킮F~=xҎj/ )q~ 28'2:/ᄚsJ8[fxB-І5/ :x"l LɕtOrUppX퉷m;9.Ӄ#r%@t!t!s!`g",%bPo*|G}|{oPtU/1Căˉ]NGNAw:p8C! eMաlwUw_XbJɬ%jke{'<(\^ Y^R P~=%P@МaT/c99 ={O/w;wF y&yX!+Ł$u*?Z}r@CP@a)Kpg'tv>yG&Ok˭6O6lQҽ-HR^R&:Hyb& wT?Vu@ p&ҒnP/8ܓQcWJV)ƻ{hm(Q) 0ת)c (mbJ;(/u_ EgKbb!zbCzE'Q 韷PI3z=/ @瞥BD:yf1o5֪U>/>n7W{&w=@.7BRTHRp9% ڻA_+W^}='9莶A&+޸W/|6>n{-8 ocC:8]0w& <[/` P71TPKT` j *w; %@CbjA cK/t~tZ׼ Һ4 ׽kd co ig;xiUj/rsf&&iK(7Q0)1go1.<7.&?j?endstream endobj 133 0 obj << /Filter /FlateDecode /Length 1972 >> stream x[n6Wr騤(dڠ@vQE[̮¯8 Gl'M4t4a'Ӂ>/_ҹJ\?wz~~;S.;~\̟)J6U빳. E\6kٺקK2!dzqt0x[x*r^Rck&MBi?A;x[Ku<6Kr//W&VAҦXLg*xVͫ=zE>,/7UMk$w󕱉Mektщ:>1K' 3{*s8zwM /B0x.]-qw8,ERz'F5x!!Hn;}7k]|QZxOyq[J vun|C(07yWO ]eH)Q[-58PPzk,p"V3  b" JtםpwIi- E@ }+tQ]x508c=:vx a/,7S`sg7Rv[R { a p; Rx[|c:Xh`蛕5D;;{[1涅40Soډ>]l)M29xVV/RʬS՜" y5]tWaXzAal!:6>!C x4ҴKovђ5=U֍麓(fJt_SLiXRx]rQ6RzL1FF.,0}|\uXmdž>%C#L#J13ڬEJi1hgL3m ehwoQ9$UmfdBO1yc-Ŭ l(Jŧ6:t܃a v,HL s4iͨ˩;$Z힋ŹiAӈ:SzC`Nb:?(?Tmőwa"ze vbVKdq0hM{1d$~mHf=kAkK=#?`ckgx TG#Awi uE̴Yiaf| 뗑UU٪uk1&{_^{D=Um!Zu ON+ |n 9jڴ62S~_or}TOr.v$s|'u&@.}XɩgMȀۣJS.~Se.dw |;zg'2g5[-rf|w7ŭ[֕ci=#K_endstream endobj 134 0 obj << /Filter /FlateDecode /Length 2542 >> stream x]o]ȏ cӸNiʧ}$#EEwvf84-)qa'Gq&:9_o#g/atQD9[r&3o}-G̕뜔Hll.TRh6J{#Bx`8eLȰcwl+ͫEhHf1 fs(D-a6m1h;XgE֯ ]r2K;ijxCrnRмq]A.B0T^EjY UVsтBG/~H(8ks Uf#Dl[#ц0r2 "xວtCpmUEN߱rE Yذ,?#D8Oػ>mp $1 ;#1ik',>_mgݰ۞eK'TdkTc_PVXcȖ1 j'N+[|W;6 қ#׎i/Pzg˜sVMZVF)fm^P)!jDH h luFh0oKhd9Mn;ܩ Q(ڿm{o:ӭb{?ջt\{>`NjI,|Wtn6[_ߝj~Ҏ461q5/|9ātYjTY}4dNZ}L9ǣ=yX8Ƥd~YCg_fBSmR\4ٸ$[CSl@7y4bPL?0LULcF@ 2?o d"b{c oI!VDg/``B漌mǫ0U.`4t*)":E)fY3+= BUΓsΣzg(NVOfNE J*g/ ,+xY7o 8)Ȇd-J!%T$v :{GLbu7ǐ5l3 =9z e$f U_E5xrVopLfui 'i @ ")B+ H(;#1:_L@;F\bx{SG/`P18ߔq.@&^sG 2$Xc"W NC@(5Rpʧg^?F&G$^@KnRIn.kS~E'G!*v@r0$4 .d]8rQ.*Fq~MVI29SUǔ;S_;qO%)BMxp^ rkڴKHXg5 ~r)‚Mh=UaSn1Js'UpvJCUA+`D7o0<5]BXVP5_VuLc|fIzdkwKܚX(;&O WUA tw-kvNF2[\_! !Ctz3PuMi~Jq"=li<:QogO"!܏3N佄(Ժth}?w#xuF~K[H&TZ%HJ һøIsŲ{XmoYQqt%'VF˭#Lbܾg dz'dZ1®o;uyPEMPt#HRab@!Sb'T/sCH 1Rb[];~,Ac3? 03_OS/%9NYΦ.XH=r+$%L@0qZWo%P%-Yˣ 4T2X5)Mr8&lXb~JljC\xp6 gVrUq ?{@{p@$&&L/qHȧ↍hF'>)Uk|!: FB뇋 0?1endstream endobj 135 0 obj << /Filter /FlateDecode /Length 6046 >> stream x\[7v~ KwV)^\ċ8b/h4-k4g\Xa3ڵLհYwsX_ {u1Wojuq{6\}L_/^z8Oq3P.F7qo}j+6*]ܼVav3~?;0C\C1D5up1)"lm0X9Q;8aTs- .NI N kӘf;Po asO=C_}qi-`fB0< GryxQj{v֪q=>na0vnKM-oҤqP{p 1ncAo^fw%b;sؙ-<>Vo1V5IQ?pz-eǰC-*W{x8t\1z7Έ1Ӟ,]tFI;P^֙̈UOzߙ},䤃BN[6Yř Ytxyq3}cDsف5Bzu`m`Gy M7٨yƣiX>LEoӌQrv ywY$I!vzTa^GW;oG-V ^)8ƞ܃9=n^JӵU0lqJNJJJo%8Y yѤ4DVT8k-%NkrbmQ5A(!dMpByi!P[ >yx 36?&nogCk#Ν؁ņ6+EZ +4hE+cĉxGKBOK.4r0wbdoBT*O+b|k8J}o:@Rc1V6E mR )6X%dP@GD s/;|tT%&IŊ?ox\EDc>+}_'Sm0-Ox}ṛ에I 9i7Ougࠌ <&Bq'e@<_~ v`*Fm&)NA l=?8Qq) B ~gqLAkO8MX㬀,MW>N#t8 =.0*Ƀ>n-@`-$]׫08f?VБ!-P4J LL*3[I CS95GQI{i/@O\sws .# ef4^F`!D#geXAYB @YK!~SQOa$xW7&+ @קI4.${=%f,ad JW!F)A@_K8uБ70d1atdE^qnBuI8`g(0k(liK.MdIuoNc hmB Wyi0_qOdϝfq[@#.\5Q8.5Sr4__mi#L;w噟Ei^ӻԥ|>oZ ]f|qo{[7-9WU6@)x]o@9Mj(릨^qӂweo'/S,^7()iv~|W3<4G}~|m}><Ĵ;A䳥m\yJ5P=n<aܾxIԺ+D!\yqZP*fuh^p%ն0Vq<tck6#;^8*DvG8QTwtnBӵ |ߔb!MBHkwEf*;]B]~)V~];Ak$w.1@ )9 )f~nn%Y&8?%R$h8"8J}8kv0='j f5sH#N8zxwfZF,u"8]R4a6cGpiPbkbZn9l'&OևdfM!2$[UX0o:b, <'!j6m9@7#&Jh-`3+)*[oy5>ALCi+ !,9ξgY*E7dHu,vI.cJS v:e7 4(a@x9efsh)!X\*@2霎,Ki1zhiO D&Ǣ3?)Zn;)j)d؜ϑG7ZTlHUs2]=#>NᖷY6֔l!y1C4VǪ@QË-~3`yʵ.v#v4u15Jb21k#me 6.8r,˱AQ.Q{³^OEBuDsd.T&ixuZ uK⊅֒xjʨJg;<+A*8t7,G)O=(ƳiK}5_ Ve$0}K^i#΄e2p0Ln,|QY7p( N#dȓC+W&o+%iB ##p0 Qo)蔞n50vTnVy۶YnfEPk`љ(p"[Wqf*Gh1[ee8r"jͶ拊  XXup';^4e`](]Y-sPϨhm}Y!"vDKSdnaj T+L:j㒾[']l{gvs(GB&$bxȋە>p* ]F.@"H*biZсd2?k/B0^YuA;ROUVnpubf1NP5Q0_bRRK|ȗżBgX&tzn~QXഄ0RЛ09;+X\F]'R`7g4L7Ld4\]"kUi(W#*6Ya$("xBŊo@!VPQ\ CFzTEvN"o8c csGZ3ňEH۰0+4.H@6&x?FI ~WSsqZBSr7du9V0F[G'OXݎNwF r&vž;_f$Ln`Ic.S.m:̇jb6RcH.͠v8Kb$v2鞏 AdTWR@1ڜSi,ͫf_Q5ԮH`.Yө"Adޣ>9TvVLQ0HKV qؒ[dgES2-r|D$W'3!N"b' KqXΒbQs\opVX~]aJ;U/iBTD'_Jʹ/jtW>:.'Vus"ۈ Qsx%?ͪone_}+Z:lrA8W%t.Ci"zuWbj ~<5I ܈w#^៵FAkA/X.s,6`f*k;S gc3\ܙ/!xnJLE%v[%3EHPy@h'6_``!`) /E-^+Aevl- 09sI+1WWf낕['.USQ)Ղzo)-7,(C;Pe"` g&ʼ$NI(I&AbPĿ^lVS7*DNpm9~J*ơ ~PdU ԟHi' IbhCIto  @bUd)? |,XjYx|!v/ڽ6Q=Y4lWll5uI@?4 ~4ek/'L\B{*?w S_"W/]a:Vncmר|W?lR&Vr8H VuY;ɰ >U OY"vH>. t>#nŷ$V`řSK_Qf|v˿)8f%6UznQO6 6 (']2mUz:v0ۤ7!N:oL@947 jq&SGU@ eN2hta]JUXAKy95o,P/K|_mUܸVO{W*=  zn+>k`rپAz+q}TovW4@* *&lGp&u*wqw*hIulOx".].>B=IMތ'IN|ln 7Ą'6VEf^xE>I+.}Ǧ ߤQxt\Z{[%ӻ BvagډX9/83A=ЯF/\2mGH2%\C9ݗf9Siף9XNZJ ߷` (D%g (,4/،UR^ͽGiiG~;,iQb A;ԧpϐ49y ?Ri;W*/#;hm&3e(]^:ClРܿYoxP$J!Ħ 18vWknXXs|d^/Є5K2毹895(,@W 1ZZ$%%EI !v& (I퓮5')ͻX{B1X`6r~u;k"Y~!.v^W5hp3;9$7̥{㧚,K J^IӪ(ZmXp|¶ 17 CK?'g-krh? mH!Vvhc}s~ymu% ' [[ 4jQ#~F헟Oϋڢ ^ kPQ ~#M%IՑ0g2k>`^[f0X'^*aXv2zu%A_ow*d A3fءwfR6X:I}/*YR9J5Fٚ[ ›qY@87$e0[)Ɔ7Kq>,Tyխ d/ui|LlpaedZ*$͏(YQh~{_!d%endstream endobj 136 0 obj << /Filter /FlateDecode /Length 4777 >> stream x\Koɑ/T/|ga/Æaf|Hg (g/U&) ;b0P1:*2ޏ̪^z1z}S?v:>!sRI/ʭzOz}npw {@&7{pśU)9=]~6YJ)3 Y(:%i6APThp>i@;USX6.Fr1ggO*O1%Oqoݟ>M9ͲMr7?\`=Xm)YifvNٽdL3l3L$Jn f@(Z@ 8+(1 1$Haeѳxkg]d#H;XB"Ce$Ϊ,CT/ ePۛ"BPD AT ~L2 YwʑV*"$(lCҳPZ6%CtJst3A9Zjhֆ!*`U~X&USQ,(MdlLr)Kvq֒ek[SqB5i Is9V4UFw[%FzKI-%_d|H/d\x׶##$CQa,C,oB[B>w~_Y;$ؕ/$NQr|c@ФBj@0ia@] x úfX!S  S- lji" X w bҀDԆ3u @s1B,±X! Y#Tcќ@IAC,U`& rMRB-+tzjB*IS&Va|jvn,[Xw 4g%BxS-#j>YZoת&V>#:8*TZ)"WUf2TR_*Ke~?&6@0 " hACytyw G̑G,xaz*(y /̉;$|ᡟo8Vb ͂#_s&2K\Va(^ʎђ*ˮ˄iʢӳa}Zp3gIYvHq'lG6ӔGX'dfofnkB:X T]اvAqi-CmޙzJp9)nwECa2Hc>QBq$]G;2/fMmqë|pBwHlHÆL6|\S<4x4 6V]˽djL=38^#Iy{d\<@P٥$i3 Go @E(+93ifMkCdGԈ ̅[o` sᯮhcq IeM"0C ulN!@2%@|Ct\$J2GR%/v1yj b9=C]Pn%i'DҖD,ͳfL%-}(G,@w#3a&4My0H,Az%ᔬKg FTA1KNs7[T#; ȕY'3y1S(U٤H!JEhj>5)^`h\PM[mcWa7^i:DC4zJ:Qɐ~+!Hv49mJX -o5FU~[jM5Z a+m>PZ>dZK2igS>渡Znea-[Ω}CgZyn*pVesBժ⭞0h5oJ#Z!WkeczR_K=~//;챸;;[3v;u'-K#Vu}, b6 +' rvX<383-pkH>48l^9͉!{.1-)>$x,Sr5i'O@qnL6Yp8Q>9[!*%3P?7e^G1F(7)斥 f^k[k@n5(38+1jX:=v(5GkMqqQޠE28?8֞x!c0Dvd HGL$+2E)PWy"{cՐy'%8Čۥ8=z*w\]5V/ >jZڭ F)^I@ 'X+UD`8 B'#Sh 6 <  o:y խ رzбDacccca-7tMNd "8"?B嵱1]PR.\\nqzk wRMaXp߶.Ge Nuh %H%.3QNED;V ̱*K0E91e$ )#qs\\+ypwyŹ>a^KRE^&32s jGblKp /`S%L :B$ٳOΰ3VShإVBc˔1r5kK.=? ݖZ Mӓ* ^e%̬Ue4Y3O~QkAE٭ٶH-$)56LjGWٙ]AF>=Oi"B=l4^weN`ݒYFҋV(tz=Pg 4a"7?>c0vÑ[WY3cpe|5.ߎˬӸӸݸwApجS፱eew&MoՊ7&*ʱK& 8j\2=v6/c3v8CW@&4.U}7}+&7~B9Rnhi-%7E,06=MԐJ[~^1_&ƽ?6qM},hvYǥۗIZG=>l"gA Na\Ias$+܆NUɖ_nOȮ++?%L;۽l.s?v ]pC   ,I+ɍWh _3O8n{cfd3vZʰKAq\e7.b^mخE%Oq8Y4GxAʂa?+phiV!7U~klC96.(={}3?ݕ^*M;ayRhiendstream endobj 137 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 533 >> stream xcd`ab`dddw 141H3a!wVY~'Y{yyXV-=O{:$fFʢdMCKKs#KԢ<Ē 'G!8?93RA&J_\/1X/(NSG<$C!(8,5E-?D/17UL=土[PZZZ +F~Lk=Qƣg/8#{wAw~3h-\۷篿 m!{Ջg/^<,1G_sZfyv-)5[\!p7 7$g.u2vwwqH{Wh|W28D~?,;qFfuZ\ҍq9yM]˺+9r!.^%<{v) f.^;G/#dPO> stream xcd`ab`ddt v04qH3a!S,=|<<,k?'={3#caes~AeQfzFFcnjQfrbobIFjnb ZRaQRR`_^^[_nPYZZTWsᜟ[PZZZ`ȒgP./}"zj֫8G펓–^ߐ&{ r6NN-~oY<{a1sW1U{w1 b=jC.7{BI_r}b1]foendstream endobj 139 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1935 >> stream xET PTWmhMT%$&Ttm- fi5@cӷZ@Dd0v"GGE'5TLe4QL&f~iHe^[޻{λa%H ;Nn}Źq4q :Q6fz1r.ΔT"fhSi q:Wjy@ _UPRlZB&YAMHmtBNZӥlYVV&)GUV.^ZM֩6jbUu &dbT1iEJKiE._r[:ImRTr\)QQn,j6lgO9PCYŴ}%])m9lw蔅FO. o􍟔~\8Z8T\'2TN+pxqAlV^@'&%Oz;N]|!ODi)#ٴ\L[F\_ nAGvL\@\[f!`!͏Q#o2s ו{ikv^1 ;u\is\i䦸q(p-@`=[xsvjS~4APd& n)݆ybfiΚe:_-<`S E-›|("4ۉ>YSJݘwH# %ϑΑaƗw;tfc]4⁑j1r$ORknLq]@{[>+7XLd~F#ЛQ쓝]-Ng7S]#޶j BXk$"hbt+2{sKvD[G/TqW;q 7OjLctS"?' +2緎EP>!`ؙV+`Q)T [Rc&B(\^Æ^qFgb0HqB\s2Vo&aA!,d ZGzSY~);{D 9t5䬍FcR.*$8S*[31HK<)%Eg[GnֶYnj[='"!jn݂?"@#ud?y]✷.⥝ՏW6cY̩Һ3vxe[ &8Tf )d69J2!\RK0xV}쥽 ۋ6 yKʧlяm|uy܈.*禘p|51tK]lc.TIlBD5uw2$UX]N:!NM;?9%NJD-@:Rzt(g0xz@?EF I\m%{iϪJSMY-E&еw+C=C kv>&T}10\1lj򉵏"/޷~66`ӹm#ao>~{a_خԄd~ i??(CW/:~/WCځ!/:œ0ΪRF ̈́ݬҜ?޻w M5AKmMXa:ү_8:"}(0{݀endstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4078 >> stream xX tSպ>!4D9\P@(e. !mtL3NΟ:Ѵ 2Zw-{WSNZo𾻲2- F"66wN\n{x0OJxŏѴH/[BL@PP 5,RfKҕ1ӓg]`̘Y$35[(YLOLT1볒˜ϧ+O>?;13gvVv 3fK1RsRRSb^ɒ+cV'fƌ:{eiV"W*+%5[NDT,;g27oE~ WNݑN># b*F'6Ӊ&"xLD$f[2Ib9*1XASp >A_8hDl@#3xx71OEr 7+(@ihՀbGYjOE}g>ֈ'鎁#-<ڼ}MBTY,-߰9~+CsCCBUEbk euXL+^_pnmI(hO 3f~?a@Οw M9݀^DoȟڟxzI NkV37̛Yq'z&%Kq nhV˄nvW8]et;*jH:84[ح iR9eEՍ2dJ{ oY'KT+imv²@-[679j+Z!ziVW ƶZS+y@ vICWE.4X,F`H^z)6O f 0yF܅@. 沶L'ѐ¢arhĖ eֲj-7!$i(Ը,4p^j/ǃÃT4# #:tBde!.ލhZuԔ4V*XJږ\MObŵmÈ s<:p Eo @[ćKK`#)S<75w㸊:`#k4mHV*5.@0gm1uZ6}L9*2XF9#Gi~ϩCk?ܰrw)74F ;= 0 lOT~`Zah<9cRu6@7l c mh1k'\泯fz=d8bCjRed㧡Kqin][ژӚTao9q@ZKV!Y6()7N&[T]˭A39g A3k-(D _ڑ?@ 5TtYl2/gӞYy;;p<\mZl ٦o9Bc =ǺKhK&WBCPc?hwwJVHa QB:ڥF5P+gt3a(,*ViIV=ԕC`3ЩĤ@2$Snպ&EL4?y ; ]pCU2@Zp;ݭjzh4:, eY*^sY\T;w@ i{eL&tU҆0o7/஋9=_ijM D{݅}SXUlX˼Xf62Z)0PxVǟU6+{Z]0/WSFũ%۷ałgC_Tu*o6Ÿ>KK=GY6L`; 쭈cLrMFBG]!Wňe!U^`фMWof=dS" 7fw6xn?{l_7fnK 1qAx^xcljGPEQ=sOBӓs}rHD7VMקj--,u2.Ce0|^g4B,DyU40 rzC5{ Ne:Vp8(a!wrhxHaZeJX뵬Gl8hJę1XzzM=( ,#`X%l5T"$Rr_+Ϝﱒv؉} p(OX7K-5rU+Y+v|$Y0%4?iIa-1盄dVKHô:jnUDa!SJ؏\h"{v_9llgm}jA!vv+ `'`E f[]P}ƖK*-.U|j|JYL:ʆ}v'bGEQ>A>-zixvUI1OjҠ @j`G(z^pTϯ VˊD_k󲤒mX5 oWY_Z0CQx[QBTvSJLEGhN̏Gyk9á.<* l",D-GZغ膓~n|/ʩjݞOZJaʋkU^;UhEG6v{+6W33ȡ ެzDH"ޯJ=RV0hq#)ߢ\4U㥷}*|B^x?~~SKVVAE^]ڰcaYZ)-&eNn(3Dj&SN\kCQ6qJqC[ʮW6HfzcmIJx_|L-ԧL0UO:Qf jo.sŋۯv4ٽج6 9o)pq|2\fj)x( C(jkW+g682M6iKʵKvs.Ū#O@C⃂kNOƔlʇbɦG:kTվ3xw wdC$fgiˋ`9v=Xa[JW;#g$:嵵ۖmپ=ҟXغS&*7-[eP'zDŽG3z~ Ƥendstream endobj 141 0 obj << /Filter /FlateDecode /Length 161 >> stream x]O0 h7BAp}I[6|/`,@[4Yeb> stream xcd`ab`ddds H3a!sO/VY~'Y{yyX~(@{.,FƼʢdMCKKs#KԢ<Ē 'G!8?93RA&J_\/1X/(NSG<$C!(8,5E-?D/17UL=0霟[PZZZX4:$юGs ~d!O;f/^Z/7[UiwI9wV]hQr|ŋ/`-7}'Nsyxmendstream endobj 143 0 obj << /Filter /FlateDecode /Length 151 >> stream x31ӳP0P0T06P0P05WH1230!U`aS027i`9'O.}O_T.p .}*.}gC.}h\nn@n.P9?47XΎEAmGTa?ߠ pS! B)endstream endobj 144 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O10 vA,tahU@p' aKB,N>~l#GpƲ5 HeQ7-Yy!' dv~W3g}:UiZB 'mUu1 R 8KW`JM5☛&e=O) @Sjendstream endobj 145 0 obj << /Filter /FlateDecode /Length 4115 >> stream x[Yo~g>I߇s IyX%\S]CK@,Q]Wx,&y,_{zu)y|?G?qszu d"㓷G<[?EmOVa}=$" ?9;vu?-GGn:3lZM1F5O31JVa6%BxV /(iH#`s|c_Ɇz+x1FB\*fMeF)8G1V.m%i/DLGu%\oғ3JU򼎽zz,[& ~oWvW?ZۏBy!s*=.}[/+y:|z^JUr_/e߭*wnJ z1># pOeӫt@M8Q@iuJ_ɩhiPW 'cɺXI9p2QNC2Tҧni{?m,/ lgJWdӕTdr2Z,͢)ǻbJ׏^&9io^ll,0̑dA('mLp^flݪi\c3ӑœ<7~0 ē;<*jPe% p뀧,+0<j{|CO]FX,tFz .D5`Fj˧@.oAb66iMR[1#wٚnn=O[8B<H"wd6pD cP{_ L7$!MМ`. QXR,WT#sܒzבHɾ <mD D nPwAvgKJ~m 8Q>iQ0>2pר:%AiMN !m=JNp  'lbPF:l)&x,T(ڪC>,DJ|&6  OIx>&2O  `;7?d%\JԳŰpW섙zvlHpmim Xn`FJWhM{7ȴTS Jmr>^lIüq#` f,XyR7N<6@$ZC?ei/:Qi+;6 2\%!\kmd'i!{͈&i3]jK  0rh]j Z/\d華\/h+\kj/O 4Itz0c,Q4(#B7x.7}ib0؍sJªWq7?Qv7j0K٫[ 6A?~G$K+E 9O>ȯ! n,SZ')́8 $I F<HI)S838\vpTkS4%07I7Rnat>8*7S 0?AXa߽DlN:NRg5DBA@\}YRvS~ pkBVBMsoC*$h .^~^; G;L~ Ҟ3p&3#\PEDi"a.!gM2XsdgJɨ0{ kO<.+zmgb?[ӥdX $`$ 6mKqݘ$ 40bYt,8O:);2\ 4<_zZ2 ۱)fx?o( q z_])@eNDdkO0 xY&r] %ZG]x[x{Mb@!<""s >r5 >{7 X`F;oXܔNMM2ɇkhL='6F VR~wƾ0}ӫլp]V/X^@n%:Ԓ,9T8{pʧM ^NJDGV &6%& #iaz7T(,;uQK-K8rBV&6_v*tX \zrg{D<#b鹞^V!>i:Q:(]c J063tx zpn8~# RO]6Jr9l9"mv8vCpņ$pMɦ&^$y<,u@,] G);nbR,%)Kč%2 %pOc a?3^SR&# &m 䏌p<91x@Q1|w41 \cvooAì=(i1;5bV=иt|[ɌpZhݶJWrh 'dAמN5}/hc6QV9;Y`P Nd'A3`|D|Uj0}X&K*_ B cr8 7SS4HS is3̈Јfs}q_yxw؞r83g+FJB|wCJ>g6fbuJ^ m%o+w9UHX8s#'b*N9LqTB!6s@,媶692D7MpsEMByGO19MuI04s%Wn2o RjG:"q Lv^%=^xQ`N{ʮ4ľ8Hg)/yԂʎ20Dž1lnخ#kI0.40l;d/jK9s( z09'ԨxM@75:xAOüՊ<]_O-I-`mt1EPoRZIfo+U}:9'6={kcrAeJT;oE),DžTE<xXU?QskZ[@x81kT):Me-hlt$ϼ|fkYLaZXq,g1J >٧ &[,`XiO3I`.&K-fC-j6[R$Z^M9V^DJ@ևҎmY,kCR6'?/%"}t\WINu5UNCKbXriiWK;|ha_qO<%n0k=&c]5SeS3K4~˞, 5#ʲ_!軂ӌ9=>CG:KsI9c3Ws >R5R"d>&`.aCz_5G .CQ SYq4Z p=-uE(rKYhu%͛fR645-O2A8^7;P6x'(^qL1LIk?SD3,C%?6P{q~Y][#4~WeOu!ݿԡkN[89+oendstream endobj 146 0 obj << /Filter /FlateDecode /Length 20785 >> stream xێeG%_xF3E@@u]GdUGek>;AV1AD޶bnne%=K_ˇ}˿ڞ(v~w}_f]}?9-?گ%:w^5$퉑kxs_{,Lb7`\>_cV_vڟZݫ#W>OΤ|ry5Wɳ޾ٕr^Dz/NӾR[Vn~r?65'ۄ|!~d5cR~s*6/?Ӈh_m^M݇K~سkǜ/}_(!eԝC&W5pk{fu 8蓔>Z#Sڲia?c #H)ItnBJ{C_M-(XK-b|Qf:cag,lH+ JK˦$iH9uo4/ Vj㭺-+2XOY=r>-=:ٳ?ry_kl,?Aa>ƸHeGMvHrͧQ ݼɅQˎQVSF2I7 4 k H&Х(͔M؍b*xHTb$|ex. ˅/PLӟwb,>%Xo^!;nMi[̏V3ƚuǾ5}Qc!-4º}mRWk k\0Lazaw ra]~w&me}_dr/a]\ÆTA3%Sz˶8mi:R|×VYj/ۼ[yMeG&ֱ~STum͗sMQ ˓N L4?HY`mk 'leÜb[JJaMi#,' R)ځ4h:LzuʀN6"&ŔJQ(ҦWCYeWOhziOcN v?fg"<XC߳'>G,NV s~J3aƕboa:cRöb"~JUY5َy ~(lV:qpӃ5?|߿ԗ߾߼ۏoP@鱰]1ǰA)b=ÇoaPɲ:X7[d-4Y ԦR㍥dkrM |!,[ڑ`iL.Vw%ZJp*8M KUlS`lЍAo;05it*XM)f7ViNScvkݮ DfgrEoTVR2pV# S{}ݚ}|9kɹ n0u>j5;UrV>E,M(q4Ѷ ,B $#M2Z2OrEν&q4ȯe&HU$A7C0ZqKñC#v?ZiV5XYѽjZi,+NB=k4FGbU#UE,9r/njwe K!kƲDBd[D/v6Kx=~"a[cGh#iG^}#.14UBP8 JneI"_[9Dkr)^ZXkJ7HcYa&T:g.b4!/LهvtMS:Ϊ`(Zp5*ӯ֝O]ټ`݇ZGKFOwȚ(N@8I+1aL"_AY9t; Oh'ZSjaLH!ftdvl3^Z/Q{ٯI˛})R L\DgܵN CFf#EC ˾} l#L\qr4)݄2( =slQv"8W]zcaX}A"`NG] },rMd;F}.ܦX?7bݿ=l6ŴY1Hm?l opabq zsJᢟ) 83w:l|(S=)ujS3sSqbUܞ` P a~j ؇_@>}1ZPW57. Џ^tl˳8^/UᵷktM1 1*/뷁>a{豁f0/g5f9ّ Dri\dai2kJL;A@M,L&Wz8s QM1ӒTƲ7Q+ʮ1؂ 4 Nr"SF2Ԙw[ [,Xj^R*p))Rǩҿ˩Y6yt{jLмn, e b/eV)6ߛH(29ZCzMFX *]זI8{ǐbsFn1b(7/2Kݔ)t&j%ߴ52\"e&6ވECYipau:,Sd\~5󝰰Yd8ҘE!Dm]$)P$5P5<2Uf\em;8:ǡqa4yx;B4@t|C ee:UylC@״2LØ{7Qc94h䀹bI*:FzX.Q5Z ;g'COpVy#(BK&rkKxEQlkG+Cb\,u܄ Ea+x[MSÄ@ipذptL&4Oql3ZGd:)=A_v^˥`^4>kN?#]ptlx0gjكFP5d!T&;gxkfm)9GݺאJiȞ NJ +6-D8̦vwS J.:=e٠i(eu&?i*3={׎p*Ia1ͷP7֠':p*9oR""kHZϤt}ԅAA{hD!N[#zEQf9/sgHE7]Sg>[=vV#ܡt-VFF-?ApBtW;܁1=9Ձ) 2]oމw2oS?$!>$&a=q4nBځ2S;A]M;_Z$C.,|_V=K/Nح} ޡLBZ7Nȷ^!0>罟0q޾y.(isP3n6'V5k }Yhޜy7BDEFКC7߄g8?[֨w~2r[8|_@?r[c ow[.35{Nm[ 1\nG,{w_/{=eG٣5џ|8B/ܵM@C'IWrQH"qG|^ڸ1qH9>LN:߂4 U0x'o{jS4٥<Ɋ!<\cQT><*(;ELM |*.H ɤ(p>-8)N!jEa O*J8:zr*c]Qr%;ŵsEYZ׍ҡ+K#Pڌ*XЩoac$Xaχr , ]2c,`q&X JBSV`3= l4i(S'Tߗ5_QPީ;Mww =xr\q7YZޢ-"bSCo ݖZ8-VVJ[-FnCK>,(̵n8zoSDo:(:uSQ887}wS17pS1UO17BqS!7%[vۮB|ۙBo ƒm/vSFeQ٨l_6/֍sMA$j2CϩzYfZw+G>sJʈMCx JzNDO[^چnhLp4׷@#Fzu).| (|0C'W [k/Xn h5FsN,+wEA$$'мa&5#!!H4fWDi1 e C9(!`kZ09rk2iO UM:pԨ<6Jm.1_ BeJCUVļ@ QUPW┈j8n1׋Ll![;yN)_E9+J<'ńu,JCT 8vISwu{&$>^l)F | 7޸7d&=N% !]#!\( #C#74=ڙ|rM-nlAp/K0n5Э7ڄ)Ѭ +,:1{L)m 6zn] ^JpcW#6s2xCu]@Tr5g{vJt=qޜH@,DNAn$O?F3`(8ךGYܴEAi "VOvJޢRӤt ?Ljw49="CzUT&I^a}/c!5_^%RNy)ըz\&{kfmÖg T^zvW__]}VK_˽l ̭}X`qC3>B"WD;zktw CyTy{W ׄ3BUqrGZ=uQאַ~igi97o i4m|!OFW cj,*ڙZ[s, L6$K`m"0: ]KiE`%4RibiϘH˭b{nI/'%Mh={>2qh6{zj{1ɍu;{m:u^gG%Ζ ȪgK13 ߂<4/ 1{9!y{> u+|s82wSOw>w Ͽs ?븺g|ѷ_Wg|&E=kFWEU i ؒ2ijFa5JSIOZ,fkβh<3a,jK&QE2ka ƢF =2ˤyX5,W2=hQ=QUF" ΍ :\Y*K l?s94cyνf*؅qD 8UڷpaM*7YU:&싖cYnQ@JDy&2وf*ZߞGZwEc%*:1Cƀ{OrPLjz+j=7}d[K;:jM(TyLXv"R3D.Q+Pd e"u,(YkD\2%T`dGȲ;;KQo˭j FF.Y=΄ p 4rUgDZ @bm! gM;h#k|ݲWʅ:b'Y#14Kx[uHY˥:"l3Kᰅ#LyGD@6Vv%X(PtXZ;R!yj$q,ȒޑC$xY3SҢA0Q5p:YO1.e3bn O[}|d6ɀ+H*N*bcְ3&n $%Wg^?^P4w3SHK˳$}'=F%g=8g|D jÝ^r h͵⥨Xkؾ1O{C,Yg:ӫ(c>>K*c͆2Q>^m! ʞL9[7J{0eE8qd 8D֮*#[l3H>^Ȟ El(+t]l$okB(i-^ S?R7nE@6gٸb|4A)ZF:InT wIG >+cgosW%깄zGF*<txlOCqj4pAȁ :n*]S>bQ?؞qi;P0%}Am{0 "t|Ѱ`q Y, Sjg֒kB1oH ǸrmRQiTqN>lYëadä]f4o '\̍A_匯؎e\C_dEcPZ^GGʙ`Ph^҂[\KƝּxl,5b&Dž=FSfF] ~;cV` (v˹]V9^Zx;6+\ GsmB]1dkveQ§qP3~.>b]Dh,s $Z*{ >}lkP;)Quuy{3ZV.?Z=wۢI-kz.O ŭڻKB5y<{7(@%3y/<GNķ7) h7[H{iEaل3V8G@ݩ2Œ'4r}}96paP‰wtpe3Jiq^=o AP]oYo5V#ߞ CyTy{W7[=}o>8jJ~(wS`;S?q^Q|}l8?8tQc%#`(D@Nӌj 1q@7tM+V,Oה3L"b8q"`$by'VHF&TXJ* oRiEt}J3L'K"l Kj@œ@kr:#A>?2yb7CNsT,c.-%K*Q/HT,U%VYQmvt액AJw\n̒ۧgo.J7Yj0 N)*x KYmőjsF'!pԤCƙp l@;_Q=UoB-~kBp#2PT*vĐ]`+=vtySRgYDحETl jETC%,UgihԈ`ok`ͱyoJ*T|pIU (˪axtRDh9*RQ"ɡD'e8U>Tj/'XnORBbE>`c)$k c:RKdɗ|.pˌPA*ݚ\$SN&?!\63~⟬.]8GSbSTG^*?ѽTjInPڱ5tr,զ+aZc6SZKjKfvZrRa*XU8DaSV%jbn۲#`f&5,-;ow ҢoBv^&VE{UX=X Y5#X"m4M0;T ?R=I92S`0uJi*]_@$P"Up(^1p7"Wj2%: uPT1GN)2'Jk)UqR`!2%ejF:GY.2#Jd ,*#gsnEs>FZ5htD#_ԫ7rT2YYr: AC>>5o^IJg, agJ ͡ R͠0>( )R!{Q 3ڐtd@2xqkPhI`)P9U:Cey\׷rFp+ %E}l k_3NAyRQ65(4(+|]RȼQT757>$\p{)0R,pP8();eǧ< p#PX p#Pv$VP)@/K Mc%$0tqtO6tq&ti@D7W@w"09іuz7 |d\"(}B3s貼B3c*)D(ꜞTo.S>NXƍp:FY;Vﺄ'҂[GH|yB߫\Ӂe/^mS0m1B @SVrb0;{R(B6`/@,(`ɱ,f-{FK?c`۴S[0Z|ʃ[(^! gN- /)TCI(70/J~P^h<2ۡ#lQlY F?W4%QE)fʀҧp\t"R/PQErư` zu0+%ĉt>|dv=v$?P B8A>5! J5K`r3|}DXggGM"աGPS 8dG| (6nlHbNS%Gt4!- x:ܵmB'{>uK$oe߼L"y(^|>t Á`0{ _F|&G7OzRn ?zXp36~y! {3 8o;'?>~j쯄8\Je`M0`EM{ykud䀖UUk3TJ`J@V KV>b*k (R(*aZrX:0sYU:xZ,\QtЭdji.s0`9DxX1Nq:`jug W@RAV f^QV+V8\)f&eUBn('ÏӦOV*rjC>|ǎNRcPG-]%e`qeU8Yt_kK$G]*[ Oz~9K mfj^, n1,GDBvwe᧪|  1,bZ@Q , GT#XvM2ӥ-aIU%XMֿ˩*"X[&#p{%@q!lo[1q};??܉W[/;%k^Pya~auQӹa5 Hѻ({;#1.g,0XrжIp@g\rs9362`I}|N(F PZb(Fkp8W|@0'Q`~pN:p(p㝳a7Zr>k:zxZO}6t-g"T>9Pۑb fecg@0-M0nNu* }ph{ _d;8ԝ;B;SvTg}@}% :>' SƂT5?E ;tpuE=·xԍׯ@0d[{b Pз}F_ڟ@f1c/~4_eLP&.,"F 2!CM=4t'bߋ 5ȲOǧMGQwTӝRBX^d`,(z՜ rp@˦B2@UA{+EV KS@ԐD 5r .Ycv٬ªFt"KY,PxI@$KQz vv[A)iTNZ;v)jd ꪂZą|V]^+N[UUG0negVtXt0<֓e%9YA@3"KaHe]iy2~I (k'0m`qrx^Y Ӈ{G]Χ5+/DOi]Y|89ub2ʼnHq%HWv]7ʼ0gi#r6j?ÙScߴ49[83PyË%6_UL6fCOe ,S `u5ZY5-h%Pr>r"jfkԼ,( ?B4F5`C뺳eA6gA,nY͝`Ul ǥk@.ˆݶMBc_1YXNN$GK> cX*L K soDt㈦8ohL,uR;zv[Ϣǡʹxynd(J%F 8G,BE*٢eU%U5qԭԣ&K 4Se ][Ԇ&"FY,J yRY.iVU+a~*ZHEd)Scx* ,eeQUp"pRxYUOC[D,pOd)t WDFRcjIՎUvSRLyrRCw:qTwE9I]S9<*0rhֈc}eG3")|rR=q [TҷG%4[*,[vw\r˦$!"4Te9MBF?#|X'j:Cΰ#jwr< YJ(",UgDMbGǩ..J#X.M˒,Z;ȯd70YNX'{e_7Vj›qVM;# ZIm#2[EԔSiV@JxwU2R%AO t,1=)ٓ/8dlMg.τ -_7T!Rp(~ pll: 9`&vTYfspdvRtYrCSb k'ʥrAa Pf8Yj*aw,S( v wpm@U]Ӂʪj8Y.r FZ !8pd"7 "cH|"ιG 茿8gބ((!K_-5ɲo]Zd <'KEeCS?lHEw* Cvb;G@QI=g!EQN+">{~CVQa> Rl9':o F! YDA.v[+{ʒ4x NuR; *e e"o8D'j[jFd]؀1,B-iphJ8UT:`r0[a1 L g]8oY -[sy 0쑰rІlĈLjct5yVЦNvuJ! !6/eNV_%$8e]H IA<A&!6$xG=;pNp(Lu؇SHK_:qK˳(o})P]D'"e猉aHI$7Z`ӽ)L#%1tC$~ӛc V9* (s 硭ho$J"SwJ~7O Θ3 nL/M/Je9V0+ԑ5xpU$2r|ĆgڑY nt3:NhL@90`tM'riѱ}Ie+>1=t&љmw>\nFct%N|K\>Iq3#_N@Yhq]rhBm/v8l86LʈGi2ʵv.XA#y89LNڙ9R9nRQY/ĸU4/W܇Iq$ܾ yk{{v'h':iۜuxXVpq:ЊX*xN2cT| KS^:mDS#75^(13wUDi^ ,K:: T|PM^׍2ۃ,&:2z3`4 n"\Rl8wF ~Ƨ0c6n&K"ˊ7ّH3e x4><&X!*9̦T: p:Tj6 VɲO,UÛ(3 ЫKM?˓ 0'^3[CepO99Z,EVAgYTGX#](L-jd'H9Ңc 9[=JQ#:sTb2]&&u_T"K4 ݣ5QݪEK"\sa&EURFbܬ{6+)O;2T3`)qtouJ_YBǑY6M1;`cU:ÑRUŝHਪE-hE2f1J*&0$~w)4ezdeu|쇪X ԕQ5(('_Y5kD{(4>YF 냊Z *A\:#5%`)ʈZ+8j:p,eIAe^]͒61kuEQ,;Ŷ!R],E*oT)#:*IRt8Z/ʯ>2tXd&K[HVsQ,,cs#VGfpUDH$,J{f%lC(j9٩aG"R^ʎ4xk#LvFxKͧ"eR1=V]ɐުaHpUuD;s7P!H4#2i]"]RS<(+3CiV@:5l'j.DQDE ],EEsƗ&K"P,f(-[0KdAH*n,&Lhh։稴0"S*h_dKk ;. eN3MH"7=)((NMR -?ZQȌBb{Ԣ s| _sWX/?[B"Rd5TT,ɇ~ӘJPD.ʩȦgDw`[YwDtø G 7t֋˹$Ni* P3lNՑ6R;/ϨgJmOqx9N^C< 1ON_$1$G ugf9ҁ_>=f \:FҬSOWd{CAUVo򩅂#um3)-* S>R"q6LPDicJLN1N3QV^ϻD =|p9J3Jg5|pmB6Pёl'NP`y11k],Hs;{XRDkݭN6YSA:h*1*QM8iX6WD㬭tL ,k@HZSoxK}s#T )twajȨKC<Ր,~hW'x'xhQ/yj 8SBVs*fg>}&`4Ҩiˬ}`] #xCJj|S+|s:'3Z) 쳁]IH8, (38aiGPM%DcB~gcX7z#}|~Qk>7&SR>2nÐ?rd/~`-)^e9XW}vfc(d6C3c :ѳ.)a%0]B}"$L hk_L%jjG':@kC3J}Xfn ƀSg \=I؊ k*%f% YM$wP\Jjv4׉R=gMq08 ,Kw|&_{Rgbn{<VsS/pn@Brm6gn񮷺c:ƽ)/9~o8}~]0xHuoQKSW{޼84pK.mL3^f^_Lf2wGR*6_J+)_0zMk_2ljƾW1SyG(Y'&dps+سp=~v}دFdW>&^7ݴ}Ȗ~@{Y^ZWeJw~ 4m,~33s$ny5TU77Q6gSsޫośOo)s`%L`!rw1 @d[iv.V4,FsF pT>S>o5R<קsa 7}^l}oكL;G1erp.>_~s78~iKⷕL\VckaigǓ~mԵ> stream xUkTGfAΈ,$( [7y㋵ANz;+p Vᅡ@qv>?Z 0WcH?/dNt]yb[z z  sg͟b4}ع[7×zxFt~e>g-=Bq)skz$`s${{c];bQD?|,p;t"^[/|C]̀\lBl>\>|tlG4 S<' gt=1o;l[Ν>/f N=ayۋہTl}^/N+xRDg<ԿВgupxX–AtGGspU2܊Y#G3FIyf2l7$`ڭ;Kb_B_(WiaqvNG VO]3WV}ZwTԛfe!>ϣ 6-v aX#~L-$'ǩI h~E-\v1V)=1}rpftKKTpp̷xZ=|:Pj;z^M*cњ;?ͨҒ!΢"L4r`9T5*J Aq(6i?(Haw\ALy`mr`S:82$井vQ` 쫨^ǝNn-溦n@ku-  iOǾ;}ˑ.iJ0Vߺb^񷁅wF}P8.^t,Waay>ka?qP`̩$] W{Ro.?G(2uSd,=6ь%m %\^"Xut|IMa?y Md+QDUsM㽃7p+(GIݲu_ yW>NK2?$BdPA%_+Q,ڼۗЫL{boVxAб7t~Өk{>n=tj/C"MzG>!-}]Y[=a|h& ޅ=m);z  RlQszCGLkR˯9! 7(od !Hsf.<1o6Xzae>x^hG5gj/#|%9\ӓ}A 8@l6&K )(IwzLijF3*x:]U;wމ tzp2P~co Wӷqu S"@w?$ {oRX֋ 䇔TUJRϭj#؍??GQlSs9ΥaEXtI؍k:ᯏ*d9 l endstream endobj 148 0 obj << /Filter /FlateDecode /Length 160 >> stream x]O10 N. 2D! }I.|D/J`H_#490Lu@vw=|FC -A#EN?p^+yp8I.~r 6/l%Sendstream endobj 149 0 obj << /Filter /FlateDecode /Length 3288 >> stream xn1ϋ|ľiN>ۀX ey`K]|TU=ՐbAvwu]ۥRWPry~ۅwY9Z~q;tZryt(G2ȥ~.+)G?fk 8ptxz:F#WkCGvbtpQtZ~Ie҇ RR9 EX^oVVVXFeiYǠzу "7^mqGպ ]nL۬*(9c" 3腈 "xzcpp=wnd1<|J?Hr#A6 l=g/ڭJHlqȶ,^zJD;U-f6=*f* ?")| `A!HdʿY}r% gϚR~]%c]QND_'n;XCܮYw([O8kvY[Dxm߯wzA_fA>~]@6aU4]lpHuۀZ!n@# hOȰs::BrcuX⫗Z2YF;O*^>N)+tO4ÏLp\W9^e{bNDJ5BbqBYyde)kyn[|W;nEi5pN"E4QBA2|P BAZգ*9v^'y)}-}H!KT s,y){!{q>8@,W`@p2b/G%~|!rL!;7}T IBLl48Qn)fA}7SouӜO JK6\ /#8j%4O;6'"n +,,xpg@F!Ȯ>!Hr>'i%)uOjd@Z5ГRu#\=ee#VA^;𖽂+ wU J-0LhVC\x{X*Y1y$r4SBX~: XuVH( `ѤrHyB2 *W򇇿TE dqkMۤ\#I*,+nF80ym-H6iRF 2F]N[t%ɦStƮ6Nd;\%x ΤcG(ݧ` >zw/o WAAm1UdPh#=[ϙ4pZFt`|F%U*p(r,\~+hc L=^ZJHQE`#s@Oo|~ȯ -3M{˓>q$;|Vo"3/;1##6Q.D8>-ti88 ~=lRw `bz9ǜ7i֚c+ߜ~OEw$ AdAҗ%~zЫlMLNc7n 9 RX.=U(MSx$ ¹l8&Z+, I]jvC`Rd3!ߠaS۞6#HWt:+)*^jW:nД  9%R{(% inh423R: ~4J6B$'*b'5ʓĵEy>y@0^\_US&M[-dyE+xGH' KV?}IP}FsSgˍMAq±ᅓ*<^<> stream x]O10 * 0~ 8ʀ0%!tpw'0^G#8|QcYZ`ٲcay⢼M2䳾yU!tVDWU}gL/T)Φ SIT @s$Lg);@Sjendstream endobj 151 0 obj << /Filter /FlateDecode /Length 5266 >> stream x\YsǑ~G87 >,YIMB}$@( Qtͣ*-ʱUYYy|yt6Pߓw}x;P?haG0x*ãg>nMʄMg+q:04Zِv?Vk Dfmu8pN M9h=*9.lyVlrv_9YV9O ^0|s:98˺nOkZpv=O87)S akU=,JDٔr_/j}\U2I=\ѓAяkM ?"F)6.dیi@mDڱO rK1$!o|LcK hAWûy\Q06HU^"]Sg+ӭ79=.]_T98\~2.¸},zJs KXyeð=Hi9 %7[<>㝼'^A nx ‰㫶3*B ƒ?v[J@p$A x%i7W~lB/w< zh %XuB&Ki}p+tޚH07Q]g)<'>o3kҭ Gxk5.xvAFq)3d$0K9#'#B9L؉i7h1K ~s~5i|:*5ˁbŅk^\Xr&9$3"H3d8ًvT݉ .!jM/jxd|Mq$g -Q9W˜*m("H$~`ޭPJ}W^ X mO4u~uc>gxVa?($2jV>}ކmxֆBo )#--u6 Yn]Zy@kok>֧ R6(]$ggyuo!{_ MUD#vQh(Rg~ yd)TL^g¸ޘ6˛gp}mI]dj.|`.u!7%VpwQ]!64 =O>Jx>>hyd NgXƳ@%k>;Flj؅Wqo,w b{흼h=`5O p0G-#KRi06Ⱥ3:0 :wČ_i2kΜX7>&[)isVAE?S!RkV5ocϐ]zfh>WF/ ϡSd&ْ&^84_d)x۩C q'dʈA{)1$@zXJ&`qMKiOr"]@xWm gLܘ1ÀV}137fˏ[cvR7Ub*%_w袂>Q)v%dK٦*b@iπ>uR`i:2KF**; q-KMT{La~ q*E3Ha<MobPA0%_e`Qҟ cR,8H8H5K͊ \<9w ) Abhy{I-5 ¶㯚XJ%OH#duq38"0pU- x aqq2^'UO20*o(jnl[}DTHX%^t;h*eoC-ڴ%dXA2`"GQk'2Nh)f4|I<"dl&(>7Dѕ#G(rMW.pJ7`A;)+41TB }EopoErIjVa$ ӵZ9)o0d VEal(_=o*,|##@Xvդ/+H"9rsA{P.Lr7d& "RWx"δxIjX2eml>3 E1LaNu-õjMhD<0uB{PAc.,(uZ  F2q1 Y\Tif4ഠ`RK4= m1u0`>cRB%ʣPeF-\LdYQk@`׉C!kF65!F4SY˼N/2vpWICL`uv/?I5UYK(v{ BPKJ,}~J_f6] r־?Q2`G(nc,g{hzˍ`B)p&)Ƒ*sNp $qZ!jHʒ|BH1aɞh[&pu(Wb4 L!Wz UI Dph¶cǐF]$!﷌Sk_ۤ7d(9I!i KczIQWƜwtOx_,[/4x :af}::DJ|q̞^j,#bUY [(y 2w|bU]a_ٔy Dqx-'%R0u XA{ACq}-9=qZ~4 & ];רno[NlE&.[Ns!N2!Y{s^#j!8G5pEyAZi}⤕*ؚ,Vx+-vg}X0"mL1k4""MX*5uN)&q-Ӧ}XC/05رlFLԞ?6#XQP=_ &痉a*9'Le+SM pP-Q"iǣjU~LbBg{]=ϓc.2:(W̻(l ӭD|&~>]֬mXڳHK4cVdUѐ NNә\|NZN7Ljmr#PTY>x5 ~lE-SrYOndH|mf'8ӆ?޴kCfm!N&\לצ Ma}m~}MϮIIw NM~_Sic%WiT\4)POO}&}ʥ 4Mz3@|2+Ǐ4 |T.{?4n&O xE "#ڷ4' ׿p%&3ɇ v&MqvTR(~VTOc_< PfC̹]>s3ȳe9U1MHO%18 &%1MTΊN"Pb0gdK޿^Mrn&M\9a3u Bpi 8 c0?aj;Ix0;!Nbg= ̮ =5`!5~SXC/׫39jC9ugv ќu1+6ofE EYY ;Eȿeendstream endobj 152 0 obj << /Filter /FlateDecode /Length 1296 >> stream xWKsEpb3U)CR\ :3^e+&PP>5ݟ63sXӜts:{;3צX|ҡF,Nfiio2nxCލstaq4;TsiDgBJnK~ޒ|i- ` I!klЁ,ѩQ'u6ol*c>LCX9|8>%TWUy^s`:c}ӂRbluű[te/\v_'uIuɡ7U X"P"Z|c육m؟->?Tim&?m jsܨ]Nt"N8h˔A0*`9~MC2 DS?SIJ)_V9qQrAdG[TsrR}IO4D{Vk14h]p%9 9XRta 1z~By)jJ񑘢 Zau&7tр un#PقK6"yn܆9yުr@Cꓐ_a#q'<B%Պ 攣 oMW;)DFH L.?;.PSyI{HnOٜ!jofyjš@}xK4Ftѫ]9Fq.7^؉w԰.5$az_LEϫxQU> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 154 /ID [<26d21dd9dcf75ed7f35aebe1dc3526ea>] >> stream xcb&F~0 $8JRDg1=dsBP4 0] plot(x, splitstat[splitstat > 0], main = paste("Node", i$nodeID), xlab = i$psplit$variableName, ylab = "Statistic", ylim = c(0, 10), cex.axis = cex, cex.lab = cex, cex.main = cex) abline(v = i$psplit$splitpoint, lty = 3) }) ################################################### ### code chunk number 28: glaucoma-prediction ################################################### table(Predict(gtree), GlaucomaM$Class) ################################################### ### code chunk number 29: glaucoma-classprob ################################################### prob <- sapply(treeresponse(gtree), function(x) x[1]) + runif(nrow(GlaucomaM), min = -0.01, max = 0.01) splitvar <- nodes(gtree, 1)[[1]]$psplit$variableName plot(GlaucomaM[[splitvar]], prob, pch = as.numeric(GlaucomaM$Class), ylab = "Conditional Class Prob.", xlab = splitvar) abline(v = nodes(gtree, 1)[[1]]$psplit$splitpoint, lty = 2) legend(0.15, 0.7, pch = 1:2, legend = levels(GlaucomaM$Class), bty = "n") ################################################### ### code chunk number 30: GBSGS-ctree ################################################### data("GBSG2", package = "TH.data") stree <- ctree(Surv(time, cens) ~ ., data = GBSG2) ################################################### ### code chunk number 31: GBSG2-plot ################################################### plot(stree) ################################################### ### code chunk number 32: GBSG2-KM ################################################### treeresponse(stree, newdata = GBSG2[1:2,]) ################################################### ### code chunk number 33: mammo-ctree ################################################### data("mammoexp", package = "TH.data") mtree <- ctree(ME ~ ., data = mammoexp) ################################################### ### code chunk number 34: mammo-plot ################################################### plot(mtree) ################################################### ### code chunk number 35: spider-ctree (eval = FALSE) ################################################### ## data("spider", package = "mvpart") ## sptree <- ctree(arct.lute + pard.lugu + zora.spin + pard.nigr + pard.pull + ## aulo.albi + troc.terr + alop.cune + pard.mont + alop.acce + ## alop.fabr + arct.peri ~ herbs+reft+moss+sand+twigs+water, ## controls = ctree_control(teststat = "max", testtype = "MonteCarlo", nresample = 9999, ## minsplit = 5, mincriterion = 0.9), data = spider) ## sptree@tree$criterion ## ## library("coin") ## data("spider", package = "mvpart") ## it <- independence_test(arct.lute + pard.lugu + zora.spin + pard.nigr + pard.pull + ## aulo.albi + troc.terr + alop.cune + pard.mont + alop.acce + ## alop.fabr + arct.peri ~ herbs+reft+moss+sand+twigs+water, ## data = spider, distribution = approximate(B = 19999)) ## statistic(it, "standardized") ## pvalue(it) ################################################### ### code chunk number 36: spider-plot (eval = FALSE) ################################################### ## plot(sptree, terminal_panel = node_terminal) party/inst/doc/MOB.Rnw0000644000176200001440000005271612030643536014255 0ustar liggesusers\documentclass[nojss]{jss} %\VignetteIndexEntry{party with the mob} %\VignetteDepends{mlbench,colorspace} %\VignetteKeywords{parametric models, object-orientation, recursive partitioning} %\VignettePackage{party} %% packages \usepackage{amsmath} \SweaveOpts{engine=R} %% neet no \usepackage{Sweave} <>= require("party") options(useFancyQuotes = FALSE) @ %% commands \newcommand{\ui}{\underline{i}} \newcommand{\oi}{\overline{\imath}} \newcommand{\argmin}{\operatorname{argmin}\displaylimits} %% author/title \author{Achim Zeileis\\Universit\"at Innsbruck \And Torsten Hothorn\\Ludwig-Maximilians-\\Universit\"at M\"unchen \And Kurt Hornik\\WU Wirtschafts-\\universit\"at Wien} \Plainauthor{Achim Zeileis, Torsten Hothorn, Kurt Hornik} \title{\pkg{party} with the \code{mob}: Model-Based Recursive Partitioning in \proglang{R}} \Plaintitle{party with the mob: Model-Based Recursive Partitioning in R} \Shorttitle{\pkg{party} with the \texttt{mob}} \Keywords{parametric models, object-orientation, recursive partitioning} %% abstract \Abstract{ The \pkg{party} package \citep{Hothorn+Hornik+Zeileis:2006a} provides the function \code{mob()} implementing a recently suggested algorithm for \underline{mo}del-\underline{b}ased recursive partitioning \citep{Zeileis+Hothorn+Hornik:2005}. The basic steps are: (1)~fit a parametric model to a data set, (2)~test for parameter instability over a set of partitioning variables, (3)~if there is some overall parameter instability, split the model with respect to the variable associated with the highest instability, (4)~repeat the procedure in each of the child nodes. It is discussed how these steps of the conceptual algorithm are translated into computational tools in an object-oriented manner, allowing the user to plug in various types of parametric models. The outcome is a tree where each node is associated with a fitted parametric model that can be effectively visualized and summarized. } \Address{ Achim Zeileis\\ Department of Statistics\\ Faculty of Economics and Statistics\\ Universit\"at Innsbruck\\ Universit\"atsstr.~15\\ 6020 Innsbruck, Austria\\ E-mail: \email{Achim.Zeileis@R-project.org}\\ URL: \url{http://eeecon.uibk.ac.at/~zeileis/}\\ Torsten Hothorn\\ Institut f\"ur Statistik\\ Ludwig-Maximilians-Universit\"at M\"unchen\\ Ludwigstra{\ss}e 33\\ 80539 M\"unchen, Germany\\ E-mail: \email{Torsten.Hothorn@R-project.org}\\ URL: \url{http://www.stat.uni-muenchen.de/~hothorn/}\\ Kurt Hornik\\ Institute for Statistics and Mathematics\\ WU Wirtschaftsuniversit\"at Wien\\ Augasse 2--6\\ 1090 Wien, Austria\\ E-mail: \email{Kurt.Hornik@R-project.org}\\ URL: \url{http://statmath.wu.ac.at/~hornik/}\\ } \begin{document} \section{Motivation} \label{sec:motivation} Consider a parametric model $\mathcal{M}(Y, \theta)$ with (possibly vector-valued) observations $Y$ and a $k$-dimensional vector of parameters $\theta$. This model could be a (possibly multivariate) normal distribution for $Y$, or some kind of regression model when $Y = (y, x)$ can be split up into a dependent variable $y$ and regressors $x$. An example for the latter could be a linear regression model $y = x^\top \theta$ or a generalized linear model (GLM) or a survival regression. Given $n$ observations $Y_i$ ($i = 1, \dots, n$) the model can be fitted by minimizing some objective function $\Psi(Y, \theta)$, e.g., a residual sum of squares or a negative log-likelihood leading to ordinary least squares (OLS) or maximum likelihood (ML) estimation. If a global model for all $n$ observations does not fit well and further covariates $Z_1, \dots, Z_\ell$ are available, it might be possible to partition the $n$ observations with respect to these variables and find a fitting model in each cell of the partition. The algorithm described here tries to find such a partition adaptively using a greedy forward search. This procedure is implemented in the function \code{mob()} and described in more detail in the following section. However, we we will state some goals and design principles in advance. To translate the model-based partitioning problem into \proglang{R}, we start with a formula description of the variables involved. This formula should be of type \verb:y ~ x1 + ... + xk | z1 + ... + zl: where the variables on the left of the \code{|} specify the data $Y$ and the variables on the right specify the partitioning variables $Z_j$. Classical regression trees usually have a univariate response $Y$ and various partitioning variables, i.e., could be specified as \verb:y ~ 1 | z1 + ... + zl:. Structural change models, on the other hand, are usually regression models that are segmented with respect to a single partitioning variable, typically time: \verb:y ~ x1 + ... + xk | z:. The type of models $\mathcal{M}$ to be used with \code{mob()} should not be confined (by the implementation), hence we have written an object-oriented implementation. The idea is that $\mathcal{M}$ is translated into software by a model of class ``\code{StatModel}'' as provided by the \pkg{modeltools} package. The algorithm the relies on various methods being available for these models. The ``\code{StatModel}'' objects \code{linearModel} and \code{glinearModel}, implementing (generalized) linear regression models, are readily available in \pkg{modeltools}, others can easily be user-defined. \section{The model-based recursive partitioning algorithm} \label{sec:algorithm} The basic idea is to grow a tee in which every node is associated with a model of type $\mathcal{M}$. To assess whether splitting of the node is necessary a fluctuation test for parameter instability is performed. If there is significant instability with respect to any of the partitioning variables $Z_j$, the node is splitted into $B$ locally optimal segments (currently only $B = 2$ is implemented) and then the procedure is repeated in each of the $B$ children. If no more significant instabilities can be found, the recursion stops. More precisely, the steps of the algorithm are \begin{enumerate} \item Fit the model once to all observations in the current node. \item Assess whether the parameter estimates are stable with respect to every partitioning variable $Z_1, \dots, Z_\ell$. If there is some overall instability, select the variable $Z_j$ associated with the highest parameter instability, otherwise stop. \item Compute the split point(s) that locally optimize the objective function $\Psi$. \item Split the node into child nodes and repeat the procedure. \end{enumerate} The details for steps 1--3 are specified in the following. \subsection{Parameter estimation} This step of the algorithm is common practice, the only additional requirement is (as previously noted) that model has to be of the class ``\code{StatModel}'' as provided by \pkg{modeltools}. Looking at the source code for the \code{linearModel} provided by this package illustrates how a simple wrapper to existing \proglang{R} functionality can be written. In particular, a method to the generic function \code{reweight()} has to be available. The reason is that it is inefficient to fit a brand-new model \code{modelobj} (including formula-parsing) in every node---much computation time is saved if simply \code{reweight(modelobj, weights)} is called in each of the child nodes. The \code{weights} argument controls which observations go into which of the child nodes. \subsection{Testing for parameter instability} The task in this step of the algorithm is to find out whether the parameters of the fitted model are stable over each particular ordering implied by the partitioning variables $Z_j$ or whether splitting the sample with respect to one of the $Z_j$ might capture instabilities in the parameters and thus improve the fit. The tests used in this step belong to the class of generalized M-fluctuation tests \citep{ZeileisHornik2003,Zeileis2005}. For numerical partitioning variables $Z_j$ the $\sup LM$~statistic is used which is the maximum over all single split $LM$ statistics. For categorical partitioning variables, a $\chi^2$~statistic is employed which captures the fluctuation within each of the categories of $Z_j$. For computing the test statistics and corresponding $p$~values $p_j$ for each of the partitioning variables $Z_j$ in \proglang{R}, the only requirement is that there are methods for the extractor functions \code{estfun()} and \code{weights()}. The \code{estfun()} method extracts the empirical estimating functions (model scores) from the fitted \code{modelobj}, these are the main ingredient for M-fluctuation tests. The \code{weights()} method is used to determine which observations are in the current node (i.e., have a weight greater than zero) and which are not (i.e., have zero weight). To determine whether there is some overall instability, it is checked whether the minial $p$~value $p_{j^*} = \min_{j = 1, \dots, \ell} p_j$ falls below a pre-specified significance level $\alpha$ (by default $\alpha = 0.05$) or not. To adjust for multiple testing, the $p$ values can be Bonferroni adjusted (which is the default). If there is significant instability, the variable $Z_{j^*}$ associated with the minimal $p$~value is used for splitting the node. \subsection{Splitting} In this step, the observation in the current node are split with respect to the chosen partitioning variable $Z_{j^*}$ into $B$ child nodes. Currently, the infrastructure in \pkg{party} only supports binary splits, i.e., $B = 2$. For deterimining the split point, an exhaustive search procedure is adopted: For each conceivable split point, the $B$ child node models are fit and the split associated with the minimal value of the objective function $\Psi$ is chosen. Computationally, this means that the fitted model \code{modelobj} is \code{reweight()}ed for each of the child nodes. The observations entering a child node keep their current weight while those observations that go into different child nodes receive zero weight. To compare the objective function $\Psi$, an extractor function is required to compute it from the fitted \code{modelobj}. This extractor function can be user-specified and set in \verb:mob_control():, it defaults to \code{deviance()}. This concludes one iteration of the recursive partitioning algorithm and steps~1--3 are carried out again in each of the $B$ daughter nodes until no significant instability is detected in step~2. \section{Illustrations} \label{sec:illustration} \subsection{Boston housing data} Since the analysis by \cite{BreimanFriedman1985}, the Boston housing data are a popular and well-investigated empirical basis for illustrating non-linear regression methods both in machine learning and statistics \citep[see][for two recent examples]{Gama2004,Samarovetal2005} and we follow these examples by segmenting a bivariate linear regression model for the house values. Thus, the model $\mathcal{M}$ used is \code{linearModel} from the \pkg{modeltools} package which is automatically loaded together with \pkg{party}. <<>>= library("party") @ The data set is available in package \pkg{mlbench} via <<>>= data("BostonHousing", package = "mlbench") @ and provides $n = \Sexpr{NROW(BostonHousing)}$ observations of the median value of owner-occupied homes in Boston (in USD~1000) along with $\Sexpr{NCOL(BostonHousing)}$ covariates including in particular the number of rooms per dwelling (\code{rm}) and the percentage of lower status of the population (\code{lstat}). A segment-wise linear relationship between the value and these two variables is very intuitive, whereas the shape of the influence of the remaining covariates is rather unclear and hence should be learned from the data. Therefore, a linear regression model for median value explained by \verb:rm^2: and \verb:log(lstat): with $k = 3$ regression coefficients is employed and partitioned with respect to all $\ell = 11$ remaining variables. To facilitate subsequent commands, the transformations are explicitely stored in \code{BostonHousing}: <<>>= BostonHousing$lstat <- log(BostonHousing$lstat) BostonHousing$rm <- BostonHousing$rm^2 @ Choosing appropriate transformations of the dependent variable and the regressors that enter the linear regression model is important to obtain a well-fitting model in each segment and we follow in our choice the recommendations of \cite{BreimanFriedman1985}. Monotonous transformations of the partitioning variables do not affect the recursive partitioning algorithm and hence do not have to be performed. However, it is important to distinguish between numerical and categorical variables for choosing an appropriate parameter stability test. The variable \code{chas} is a dummy indicator variable (for tract bounds with Charles river) and should thus be turned into a factor. Furthermore, the variable \code{rad} is an index of accessibility to radial highways and takes only 9 distinct values. Thus it is most appropriately treated as an ordered factor. <<>>= BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1, labels = c("no", "yes")) BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE) @ Both transformations only affect the parameter stability test chosen (step~2), not the splitting procedure (step~3). The model is estimated by OLS, the instability is assessed using a Bonferroni-corrected significance level of $\alpha = 0.05$ and the nodes are split with a required minimal segment size of $40$ observations. The control parameters are thus set to <<>>= ctrl <- mob_control(alpha = 0.05, bonferroni = TRUE, minsplit = 40, objfun = deviance, verbose = TRUE) @ Actually, all of these settings are the defaults except \code{minsplit = 40} and \code{verbose = TRUE} which causes some information about the fitting process being written to the screen. The objective function \code{deviance()} extracts in this case the residual sum of squares from a fitted \code{linearModel} object. Having collected all building blocks, we can now call the function \code{mob()} that takes the model specification of the linear regression model \verb:medv ~ lstat + rm: plus all partitioning variables, along with the \code{data} set, the \code{control} settings and the \code{model} to be used. <<>>= fmBH <- mob(medv ~ lstat + rm | zn + indus + chas + nox + age + dis + rad + tax + crim + b + ptratio, data = BostonHousing, control = ctrl, model = linearModel) @ The result is the fitted model \code{fmBH} of class ``\code{mob}'' that contains the tree with a fitted linear regression associated with every node. Printing this object will show the splits, their $p$ values and call the \code{print()} method for the model in each terminal node (i.e., this simply relies on a \code{print()} method being available for the fitted model and re-uses it). <<>>= fmBH @ Looking at the printed output is typically rather tedious, a visualization via the \code{plot()} method <>= plot(fmBH) @ is much easier to interpret. By default, this produces partial scatter plots of the variable $y$ against each of the regressors $x_i$ in the terminal nodes. Each scatter plot also shows the fitted values, i.e., a project of the fitted hyperplane. \setkeys{Gin}{width=\textwidth} \begin{figure}[p] \begin{center} <>= plot(fmBH) @ \includegraphics[width=18cm,keepaspectratio,angle=90]{MOB-BostonHousing-plot} \caption{\label{fig:BostonHousing} Linear-regression-based tree for the Boston housing data. The plots in the leaves give partial scatter plots for \code{rm} (upper panel) and \code{lstat} (lower panel).} \end{center} \end{figure} From this visualization, it can be seen that in the nodes~4, 6, 7 and 8 the increase of value with the number of rooms dominates the picture (upper panel) whereas in node~9 the decrease with the lower status population percentage (lower panel) is more pronounced. Splits are performed in the variables \code{tax} (poperty-tax rate) and \code{ptratio} (pupil-teacher ratio). Various quantities of interest can be computed, provided that the \code{model} used provides the corresponding methods, e.g., \code{predict()}, \code{residuals()}, \code{logLik()}, \code{coef()} and \code{summary()}. The latter two by default try to extract information for the terminal nodes, but a \code{node} argument can be set to the node IDs of interest. As an example, the regression coefficients for the terminal node models can be easily extracted by <<>>= coef(fmBH) @ reflecting the differences of the models that can also be seen in the the associated \code{plot()}. Even more information is available in a \code{summary()}, e.g., for node 7: <<>>= summary(fmBH, node = 7) @ The test statistics and $p$~values computed in each node, can be extracted analogously by using the method for the function \code{sctest()} (for performing \underline{s}tructural \underline{c}hange \underline{test}s). <<>>= sctest(fmBH, node = 7) @ For summarizing the quality of the fit, we could compute the mean squared error, log-likelihood or AIC: <<>>= mean(residuals(fmBH)^2) logLik(fmBH) AIC(fmBH) @ <>= nt <- NROW(coef(fmBH)) nk <- NCOL(coef(fmBH)) @ As the \code{logLik()} method simply re-uses the method for \code{linearModel} objects, this does not only report $\Sexpr{(nk+1)*nt-1}$ estimated parameters ($\Sexpr{nk}$ parameters in each of the $\Sexpr{nt}$ terminal nodes plus $\Sexpr{nt} - 1$ split points) but $\Sexpr{(nk+2)*nt-1}$ parameters because each terminal node is additionally associated with a variance estimate. However, for the fitting process, the variance was treated as a nuisance parameter as we employed OLS estimation (rather than fully-specified ML estimation). \subsection{Pima Indians diabetes data} Another popular benchmark data set for binary classifications is the Pima Indians diabetes database which is also available from \pkg{mlbench}: <<>>= data("PimaIndiansDiabetes2", package = "mlbench") PimaIndiansDiabetes <- na.omit(PimaIndiansDiabetes2[,-c(4, 5)]) @ After omitting missing values (and the variables \verb:triceps: and \verb:insulin: which are missing for most women), the data set provides diabetes test results for $n = \Sexpr{NROW(PimaIndiansDiabetes)}$ women along with $\Sexpr{NCOL(PimaIndiansDiabetes)}$ covariates including in particular the plasma glucose concentration \code{glucose} as an important predictor for diabetes. Fitting a logistic regression model \verb:diabetes ~ glucose: seems to be straightforward, whereas the influence of the remaining variables should again be learned by recursive partitioning. This will yield a model tree with $k = 2$ regression coefficients in each terminal node, partitioned with respect to the remaining $\ell = 5$ remaining variables. The model is estimated by ML employing the \code{glinearModel}, the instability is assessed using a Bonferroni-corrected significance level of $\alpha = 0.05$ and the nodes are split with a required minimal segment size of $20$ observations. Hence, all control parameters correspond to the default values in \verb:mob_control(): and do not have to be set explicitely in the \code{mob()} call: <<>>= fmPID <- mob(diabetes ~ glucose | pregnant + pressure + mass + pedigree + age, data = PimaIndiansDiabetes, model = glinearModel, family = binomial()) @ To visualize this, we simply call again: <>= plot(fmPID) @ \setkeys{Gin}{width=\textwidth} \begin{figure}[bth] \begin{center} <>= plot(fmPID) @ \caption{\label{fig:PimaIndiansDiabetes} Logistic-regression-based tree for the Pima Indians diabetes data. The plots in the leaves give spinograms for \code{diabetes} versus \code{glucose}.} \end{center} \end{figure} which produces again a plot of the dependent variable $y$ against the only regressors $x$ in the terminal nodes. As $y$ is \code{diabetes}, a binary variable, and $x$ is \code{glucose}, a numeric variable, a spinogram is chosen for visualization. The breaks in the spinogram are the five-point summary of \code{glucose} on the full data set. The fitted lines are the mean predicted probabilities in each group. The model tree distinguishes three different groups: \begin{itemize} \item[\#2] Women with low body mass index that have on average a low risk of diabetes, however this increases clearly with glucose level. \item[\#4] Women with average and high body mass index, younger than 30 years, that have a higher avarage risk that also increases with glucose level. \item[\#5] Women with average and high body mass index, older than 30 years, that have a high avarage risk that increases only slowly with glucose level. \end{itemize} The same interpretation can also be drawn from the coefficient estimates and the corresponding odds ratios (with respect to glucose): <<>>= coef(fmPID) exp(coef(fmPID)[,2]) @ <>= risk <- round(100 * (exp(coef(fmPID)[,2])-1), digits = 1) @ i.e., the odds increase by \Sexpr{risk[1]}\%, \Sexpr{risk[2]}\% and \Sexpr{risk[3]}\% with respect to glucose in the three groups. \section{Conclusion} \label{sec:conclusion} The function \code{mob()} in the \pkg{party} package provides a flexible and object-oriented implementation of the general algorithm for model-based recursive partitioning. Models of class ``\code{StatModel}''---that employ a formula interface and are equipped with methods for the generic functions \code{reweight()}, \code{weights()}, \code{estfun()} plus some function for extracting the value of the objective function---can be easily partitioned. The resulting ``\code{mob}'' tree can be flexibly summarized, both numerically and graphically, and used for predictions on new data. \bibliography{partyrefs} \end{document} party/inst/doxygen.cfg0000644000176200001440000014172612213650302014531 0ustar liggesusers# Doxyfile 1.4.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = party # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ./inst/documentation # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the progam writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = NO # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./src # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html/ # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = YES # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = pdflatex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = hyperref # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = YES # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = ./src # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = *.R # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO party/tests/0000755000176200001440000000000013437524315012562 5ustar liggesusersparty/tests/RandomForest-regtest.Rout.save0000644000176200001440000001606213436246771020463 0ustar liggesusers R Under development (unstable) (2019-02-28 r76174) -- "Unsuffered Consequences" Copyright (C) 2019 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. 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. > > RNGversion("3.5.2") Warning message: In RNGkind("Mersenne-Twister", "Inversion", "Rounding") : non-uniform 'Rounding' sampler used > set.seed(290875) > library("party") Loading required package: grid Loading required package: mvtnorm Loading required package: modeltools Loading required package: stats4 Loading required package: strucchange Loading required package: zoo Attaching package: 'zoo' The following objects are masked from 'package:base': as.Date, as.Date.numeric Loading required package: sandwich > if (!require("TH.data")) + stop("cannot load package TH.data") Loading required package: TH.data Loading required package: survival Loading required package: MASS Attaching package: 'TH.data' The following object is masked from 'package:MASS': geyser > if (!require("coin")) + stop("cannot load package coin") Loading required package: coin > > data("GlaucomaM", package = "TH.data") > rf <- cforest(Class ~ ., data = GlaucomaM, control = cforest_unbiased(ntree = 30)) > stopifnot(mean(GlaucomaM$Class != predict(rf)) < + mean(GlaucomaM$Class != predict(rf, OOB = TRUE))) > > data("GBSG2", package = "TH.data") > rfS <- cforest(Surv(time, cens) ~ ., data = GBSG2, control = cforest_unbiased(ntree = 30)) > treeresponse(rfS, newdata = GBSG2[1:2,]) $`1` Call: survfit(formula = y ~ 1, weights = weights) records n events median 0.95LCL 0.95UCL 146.0 30.0 15.9 1753.0 1157.0 NA $`2` Call: survfit(formula = y ~ 1, weights = weights) records n events median 0.95LCL 0.95UCL 148.0 30.0 13.4 1975.0 1120.0 NA > > ### give it a try, at least > varimp(rf, pre1.0_0 = TRUE) ag at as an ai 0.0000000000 -0.0023148148 0.0009259259 0.0009259259 0.0078703704 eag eat eas ean eai 0.0000000000 0.0000000000 0.0000000000 0.0013888889 -0.0009259259 abrg abrt abrs abrn abri 0.0000000000 0.0000000000 0.0032407407 0.0027777778 0.0041666667 hic mhcg mhct mhcs mhcn 0.0060185185 0.0000000000 0.0013888889 -0.0004629630 0.0027777778 mhci phcg phct phcs phcn 0.0078703704 0.0060185185 0.0000000000 0.0004629630 0.0018518519 phci hvc vbsg vbst vbss 0.0166666667 0.0032407407 0.0032407407 0.0013888889 0.0000000000 vbsn vbsi vasg vast vass 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 vasn vasi vbrg vbrt vbrs 0.0000000000 0.0046296296 0.0000000000 0.0018518519 0.0004629630 vbrn vbri varg vart vars 0.0032407407 0.0004629630 0.0351851852 0.0000000000 0.0245370370 varn vari mdg mdt mds 0.0129629630 0.0481481481 0.0000000000 0.0000000000 -0.0013888889 mdn mdi tmg tmt tms 0.0000000000 0.0000000000 0.0273148148 0.0000000000 0.0097222222 tmn tmi mr rnf mdic -0.0023148148 0.0226851852 0.0000000000 0.0037037037 0.0055555556 emd mv 0.0000000000 -0.0009259259 > > P <- proximity(rf) > stopifnot(max(abs(P - t(P))) == 0) > > P[1:10,1:10] 2 43 25 65 70 16 6 2 1.0000000 0.26666667 0.7666667 0.20000000 0.10000000 0.13333333 0.70000000 43 0.2666667 1.00000000 0.2000000 0.03333333 0.06666667 0.36666667 0.23333333 25 0.7666667 0.20000000 1.0000000 0.26666667 0.10000000 0.10000000 0.76666667 65 0.2000000 0.03333333 0.2666667 1.00000000 0.00000000 0.03333333 0.33333333 70 0.1000000 0.06666667 0.1000000 0.00000000 1.00000000 0.23333333 0.06666667 16 0.1333333 0.36666667 0.1000000 0.03333333 0.23333333 1.00000000 0.10000000 6 0.7000000 0.23333333 0.7666667 0.33333333 0.06666667 0.10000000 1.00000000 5 0.5333333 0.06666667 0.6000000 0.46666667 0.10000000 0.06666667 0.63333333 12 0.5000000 0.06666667 0.5000000 0.50000000 0.10000000 0.06666667 0.53333333 63 0.4666667 0.23333333 0.5000000 0.23333333 0.16666667 0.13333333 0.56666667 5 12 63 2 0.53333333 0.50000000 0.4666667 43 0.06666667 0.06666667 0.2333333 25 0.60000000 0.50000000 0.5000000 65 0.46666667 0.50000000 0.2333333 70 0.10000000 0.10000000 0.1666667 16 0.06666667 0.06666667 0.1333333 6 0.63333333 0.53333333 0.5666667 5 1.00000000 0.83333333 0.4333333 12 0.83333333 1.00000000 0.5000000 63 0.43333333 0.50000000 1.0000000 > > ### variable importances > a <- cforest(Species ~ ., data = iris, + control = cforest_unbiased(mtry = 2, ntree = 10)) > varimp(a, pre1.0_0 = TRUE) Sepal.Length Sepal.Width Petal.Length Petal.Width 0.06181818 0.00000000 0.20727273 0.33636364 > varimp(a, conditional = TRUE) Sepal.Length Sepal.Width Petal.Length Petal.Width 0.007272727 0.000000000 0.103636364 0.243636364 > > airq <- subset(airquality, complete.cases(airquality)) > a <- cforest(Ozone ~ ., data = airq, + control = cforest_unbiased(mtry = 2, ntree = 10)) > varimp(a, pre1.0_0 = TRUE) Solar.R Wind Temp Month Day 137.76700 550.19004 295.40387 16.21802 5.42690 > varimp(a, conditional = TRUE) Solar.R Wind Temp Month Day 67.713060 341.413307 227.670123 4.257196 3.204209 > > data("mammoexp", package = "TH.data") > a <- cforest(ME ~ ., data = mammoexp, control = cforest_classical(ntree = 10)) > varimp(a, pre1.0_0 = TRUE) SYMPT PB HIST BSE DECT 0.02466021 0.01046237 0.01607246 0.01045324 0.00133305 > varimp(a, conditional = TRUE) SYMPT PB HIST BSE DECT 0.019882337 0.009532482 0.006163146 0.007732481 0.003382481 > > stopifnot(all.equal(unique(sapply(a@weights, sum)), nrow(mammoexp))) > > ### check user-defined weights > nobs <- nrow(GlaucomaM) > i <- rep(0.0, nobs) > i[1:floor(.632 * nobs)] <- 1 > folds <- replicate(100, sample(i)) > rf2 <- cforest(Class ~ ., data = GlaucomaM, control = cforest_unbiased(ntree = 100), weights = folds) > table(predict(rf), predict(rf2)) glaucoma normal glaucoma 89 4 normal 1 102 > > proc.time() user system elapsed 4.364 0.156 4.520 party/tests/Utils-regtest.R0000644000176200001440000000325513055037273015463 0ustar liggesusers set.seed(290875) library("party") if (!require("MASS", quietly = TRUE)) stop("cannot load package MASS") ### get rid of the NAMESPACE attach(list2env(as.list(asNamespace("party")))) ### ### ### Regression tests for utility functions ### ### functions defined in file ./src/Utils.c' ### ### ### tests for function C_kronecker for (i in 1:10) { A = matrix(rnorm(i*5), ncol = i, nrow = 5) B = matrix(rnorm(i*10), ncol = 10, nrow = i) Rkr = kronecker(A, B) mykr = .Call(R_kronecker, A, B) stopifnot(isequal(Rkr, mykr)) } ### test for function CR_svd (singular value decomposition) x <- matrix(rnorm(100), ncol = 10) x <- t(x) %*% x svdx <- qsvd(x) stopifnot(isequal(svd(x)$d, svdx$d)) stopifnot(isequal(svd(x)$u, svdx$u)) stopifnot(isequal(svd(x)$v, t(svdx$vt))) ### test for function R_MPinv (Moore-Penrose inverse) mpinvx <- MPinv(x) stopifnot(isequal(mpinvx, ginv(x))) ### test for function C_max y <- rnorm(1000) stopifnot(isequal(max(y), .Call(R_max, y))) ### test for function C_abs y <- rnorm(1000) stopifnot(isequal(abs(y), .Call(R_abs, y))) ### tests for function C_matprod{T} x <- matrix(rnorm(100), ncol = 4) y <- matrix(rnorm(40), nrow = 4) stopifnot(isequal(x %*% y, .Call(R_matprod, x, y))) x <- matrix(rnorm(100), ncol = 20) y <- matrix(rnorm(200), ncol = 20) stopifnot(isequal(x %*% t(y), .Call(R_matprodT, x, y))) ### test for function C_SampleNoReplace ### permutation case m <- 10000 storage.mode(m) <- "integer" perm <- .Call(R_permute, m) + 1 stopifnot(all(sort(perm) == (1:m))) ### the random subset case k <- 100 storage.mode(k) <- "integer" perm <- .Call(R_rsubset, m, k) + 1 stopifnot(all(perm %in% (1:m))) party/tests/mob.R0000644000176200001440000000177013015363661013464 0ustar liggesuserslibrary("party") data("BostonHousing", package = "mlbench") BostonHousing$lstat <- log(BostonHousing$lstat) BostonHousing$rm <- BostonHousing$rm^2 BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1, labels = c("no", "yes")) BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE) fmBH <- mob(medv ~ lstat + rm | zn + indus + chas + nox + age + dis + rad + tax + crim + b + ptratio, control = mob_control(minsplit = 40, verbose = TRUE), data = BostonHousing, model = linearModel) fmBH summary(fmBH) ### check for one-node tree fmBH <- try(mob(medv ~ lstat + rm | zn, control = mob_control(minsplit = 4000, verbose = TRUE), data = BostonHousing, model = linearModel)) stopifnot(class(fmBH) != "try-error") data("PimaIndiansDiabetes", package = "mlbench") fmPID <- mob(diabetes ~ glucose | pregnant + pressure + triceps + insulin + mass + pedigree + age, control = mob_control(verbose = TRUE), data = PimaIndiansDiabetes, model = glinearModel, family = binomial()) fmPID summary(fmPID) party/tests/Examples/0000755000176200001440000000000013436246771014346 5ustar liggesusersparty/tests/Examples/party-Ex.Rout.save0000644000176200001440000007037413436246771017702 0ustar liggesusers R Under development (unstable) (2019-02-28 r76174) -- "Unsuffered Consequences" Copyright (C) 2019 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 <- "party" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('party') Loading required package: grid Loading required package: mvtnorm Loading required package: modeltools Loading required package: stats4 Loading required package: strucchange Loading required package: zoo Attaching package: ‘zoo’ The following objects are masked from ‘package:base’: as.Date, as.Date.numeric Loading required package: sandwich > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') > cleanEx() > nameEx("BinaryTree-class") > ### * BinaryTree-class > > flush(stderr()); flush(stdout()) > > ### Name: BinaryTree Class > ### Title: Class "BinaryTree" > ### Aliases: BinaryTree-class weights weights-methods > ### weights,BinaryTree-method show,BinaryTree-method where where-methods > ### where,BinaryTree-method response response-methods > ### response,BinaryTree-method nodes nodes-methods > ### nodes,BinaryTree,integer-method nodes,BinaryTree,numeric-method > ### treeresponse treeresponse-methods treeresponse,BinaryTree-method > ### Keywords: classes > > ### ** Examples > > > set.seed(290875) > > airq <- subset(airquality, !is.na(Ozone)) > airct <- ctree(Ozone ~ ., data = airq, + controls = ctree_control(maxsurrogate = 3)) > > ### distribution of responses in the terminal nodes > plot(airq$Ozone ~ as.factor(where(airct))) > > ### get all terminal nodes from the tree > nodes(airct, unique(where(airct))) [[1]] 5)* weights = 48 [[2]] 3)* weights = 10 [[3]] 6)* weights = 21 [[4]] 9)* weights = 7 [[5]] 8)* weights = 30 > > ### extract weights and compute predictions > pmean <- sapply(weights(airct), function(w) weighted.mean(airq$Ozone, w)) > > ### the same as > drop(Predict(airct)) [1] 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 [9] 55.60000 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 [17] 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 31.14286 [25] 55.60000 18.47917 31.14286 48.71429 48.71429 31.14286 18.47917 18.47917 [33] 18.47917 18.47917 18.47917 81.63333 81.63333 31.14286 81.63333 48.71429 [41] 81.63333 81.63333 81.63333 81.63333 18.47917 31.14286 31.14286 55.60000 [49] 31.14286 81.63333 81.63333 48.71429 55.60000 81.63333 81.63333 31.14286 [57] 48.71429 81.63333 81.63333 81.63333 31.14286 55.60000 31.14286 31.14286 [65] 81.63333 81.63333 81.63333 81.63333 81.63333 81.63333 48.71429 31.14286 [73] 31.14286 18.47917 55.60000 18.47917 31.14286 31.14286 18.47917 18.47917 [81] 31.14286 55.60000 81.63333 81.63333 81.63333 81.63333 81.63333 81.63333 [89] 81.63333 81.63333 81.63333 81.63333 48.71429 31.14286 31.14286 18.47917 [97] 18.47917 31.14286 18.47917 55.60000 18.47917 18.47917 55.60000 18.47917 [105] 18.47917 18.47917 31.14286 18.47917 18.47917 31.14286 18.47917 18.47917 [113] 55.60000 18.47917 18.47917 18.47917 > > ### or > unlist(treeresponse(airct)) [1] 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 [9] 55.60000 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 [17] 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 18.47917 31.14286 [25] 55.60000 18.47917 31.14286 48.71429 48.71429 31.14286 18.47917 18.47917 [33] 18.47917 18.47917 18.47917 81.63333 81.63333 31.14286 81.63333 48.71429 [41] 81.63333 81.63333 81.63333 81.63333 18.47917 31.14286 31.14286 55.60000 [49] 31.14286 81.63333 81.63333 48.71429 55.60000 81.63333 81.63333 31.14286 [57] 48.71429 81.63333 81.63333 81.63333 31.14286 55.60000 31.14286 31.14286 [65] 81.63333 81.63333 81.63333 81.63333 81.63333 81.63333 48.71429 31.14286 [73] 31.14286 18.47917 55.60000 18.47917 31.14286 31.14286 18.47917 18.47917 [81] 31.14286 55.60000 81.63333 81.63333 81.63333 81.63333 81.63333 81.63333 [89] 81.63333 81.63333 81.63333 81.63333 48.71429 31.14286 31.14286 18.47917 [97] 18.47917 31.14286 18.47917 55.60000 18.47917 18.47917 55.60000 18.47917 [105] 18.47917 18.47917 31.14286 18.47917 18.47917 31.14286 18.47917 18.47917 [113] 55.60000 18.47917 18.47917 18.47917 > > ### don't use the mean but the median as prediction in each terminal node > pmedian <- sapply(weights(airct), function(w) + median(airq$Ozone[rep(1:nrow(airq), w)])) > > plot(airq$Ozone, pmean, col = "red") > points(airq$Ozone, pmedian, col = "blue") > > > > cleanEx() > nameEx("RandomForest-class") > ### * RandomForest-class > > flush(stderr()); flush(stdout()) > > ### Name: RandomForest-class > ### Title: Class "RandomForest" > ### Aliases: RandomForest-class treeresponse,RandomForest-method > ### weights,RandomForest-method where,RandomForest-method > ### show,RandomForest-method > ### Keywords: classes > > ### ** Examples > > > set.seed(290875) > > ### honest (i.e., out-of-bag) cross-classification of > ### true vs. predicted classes > data("mammoexp", package = "TH.data") > table(mammoexp$ME, predict(cforest(ME ~ ., data = mammoexp, + control = cforest_unbiased(ntree = 50)), + OOB = TRUE)) Never Within a Year Over a Year Never 189 29 16 Within a Year 58 43 3 Over a Year 56 18 0 > > > > cleanEx() > nameEx("Transformations") > ### * Transformations > > flush(stderr()); flush(stdout()) > > ### Name: Transformations > ### Title: Function for Data Transformations > ### Aliases: ptrafo ff_trafo > ### Keywords: manip > > ### ** Examples > > > ### rank a variable > ptrafo(data.frame(y = 1:20), + numeric_trafo = function(x) rank(x, na.last = "keep")) [1,] 1 [2,] 2 [3,] 3 [4,] 4 [5,] 5 [6,] 6 [7,] 7 [8,] 8 [9,] 9 [10,] 10 [11,] 11 [12,] 12 [13,] 13 [14,] 14 [15,] 15 [16,] 16 [17,] 17 [18,] 18 [19,] 19 [20,] 20 attr(,"assign") [1] 1 > > ### dummy coding of a factor > ptrafo(data.frame(y = gl(3, 9))) 1 2 3 1 1 0 0 2 1 0 0 3 1 0 0 4 1 0 0 5 1 0 0 6 1 0 0 7 1 0 0 8 1 0 0 9 1 0 0 10 0 1 0 11 0 1 0 12 0 1 0 13 0 1 0 14 0 1 0 15 0 1 0 16 0 1 0 17 0 1 0 18 0 1 0 19 0 0 1 20 0 0 1 21 0 0 1 22 0 0 1 23 0 0 1 24 0 0 1 25 0 0 1 26 0 0 1 27 0 0 1 attr(,"assign") [1] 1 1 1 > > > > > cleanEx() > nameEx("cforest") > ### * cforest > > flush(stderr()); flush(stdout()) > > ### Name: cforest > ### Title: Random Forest > ### Aliases: cforest proximity > ### Keywords: tree > > ### ** Examples > > > set.seed(290875) > > ### honest (i.e., out-of-bag) cross-classification of > ### true vs. predicted classes > data("mammoexp", package = "TH.data") > table(mammoexp$ME, predict(cforest(ME ~ ., data = mammoexp, + control = cforest_unbiased(ntree = 50)), + OOB = TRUE)) Never Within a Year Over a Year Never 189 29 16 Within a Year 58 43 3 Over a Year 56 18 0 > > ### fit forest to censored response > if (require("TH.data") && require("survival")) { + + data("GBSG2", package = "TH.data") + bst <- cforest(Surv(time, cens) ~ ., data = GBSG2, + control = cforest_unbiased(ntree = 50)) + + ### estimate conditional Kaplan-Meier curves + treeresponse(bst, newdata = GBSG2[1:2,], OOB = TRUE) + + ### if you can't resist to look at individual trees ... + party:::prettytree(bst@ensemble[[1]], names(bst@data@get("input"))) + } Loading required package: TH.data Loading required package: survival Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser 1) pnodes <= 3; criterion = 1, statistic = 37.638 2) horTh == {}; criterion = 0.986, statistic = 6.053 3) pnodes <= 2; criterion = 0.905, statistic = 2.788 4) progrec <= 16; criterion = 0.761, statistic = 1.384 5)* weights = 0 4) progrec > 16 6) pnodes <= 1; criterion = 0.857, statistic = 2.149 7) progrec <= 154; criterion = 0.295, statistic = 0.143 8)* weights = 0 7) progrec > 154 9)* weights = 0 6) pnodes > 1 10)* weights = 0 3) pnodes > 2 11) age <= 54; criterion = 0.99, statistic = 6.605 12)* weights = 0 11) age > 54 13)* weights = 0 2) horTh == {} 14) menostat == {}; criterion = 0.895, statistic = 2.635 15) tsize <= 19; criterion = 0.541, statistic = 0.548 16) age <= 45; criterion = 0.979, statistic = 5.301 17)* weights = 0 16) age > 45 18)* weights = 0 15) tsize > 19 19) age <= 37; criterion = 0.943, statistic = 3.631 20)* weights = 0 19) age > 37 21) pnodes <= 2; criterion = 0.951, statistic = 3.866 22) age <= 49; criterion = 0.913, statistic = 2.922 23) tsize <= 23; criterion = 0.606, statistic = 0.728 24)* weights = 0 23) tsize > 23 25)* weights = 0 22) age > 49 26)* weights = 0 21) pnodes > 2 27)* weights = 0 14) menostat == {} 28) tgrade <= 1; criterion = 0.58, statistic = 0.65 29)* weights = 0 28) tgrade > 1 30) progrec <= 206; criterion = 0.874, statistic = 2.337 31) tsize <= 30; criterion = 0.847, statistic = 2.04 32) tgrade <= 2; criterion = 0.788, statistic = 1.558 33) pnodes <= 1; criterion = 0.141, statistic = 0.032 34)* weights = 0 33) pnodes > 1 35) tsize <= 23; criterion = 0.756, statistic = 1.356 36)* weights = 0 35) tsize > 23 37)* weights = 0 32) tgrade > 2 38)* weights = 0 31) tsize > 30 39)* weights = 0 30) progrec > 206 40)* weights = 0 1) pnodes > 3 41) horTh == {}; criterion = 0.981, statistic = 5.458 42) pnodes <= 13; criterion = 0.982, statistic = 5.549 43) progrec <= 19; criterion = 0.918, statistic = 3.019 44) tgrade <= 2; criterion = 0.887, statistic = 2.518 45)* weights = 0 44) tgrade > 2 46)* weights = 0 43) progrec > 19 47) menostat == {}; criterion = 0.977, statistic = 5.147 48)* weights = 0 47) menostat == {} 49) pnodes <= 6; criterion = 0.6, statistic = 3.518 50)* weights = 0 49) pnodes > 6 51)* weights = 0 42) pnodes > 13 52)* weights = 0 41) horTh == {} 53) estrec <= 79; criterion = 0.997, statistic = 8.922 54) progrec <= 132; criterion = 0.981, statistic = 5.529 55) estrec <= 38; criterion = 0.484, statistic = 0.422 56) age <= 59; criterion = 0.943, statistic = 3.615 57) tsize <= 20; criterion = 0.473, statistic = 0.399 58)* weights = 0 57) tsize > 20 59) progrec <= 0; criterion = 0.552, statistic = 0.576 60)* weights = 0 59) progrec > 0 61) estrec <= 2; criterion = 0.481, statistic = 0.416 62)* weights = 0 61) estrec > 2 63) progrec <= 20; criterion = 0.637, statistic = 1.917 64)* weights = 0 63) progrec > 20 65)* weights = 0 56) age > 59 66)* weights = 0 55) estrec > 38 67)* weights = 0 54) progrec > 132 68)* weights = 0 53) estrec > 79 69) tsize <= 21; criterion = 0.641, statistic = 0.875 70)* weights = 0 69) tsize > 21 71)* weights = 0 > > ### proximity, see ?randomForest > iris.cf <- cforest(Species ~ ., data = iris, + control = cforest_unbiased(mtry = 2)) > iris.mds <- cmdscale(1 - proximity(iris.cf), eig = TRUE) > op <- par(pty="s") > pairs(cbind(iris[,1:4], iris.mds$points), cex = 0.6, gap = 0, + col = c("red", "green", "blue")[as.numeric(iris$Species)], + main = "Iris Data: Predictors and MDS of Proximity Based on cforest") > par(op) > > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() detaching ‘package:TH.data’, ‘package:MASS’, ‘package:survival’ > nameEx("ctree") > ### * ctree > > flush(stderr()); flush(stdout()) > > ### Name: Conditional Inference Trees > ### Title: Conditional Inference Trees > ### Aliases: ctree conditionalTree > ### Keywords: tree > > ### ** Examples > > > set.seed(290875) > > ### regression > airq <- subset(airquality, !is.na(Ozone)) > airct <- ctree(Ozone ~ ., data = airq, + controls = ctree_control(maxsurrogate = 3)) > airct Conditional inference tree with 5 terminal nodes Response: Ozone Inputs: Solar.R, Wind, Temp, Month, Day Number of observations: 116 1) Temp <= 82; criterion = 1, statistic = 56.086 2) Wind <= 6.9; criterion = 0.998, statistic = 12.969 3)* weights = 10 2) Wind > 6.9 4) Temp <= 77; criterion = 0.997, statistic = 11.599 5)* weights = 48 4) Temp > 77 6)* weights = 21 1) Temp > 82 7) Wind <= 10.3; criterion = 0.997, statistic = 11.712 8)* weights = 30 7) Wind > 10.3 9)* weights = 7 > plot(airct) > mean((airq$Ozone - predict(airct))^2) [1] 403.6668 > ### extract terminal node ID, two ways > all.equal(predict(airct, type = "node"), where(airct)) [1] TRUE > > ### classification > irisct <- ctree(Species ~ .,data = iris) > irisct Conditional inference tree with 4 terminal nodes Response: Species Inputs: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width Number of observations: 150 1) Petal.Length <= 1.9; criterion = 1, statistic = 140.264 2)* weights = 50 1) Petal.Length > 1.9 3) Petal.Width <= 1.7; criterion = 1, statistic = 67.894 4) Petal.Length <= 4.8; criterion = 0.999, statistic = 13.865 5)* weights = 46 4) Petal.Length > 4.8 6)* weights = 8 3) Petal.Width > 1.7 7)* weights = 46 > plot(irisct) > table(predict(irisct), iris$Species) setosa versicolor virginica setosa 50 0 0 versicolor 0 49 5 virginica 0 1 45 > > ### estimated class probabilities, a list > tr <- treeresponse(irisct, newdata = iris[1:10,]) > > ### ordinal regression > data("mammoexp", package = "TH.data") > mammoct <- ctree(ME ~ ., data = mammoexp) > plot(mammoct) > > ### estimated class probabilities > treeresponse(mammoct, newdata = mammoexp[1:10,]) [[1]] [1] 0.3990385 0.3798077 0.2211538 [[2]] [1] 0.84070796 0.05309735 0.10619469 [[3]] [1] 0.3990385 0.3798077 0.2211538 [[4]] [1] 0.6153846 0.2087912 0.1758242 [[5]] [1] 0.3990385 0.3798077 0.2211538 [[6]] [1] 0.3990385 0.3798077 0.2211538 [[7]] [1] 0.3990385 0.3798077 0.2211538 [[8]] [1] 0.3990385 0.3798077 0.2211538 [[9]] [1] 0.84070796 0.05309735 0.10619469 [[10]] [1] 0.3990385 0.3798077 0.2211538 > > ### survival analysis > if (require("TH.data") && require("survival")) { + data("GBSG2", package = "TH.data") + GBSG2ct <- ctree(Surv(time, cens) ~ .,data = GBSG2) + plot(GBSG2ct) + treeresponse(GBSG2ct, newdata = GBSG2[1:2,]) + } Loading required package: TH.data Loading required package: survival Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser [[1]] Call: survfit(formula = y ~ 1, weights = weights) n events median 0.95LCL 0.95UCL 248 88 2093 1814 NA [[2]] Call: survfit(formula = y ~ 1, weights = weights) n events median 0.95LCL 0.95UCL 166 77 1701 1174 2018 > > ### if you are interested in the internals: > ### generate doxygen documentation > ## Not run: > ##D > ##D ### download src package into temp dir > ##D tmpdir <- tempdir() > ##D tgz <- download.packages("party", destdir = tmpdir)[2] > ##D ### extract > ##D untar(tgz, exdir = tmpdir) > ##D wd <- setwd(file.path(tmpdir, "party")) > ##D ### run doxygen (assuming it is there) > ##D system("doxygen inst/doxygen.cfg") > ##D setwd(wd) > ##D ### have fun > ##D browseURL(file.path(tmpdir, "party", "inst", > ##D "documentation", "html", "index.html")) > ##D > ## End(Not run) > > > > cleanEx() detaching ‘package:TH.data’, ‘package:MASS’, ‘package:survival’ > nameEx("mob") > ### * mob > > flush(stderr()); flush(stdout()) > > ### Name: mob > ### Title: Model-based Recursive Partitioning > ### Aliases: mob mob-class coef.mob deviance.mob fitted.mob logLik.mob > ### predict.mob print.mob residuals.mob sctest.mob summary.mob > ### weights.mob > ### Keywords: tree > > ### ** Examples > > > set.seed(290875) > > if(require("mlbench")) { + + ## recursive partitioning of a linear regression model + ## load data + data("BostonHousing", package = "mlbench") + ## and transform variables appropriately (for a linear regression) + BostonHousing$lstat <- log(BostonHousing$lstat) + BostonHousing$rm <- BostonHousing$rm^2 + ## as well as partitioning variables (for fluctuation testing) + BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1, + labels = c("no", "yes")) + BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE) + + ## partition the linear regression model medv ~ lstat + rm + ## with respect to all remaining variables: + fmBH <- mob(medv ~ lstat + rm | zn + indus + chas + nox + age + + dis + rad + tax + crim + b + ptratio, + control = mob_control(minsplit = 40), data = BostonHousing, + model = linearModel) + + ## print the resulting tree + fmBH + ## or better visualize it + plot(fmBH) + + ## extract coefficients in all terminal nodes + coef(fmBH) + ## look at full summary, e.g., for node 7 + summary(fmBH, node = 7) + ## results of parameter stability tests for that node + sctest(fmBH, node = 7) + ## -> no further significant instabilities (at 5% level) + + ## compute mean squared error (on training data) + mean((BostonHousing$medv - fitted(fmBH))^2) + mean(residuals(fmBH)^2) + deviance(fmBH)/sum(weights(fmBH)) + + ## evaluate logLik and AIC + logLik(fmBH) + AIC(fmBH) + ## (Note that this penalizes estimation of error variances, which + ## were treated as nuisance parameters in the fitting process.) + + + ## recursive partitioning of a logistic regression model + ## load data + data("PimaIndiansDiabetes", package = "mlbench") + ## partition logistic regression diabetes ~ glucose + ## wth respect to all remaining variables + fmPID <- mob(diabetes ~ glucose | pregnant + pressure + triceps + + insulin + mass + pedigree + age, + data = PimaIndiansDiabetes, model = glinearModel, + family = binomial()) + + ## fitted model + coef(fmPID) + plot(fmPID) + plot(fmPID, tp_args = list(cdplot = TRUE)) + } Loading required package: mlbench > > > > cleanEx() detaching ‘package:mlbench’ > nameEx("panelfunctions") > ### * panelfunctions > > flush(stderr()); flush(stdout()) > > ### Name: Panel Generating Functions > ### Title: Panel-Generators for Visualization of Party Trees > ### Aliases: node_inner node_terminal edge_simple node_surv node_barplot > ### node_boxplot node_hist node_density node_scatterplot node_bivplot > ### Keywords: hplot > > ### ** Examples > > > set.seed(290875) > > airq <- subset(airquality, !is.na(Ozone)) > airct <- ctree(Ozone ~ ., data = airq) > > ## default: boxplots > plot(airct) > > ## change colors > plot(airct, tp_args = list(col = "blue", fill = hsv(2/3, 0.5, 1))) > ## equivalent to > plot(airct, terminal_panel = node_boxplot(airct, col = "blue", + fill = hsv(2/3, 0.5, 1))) > > ### very simple; the mean is given in each terminal node > plot(airct, type = "simple") > > ### density estimates > plot(airct, terminal_panel = node_density) > > ### histograms > plot(airct, terminal_panel = node_hist(airct, ymax = 0.06, + xscale = c(0, 250))) > > > > cleanEx() > nameEx("plot.BinaryTree") > ### * plot.BinaryTree > > flush(stderr()); flush(stdout()) > > ### Name: Plot BinaryTree > ### Title: Visualization of Binary Regression Trees > ### Aliases: plot.BinaryTree > ### Keywords: hplot > > ### ** Examples > > > set.seed(290875) > > airq <- subset(airquality, !is.na(Ozone)) > airct <- ctree(Ozone ~ ., data = airq) > > ### regression: boxplots in each node > plot(airct, terminal_panel = node_boxplot, drop_terminal = TRUE) > > if(require("TH.data")) { + ## classification: barplots in each node + data("GlaucomaM", package = "TH.data") + glauct <- ctree(Class ~ ., data = GlaucomaM) + plot(glauct) + plot(glauct, inner_panel = node_barplot, + edge_panel = function(ctreeobj, ...) { function(...) invisible() }, + tnex = 1) + + ## survival: Kaplan-Meier curves in each node + data("GBSG2", package = "TH.data") + library("survival") + gbsg2ct <- ctree(Surv(time, cens) ~ ., data = GBSG2) + plot(gbsg2ct) + plot(gbsg2ct, type = "simple") + } Loading required package: TH.data Loading required package: survival Loading required package: MASS Attaching package: ‘TH.data’ The following object is masked from ‘package:MASS’: geyser > > > > > cleanEx() detaching ‘package:TH.data’, ‘package:MASS’, ‘package:survival’ > nameEx("plot.mob") > ### * plot.mob > > flush(stderr()); flush(stdout()) > > ### Name: plot.mob > ### Title: Visualization of MOB Trees > ### Aliases: plot.mob > ### Keywords: hplot > > ### ** Examples > > > set.seed(290875) > > if(require("mlbench")) { + + ## recursive partitioning of a linear regression model + ## load data + data("BostonHousing", package = "mlbench") + ## and transform variables appropriately (for a linear regression) + BostonHousing$lstat <- log(BostonHousing$lstat) + BostonHousing$rm <- BostonHousing$rm^2 + ## as well as partitioning variables (for fluctuation testing) + BostonHousing$chas <- factor(BostonHousing$chas, levels = 0:1, + labels = c("no", "yes")) + BostonHousing$rad <- factor(BostonHousing$rad, ordered = TRUE) + + ## partition the linear regression model medv ~ lstat + rm + ## with respect to all remaining variables: + fm <- mob(medv ~ lstat + rm | zn + indus + chas + nox + age + dis + + rad + tax + crim + b + ptratio, + control = mob_control(minsplit = 40), data = BostonHousing, + model = linearModel) + + ## visualize medv ~ lstat and medv ~ rm + plot(fm) + + ## visualize only one of the two regressors + plot(fm, tp_args = list(which = "lstat"), tnex = 2) + plot(fm, tp_args = list(which = 2), tnex = 2) + + ## omit fitted mean lines + plot(fm, tp_args = list(fitmean = FALSE)) + + ## mixed numerical and categorical regressors + fm2 <- mob(medv ~ lstat + rm + chas | zn + indus + nox + age + + dis + rad, + control = mob_control(minsplit = 100), data = BostonHousing, + model = linearModel) + plot(fm2) + + ## recursive partitioning of a logistic regression model + data("PimaIndiansDiabetes", package = "mlbench") + fmPID <- mob(diabetes ~ glucose | pregnant + pressure + triceps + + insulin + mass + pedigree + age, + data = PimaIndiansDiabetes, model = glinearModel, + family = binomial()) + ## default plot: spinograms with breaks from five point summary + plot(fmPID) + ## use the breaks from hist() instead + plot(fmPID, tp_args = list(fivenum = FALSE)) + ## user-defined breaks + plot(fmPID, tp_args = list(breaks = 0:4 * 50)) + ## CD plots instead of spinograms + plot(fmPID, tp_args = list(cdplot = TRUE)) + ## different smoothing bandwidth + plot(fmPID, tp_args = list(cdplot = TRUE, bw = 15)) + + } Loading required package: mlbench > > > > cleanEx() detaching ‘package:mlbench’ > nameEx("readingSkills") > ### * readingSkills > > flush(stderr()); flush(stdout()) > > ### Name: readingSkills > ### Title: Reading Skills > ### Aliases: readingSkills > ### Keywords: datasets > > ### ** Examples > > > set.seed(290875) > readingSkills.cf <- cforest(score ~ ., data = readingSkills, + control = cforest_unbiased(mtry = 2, ntree = 50)) > > # standard importance > varimp(readingSkills.cf) nativeSpeaker age shoeSize 12.69213 82.26737 13.60017 > # the same modulo random variation > varimp(readingSkills.cf, pre1.0_0 = TRUE) nativeSpeaker age shoeSize 12.88414 79.09714 15.37933 > > # conditional importance, may take a while... > varimp(readingSkills.cf, conditional = TRUE) nativeSpeaker age shoeSize 11.466498 51.125596 1.521413 > > > > > cleanEx() > nameEx("reweight") > ### * reweight > > flush(stderr()); flush(stdout()) > > ### Name: reweight > ### Title: Re-fitting Models with New Weights > ### Aliases: reweight reweight.linearModel reweight.glinearModel > ### Keywords: regression > > ### ** Examples > > ## fit cars regression > mf <- dpp(linearModel, dist ~ speed, data = cars) > fm <- fit(linearModel, mf) > fm Linear model with coefficients: (Intercept) speed -17.579 3.932 > > ## re-fit, excluding the last 4 observations > ww <- c(rep(1, 46), rep(0, 4)) > reweight(fm, ww) Linear model with coefficients: (Intercept) speed -8.723 3.210 > > > > cleanEx() > nameEx("varimp") > ### * varimp > > flush(stderr()); flush(stdout()) > > ### Name: varimp > ### Title: Variable Importance > ### Aliases: varimp varimpAUC > ### Keywords: tree > > ### ** Examples > > > set.seed(290875) > readingSkills.cf <- cforest(score ~ ., data = readingSkills, + control = cforest_unbiased(mtry = 2, ntree = 50)) > > # standard importance > varimp(readingSkills.cf) nativeSpeaker age shoeSize 12.69213 82.26737 13.60017 > # the same modulo random variation > varimp(readingSkills.cf, pre1.0_0 = TRUE) nativeSpeaker age shoeSize 12.88414 79.09714 15.37933 > > # conditional importance, may take a while... > varimp(readingSkills.cf, conditional = TRUE) nativeSpeaker age shoeSize 11.466498 51.125596 1.521413 > > ## Not run: > ##D data("GBSG2", package = "TH.data") > ##D ### add a random covariate for sanity check > ##D set.seed(29) > ##D GBSG2$rand <- runif(nrow(GBSG2)) > ##D object <- cforest(Surv(time, cens) ~ ., data = GBSG2, > ##D control = cforest_unbiased(ntree = 20)) > ##D vi <- varimp(object) > ##D ### compare variable importances and absolute z-statistics > ##D layout(matrix(1:2)) > ##D barplot(vi) > ##D barplot(abs(summary(coxph(Surv(time, cens) ~ ., data = GBSG2))$coeff[,"z"])) > ##D ### looks more or less the same > ##D > ## End(Not run) > > > > ### *