DEoptim/0000755000176200001440000000000013624530755011625 5ustar liggesusersDEoptim/NAMESPACE0000644000176200001440000000063013624161450013033 0ustar liggesusersuseDynLib(DEoptim, .registration = TRUE) export(DEoptim, DEoptim.control) S3method("plot", "DEoptim") S3method("summary", "DEoptim") importFrom("grDevices", "devAskNewPage") importFrom("graphics", "abline", "matplot", "par", "plot", "plot.new") importFrom("stats", "runif") importFrom("parallel", "clusterExport", "parApply", "makeCluster", "clusterCall", "detectCores", "stopCluster") DEoptim/demo/0000755000176200001440000000000011737447730012554 5ustar liggesusersDEoptim/demo/benchmarks.R0000644000176200001440000000460511710674460015012 0ustar liggesusers# This benchmark script is based on one written by Dirk Eddelbuettel # while he was porting DEoptim to Rcpp. His efforts in code review # and benchmarking are greatly appreciated. demo.DEbenchmark <- function() { Rosenbrock <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } Wild <- function(x) { ## 'Wild' function, global minimum at about -15.81515 sum(10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.00001 * x^4 + 0.2 * x + 80)/length(x) } Rastrigin <- function(x) { sum(x+2 - 10 * cos(2*pi*x)) + 20 } Genrose <- function(x) { ## One generalization of the Rosenbrock banana valley function (n parameters) n <- length(x) 1.0 + sum (100 * (x[-n]^2 - x[-1])^2 + (x[-1] - 1)^2) } maxIt <- 250 # not excessive but so that we get some run-time on simple problems basicDE <- function(n, maxIt, fun) DEoptim(fn=fun, lower=rep(-25, n), upper=rep(25, n), control=list(NP=10*n, itermax=maxIt, trace=FALSE))#, bs=TRUE)) adaptDE <- function(n, maxIt, fun) DEoptim(fn=fun, lower=rep(-25, n), upper=rep(25, n), control=list(NP=10*n, itermax=maxIt, trace=FALSE, strategy=6))#, bs=TRUE)) runPair <- function(n, maxIt, fun) { gc() set.seed(42) bt <- mean(replicate(10, system.time(invisible(basicDE(n, maxIt, fun)))[3]), trim=0.1) gc() set.seed(42) ct <- mean(replicate(10, system.time(invisible(adaptDE(n, maxIt, fun)))[3]), trim=0.1) return(data.frame(DE=bt, JADE=ct)) } cat("# At", format(Sys.time()), "\n") reps <- c(5, 10, 20) res <- rbind( do.call(rbind, lapply(reps, runPair, maxIt, function(...) Rosenbrock(...))), do.call(rbind, lapply(reps, runPair, maxIt, function(...) Rastrigin(...))), do.call(rbind, lapply(reps, runPair, maxIt, function(...) Wild(...))), do.call(rbind, lapply(reps, runPair, maxIt, function(...) Genrose(...))) ) res <- rbind(res, colMeans(res)) rownames(res) <- c( paste("Rosenbrock", reps, sep=""), paste("Rastrigin", reps, sep=""), paste("Wild", reps, sep=""), paste("Genrose", reps, sep=""), "MEANS") res } demo.DEbenchmark()DEoptim/demo/DEoptim.R0000644000176200001440000000472411710674460014240 0ustar liggesusersdemo.DEoptim <- function(){ 'print.comments' <- function(str){ star <- "**********" cat(paste("\n",star,"\n",str,"\n",star,"\n",sep="")) } 'wait' <- function(){ t <- readline("\nPlease 'q' to quit the demo or any other key to continue...\n") if (t == "q") TRUE else FALSE } 'Rosenbrock' <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } 'Wild' <- function(x) 10 * sin(0.3*x) * sin(1.3*x^2) + 0.00001 * x^4 + 0.2 * x + 80 'demo.1' <- function(){ r <- DEoptim(Rosenbrock, rep(-10,2), rep(10,2)) summary(r) } 'demo.2' <- function(){ r <- DEoptim(Rosenbrock, rep(-10,2), rep(10,2), control = list(NP = 100, trace = 1)) summary(r) } 'demo.3' <- function(){ r <- DEoptim(Rosenbrock, rep(-10,2), rep(10,2), control = list(NP = 50, itermax = 300, F = 1.5, CR = 0.2, trace = 1)) summary(r) plot(r, type = 'b') } 'demo.4' <- function(){ r <- DEoptim(Wild, lower = -50, upper = 50, control = list(NP = 50, trace = 1)) par(mfrow = c(2,1)) plot(r, type = 'b') plot(r, plot.type = "bestvalit", type = 'l') } 'demo.5' <- function(){ r <- DEoptim(Wild, lower = -50, upper = 50, control = list(NP = 50, trace = 1, digits = 8)) } str.stop <- "end of the demo" tstr <- "\nRun the optimization process for the 'Rosenbrock'" tstr <- paste(tstr, "\nBanana function. Search space [-10,10]^2.\n", sep = "") print.comments(tstr) print(Rosenbrock) print(demo.1) if (wait()) stop(str.stop) else demo.1() tstr <- "\nDecrease to 100 the members in the population.\n" print.comments(tstr) print(demo.2) if (wait()) stop(str.stop) else demo.2() tstr <- "\nIncrease the number of iterations to 300, and" tstr <- paste(tstr, "\nmodify crossover and F parameters.\n", sep = "") tsts <- paste(tstr, "the result") print.comments(tstr) print(demo.3) if (wait()) stop(str.stop) else demo.3() tstr <- "\nRun the optimization process for the 'Wild' function." tstr <- paste(tstr, "\nSearch space [-50,50].\n", sep = "") print.comments(tstr) print(Wild) plot(Wild, -50, 50, n = 1000, main = "DEoptim minimizing 'Wild function'") if (wait()) stop(str.stop) else demo.4() # tstr <- "\nIncrease the number of printed digits" # print.comments(tstr) # if (wait()) stop(str.stop) else demo.5() cat("\n",str.stop,"\n") } demo.DEoptim() DEoptim/demo/00Index0000644000176200001440000000023611710674460013700 0ustar liggesusersDEoptim some examples of the DEoptim function. benchmarks some common optimization benchmarks, comparing various strategies (e.g. DE vs. JADE) DEoptim/README0000755000176200001440000000045111710674467012513 0ustar liggesusersDEoptim is an R implementation of the Differential Evolution optimization algorithm. It is still under development and is distributed without warranty. Further details can be found at http://www.icsi.berkeley.edu/~storn/code.html. Report bugs or make suggestions to .DEoptim/THANKS0000755000176200001440000000061013024607154012530 0ustar liggesusersThe authors would like to thank the following people for their help: Tarmo Leinonen Eugene Demidenko Rainer Storn Soren Macbeth Hans Werner Borchers Enrico Schumann Jean-Luc Jannink Dirk Eddelbuettel Ralf Tautenhahn Vinícius Veloso Kris Boudt Suraj Gupta Jeff Allard Jonathan Owen Alec Solway Tobias Weber Alexey Stukalov Eliot McIntire Jason ThorpeDEoptim/data/0000755000176200001440000000000011737447730012541 5ustar liggesusersDEoptim/data/xrrData.rda0000644000176200001440000002622411710674461014636 0ustar liggesusers}w\TdfTH$"3BR I[)lRF޻N4Nu )3[VPzU>]>?v?q>OHb""""|)&m$װc..vnv""C'DDMtq\k/8~sX{ݹYsߑyW|qc p\|LW#<0uD\|,хO_X׊)cw_S4kO`|xƑuv>k er.[a zokSsB(9w]8V:E_L枳Qwݬ vE[5}O˸x9gpWmÚIV3xy=L Յկss#bv# %#^"dHx:"xK"P9Bw!5ӏMB9ieQGo ev'{"__}M'lT=_y=RFA'U*_tA֔tly=yrLÂCp0B!UtB:u/*,w뼒'U"#x.!P۩c299]!vXN*(Mڊʓ 23ZW5\uBFlD̥r]W}5bq#e&73o:cT%*kFOVIM/X-OvWB> Cg~Ը ",nLEDe9[ש!ER\zN "[Fĝk7z/n 5lz5GëX~R.'q]֚/ֻ+'0hݞ#~)u_IN*;[(/@ 15?~{MğC|mħ(/C|K"k;m\1⽝]RxaR '?Aoҫ km,fg^fռW!zH 5e &*V{]! |G[=یCм!&!> ߨ:~GsHx~ORZ!۲ $45@dg_8cWH\s CFDyԀ{. @۝P?MAb|9C̄Xf*w7p:Αa.G21jHlR{74gw@bϽ4曂[&$ɟW.%. iUI$m25e:;fOxCMCqNH h*>ya,*$叻0T I Htu$=?%I$׎C[J) H]WRqs<#6U Uz\A򚍬בո8$[g>RC]BV eH3Uz:)Ʀf#A2A#ɕ3lF#zAH~Qɟ^B/SYC>!E±|HL g"e#g"Eu^’[ )_j4?"Ůi鐐q)C5Z9HɸhRL?>*E rU:M;)/MiFJTS8;1D&oHtR,AZ7j#RM%Nnp=T{۾IHusPH շLVT*j r}~Ԫ"agW8R,ŠWHm;FRRى?ӑ6eI}-?׃rfDGUҶX3i{#v]J}嫓!o Ƭ'_c{ꀡ:e504S.L}JE`Za+}g6Daۮћ05T G{?Xa|0-Bv#w`D n F?aȊu y dj{0: ,5a^/Rx*#PhׁѼyVm0ZEBMc0z/0CUDdJ5dsOc'm5 'EՋh͉VɾݲaH"JW?F׽'6vjozl L mm5ٻ7l"qJdi+yl "=6dlxD#;/r&o̡ 1ldd.u_/i :ϫkރI'Ev}udo^ 70|Nd/VlS7VX-stn9qeog SeV9ؙ`ΟqK{LSu 0si(i740m+u,s__^0܋^Lf~ӫNy /ܕxZ;WZqAj`_$)=w{Y^lҩb%h?|{57y7Hn>O&|R?o\~Hy-cٷ[1]ui=j4QXq;X?$ZbԨ`(Q ڰk37-X-RK=~ ֈ/ -[Ww%ooL:j*cҨ`9XJ+/'F3`Ԓz,_%a9`<$+wͲ$6Vn׮aCk?/U-`=xa1$dMz4!X/ַ`WƃkwϫK\d3j"Vș#~cw!gs8,`޵9+_n9k)-BFU]'/_WTz@ƶE=6vi r9'9!紶i5 #'kƳx$=[74r˜EN0w9Ӯ ,t|+_ٹn\}1{4+rOSwG㴄P6FeQ4U|⍜3VXP"GGK&{ w̏ȕ]o= CRk"R]6¥j Z;}*_OA:na/MTGUsCcom4rl-)\b QE7 ?O|כ#7yLpyr'O ڎuL[k=cR O!}rh,[gq7}U8QãmYܟ~6{d2G;7f,䍿nMh-f=`߈#oɌ9.[ o?RwyG!u-|y/D #~k (~f 1Mly 9uW8#/<~)ȋKy85:Մ|kzowSdJ4V;Cdklֿ 9J|:T<%ޛU GyҦk΋cZS @/y?"1.,_X%*kb.C燑S.cݞL4r"CZ>JZ-{wN qN?{skVxz9u l[qˋJ`c_:ƕ6Jt+fRN`[Uw z c$v3i;x{؞n(a4{vfQ`VEUM),9:U˓OKK^)a=صG|~1b17|o-4q[e/5F8`YEt^>uK?<]}(n߅CץlػU(طO*) |ۆc+M^\PxCqH7D7,2EA;jP rޫ@Af((?^?C;P/k2vYh.6zFAgQc(޼H{ 8CBDmGJ̗p&vLXMi53|^x5pTV JތY<.K?2*%p;7k`E>mp\nرV;PWPGĔ:5ɎR]b;9jM8\wѫ +eT;pn\kPoKpN[Λa!IͪF߷_SLg (6 G>=Z P8̫QX1@G%P…P2iQlk3(ԋ< /CELTl(X½WǣȞ{Qn^pc: OlDdˆUu50Ai*fL{o~EYO3PXy e.EtW|քN}ګPXa][ WFaS;Q=%ǢvEawлu=2(xy$/ Ⴂs,zP$sb(գ|B6xYE "5 RR(ZNs(>286-O<˧.Pdcٚ=r(z*5 EMY"qQ(:o6~~Q2DpEWgyk&1y.9fNAQ瀵RmlEU"z7PtӪ%(_ղ.znXEY97Yl9"k.ۗ4th>n #'D,x֗P bLB.5d8βg|Qr\WE$JW|%A]{W$Zam(I3z J2L={_%CT5$az=J.5%x0Pr/ʧ <=o`EI AZ(b'JZ3˶GDHyJIӎR[*T2}߉~(7}vNwz ~latN_(]lS2-8k'YڣTwZcJ 'ܮBi>FjL_mCYuԭ;DkJOnTv[aFqBQ{Z)n>uLMTn]RD(R%Y+ޭwJ9YogUͷ-/ez~w\j_Oe: (g~JX/0!w0(4+#|3pgleyY#ukU.s` 6ŮoƜbt#pW,츖fɳ x߰<d306yXZ]`;xUw_޾/Msb xNss4JX2NxLo'и*y|,k5]7Wj dWm5OwA11n5PH +)ߐ&~u=DNWoP3_@IpIPCR}*2b^pɛe\NUypSE\A{1B@& l$3~;?JqԽ*0)TS2O( Ipz6 (i+d.e^ (]D Nz*fj)\5(VQOS8n8EIj'RW8zR 8FP^d0yP;VPD?P,ѧQv+o )SPJ?ħϔ߇cTuԹ(HwMP$A^?)2kuˉ''RvP~)P[ `o%Qq():T9}[Зo6:FFзj[8-LJx:R?kѧ@ٷe >:L(dR?j|Tm oIC}@)6_P)띩8 ˩Wn.Pҟ9O⤿=?Q)G^i!Q~(}}!')>2xOwWK~{)>OR|n#} >ߤP|BX*n*tGvW?Qr/-M'/}wSy(>)9u|BΣFJRwS7H(V1)Xƥ-X:m|x֜OZsm>śkI_wVS"l%| K"΢x,xi#"/ba E!ӄŤ_^* Qj/Ox,ŚUTdD&v|)C}8N"u{ΡM1b!/9"EDQF*)[J<bO*< I~2,RW1lCI<<3Vy~r(G>m)fR,%KEI$n'sdymҠ },OFTS |DWw0E/O~N1b* bϔ $yrs3b.̅IV H)ɜcHR/ϻi$!L氏b<ϤH]T2I$OyƑåH?M$sB읫 _&|}J0Q>ܢ(Ɛ&&ȹ7]Q^?LP'u:DGs' O>d)x9 qɽsoir~܃;#ϑħ]A#~6DoMhEvn/Gυ+v؟ |ГMItǃFّ&u?+LlAhNwD%<yH܅םJxs']irNabwqzp?L߇5kJdS"ٜNCQkp]IG""vHDO#q~nJhBIDo=΂Nw˞[K齰W~^l:hY>z7xۈ~-Wi?KF?t_t}DO~wy>l-C(/eGݗ 3 1F{iFd~vZsK}@?mBFĞ;^CZ&47Ꟗi;zH\Cﱕ~]7OǧF?^CE f"oLڟ_:sKσ:i{ZF>k  5?~ C5:.=W^C//Y(}siPc!ڏ=]s#!}{BB!i?} y׍t=B};}o!uspk g d#Tt= MK νM?tz^x{IǧAρK7M~yۿ`=]Ͽ9h KoBqhj GV!?C!;:~|G 2}|=gB]P^:p{o?"$vtϹP{$_'/B2}{?7=_O"BuO(P<~hB{%|Oÿ}yq]!?zt]t|7MA[/ {Lȟ_}~ꏮi;&!_|:?Py~:xF˴ݿ9>#}ŸŸug]!ӵtt}"P=tkzz_ߏB~B{~ !=w.sgP\o9 #|{`9+kY ?犞3OG!~/n:~}{@x _{v]_oAERlɿ 9HXD;GY;0[)+Vps[DžϗN[+CEDEoptim/data/SMI.rda0000755000176200001440000005772611710674461013677 0ustar liggesusers< <{lɒRB*M$H҂xJQI(R!Jم,Ǿ>w9g:cY庾׌s6.`,@7  <.X NCgXɊIWl"Ex m[<6i4P1;֞%SJcvЁ *HmqNK Un,*Zq`O t| sYK 4%$-q/Aè-jn&yMo?e48le3{bB\%4v~x>gy i[}^£ BEP%WLM Ť"H<8͒"4|QAwNX^[t;avH76Rr4܇"YF3-p+£O1qۨ5( ƵQCH,RwԲ"7K2.2"׳f٨ָ?sun?sA.|/J1QlD<^Ho6Rw)8_D꩟KxGϩDMόh gč$yS;GcZęZ*[&)4v#t;+]!iU]h_$AWJs5M0ښ٪x$$6.s]%HIvI텼*n}h!}m "K<rT,x+S }p*zdGc: Ar,Vf8A堿 Bd+Y&G<$P}9Kfr=Ba_3 X ;PZMZr OuWCO+ 4}k4O(Gug=sIp5 -bEOheZNZx݃ ę6;MV ppb˵ :䖹:gٸ0i >+&pS츙Dk |CR+ WtU)eDG}׃!4N?I l\Y.JVhb _&K%/o>x'U #pUևMGLAq܇is3x(j> ~Ef#pekSt/˄ml9_*Z?$IT/CKW]џy6ΦxCC \C)DqfN}(KW!R>Vp!Ӊ8^vP+f z[JK˟Q(b],b?zK (p),hW*-*dbw&*r!mkAO-KmymH3bO7[-Ry&@M֢x$ײa_Xަpm'g :{QCUַ`s%m$*nYe/7L]Qig;# ֶP8=!pӖMV~Me 1mpB snc'[Z:^ ژ"8ʔ(W|-i6{٘sJlP /Sܪ>T^, pHЗ'}>_' ䷪ֱ.Ef?kb jђSjQݙ ̾qR:C)4sD"z8}T̏%_\ٸk4 Wh8kx W\أiC"K _qAiPu=: Yv%o_zپ1PߔB84Oܸ9'Xe:}kY *ۚ#/`͜hQO ʿ hNew"i2Qmw (Ҕ왱3&λn.gOf>hIX:! ǟ3աp׾/:m)|sg44>sQ}?BwI T+;YqH 5=w:=0%mI>;JtxyXQ?@neb(wC;j+w۩ߺ :&?/C{3nHֳPD{{hpGp'b/ӽ*I\az5-Qk4uU [kђRPB6uMD\)E TӇDU!?7:ef7Z0P_]4*8Ngʭ{i*_$k`-W*lZJ >P>n~i63J'z ͹$:y7(Lzs |,- }O);x`@vo)4wu{Ğe[uo<8x2My\>P[Wh S4Tg =$Mz\0 yR}__:*fVѽp?# 4n{\EAF | 0kw ijs;$4׳]+teoPKY+vkQ7ObW Aby0{)cN{9k] wMC1'"t)0ǃSu? b)̮o)\uhY0/Hqp?G@rT\8pSkDS,xޖU:cXzq\BVV Py%>h(Qj‘_(\_]zikϳ_.bB2w(㏔)ɣSuh^w+\Rmai$5Z7l a֫b$X sXfle *mlT~^C mӿ ׇuK`ڭF{SmBv10ߣq\7q $YoNWk|aXvbg%by}+Iq"90]6R@A8Ž8n̪P\Jmw?|FרOhЇ9,Fظw-Z]`= GW I%p'xpvբE#yo`JvĂ~f|@Ƌ#~+ ˽y`3b5ڥǘ|ClԷz`E/I"P[+qpz7K_hqX`vJo\:o5v`!Nz^&ʺڟξ|&m-HPWPtEfJ ԏ[ꅫ,h4huy5MG#4Ywќ|8p[ǜVT}[xaِu6^|p={?i<^2 VrGT͒x7c)4f̈́ LtBS;6+IZ;$P- q3 texoUa.x3`qʹyvǃ_8xG\*Ug0l %ao8W"ܐ 7@^&. FOYq_YSg?xMgANgZ6 hTB>_{hthY5(4[001x=ީxGɋѓXc[vڶ"-H{_b!'.ványk{.p BunO&Q}&Te=n1rpn{KM+TdzISq"1=(-[I!dw> n]"9Z)@j)tUm98˥}䜡aɷ+U9Sh&>VQxt;ɭI}rݰM/\ʻ [9VZhh=48i<$j.:@6HA6b s-8F$q{R©f"(ڝ bC-/&8.e zrKUK_v2c R[)]ؘC &sU? .^%f'9 &P_) "k޿]pkikXqpO|}b. v㱍a.ow/ڐB~x'+ C5t\ه;~'ԩU9)l=yȋUxLL yQ0"@߸IWm4ĥ[a? WB>P6{')'9p]mtvA}~ 3+a:Wmx0w{% ëc9SKb!WpFI9 >BfDܾl43m'F JY-}RDB~cDcsiM,kگ Jl&QQR .}h䇮%da 6Τi@JP:¶ ]{ٖ h'o<:n upjK@EvnA'~6?M KS[V2WM` \#dAn;qƜzWuѸU:GqTӧ?0Q/PJoIpX13%X#$p-(\kj"#ޘ_{w܀aCU-6Ɲqʟ2 p5DU,DosK}@a ;wBX Zq 䎡&! o@!Mz<a4׽ۻ\^n@c+&HO&QJ \wq(гo_~0pMjiN\# uٷJ;65C)Hw[#{$zA9pLXnj2P"4@g.P055Q߫85"Ptϖ8֧GMan_\rte}+Ѡ_9xA rBE#b8]K"bP~$T/S#PV5 )rDOB'>&Pnߪ Cçr@ eaGcܤpAI~*K4<߳.UiC:fYxm*<Օ=$DŽ~m~dmK4aӖPs(T$-"~F~[$*JY#!KjN/}J0kP6:sK+QK4~avV plMpɳYp<0gH,!AUУSۮfw/bΧ1cBG WhF/,Ӥ0](#AzPӇܬ#V~ң7ͩK!/LO2ZM\—@e-4NkO,= 겨I82!DJȠ0o+4h1-a^bwW(@:Wn') 6VIf{Ǧ:SЯmy[ (eʸ(B7\i>4 ~XfD%}B%weئ0h`7KnjQS K\W6y%#ڷzWaZDΠđsܪ) #PB>v' x@;>}:e;k ];Cзm|y4*(Qn{g\ |~$f2|(ǃ^ߘc*П CQݏ[H/>wVp^ݳ{'3:N=27nߍRoH Zct2Be8YnN%}$n~dR)F1<+I\wm; *D(?壯 ڝ 4,^ )W%uwk;jʔr =CDb"x ]M oϩ&|QǻGS3<[f+M?YfIԕ y?p7ðeV8Ĩ64OYFW\MWM%+v.}h5 &Bᮼ*(smk=Yξa^d4k|l$c*I/kn˦E ,'o/_c{Mdw9žq.H:[׍׿E(mUͰW]pԷ.k|IH WԖ8Mۦٱ1ϣ*oFL=*]7'+nߩ6h6r<{`; &PN]ec0X{$@$ʿ]е u.ٴj %oGI 1D OB)WrZ{hs}\߻<U8"dql2"EFI~,uD׻s".ͯ,;Ä9`1P0۲pm!PӔĞ.^U xRZ+'1=JXـt"ʡQݶAu'IO^vhHN!pg ݚcH%a5Н~iJ_2!4M9;$j/m >iB'907I4=G{kLT99e!_ 4ﭸ D|.β(Zhr*WG:8+Ӹr+3i믬Du~`Dq90L5#y'##A$Px/,( #?3;L3-ѣ" y5wNJ]=uN1pש]TaN4sKPUƵ,O˱ZG(G\|Z>BtIF|9Meh`uiȓ$]} 5FWeLVgh)0Q.ߵ_ 9֘En)Զ"M&cDcEX{'AN>g4irD&<ͬ{b j(ul‰?:|y{/M ?=8?|2X&2YcFePʙ1.$񥪠8K[]^}!fNs>f|ߟ6-B3=`~ow'8(,CMemif'cc\} ǻ p3<-M?+iY{dY\(`t'ɫN-,Ԩ1g~o3"@F\N2qMe O(ԷA_Ȧ ꆒm4XB-cDbj,ZAUS|1θxJ"W~>@n xڪD9,ɵUIi#ДW gfN7>:>XKz˦m)B zd]CU'Md[3>Պ4./En/maۇs$p5EqySV2kJE8̏Yqr=̢OϵoQWK]HˌiIa2cr&yxLEړ>v'%Sy[G቏RLR|R6r FO녛̮|57E,1 fuIޏ$nP$"~C֗H6>Z ? :;Cgk>y7 t~@=$?O:` <'Xh`em);zn6KYK<Ȍacζ K0QS(ۇ/ EAt;:cT-٦Q''!ɪ*w[:d A?l;@ʼnQ@~UYL/i\szAXo[ACt3yGJG$)QX:[Uւ^{@OT—Z-z|P+4FuA/a)H UnV/Ncjb2~gr( ׽-v ݈6?YģO džVx6_x\^ޕt֒^UZh{ԹVln%K. ܦ3M SorBDg|q ' d5 ڦE h1!7u-q֏bk1Dq o6/;3'A/~QP}kHA+/9O6`D[:rG䗛Gii9.Is-=q,E^/L?ksQEw:syxw]"BWN<8pH1_laTke}e" l=s~9%=p?kR*+gt( rHM&E.xđI)zu.4UpфAI\XYjP^wU;m?u~dN8~ߌct us@xґqw_`J"N6ʕ&_[SW* %[shn;Qx2Fgvh~³e_[iQ!Aɟə|AHpԔǞ$V ̄<}0 79w|oqWdžUQ#ك|f\xptmZfk.3 9x0\Wl4ppu(z*w(\K檩hR8\SzU|'{`ԆB0/[tkRq[BQ"ǖfJ zVDeV8cc6Ll}1{"mGO.X:%~W ?qwu'0:=zԩTo7^r\ݷk)ٓb$u"r%&,譱WSN&3|:S`RkC'=].Eᦦ-;'!Gν׹3K(1+ [³Oe+d`GΛ Z8`>H6{gVUgZI]iW M uEၷwp8Y=K<A_R^Fe j2y'*e}Oy*ur 0@oirY>,ܻKfә{RYêL~Ov)g _ۇh4|auغHO;L~v@k&PZyZ_W[>K )8h@Z|4n0H׀Xa>N":~<`ȵkи$jy&33]SxZ* t"FX{s#z[4ᾜ4~B rdC*޼dӑ z|4Jx;}wmLl7jn-pd&䁏7Qݖ=+"a/ؿfvxx_ƃ/YP22nRXDe;ǡ^;_sԔu0L43=AhTIV=;t~[1l1 ex{c"/cIJBE'fT c&&d_ 79_f:?ǬS欻Va~bdpw_ ur#\ڇPwuwb6??鹯L~~=ŷn71u΅ǏtS^W;^0ԽZ.}+AwKw_^ym։_Gn݆my:þ+?mݣ^HwnꎚuwϿ)g_z^}}~9+ϥ\zޚqb]r.5O?wγ?/l4xya#ke_e|~+>^wENXgW\C'=aYی ^nvpw^YYǫ{t[=]}) }lzbO|Cw\Et׊cgtM=xY7:V/84xw h1#݌ Wxoջވ_|1W0k;/O핫>qgto\A:i0֑<ڱr%7>soϞtxދ=䴓7o uqެ'ݺon[cn[xm?3/Oc6na[}= W^mOLKb%6~n;;n}pّonߏ{?|ߌ=;\g﯇˶6<漵Gp5G~u[Gv覿9~hp_q9fY{q)|pY7?;֯;??N{%{ljό#;~ϷG'.xb1ϳt\wa+7?O]. zPwߔ޽Ƞ<څg}ŋ9uot{Rz _cW={F2םcS:oW0V#M g,gXkxV+mstkn{"~dɩn?}S컶:`S܇7=dᇧmύ579ລGg/.3SiO|V _7,|W7'G|r~>\P Er \J.-r+WɏrMI)9N%זz3rHn,rS 7[ȭ Kr{I,*w_rO G~K+ʃ!Py*3:jC>)Qsu\}N>/QsvԜ}UK&Qw-4GnH#qgvo_r!iwogvŤyܙ}P~Hǝۙ݇}H7Ӳ:t@Z^w΃\HcuNO+΋yVѝiU>|Z]w5tJ|IН3S:q'Z::s({.H;z)}VwNuUP6ҝcic}X֝giݹ6=g .m;Җs/}Nwu#s1}Aw.mtcVwN/c3;?ӎs4}Ewu;髺s6}}n|W}WvНiO7}tI[s;;s<;!=;Dy=o#uHGy }Gt,B:^=}D!{K׹"sE:gSt}:SuHNy$T|~sJ:St+:_#ӯtIsL:Wt2>IsN;|{҅tC:Kt.J|.=+$/+unJW>tSzҟtJ7wM:w?ܕFuJ{.NETu>KMtk6ss\s\s鯺ty;ݩ{NtKw<=tNL뜘y1={~Oӣ:WtL2=sf{O3=gzZOGӳ9S:u^M/ܚ^ѽ7H|8{8q:g>|8{ߜ8qyi3g>||8q^Arqy9g^:g<|8q^!qǙ:g>|8|8qm3g>|[d>|8qǙbv92g>|8qǙ3g.\8Dř3g%3g.\ҹ8sqٽJř3_eNΜ99ɜ99srVə3'g43'gNΜ/99sr}Nəy˙3/g^}unܜ9_ss͙͙37gn7ܜ9ss)ss͙sܜ9ss)ss͙:7gnܜ9ܜ9ss|9/g>|8q~@Ǚ3gZ3g>|g|8q+8qǙ3g>2g>|8qǙǙ3g>ί|8q-qǙ;:g>|xηq2e~ x >.<\xp~pÅs\8+\8ppಌ . .\VX .\8spYM  .\>sp .u.\8ppqoY8ppe .\os-[o,[o߲ο -Iu.<\xlpÅÅ .;<\xp޵pÅn:.{2 ..\\>.|\-|\qrDž >. >.|\qDžDž >.|\q➹qs :>.|\.|\qŅis[o¿Žu¿ _[o~o¿ot-[oq^o¿ -[ܗ-[oο - -[\o¿¿ -7[o»w n»w:-[nyL>w_8pn¹o:-|[t-[8;7}λw}»w -[xn2C»w 't-3u-[!-[xnyF»w  w -[^yn»^C»s˛>¹s s -[ޛ<~Ns+V{s+uέ"*Vέ[9ڋct[ڋ[roj/.oʿ^Dʿ+V{+V[ET[z\ETcu\ETt+Ut{+W<\ET<\ypQyp^DÕ+W+W<\GT<\ypQyp~D>DʽCʽ{+V{+V[?T[roProʽCʽ{+V{+V[wѹroʽDʽ{=ʽ{+V+V[soʽ{=ʽ{+Vέ[9rnQ9rnʹ^Dʹs+V{s+Vέ[ETέ[ڇ|[rm=\[rm#imjìV[?T[roProʽCʽ{+st[roQroʽ>Dʽ{+V{+V!*V[ڇ[roQynʻ>Dʻw+V{w+Vޭ[ETޭ[ynQV[&+V[EToj/o}oj/rp+W{Õ+W"=:W.\\ET.\\rqQrq^Dsq^Du^Dŕ+W{+W.\\ET.\\rqQrq^DDCʿ+V{|;NCooo̯{ {a!7777=߰^poo7A=߰wwwwCnnn77}ιa!87878787;ưa!7777}ް{{{{þCpopopopow {νa!7777?Cpppppppp}o{Csqpqpqa"8888A=|||| DqqqqL8888A:=||ÞCpppppppps{a!888888889D9888889GÞCpppppppps{a?888888888?ޘsopow }ް{{{{þCpopons ͹s ~Cppppppppo7;u 7n74n8qp8qp;C77n=4n8qp8qpC77ncu7nA4n8qp8qpDܸqqfqqō=ō7.n 7>n|كh|qfq~p8qrmnr>Dˍ/7/7^nMsrDɍ'7{'7NnA4Nn8qr8qrDɍ^s|pÍ}Í7n7nDƿ6o6CfpÍ}Í7n!7nžG>ޝ|rȜ_zZ 3ٜDEoptim/man/0000755000176200001440000000000013025612741012367 5ustar liggesusersDEoptim/man/DEoptim-methods.Rd0000644000176200001440000001251413024170075015661 0ustar liggesusers\name{DEoptim-methods} \alias{DEoptim-methods} \alias{plot.DEoptim} \alias{summary.DEoptim} \title{DEoptim-methods} \description{Methods for DEoptim objects.} \usage{ \method{summary}{DEoptim}(object, \dots) \method{plot}{DEoptim}(x, plot.type = c("bestmemit", "bestvalit", "storepop"), \dots) } \arguments{ \item{object}{an object of class \code{DEoptim}; usually, a result of a call to \code{\link{DEoptim}}.} \item{x}{an object of class \code{DEoptim}; usually, a result of a call to \code{\link{DEoptim}}.} \item{plot.type}{should we plot the best member at each iteration, the best value at each iteration or the intermediate populations?} \item{\dots}{further arguments passed to or from other methods.} } \details{ Members of the class \code{DEoptim} have a \code{plot} method that accepts the argument \code{plot.type}. \cr \code{plot.type = "bestmemit"} results in a plot of the parameter values that represent the lowest value of the objective function each generation. \code{plot.type = "bestvalit"} plots the best value of the objective function each generation. Finally, \code{plot.type = "storepop"} results in a plot of stored populations (which are only available if these have been saved by setting the \code{control} argument of \code{DEoptim} appropriately). Storing intermediate populations allows us to examine the progress of the optimization in detail. A summary method also exists and returns the best parameter vector, the best value of the objective function, the number of generations optimization ran, and the number of times the objective function was evaluated. } \note{ Further details and examples of the \R package \pkg{DEoptim} can be found in Mullen et al. (2011) and Ardia et al. (2011a, 2011b) or look at the package's vignette by typing \code{vignette("DEoptim")}. Please cite the package in publications. Use \code{citation("DEoptim")}. } \author{ David Ardia, Katharine Mullen \email{mullenkate@gmail.com}, Brian Peterson and Joshua Ulrich. } \seealso{ \code{\link{DEoptim}} and \code{\link{DEoptim.control}}. } \references{ Ardia, D., Boudt, K., Carl, P., Mullen, K.M., Peterson, B.G. (2011) Differential Evolution with \pkg{DEoptim}. An Application to Non-Convex Portfolio Optimization. \emph{The R Journal}, 3(1), 27-34. URL \url{https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Ardia~et~al.pdf}. Ardia, D., Ospina Arango, J.D., Giraldo Gomez, N.D. (2011) Jump-Diffusion Calibration using Differential Evolution. \emph{Wilmott Magazine}, 55 (September), 76-79. URL \url{http://www.wilmott.com}. Mullen, K.M, Ardia, D., Gil, D., Windover, D., Cline, J. (2011). \pkg{DEoptim:} An R Package for Global Optimization by Differential Evolution. \emph{Journal of Statistical Software}, 40(6), 1-26. URL \url{http://www.jstatsoft.org/v40/i06/}. } \examples{ ## Rosenbrock Banana function ## The function has a global minimum f(x) = 0 at the point (1,1). ## Note that the vector of parameters to be optimized must be the first ## argument of the objective function passed to DEoptim. Rosenbrock <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } lower <- c(-10, -10) upper <- -lower set.seed(1234) outDEoptim <- DEoptim(Rosenbrock, lower, upper) ## print output information summary(outDEoptim) ## plot the best members plot(outDEoptim, type = 'b') ## plot the best values dev.new() plot(outDEoptim, plot.type = "bestvalit", type = 'b', col = 'blue') ## rerun the optimization, and store intermediate populations outDEoptim <- DEoptim(Rosenbrock, lower, upper, DEoptim.control(itermax = 500, storepopfrom = 1, storepopfreq = 2)) summary(outDEoptim) ## plot intermediate populations dev.new() plot(outDEoptim, plot.type = "storepop") ## Wild function Wild <- function(x) 10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.00001 * x^4 + 0.2 * x + 80 outDEoptim = DEoptim(Wild, lower = -50, upper = 50, DEoptim.control(trace = FALSE, storepopfrom = 50, storepopfreq = 1)) plot(outDEoptim, type = 'b') dev.new() plot(outDEoptim, plot.type = "bestvalit", type = 'b') \dontrun{ ## an example with a normal mixture model: requires package mvtnorm library(mvtnorm) ## neg value of the density function negPdfMix <- function(x) { tmp <- 0.5 * dmvnorm(x, c(-3, -3)) + 0.5 * dmvnorm(x, c(3, 3)) -tmp } ## wrapper plotting function plotNegPdfMix <- function(x1, x2) negPdfMix(cbind(x1, x2)) ## contour plot of the mixture x1 <- x2 <- seq(from = -10.0, to = 10.0, by = 0.1) thexlim <- theylim <- range(x1) z <- outer(x1, x2, FUN = plotNegPdfMix) contour(x1, x2, z, nlevel = 20, las = 1, col = rainbow(20), xlim = thexlim, ylim = theylim) set.seed(1234) outDEoptim <- DEoptim(negPdfMix, c(-10, -10), c(10, 10), DEoptim.control(NP = 100, itermax = 100, storepopfrom = 1, storepopfreq = 5)) ## convergence plot dev.new() plot(outDEoptim) ## the intermediate populations indicate the bi-modality of the function dev.new() plot(outDEoptim, plot.type = "storepop") } } \keyword{methods} DEoptim/man/DEoptim.Rd0000644000176200001440000004164013024172162014221 0ustar liggesusers\name{DEoptim} \alias{DEoptim} \title{Differential Evolution Optimization} \concept{minimization} \description{ Performs evolutionary global optimization via the Differential Evolution algorithm. } \usage{ DEoptim(fn, lower, upper, control = DEoptim.control(), ..., fnMap=NULL) } \arguments{ \item{fn}{the function to be optimized (minimized). The function should have as its first argument the vector of real-valued parameters to optimize, and return a scalar real result. \code{NA} and \code{NaN} values are not allowed.} \item{lower, upper}{two vectors specifying scalar real lower and upper bounds on each parameter to be optimized, so that the i-th element of \code{lower} and \code{upper} applies to the i-th parameter. The implementation searches between \code{lower} and \code{upper} for the global optimum (minimum) of \code{fn}.} \item{control}{a list of control parameters; see \code{\link{DEoptim.control}}.} \item{fnMap}{an optional function that will be run after each population is created, but before the population is passed to the objective function. This allows the user to impose integer/cardinality constriants.} \item{...}{further arguments to be passed to \code{fn}.} } \details{ \code{DEoptim} performs optimization (minimization) of \code{fn}. The \code{control} argument is a list; see the help file for \code{\link{DEoptim.control}} for details. The \R implementation of Differential Evolution (DE), \pkg{DEoptim}, was first published on the Comprehensive \R Archive Network (CRAN) in 2005 by David Ardia. Early versions were written in pure \R. Since version 2.0-0 (published to CRAN in 2009) the package has relied on an interface to a C implementation of DE, which is significantly faster on most problems as compared to the implementation in pure \R. The C interface is in many respects similar to the MS Visual C++ v5.0 implementation of the Differential Evolution algorithm distributed with the book \emph{Differential Evolution -- A Practical Approach to Global Optimization} by Price, K.V., Storn, R.M., Lampinen J.A, Springer-Verlag, 2006, and found on-line at \url{http://www1.icsi.berkeley.edu/~storn/code.html}. Since version 2.0-3 the C implementation dynamically allocates the memory required to store the population, removing limitations on the number of members in the population and length of the parameter vectors that may be optimized. Since version 2.2-0, the package allows for parallel operation, so that the evaluations of the objective function may be performed using all available cores. This is accomplished using either the built-in \pkg{parallel} package or the \pkg{foreach} package. If parallel operation is desired, the user should set \code{parallelType} and make sure that the arguments and packages needed by the objective function are available; see \code{\link{DEoptim.control}}, the example below and examples in the sandbox directory for details. Since becoming publicly available, the package \pkg{DEoptim} has been used by several authors to solve optimization problems arising in diverse domains; see Mullen et al. (2011) for a review. To perform a maximization (instead of minimization) of a given function, simply define a new function which is the opposite of the function to maximize and apply \code{DEoptim} to it. To integrate additional constraints (other than box constraints) on the parameters \code{x} of \code{fn(x)}, for instance \code{x[1] + x[2]^2 < 2}, integrate the constraint within the function to optimize, for instance: \preformatted{ fn <- function(x)\{ if (x[1] + x[2]^2 >= 2)\{ r <- Inf else\{ ... \} return(r) \} } This simplistic strategy usually does not work all that well for gradient-based or Newton-type methods. It is likely to be alright when the solution is in the interior of the feasible region, but when the solution is on the boundary, optimization algorithm would have a difficult time converging. Furthermore, when the solution is on the boundary, this strategy would make the algorithm converge to an inferior solution in the interior. However, for methods such as DE which are not gradient based, this strategy might not be that bad. Note that \code{DEoptim} stops if any \code{NA} or \code{NaN} value is obtained. You have to redefine your function to handle these values (for instance, set \code{NA} to \code{Inf} in your objective function). It is important to emphasize that the result of \code{DEoptim} is a random variable, i.e., different results may be obtained when the algorithm is run repeatedly with the same settings. Hence, the user should set the random seed if they want to reproduce the results, e.g., by setting \code{set.seed(1234)} before the call of \code{DEoptim}. \code{DEoptim} relies on repeated evaluation of the objective function in order to move the population toward a global minimum. Users interested in making \code{DEoptim} run as fast as possible should consider using the package in parallel mode (so that all CPU's available are used), and also ensure that evaluation of the objective function is as efficient as possible (e.g. by using vectorization in pure \R code, or writing parts of the objective function in a lower-level language like C or Fortran). Further details and examples of the \R package \pkg{DEoptim} can be found in Mullen et al. (2011) and Ardia et al. (2011a, 2011b) or look at the package's vignette by typing \code{vignette("DEoptim")}. Also, an illustration of the package usage for a high-dimensional non-linear portfolio optimization problem is available by typing \code{vignette("DEoptimPortfolioOptimization")}. Please cite the package in publications. Use \code{citation("DEoptim")}. } \value{ The output of the function \code{DEoptim} is a member of the \code{S3} class \code{DEoptim}. More precisely, this is a list (of length 2) containing the following elements:\cr \code{optim}, a list containing the following elements: \itemize{ \item \code{bestmem}: the best set of parameters found. \item \code{bestval}: the value of \code{fn} corresponding to \code{bestmem}. \item \code{nfeval}: number of function evaluations. \item \code{iter}: number of procedure iterations. } \code{member}, a list containing the following elements: \itemize{ \item \code{lower}: the lower boundary. \item \code{upper}: the upper boundary. \item \code{bestvalit}: the best value of \code{fn} at each iteration. \item \code{bestmemit}: the best member at each iteration. \item \code{pop}: the population generated at the last iteration. \item \code{storepop}: a list containing the intermediate populations. } Members of the class \code{DEoptim} have a \code{plot} method that accepts the argument \code{plot.type}.\cr \code{plot.type = "bestmemit"} results in a plot of the parameter values that represent the lowest value of the objective function each generation. \code{plot.type = "bestvalit"} plots the best value of the objective function each generation. Finally, \code{plot.type = "storepop"} results in a plot of stored populations (which are only available if these have been saved by setting the \code{control} argument of \code{DEoptim} appropriately). Storing intermediate populations allows us to examine the progress of the optimization in detail. A summary method also exists and returns the best parameter vector, the best value of the objective function, the number of generations optimization ran, and the number of times the objective function was evaluated. } \note{ \emph{Differential Evolution} (DE) is a search heuristic introduced by Storn and Price (1997). Its remarkable performance as a global optimization algorithm on continuous numerical minimization problems has been extensively explored; see Price et al. (2006). DE belongs to the class of genetic algorithms which use biology-inspired operations of crossover, mutation, and selection on a population in order to minimize an objective function over the course of successive generations (see Mitchell, 1998). As with other evolutionary algorithms, DE solves optimization problems by evolving a population of candidate solutions using alteration and selection operators. DE uses floating-point instead of bit-string encoding of population members, and arithmetic operations instead of logical operations in mutation. DE is particularly well-suited to find the global optimum of a real-valued function of real-valued parameters, and does not require that the function be either continuous or differentiable. Let \eqn{\mathit{NP}}{NP} denote the number of parameter vectors (members) \eqn{x \in R^d}{x in R^d} in the population. In order to create the initial generation, \eqn{\mathit{NP}}{NP} guesses for the optimal value of the parameter vector are made, either using random values between lower and upper bounds (defined by the user) or using values given by the user. Each generation involves creation of a new population from the current population members \eqn{\{ x_i \,|\, i = 1, \ldots, \mathit{NP}\}}{{x_i | i=1,...,NP}}, where \eqn{i} indexes the vectors that make up the population. This is accomplished using \emph{differential mutation} of the population members. An initial mutant parameter vector \eqn{v_i} is created by choosing three members of the population, \eqn{x_{r_0}}, \eqn{x_{r_1}} and \eqn{x_{r_2}}, at random. Then \eqn{v_i} is generated as \deqn{v_i \doteq x_{r_0} + \mathit{F} \cdot (x_{r_1} - x_{r_2})}{v_i := x_{r_0} + F * (x_{r_1} - x_{r_2})} where \eqn{\mathit{F}}{F} is the differential weighting factor, effective values for which are typically between 0 and 1. After the first mutation operation, mutation is continued until \eqn{d} mutations have been made, with a crossover probability \eqn{\mathit{CR} \in [0,1]}{CR in [0,1]}. The crossover probability \eqn{\mathit{CR}}{CR} controls the fraction of the parameter values that are copied from the mutant. If an element of the trial parameter vector is found to violate the bounds after mutation and crossover, it is reset in such a way that the bounds are respected (with the specific protocol depending on the implementation). Then, the objective function values associated with the children are determined. If a trial vector has equal or lower objective function value than the previous vector it replaces the previous vector in the population; otherwise the previous vector remains. Variations of this scheme have also been proposed; see Price et al. (2006) and \code{\link{DEoptim.control}}. Intuitively, the effect of the scheme is that the shape of the distribution of the population in the search space is converging with respect to size and direction towards areas with high fitness. The closer the population gets to the global optimum, the more the distribution will shrink and therefore reinforce the generation of smaller difference vectors. As a general advice regarding the choice of \eqn{\mathit{NP}}{NP}, \eqn{\mathit{F}}{F} and \eqn{\mathit{CR}}{CR}, Storn et al. (2006) state the following: Set the number of parents \eqn{\mathit{NP}}{NP} to 10 times the number of parameters, select differential weighting factor \eqn{\mathit{F} = 0.8}{F = 0.8} and crossover constant \eqn{\mathit{CR} = 0.9}{CR = 0.9}. Make sure that you initialize your parameter vectors by exploiting their full numerical range, i.e., if a parameter is allowed to exhibit values in the range [-100, 100] it is a good idea to pick the initial values from this range instead of unnecessarily restricting diversity. If you experience misconvergence in the optimization process you usually have to increase the value for \eqn{\mathit{NP}}{NP}, but often you only have to adjust \eqn{\mathit{F}}{F} to be a little lower or higher than 0.8. If you increase \eqn{\mathit{NP}}{NP} and simultaneously lower \eqn{\mathit{F}}{F} a little, convergence is more likely to occur but generally takes longer, i.e., DE is getting more robust (there is always a convergence speed/robustness trade-off). DE is much more sensitive to the choice of \eqn{\mathit{F}}{F} than it is to the choice of \eqn{\mathit{CR}}{CR}. \eqn{\mathit{CR}}{CR} is more like a fine tuning element. High values of \eqn{\mathit{CR}}{CR} like \eqn{\mathit{CR} = 1}{CR = 1} give faster convergence if convergence occurs. Sometimes, however, you have to go down as much as \eqn{\mathit{CR} = 0}{CR = 0} to make DE robust enough for a particular problem. For more details on the DE strategy, we refer the reader to Storn and Price (1997) and Price et al. (2006). } \references{ Differential Evolution homepage: URL \url{http://www.icsi.berkeley.edu/~storn/code.html}. Ardia, D., Boudt, K., Carl, P., Mullen, K.M., Peterson, B.G. (2011) Differential Evolution with \pkg{DEoptim}. An Application to Non-Convex Portfolio Optimization. \emph{The R Journal}, 3(1), 27-34. URL \url{https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Ardia~et~al.pdf}. Ardia, D., Ospina Arango, J.D., Giraldo Gomez, N.D. (2011) Jump-Diffusion Calibration using Differential Evolution. \emph{Wilmott Magazine}, 55 (September), 76-79. URL \url{http://www.wilmott.com}. Mitchell, M. (1998) \emph{An Introduction to Genetic Algorithms}. The MIT Press. ISBN 0262631857. Mullen, K.M, Ardia, D., Gil, D., Windover, D., Cline, J. (2011). \pkg{DEoptim:} An R Package for Global Optimization by Differential Evolution. \emph{Journal of Statistical Software}, 40(6), 1-26. URL \url{http://www.jstatsoft.org/v40/i06/}. Price, K.V., Storn, R.M., Lampinen J.A. (2006) \emph{Differential Evolution - A Practical Approach to Global Optimization}. Berlin Heidelberg: Springer-Verlag. ISBN 3540209506. Storn, R. and Price, K. (1997) Differential Evolution -- A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces, \emph{Journal of Global Optimization}, 11:4, 341--359. } \author{ David Ardia, Katharine Mullen \email{mullenkate@gmail.com}, Brian Peterson and Joshua Ulrich. } \seealso{ \code{\link{DEoptim.control}} for control arguments, \code{\link{DEoptim-methods}} for methods on \code{DEoptim} objects, including some examples in plotting the results; \code{\link{optim}} or \code{\link{constrOptim}} for alternative optimization algorithms. } \examples{ ## Rosenbrock Banana function ## The function has a global minimum f(x) = 0 at the point (1,1). ## Note that the vector of parameters to be optimized must be the first ## argument of the objective function passed to DEoptim. Rosenbrock <- function(x){ x1 <- x[1] x2 <- x[2] 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 } ## DEoptim searches for minima of the objective function between ## lower and upper bounds on each parameter to be optimized. Therefore ## in the call to DEoptim we specify vectors that comprise the ## lower and upper bounds; these vectors are the same length as the ## parameter vector. lower <- c(-10,-10) upper <- -lower ## run DEoptim and set a seed first for replicability set.seed(1234) DEoptim(Rosenbrock, lower, upper) ## increase the population size DEoptim(Rosenbrock, lower, upper, DEoptim.control(NP = 100)) ## change other settings and store the output outDEoptim <- DEoptim(Rosenbrock, lower, upper, DEoptim.control(NP = 80, itermax = 400, F = 1.2, CR = 0.7)) ## plot the output plot(outDEoptim) ## 'Wild' function, global minimum at about -15.81515 Wild <- function(x) 10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.00001 * x^4 + 0.2 * x + 80 plot(Wild, -50, 50, n = 1000, main = "'Wild function'") outDEoptim <- DEoptim(Wild, lower = -50, upper = 50, control = DEoptim.control(trace = FALSE)) plot(outDEoptim) DEoptim(Wild, lower = -50, upper = 50, control = DEoptim.control(NP = 50)) ## The below examples shows how the call to DEoptim can be ## parallelized. ## Note that if your objective function requires packages to be ## loaded or has arguments supplied via \code{...}, these should be ## specified using the \code{packages} and \code{parVar} arguments ## in control. \dontrun{ Genrose <- function(x) { ## One generalization of the Rosenbrock banana valley function (n parameters) n <- length(x) ## make it take some time ... Sys.sleep(.001) 1.0 + sum (100 * (x[-n]^2 - x[-1])^2 + (x[-1] - 1)^2) } # get some run-time on simple problems maxIt <- 250 n <- 5 oneCore <- system.time( DEoptim(fn=Genrose, lower=rep(-25, n), upper=rep(25, n), control=list(NP=10*n, itermax=maxIt))) withParallel <- system.time( DEoptim(fn=Genrose, lower=rep(-25, n), upper=rep(25, n), control=list(NP=10*n, itermax=maxIt, parallelType=1))) ## Compare timings (oneCore) (withParallel) } } \keyword{nonlinear} \keyword{optimize} DEoptim/man/DEoptim.control.Rd0000755000176200001440000002706213024602027015703 0ustar liggesusers\name{DEoptim.control} \alias{DEoptim.control} \title{Control various aspects of the DEoptim implementation} \description{ Allow the user to set some characteristics of the Differential Evolution optimization algorithm implemented in \code{DEoptim}. } \usage{ DEoptim.control(VTR = -Inf, strategy = 2, bs = FALSE, NP = NA, itermax = 200, CR = 0.5, F = 0.8, trace = TRUE, initialpop = NULL, storepopfrom = itermax + 1, storepopfreq = 1, p = 0.2, c = 0, reltol, steptol, parallelType = 0, cluster = NULL, packages = c(), parVar = c(), foreachArgs = list()) } \arguments{ \item{VTR}{the value to be reached. The optimization process will stop if either the maximum number of iterations \code{itermax} is reached or the best parameter vector \code{bestmem} has found a value \code{fn(bestmem) <= VTR}. Default to \code{-Inf}.} \item{strategy}{defines the Differential Evolution strategy used in the optimization procedure:\cr \code{1}: DE / rand / 1 / bin (classical strategy)\cr \code{2}: DE / local-to-best / 1 / bin (default)\cr \code{3}: DE / best / 1 / bin with jitter\cr \code{4}: DE / rand / 1 / bin with per-vector-dither\cr \code{5}: DE / rand / 1 / bin with per-generation-dither\cr \code{6}: DE / current-to-p-best / 1\cr any value not above: variation to DE / rand / 1 / bin: either-or-algorithm. Default strategy is currently \code{2}. See *Details*. } \item{bs}{if \code{FALSE} then every mutant will be tested against a member in the previous generation, and the best value will proceed into the next generation (this is standard trial vs. target selection). If \code{TRUE} then the old generation and \code{NP} mutants will be sorted by their associated objective function values, and the best \code{NP} vectors will proceed into the next generation (best of parent and child selection). Default is \code{FALSE}.} \item{NP}{number of population members. Defaults to \code{NA}; if the user does not change the value of \code{NP} from \code{NA} or specifies a value less than 4 it is reset when \code{DEoptim} is called as \code{10*length(lower)}. For many problems it is best to set \code{NP} to be at least 10 times the length of the parameter vector. } \item{itermax}{the maximum iteration (population generation) allowed. Default is \code{200}.} \item{CR}{crossover probability from interval [0,1]. Default to \code{0.5}.} \item{F}{differential weighting factor from interval [0,2]. Default to \code{0.8}.} \item{trace}{Positive integer or logical value indicating whether printing of progress occurs at each iteration. The default value is \code{TRUE}. If a positive integer is specified, printing occurs every \code{trace} iterations. } \item{initialpop}{an initial population used as a starting population in the optimization procedure. May be useful to speed up the convergence. Default to \code{NULL}. If given, each member of the initial population should be given as a row of a numeric matrix, so that \code{initialpop} is a matrix with \code{NP} rows and a number of columns equal to the length of the parameter vector to be optimized. } \item{storepopfrom}{from which generation should the following intermediate populations be stored in memory. Default to \code{itermax + 1}, i.e., no intermediate population is stored.} \item{storepopfreq}{the frequency with which populations are stored. Default to \code{1}, i.e., every intermediate population is stored.} \item{p}{when \code{strategy = 6}, the top (100 * p)\% best solutions are used in the mutation. \code{p} must be defined in (0,1].} \item{c}{\code{c} controls the speed of the crossover adaptation. Higher values of \code{c} give more weight to the current successful mutations. \code{c} must be defined in (0,1].} \item{reltol}{relative convergence tolerance. The algorithm stops if it is unable to reduce the value by a factor of \code{reltol * (abs(val) + reltol)} after \code{steptol} steps. Defaults to \code{sqrt(.Machine$double.eps)}, typically about \code{1e-8}.} \item{steptol}{see \code{reltol}. Defaults to \code{itermax}.} \item{parallelType}{Defines the type of parallelization to employ, if any. \code{0}: The default, this uses \code{DEoptim} on one only one core. \code{1}: This uses all available cores, via the \pkg{parallel} package, to run \code{DEoptim}. If \code{parallelType=1}, then the \code{packages} argument and the \code{parVar} argument need to specify the packages required by the objective function and the variables required in the environment, respectively. \code{2}: This uses the \pkg{foreach} package for parallelism; see the \code{sandbox} directory in the source code for examples. If \code{parallelType=2}, then the \code{foreachArgs} argument can pass the options to be called with \code{foreach}. } \item{cluster}{Existing \pkg{parallel} cluster object. If provided, overrides + specified \code{parallelType}. Using \code{cluster} allows fine-grained control + over the number of used cores and exported data.} \item{packages}{Used if \code{parallelType=1}; a list of package names (as strings) that need to be loaded for use by the objective function. } \item{parVar}{Used if \code{parallelType=1}; a list of variable names (as strings) that need to exist in the environment for use by the objective function or are used as arguments by the objective function. } \item{foreachArgs}{A list of named arguments for the \code{foreach} function from the package \pkg{foreach}. The arguments \code{i}, \code{.combine} and \code{.export} are not possible to set here; they are set internally. } } \value{ The default value of \code{control} is the return value of \code{DEoptim.control()}, which is a list (and a member of the \code{S3} class \code{DEoptim.control}) with the above elements. } \details{ This defines the Differential Evolution strategy used in the optimization procedure, described below in the terms used by Price et al. (2006); see also Mullen et al. (2009) for details. \itemize{ \item \code{strategy = 1}: DE / rand / 1 / bin. \cr This strategy is the classical approach for DE, and is described in \code{\link{DEoptim}}. \item \code{strategy = 2}: DE / local-to-best / 1 / bin. \cr In place of the classical DE mutation the expression \deqn{ v_{i,g} = old_{i,g} + (best_{g} - old_{i,g}) + x_{r0,g} + F \cdot (x_{r1,g} - x_{r2,g}) }{ v_i,g = old_i,g + (best_g - old_i,g) + x_r0,g + F * (x_r1,g - x_r2,g) } is used, where \eqn{old_{i,g}}{old_i,g} and \eqn{best_{g}}{best_g} are the \eqn{i}-th member and best member, respectively, of the previous population. This strategy is currently used by default. \item \code{strategy = 3}: DE / best / 1 / bin with jitter.\cr In place of the classical DE mutation the expression \deqn{ v_{i,g} = best_{g} + jitter + F \cdot (x_{r1,g} - x_{r2,g}) }{ v_i,g = best_g + jitter + F * (x_r1,g - x_r2,g) } is used, where \eqn{jitter} is defined as 0.0001 * \code{rand} + F. \item \code{strategy = 4}: DE / rand / 1 / bin with per vector dither.\cr In place of the classical DE mutation the expression \deqn{ v_{i,g} = x_{r0,g} + dither \cdot (x_{r1,g} - x_{r2,g}) }{ v_i,g = x_r0,g + dither * (x_r1,g - x_r2,g) } is used, where \eqn{dither} is calculated as \eqn{F + \code{rand} * (1 - F)}. \item \code{strategy = 5}: DE / rand / 1 / bin with per generation dither.\cr The strategy described for \code{4} is used, but \eqn{dither} is only determined once per-generation. \item \code{strategy = 6}: DE / current-to-p-best / 1.\cr The top \eqn{(100*p)} percent best solutions are used in the mutation, where \eqn{p} is defined in \eqn{(0,1]}. \item any value not above: variation to DE / rand / 1 / bin: either-or algorithm.\cr In the case that \code{rand} < 0.5, the classical strategy \code{strategy = 1} is used. Otherwise, the expression \deqn{ v_{i,g} = x_{r0,g} + 0.5 \cdot (F + 1) \cdot (x_{r1,g} + x_{r2,g} - 2 \cdot x_{r0,g}) }{ v_i,g = x_r0,g + 0.5 * (F + 1) * (x_r1,g + x_r2,g - 2 * x_r0,g) } is used. } Several conditions can cause the optimization process to stop: \itemize{ \item{if the best parameter vector (\code{bestmem}) produces a value less than or equal to \code{VTR} (i.e. \code{fn(bestmem) <= VTR}), or} \item{if the maximum number of iterations is reached (\code{itermax}), or} \item{if a number (\code{steptol}) of consecutive iterations are unable to reduce the best function value by a certain amount (\code{reltol * (abs(val) + reltol)}). \code{100*reltol} is approximately the percent change of the objective value required to consider the parameter set an improvement over the current best member.} } Zhang and Sanderson (2009) define several extensions to the DE algorithm, including strategy 6, DE/current-to-p-best/1. They also define a self-adaptive mechanism for the other control parameters. This self-adaptation will speed convergence on many problems, and is defined by the control parameter \code{c}. If \code{c} is non-zero, crossover and mutation will be adapted by the algorithm. Values in the range of \code{c=.05} to \code{c=.5} appear to work best for most problems, though the adaptive algorithm is robust to a wide range of \code{c}. } \note{ Further details and examples of the \R package \pkg{DEoptim} can be found in Mullen et al. (2011) and Ardia et al. (2011a, 2011b) or look at the package's vignette by typing \code{vignette("DEoptim")}. Also, an illustration of the package usage for a high-dimensional non-linear portfolio optimization problem is available by typing \code{vignette("DEoptimPortfolioOptimization")}. Please cite the package in publications. Use \code{citation("DEoptim")}. } \seealso{ \code{\link{DEoptim}} and \code{\link{DEoptim-methods}}. } \references{ Ardia, D., Boudt, K., Carl, P., Mullen, K.M., Peterson, B.G. (2011) Differential Evolution with \pkg{DEoptim}. An Application to Non-Convex Portfolio Optimization. URL \emph{The R Journal}, 3(1), 27-34. URL \url{https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Ardia~et~al.pdf}. Ardia, D., Ospina Arango, J.D., Giraldo Gomez, N.D. (2011) Jump-Diffusion Calibration using Differential Evolution. Wilmott Magazine, 55 (September), 76-79. URL \url{http://www.wilmott.com}. Mullen, K.M, Ardia, D., Gil, D., Windover, D., Cline, J. (2011). \pkg{DEoptim:} An R Package for Global Optimization by Differential Evolution. \emph{Journal of Statistical Software}, 40(6), 1-26. URL \url{http://www.jstatsoft.org/v40/i06/}. Price, K.V., Storn, R.M., Lampinen J.A. (2006) \emph{Differential Evolution - A Practical Approach to Global Optimization}. Berlin Heidelberg: Springer-Verlag. ISBN 3540209506. Zhang, J. and Sanderson, A. (2009) \emph{Adaptive Differential Evolution} Springer-Verlag. ISBN 978-3-642-01526-7 } \author{ David Ardia, Katharine Mullen \email{mullenkate@gmail.com}, Brian Peterson and Joshua Ulrich. } \examples{ ## set the population size to 20 DEoptim.control(NP = 20) ## set the population size, the number of iterations and don't ## display the iterations during optimization DEoptim.control(NP = 20, itermax = 100, trace = FALSE) } \keyword{nonlinear} \keyword{optimize} DEoptim/man/xrrData.Rd0000644000176200001440000000072111710674461014271 0ustar liggesusers\name{xrrData} \alias{xrrData} \docType{data} \title{X-ray reflectometry data} \usage{ data("xrrData") } \description{ See Mullen et al. (2011) for description of this dataset. } \references{ Mullen, K.M, Ardia, D., Gil, D., Windover, D., Cline, J. (2011). \emph{\pkg{DEoptim:} An R Package for Global Optimization by Differential Evolution}. Journal of Statistical Software, 40(6), 1-26. URL \url{http://www.jstatsoft.org/v40/i06/}. } \keyword{datasets} DEoptim/man/SMI.Rd0000644000176200001440000000071611710674461013320 0ustar liggesusers\name{SMI} \alias{SMI} \alias{y} \docType{data} \title{Swiss Market Index data} \usage{ data("SMI") } \description{ See Mullen et al. (2011) for description of this dataset. } \references{ Mullen, K.M, Ardia, D., Gil, D., Windover, D., Cline, J. (2011). \emph{\pkg{DEoptim:} An R Package for Global Optimization by Differential Evolution}. Journal of Statistical Software, 40(6), 1-26. URL \url{http://www.jstatsoft.org/v40/i06/}. } \keyword{datasets} DEoptim/DESCRIPTION0000644000176200001440000000156113624530755013336 0ustar liggesusersPackage: DEoptim Version: 2.2-5 Title: Global Optimization by Differential Evolution Authors@R: c(person("David", "Ardia", role = c("aut")), person("Katharine", "Mullen", role = c("aut", "cre"), email="mullenkate@gmail.com"), person("Brian", "Peterson", role = "aut"), person("Joshua", "Ulrich", role = "aut"), person("Kris", "Boudt", role = "ctb")) Description: Implements the differential evolution algorithm for global optimization of a real-valued function of a real-valued parameter vector. Suggests: foreach, iterators, colorspace, lattice Depends: parallel License: GPL (>= 2) Repository: CRAN Author: David Ardia [aut], Katharine Mullen [aut, cre], Brian Peterson [aut], Joshua Ulrich [aut], Kris Boudt [ctb] Maintainer: Katharine Mullen NeedsCompilation: yes Packaged: 2020-02-23 05:45:49 UTC; kmm Date/Publication: 2020-02-23 17:10:05 UTC DEoptim/build/0000755000176200001440000000000013624410615012714 5ustar liggesusersDEoptim/build/vignette.rds0000644000176200001440000000047113624410615015255 0ustar liggesusersPAO0QfLLHv/]4Vh#J_>, mm!<,/<@ϓԚWLJAiC_w9ȁ7mqm7V $!% N8cTQ9xa]exMNŵ0R-Oyϛ-@hǥ'm^-KQ2Y*wdfّTǚYD6V?`:#ׇOW45Ec˳;mAz*)hNY;i# ɒ)TOZDEoptim/src/0000755000176200001440000000000013624410615012404 5ustar liggesusersDEoptim/src/de4_0.c0000644000176200001440000005457613620172334013463 0ustar liggesusers /*************************************************************** Implementation of DE based loosely on DE-Engine v4.0, Rainer Storn, 2004 by Katharine Mullen, 2009 modified by Joshua Ulrich, 2010 Storn's MS Visual C++ v5.0 was downloaded from http://www.icsi.berkeley.edu/~storn/DeWin.zip Note that the struct t_pop was not used since we want to store in it a parameter vector of arbitrary length -- using a construction like typedef struct t_pop { double fa_cost[MAXCOST]; double fa_vector[]; } t_pop; I have not been able to use Calloc or R_alloc to set aside memory for type t_pop dynamically; I did not look into the bowels but believe this is likely a limitation of these functions. ***************************************************************/ /*------Include section----------------------------------------------*/ #include #include #include SEXP getListElement(SEXP list, char *str); SEXP DEoptimC(SEXP lower, SEXP upper, SEXP fn, SEXP control, SEXP rho, SEXP fnMap); void devol(double VTR, double d_weight, double fcross, int i_bs_flag, double *d_lower, double *d_upper, SEXP fcall, SEXP rho, int i_trace, int i_strategy, int i_D, int i_NP, int i_itermax, double *initialpopv, int i_storepopfreq, int i_storepopfrom, int i_specinitialpop, double *gt_bestP, double *gt_bestC, double *gd_pop, double *gd_storepop, double *gd_bestmemit, double *gd_bestvalit, int *gi_iter, double d_pPct, double d_c, long *l_nfeval, double d_reltol, int i_steptol, SEXP fnMap); void permute(int ia_urn2[], int i_urn2_depth, int i_NP, int i_avoid, int ia_urn1[]); double evaluate(long *l_nfeval, SEXP par, SEXP fcall, SEXP env); SEXP popEvaluate(long *l_nfeval, SEXP parMat, SEXP fcall, SEXP env, int incrementEval); /*------General functions-----------------------------------------*/ SEXP DEoptimC(SEXP lower, SEXP upper, SEXP fn, SEXP control, SEXP rho, SEXP fnMap) { int i, j, P=0; if (!isFunction(fn)) error("fn is not a function!"); if (!isEnvironment(rho)) error("rho is not an environment!"); /*-----Initialization of annealing parameters-------------------------*/ /* value to reach */ double VTR = NUMERIC_VALUE(getListElement(control, "VTR")); /* chooses DE-strategy */ int i_strategy = INTEGER_VALUE(getListElement(control, "strategy")); /* Maximum number of generations */ int i_itermax = INTEGER_VALUE(getListElement(control, "itermax")); /* Dimension of parameter vector */ int i_D = INTEGER_VALUE(getListElement(control, "npar")); /* Number of population members */ int i_NP = INTEGER_VALUE(getListElement(control, "NP")); /* When to start storing populations */ int i_storepopfrom = INTEGER_VALUE(getListElement(control, "storepopfrom"))-1; /* How often to store populations */ int i_storepopfreq = INTEGER_VALUE(getListElement(control, "storepopfreq")); /* User-defined inital population */ int i_specinitialpop = INTEGER_VALUE(getListElement(control, "specinitialpop")); double *initialpopv = NUMERIC_POINTER(getListElement(control, "initialpop")); /* stepsize */ double d_weight = NUMERIC_VALUE(getListElement(control, "F")); /* crossover probability */ double d_cross = NUMERIC_VALUE(getListElement(control, "CR")); /* Best of parent and child */ int i_bs_flag = NUMERIC_VALUE(getListElement(control, "bs")); /* Print progress? */ int i_trace = NUMERIC_VALUE(getListElement(control, "trace")); /* p to define the top 100p% best solutions */ double d_pPct = NUMERIC_VALUE(getListElement(control, "p")); /* crossover adaptation (a positive constant between 0 and 1) */ double d_c = NUMERIC_VALUE(getListElement(control, "c")); /* relative tolerance */ double d_reltol = NUMERIC_VALUE(getListElement(control, "reltol")); /* relative tolerance steps */ int i_steptol = NUMERIC_VALUE(getListElement(control, "steptol")); int i_nstorepop = ceil((i_itermax - i_storepopfrom) / i_storepopfreq); /* Use S_alloc, since it initializes with zeros FIXME: these should be SEXP */ double *gd_storepop = (double *)S_alloc(i_NP,sizeof(double) * i_D * i_nstorepop); /* External pointers to return to R */ SEXP sexp_bestmem, sexp_bestval, sexp_nfeval, sexp_iter, out, sexp_pop, sexp_storepop, sexp_bestmemit, sexp_bestvalit; PROTECT(sexp_bestmem = NEW_NUMERIC(i_D)); P++; PROTECT(sexp_pop = allocMatrix(REALSXP, i_D, i_NP)); P++; PROTECT(sexp_bestmemit = allocMatrix(REALSXP, i_itermax, i_D)); P++; PROTECT(sexp_bestvalit = allocVector(REALSXP, i_itermax)); P++; double *gt_bestP = REAL(sexp_bestmem); double *gd_pop = REAL(sexp_pop); double *gd_bestmemit = REAL(sexp_bestmemit); double *gd_bestvalit = REAL(sexp_bestvalit); /* ensure lower and upper are double */ if(TYPEOF(lower) != REALSXP) {PROTECT(lower = coerceVector(lower, REALSXP)); P++;} if(TYPEOF(upper) != REALSXP) {PROTECT(upper = coerceVector(upper, REALSXP)); P++;} double *d_lower = REAL(lower); double *d_upper = REAL(upper); double gt_bestC; int gi_iter = 0; long l_nfeval = 0; /*---optimization--------------------------------------*/ devol(VTR, d_weight, d_cross, i_bs_flag, d_lower, d_upper, fn, rho, i_trace, i_strategy, i_D, i_NP, i_itermax, initialpopv, i_storepopfrom, i_storepopfreq, i_specinitialpop, gt_bestP, >_bestC, gd_pop, gd_storepop, gd_bestmemit, gd_bestvalit, &gi_iter, d_pPct, d_c, &l_nfeval, d_reltol, i_steptol, fnMap); /*---end optimization----------------------------------*/ j = i_nstorepop * i_NP * i_D; PROTECT(sexp_storepop = NEW_NUMERIC(j)); P++; for (i = 0; i < j; i++) NUMERIC_POINTER(sexp_storepop)[i] = gd_storepop[i]; PROTECT(sexp_nfeval = ScalarInteger(l_nfeval)); P++; PROTECT(sexp_iter = ScalarInteger(gi_iter)); P++; PROTECT(sexp_bestval = ScalarReal(gt_bestC)); P++; const char *out_names[] = {"bestmem", "bestval", "nfeval", "iter", "bestmemit", "bestvalit", "pop", "storepop", ""}; PROTECT(out = mkNamed(VECSXP, out_names)); P++; SET_VECTOR_ELT(out, 0, sexp_bestmem); SET_VECTOR_ELT(out, 1, sexp_bestval); SET_VECTOR_ELT(out, 2, sexp_nfeval); SET_VECTOR_ELT(out, 3, sexp_iter); SET_VECTOR_ELT(out, 4, sexp_bestmemit); SET_VECTOR_ELT(out, 5, sexp_bestvalit); SET_VECTOR_ELT(out, 6, sexp_pop); SET_VECTOR_ELT(out, 7, sexp_storepop); UNPROTECT(P); return out; } void devol(double VTR, double d_weight, double d_cross, int i_bs_flag, double *d_lower, double *d_upper, SEXP fcall, SEXP rho, int trace, int i_strategy, int i_D, int i_NP, int i_itermax, double *initialpopv, int i_storepopfrom, int i_storepopfreq, int i_specinitialpop, double *gt_bestP, double *gt_bestC, double *gd_pop, double *gd_storepop, double *gd_bestmemit, double *gd_bestvalit, int *gi_iter, double d_pPct, double d_c, long *l_nfeval, double d_reltol, int i_steptol, SEXP fnMap) { #define URN_DEPTH 5 /* 4 + one index to avoid */ int P=0; /* initialize parameter vector to pass to evaluate function */ SEXP par; PROTECT(par = NEW_NUMERIC(i_D)); P++; /* Data structures for parameter vectors */ SEXP sexp_gta_popP, sexp_gta_oldP, sexp_gta_newP, sexp_map_pop; PROTECT(sexp_gta_popP = allocMatrix(REALSXP, i_NP, i_D)); P++; /* FIXME THIS HAD 2x the rows!!! */ PROTECT(sexp_gta_oldP = allocMatrix(REALSXP, i_NP, i_D)); P++; PROTECT(sexp_gta_newP = allocMatrix(REALSXP, i_NP, i_D)); P++; double *ngta_popP = REAL(sexp_gta_popP); /* FIXME THIS HAD 2x the rows!!! */ double *ngta_oldP = REAL(sexp_gta_oldP); double *ngta_newP = REAL(sexp_gta_newP); /* Data structures for objective function values associated with * parameter vectors */ SEXP sexp_gta_popC, sexp_gta_oldC, sexp_gta_newC; PROTECT(sexp_gta_popC = allocVector(REALSXP, i_NP)); P++; PROTECT(sexp_gta_oldC = allocVector(REALSXP, i_NP)); P++; PROTECT(sexp_gta_newC = allocVector(REALSXP, i_NP)); P++; double *ngta_popC = REAL(sexp_gta_popC); double *ngta_oldC = REAL(sexp_gta_oldC); double *ngta_newC = REAL(sexp_gta_newC); double *t_bestitP = (double *)R_alloc(1,sizeof(double) * i_D); SEXP sexp_t_tmpP, sexp_t_tmpC; PROTECT(sexp_t_tmpP = allocMatrix(REALSXP, i_NP, i_D)); P++; PROTECT(sexp_t_tmpC = allocVector(REALSXP, i_NP)); P++; double *nt_tmpP = REAL(sexp_t_tmpP); double *nt_tmpC = REAL(sexp_t_tmpC); int i, j, k; /* counting variables */ int i_r1, i_r2, i_r3; /* placeholders for random indexes */ int ia_urn2[URN_DEPTH]; int ia_urnTemp[i_NP]; int popcnt, bestacnt; /* lazy cnters */ double d_jitter, d_dither; double t_bestC; double **initialpop = (double **)R_alloc(i_NP,sizeof(double *)); for (int i = 0; i < i_NP; i++) initialpop[i] = (double *)R_alloc(i_D,sizeof(double)); /* vars for DE/current-to-p-best/1 */ int i_pbest; int p_NP = round(d_pPct * i_NP); /* choose at least two best solutions */ p_NP = p_NP < 2 ? 2 : p_NP; int sortIndex[i_NP]; /* sorted values of gta_oldC */ for(i = 0; i < i_NP; i++) sortIndex[i] = i; //double goodCR = 0, goodF = 0, goodF2 = 0, meanCR = 0.5, meanF = 0.5; double goodCR = 0, goodF = 0, goodF2 = 0, meanCR = d_cross, meanF = d_weight; int i_goodNP = 0; /* vars for when i_bs_flag == 1 */ // int i_len, done, step, bound; // double tempC; GetRNGstate(); /* if initial population provided, initialize with values */ if (i_specinitialpop > 0) { k = 0; for (j = 0; j < i_D; j++) { for (i = 0; i < i_NP; i++) { initialpop[i][j] = initialpopv[k]; k += 1; } } } /*------Initialization-----------------------------*/ for (j = 0; j < i_D; j++) { for (i = 0; i < i_NP; i++) { if (i_specinitialpop <= 0) { /* random initial member */ ngta_popP[i+i_NP*j] = d_lower[j] + unif_rand() * (d_upper[j] - d_lower[j]); } else /* or user-specified initial member */ ngta_popP[i+i_NP*j] = initialpop[i][j]; } } PROTECT(sexp_map_pop = popEvaluate(l_nfeval, sexp_gta_popP, fnMap, rho, 0)); memmove(REAL(sexp_gta_popP), REAL(sexp_map_pop), i_NP * i_D * sizeof(double)); // valgrind reports memory overlap here UNPROTECT(1); // sexp_map_pop PROTECT(sexp_gta_popC = popEvaluate(l_nfeval, sexp_gta_popP, fcall, rho, 1)); ngta_popC = REAL(sexp_gta_popC); for (i = 0; i < i_NP; i++) { if (i == 0 || ngta_popC[i] <= t_bestC) { t_bestC = ngta_popC[i]; for (j = 0; j < i_D; j++) gt_bestP[j]=ngta_popP[i+i_NP*j]; } } /*---assign pointers to current ("old") population---*/ memmove(REAL(sexp_gta_oldP), REAL(sexp_gta_popP), i_NP * i_D * sizeof(double)); memmove(REAL(sexp_gta_oldC), REAL(sexp_gta_popC), i_NP * sizeof(double)); UNPROTECT(1); // sexp_gta_popC /*------Iteration loop--------------------------------------------*/ int i_iter = 0; popcnt = 0; bestacnt = 0; int i_iter_tol = 0; while ((i_iter < i_itermax) && (t_bestC > VTR) && (i_iter_tol <= i_steptol)) { /* store intermediate populations */ if (i_iter % i_storepopfreq == 0 && i_iter >= i_storepopfrom) { for (i = 0; i < i_NP; i++) { for (j = 0; j < i_D; j++) { gd_storepop[popcnt] = ngta_oldP[i+i_NP*j]; popcnt++; } } } /* end store pop */ /* store the best member */ for(j = 0; j < i_D; j++) { gd_bestmemit[bestacnt] = gt_bestP[j]; bestacnt++; } /* store the best value */ gd_bestvalit[i_iter] = t_bestC; for (j = 0; j < i_D; j++) t_bestitP[j] = gt_bestP[j]; i_iter++; /*----compute dithering factor -----------------*/ if (i_strategy == 5) d_dither = d_weight + unif_rand() * (1.0 - d_weight); /*---DE/current-to-p-best/1 ----------------------------------------------*/ if (i_strategy == 6) { /* create a copy of gta_oldC to avoid changing it */ double temp_oldC[i_NP]; for(j = 0; j < i_NP; j++) temp_oldC[j] = ngta_oldC[j]; /* sort temp_oldC to use sortIndex later */ rsort_with_index( (double*)temp_oldC, (int*)sortIndex, i_NP ); } /*----start of loop through ensemble------------------------*/ for (i = 0; i < i_NP; i++) { /*t_tmpP is the vector to mutate and eventually select*/ for (j = 0; j < i_D; j++) nt_tmpP[i+i_NP*j] = ngta_oldP[i+i_NP*j]; nt_tmpC[i] = ngta_oldC[i]; permute(ia_urn2, URN_DEPTH, i_NP, i, ia_urnTemp); /* Pick 4 random and distinct */ i_r1 = ia_urn2[1]; /* population members */ i_r2 = ia_urn2[2]; i_r3 = ia_urn2[3]; if (d_c > 0) { d_cross = rnorm(meanCR, 0.1); d_cross = d_cross > 1.0 ? 1 : d_cross; d_cross = d_cross < 0.0 ? 0 : d_cross; do { d_weight = rcauchy(meanF, 0.1); d_weight = d_weight > 1 ? 1.0 : d_weight; }while(d_weight <= 0.0); } /*===Choice of strategy===============================================*/ j = (int)(unif_rand() * i_D); /* random parameter */ k = 0; do { switch (i_strategy) { case 1: { /*---classical strategy DE/rand/1/bin-------------------*/ nt_tmpP[i+i_NP*j] = ngta_oldP[i_r1+i_NP*j] + d_weight * (ngta_oldP[i_r2+i_NP*j] - ngta_oldP[i_r3+i_NP*j]); break; } case 2: { /*---DE/local-to-best/1/bin-----------------------------*/ nt_tmpP[i+i_NP*j] = nt_tmpP[i+i_NP*j] + d_weight * (t_bestitP[j] - nt_tmpP[i+i_NP*j]) + d_weight * (ngta_oldP[i_r2+i_NP*j] - ngta_oldP[i_r3+i_NP*j]); break; } case 3: { /*---DE/best/1/bin with jitter--------------------------*/ d_jitter = 0.0001 * unif_rand() + d_weight; nt_tmpP[i+i_NP*j] = t_bestitP[j] + d_jitter * (ngta_oldP[i_r1+i_NP*j] - ngta_oldP[i_r2+i_NP*j]); break; } case 4: { /*---DE/rand/1/bin with per-vector-dither---------------*/ nt_tmpP[i+i_NP*j] = ngta_oldP[i_r1+i_NP*j] + (d_weight + unif_rand()*(1.0 - d_weight))* (ngta_oldP[i_r2+i_NP*j]-ngta_oldP[i_r3+i_NP*j]); break; } case 5: { /*---DE/rand/1/bin with per-generation-dither-----------*/ nt_tmpP[i+i_NP*j] = ngta_oldP[i_r1+i_NP*j] + d_dither * (ngta_oldP[i_r2+i_NP*j] - ngta_oldP[i_r3+i_NP*j]); break; } case 6: { /*---DE/current-to-p-best/1 (JADE)----------------------*/ /* select from [0, 1, 2, ..., (pNP-1)] */ i_pbest = sortIndex[(int)(unif_rand() * p_NP)]; nt_tmpP[i+i_NP*j] = ngta_oldP[i+i_NP*j] + d_weight * (ngta_oldP[i_pbest+i_NP*j] - ngta_oldP[i+i_NP*j]) + d_weight * (ngta_oldP[i_r1+i_NP*j] - ngta_oldP[i_r2+i_NP*j]); break; } default: { /*---variation to DE/rand/1/bin: either-or-algorithm---*/ if (unif_rand() < 0.5) { /* differential mutation, Pmu = 0.5 */ nt_tmpP[i+i_NP*j] = ngta_oldP[i_r1+i_NP*j] + d_weight * (ngta_oldP[i_r2+i_NP*j] - ngta_oldP[i_r3+i_NP*j]); } else { /* recombination with K = 0.5*(F+1) -. F-K-Rule */ nt_tmpP[i+i_NP*j] = ngta_oldP[i_r1+i_NP*j] + 0.5 * (d_weight + 1.0) * (ngta_oldP[i_r2+i_NP*j] + ngta_oldP[i_r3+i_NP*j] - 2 * ngta_oldP[i_r1+i_NP*j]); } } } /* end switch */ j = (j + 1) % i_D; k++; }while((unif_rand() < d_cross) && (k < i_D)); /*===End choice of strategy===========================================*/ /*----boundary constraints, bounce-back method was not enforcing bounds correctly*/ for (j = 0; j < i_D; j++) { if (nt_tmpP[i+i_NP*j] < d_lower[j]) { nt_tmpP[i+i_NP*j] = d_lower[j] + unif_rand() * (d_upper[j] - d_lower[j]); } if (nt_tmpP[i+i_NP*j] > d_upper[j]) { nt_tmpP[i+i_NP*j] = d_upper[j] - unif_rand() * (d_upper[j] - d_lower[j]); } } } /* NEW End mutation loop through ensemble */ /*------Trial mutation now in t_tmpP-----------------*/ /* evaluate mutated population */ if(i_iter > 1) UNPROTECT(1); // previous iteration's sexp_t_tmpC PROTECT(sexp_map_pop = popEvaluate(l_nfeval, sexp_t_tmpP, fnMap, rho, 0)); memmove(REAL(sexp_t_tmpP), REAL(sexp_map_pop), i_NP * i_D * sizeof(double)); // valgrind reports memory overlap here UNPROTECT(1); // sexp_map_pop PROTECT(sexp_t_tmpC = popEvaluate(l_nfeval, sexp_t_tmpP, fcall, rho, 1)); nt_tmpC = REAL(sexp_t_tmpC); /* compare old pop with mutated pop */ for (i = 0; i < i_NP; i++) { /* note that i_bs_flag means that we will choose the *best NP vectors from the old and new population later*/ if (nt_tmpC[i] <= ngta_oldC[i] || i_bs_flag) { /* replace target with mutant */ for (j = 0; j < i_D; j++) ngta_newP[i+i_NP*j]=nt_tmpP[i+i_NP*j]; ngta_newC[i]=nt_tmpC[i]; if (nt_tmpC[i] <= t_bestC) { for (j = 0; j < i_D; j++) gt_bestP[j]=nt_tmpP[i+i_NP*j]; t_bestC=nt_tmpC[i]; } if (d_c > 0) { /* calculate new goodCR and goodF */ goodCR += d_cross / ++i_goodNP; goodF += d_weight; goodF2 += pow(d_weight,2.0); } } else { for (j = 0; j < i_D; j++) ngta_newP[i+i_NP*j]=ngta_oldP[i+i_NP*j]; ngta_newC[i]=ngta_oldC[i]; } } /* End mutation loop through ensemble */ if (d_c > 0) { /* calculate new meanCR and meanF */ meanCR = (1-d_c)*meanCR + d_c*goodCR; meanF = (1-d_c)*meanF + d_c*goodF2/goodF; } if(i_bs_flag) { /* FIXME */ error("bs = TRUE not currently supported"); // /* examine old and new pop. and take the best NP members // * into next generation */ // for (i = 0; i < i_NP; i++) { // for (j = 0; j < i_D; j++) // gta_popP[i][j] = gta_oldP[i][j]; // gta_popC[i] = gta_oldC[i]; // } // for (i = 0; i < i_NP; i++) { // for (j = 0; j < i_D; j++) // gta_popP[i_NP+i][j] = gta_newP[i][j]; // gta_popC[i_NP+i] = gta_newC[i]; // } // i_len = 2 * i_NP; // step = i_len; /* array length */ // while (step > 1) { // step /= 2; /* halve the step size */ // do { // done = 1; // bound = i_len - step; // for (j = 0; j < bound; j++) { // i = j + step + 1; // if (gta_popC[j] > gta_popC[i-1]) { // for (k = 0; k < i_D; k++) // tempP[k] = gta_popP[i-1][k]; // tempC = gta_popC[i-1]; // for (k = 0; k < i_D; k++) // gta_popP[i-1][k] = gta_popP[j][k]; // gta_popC[i-1] = gta_popC[j]; // for (k = 0; k < i_D; k++) // gta_popP[j][k] = tempP[k]; // gta_popC[j] = tempC; // done = 0; // /* if a swap has been made we are not finished yet */ // } /* if */ // } /* for */ // } while (!done); /* while */ // } /*while (step > 1) */ // /* now the best NP are in first NP places in gta_pop, use them */ // for (i = 0; i < i_NP; i++) { // for (j = 0; j < i_D; j++) // gta_newP[i][j] = gta_popP[i][j]; // gta_newC[i] = gta_popC[i]; // } } /*i_bs_flag*/ /* have selected NP mutants move on to next generation */ for (i = 0; i < i_NP; i++) { for (j = 0; j < i_D; j++) ngta_oldP[i+i_NP*j] = ngta_newP[i+i_NP*j]; ngta_oldC[i] = ngta_newC[i]; } for (j = 0; j < i_D; j++) t_bestitP[j] = gt_bestP[j]; if( trace > 0 ) { if( (i_iter % trace) == 0 ) { Rprintf("Iteration: %d bestvalit: %f bestmemit:", i_iter, t_bestC); for (j = 0; j < i_D; j++) Rprintf("%12.6f", gt_bestP[j]); Rprintf("\n"); } } /* check for user interrupt */ /*if( i_iter % 10000 == 999 ) R_CheckUserInterrupt();*/ /* check relative tolerance (as in src/main/optim.c) */ if( gd_bestvalit[i_iter-1] - t_bestC < (d_reltol * (fabs(gd_bestvalit[i_iter-1]) + d_reltol))) { i_iter_tol++; } else { i_iter_tol = 0; } } /* end iteration loop */ /* last population */ k = 0; for (i = 0; i < i_NP; i++) { for (j = 0; j < i_D; j++) { gd_pop[k] = ngta_oldP[i+i_NP*j]; k++; } } *gi_iter = i_iter; *gt_bestC = t_bestC; PutRNGstate(); UNPROTECT(P+1); } void permute(int ia_urn2[], int i_urn2_depth, int i_NP, int i_avoid, int ia_urn1[]) /******************************************************************** ** Function : void permute(int ia_urn2[], int i_urn2_depth) ** Author : Rainer Storn (w/bug fixes contributed by DEoptim users) ** Description : Generates i_urn2_depth random indices ex [0, i_NP-1] ** which are all distinct. This is done by using a ** permutation algorithm called the "urn algorithm" ** which goes back to C.L.Robinson. ** Functions : - ** Globals : - ** Parameters : ia_urn2 (O) array containing the random indices ** i_urn2_depth (I) number of random indices (avoided index included) ** i_NP (I) range of indices is [0, i_NP-1] ** i_avoid (I) is the index to avoid and is located in ** ia_urn2[0]. ** Preconditions : # Make sure that ia_urn2[] has a length of i_urn2_depth. ** # i_urn2_depth must be smaller than i_NP. ** Postconditions : # the index to be avoided is in ia_urn2[0], so fetch the ** indices from ia_urn2[i], i = 1, 2, 3, ..., i_urn2_depth. ** Return Value : - *********************************************************************/ { GetRNGstate(); int k = i_NP; int i_urn1 = 0; int i_urn2 = 0; for (int i = 0; i < i_NP; i++) ia_urn1[i] = i; /* initialize urn1 */ i_urn1 = i_avoid; /* get rid of the index to be avoided and place it in position 0. */ while (k > i_NP - i_urn2_depth) /* i_urn2_depth is the amount of indices wanted (must be <= NP) */ { ia_urn2[i_urn2] = ia_urn1[i_urn1]; /* move it into urn2 */ ia_urn1[i_urn1] = ia_urn1[k-1]; /* move highest index to fill gap */ k = k - 1; /* reduce number of accessible indices */ i_urn2 = i_urn2 + 1; /* next position in urn2 */ i_urn1 = (int)(unif_rand() * k); /* choose a random index */ } PutRNGstate(); } DEoptim/src/get_element.c0000755000176200001440000000051313025612741015041 0ustar liggesusers#include #include SEXP getListElement(SEXP list, char *str) { SEXP elmt = R_NilValue, names = getAttrib(list, R_NamesSymbol); int i; for (i = 0; i < length(list); i++) if (strcmp(CHAR(STRING_ELT(names, i)), str) == 0) { elmt = VECTOR_ELT(list, i); break; } return elmt; } DEoptim/src/DEoptim_init.c0000644000176200001440000000076713624161643015152 0ustar liggesusers#include #include #include // for NULL #include /* FIXME: Check these declarations against the C/Fortran source code. */ /* .Call calls */ extern SEXP DEoptimC(SEXP, SEXP, SEXP, SEXP, SEXP, SEXP); static const R_CallMethodDef CallEntries[] = { {"DEoptimC", (DL_FUNC) &DEoptimC, 6}, {NULL, NULL, 0} }; void R_init_DEoptim(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); } DEoptim/src/evaluate.c0000755000176200001440000000271713624156651014377 0ustar liggesusers#include #include /*------objective function---------------------------------------*/ double evaluate(long *l_nfeval, SEXP par, SEXP fcall, SEXP env) { SEXP sexp_fvec, fn; double f_result; PROTECT(fn = lang3(fcall, par, R_DotsSymbol)); (*l_nfeval)++; /* increment function evaluation count */ PROTECT(sexp_fvec = eval(fn, env)); f_result = NUMERIC_POINTER(sexp_fvec)[0]; if(ISNAN(f_result)) error("NaN value of objective function! \nPerhaps adjust the bounds."); UNPROTECT(2); return(f_result); } SEXP popEvaluate(long *l_nfeval, SEXP parMat, SEXP fcall, SEXP env, int incrementEval) { SEXP sexp_fvec, fn; double *d_result; int P = 0; PROTECT(fn = lang3(fcall, parMat, R_DotsSymbol)); P++; (*l_nfeval)++; /* increment function evaluation count */ PROTECT(sexp_fvec = eval(fn, env)); P++; int nr = nrows(sexp_fvec); if(nr != nrows(parMat)) error("objective function result has different length than parameter matrix"); switch(TYPEOF(sexp_fvec)) { case INTSXP: PROTECT(sexp_fvec = coerceVector(sexp_fvec, REALSXP)); P++; break; case REALSXP: break; default: error("unsupported objective function return value"); break; } d_result = REAL(sexp_fvec); for(int i=0; i < nr; i++) { if(ISNAN(d_result[i])) error("NaN value of objective function! \nPerhaps adjust the bounds."); } UNPROTECT(P); return(sexp_fvec); } DEoptim/vignettes/0000755000176200001440000000000013624410615013625 5ustar liggesusersDEoptim/vignettes/DEoptim.bib0000644000176200001440000002121113024162014015630 0ustar liggesusers% This file was created with JabRef 2.5. % Encoding: UTF-8 @MANUAL{r_env, title = {{\proglang{R}}: A Language and Environment for Statistical Computing}, author = {{\proglang{R} Development Core Team}}, organization = {\proglang{R} Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2011}, note = {{ISBN 3-900051-07-0}}, url = {http://www.R-project.org} } @ARTICLE{Ardia:Ospina:Giraldo:2011, author = {David Ardia and Juan Ospina Arango and Norman Giraldo Gomez}, title = {{J}ump-Diffusion Calibration using {D}ifferential {E}volution}, journal = {Wilmott Magazine}, year = {2011}, volume = {55}, pages = {76-79}, month = {September} } @ARTICLE{ArdiaBoudtCarlMullenPeterson2011, author = {David Ardia and Kris Boudt and Peter Carl and Katharine M. Mullen and Brian G. Peterson}, title = {{D}ifferential {E}volution with {DEoptim}: An Application to Non-Convex Portfolio Optimization}, journal = {The R Journal}, year = {2011}, volume = {3}, pages = {27--34}, number = {1} } @MANUAL{DEoptim, title = {{\pkg{DEoptim}}: Differential Evolution Optimization in \proglang{R}}, author = {Ardia, David and Mullen, Katharine and Brian G. Peterson and Joshua Ulrich}, year = {2011}, url = {http://CRAN.R-project.org/package=DEoptim} } @ARTICLE{genx, author = {Bj{\"{o}}rck, Matts and Andersson, Gabriella}, title = {{{\it GenX}: An Extensible X-ray Reflectivity Refinement Program Utilizing Differential Evolution}}, journal = {Journal of Applied Crystallography}, year = {2007}, volume = {40}, pages = {1174--1178}, number = {6} } @MISC{PortAnalytics, author = {Boudt, Kris and Carl, Peter and Brian G. Peterson}, title = {{PortfolioAnalytics}: Portfolio Analysis, including numeric methods for optimization of portfolios}, year = {2011}, note = {R package version 0.6}, owner = {brian}, timestamp = {2008.02.01}, url = {https://r-forge.r-project.org/R/?group_id=579} } @MISC{BoudtCarlPeterson2010, author = {Boudt, Kris and Carl, Peter and Peterson, Brian G.}, title = {Portfolio Optimization with Conditional Value-at-Risk Budgets}, month = jan, year = {2010}, owner = {ardiad}, timestamp = {2010.02.09} } @INPROCEEDINGS{BoudtPetersonCarl2008, author = {Boudt, Kris and Peterson, Brian G and Carl, Peter}, title = {Hedge Fund Portfolio Selection with Modified Expected Shortfall}, booktitle = {Computational Finance and its Applications III}, year = {2008}, editor = {Brebbia, C. and Constantino, M. and Larran, M.}, series = {WIT Transactions on Modelling and Simulation}, publisher = {WIT, Southampton}, owner = {Administrator}, timestamp = {2010.02.01} } @ARTICLE{Boudt2008, author = {Boudt, Kris and Peterson, Brian G. and Croux, Christophe}, title = {Estimation and Decomposition of Downside Risk for Portfolios with Non-Normal Returns}, journal = {Journal of Risk}, year = {2008}, volume = {11}, pages = {79-103}, number = {2}, keywords = {Value at Risk, VaR, Component Value at Risk, Expected Shortfall, ES, Conditional Value at Risk, CVaR, risk contribution, portfolio allocation, Cornish-Fisher expansion, Edgeworth expansion}, owner = {brian}, timestamp = {2007.09.12} } @BOOK{bowden, title = {X-Ray Metrology in Semiconductor Manufacturing}, publisher = {CRC Press}, year = {2006}, author = {D. Keith Bowen and Brian K. Tanner} } @ARTICLE{Borner:Higgins:Kantelhardt:Scheiter:07, author = {B{\"{o}}rner, Jan and Higgins, Steven I. and Kantelhardt, Jochen and Scheiter, Simon}, title = {Rainfall or Price Variability: What Determines Rangeland Management Decisions? A Simulation-Optimization Approach to {S}outh {A}frican Savanas}, journal = {Agricultural Economics}, year = {2007}, volume = {37}, pages = {189--200}, number = {2--3}, owner = {ardiad}, pdf = {BornerHigginsKantelhardtScheiter_RainfallOrPriceVariabilityWhatDeterminesRangelandManagementDecisionsASimulationOptimizationApproachToSouthAfricanSavannas.PDF}, timestamp = {2009.12.03} } @MANUAL{PerformanceAnalytics, title = {PerformanceAnalytics: Econometric tools for performance and risk analysis.}, author = {Peter Carl and Brian G. Peterson}, year = {2010}, note = {R package version 1.0.3.2}, owner = {ardiad}, timestamp = {2011.05.11}, url = {http://CRAN.R-project.org/package=PerformanceAnalytics} } @MANUAL{RcppDE, title = {{\pkg{RcppDE}}: Global optimization by differential evolution in \proglang{C++}}, author = {Dirk Eddelbuettel}, year = {2010}, note = {\proglang{R} package version 0.1.0}, url = {http://CRAN.R-project.org/package=RcppDE} } @ARTICLE{Higgins:Kantelhardt:Scheiter:Boerner:07, author = {Higgins, Steven I. and Kantelhardt, Jochen and Scheiter, Simon and Boerner, Jan}, title = {Sustainable Management of Extensively Managed Savanna Rangelands}, journal = {Ecological Economics}, year = {2007}, volume = {62}, pages = {102--114}, number = {1}, owner = {ardiad}, pdf = {HigginsKantelhardtScheiterBoerner_SustainableManagementOfExtensivelyManagedSavannaRangelands.PDF}, timestamp = {2009.12.03} } @BOOK{holland, title = {Adaptation in Natural Artificial Systems}, publisher = {University of Michigan Press}, year = {1975}, author = {Holland, John H.}, address = {Ann Arbor} } @BOOK{mitchell, title = {An Introduction to Genetic Algorithms}, publisher = {The MIT Press}, year = {1998}, author = {Mitchell, Melanie} } @ARTICLE{DEoptimJSS2011, author = {Katharine Mullen and David Ardia and David Gil and Donald Windover and James Cline}, title = {{DEoptim}: An {R} Package for Global Optimization by Differential Evolution}, journal = {Journal of Statistical Software}, year = {2011}, volume = {40}, pages = {1--26}, number = {6}, url = {http://www.jstatsoft.org/v40/i06/} } @BOOK{nash, title = {Compact Numerical Methods for Computers: Linear Algebra and Function Minimisation}, publisher = {Adam Hilger}, year = {1990}, author = {Nash, John C.} } @ARTICLE{motofit, author = {Nelson, Andrew}, title = {Co-Refinement of Multiple-Contrast Neutron/{X}-Ray Reflectivity Data Using {\it MOTOFIT}}, journal = {Journal of Applied Crystallography}, year = {2006}, volume = {39}, pages = {273--276}, number = {2} } @MASTERSTHESIS{OpsinaArango:09, author = {Opsina~Arango, JD}, title = {Estimacion de un Modelo de Difusion con Saltos con Distribucion de Error Generalizada Asimetrica usando Algorithmos Evolutivos}, school = {Universidad Nacional de Colombia}, year = {2009} } @BOOK{Price:Storn:Lampinen:06, title = {Differential Evolution: A Practical Approach to Global Optimization}, publisher = {Springer-Verlag}, year = {2006}, author = {Price, Kenneth V. and Storn, Rainer M. and Lampinen, Jouni A.}, address = {Berlin, Germany} } @MANUAL{foreach, title = {foreach: Foreach looping construct for R}, author = {{REvolution Computing}}, year = {2009}, note = {R package version 1.3.0}, owner = {ardiad}, timestamp = {2011.05.11}, url = {http://CRAN.R-project.org/package=foreach} } @MANUAL{quantmod, title = {quantmod: Quantitative Financial Modelling Framework}, author = {Jeffrey A. Ryan}, year = {2010}, note = {R package version 0.3-15}, owner = {ardiad}, timestamp = {2011.05.11}, url = {http://CRAN.R-project.org/package=quantmod} } @ARTICLE{price, author = {Storn, Rainer and Price, Kenneth}, title = {Differential Evolution -- A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces}, journal = {Journal of Global Optimization}, year = {1997}, volume = {11}, pages = {341--359}, number = {4} } @ARTICLE{taylor, author = {Mark Taylor and John Wall and Neil Loxley and Matthew Wormington and Tamzin Lafford}, title = {High Resolution {X}-Ray Diffraction Using a High Brilliance Source, with Rapid Data Analysis by Auto-Fitting}, journal = {Materials Science and Engineering B}, year = {2001}, volume = {80}, pages = {95 - 98}, number = {1-3} } @ARTICLE{worm, author = {Wormington, Matthew and Panaccione, Charles and Matney, Kevin M. and Bowen, D. Keith}, title = {Characterization of Structures from {X}-Ray Scattering Data Using Genetic Algorithms}, journal = {Philosophical Transactions of the Royal Society of London. Series A: Mathematical, Physical and Engineering Sciences}, year = {1999}, volume = {357}, pages = {2827--2848}, number = {1761} } @ARTICLE{jade, author = {Zhang, Jingqiao and Sanderson, Arthur C.}, title = {{JADE}: Adaptive {Differential Evolution} with Optional External Archive}, journal = {IEEE Transactions on Evolutionary Computation}, year = {2009}, volume = {13}, pages = {945--958}, number = {5}, address = {Piscataway, NJ, USA}, publisher = {IEEE Press} } DEoptim/vignettes/jsslogo.jpg0000644000176200001440000005431313024162004016003 0ustar liggesusersJFIFI CREATOR: XV Version 3.10 Rev: 12/16/94 Quality = 75, Smoothing = 0 C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?ٜddǃr9Nͤ$7~IY֘A)_kn lKөd@y`/ g4m0IjC)\hTc $㊜B} 8CR+N8}*o$SgQ΂̇bh@O*L_?r^F΂f;{R~Ɏ6iܑoz\v3O< FB0qZȞ6CYd&E,d'NX6og r: L96;VF *G V'KmMjw4ĝYIt;}iJ֯AGaGظ\,d4/ڴŨ=Tﲌs #ǥ8!h}0{R@( Oj<&8R ?nbvb Qg# ja$p)LDvϽ.p3y\U!86" qUyaX7j >'ҟ5}ӥ7`'^:S,@sK,T =)DY?JqO^sW=U+$ {bBOsG2)@"UH˜`6(qH@z-~@kp2zOAwJkE1siQ΅fP;s@<-pH&[s΂]"e(C)qX7?;.d+3J- N#c TY(Ͻ]/ٟyQ`mE;nG2 2QL!V2B>͜{exczu,5Uw0)6^*xBk`T|Ckpd==j敥Bt;Bp "s\'c(e;jXJJk'I0T:Aqi(4Q2ۧMH!N?*p*=(W10A#ҟfCM(;@␨9 W <V6sc"h;gZ~3dOڢp)|8lJ#qUr23D*] yKԂ"(zdz D&@ \pE]@Wq6D8PǧLA>m={{TW+G F6=id̋b҃*p?JaPq)1LJG&;:t!F_zrJX9W#£@K"j e&?Z irqRYHoҌ`}iT {f'I1N=pGRU#1׏jO(qM9^])1V|9?ؕ69g7qOSU#cCޞӔG=)Ò)q{!xC 494'ؐҙ=Lq4~CixFFH nG;\)UEr*y5.4⟵f6x@5ch)6uڋ sI5.iHڱ"d\*IzgJ={4VךQv8J?\=֏hy k+mI*1Mg'=+qv>[{K^!EܪNk~)BsZUHAPW{Q Ԃ0sVm~5s*RH^ sR6!~*N4 (XhxPG8<FIb=@viFA@9o[#=y+dIjyv XwE >ʇ2FU?(k[% z뭭@Pª\Z+vQNN:NWW5٭gzP&WcXd⁂rhx+\VA$P8i9 Ts)69g֙OCO 88#ANHAӃ~8*4>fN:f 9LH;fܐ~ȥ@fWO/83Qf44,dxSb\sx#t'ޙ"43?H1gG˸sզx 1y6}29ҋXGO+qp#8N(j(FwE_1F>')FffΐA\ =C%ŸHl,60q#Q^;%<,P*m76-Pɛ)95{-0ZW #'oʚ;7$VWEHH9WGggnv0F?IHo@M/q]I6O/G /j%`VgPd ΋VӦP{Y,t-GCY67=sHq돭puF95%IKK,H }JvN#ҚT=SԚP<A\IoaSj5lqVN#1k'A:fjAl!qYfM6S^j)Gz">׆̜5='D:VW(>3!,B`p_A 21d,lT/^m[nMI$؁OQ}q/X:IיQYÒ'50Jv븻#NM/<`(R)v8Nj78OCҤlUKD63<8VXOګp5$beتyR}F~gˏҝ&:RX*QɦV DhXE<(==ד*1Gp}M[{>o_v!GR}خc>J@)UQ{OO?Z]秥'sSF;Y7!fV;^'X}Ccnq"y3a챜T 7"aTz[<ҕnwFhoKTNTg?\ԋG[ĤP Vuvmn9Edk{ yvcdqwJXFJ[ء*ݜ#f~fDdmB"RZ}\[q䎞]n.1[I4 ȏR; 33HT{ſ{Ҙu2M;qZwOzZ秕b3ǥRR{fP`1W*TK0R%Qio+uNgTpMVF{}S5Ԑ9295OMċo0Cno[Լf9~듊ҷZyQVRdxʼ^J*I+Grާ~\qc#=;{W/v×U$HA:`zQH 9=sn\ѧ(BaNgyp@>o7o9dI6ʊ2KJP̐k]CI嘨'+2}vp#}953yxU_(2<>YfcJ•?͎})opeps\I#`(IsKDIw.HA8ԥ>J:_\BqXkF.N>+fWG@8Hxx mZ6xH9׽V2i7\#ʰ umNJ/洚'8ir1gz6mfo$b#\kևLw&as9o=H]!{㚈Z)VczWz t}f CAAէomo "B=+D")YxvT?:4OyxBCaFU8u~/5~qqP2}M;+-62{.k-uwO 9^ٰ.۸3wXkw)֟kKo3IQCI=lS[*dcs*"hbKnO&HѼ hVS]IQ<488\}ڍ<=i\gnqڐʂ{E{P'(&\Da1As1F~4d{@O*#q֗+zMr|w'viZB3L .wv[{0"%wjJ C`OQzݼWPdΰ<%kr'>j^f@8lܱ8lұ-IDA½~-ٹ=8yw%KkK@0^>!lW^v;{8}swͫ."6NI.ՠ?8&5>mPm *FWӚ؀JlszfD+֭X7[6?sgmtVfrI> L[v PDڍ5qѹ^ҳtc ALlhJDb2g`{We*.#Md,nߒ0lizp:Li7juXrr@ּi9P*?L&8ARR=h0z]RV9^S [_Hi/CPF' W cqk1ʻ;):rsҟ'n{\T^!cڐ6?cA֫=v;Ÿ ?\8|_h}ZHsiY%'x%q AVIQh+w1x)gB?i.?ַmJO?zӮ 9mnf#:L1BlhN͌=+/쑏ƒ C]uߌ:kc&rMrgZ)}Q}iɩA-Y杀yDjͳ!~&j5 foiy;u~o-y DnlVP-{0UCOZ^=i~q=}M?R䞼Iwl֏do8ce4li3jS|ًۣ0(M5%,ertlb> 1>mpb t"rB@z{aҭf)< ñLsMD٥5s 6O}:`6PqH- 5Z=:g'l D`QW-;5G9"0pҌL^* q9}@$BOzLP 1ϥ8 1@ J cq.pNޔz;f*J R⓽) Q/E;)F1ҜGғH :&pi tȠFx"D*1Q8iL`'Fm zʶ.Pmco\<` 7pFs(ȰܑX=8QoIP:6r1NyPXEMrbgiI4Xd֐S4@& m(> v}sMisA"q3sLNϯ5 -)hhqIjLsPG&A>SN"ݎi @8)@xa\x)2i^{f!=N=M >☮I3PN?:V 'kLMEnjffxuGQz3sLcObv3ғk=:֖.Jq޺=5ERsDDsuKU.v@c|}Nk'qcS c5Z"ʓ?JhHxP8? L84K9)OjLњfiT9P\⛚;'$sڋRQRQfPZq҂zEHH|dffsfWk^Oֲ/.MԌOc4I?pGnk@5W"'t@ Ba mZtCFi:qY;E+cȤ6h8vC~ݘQ&n*Q&:vEo>>P9QWRP,UÕ͋I.zZdB$(f؊p'oή8J>H?'Rb3wS1WEu=ZSڜδyi= ?})2}(#h# 1Ҏ p;1gC< aO4ex)N=+X#;)9ڏzSxQL'z 3Fx{џZhfCڏJ=i₄4v(#84dR{M.i2h& h$q'Jk1 R"DFjյц}Ozfݢ7h Ш:Rw<[(bOvkoc'9 gOHK2qG^^udObZobs:{ya L`XvtJ*52V˲-`W)d?Zմh ._b,掇;SvBYF~ЧKӥ4tg@0Kւ($/sIގ3߷-QIގ PSB:PH٦SM3[v$ 8|(-*Hmf'Vvrc"مmw6; )+qb]J6htҬ\+-G^Tg%2Iβ+$<{ֆo#$γ[$wl*t֤r{J&@cpOZȆ͹6j~ӵu훨.InکH[}BȻp*綞BѰBCϵ6XUUƏW^x{NIo[1>T>\Vg8}+o *3>T$}i\+dwUCs9w~^]2?+.4ɭ?EY&NVJ: fS⊔L"FihL4P1Fj&g *zCd \tץUx2?Ԗ1 R6sVY#Ԗ]$uԓh%f@!_z/R<2˶F2 2ӜR[qqMKc""7ʹ:u0J791e$T#?ZӖc+`nURk{2$tRGJNs]:1̷ŶzVƓ#J#UҒ?0]Dg[q\Bj#{$* y $t?S8| w?֗ϷqM''OJѳ!3ל֫K ("N}W4:`8ϭbټVdk2fXǗU46BAdGל_2rU\0/퍞4G Sb Ҷg]/IQ^p~QwfՕqIJfxATgb ozSzPږ 8+[c3MDhmϠiރچEsAE$"e@*xD{p1TLwVݕ8vZķ .n7@4 ū "P % gִ%ɲ!VeJܚ됴˰~ح[D =['S;mP8`GxX005}KuU9=4lʇqD2KCJWaH\0HwHNs!~v#iM;[l3P^OYF8ǥ>sJ1<jYq6,i#Pq@ΧH<m׭rZ\G]8o3³hL0㷥)'P5"RpVXiv!m3njI'Lt@'wlޝh4A u@ÆȬ N_0KabJX0N+"]@Ҫ6Č~4cj[p#'U\?h-EFnuz<ҪI)aqLwiT5H͊NqΣbs*3!="Cӯ5j=٠4HL'M4QڃE08.}hHE7g7!hK6ifwb3Fp9^ږI93lb~>} f扪DxIT(`p6/n~Zc=ʻU9դSfVO['Zji''Ou2l;?ZIܬx5wٜ.:81%I1<46:qj0E (RJs;Qծ1GiW5 V%銎H<ji < +g pȭ#Z6:L7SIF͚:k#^ek-.O`kyŁdYŤQD_ϐGj, /׽cSD]vW񓗻'kG~CNYCSڦ|L=iN'ӊoZJ1E2E3ތRgZLQ@ zcg]^C#ֺO1 7s*3Ici HHx4Kc[ګ ܳ-C}R}b RvcD$k*Ïod$wܙ06GZ&R3j<|6Z8r[Tdzvd8=zW/c:J'5[(Y~ʁ.z.I0rTQY^6Q\=vM(_{{5b%1\DˑA^>ZQaqU`m/F!+qUv p:Ґ 9?$s $Cw‹6@8葷6Gp ?)3$ 8;t$栐4d29c9'ڳ-"k,qzxb[:Nh˩IUelȬu$kj?'-hѩ._a=?N*-ԏZܰ[kˌTi'W7cSQH~+Ynppw1b[/X fcPBX.Y2L-CҖ-HNzQA!EPKBߎ)(>Qڀ8}飭4+iW9ZQRcӵ'sISr"1Gz+ 2 {l3Tgm}j-[EV*T:UY=pʐڥPIs4G8Sz|EkCIW Ū^%\|CZԕ)+|{N#Mv3^.@pa\,PNᾆ? 'N>~?z9SK֓Z,:l_zNVt_Vm HVqis8ݥ[ġn)bb2z$Lezywph8k:B]NNf׮XCcݸ\ [k,X5MF#sb]ƽg7ZJRrئ:Rc4`=TQkt4LwtDQ\r xvzH҂+hDH018O6rqPWЬx#?coc[|=:>gk8Ց?9zwȥi$~XsرbÃֲ5=.%>B'Ԛ$eh\qe=9dV r=h)bId#9Z)&Kgh RHu7w*Df49oǭbm4lAlX^Jn%]"@*v4-g9~0Pvb$aR4 t5fѭG1=*5wF2V`Tҝ:g*HohaΦzVEfkZA!1x㯽[I m"ʠ|DZ5:T[R:rE\.֥n&j w||Pz`GSKa3jQ#۽hŨ[ +ddf*q&9?Rx'\3 SGjNţp.aHAHcQ`O_N{jv.ROq}j̗*x'z9՛5f#V0s$yQF% +YRq=z@uYZK̽ =1y5]xh0-IY9ϽcjƢ6sP3 qޚiYZo@(vP7Wv ejV4 D]OdTg歸{VM\iwcyL8?l T?:(R rC,~YI9$ cܮ,VvV$I'cWSlTE 1o0?ٮ2tkK@@\c &yN+ozVv12r@Wf{-qhY7v~5XA 9%'2u!MuRW.Ad=Y8\ s_J֌9#N|9>$oT9Z-3T3tOAN bg߭e( S֟2IFԐ3~C%bK+EׇC֋uy-Yӓ`i^{Ul!y!w'rzo p1V3vgCsiVl"D֢]4#ƀI"砍.|+Ϩ:bѴfc4q((J:KL=)}tC/ =,X(\Or ޣ&*>k҆5QE?4*Σ>ڎp e(&a`t0"C z=ICjjڙL4^~DMpEZWiisu2b5JNFGjE_7( d~YD;Ci4) /횔vquX?p~{Eewt[2`Tb^F(&ܙKW$Nc\,`L}qh)E fI׻1%b)K/4]}P#n(^,FjKOh(dz]($f a[U?(G 44{"1.E3s˶ěsu[L:V k"C!=*AMSalWC֙-'_DRAcEq[^*!,x<+8R؝7֧&=yMq\Z6,ɝcZsBOQ*;NMeO'_f< }s!bTQ%Kۻ&Y ©㊔i5Ж'|zwnh#)ozZBpE;%'~w4Np9wR8@1IA=1ڀqրv((SH=h); >/)(=)-<9vt5IL\tNp 5qcLs\hTE )v'zgƨ ?\z2#089㊱i0܌w1YaʼOJeͥ B? T #\MٺdP{{<%1MssHe Fjo޲}ZQԻxm77 .S+sO~]JR9˅D0'EVLn<|9=y s-u:|eM͙j9TЫr0kZlʢ%oebd' ۺ׷\JC ?x3xg`ƵJG%exN*Wn ۓ]8KIGX/Vh E;I OF%̰)R`Q ?ȧIJNN}+sIKږF҂!PQjDcHdR ie|CB o5lGĂL|X1yաcP˃ygS.T#k4[Ayb8qY_23U+"^۳W91m+_'Rh_p^0i+Xj0ېUEۉ7 5 V^t?gmf~sOq%%MR\ng-\I@g:j5cxT"`@zpjn9sM<53g#11V0kT"3FNr(=(iҎԜbG\PZZSMt('PojJP9h籠9 ^hƀv@(@Ju&h4y5Wq⒔P;bn((?JS֛4,k`;T:Uv;R qlUs&X*~PvUdV=ܛ>5vMGdAEWA(KME.xwAe`S\ Z3IԧgtDU#$ҲGKIj>y'1PޏjSHV)pc+KK//Nj/ QԚ#Aon(9싦DZ us֗Uֹ rIғi2~4rA/s֠nɩs5 lfՈ 2_֞ҚZ7.eHaMH=I@ČR+ypga=I=JlF;gMY\ƫEUQE?Z3J1sG| (PsNځJX7ڝJCFMS(4Qޜ Ef;IzR8hqqM4Qڎ ()(E%zuǵ0j(G\Rg(H(4g#ϭi;W4߼tSH'=)z(fczQE#d>ڊ(Bbr~E0FMltUj(-Ţ)fQEZ1EQ֊(ssESRQE&8EqAE3NP:`P:hR@ <њ(hڝ( 0OQ@ QE-%Pڗ袀Q@hy"(DEoptim/vignettes/DEoptimPortfolioOptimization.Rnw0000644000176200001440000004272113024075067022173 0ustar liggesusers\documentclass[nojss,shortnames]{jss} \usepackage{amsmath,amssymb} \usepackage{xspace} %% need no \usepackage{Sweave} \author{Kris Boudt \\ Lessius and K.U.Leuven \And David Ardia \\ aeris CAPITAL AG \AND Katharine M. Mullen \\ NIST \And Brian G. Peterson \\ DV Trading} \title{Large-scale portfolio optimization with \pkg{DEoptim}} \Plainauthor{Kris Boudt, David Ardia, Katharine M. Mullen, Brian Peterson} \Plaintitle{Large-scale portfolio optimization with DEoptim} \Shorttitle{Large-scale portfolio optimization with DEoptim} \Abstract{This vignette evaluates the performance of \pkg{DEoptim} on a high-dimensional portfolio problem. The setup is the same as in the \emph{R Journal} article \citet{ArdiaBoudtCarlMullenPeterson2011}; namely minimizing the portfolio CVaR under an upper bound constraint on the percentage CVaR contributions. Because the resulting optimization model is a non-convex programming problem with multiple local optima, \pkg{DEoptim} is more apt in solving this problem than gradient-based methods such as \code{optim} and \code{nlminb}. } \Keywords{portfolio optimization, evolutionary algorithm, Differential Evolution, \proglang{R} software} \Plainkeywords{portfolio optimization, evolutionary algorithm, Differential Evolution, R software} \Address{ Kris Boudt\\ Lessius and K.U.Leuven, Belgium\\ E-mail: \email{kris.boudt@econ.kuleuven.be}\\ David Ardia\\ aeris CAPITAL AG, Switzerland\\ URL:~\url{http://perso.unifr.ch/david.ardia/} \\ Katharine Mullen \\ Ceramics Division, National Institute of Standards and Technology (NIST)\\ 100 Bureau Drive, MS 8520, Gaithersburg, MD, 20899, USA\\ E-mail: \email{Katharine.Mullen@nist.gov}\\ Brian G. Peterson\\ DV Trading\\ E-mail: \email{brian@braverock.com}\\ } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{Large scale portfolio optimization with DEoptim} %\VignetteKeywords{portfolio optimization, evolutionary algorithm, Differential Evolution, R} %\VignettePackage{DEoptim} \section{Introduction} The \proglang{R} package \pkg{DEoptim} of \citet{DEoptim} implements several Differential Evolution algorithms. DE belongs to the class of genetic algorithms which use biology-inspired operations of crossover, mutation, and selection on a population in order to minimize an objective function over the course of successive generations. More details on \pkg{DEoptim} can be found in \citet{DEoptimJSS2011}. In this vignette we evaluate its performance on a high-dimensional portfolio problem. In this vignette, we use of \pkg{DEoptim} to solve the portfolio optimization problem described in \cite{ArdiaBoudtCarlMullenPeterson2011}, but expand the problem to include 100 free variables. As in \citet{ArdiaBoudtCarlMullenPeterson2011}, the portfolio CVaR is minimized under an upper bound constraint on the percentage CVaR contributions. See \citet{BoudtCarlPeterson2010} for the rational underlying this portfolio construction technique. The optimization of the objective function is a non-convex programming problem. Since \pkg{DEoptim} is a stochastic global optimization algorithm, it is more apt to offer a good solution than alternative local optimization methods. For instance, gradient-based methods such as the \code{L-BFGS-B} and \code{Nelder-Mead} methods in \code{optim} and \code{nlminb} will typically converge to suboptimal solutions on the problem considered here. The version of this problem described in \citet{ArdiaBoudtCarlMullenPeterson2011} was stylized to describe many fewer variables to allow users to complete the optimization on a personal computer in a matter of minutes. Portfolio problems encountered in practice may require days to optimize on a personal computer, and involve several hundred variables. In the present vignette we examine a problem of complexity in-between the stylized, simple case considered by \citet{ArdiaBoudtCarlMullenPeterson2011}, and the most complex problems encountered in typical financial research. We hope that the \proglang{R} package \pkg{DEoptim} will be fruitful for many users. If you use \proglang{R} or \pkg{DEoptim}, please cite the software in publications. \section{Setup} The results in this vignette are obtained using \proglang{R} version 2.13.0. The function \code{getSymbols} in \pkg{quantmod} \citep{quantmod} is used to obtain the data. The risk measures in the portfolio objective function are computed using \pkg{PerformanceAnalytics} \citep{PerformanceAnalytics}. The initial population in \pkg{DEoptim} is generated using the function \code{random_portfolios} in \pkg{PortfolioAnalytics} \citep{PortAnalytics}.\footnote{All packages are readily available from CRAN, except for \pkg{PortfolioAnalytics} which can be downloaded from \url{https://r-forge.r-project.org/R/?group_id=579} or installed directly within \proglang{R} using the command \code{install.packages("PortfolioAnalytics", repos="http://R-Forge.R-project.org")}.} Computations are performed on a Genuine Intel\textregistered{} dual core CPU P8400 2.26Ghz processor. \pkg{DEoptim} relies on repeated evaluation of the objective function in order to move the population toward a global minimum. Users interested in making \pkg{DEoptim} run as fast as possible should ensure that evaluation of the objective function is as efficient as possible. Using pure \proglang{R} code, this may often be accomplished using vectorization. Writing parts of the objective function in a lower-level language like \proglang{C} or \proglang{Fortran} may also increase speed. \section{Data} We take 100 randomly sampled stocks from the S\&P 500 for which a sufficiently long data history is available. We first download ten years of monthly data using the function \code{getSymbols} of the package \pkg{quantmod} \citep{quantmod}. Then we compute the log-return series and the sample mean and covariance matrix. \begin{CodeChunk} \begin{CodeInput} > tickers = c( "VNO" , "VMC" , "WMT" , "WAG" , "DIS" , "WPO" , "WFC" , "WDC" , + "WY" , "WHR" , "WMB" , "WEC" , "XEL" , "XRX" , "XLNX" ,"ZION" ,"MMM" , + "ABT", "ADBE" , "AMD" , "AET" , "AFL" , "APD" , "ARG" ,"AA" , "AGN" , + "ALTR" , "MO" , "AEP" , "AXP" , "AIG" , "AMGN" , "APC" ,"ADI" , "AON" , + "APA", "AAPL" , "AMAT" ,"ADM" , "T" , "ADSK" , "ADP" , "AZO" , "AVY" , + "AVP", "BHI" , "BLL" , "BAC" , "BK" , "BCR" , "BAX" , "BBT" , "BDX" , + "BMS" , "BBY" , "BIG" , "HRB" , "BMC" , "BA" , "BMY" , "CA" , "COG" , + "CPB" , "CAH" , "CCL" , "CAT" , "CELG" , "CNP" , "CTL" , "CEPH", "CERN" , + "SCHW" , "CVX" , "CB" , "CI" ,"CINF" ,"CTAS" , "CSCO" , "C" , "CLF" , + "CLX", "CMS" , "KO" , "CCE" , "CL" , "CMCSA" ,"CMA" , "CSC" , "CAG" , + "COP" , "ED" , "CEG" ,"GLW" , "COST" , "CVH" , "CSX" , "CMI" , "CVS" , + "DHR" , "DE") > > library(quantmod); > getSymbols(tickers, from = "2000-12-01", to = "2010-12-31") > P <- NULL; seltickers <- NULL > for(ticker in tickers) { + tmp <- Cl(to.monthly(eval(parse(text=ticker)))) + if(is.null(P)){ timeP = time(tmp) } + if( any( time(tmp)!=timeP )) next + else P<-cbind(P,as.numeric(tmp)) + seltickers = c( seltickers , ticker ) + } > P = xts(P,order.by=timeP) > colnames(P) <- seltickers > R <- diff(log(P)) > R <- R[-1,] > dim(R) [1] 120 100 > mu <- colMeans(R) > sigma <- cov(R) \end{CodeInput} \end{CodeChunk} \section{Portfolio objective function and constraints} The optimization problem consists of determining the portfolio weights for which the portfolio has the lowest CVaR and each investment can contribute at most 5\% to total portfolio CVaR risk. Additionally, weights need to be positive and the portfolio needs to be fully invested. The level of portfolio CVaR and the CVaR contributions are computed conveniently with the function \code{ES} in the package \pkg{PerformanceAnalytics} \citep{PerformanceAnalytics}. For simplicity, we assume here normality, but also estimators of CVaR and CVaR contributions for non-normal distributions are available in the function \code{ES}. The constraint that each asset can contribute at most 5\% to total portfolio CVaR risk is imposed through the addition of a penalty function to the objective function. As such, we allow the search algorithm to consider infeasible solutions. A portfolio which is unacceptable for the investor must be penalized enough to be rejected by the minimization process and the larger the violation of the constraint, the larger the increase in the value of the objective function. \begin{CodeChunk} \begin{CodeInput} > library("PerformanceAnalytics") > obj <- function(w) { + if (sum(w) == 0) { + w <- w + 1e-2 + } + w <- w / sum(w) + CVaR <- ES(weights = w, + method = "gaussian", + portfolio_method = "component", + mu = mu, + sigma = sigma) + tmp1 <- CVaR$ES + tmp2 <- max(CVaR$pct_contrib_ES - 0.05, 0) + out <- tmp1 + 1e3 * tmp2 + return(out) + } \end{CodeInput} \end{CodeChunk} The weights need to satisfy additionally a long only and full investment constraint. The current implementation of \code{DEoptim} allows for bound constraints on the portfolio weights. We call these \code{lower} and \code{upper}. \begin{CodeChunk} \begin{CodeInput} > N <- ncol(R) > minw <- 0 > maxw <- 1 > lower <- rep(minw,N) > upper <- rep(maxw,N) \end{CodeInput} \end{CodeChunk} The full investment constraint is accounted for in two ways. First, we standardize all the weights in the objective function such that they sum up to one. Second, we use the function \code{random_portfolios} in \pkg{PortfolioAnalytics} \citep{PortAnalytics} to generate random portfolios that satisfy all constraints. These random portfolios will be used as the initial generation in \code{DEoptim}. \begin{CodeChunk} \begin{CodeInput} > library("PortfolioAnalytics") > eps <- 0.025 > weight_seq<-generatesequence(min=minw,max=maxw,by=.001,rounding=3) > rpconstraint<-constraint( + assets=N, min_sum=(1-eps), max_sum=(1+eps), + min=lower, max=upper, weight_seq=weight_seq) assuming equal weighted seed portfolio > set.seed(1234) > rp<- random_portfolios(rpconstraints=rpconstraint,permutations=N*10) > rp <-rp/rowSums(rp) \end{CodeInput} \end{CodeChunk} \section{Failure of gradient-based methods} The penalty introduced in the objective function is non-differentiable and therefore standard gradient-based optimization routines cannot be used. For instance, \code{L-BFGS-B} and \code{Nelder-Mead} methods in \code{optim} and \code{nlminb} do not converge. \begin{CodeChunk} \begin{CodeInput} > out <- optim(par = rep(1/N, N), fn = obj, + method = "L-BFGS-B", lower = lower, upper = upper) > out$value \end{CodeInput} \begin{CodeOutput} [1] 0.05431692 > out$message [1] "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH" \end{CodeOutput} \begin{CodeInput} > out <- nlminb(start =rep(1/N, N), objective = obj, + lower = lower, upper = upper) > out$objective \end{CodeInput} \begin{CodeOutput} [1] 0.0547231 \end{CodeOutput} \begin{CodeInput} > out$message \end{CodeInput} \begin{CodeOutput} [1] "false convergence (8)" \end{CodeOutput} \end{CodeChunk} \section{Portfolio optimization with DEoptim} In contrast with gradient-based methods, \code{DEoptim} is designed to consistently find a good approximation to the global minimum of the optimization problem. For complex problems as the one considered here, the performance of \pkg{DEoptim} is quite dependent on the DE algorithm used. We first consider the current default DE algorithm in \pkg{DEoptim}, called the ``local-to-best'' strategy with fixed parameters. We define convergence when the percentage improvement between iterations is below \code{reltol=1e-6} after \code{steptol=150} steps. For some problems, it may take many iterations before the DE algorithm converges. We set the maximum number of iterations allowed to 5000. Progress is printed every 250 iterations.\footnote{For convenience in presentation, we display only the best value for the sected iterations, while the \pkg{DEoptim} output in \proglang{R} also displays the best member for each iteration.} As explained above, the initial generation is set to \code{rp}. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.064652 Iteration: 500 bestvalit: 0.057199 Iteration: 750 bestvalit: 0.055774 Iteration: 1000 bestvalit: 0.055013 Iteration: 1250 bestvalit: 0.054581 Iteration: 1500 bestvalit: 0.054269 Iteration: 1750 bestvalit: 0.054146 Iteration: 2000 bestvalit: 0.054049 Iteration: 2250 bestvalit: 0.053706 Iteration: 2500 bestvalit: 0.053695 Iteration: 2750 bestvalit: 0.053351 Iteration: 3000 bestvalit: 0.053273 > out$optim$iter [1] 3055 > out$optim$bestval [1] 0.05327273 > end <- Sys.time() > end - start Time difference of 16.03645 mins \end{CodeInput} \end{CodeChunk} We thus see that, at iteration 5000, the ``local-to-best'' strategy with fixed parameters reaches a solution that is better than the one obtained using the gradient-based methods mentioned above. A recently proposed DE algorithm with better convergence properties on complex problems is the JADE algorithm proposed by \citet{jade}. JADE combines a ``local-to-$p$best'' strategy with adaptive parameter control. The first building block of JADE is thus that the DE algorithm does not always use the best solution of the current generation to mutate the solutions, but one of the randomly chosen $\lfloor 100p\% \rfloor$ best solutions, with 0$ controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=6, c=0, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.063848 Iteration: 500 bestvalit: 0.058090 Iteration: 750 bestvalit: 0.055960 Iteration: 1000 bestvalit: 0.055235 Iteration: 1250 bestvalit: 0.054884 Iteration: 1500 bestvalit: 0.054369 Iteration: 1750 bestvalit: 0.054269 Iteration: 2000 bestvalit: 0.054089 > out$optim$bestval [1] 0.05408688 > end <- Sys.time() > end - start Time difference of 11.45833 mins \end{CodeInput} \end{CodeChunk} The second distinctive feature of \citet{jade} is to introduce learning about successful parameters in the algorithm. Under this approach, the cross-over probability at generation $g+1$ is set to $(1-c)$ the cross-over probability at generation $g$ plus $c$ times the the average of all successful cross-over probabilities at generation $g$. Similarly, the mutation factor at generation $g+1$ is equal to $1-c$ times the previous mutation factor plus $c$ times the average mutation factor of all successful mutations. We take $c=.4$. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=2, c=.4, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.074612 Iteration: 500 bestvalit: 0.068776 Iteration: 750 bestvalit: 0.067991 Iteration: 1000 bestvalit: 0.067894 Iteration: 1250 bestvalit: 0.067887 > out$optim$bestval [1] 0.06788674 > end <- Sys.time() > end - start Time difference of 6.5763 mins \end{CodeInput} \end{CodeChunk} The ``local-to-$1$best'' strategy with adaptive parameter control converges clearly too fast. It is the combination of ``local-to-$p$best'' strategy with adaptive parameter control that is the most successful in solving our problem. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=6, c=.4, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.087517 Iteration: 500 bestvalit: 0.077481 Iteration: 750 bestvalit: 0.067673 Iteration: 1000 bestvalit: 0.059015 Iteration: 1250 bestvalit: 0.054758 Iteration: 1500 bestvalit: 0.053618 Iteration: 1750 bestvalit: 0.053290 Iteration: 2000 bestvalit: 0.053156 Iteration: 2250 bestvalit: 0.053099 Iteration: 2500 bestvalit: 0.053071 Iteration: 2750 bestvalit: 0.053059 Iteration: 3000 bestvalit: 0.053052 Iteration: 3250 bestvalit: 0.053049 > out$optim$iter [1] 3451 > out$optim$bestval [1] 0.0530483 > end <- Sys.time() > end - start Time difference of 18.57083 mins \end{CodeInput} \end{CodeChunk} We see that with JADE, \pkg{DEoptim} converges within 3451 iterations to $0.0530483$, which is the lowest obtained by all methods considered in the vignette. This vignette illustrates that for complex problems, the performance of \pkg{DEoptim} is thus quite dependent on the DE algorithm used. It is recommended that users try out several DE algorithms to find out which one is most adapted for their problem. Furthermore, DE is a stochastic optimizer and typically will only find a near-optimal solution that depends on the seed. The function \code{optimize.portfolio.parallel} in \pkg{PortfolioAnalytics} allows to run an arbitrary number of portfolio sets in parallel in order to develop \emph{confidence bands} around your solution. It is based on REvolution's \pkg{foreach} package \citep{foreach}. \bibliography{DEoptim} \end{document} DEoptim/vignettes/DEoptim.Rnw0000644000176200001440000006737413024101036015663 0ustar liggesusers\documentclass[nojss,shortnames]{jss} \usepackage{amsmath,amssymb} \usepackage{xspace} %% need no \usepackage{Sweave} \author{David Ardia \\ aeris CAPITAL AG \And Katharine M. Mullen \\ NIST \And Joshua Ulrich \\ FOSS Trading \And Brian G. Peterson \\ DV Trading} \title{\pkg{DEoptim}: An \proglang{R} Package for Global Optimization by Differential Evolution} \Plainauthor{David Ardia, Katharine M. Mullen, Joshua Ulrich, Brian Peterson} \Plaintitle{DEoptim: An R Package for Global Optimization by Differential Evolution} \Shorttitle{DEoptim: An R Package for Differential Evolution} \Abstract{This introduction to the \proglang{R} package \pkg{DEoptim} is an abreviated version of the manuscript \citet{DEoptimJSS2011}, published in the \emph{Journal of Statistical Software}. \pkg{DEoptim} implements the Differential Evolution algorithm for global optimization of a real-valued function of a real-valued parameter vector. The implementation of Differential Evolution in \pkg{DEoptim} interfaces with \proglang{C} code for efficiency. Moreover, the package is self-contained and does not depend on any other packages. } \Keywords{global optimization, evolutionary algorithm, Differential Evolution, \proglang{R} software} \Plainkeywords{global optimization, evolutionary algorithm, Differential Evolution, R software} \Address{ David Ardia\\ aeris CAPITAL AG, Switzerland\\ URL:~\url{http://perso.unifr.ch/david.ardia/} \\ Katharine Mullen \\ Ceramics Division, National Institute of Standards and Technology (NIST)\\ 100 Bureau Drive, MS 8520, Gaithersburg, MD, 20899, USA\\ E-mail: \email{Katharine.Mullen@nist.gov}\\ Joshua Ulrich \\ FOSS Trading \\ URL:~\url{http://fosstrading.com} \\ Brian G. Peterson\\ DV Trading\\ E-mail: \email{brian@braverock.com} \\ } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{DEoptim: An R Package for Differential Evolution} %\VignetteKeywords{global optimization, evolutionary algorithm, Differential Evolution, R} %\VignettePackage{DEoptim} \section{Introduction}\label{intro} Optimization algorithms inspired by the process of natural selection have been in use since the 1950s \citep{mitchell}, and are often referred to as {\sl evolutionary algorithms}. The genetic algorithm is one such method, and was invented by John Holland in the 1960s \citep{holland}. Genetic algorithms apply logical operations, usually on bit strings of fixed or variable length, in order to perform crossover, mutation, and selection on a population. Over the course of successive generations, the members of the population are more likely to represent a minimum of an objective function. Genetic algorithms have proven themselves to be useful heuristic methods for global optimization, in particular for combinatorial optimization problems. Evolution strategies are another variety of evolutionary algorithm, in which members of the population are represented with floating point numbers, and the population is transformed over successive generations using arithmetic operations. See \citet[Section~1.2.3]{Price:Storn:Lampinen:06} for a detailed overview of evolutionary algorithms. In the 1990s Rainer Storn and Kenneth Price developed an evolution strategy they termed {\sl Differential Evolution} (DE) \citep{price}. DE is particularly well-suited to find the global optimum of a real-valued function of real-valued parameters, and does not require that the function be either continuous or differentiable. In the roughly fifteen years since its invention, DE has been successfully applied in a wide variety of fields, from computational physics to operations research, as \citet{Price:Storn:Lampinen:06} catalogue. The \pkg{DEoptim} \citep{DEoptim} implementation of DE was motivated by our desire to extend the set of algorithms available for global optimization in the \proglang{R} language and environment for statistical computing \citep{r_env}. \pkg{DEoptim} has been published on the Comprehensive \proglang{R} Archive Network and is available at \url{http://cran.r-project.org/web/packages/DEoptim/}. The \pkg{DEoptim} project is hosted on \proglang{R}-forge at \url{https://r-forge.r-project.org/projects/deoptim/}. Since becoming publicly available it has been used by a variety of authors, e.g., \citet{Borner:Higgins:Kantelhardt:Scheiter:07}, \citet{Higgins:Kantelhardt:Scheiter:Boerner:07}, \citet{OpsinaArango:09}, \citet{ArdiaBoudtCarlMullenPeterson2011} and \citet{Ardia:Ospina:Giraldo:2011} to solve optimization problems arising in diverse domains. Interested readers are referred to \citet{DEoptimJSS2011} for a longer version of the present vignette. The recently released \pkg{RcppDE} \citep{RcppDE} package ports the \proglang{C} code in \pkg{DEoptim} to \proglang{C++}. The documentation claims \pkg{RcppDE} is more efficient than the \proglang{C}-based implementation in \pkg{DEoptim} version 2.0-7, but most of the increased efficiency is attributable to a non-trivial difference in the functionality: \pkg{RcppDE} does not pass \code{"..."} to the objective function. \pkg{DEoptim} version 2.0-8 incorporates several language-independent improvements made in \pkg{RcppDE} and compares favorably to a patched version of \pkg{RcppDE} that passes \code{"..."}. We hope that the \proglang{R} package \pkg{DEoptim} will be fruitful for many users. If you use \proglang{R} or \pkg{DEoptim}, please cite the software in publications. In the remainder of this vignette we elaborate on \pkg{DEoptim}'s implementation and use. In Section~\ref{inex}, the package is introduced via a simple example. Section~\ref{alg} describes the underlying algorithm. Section~\ref{imp} describes the \proglang{R} implementation and serves as a user manual. \subsection{An introductory example}\label{inex} Minimization of the Rastrigin function in $x \in \Re^D$ \begin{align*} f(x) = \sum_{j=1}^{D} \left( x_j^2 - 10 \cos \left( 2 \pi x_j \right) + 10 \right) \end{align*} for $D=2$ is a common test for global optimization algorithms. This function is possible to represent in \proglang{R} as <>= options(prompt = "R> ") @ <>= rastrigin <- function(x) 10*length(x)+sum(x^2-10*cos(2*pi*x)) @ As shown in Figure~\ref{rast}, for $D=2$ the function has a global minimum $f(x)=0$ at the point $(0,0)$. <>= library("colorspace") library("grid") library("lattice") jpeg("Rastrigin1.jpg") x <- y <- seq(-5,5,by=.1) z <- matrix(nrow=length(x), ncol=length(y)) for(i in 1:length(x)) { for(j in 1:length(y)) z[i,j] <- rastrigin(c(x[i],y[j])) } xx <- list(fontsize=list(text=15,points=10), par.xlab.text=list(cex=2), par.ylab.text=list(cex=2), axis.text=list(cex=2), par.main.text=list(cex=2), layout.widths=list(left.padding=.1, right.padding=.1, between=0), layout.heights=list(top.padding=.1, bottom.padding=.1, between=0) ) levelplot(z, row.values=x,column.values=y, col.regions=sequential_hcl(300), xlab=expression(x[1]), ylab=expression(x[2]), par.settings=xx, panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(0,0,pch=21,col="white",cex=2)}) dev.off() set.seed(123) @ \begin{figure}[t!] \centering \includegraphics[width=.5\textwidth]{Rastrigin1.jpg} \caption{A contour plot of the two-dimensional Rastrigin function $f(x)$. The global minimum $f(x)=0$ is at $(0,0)$ and is marked with an open white circle.} \label{rast} \end{figure} In order to minimize this function using \pkg{DEoptim}, the \proglang{R} interpreter is invoked, and the package is loaded with the command <>= library("DEoptim") @ The \code{DEoptim} function of the package \pkg{DEoptim} searches for minima of the objective function between lower and upper bounds on each parameter to be optimized. Therefore in the call to \code{DEoptim} we specify vectors that comprise the lower and upper bounds; these vectors are the same length as the parameter vector. The call to \code{DEoptim} can be made as <>= est.ras <- DEoptim(rastrigin,lower=c(-5,-5),upper=c(5,5), control=list(storepopfrom=1, trace=FALSE)) @ \begin{figure}[t!] \centering \includegraphics[width=.8\textwidth]{Rastrigin2.jpg} \caption{The population associated with various generations of a call to \code{DEoptim} as it searches for the minimum of the Rastrigin function (marked with an open white circle). The minimum is consistently determined within 200 generations using the default settings of \code{DEoptim}.} \label{ex11} \end{figure} Note that the vector of parameters to be optimized must be the first argument of the objective function \code{fn} passed to \code{DEoptim}. The above call specifies the objective function to minimize, \code{rastrigin}, the lower and upper bounds on the the parameters, and, via the \code{control} argument, that we want to store intermediate populations from the first generation onwards (\code{storepopfrom = 1}), and do not want to print out progress information each generation (\code{trace = FALSE}). Storing intermediate populations allows us to examine the progress of the optimization in detail. Upon initialization, the population is comprised of 50 vectors $x$ of length two (50 being the default value of \code{NP}), with $x_i$ a random value drawn from the uniform distribution over the values defined by the associated lower and upper bound. The operations of crossover, mutation, and selection explained in Section~\ref{alg} transform the population so that the members of successive generations are more likely to represent the global minimum of the objective function. The members of the population generated by the above call are plotted at the end of different generations in Figure~\ref{ex11}. \code{DEoptim} consistently finds the minimum of the function within 200 generations using the default settings. We have observed that \pkg{DEoptim} solves the Rastrigin problem more efficiently than the simulated annealing method found in the \proglang{R} function \code{optim}. <>= pushLayout <- function(nr, nc, name="layout") { pushViewport(viewport(layout=grid.layout(nr, nc, just="left", widths=unit(rep(2, nc), "null")), name=name)) for (i in 1:nr) { for (j in 1:nc) { pushViewport(viewport(layout.pos.row=i, layout.pos.col=j)) upViewport() } } upViewport() } names.vpPath <- names.viewport <- function(x) x$name with.vpPath <- with.viewport <- function(data, expr, ...) { depth <- if (data$name == "ROOT") 0 else downViewport(names(data)) result <- eval.parent(substitute(expr)) upViewport(depth) invisible(result) } getChildren.viewport <- function(x) x$children ## end functions for making the plots with lattice ## specify number of cells to fill and number of rows n <- 6 nr <- 2 nc <- ceiling(n/nr) xy <- list(fontsize=list(text=12,points=10), par.xlab.text=list(cex=1.5), par.ylab.text=list(cex=1.5), axis.text=list(cex=1.5), par.main.text=list(cex=1.5), layout.widths=list(left.padding=.1, right.padding=.1,between=0), layout.heights=list(top.padding=.1, bottom.padding=.1,between=0)) jpeg("Rastrigin2.jpg") grid.newpage() downViewport(pushLayout(nr, nc)) vpt <- current.vpTree(all=FALSE) plotat <- c(seq(10,50,by=10),1) ## something strange with Sweave/grid interaction, gen.1 is getting ## placed in wrong viewport; 'fixed' by permuting plotat above for(k in 1:n) { i <- plotat[k] with(getChildren.viewport(vpt)[[k]], print(levelplot(z, row.values=x,column.values=y, xlab=expression(x[1]), ylab=expression(x[2]), colorkey=FALSE, par.settings=xy,between = list(x = .2), col.regions=sequential_hcl(300), main=paste("Generation",i), panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(est.ras$member$storepop[[i]], pch=21,fill="black",col=1,cex=.5); panel.points(0,0,pch=21,col="white",cex=1)}), newpage = FALSE)) } dev.off() @ We note that as the dimensionality of the Rastrigin problem increases, \pkg{DEoptim} may not be able to find the global minimum in the default number of generations. Heuristics to help ensure that the global minimum is found include re-running the problem with a larger population size (value of \code{NP}), and increasing the maximum allowed number of generations. \subsection{Problems suitable for DE}\label{inex1} Differential Evolution does not require derivatives of the objective function. It is therefore useful in situations in which the objective function is stochastic, noisy, or difficult to differentiate. DE, however, may be inefficient on smooth functions, where derivative-based methods generally are most efficient. In the example below, a generalized Rosenbrock function is considered. This function is differentiable and has a single local minimum. It is often more efficient to apply methods other than DE to optimization of such functions. Functions that are smooth but have many local minima, however, may still be good candidates for optimization with DE, since alternative algorithms for local, as opposed to global, optimization may converge to a sub-optimal solution. A generalized Rosenbrock function is possible to represent in \proglang{R} as <>= options(prompt = "R> ") @ <>= genrose.f <- function(x){ n <- length(x) fval <- 1.0 + sum (100 * (x[1:(n-1)]^2 - x[2:n])^2 + (x[2:n] - 1)^2) return(fval) } @ This function has a global minimum at 1, which \pkg{DEoptim} finds for $n = 10$ with a call like: <>= n <- 10 ans <- DEoptim(fn=genrose.f, lower=rep(-5, n), upper=rep(5, n), control=list(NP=100, itermax=4000,trace=FALSE)) @ The minimum can be determined with far fewer function evalutations with a gradient-based method such as ``BFGS'' \citep{nash}, e.g., with the call <>= ans1 <- optim(par=runif(10,-5,5), fn=genrose.f, method="BFGS", control=list(maxit=4000)) @ Note further that users interested in exact reproduction of results should set the seed of their random number generator before calling \pkg{DEoptim}. DE is a randomized algorithm, and the results may vary between runs. \section{The Differential Evolution algorithm}\label{alg} We sketch the classical DE algorithm here and refer interested readers to the work of \citet{price} and \citet{Price:Storn:Lampinen:06} for further elaboration. The algorithm is an evolutionary technique which at each generation transforms a set of parameter vectors, termed the population, into another set of parameter vectors, the members of which are more likely to minimize the objective function. In order generate a new parameter vector, DE disturbs an old parameter vector with the scaled difference of two randomly selected parameter vectors. The variable $\mathit{NP}$ represents the number of parameter vectors in the population. At generation 0, $\mathit{NP}$ guesses for the optimal value of the parameter vector are made, either using random values between upper and lower bounds for each parameter or using values given by the user. Each generation involves creation of a new population from the current population members $x_{i,g}$, where $i$ indexes the vectors that make up the population and $g$ indexes generation. This is accomplished using {\sl differential mutation} of the population members. A trial mutant parameter vector $v_{i,g}$ is created by choosing three members of the population, $x_{r0,g}$, $x_{r1,g}$ and $x_{r2,g}$, at random. Then $v_{i,g}$ is generated as \begin{equation} v_{i,g} \doteq x_{r0,g} + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \label{de} \end{equation} where $F$ is a positive scale factor. Effective values of $\text{F}$ are typically less than 1. After the first mutation operation, mutation is continued until either $\text{length}(x)$ mutations have been made or $\mathit{rand} > \mathit{CR}$, where $\mathit{CR}$ is a crossover probability $\mathit{CR} \in [0,1]$, and where here and throughout $\mathit{rand}$ is used to denote a random number from $\mathcal{U}(0,1)$. The crossover probability $\mathit{CR}$ controls the fraction of the parameter values that are copied from the mutant. $\mathit{CR}$ approximates but does not exactly represent the probability that a parameter value will be inherited from the mutant, since at least one mutation always occurs. Mutation is applied in this way to each member of the population. If an element $v_j$ of the parameter vector is found to violate the bounds after mutation and crossover, it is reset, where here and throughout we use $j$ to index into a parameter vector. In the implementation of \pkg{DEoptim}, if $v_{j} > \text{upper}_j$, it is reset as $v_j \doteq \text{upper}_j - \mathit{rand} \cdot ( \text{upper}_j - \text{lower}_j)$, and if $v_{j} < \text{lower}_j$, it is reset as $v_j \doteq \text{lower}_j + \mathit{rand} \cdot ( \text{upper}_j - \text{lower}_j)$. This ensures that candidate population members found to violate the bounds are set some random amount away from them, in such a way that the bounds are guaranteed to be satisfied. Then the objective function values associated with the children $v$ are determined. If a trial vector $v_{i,g}$ has equal or lower objective function value than the vector $x_{i,g}$, $v_{i,g}$ replaces $x_{i,g}$ in the population; otherwise $x_{i,g}$ remains. The algorithm stops after some set number of generations, or after the objective function value associated with the best member has been reduced below some set threshold, or if it is unable to reduce the best member by a certain value over over set number of iterations. Variations on this theme are possible, some of which are described in the following section. Values of $\mathit{NP}$ and $\mathit{CR}$ that have been found to be most effective for a variety of problems are described in \citet[Section~2]{Price:Storn:Lampinen:06}. Reasonable default values for many problems are given in the following section. \section{Implementation}\label{imp} \pkg{DEoptim} was first published on the Comprehensive \proglang{R} Archive Network (CRAN) in 2005 by David Ardia. Early versions were written in pure \proglang{R}. Since version 2.0-0 (published to CRAN in 2009 by Katharine Mullen) the package has relied on an interface to a \proglang{C} implementation of DE, which is significantly faster on most problems as compared to the implementation in pure \proglang{R}. Since version 2.0-3 the \proglang{C} implementation dynamically allocates the memory required to store the population, removing limitations on the number of members in the population and length of the parameter vectors that may be optimized. The implementation is used by calling the \proglang{R} function \code{DEoptim}, the arguments of which are: \begin{itemize} \item \code{fn}: The objective function to be minimized. This function should have as its first argument the vector of real-valued parameters to optimize, and return a scalar real result. \item \code{lower}, \code{upper}: Vectors specifying scalar real lower and upper bounds on each parameter to be optimized, so that the $i$th element of \code{lower} and \code{upper} applies to the $i$th parameter. The implementation searches between \code{lower} and \code{upper} for the global optimum of \code{fn}. \item \code{control}: A list of control parameters, discussed below. \item \code{...}: allows the user to pass additional arguments to the function \code{fn}. \end{itemize} The \code{control} argument is a list, the following elements of which are currently interpreted: \begin{itemize} \item \code{VTR}: The value to reach. Specify the global minimum of \code{fn} if it is known, or if you wish to cease optimization after having reached a certain value. The default value is \code{-Inf}. \item \code{strategy}: This defines the Differential Evolution strategy used in the optimization procedure, described below in the terms used by \citet{Price:Storn:Lampinen:06}: \begin{itemize} \item \code{1}: DE / rand / 1 / bin (classical strategy). This strategy is the classical approach described in Section~\ref{alg}. \item \code{2}: DE / local-to-best / 1 / bin. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq \text{old}_{i,g} + \text{F} \cdot (\text{best}_{g} - \text{old}_{i,g}) + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{old}_{i,g}$ and $\text{best}_{g}$ are the $i$th member and best member, respectively, of the previous population. This strategy is currently used by default. \item \code{3}: DE / best / 1 / bin with jitter. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq \text{best}_{g} + \text{jitter} + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{jitter}$ is defined as $0.0001 \cdot \mathit{rand} + F$. \item \code{4}: DE / rand / 1 / bin with per vector dither. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq x_{r0,g} + \text{dither} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{dither}$ is calculated as $\text{dither} \doteq F + \mathit{rand} \cdot (1 - F)$. \item \code{5}: DE / rand / 1 / bin with per generation dither. The strategy described for \code{4} is used, but $\text{dither}$ is only determined once per-generation. \item \code{6}: DE / current-to-p-best / 1. The top $\text(100*p)$ percent best solutions are used in the mutation, where $p$ is defined in $\text(0,1]$. \item any value not above: variation to DE / rand / 1 / bin: either-or algorithm. In the case that $\mathit{rand} < 0.5$, the classical strategy described for \code{1} is used. Otherwise, the expression \begin{align*} v_{i,g} \doteq x_{r0,g} + 0.5 \cdot (F + 1.0) \cdot (x_{r1,g} + x_{r2,g} - 2 \cdot x_{r0,g}) \end{align*} is used. \end{itemize} \item \code{bs}: If \code{FALSE} then every mutant will be tested against a member in the previous generation, and the best value will survive into the next generation. This is the standard trial vs. target selection described in Section~\ref{alg}. If \code{TRUE} then the old generation and \code{NP} mutants will be sorted by their associated objective function values, and the best \code{NP} vectors will proceed into the next generation (this is best-of-parent-and-child selection). The default value is \code{FALSE}. \item \code{NP}: Number of population members. The default value is \code{50}. \item \code{itermax}: The maximum iteration (population generation) allowed. The default value is \code{200}. \item \code{CR}: Crossover probability from interval [0,1]. The default value is \code{0.5}. \item \code{F}: Stepsize from interval [0,2]. The default value is \code{0.8}. \item \code{trace}: Positive integer or logical value indicating whether printing of progress occurs at each iteration. The default value is \code{TRUE}. If a positive integer is specified, printing occurs every \code{trace} iterations. \item \code{initialpop}: An initial population used as a starting population in the optimization procedure, specified as a matrix in which each row represents a population member. May be useful to speed up convergence. Defaults to \code{NULL}, so that the initial population is generated randomly within the lower and upper boundaries. \item \code{storepopfrom}: From which generation should the following intermediate populations be stored in memory. Default to \code{itermax + 1}, i.e., no intermediate population is stored. \item \code{storepopfreq}: The frequency with which populations are stored. The default value is \code{1}, i.e., every intermediate population is stored. \item \code{checkWinner}: Logical value indicating whether to re-evaluate the objective function using the winning parameter vector if this vector remains the same between generations. This may be useful for the optimization of a noisy objective function. If \code{checkWinner = TRUE} and \code{avWinner = FALSE} then the value associated with re-evaluation of the objective function is used in the next generation. Default to \code{FALSE}. \item \code{avWinner}: Logical value. If \code{checkWinner = TRUE} and \code{avWinner = TRUE} then the objective function value associated with the winning member represents the average of all evaluations of the objective function over the course of the `winning streak' of the best population member. This option may be useful for optimization of noisy objective functions, and is interpreted only if \code{checkWinner = TRUE}. The default value is \code{TRUE}. \end{itemize} The default value of \code{control} is the return value of \code{DEoptim.control()}, which is a list with the above elements and specified default values. The return value of the \code{DEoptim} function is a member of the S3 class \code{DEoptim}. Members of this class have a \code{plot} method that accepts the argument \code{plot.type}. When \code{retVal} is an object returned by \pkg{DEoptim}, calling \code{plot(retVal, plot.type = "bestmemit")} results in a plot of the parameter values that represent the lowest value of the objective function each generation. Calling \code{plot(retVal, plot.type = "bestvalit")} plots the best value of the objective function each generation. Calling \code{plot(retVal, plot.type = "storepop")} results in a plot of stored populations (which are only available if these have been saved by setting the \code{control} argument of \code{DEoptim} appropriately). A summary method for objects of S3 class \code{DEoptim} also exists, and returns the best parameter vector, the best value of the objective function, the number of generations optimization ran, and the number of times the objective function was evaluated. A note on recommended settings: We have set the default values to the methods recommended by \citet{Price:Storn:Lampinen:06} as starting points. We use \code{strategy = 2} by default; the user should consider trying as alternatives \code{strategy = 6} and \code{strategy = 1}, though the best method will be highly problem-dependent. Generally, the user should set the lower and upper bounds to exploit the full allowable numerical range, i.e., if a parameter is allowed to exhibit values in the range [-1, 1] it is typically a good idea to pick the initial values from this range instead of unnecessarily restricting diversity. Increasing the value for \code{NP} will mean greater likelihood of finding the minimum, but run-time will be longer. \pkg{DEoptim} relies on repeated evaluation of the objective function in order to move the population toward a global minimum. Users interested in making \pkg{DEoptim} run as fast as possible should ensure that evaluation of the objective function is as efficient as possible. Using pure \proglang{R} code, this may often be accomplished using vectorization. Writing parts of the objective function in a lower-level language like \proglang{C} or \proglang{Fortran} may also increase speed. \section*{Disclaimer} The views expressed in this vignette are the sole responsibility of the authors and do not necessarily reflect those of NIST and aeris CAPITAL AG. \bibliography{DEoptim} \end{document} DEoptim/NEWS0000755000176200001440000002147513624161720012330 0ustar liggesusersChanges in version 2.2-5 o Used tools::package_native_routine_registration_skeleton(".") to create src/DEoptim_init.c o In NAMESPACE, changed useDynLib(DEoptim) to useDynLib(DEoptim, .registration = TRUE)) o removed unused variables from de4_0.c: tmp_best, t_tmpC, same, i_xav, i_nstorepop, tempP, gta_newC, gta_oldC, popC, d_par o definition of popEvaluate(long *l_nfeval, SEXP parMat, SEXP fcall, SEXP env) changed to include a 5th integer argument, to remove warning about type mismatch with previous definition Changes in version 2.2-4 o Vignette source code included in package. o New option 'cluster' allows passing existing parallel cluster, using code by Alexey Stukalov. o As pointed out by Jason Thorpe: "paralell:::.onLoad() makes a call to stats::runif(1L) depending on whether or not Sys.getenv("R_PARALLEL_PORT") returns an integer, which appears to be platform dependent. The result of this bug is that the return value of DEoptim() will differ by platform the first time it is called, even when taking care to call set.seed() prior to calling DEoptim()." We now require 'parallel' (to ensure it is loaded) to avoid this behaviour. Changes in version 2.2-3 o DESCRIPTION updated. o Change to steptol interpretation in C, thanks to Alec Solway. o Change to foreach logic, thanks to Jonathan Owen. o Change to NP setting when initialpop provided, thanks to Tobias KD Weber. o More flexible passing of args to foreach. o Makefile changed to remove references to shell Changes in version 2.2-2 o Change to de4_0.c to replace memcpy with memmove Changes in version 2.2-1 o Invisible-to-users changes to evaluate.c to fix misuse of isnan Changes in version 2.2-0 o Thanks to Joshua Ulrich and Kris Boudt, parallel operation is possible, using foreach. o sandbox directory added, with example parallel code o Kris Boudt added as a contributor o foreach added as suggested package o foreachArgs arguement added to DEoptim.control() function o Fixed typo in box constraint example in DEoptim.Rd o VignetteDepends metadata added to .Rnw o Added mapping function for integer / cardinality constraints o checkWinner and avWinner options have been removed. If the user desires averaging (to deal with a stochastic objective function) then a wrapper function may be used to give the average value over several calls. Changes in version 2.1-2 o Modified CITATION file and Rd files. o Joshua Ulrich fixed the crash caused by a stack overflow when optimizing many parameters. Thanks to Suraj Gupta for pointing out the problem. Changes in version 2.1-1 o Added portfolio optimization vignette. o Bug with reltol / steptol stopping criteria fixed. o Changed JADE to be 'on' when c > 0 for *any* strategy and set c=0 as default in DEoptim.control (JADE is 'off'). Changes in version 2.1-0 o Added documentation of strategy six. o Fixed typos in vignette. o Modified CITATION file and Rd files. Changes in version 2.0-9 o Added vignette. Changes in version 2.0-8 o Many improvements in the C code, thanks to Dirk Eddelbuettel's detailed code review. Dirk's contributions include: - fixed gd_bestmemit and gd_bestval initialization to avoid segfaults - propegate nfeval back to DEoptimC function - allocate parameter vector once, rather than once per evaluate call - allocate ia_urn1 once, rather than once per permute call - replace strategy if/else block with switch statement o More bug fixes and optimizations when bs=TRUE o Fixed bug in initial population check. Thanks to Vinecius Veloso. o Added '...' to objective function call in evaluate rather than in DEoptim R function. This yields a speed gain, since it avoids an extra function call. Thanks to Dirk Eddelbuettel for the idea. Changes in version 2.0-7 o Many improvements in the C code, including removal of all global variables thanks to Joshua Ulrich. o Thanks to Ralf Tautenhahn and Joshua Ulrich, a bug with bs=TRUE is removed. o Thanks to Dirk Eddelbuettel several bugs (some possibly causing segfaults) removed. o Added DE/current-to-p-best/1 strategy. o Added ability to only print every "trace" iterations. Changes in version 2.0-6 o Added dataset documentation now required by R CMD check. Changes in version 2.0-5 o CITATION file modified, updated references. o Removed check on length of parameter vector (it was left over from versions prior to 2.0-3, thanks to Jean-Luc Jannink. Changes in version 2.0-4 o added check to prevent the C code being called with NP<4, thanks to Joshua Ulrich. o fixed bug introduced in version 2.0-3 that made the objective function values associated with the winning population members incorrect o added new options checkWinner and avWinner to the 'control' arguement. Changes in version 2.0-3 o Re-write of much of the underlying C code. Now dynamically allocate storage, so can optimize on parameter vectors of arbitrary size, in a population of arbitrary size. Changed the documentation to reflect the new lack of limitations. o Stop with an error right away if a NaN objective function value occurs. o Default value of CR changed to .9 from .5. o Added reference and minor changes to documentation. Changes in version 2.0-2 o The maximum number of parameters that can be optimized (set statically in de.h with #define MAXDIM) was changed from 20 to 200. o zzz.R file removed and replaced with call to `useDynLib(DEoptim)' in NAMESPACE o Brian Peterson pointed out problems occurring when the objective function returns a NaN value. Error messages are now added to report when this happens. o permute patched, see below. Thanks to Hans Werner Borchers for pointing out that the problem was not fixed in the CRAN version. Changes in version 2.0-1 o Soren Macbeth and Joshua Ulrich pointed out and patched bugs in the function 'permute'. Note that the version 2.0-1 on CRAN does not patch these bugs correctly. The correction is made in the next version. Changes in version 2.0-0 o The R-based implementation of Differential Evolution has been replaced with a C-based implementation similar to the MS Visual C++ v5.0 implementation accompanying the book `Differential Evolution - A Practical Approach to Global Optimization',downloaded from http://www.icsi.berkeley.edu/~storn/DeWin.zip. The new C implementation is significantly faster. o The S3 method for plotting has been enhanced. It allows now to plot the intermediate populations if provided. o The package maintainer has been changed to Katharine Mullen, . o A NAMESPACE has been added. o Argument FUN for DEoptim is now called fn for compatibility with optim. o demo file has been removed o CITATION file modified Changes in version 1.3-3 o CITATION file modified. Changes in Version 1.3-2 o CITATION file modified. Changes in Version 1.3-1 o new plotting argument 'storepop' which displays intermediate population locations. Changes in Version 1.3-0 o the function 'DEoptim' has two arguments: 'storepopfrom' and 'storepopfreq', for tracking intermediate populations; the output contains also the list 'storepop' which belongs to the 'member' list's element. o small bug fixed for the number of iterations. Changes in Version 1.2-1 o fix a bug in the optimization procedure. Thanks to Tarmo Leinonen for pointing out this bug. o add a demo to show how to increase the number of printed digits while performing the optimization. Changes in Version 1.2-0 o the function 'DEoptim' has the new argument 'initial', which is an initial or starting population. You can therefore introduce a starting population in the optimization procedure. This can be useful when the optimization has to be run many times on data sets which differ sligthly. Thanks to Tarmo Leinonen for this nice suggestion. o the function 'DEoptim' outputs now 'pop' in the 'member' list's element. This is the population obtained at the last iteration which can be used as a starting population in 'DEoptim' via the argument 'initial'. o the function stops if any 'NA' or 'NaN' value is returned by the function 'FUN' to be optimized. o the function DEoptim does not handle exponential crossover anymore. This is so to simplify and accelerate the optimization procedure. Thanks to Vladimir Eremeev for pointing out a bug with the exponential crossover. o the function 'DEoptim' outputs a list of lists. This is more natural and in the same spirit of usual optimization functions. Thanks to Vladimir Eremeev for proposing this change. o documentation for the 'digits'. Thanks to Eugene Demidenko for pointing out this. DEoptim/R/0000755000176200001440000000000013025612741012015 5ustar liggesusersDEoptim/R/methods.R0000644000176200001440000000424111710674457013617 0ustar liggesusers'summary.DEoptim' <- function(object, ...){ digits <- max(5, getOption('digits') - 2) cat("\n***** summary of DEoptim object *****", "\nbest member : ", round(object$optim$bestmem, digits), "\nbest value : ", round(object$optim$bestval, digits), "\nafter : ", round(object$optim$iter), "generations", "\nfn evaluated : ", round(object$optim$nfeval), "times", "\n*************************************\n") invisible(object) } plot.DEoptim <- function (x, plot.type = c("bestmemit", "bestvalit", "storepop"), ...) { z <- x$member niter <- length(z$bestvalit) npar <- length(z$lower) nam <- names(z$lower) nstorepop <- length(z$storepop) if (identical(plot.type[1], "bestmemit")) { plot.new() par(mfrow = c(min(3, npar), 1)) for (i in 1:npar) { if (identical(i%%4, 0)) { cat("new plot\n") devAskNewPage(ask = TRUE) } plot(1:niter, z$bestmemit[, i], xlim = c(1, niter), las = 1, xlab = "iteration", ylab = "value", main = nam[i], ...) abline(h = c(z$lower[i], z$upper[i]), col = "red") } } else if (identical(plot.type[1], "bestvalit")) { plot(1:niter, z$bestvalit, xlim = c(1, niter), las = 1, xlab = "iteration", ylab = "function value", main = "convergence plot", ...) } else if (identical(plot.type[1], "storepop") && nstorepop > 0) { plot.new() par(mfrow = c(min(3, npar), 1)) for (i in 1:npar) { if (identical(i%%4, 0)) { cat("new plot\n") devAskNewPage(ask = TRUE) } tmp <- NULL for (j in 1:nstorepop) { tmp <- cbind(tmp, z$storepop[[j]][, i]) } matplot(t(tmp), col = "black", pch = 20, las = 1, xlab = "stored population", ylab = "value", main = nam[i], ...) abline(h = c(z$lower[i], z$upper[i]), col = "red") par(new = FALSE) } } else { warning("'plot.type' does not correspond to any plotting type", immediate. = TRUE) } } DEoptim/R/zzz.R0000755000176200001440000000042612134427173013005 0ustar liggesusers".onLoad" <- function (lib, pkg) { library.dynam(pkg, pkg, lib) } ".onAttach" <- function (lib, pkg) { packageStartupMessage("\nDEoptim package", "\nDifferential Evolution algorithm in R", "\nAuthors: D. Ardia, K. Mullen, B. Peterson and J. Ulrich\n") } DEoptim/R/DEoptim.R0000644000176200001440000002250213025050766013505 0ustar liggesusersDEoptim.control <- function(VTR = -Inf, strategy = 2, bs = FALSE, NP = NA, itermax = 200, CR = 0.5, F = 0.8, trace = TRUE, initialpop = NULL, storepopfrom = itermax + 1, storepopfreq = 1, p = 0.2, c = 0, reltol, steptol, parallelType = 0, cluster = NULL, packages = c(), parVar = c(), foreachArgs = list() ) { if (itermax <= 0) { warning("'itermax' <= 0; set to default value 200\n", immediate. = TRUE) itermax <- 200 } if (F < 0 | F > 2) { warning("'F' not in [0,2]; set to default value 0.8\n", immediate. = TRUE) F <- 0.8 } if (CR < 0 | CR > 1) { warning("'CR' not in [0,1]; set to default value 0.5\n", immediate. = TRUE) CR <- 0.5 } if (strategy < 1 | strategy > 6) { warning("'strategy' not in {1,...,6}; set to default value 2\n", immediate. = TRUE) strategy <- 2 } bs <- (bs > 0) if ( trace < 0 ) { warning("'trace' cannot be negative; set to 'TRUE'") trace <- TRUE } storepopfreq <- floor(storepopfreq) if (storepopfreq > itermax) storepopfreq <- 1 if (p <= 0 || p > 1) { warning("'p' not in (0,1]; set to default value 0.2\n", immediate. = TRUE) p <- 0.2 } if (c < 0 || c > 1) { warning("'c' not in [0,1]; set to default value 0\n", immediate. = TRUE) c <- 0 } if (missing(reltol)) { reltol <- sqrt(.Machine$double.eps) } if (missing(steptol)) { steptol <- itermax } if(!(is.null(initialpop))) { if(is.na(NP)) if(is.matrix(initialpop)) NP <- dim(initialpop)[1] else stop("initialpop must be a matrix") else if(NP != dim(initialpop)[1]) { warning("Resetting NP to the number of rows in initialpop") NP <- dim(initialpop)[1] } } list(VTR = VTR, strategy = strategy, NP = NP, itermax = itermax, CR = CR, F = F, bs = bs, trace = trace, initialpop = initialpop, storepopfrom = storepopfrom, storepopfreq = storepopfreq, p = p, c = c, reltol = reltol, steptol = steptol, parallelType = parallelType, cluster = cluster, packages = packages, parVar = parVar, foreachArgs = foreachArgs) } DEoptim <- function(fn, lower, upper, control = DEoptim.control(), ..., fnMap=NULL) { if (length(lower) != length(upper)) stop("'lower' and 'upper' are not of same length") if (!is.vector(lower)) lower <- as.vector(lower) if (!is.vector(upper)) upper <- as.vector(upper) if (any(lower > upper)) stop("'lower' > 'upper'") if (any(lower == "Inf")) warning("you set a component of 'lower' to 'Inf'. May imply 'NaN' results", immediate. = TRUE) if (any(lower == "-Inf")) warning("you set a component of 'lower' to '-Inf'. May imply 'NaN' results", immediate. = TRUE) if (any(upper == "Inf")) warning("you set a component of 'upper' to 'Inf'. May imply 'NaN' results", immediate. = TRUE) if (any(upper == "-Inf")) warning("you set a component of 'upper' to '-Inf'. May imply 'NaN' results", immediate. = TRUE) if (!is.null(names(lower))) nam <- names(lower) else if (!is.null(names(upper)) & is.null(names(lower))) nam <- names(upper) else nam <- paste("par", 1:length(lower), sep = "") ctrl <- do.call(DEoptim.control, as.list(control)) ctrl$npar <- length(lower) if(is.na(ctrl$NP)) ctrl$NP <- 10*length(lower) if (ctrl$NP < 4) { warning("'NP' < 4; set to default value 10*length(lower)\n", immediate. = TRUE) ctrl$NP <- 10*length(lower) } if (ctrl$NP < 10*length(lower)) warning("For many problems it is best to set 'NP' (in 'control') to be at least ten times the length of the parameter vector. \n", immediate. = TRUE) if (!is.null(ctrl$initialpop)) { ctrl$specinitialpop <- TRUE if(!identical(as.numeric(dim(ctrl$initialpop)), as.numeric(c(ctrl$NP, ctrl$npar)))) stop("Initial population is not a matrix with dim. NP x length(upper).") } else { ctrl$specinitialpop <- FALSE ctrl$initialpop <- 0.0 } ## ctrl$trace <- as.numeric(ctrl$trace) ctrl$specinitialpop <- as.numeric(ctrl$specinitialpop) ctrl$initialpop <- as.numeric(ctrl$initialpop) if(!is.null(ctrl$cluster)) { ## use provided cluster if(!inherits(ctrl$cluster, "cluster")) stop("cluster is not a 'cluster' class object") parallel::clusterExport(cl, ctrl$parVar) fnPop <- function(params, ...) { parallel::parApply(cl=ctrl$cluster,params,1,fn,...) } } else if(ctrl$parallelType == 2) { ## use foreach if(!foreach::getDoParRegistered()) { foreach::registerDoSEQ() } args <- ctrl$foreachArgs fnPop <- function(params, ...) { my_chunksize <- ceiling(NROW(params)/foreach::getDoParWorkers()) my_iter <- iterators::iter(params,by="row",chunksize=my_chunksize) args$i <- my_iter args$.combine <- c if (!is.null(args$.export)) args$.export = c(args$.export, "fn") else args$.export = "fn" if (is.null(args$.errorhandling)) args$.errorhandling = c('stop', 'remove', 'pass') if (is.null(args$.verbose)) args$.verbose = FALSE if (is.null(args$.inorder)) args$.inorder = TRUE if (is.null(args$.multicombine)) args$.multicombine = FALSE foreach::"%dopar%"(do.call(foreach::foreach, args), apply(i,1,fn,...)) } } else if(ctrl$parallelType == 1){ ## use parallel cl <- parallel::makeCluster(parallel::detectCores()) packFn <- function(packages) { for(i in packages) library(i, character.only = TRUE) } parallel::clusterCall(cl, packFn, ctrl$packages) parallel::clusterExport(cl, ctrl$parVar) fnPop <- function(params, ...) { parallel::parApply(cl=cl,params,1,fn,...) } } else { ## use regular for loop / apply fnPop <- function(params, ...) { apply(params,1,fn,...) } } ## Mapping function if(is.null(fnMap)) { fnMapC <- function(params,...) params } else { fnMapC <- function(params,...) { mappedPop <- t(apply(params,1,fnMap)) ## run mapping function if(all(dim(mappedPop) != dim(params))) ## check results stop("mapping function did not return an object with ", "dim NP x length(upper).") dups <- duplicated(mappedPop) ## check for duplicates np <- NCOL(mappedPop) tries <- 0 while(tries < 5 && any(dups)) { ##print('dups!'); flush.console() nd <- sum(dups) ## generate new random population member newPop <- matrix(runif(nd*np),ncol=np) newPop <- rep(lower,each=nd) + newPop * rep(upper-lower,each=nd) ## replace duplicate with _mapped_ random member mappedPop[dups,] <- t(apply(newPop,1,fnMap)) dups <- duplicated(mappedPop) ## re-check for duplicates tries <- tries + 1 } if(tries==5) warning("Could not remove ",sum(dups)," duplicates from the mapped ", "population in 5 tries. Evaluating population with duplicates.", call.=FALSE, immediate.=TRUE) ## memcpy fails if mappedPop isn't double (need TYPEOF switch in C?) storage.mode(mappedPop) <- "double" mappedPop } } outC <- .Call("DEoptimC", lower, upper, fnPop, ctrl, new.env(), fnMapC, PACKAGE="DEoptim") if(ctrl$parallelType == 1) parallel::stopCluster(cl) if (length(outC$storepop) > 0) { nstorepop <- floor((outC$iter - ctrl$storepopfrom) / ctrl$storepopfreq) storepop <- list() cnt <- 1 for(i in 1:nstorepop) { idx <- cnt:((cnt - 1) + (ctrl$NP * ctrl$npar)) storepop[[i]] <- matrix(outC$storepop[idx], nrow = ctrl$NP, ncol = ctrl$npar, byrow = TRUE) cnt <- cnt + (ctrl$NP * ctrl$npar) dimnames(storepop[[i]]) <- list(1:ctrl$NP, nam) } } else { storepop = NULL } names(outC$bestmem) <- nam iter <- max(1,as.numeric(outC$iter)) names(lower) <- names(upper) <- nam bestmemit <- matrix(outC$bestmemit[1:(iter * ctrl$npar)], nrow = iter, ncol = ctrl$npar, byrow = TRUE) dimnames(bestmemit) <- list(1:iter, nam) storepop <- as.list(storepop) outR <- list(optim = list( bestmem = outC$bestmem, bestval = outC$bestval, nfeval = outC$nfeval, iter = outC$iter), member = list( lower = lower, upper = upper, bestmemit = bestmemit, bestvalit = outC$bestvalit, pop = t(outC$pop), storepop = storepop)) attr(outR, "class") <- "DEoptim" return(outR) } DEoptim/MD50000644000176200001440000000325513624530755012142 0ustar liggesusers5bfffc86436646985c3277d9f63040fd *DESCRIPTION 032e857785dfa34303e78f5530c61f3d *NAMESPACE 296da994fed25238d40aa1f3f82161b7 *NEWS 4744d7f9425b8d45e7d93ed347b3d93e *R/DEoptim.R b842f7e58d4b9733360ac58a71e90a95 *R/methods.R a9a0289d3f2083fd6232760e941b70a1 *R/zzz.R 586da03e29de2e1fddfcdadc411768ae *README 3aaf13788ba7e09943bb073055926358 *THANKS a590b57405da08712cb65fcf7c4eea1d *build/vignette.rds 29b17760c2b67a7a0ceef6c670b5fe23 *data/SMI.rda 772610daaf6366cea9ed0e5be0b36fdd *data/xrrData.rda 1ded5f89ba776af46661a7f929162227 *demo/00Index e77b142399eeddc9fcf419eb727d00c1 *demo/DEoptim.R 655491657b3423710d87f1cd76b36d76 *demo/benchmarks.R 729aec1b8818952f6eee0093f9e3fa71 *inst/CITATION 5e371d6c61c73810b93fc6c5d19265d3 *inst/doc/DEoptim.R 3b5b4a4fe6ab5e3784235845e7c17d4d *inst/doc/DEoptim.Rnw e73d1bbd75ddd113e25a01f10142309f *inst/doc/DEoptim.pdf 1d519f7c98fc29e0ee7930457addc81a *inst/doc/DEoptimPortfolioOptimization.Rnw d1bb5c39fe0ed213683aa5eec802cbe7 *inst/doc/DEoptimPortfolioOptimization.pdf aeae01337e9f9eeae1fa145753f70ecf *man/DEoptim-methods.Rd c53c4e716efdffc20f06bc9291a99f78 *man/DEoptim.Rd 04ca6f51428b51c64fa4a6c9d53e91aa *man/DEoptim.control.Rd 8b4fd77d08fe22018a1e9f6f87abed99 *man/SMI.Rd 5bf5fb0c86b238ef25edde0eb2220f2e *man/xrrData.Rd 7bd7be8eb8490da9458fad71556e3b2c *src/DEoptim_init.c db0289106b914745770a93d253564a73 *src/de4_0.c c4026b112e94e829ec83f0bef4ff5fed *src/evaluate.c 6a2399c9da194de475dd25a6d4addf28 *src/get_element.c 3b5b4a4fe6ab5e3784235845e7c17d4d *vignettes/DEoptim.Rnw 33af6d8cca28531c8796f59abfa720ce *vignettes/DEoptim.bib 1d519f7c98fc29e0ee7930457addc81a *vignettes/DEoptimPortfolioOptimization.Rnw b9564ddd59a06782310989e8f33db55e *vignettes/jsslogo.jpg DEoptim/inst/0000755000176200001440000000000013025612741012571 5ustar liggesusersDEoptim/inst/doc/0000755000176200001440000000000013624410615013337 5ustar liggesusersDEoptim/inst/doc/DEoptimPortfolioOptimization.pdf0000644000176200001440000073700413624410615021713 0ustar liggesusers%PDF-1.5 % 45 0 obj << /Length 3243 /Filter /FlateDecode >> stream xڭZYs6~#]avdjI*;$DK(@Jd@h4!,?ubJ%I]+gLRfFW'SIuzfKˤ#4~{N9qIwH|Z]~0Xxo$1[UyCfYaTQWep7rc:f[\8 ժֵ*,L`ʃZuSekf ~%|~luVnMء2&ok ςEsl/$)NaBSCN(&Ǜ_^W6n2}7-?],˒-)^~ .kǟhxސV즘uj7a&f o)6S|\ [l,Wz<_Y4$'! /qW^.Ie-dNC{ moW 67% ZuEt^2k7wt ziN*{1mifB WUrH/ ˊ-HzؙH<3Ylq>Қt5]æw ugCW]O53*A{9 e &&;Ha[Q_9{by`pT\|?A2}.A{ھa* =Gv|e,`ұ4ANZic gC0q)KEx7!xI=M ?JZ5\^Buy)K'N?Na\k'}#NI<싂eTe) eg2t@`E?z˶Ͽ"]T KN)Q)3i`@&7Gٚ)cq'wB * hK2Jhq7J>p3hw[_TvL"4o OVG9^dwn;Q88S:)D`Za!e'q rBG6kl&\As>onjD7[{~X hEd4#yB0fNqB*1W,f;$0W0a7JCp4%52Aq(j`MNne?6?KB'hBN PKCKQ)6ƀ^! ħ33ps(eECY"-8`Ս0FL M);W9Ref;LGӈFQe+ $PeA[; _kU8WJ/=F=X VP<+A+Zwj5[Gw}k[2VXx X8Nfe4b:3J:jESZ؟FVїSrx&CĹ^8H٧M..BH/:W+x/陧g{ؒ`xU_c4.CK2SS1'Sأk֓XN_tM <{}Efy" ]KA3 :pCL &l@ lH/T$;'s+I,#:To'nI2ؾ\4ttB zғ,K/}URC*6't=-Gh:y AV Cۄ^BPuQsgUWd~l  .7T% a'㊺GcfZ~Vz f_uxzCU}QB J",Revr)_] l=Q8{eeb>ZDj*зqs]UJ\o+rA V^?pNmaB:l|g]s"bE;ux 5K1'm6ps%+/[ X:WJ.LNnBpiw|>p"; lԱ K@ŽN=w>EA. h hoOs(WLkW>k85ܩžiƈۥb^=k> stream xڵZYs7~ׯ`a50f-e'R#WF<$<R_ 0r0$gF_6WP^҃ףg/d֓J.fRzO}ŷ^I&Ȋ́};_M[7w?Zo*ﯡ<5ͳ @4?><U@έҕO>Й(v0LUGH01R(3iws%;$*q,vU&TN\o00Y¾? `-UOW]gMngBαUe޼̙Xs"STld[`)7Eޏak \o d.$)ȅJ$_}WE-g#O%,='͂!yXꉘ"i.*#PH.;V<wMoCoiL2뿚Q=t4{v%+-x<\xiEh 7)IEb'ҪvYoY&V"4+Hz ؊8} 7 iY+Bvd*t++4C)rɚAU?軛@EjxaI a"8U5}.綵+ ׿mt6Ӭ/L턪AR rPυ\Rď`U /v^ՙIiPX-Jjj 9oː)]zJ9gU &_AOw͹7]\ 3+ &H HEǝ4e!>@sr ~qtXy^<T'%)+cTX30,JVJUИQ|7M.=MU+#QD`\*;0YN6RVRe$TTf#69R,,hEPmD|65" eq|74E]Q^b0 ӏ2,pߡ63gmRc"KG5Z- Y`O *#1Ry3XO6Q L*TbL7MBA@zЛe徆B/ٌiR\ffJ6l[k?.)dAXNMu @Xx|{`${}J݃LiGӕ"J\3A3C4mC s %f}ȁ㾅ͦ;b$.iu͌;27TzfU\dai%7))ѳ`QV!J2Jxlߟ-R;|b@Fa]gAk y8X0?Z3> BP0xAb|Gݾ*N@Bg{~ 1Mx ]#k?u`0CYE5%HLIMN 2H&yȒX[ D"~%X; 5VH0P\#@xt IS{X`ʌ B+8,nE6- Q?N]{+Sb C55ռ*w(U$Fc&$Ɋ%K0<0UYbD 5IЦ]4YA[V6ѹa'|0T u*2Dpev`₭\nSj;tߓ7SJP~\N5D_L*Dƣ`E&% KR$l<`#hR`ېg1\TpS]7΀2FIZ'&JioRSډ̀{4?IZ`3k<{= O3f~ʽ7_ě!As=9xDFI i]͇m=Ŭ !NK⣟Q|ݓuǛaՏkn?.^/x7CwlR<742ߏOwO~$"1z hy#gHxM<@4ͯ'r8dndS? fۏw ԰@-'_x/|‡cm޺CXIfwoƕAƒqv>>A0ơn LK'x鱆 >n ;<[ю#LoĂt{097lyFpX'ؽ՟/;̔m?BMuc_]m^:^T_{6}mf>xsOJ{x$8?X3 A;(!uRd4 l8[Lن^U={Ju?)])QTIfc*|}pG"Jݧkhkk)(_r_貁 [=TUi*ya!Ai2Rd\Ow\X"Ylo~ 4w#V=lSF?cE :;i 6Of':ICn {МX?Pva}a ŋ@C%BtVp}%7n5h endstream endobj 96 0 obj << /Length 2127 /Filter /FlateDecode >> stream xڕko6{~WlƊ,Ү)@l˱2,;iV"!PDxou2z?] (u8$qa<?SϪ0pޖ5߫4f q a>t`&2\\f;ݨ''j!'0AkUnoc0 $V0g C{zE`d< #?NB=(B75{LP,цEـ(-O!g fx|oL=-~KA`nuVœb\fD+Ȁ|jd#tL'^,XL2gLsm}秆dĦ#,:*AR>gh*.\:bp#U49I?e$-^x#ri-Eˊx5~OzcR68^uxO3&oZC+~n[K!7jx쳄?!snIO9";Fv0Pg>=|,id(RF@,}g=v㽸=0TbNI%T>,_*M&SNq|vfhB 74fNN7 cFv$J* zP=(mfTG-VNYyA!وH zz{$̤lłw bp K rLj(SiI> _8$>Q/#ҤG}*TORT{X;NT/ LS#EzE!bH dzЕғ6pzYF 5ntS=G6>lCxYPU-8h"Sw>'}IS4TbнhImLl6χkfF%KJA`t؝MLS1qMR餥-/Z[iR?k|Hrbsn-)~- 'ǃ+Rh߶$^I⽂+.X}#}RGe yʛsN5l P k'Igɯ@) 3.CnO1&&.?7DÛg;y5L*$@}CjD~p9=JX[0"<9Xb[e(m/GT: BĹ dPUIx%e`Xq.@vg1@#OލY?B0]6]zYk=6k繓8~|7 On?pIqpR/3Au [P+qBrB%M #(28 ›2)l8aI@߫d 05 m @լJ 9_VvEPhA/žnk F/LdD%g*=1GgeC\(UP>tzҨrKHѐ..S~BC@Yv_VV+0Kqs*dq D5+8%0[Ĺ"RK Y dxfEo^-!^!6E*0QpSn47@QʹN"k.FpL5>U+)*RAoDg+ZCLvTdQ偑W] 6gqT$:'=~=ĦQDtY'p "`H6Ta'c\ܶjk0Q\ ~*V/=t1e 0c+#m]OS1 X4ӠCZ 6|и:֎ endstream endobj 103 0 obj << /Length 2005 /Filter /FlateDecode >> stream xYYoF~>PpwQp$MAbIP%+R\˥HYJR4Wٙ9 8{zu乊* W S4N<W{/~4qTqyUTCQ Ipw;ۘ-<[ͭ1Vf )B&1 B\(\mG(,IHǠZ^<AyKbF*(bzR:ꆌřw7)^o:C5MJ35[2@ ܛWLg7Rh2גl f~4v֍~$1 4YtUIStaakYu[8T&v1Dr,6,QZrfQku'E?x1F/j:?GEz9CGY{@=@:}laG*ۦ}`XQe\ dqT}6 ،ܪVq>Zg~ LvDzIAF okyHh}2,,wC"_-iJ[Osy|{9QVSӤَOdI>?@ &6f4,̩O(Zi9 F( ݆>09Rpڕ(qQj3ZI>(&{c5_d!wZSq}2'٨H_O i(y LYy]&8`m47y+wrNԼ?ˤ.;*ܓnVRz2';f`>wVA6EtqNibt* ^_'6Kc,4~< Bg{~?ݲt+~Œ0(LX%t6nWJʜexGs(*95A0pɸ%! 3Ƈ2 4UF1+j쌊[BH%՜ eQGMŃ,ζTtP3Q_\}ߔG9!P/( duJ{* o O) [:5'7P:owΡ@tkٲyWN$Uy]xZpٚwu, lNDH_;xh wlqc|5h1Sa.ڄ݄* ;Y6zؑt[syj=!Oau}wWr88g9#b}7cxXu{r.Y '-$gIӍO$e|Q=iږ8D3ފB ,<#1!8CbbUGXܨUb7{Hѡ{T3Ҁp;{k.$*]Hћvi,^O@DĽ~&`aZ\M \in{5{06.@_fk3ԁako^Rp,r&ƥWض0x "쭸ɸak4u9%WR[XrRJnaxţ8:@貃hf1Nъ,\ΩzbeMKY w(d'<=m #m>b!$3NWi457?t#; >Kg57h\9,K๗_:W<~Wt zá6*jT AICnĔdn ۾y endstream endobj 109 0 obj << /Length 2152 /Filter /FlateDecode >> stream xڭk  A FsERpމҩDEk%gǐpr9;Y:I_zugNU:Y%ڕx>W2y7\ώ06|aimy/yo0&}D0v#n[B%Q`0j'LU?E2[5 7 [$Fmյp67*wd'<\ Єda*f |፝ī`0 KBZhdar%q5",JQXr*($/` [V;6B}QL Ƨ6ʺ 7y +T elS`)0W4NS mbfߠ?*ņ?{D'B0BX1V9+69hzG_iE?[\oksۋt -[ {4W)8!"89Un J,$YS<-Y(2ӞX$g>nD8{Rl(k"YhPÑ M65S:<_#+mW}@BѬ쩴wcpдBp2.8ܲn`BzI &h>1)y䷖bd)fq([;q]UᐒU(·ޔTBoqy1#=n0?#<}&)=J/uC-(evPqjéK~GyQHo: "6v~pѹn&cN8UkW $RiO;pl,!т``vR#K.b㡩ߐB.6іe>|IY {(a&/N]>dE>D}b"w<-<^FD??y=2ؽNvxt5?$9Տ7i 1LO>F|֡^qio^< Ovarӯ1Fp}F?Bp~?zցse"y$] so߮Ϳxh:\6Ņ_]iR2@*h.oZ"#=ϢrҔ>br7rōmM[Nq؆{qn+%Dpg6m}pEH{׏s_k?0HKCm ߋBC.pb[*{Q.ʂ]Cb8}wc.c릪(_'H*5%[ m—nxLg_8{ˠ'.13~B Z[w endstream endobj 119 0 obj << /Length 2433 /Filter /FlateDecode >> stream xZ[~_a)A׊H) ALQ ymǍmϹlڳݙ}X,\IN6YNw7[e'*KVI&-:mR|ߖEH:es"ik CL7Nm M0E'Wպf{ʜ~ݨmg/q ,6Q$pgD(N4ŊI+cEeY44/̓!W;)6bQEV^PE!ݓRL1:O+)eЂfM{A:,Id)@~Eke-G0ҁcu0Z&@F e =W1~y^p-"o],u(!%nQ'aU퓒M e_h/Һ] eJ#@ˇpޥ%a֙s9Y0-T|\ 0,l1wqky] )ʎ;facRXGKgfGV*ڤǍ fq~rԕXE kxTe ,9J:UFa?N[5[&}MjL{)C5\%YQt8X]dA);u [}bί9='7<`Gp0<ĻޑU"ԢR\/LΌX}^nj >+X*1`2nf]]BvUŅd8ﷲ4;e(jRK~ziG\^6'nۯH[*5H6틳fW4[>#-a=<{n I@W>^)WOTZ5njU[W+r\$9Tsdb:6٨L۰x\\x0E||DQyGsxǁ}ljgJQ͕=6p,<a< H(`9 {yFIO4eT/K:WOgZEU2U _766A% =Wi=>GX i^t.Re5-:(%Yo IM#p)Ѹ:4EE[PČיp]XSCI=] Q: |R'׏"R0xPݽ=)GHOji.>S9p;sezeZc렬15uMr2Bfnr?Jm@QPeɒJVÒ!Ug Y&FYqdeiј@z%fu^=ᤕq'-Ѕ-W3+*Yԧ&C6a8}C^pqÉ ÛZJCxx!: -Q(h%2- berG`.ToujiYcʍПK7%GO$> stream xYo6_a {XERe@C;l(0{h ۊAiڬ8Z 2&[; E-M5#Z\ǭd8C`>̍8HDBNI<wrG6!#bc6qUΘ4k۹uےR26䤲TƓ@彍9}Ml{|[~I>$kϹnW^~.Kp:b9?RU`Uqk HMy +NV)c7>@J[o^a흽ߥA7G;ZΟ5;2l[/,q.$]Di`7sxW /poy}io+7TpxO sŕ>0OxQO_oRB\)/N@dgLȫOѠ6^HALrC!dx0k̖ gkF|/7"^ɺ']`3KL4E?Ǚqf޴?M8hxOgl7M yUjg2uB> hqzr&dS3%WPSn_uO -5_x#VYE r䓂< u$q鷎( JZYoO'R(rsd, =iL A#fU-M&@@2E=1x4F7qrNn)jO|_p3F{] ܱj#x{]k~{  "m7X*QEԆ'N P GAcnvXN endstream endobj 141 0 obj << /Length 2716 /Filter /FlateDecode >> stream xYmoܸ_aܗ"")(ڍr{N Wloc|i|獔dk3%<3CGGћ.^|ʳ*QYeI9ۗʬ/ayWo&*n-<-o&1&YORwjo 5;/wd4K}:+4xP!/rجty~=)dSrG6wx)hrGlwDM 3`c/ npl凿OMo,XZ3cu'V~F'utQ<-24$E~Xe;$әs6}\S}ͪΔ4CEYlGY*څ崸=I0ShnX.%r ؈}A msO)/YbQ='֑5;ִPdn,Lr[lvt_8VQ:`e1 2aֈlDzAiƢ @=l,Ld&/dD~*DN@ul\2{A 4i._,Kր햎p?0EՀU&BL4R Br +rëϚռ -(JXlS2% t(/̓W-zbo])-xQK:Ak8n0O#@Hؒq7$*R5 Gځv)%0_Ҳg>eB&:A:'.1OhS@?+ | ;8UHHO~|`(}U7hˬP1'p[\zU2C1SA8NiƦpq Q v4M6O.m<5eSFS&f+~ޑ'^v)d>p Y톿ež"^Feh3@@p2() |Ϣ.K.29.#`= .+'ʡ&bFSi+ælmq[fQr$cfXݙ%D lqXq#g9KA $Ӛħ%`e]l!GCҾq5OUSȸݛfV?0|iZ+՝Uc'LcJ wG DS;;UN>Aj+\*/-\SJG4[:A~dry^/jQK7+Z UrO=̷dEܖWb.%i!K*rn,fTq߅AK mB9%'d A); +|zni1f1]ڇ9nVy8ᾋRB"v_T3MDH*@Q<f| cE % ?iRvQim zLU7F> 62s Ag d! N'&eI D컍Ro,E5v谡#"(Dg9r-EpOfnm/PAׅYO>Z1 M? *LWQNh|e3c3"CY^,&Np.4SyXU_NCK pqA51c $!hb›ۘ^{ Oڣ< AhL"RXAtL1ABq+;tDߒ=%&i$Vby\i&\ h?, p {Te3SFJLc ?%!F-:C7DYMJ=Y("33kJsJK2sSu{ &{L`+&VWI92 Ӑ@7Zܩ@yoу(Ϊ$`:*od>`yMZ࿞|HdDN+M5ŦX ίbjw kVh'*7}Qe򚬯wIp* < _l6Z*qD!FL|3}7&QPMQ{L6TbBjNxtQOl䜖iL"%m1~xu0iW~cO,c P<UV|8;Ó=\L-ث(P1[&7v'$ +29F}Ӹ4g#fٌe3Ua?W]@c愥pBKNn^Giqo/'c,ŵϜ*xx]ne] PlPmGU zMWBSMpӑL1.|a#baQ+ {w{Iݚ%Gx]Ӥ endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 814 /Length 2518 /Filter /FlateDecode >> stream xZYs~` nSٔJr8ElG;ڻzHt̰J8a+DB+BЖ %CI(LhA^V/6,ޢaHRxD> ;'ȁxc^lBt @g$' ʤ*ف`Cdz`@/Vka1%ʓ<l:?аM66h3%AJls86k? w`YgmP%VS@888ٙ\+Dv$^jRLoUYͫ~)~qbˍ}<˫Mש~LmѰvIQVդ?|r>y8s3*Nլ_,:@7g3+yY3..p<ɧի,_bťX-fv7za'Iۣ?տ|GԕEK R%NEv|qJ PN{9cupCitӘM׍kjS35f0 fk8:~d?8/kAys6{sΒ*|* "LɂPܞѤaYi> ˫_WW$rVL$њ -<'FGie%/D-;CIr;$G~z (ɾy=a_!IyzQErbK $` \ 4!J,R+%F%9E2>ΰslg|7!gNb isvrt,woV=dܡ6@}ݷo bd_h}37oG@Y!tQx H=p9 >%%DB "r?絖w<zЬf·`j8;Bo[wPN(Q~8^^MF/a%8ai!HtbVQV$@|bأM%9$$GfM-b71!vNsYoE/ukLZe*,z'sAqz#9_ /,|3a8.>5>WFj-Ays5HhF$4k[߫sNh,bBa'7OqޣBք%  |7u",,aU"ITgSZa}/]&kxᚻK.U <`7њ:vOFhJ8L0 \qT ޽潥}oSׯ }:KP!Hb/ct#·or1?Bl ɣCB@D,;#y\Bq(mS՗$:ޜMm? Ga?t*j7,p,"Y2O]Hl|9SI!)pxɷe ٥vaݛ%|ZUͼIՒA-lrI?nV;\Y"?~}U~UjV\6XM϶G@t/S#P|$*WXdv6#Ć_>.v~㋻_1qXs1{=\Ud&/|%ʋ?q@!$ endstream endobj 154 0 obj << /Length 612 /Filter /FlateDecode >> stream xڵTMs0+t43- 9BФLpzi{PLNծba:^g al0,<i5 JX`~.023iқ@YMKCV)2V`օ1%Xia -+ <`Ȁtmj#< TCG`R"Q0_*ǘT”*JLYWƝ<,abj .@J1?7O`{9l5S>Ný)`.^.pݍ.7Q5 6I%$谅9sk徿(Ke*+@VJ1veQT̨;s?ڽ!^bѢ"vnaG>L״`׎Q0"X"s]֛PD <]|B`.61L⢥l% EAځZkqճVHҔ&ƥǥ+SD{K9윴k%wryPȸ>![tYN|吿LggY_ߥ -";LsAa.> b/Vt endstream endobj 165 0 obj << /Length 448 /Filter /FlateDecode >> stream xuN0eo HU+" & :T4G#tP|vrϟ|<=W/e^*.R]BX5xPu).V}~|buw*Qc'ѬsWj,^;kۀCt|&=ˣy>9}8}wy{A; x8 < .CT_ݻ8$.5R:fLX,d3uS ew>U>Uy`nS{XrylF֔405YGλa-(f`e^Od3'=ƘМ9@ z 猸nĽg endstream endobj 178 0 obj << /Length1 1690 /Length2 9625 /Length3 0 /Length 10707 /Filter /FlateDecode >> stream xڍT.C P8ݥ@P܊ŝ ŋBqww/̙s{WJg~$tjP ,!Rpppqppaia_b :  /)g9I&m{S:]!Nn' ' C?PgAP:\0褠`kS<LN>? g0l?eCP 60 ;; Z4@. g7%ws{Пal.5V0wsgIA.O gSr@ҟ,w;lB<+0PUbyX !.'s7s0j v![de,  ӱ{9Y;_ `i KWGvm+HA/'?2k 9@@<A(?uuX=5[>0]@+ߊFK0Y0$Y rq?S?#$ fCQۃ!<Ч5p_S]ПK+ XNf֐" Ya@?\A 5 `b.'B=qB-//iO ?( `gsž\O`-إAOsF|vГ%ovAN;_ n/n7|Tӕœ /T$_)?}:;_) 7_.vؿ yk>@Wg y!bLAB5-U"tL3_]oqP>e.9_J$wͯ0^R=x5ա}IPo7h9J3'QUK|G' M+?Z.{GҹЩ Oo0KY&r,2РX)ј=p'/.'G^aGsx,sZ(ri'}Ij@Bx?8F-H<]\$2o6;Rj$%"Jm/۳݁ ;X*4w@KokNjCW7gX& ; 慳nf`ҶfT= \h%UMf AJ{x\>X[/M H+!fĝ ^sm|&p`RxɫUY^7X ;hmt# 95xhj/9ƺR+{ u[8hb7^MMkLd؄ӓI篠.ċ$pG~^EJ颱a%gZxY\,s"e#dz`*rhmxNe6 X>L?q(Q=Nݦ0,`RL/%D9{Msq پGB~qkK7q fP9zPܠ|sA ,HslzCE\L^:jF|P|9gϧvl6qW|hTCW(> Nc1"{JԵ4EmԝZej_3\p]R6Kvq xenW"|u332B-C(:)j⥕LƩUϐw #JhP۩q7ZjȄ'T8i?l0 xGIBYlL}.ϨBqu1ZW"F|iY0AɚdvqѨ2V ߃|m(BȴP;}HG!.CSJ݆_9d#c{BR͉;[z1bw|g:Ŝʊ.;s]Dje \HAn$mPs4eF=bw®7$ Tă.*?31y9o; ?3B}Cv3`1)xx+].]UݿBw4 <"E0=9Dk!G|6H@Rn/ʛ0踠G%260D9`~_& c`1+Փs!*[[YVNtdd%#1x&mjU;nzo0m[i - k2 a*bKVjLQz* j'#(أj(CJ,;P7sS _yWhz`ա$mx65ih׏* \#Q]Tr*~1vy ^6-ҟ֕jf:z'nX ~hU I%5>UQPTϚp'GzG"0Z>`m$G貉)0, 7|ɋ}d9@c)n VN@zq []DCwԕGNYvW[D4- 8J.+[*Y3M8*RZ[|m.^+N)6+^mwǽ]3 SV=@C$ʶ[ {mav>}U▰)򳇹~;S'b(ƾl{cj2kcQtYx<市:yS!`zN/b7-y{Vi?pG> 'w(<ܑPOE 1pk'GbƮAsR$C Bp&VX7 P99uRޞO$:NRo Lt s {r0rCcAx,Z"g"RK]91mnvĄr_oc êl!XڝmGf Fx~V3Pa[7kΖfBfVYrXp`TzbUf0.v0YQSUso G7ޯly 4(,E+tCW`@.:14+V>Op{U6٬%aHP#l|pSb_4 Ŕw%%@/?E ~7 ,K6)pxe.@V6mZV,ќ=^!9D̯a#FI@=L^i ؔeUaY2;r\He&CW(rg1pVr )Eb|IB]~Ж07 J\LR%v K+IDGN1g=.e+u#dHcmF\uH*._RHlXS\$'ԈКDi]Z^yHt6˵+W##V3&t/nP /,eĿ]@TOok]b%B=z!Pc9$wvU?՞A>E4aOS#t/pjC)1fhe?FR cOΛGuIn!tdA5h| 8}& 9gC, Nᘽa4YzZd1IsJ+cnXu{pq}Fy7r禝4M=&ƤH$Npvs)p=Eݣp% VCjK) `ŋEp~xZSԽBߛQBaf46Z?ƒ! +P#k>#n+%)W/߰lmVa2wÐ 8SUUMLnR)l@Ͻ2tXw?JU?쫎U"EgtRU4؈3юҤy?0.¤p)ľ׈c4 Ss{ՙ>v: ~/g"n3YҩjFƬ#~ȟ'>pRKvk7O0dMVq0,CC"Uo i2KWN\QwXWϷDlכSdnD 6L0M U $¿ %HԋmOm4*et1qFa;1"/,rlAzů޷$3Pԟ_0HRzCW+t #lg w;h4}Xɒ1Yl>zA R{-X}s -_`+8JWTK\CyW^M[f{!{SVuLˀ[()m[`u mV,7M?~P.hY:j-0_!U-^ u/о'ih]#zm"SMre\+ͤ"5D9+178`u9Wias ʢ 3ZާE-;]l A#˗ٳ/.4XJ СO78=n8O1R6tr,Tb?r:v4˰fw"ݱK}ySeA[F5fqy]l@BV'ULjo.Ǎs FE>>)>%\֑c; h_ ̾1&0'>FS D gv6v|:Ev NJq8 o $Y3+τZ>Q(g&O]De=-Qs&"@I]V'{A^5Polr8/ٯ{Mt*A أp48%e<ɯ&>d҃l|6G+br;JN>#::S. ᨴ/#c%2)3HIL;4<to i*uYh7*s $\3{:RkxXx Gow<ȐZ;*EM6 ŃW  ވ.я谌h-pKe9)P5THdPl]+#:RyFoiJZ[h8פnYFL8Ңȇ?~DbgO­4  Iyp.K 'Oiډ|ù_OpӐp>L̓ZSRC#tܾqDrK=͞~;*D& <=c5;G_X0D)S-#R#\L&L!hAkE7P?b ?Z9!qMx21NZU0~w1W0C +XZ_j̆׭swwG|PC>CNo-T .;yl6*շ:mppKrICnOrXU9!Wl#i+`^2Kg,a=㍒q,TI*^Z NC8RSyꝃ W5K /p^%3LC1,kNgiR)ִ7yD8~˟zv:qj|!tV(`̏RӲVːi1Zg}c7b7+],[Hac<4b[dgiy+yF*9u>jhܔХY}JR \ٹ0`7Q9jU~k'܎|W^wAրRU9%hbU1Eׅ#l:9l6=җxedovYb]2I)KZ9iܫ8kQ*J=/NĔbOOQM" ?4vO@nM^$MdXeKC-%T/8[& ?`-tH/@۲*5R& /?"w U;r ޛ}t)'YYxhV:BR{uԂrhy +uyŽ:fs}@_|2ZfUƤY!j%J(N=%&D rWyl{A19~mȗ ~Vсz?tQf8zveг3^ۃbM7"K8%"nBZ 6]9s@Iy?$E ΌJ<AnuEXՠ'|OxۡT^^|=}*j`W+%9p[gi$oB'tH:*`')/p|5sre9 [-Zp‹0%dI?NYqW#h;c+7@6yA@uרuX=fp~Y.'CŦ79 DS w#xR4sj(͒XuZh\|Q*w#QG?s/m1 J2%O;qèn,o/?‘vKHK'Vv<3:bF E?K!E;Sy?;0G RTYxXR"ye,.7( =biE ÀgLj޷_ݾ-&yL)6oKH `|?ˀgtQOH*wYBv/h.I&Q[}Q[Ӯԃ,sFyE<^o 0,X aiGKɗNþ(2'bƪtbAPr6ZxK%b 9aEroM2#ze''4a:hݱh犇sР-7BpWfB:Fh([6zGS&{,,nCY+IK/TzL|OGOONB?;n}+mfb<ɏ YC;KBwTuR>5$ZY,<7UZu3lPOoH\e:sAҩv8L)5R5Q%v\sZ$[&]$$v_gQH15ͫj`[ӡ_Tqڥɥ q3b%N,^ZI7 b3OYRDb 1QD_~~Ap֕Y4Z%\AKmDq/ML*L#Z1i?6Q]&ͭԑ > ڭ0kxg~͑Iw04&@0gzf@(7Rvs1?-(>E^&1@XzuhފgGDzl6,L#1y{?uK0aa+V08 >W_'cF:7Hݑ "Yi2c8 j,,$/@T:8۬>pϡR J޿T5##g\Yt+l [l#'-Zd'~y=;YG ;̱G@%ZɷT17Rf7tAC4j69/)M S ]}/Y]3:m]Ky !,cᚱV[LC_ Ig!g 7mv?ҏ&ţUіfRUxׂC\|u&I(W߹QQ׫U"Uw鲈sNUerr+QG_j4 >僜WkWaKӵüUUp+ڢԧzu-Ͽ *_^ {Gr)Q f6XGW7*>N~}Mv v 2>^㱉z.G{njk, <]ӅCwi˾Fi2ɒח+THi 5<J/#przp▛QG>ҶxޖPо0ק&?^t}EtXzy9FFoHm` Z{'ݻgr&R SYC;q$DS4NtO?":gDgp#hnlH.0Z_ qYb_[= W'nEɶ2vw^QxvE^c{~orKUޗڧ I]d+s|%KJЪ\|}s߁rĨ -1#GiNҌõA<}\sBIaޝ97e-PF{f.*pWn _#4*8w@$ھ endstream endobj 180 0 obj << /Length1 1524 /Length2 9178 /Length3 0 /Length 10193 /Filter /FlateDecode >> stream xڍT6LHwItwwt CtHHw)!%(ݩt{kyv}}t9dl E [ !k dd!嘌 ;"r0( 5.U#(#$  = N*(uy>mX<""BdA0 ;3!] p('ٝ dax; n t'&#@Bj@Glrqtp* ?4`5'?3 t:'6Bܡ@O ~4t @QF|m``W;;GaǬb+uv1'l:@\Fv`[mzr黀<@*<0كnnn!Aa q@?W+ P0P*al6p5oG1Ox07~<߿N @|5㊹Lԕj,! G UqD,qNZ҄>2`f6gQDߊ= ?@g0/Gz@ .kjsueթ bg`wE7V q./҂?-n=n?T .6P[x@ xɏH󸎶 ?X t]07*(-"aHepA=`Տ/?? o4G!m<`ǽȀ@ ̙)XcmXe ưa: 5.Z*KջKsԾ.53Y;zd[:c-?F~)ؓƠГs7qBnBlWeu'V)|5Y%u[:kR1:kAJx|0gV5f~?eI߅r=^g&dgcL~oTI c$zgú& `a%D:rl2aMs:tpb%Jb,*pn-NCvV2Qags ն@+T2:J"ì拧Cy :}q~=yȎpgEn,oaRk䣃} g$m"kp{Fa*eY½KܓTH׶FtTc=RwYmRsڇ 8,h !*w!‡٢я&\͠)4)o x r/u=zÊvܧc,G5n:wUnASPLԂ_3/TkoފQ.qjLTY;Nԯb=fi?<3ԏ Td)vDhϙv?(1|tT-k7gek`P&?F/Qj/~E %: jRTđ5\ ץA*emاD>dE+,j _F)L%Tԫ bud˪|$mVX'Vm=[᳦ᡙmq`uF,ު:0 9{-0 V<$Y=\p*z5k]{X;u(Vgcah9J1$B˨6Xǰuqy [oʙTY՚kDŽn.4u B]E^9d-`fL”-D_!X8#+Udfg+җ|ϋ FS ÎyQQؘSO:[Ւ/s":1%'8V­-vd\GN֘)Y $ߓ0v2bzNq][|EX9>Lqɤ( Zz&7p'f0 TOu/Y۪کgwūcSc[OR^}n@<ˢp`@.[0 Xٞ Uypl4{7`%9)tC l#89@X[uSт %hK֞68TEPb7_2E~9sgv#yWY7ytIQIg4gvn(L`|=iՕSh\W,$ i|(bS1fɥe!+x֠ݍ,0*&r[i1OpbZVrP@.oV^]ݚzyWtɹ140聛9O\?RjV}y3w;bkʓ >JN)Ww\9 d\sD\lސ'!!|ނ; ah,mH޼!֒K}8ڟ4P4qp7V,~B+u g?oCsEZ>kwL6ڃѐ>ُEi1Mwds|(kXgdz~UG1m "Ux[X͟ȧM">QϹ}ƖJrT K Bf7cyr /í?uM]Q# +͂}G*!5~9=;7p}-Vt[4q [* vYZǕN:B 4`H=]x>tKvUbD":wg}wDVgմ.P>5Y׉6|ػt;}1rlrmTǦ밺Ѩ-iKy:Fj} V%-߳gM9u5E쀕/LG#-ͤ \bMq :T ]9,%ę f^CΉ$hʇQ"c6YU)gLJة0X*^|N#VD{SǨ_E_Q&a ]l2z2,{jGt8*Fzs[E7ؖErA*VdWK-H5T^T'_?Ŭed/Qo߿G=#W&}T>ILp>7crfxRRq8;-3I;/瞀)2K1&[`C"VZMdx]F@.E,w 0=nOW"{JCh UIVwl3jNq8QUBKn^c9ī˥{U'൳yS7Uz]j|9PoݳjÈ)l"~VڏZ.ޒ:VL='@'[n|kvԀ3 HmVu?=%vVNJ朼EI? 9A'}j8#l+~h"V$x 1ݳL/-'9s<˺ibBNbkزVp `HeCF>#GeNh$;jY?So&o-~8МaHLn~cM;L{Oh ("0]Lt'Rx8,l.3zE-sP' a ,œ:? uXXV_5k2g_q![=B3q? j\u?bOů(4$ލ 4Po+_ğ>4eB/۾[PbBr bKh'o "ƒnb_uxi%!B0RӺ$m͑d-^Z<`;}-`L-hd-cA:q>[`囼,J.NPsqt6xE : /^VRכ%0wze(WlL~"Ze|(["jOOa\IvwԊ7)osS6;3!>g-/͠-K׭o3[u0A3^ [`i^TRw[=& 2Idy%uG 7&IwqeL"DKiQg[ŽV%R˵ΟWjtZcQƉyP`xZbg:_{Ǧ ެ"B|-:$տk\DuGGYPGhoY9DZuyKnjqнh,u|)M=XVDg|kK[Z$=Iި,ɌSi]ߡ݃v1Svn>$V.+3kTe7"HƙM;ӄç4BxjYeR*M'2j=Dl[5 9_1j=9LBn^Jw?2-Di8 񚩼 ZNmGj/tcb!j m >#T1V˪ Ft?DF`et!ӑbb|JIYjda0S W2tE;4e߾]bkcdY܌{?x(BJ0 :reE~18v8e_B<1Hdk9Gź։}[葲NUaSvbHD\]hh_b0t^34}0ca.CfxZt]߷fY%e:JLjs*{g8zJ%{y!ܚg3;iO<9-=07>}TaW39 A]b3> J>ں{G)#F;3|ӧQ`5 w$ۘ \ 54u gaN@/nli~{oKAwAi= J0Mu)ETj1e➨_@~;v-b~JE"dI!cҼAC's|-W鬺uAN̴ьN؜RPʽ\G΁ojMxcWF#cPFeTmҴu. \ldx+UKx2?6Au[{~:z7;9d aqӄ8;71$|Kb1 Jx;}EquL/m>bG|D}@*yeܪg Uֈ **drSj_+%|0!Bϳ풱<=+% ZH0bN4@Vf09;)_]:U驳׍vunt77@29lH֍eI99oz <*e."+ޣQxoͭ0{6 wnHi'=läF<91sy$ؓڷXݒrRb#`d5 ĩ :B YO$#%!Uz(΂]M~"-UuF8xNu7aNCddmWbyO0JL7*B6PWj0 xB֞pyKG쉜(a]:>9 6nJ8F.|yYhCA=KfyC)7ڰuHBXu/2bjsd|+Ġ&|Y{8OH-w$+%%$@Gzj$ʫdۇWf$8Gș8b7/7r\/Y)-rC=[Ǯ9]@HrJLkXǧ^ؐD!\5f;c)2fWrޝ6n-bO#+WZLG0E YG?cwc0|5 QFȸ{>6yRv6sN9"WV]/yq mZN~2wۑo$StN;{K+d+v-=CR=mz+H}4M/ x7/v (.iv?kՓU)zWIs~{""*scjH98++͞6Jlv2%-s=|gCd@hkA0Vٸ&.7[ouI6>F~mᬽC@{&%p-4 96i(ݮCN4V136};|(ssxK`"H ߤAޙebp-Efjb͖ $ %>!I+ŭhsv5-<xdG=|ӔoF}@CVa1Nb.h-Bi^Zw_$/[ eiنw 'sZʺ6Lf KC8!Q}^4~/#g`m\5+WcP$3w?gGzi,r 8ikyI:y) kzjp&#Gcc&"7W{djGE` ?#5=Y I\ݔ,$Kpf[+9VHX3t}z`^ϢDC(0 MsVlS0R$13=JNU8rmp="yg̜7.ML?uN.wiǫ.\&+豇ȶ1ͭE $ p=)]zz^x^Kt,a9"U.heDW%f1ld@>}`yUht,^L9?=dVw F^؎bKe-a)KD܍)с6'sew.ѡq5)e'AVe4 {n%Yu"RIXmP϶Sy{lrsRYFaxP. ߄0k)4oqPpmLB.@l{ͤmX4iPȶ0fǜsyCM7׋+Pr1+`PC3=UfڙfBaO ˮD_H`C"?::2kg]0" [(1M=h0k=ÄlC/ƸNh誾 DcW<.UTtʜhGMh,Dmo,6B#K&!{ Zx3"sS0 ~Ebd;M*YxN?c$8zBwySȨWRiiS꬯xqL1Y(ޟW Xx{rK@O,6 h,qP>F( Q^j_$"ֻbiro>e&O{c/%۴c]FpvR8WԅlsGd UHj(ʲ)|%2!M-r1܎Wf/ ;N;ސC]X5+BJqMZUFUS%dT]x~24?MWl)]4_iYW/ 1YLRJg Dg vǴదKdfh)]~Ԟ@`p5~GW3g/Kqbb&>pE29|yPVMdg-:}dkZlM8f69y =fFajˤY5w翘$G`"W |+]?͠Tfg(;z]W%dxJ_xgУZi7`c>vJI9f5ᦈBbnjupn!FcdБr6;m : }z{| JeJu7 !# ʮ JSդY~=h8}vC4fksE~_(Pm6k'+Ue'S罾1|^]djngrk/?x2>Mygtn /틌 57ϽKDe0B1^1Ǎp/Wu}9T%jjt%xI1jr?D03h)6s͚b[ UF*?SAvgtJͭXYĢȫfZҸd%㌃˔b.2s5`uTRunY`#\޲ YQ :=PB QPY(zZ zCy AC Hr`ᗤYz:tXٝ .z;JL];f#!Q&]|ם*oEd^*B}GMfւjCeA#R+΢}3//+E𝞓ӼE9hTG)}\W4MiйDs5I&ŗ8b1,uqؔݒV͉|մgOzdrՔm) ErޫI9Y$O< 9x']3i5 9CU(ЖuA2}r,^,sU̒,"8 NigҖV6\G!shO2qhɵ{vg=[K/3, u2?QgBB&y뭜|­(PŔ̶lwDc$t2CBqU켰FY~eCs1.p[ ^< endstream endobj 182 0 obj << /Length1 2036 /Length2 13634 /Length3 0 /Length 14872 /Filter /FlateDecode >> stream xڍP\ <8wwwwwi]- ;`sޫڽ1לkS3;]YXb:lv&6DJJ -?rDJ-  Lf`sXXXXl,,1tpHE&=Rli?3Z+//7Q;3 hPZ2mf`ruucf`ڹ098[ 2dͿ𿱔&3,,fo)+ߊlmGzmr\߶@m6_+`ku]o.R`O _/_f 8Z,,G]f6oׇL-7s0k8@gg"(qr|X\\oΈ('Y/ѿY0KAf"n `̲[?- `V/yEo~?N?N"7[{#oZo'[`?;9#?[BfXy9ZYϛ !7o@7.v0;IfX?Dof\XJsMv-QEp~Kj Gsުsp۹qs|d{o?ov}'d`j(޴v&-ϚsoT4ںwic4"$>M)OIjs{83E2j>;j@CQ8al:_%T9kTHYhGH@qቶx{?J"Dw^⣷Zͥ_crGgOyi\xLrP7ЉwMrbf{8Hmw.@O(_~33o4tO4f!ȁVp&Gk1^m *'z~Qxl"n$ ⤱j^϶뷇&gS/z<'f!aA@{TEQ+[ct pJx/ u^ӭS_Lx݈TvF?+9/*YU/ϏJLv,ᵶ-"`,֤J^}+S⽧4I=Ŕ:mQS쎗Q&;C@O k5Sbv#{BHھgh:1"H1BnYg5C\AX=";_3\ЈĠ`Yp%pԣS|g ge WoS95}h4$A!(O%f!#s9>n3vOTjIB:1=>GHknSAY(,Ϣ7a/gY??*0tUH+iVMϔ֋YƊɻ(LR ^c!:?Ow5Bi-{)]D< (Mz9S|B 2FUBu16iaxqӥCg#2~u%eX!*Nn&7gxvT ~&‘ہ$Tn#:RxK$uhÕ~e~(;5\(ᨄ$M@ρ,I,w_ӊnhSבNTfK׶8IK(D8}֦4qDܿq:<so%)b_\!4M dfؠ!*Πr,~sUJ%⊺-@) )oYōP褛r+;F2zFO y:m.ɨ:W1F$Sk= ĆA!OӊMҼvi5+}rrv$r\x6vAdpJ~ O+.Q43ZwI4tѾ.+'75A5qe)vӅ}l6_b?Msǝ&2H/:HT(w®!][OHaEH)+r״iٓ7w%H.eM~n &銫=d{:~R\]%~-p7%`'$d/\OH*. А>KnւkTJɀJKY=|IReГb{u^ ոr>CAh"* w䎰d\q $*:߽MQK^Ni)qV-оlh4@WnjU^68B[ 2 țsn}nXM?8ۼ+\"Rp~iVOx ۏ֎RMׁY |~`qm!\&T 1>=i "-@;r56́LUcrtGwy:DΊG9:*IOeq2~eԹNxT%:6BM08c2f]گD:{0|H*a`1 &p3pCWFb\*AGwA=7lZIJ.z(B֭bR0l_ G|v8X'ɛC]D+UMkNqSӴw]՘~Kܾg-P]/WiBd=6eTo m` `f/K.bp`

* eVzΨ{k0:1Qmxe WoNDl7{}ьMc#߽d YA%"$KM Z&df޲ uH2kNgEGuM'yK Od?IO,sH!5Efơ1v=/ z_т䣘Hcicn%1Em)ߥ{72*&ۻKw΂=S‰̥yr04я׸k 8+vZvdY%@2<-R]*"eN6i'=֮𸺮o2?"y/gWptJ9Р_ 4|{W@Os>a{D my~HwkE[tȽ*9.0i?g>5g>ƁS "o; ظQ{?exAHen:~ib#jOlV6xI7<(2 em׺x0e!wb17M~8ߴ6I92ŷik]56a$]4i5vB1]{ظ%znO"krnJ$d3Hok({ͨIAK{p(qY6\ͭRb/{+Kli_Pp=#NjV1|Jr ߼>$5C&kAbVaMSݡR޿cJCy@ h4 TB_mcYvcݰt>jK9&}nVy.Q *Z1=ҵPjqCU^/Z.ȩ }[|Ξỵ,R4Q&LM.j@/0ObCJr+Lw6}>*{̦EfjMA]0t!WمXX<$JhnyG٬-$TgtOJFTen,dH|H5U\d+DWǂR _I #e}$a C>n{?e 4G H4)XuY~yW3^t @ <l3ۊcA{3 (jccju:'bE  h1BPVjQb)K*DI4s VXRؗSOMK"S;!6B.>?%%Q78zKƪ`)W;md[lkDa|>c@_٠6RmroƸ0mmhn37$wsIX\iK-.nm=tr|Pz]lz౑wNvqmp<|.Yq /Yv3e E ir&TmM>gR"-Co٣F.CTk0Zb2K]wد7?p?g~&8r֝;-mPBy=oq5ASj*+qU֢4[:ޯDHTo'X`~ˢXlMXӨYb3m|D}iX>Hgj&3ء<4(YJ1b֓˷%JMU8#io!1_|r$kblhQلb%iK9u`@™w]siZݩ Z1cI@sLKz^^u%K!ni $o vF8נqèCts׽\qu}??H@H/cZ4yr @chSsuʉ?J1#Qœ6(7"$%9aMJnŨ⤴XLﯻ?gk!yϛ S/d'tUe i!;c>@U֬.B@Q_8 ,dIӄ =[i63OSl=O$/1ᙹT"T5噵H7. xW4?8=Vzٴhm|b]+Wӎףyai%VCc?˸4Wm+itI3:z=ʴh\6 6??dĆC^,u1NS6]x0AV98!"{̽ǡ&-Rl^VuL0ۜQ7; ?rлfh蕉ؐobCVnhs \Pc83a hLmmþ1xe&EImQwwO2 ܣ=7kgd4T Z>oIDubhP@\t Q2xdRlϭI'!`z4pAJ;GrYF2 WC!T6,xLyeS\HBS@cn\CרFf#g{zk ʘ"\'LNCʼn1~8c>:bs6g 1SqQժV/o?EFzȥxxsZRb!C=Aeb9B?*pq"I'O9GL柣y .m *y,|$GOF3dSVZ#W 6+= P+@ç`W/\ĭ_nq/YeZң)tOǏ|)4ʼOlݹ_63]O ((I԰mx[<z ]p]@k[[7c$*GZ&MQp4;<?0@67K@IԊ4D<xwlkŁ6Gs>quz'rf8\@gzE3n79Pk$jI ^O¸y'H 9eR8M smVF@̧sƛKL XDTݹ Dj\f@[2 ă3LCNka)m*N~B`kvBR jqJ'צ y9ej&@NZ00e']RFck0Eю/O_A1&;ЄCPݸ \ zƳ ߧ&lU!3 Q̭r;ِ͓E!PJ_ѣwe,-Qn4qCs Ժ(1vNlCJд7 w/NulR86٣ں "Pc0TtIcx+I*Cs!UCgfY:c2W#4_T_u%u<"Dbp,:|)X?@Vt9pq8.~h}$~ $5!_C| t' |lj_&,lC+}f >1W=tHt],IecbVQ>1E,Ϊ"EFVqVѷ|rGShd5LK>sy)>W?2+7;Cem,y5 q i*Aq1{oW]ňꩢb,=da7ic#ƾD͚$6*Fxx7O4#.crLk(N,MG wZYmhXCZ{&ɴHظ~LQQ}qaq柀<%HJPX`ѽ?.*6)ewxqiuR겼7=v-ϩ͒7j4 =֎RxMMtazsOxn/j%+h9b=wBup ޡIyk9>G]8M&8lE5TT~}Sq/}݃w/# 뺮'(┿4CXtNѝ)Mh{28ͳzO8dQ6DC y-t? c|oW/CV7~BR[+ڮ?Yg ?FmOC 0ӓi7gYFK@:8.-٦vzHl i@Ho7!cz۬'c0QfyauQ!&,ӈ%>͊)CqK^b},Qw_=I.7Xx.{Wx5cGjyY9}$|ɷХ .o5Ty9x"x2\~q^5M\szyw/ա]C;,i+l<|GUa Hu~8)}~>'j@\jz6Rx{<]h꜑8tHL>zab D VQʂ;YW5[ؽ2O$keEƄ.3 yP'@TA MןwںKY5y9m=(>wC7b(My+o bأL22؟"LYP~"\*myviy6vZ+ڮh'7gY5%{:'EI3IFh4~Wxg[Gl81F6ܼ +λ7. }&sćqzy#P0ZLi5_cJ50:&f:].`JJ%iw tXa;k6&J9%ߍ|?s a#{2w OlnM_5?@pAчZwj SNTf1SQǩ]Tb W{ ,'ƇH[*7t]+˜]rTW"2,Ohcɳþ_::K~w?樜iX}Ub8œin@U fr¢k y2Txk!A5_=Q~~ĖtseU("T%;!DW:L|:쪚XѾ[Vt8`'Kft Z_^"xģZia6˾fʨr% nTV"F dVH#%B-kJ&2T*MLR$ rI)!(xi/@IR@U*She49IZDvASd1~#5͜sjܬ".[OϹQgBO gb]=zG|d9Q!T-jFSb yq"#9xzϻ,p&z."J-Xw4˞ajr oUc/#ϯ nUKxܴ h`&RRQG܁$x"[ F.<9JciCYW6~s7> 4KGyoFO󚋵p>"h1j$ʮu,(3/S~gŦagXQY9x o"> *h_evI`l(.hgO9h&m6k8:2ڜZ }1$CgO̞UEw*6=B|#eM+'" LON5F{ǩ co%!C)9&c$Ł:W= jG¦PzO0O0kcsV| TNr:"oO ۗ] h)31T=OS;LjO0?TG$f?;ND>]Uf?Aӈ0|lK|,31*Qp'5nf;#!A},K,geRcU"O>cZ\ E}كYWg ܱ**Wk$bj ua@Rg.kp]L~C/N<]tѦ"{C `^lAC{=L~VMxni'FX'2/3Ad^emF,ڽa0090 h082BS ޵J !agUYN."E=l^8#,(5vxRw;ҚT hQzf^Â;@َ0 6_}kGp1a*SgO妪"U#swMi\E)wK|YDfXjuPʳ5:RNl7 or4|r~9^j~/:F>2`\~nun`BEdjcs9A Љ1eypvaRip wۊ5OfYvM͸‹Յ.ꨞtMnDž(+ɺ*LYGG1H$z܈#v%~YHv 4,ۄQ1A3'a=ӖsNVGzI>aĭȇ*XXu_Q`D^3sihƷ,W=V>`bS0خѠ~V178=Vyf+%ŮmMO\ \'q>uԶIh1fm\>OGcy==fÇTri,5#s=k!yM8VF-;PQf ڭejE`Ͻ5?o_G;R6M<)PaB[ё#sܽz cE>PcQ _]b 28ϪTj . I(4M[$֗˞͟O07گ[0vWO7皦%I9~>t7P͗CެiqX1-LύζwqHt?MΪ1'Jq{g* tʹ?jt̊QHluKjR@7O F6oQs:B"Gn^c<@:CHu:LiAY77y,\[T?KٯÆN5[O#K9sPul:-?Г/)mr/x_.4%M+ewuYe-/6u5Wo}.0ߨoԔC좝ԌB6vot^+ůÀxOJn`Vb(n7>m}luy qV73ηM"'C>adJ  ;|>iw)5J1s%ر~vs8i*Xؾwl ÿV3`e. T9Iz!@pp}URTl /YMtf5rD{gNlI(J{3VLE$ ɇp1%3.uip%7"Ѭz̈́l ׭S*ypY;[N0MQRP.Dppss'9^cY߀0/t5Qq\CӮx!-55H \n"2P3Y j^?=SmA2h!=ݔjzɒX顎Rqu,?qotب|dAo#1k<9MJlװ32uRG4KK6ּVP4шv v7HRWd8[۷U8ٛ78/<GqM`(ZSpo=laˑ TFNBߙNJTd_>x$˫s枎߹esVz4f) <"i͂3DW5(8OX" tNI꬚Q-'n ͒-pc uWUro& endstream endobj 184 0 obj << /Length1 1479 /Length2 7168 /Length3 0 /Length 8156 /Filter /FlateDecode >> stream xڍWuTݷKJzNQ`f`DAZBIVZ:);}/~q׻ּgEϐ_naH~!4@Y[聐 @PP(((LaE:Cp@P8LeDTHUhx8DBB҂aAAi j40;2upDV'˖ $%%;A@m06qAh vmϿRp:"^^^@;pxA; jv`ueGz QA0;Z`@ As{B@+;lk wq|0=iH>fvv`3E]<RQ=١-tCu)+ jUavp N>(by 0;_y àn*P&m$@LPPPBBq@m~-b mF wأZ@!;@"< ~t 젶H  #;; Tz,Q"zBsL@ڦƼ5[I  %DbgC`pv?E{?\:p!PPL#K?5<3C_ OJHF!1j: ޿ HTa u_?@@/$$(.C@q7WjK |ʄ< i:/W_,,Js*~ciŶȟ;NfԂNDJST5a|!q^lm9P3:Qs;\LRWWzVfH9:VRR#Y1TBq|xF7݃b=E|Е7D')w5G:Ti/cOBl܇K47S/{}h Ug<CJPl ADԩnVDW եU#[8W#!cLL7A67﹅)S[ܶ *vn}*Zq+:-d^l3Cd#ٕ߻f? [zvDN(9VRHG zYo/u!ޚMX1fj/QcךC3W/G#5^l/%2O,^aߖ')ދ2z[Zs'kJew 5>MX3_Ş95'^P7wh5P:=ݖZÎ &B̍4ʠyzw˧hCu~ Dq{9O &̜!+#Jlit4DqQOPtӒӝX5HȧGv8=# !WLDW]a ?LF|0@8:5& m7tqv6pN_Q 2=\szBs;7 mIDB/EDj2>|~/ oUARtTݽ&\(De0@ܪ%O;|yt]f`#YY,m`R0_ ~g=7U~OVQƋuА4Q|XFjQХIIYgg܌v>\U(ǎ;[tTtY}K=2{uIj=&ܚZ(|'͸(z>ت0<&1ö_APLMsND1ZI%]K*NrSJB$8)kyj6cq.c0MY(\Ը7vAʅdy\\s%ћКUkwb=yaE֟ba%O#On2J.S规[_p~rwZٸ?̮P~`xd>>06.E4bM!mIB[!G=>+p>Mzh}0_BvܐGf MCqv᜖&> ҼrY&+Dauoe$N3`;ΒR$>q̱̰|6챥 ~Wbzn&g;*-Ab tn{\G4[~zزB"{+ܼOcuwPB?o$($a~S~HG^rp [NBȹOq;fvU=`4I @JI2WFUU]?BVnH)8'#T l+Ml8~u0yǺL]műS<:|.KS4Ka6]:B[ +p ԤQK,.7b2@Wx˜J U.14/ARg/H&4'lEee gU!ZUYpY&'CƦ1p>RP8K庞 #Dt  &th]o8) IԤ[^%?{_W%dV:p[NWϗPގMoմvbٻgm< yU8Mu>Yk=9k;Y)w gg ͭ7s;Įh([.?#92%5zʿy|Q M?cwK{kZxRb`1OշZsncGrB .'wG(OȖ+UޏH~ͪѯ| 2R:%y0!&ܚj/BxsDvv*%(XA9wMlCTPDC&0P?ڹ 1ꕉl9Ru"(C4֋48n.htU,s!L>EY4:\ę"0My譢4oi'W+R:~uͮR;L  :'1eZ¡?oSK*߶?&/\lpc%ɥ(}` kJx,-O8E`f;"ߧŬ

Eѣ5x:qMŵ&ϋC>LiT@Q.ܑKZy/N31e E^ySDؐ+dV)L|?)[A,;PoΎVm@O9#Ϥ.2 3Cv?A^&:4m1)J㴜w2oF_X(s67El?$BZV3jEyy[Dm}εZNqR7n+Yud^"ny6HKJ l6&viDlT!6Y $Kh85`ѥ<Akx/FM:C+kKa(bk&G=BvG,5wlփ}?įS.IN?I xYԘaY-@cR|={ȑ\VQ3HuQ z0ϵ/yAOS-օrsQL8>Pj^$ۗ Ǣ>E$jVr O uOo}4Os+REr([(9zVXuzPj婙SYK@SŽ:pQrٛ`k@yW8HWzjao&\.U~vnI8_:Շ5eÂuLpȼ n.A:UG:?1_P(? #)WXQ[z'Aԟ U"qudJ/ a/UQ˩%%[dg h6F1s;_ o+^+Z qr}#ySgVz&sXqy3ܽGLyиat9M3NKn0C|N.dbRCgOESUU:bN'BbXha??lźIRTX"'WF࣏&fm;V|)l'5H6Lɫڐ57uiYmGRY7o2o)ݾZRx|j/ޞԞfdqb;fqj(؇bb6j#-2:jxˆ 5_Mu1XbSmO B@ }hgS8"8޾q;=4(H8{#a/tdsǼ l7ǽ_8By@횙Ƭ{%V1^7&6enN$.qJ8:?AEj3&ev-g䓭+a\gSRVBL,Az̛Wo'Th38SuΏ[3@wԯ_(u1! G_7e0d.XjJ-dCO#|\i䣲Oԗ[1v%ΌpA^qXorWw6{uPWw <윸ؑVحb-<%[} ȍѣH!l5ؙˠ.wFhն-0Yke`_ˎ!NZl)ƅsZtV2C=j #9oE &ґ^Nn44"% 7SԨ\ME#0-MO ҵδ12>+z* pO.TG?$ea(yʎbҗ)l^\fݒ5sRH>>"<4 ;0!c 憋ݦE=sMyVȉŦ'cYd\1 ~֖IUuq[v"϶YTEt:Ew#Gɞ I-<0ۼdP =9REdo)[}VS`jSHmY6 jTПRgiAOig^Yx"/Tc ݉WB躵J[UfY…w_ƂL&$1M[ כƫyO!U{I%iꢵEqoXLRT \.I-eʭD"c\]-͇Y􏹝& Tәv{a\>&nJ41T`p]Cby6B*nJRqX>fgTKO[?Ct׺$\ڶ^w.g Ը8%eZ7L$xj&{دJ2i4:OEPX}S:!Xs1*nX ~(oǻG^0U 4Nl#a+KNಷ#SK&O^- &KIxG严VI|9Qeռֱ~Jw*s5bÕ>ek(Vtbtz )z endstream endobj 186 0 obj << /Length1 1459 /Length2 6595 /Length3 0 /Length 7586 /Filter /FlateDecode >> stream xڍwT[.ҤD'IwD@ $$"HJJM* JU*Eҋ=w{׻V=3̞^o"8(hiAH cg7a؍(4 _!P 988"PE;PGh2v w{ vȹ@Q08@]p;@ R({i.^ Ї(w-Wm OidC/AA83 G\P;@Mk9O?޿࿝!66$`P&? m!h9CqߩCrz?mP0$͏9+  (&" Osߒ nk [7$su)TdC1aAQaq mRjF";\P_"FCܡ `-dSCqG<f Я矕a[ TUU20PS?Fyy'OP' ABB`_jp;W_τpL.A67h+o;_q9{A7 @]--忭jn8JABahe'Vq6~ 3 Ea_6ܔ84 ha~7 տP lMBApIo0nLm  W/"h11 " W6 QX'ZWb6n(.ߌeB=6dS ڠj9FaI|I0=JqS`ǎYsX뽄XYO^^>b;Iьk$"^e$1`_)ރDzpv{guI&-/~}_\.E'kՐl?!\蟡f~te-C$Ϥ(tx&b4jok=e\Iǵڻ˻w8:8X%EaO34)YM}GhT꛹/N^]# ?4qjI]/m`nz:jY6k.09s3xDL4šPhF,!uwXJ `׾XvyiתHx4uvn' t |[oZpY<\sAV`\/|BX^ltDE߭vRD;t?]/ O̽$ t{&CcJuoIv؋KO^nMWr 6Np{Ѷ.SQ-Vk%,R8s)^zܳ6HJH^|gdːjnzi}#d\0tj]ˍo GhXm[(c;$3c{Lo};> /AnoP/X;D[?zamcrLة}؞fASp_jclҒYk[`Vqc}bM`MbC\1}!1hϞ9>K@,剗6nQϜyFƮP|3i@"22 =>֝Z*vL//nR(gEg␵陪wfl4K RL .ܳx=3)}è*ju'yik 8ZeX#Xa(V*lîQrQgS e_w`m'`7h91YֆC|ϩ$x)4Ppz0/-psz0S?bK#mlQ,%ڲM% o]cfzMGuoPN(fua^`SNՑQB^%3:[);=3l ^WPpA̯}so~vChGo{`5y C` ic\#[ajIF/OCĈT7淃^S7R Ez2%MUFǗ6j"(`[R dPhRj**ܯU5j|?{l`np/-+]}WVOuj@䅀F hҸveCbNpЮ|\XG /սԯn/+MـuRӷHXw,ht"_֦?#:IݟtN +%,*1Pw݈5HiNVKO ΡlI3I0]4 /{J[~eUQ;K%%n'٣h'`\%G%' Hj5MZze6rrVwSy{qn_Qra@+P>z 5#Ɉ@ X,RW-ڕ *F`ن~D߈ڕvO@ |v" 9̤^d5OUUu짟~x!/aV/I]5˴ͣ|u38?IJ1ޤ2/-c~/ xddI&{潜9.i^iyyJmzi'}(7sC矕Z Mt&_GQT#Wn@TYc PGX3{@ÚDcQa/ Rt#jzT%vJppRݯmլbB= G]26)M?zӔ^]Q+͜TJ&i 78wZN[nSۤa|7n Ta^hd#¢lSD0e'=EI3z=W9sj'3>fKߏB_jrʏ#&`S2{GP~Z`IU3T%([|)&>0WfyGƬam@YC+=_̹#_{G%7ɩpqKKeՏZ:Ix.fѝHʝpr3r.rةwSGJڑmɷTnkȮh\씛?ﳲZnw{T¨T^btƊn¿wݣ +Ug52*Af:摙*l\8aI).^zàKR %s7ޟNu>qN?Q Iz4A )gS*SVv㚿=W HT_;=+{9"{*Rݏ>mp9UHEbeяo{\džPl=rZR1ip ȠmP_ Y}B::OZi#z;Wu#MB+ύorEX-lo#eʰPE\bń2D8/J9eLp《 KclOmρ "^;¬_8E (9s \dJ\0Ռ&[cȿQ`;3p>2SaX G42!\@Bt7 OW…b|FL>VbeZ/ ų9UˡkӺCuUG>dhZƢ־ϳλͲ46 ~r֒rXGNқd9s++т&6ιF7\]wD68^PEˤd 15 -%T*_8wP/_߁Àc>}֒!3NgyDp͠gz S#n6iK80lzJҙYv8qBk5%B8 0zӳ^lV'Mٸ{8-<}4 3  i{;cs;7*KÝ=#͆O1f!R4>Ǘ!^\H\rJx{-9l[vΙ3gջD)|rmp};RnJ{z $uMSj+'h3zw}6?[?CfL(MR u2A>XqcY$p#Ʒڴe k:_ xr\3-i>ŕ ԰ldM0w؀C+:T d(TF>+SEli2 *TXXk0,~{󙌞Bń'S|m4) ~TT ! +TxufGGtlH5ps >({^BosQ[=Ϛ^0q:F_ZpJ`ymFA= whIV>hQ.+73edu'TO™:rJ'g]4O??lM,MX)\{jV@[,i]HDbjF1&:V!L;B:lq_~?l)P DcLwa}&m<um?' =@;<AMojsFtK 4mC5_=02ͧoO^4Ob$3ǵr6jOYǕBGV;EN(=nN]y!uHq9b޽rO?S{t[pCvk+=ɧ\V?^$5sz$/LX8p.)|"DXJ松V.! d<>]La[^]{L̫ٕ^K>}؀J{ZEy _F_ {On_QMBZV/m,9>*w͊)XgArGQ/ / * n)]3ﮥf SIжOoBHJ]6n&~Bwa,AL^hQ{G&Yi(?4tڅ}%=aRnv>-6.Dba}<ɅWF5WEm8j{{Sp8ulQy:ӕ2rcCa>cOkXbkX$B+_m.Y-HE:;XPޛ|fQKY|)<-YqFOO˷ ӟsW:D ĸh^m^5 X ӯ*RHY%Hd+qZ\'5.Xg~[1G ~ X,O3+x3=yy5WNJ /||X g3c?:ҧƽoO3=,$_#{4T˦˿PG~'UK*igŒ 6y^-li v]nGr{?Tk8In[Kk)^4(WV1P:`l"i;~i0::Y=N$r@8H\Ky0E'8? $ ᓠF?n,Obr+L 0(({w4/.=HE8X-HIi!rY+~1l фu0<+ҟ[<&"y[euu(S E&Tfl{nE%ԍ {r uqϵp*h-j9cJ%BEGg:7տ49x $ jje@=QU",3]d:^ʫìv+K4.xOyme QPd ܰVH 9!HPLz.Ü28(b'?Yϳqࠃ aY)kt}ȣB#Yt/Sin0>OBo[?2w1hB05&Lm:h-D,qT6.":5NwH}%O5έEBewe˷%/=^j>bF?VO K endstream endobj 188 0 obj << /Length1 2572 /Length2 22212 /Length3 0 /Length 23674 /Filter /FlateDecode >> stream xڌP] -qwwl] wwwww{;}v*XcژTdjL"fLl̬1U6V++3++;ٿTf.V9]A2q+N f `qYY t2(0d\,,]A450 bgle(]-@&@[tuuga`ڹ0;8[cxXZT\̜L ( ni\l lL]@nf9@MFhf?p_@;G $)ڛ6ں8@+[1_"* blbeDa@]7s3wuA ^,Lwn,VNnf26,\\<|3'%^fR*qtp027Aq\|V7B`cZ,D;[ytYA`'}z:z1|Y$dT5?:QQO'+{x@~Fh47w-MAX5Yr=V.V/U߆[Դ@;+[t 3ߦZfʸA boa6ZHZy*[X-5~_ 4 Z@ߔ&Otvz! B\6-yk, +Eb`8,]A v?ĮؕxA;EA v?Į5 AÀvZ Hj5LlA# 'oݟw/ٟ\Y mό~8nOPs@_7+&\_Y;9db'ݖ^fYd mZ@MPDڃ./=X?ɀK *a53dNK .AL%r3CNPsm\I, ('7W3Sc_|$ h@N.fvV\m( #' ?$w9_j_ƸAs k@{AJP$o3}h 뿾Xs?ɲs>Ņ˽󞍂Ȍ_И+T*݇~m$Bi{1+K ɕ+ 0]+9l̈jv[%Z䛬~L#k[6t<8 2}t?P?MGƒ^R7ry?+tD {340L'BmU |+"֯\4~[q|K rWhTjCJYpKH6/( 9ev"O54UȶFkECºnM7o5>p|8/P K50E)UJ$ nk ޘD]ԝ̮>UKH{ѳc8MB܁`xa@aO7UJ`Hh+TKjy`]s#[dC[>ez8\ѩӮFGG6jx,UOCRrb=d2`&fYozg ?5+wѫZź N]rM\(B~|;){S*Wž;aZ$U, yv0Jݬ4:hp&Qp`[34XUqdL4"( Ub``]><0ܕA]G33WQ,%(s\_<."(}+ނTGF""N f¥ 6؝?gX愮.4o$tœ|h8SYmؽ4"*wjcSUNkYĔ߭쫿 ޚY^S.;nLSϳg](5  ڬ?}w 9A~TԖc^;`ĕFJe"{-ѢD|bWbZ-LIit)w]hld 꾏_nxqw0~*nl+aPR Mf찡jکf>-S.@?v&%teڶR)KhЩʳ raee #R4I K QwH@Vǥ6:0y uP@4ĜJk[a;{NA5NX(%LK E ܸTˊ.ݏ&hx ҇䝲͠5ED4⡖sςVb46KA*g2CMzC~Ќ@Vɩ@VW~qy@0dLp|]$qL|lHtù6b!3S76 ^SOxk`FB_QgQgt>Lg_SS`>e$b \Y)k݊,Iq0wzօ%$sR> (\4,Y!k/Ixyr|t,l6\Hp19s1MG[W?K$卯~^YW(+JARF:Qdނpޖ <\>NRRP~Hy@)VDocbm^\ (Nu{k; ja 8S [Dp&R7dzqsŕMĭ4QdY3_m TьϒH|j<^'> D~"6QrcTA -m=)2{s *抵O~`~| -6IϱkW1^7x_9_v gz;S,۾A[L۵T⮘lF1|:J'xΔ@~tm#- |UdFΧ25HޢܤPRH">Z8d1 0̓<ցn*lQB V ;e9cpp2cE~/.S7}_IaC2 V¨9=0Jlw)ٵ0QW+6U1:?k`h;T!Fk+?^#JkH_FOɅϠJGTվQEYXw~Kh-c9jTM3Sﺠ0boh)+G,P34PVH#'Ytn`nisb$_,oyp<_[nLfK ty;uI콺YOm~Wr7rse,kLL4Y+@dq1E9ŔiBbt:Z^б ɷ?wy;|۫=tðJԻ|0<5t  U\xp`>/LBR8,=ώ$EX6DjكDxLw2ևH/H+k%k@݈`{eO@lCX%)Y,4mLrk i=0lɣ'&\|ydE_j]X O#,hKyABxs2rP'/-WEh&yd䨯BІ8aKX Y8q1F$?ODWϹͺ:I+>7 oۦ#)u,1j4H7ۮP‡X߫C$hYFT bKب4g d ;oʋ%~p|Ep<4Y$5&NOb6>]6Yaq04ɖbl@eQK\,җki~)\8Uӽu]  JN:>{ )Ɨ7)h8&yJ'0,OvjBDU(oYʹ((kǨ ACLjD s&M g|~R? .m친~q|"wkmurbKx:mItz-0a5id7薄S(3w{0^̠L`"-R+`WV Y9tr s?-rd=s iZ/~Ϸ ݵ1sT#}dҿ΢FbI ëF/>o6T/S P..шY q 7 N,˄O dJ 0x`^@{ Vbhn^zɈܨF6%`l9fJsKDEٻQGbм呒 Qfi#R2eUSW?ˊL#}1c/]+~˜_JaKfJAĒ^app_fظ Kѣ8qo#A2[ TTlxWh]K6i#jkNZx9>|,ŦA(ŝ&ώfDmSyx''IfV֠BʍP*v Օ%zu=fxaS%[}{?G]R >KJp}3yF)[0}GP2Ng""kVn?;W.['Ύ'1onbMI`U !W"HGLXtM҂&1>onopj{x|r r%uJ!QN}!^P2o-h\JeMj|-I)?{obju{4k0=+`k X0k'7r qL=_kMxʒ5d<(GԭD35,A} $!D޵bY~ʏ D=ӪMݱwMaGA)JĈz߰{B$?Aݟy&g`TSLiw6R*>k>{EepX21Ⱦ,݈f8Ew7Ɋ;Uj(忾q~;J=z5Քedq!ZnPT5p n݃Awx0ǝFZz¼{k:A-Kmosyof'3_>M|sUG4{HO'I>"w;E1Y=EQo`:Q P ,62Bo,IKqE6_jm~D*`ijP'Ftg\tr%i0J"*U:d.GIۅO%pa>tV k\ך j4o[bV3P`" {aDQlCFQ6=hCw=y}2Õ7L P*%1-G|@ bL T<6Ƣwŀ۶d9BA؍Z D|/jFaƣ]f45Eac2v%SbaF2SpOyx8n@7,/[~F 3?мtƮ[Y"{;ϳզϲz8$eD8&Njx0C&zE_#'_e;H}/kƒ4W3RUBktW5:>A/. 0RWŸ(6/q})"ΨW?hY60.ꁃYD{ߧÎN 3R$s..,HU@TFЈ%"7d{:!I@?$DŽ?U5R.R*Eҍӽ[=>9,q>?.Ӂ[Ar5T%9!yN?_f6%;J.π>>"GPb0GCR8> {!?n5wʆ['8Aj-**" ^KM{7!/ P.φ5@14hu 6`lFE)XH%bKISNJ`_o:?X{Kso n3XQ#dYe^Ը""` O!R4 -Md0mRog% &G]}w @dގܬDD|%ln WK^xܩ)PS%^~mC hB(ĖgZB,jby*QSn)(~YóG2V8,aOkwF{ s@ަejv ^5rfc̍Ӏz篷Y`/^$Yl 7ĪT'1sNcdr9eP{@}S+oSQ!uS&GW"thż33/vg>N9GJ8E] }B-vGA!b"1c 'wEY&\Prl?~/d7" Pxj#f} rQ ߰ 2kU\PˬkS!SIX8x^DRDױr霚Rq[wE84z>4:4`c<ƺCJX-b,,&zȅKXBZ~?(>:$ͮoA )<}XðDIsI-gV怒yl ?.24}#8AJ?715D'ܳBJݨ[y:(hW&%Wn.#$b'!3LŸhٺue+q> 8%虮vXO~}1F&miN I]Q,-r.2~0~@s*2 xIuůPku)QfDs "iKKloa6쫽$2ڦ>'Ag;UTaB"Hk8 :hnK><;56͠ KR=HS7G߁c)/n%SDU1m|h@(4"!AdOz#siń/d6Buۡ&m*=&覗 t)5-1Vj,ޓ !륖Y TqR 3"U=a:z"]UIĹH*vUɱr1BGV5f/VixA!:Ϝkۄ"cq ]gD!7%?X !ߨQX"#`c8xZZn~r+UI[ةɪQ.wgzC;4y:B?%4ުbTlF L؟JUlj12q^X(z[vx%&).2Hm7ؑJ;Wg)`ny.[ uau OI㎯ۼw2aD~4;Mw)DŽg`T!j}QH=oikѨXGGpݽ9TEYNHM6thrdrNCSJ-h}Ln$bcJY S~!Bj1F# *4y$.m;M-1^zdk}?k$ELc7Fʞ-8殍VmՓVyF4Y&-"M:e;PMGI*K;E`l`eu?Zfu&p0clNFsEgj:JR&-#VW||Gn^h6&+׋Upz$AtthNMα[^ʡGIy&˴R?#_lfkC!xU{5饲78U|tY"7[ #_ 8 z+O4z͙|L%qJ:PSS(Cߠ27D+qѡP#;,47s6˃<yIQ~Ɯm޽l a!ujGIp! nB?f iH.ɈUtefiH1Q]xST7X /N 4σt(K]4W+~҄Z+ ^;M{כ|?ג-9{Fiʟq\&7?u|W4um7LPxRY'ءS4!.b3;Цfj†4[PDJxˠE&K%h UGrS#&^!$""< {9 O&bq1,p],,I2.#wƺ@+ПQ]# i2$]D'J.8AFTanfdJ030~@U)RtKch"lTj. rmP@dz:dyET-)4jV0~"^)T߻2Q]23So7+á8Uk{CyOYu@|0u2^uHْ^=.̔6oq(|ۃЀq ת-n pGx?| Bip[P)15xDx*S rĤ_3 BjMbTS31'Jdxxdcu,XoaI?A0<sWOb w@Þ_B2/Љ3-3dpѶ>6|ָL5ZAԪ3V%ݥ86S^U0v0GQ6һG jleUC)e#o$Vxʚ/]}))`%4n:vê;;, ##p@n)?h-=IoBN1X"ܖ1sShu4躈^/SL'U^f)dۈ( IYi= ylDX%hk?!nnlg n RPǂȶ&ŽQ*=Jbxʵ(I"|apEdabheMcůCh DPn9)р4nEID<@[FC}. ʄQ4"ѴXզxْ2TysTkb M76oA9Hf",p/Ш Dc!J6u#^v )N |vqK@|ӞSwEw7=5! }+_m|T3\VpMDZ2L*C]X>VzWSVLqV':@17*)avmMsp4IB\̦qಇԄcB{pI3]r&"\ķg!>=͂otޕ77d1.WhM%/ )0ϔ-?$X?&u$"Ɣh_5ls5 Og5ɶ8+?IϊAee8Xu/]ڝh#ldF<!SϡP};:P"2rwK&A9"^6qH70x$W DK^u ?RO=_-}N#Zu ֠4]IY5R3Ƥ}+VY. (aIT&#泐О©ETq/Ù.)9Gqm=\sE} &GcNӑI)RF9(8\Vi/]hqvܜ@,luwίwJ66#5 fp=B ՀD;HEzPK>7eSl2CI=zƙ:QA+~A"P4AkK5ORҭUt'e)6FkGq}Gb8Gb`?[~Ȧ wޱ5D]j2(W$\T).R|g7hcf+OegN0F CN.Y,D>\4JetjˎU~76kELMs.L?1WZy 0F:F_ 2i u԰gMf- . Wݔ-a>(=ٿ XHOG3niA:ik \I0GNx_W~T3;nPRdJi { !Kd/+?*OH[rCB\4CuwOS cZdIK!]ERї5|svj 7dc{B8/rަ;P#>{,|V¡JDq.ېU%l@Dž ϒ:*Z.m4,Z͡I̺_HaO-œ-3r,˜Ѧe|9Q?柛8C C)PGJtMOV^1d&syp%9p_gƒJqۭpXHqA2n~#/ᎇV9(d/U d* I}VmL>J' DMLGt2l* lO09> Rz Sc#fY1{cs<}503S4n%Q҇c rzOq}Ƒzu%FPlu-)!ar ̅, !bBA%GՓ791 hFB1 ٯ76ַMӋƟ&y0*Q%+St|/)ޜ޲LP{O)kM[!)+p8hE!,WELےuLCy/m-A>.5E,XI3ҋ Ը花AGxw)CWcn!vC}$8YLc j w $p(8Q &lr~2.H1 3:^Y;ZL| { \*={#siGXpT@Pv)~~&dSBƀ fvf_<'`k̔ivi6XcL8]r{Uj'4~"BQJ˛g~?۩nRR;[tAcjK>AAXmӭlDA(2dّ1L\:/ gH+@;!3%h%Ӌd)mB}O ǫV=¹ ;yP3w8KW~VʲfT>PnL7(b7Gc;{h(#3hh`f: b&(݀Pcތh[ީh`l<>B+0bR~G@ XPP n[|GHp6LxT,@<ˏi}v8-aUS;uP㮕"3jCZ)&#E}ib _y׍o':t9^RJ*kM1A{ -k:YW  *L捯DT!Ϥ戕8wq+ 5PоwQgN=lnY$HW~nC.c̀ G=9`u}aBgg?d'ym7=dM>rCd^Ne\٢bHm["+| 흈KebybH1DY|F E!kOM}ܜC%bj(BSQo6}#H)o'C.IX_l&_ԟG֣\#Q u׿GnWY/}0Xyf~q#3 rU-U _\6 -4RU08-.k!`>Hr5|F56LjlW(ŎQNju*egЯc%نWAwc3W'{.+bcF=Td_imwvFtW=l5BU:F{'G+W 5B dKQebiJU> Zq?Eo6i9"~NK! }}dYQ"6Ӕ;@xʶDfpR, %1IqBb{qȻo;X굞')A#\rHHX9GB [qlWo1s@XkcR)+8Kk4Q;HµH)< fM[gou|HPa>Pa Y[ +A %m.Q00aG'.K:ޝ\nCڙJ0f)[bz ʝ{r7~t_VLW;{݇` ʒ쯭+U]S@ v/`V ҧ;:"u6Y/qRZg0)hQv+bѕjL:nБ'By^-V5CC|F+XZRFDԕ,Np0'4Kh!SWK#zd;tU-[g EҸG:R1w=pe!2i)uԼ\szZ֤`HYJ4GC[ؐC62(~\<7.бsΐM"!UTÖa.cv6VDs| n&ix K 3>KAMd`{,>yq)RE2Ң WMA4aK;:%rͷ:vS/Bz38 308\kstR$,L,&o< {^ h9̄xg*0rCSԛ׈\#;fc3rJkyoW&d*c쾭 NSM]TQbQ.'uF2bciNī?#v9S9.Id!D0h3_Uc,G< x5f _fד]kQd3^ CR*optx.9De}egPɬzdlWq޼Vf>K絽'T";yq]Y#NS-v~͗(Jug t>$ro{GN[v>ۼ:P7eZz\ϸ֪ϕ1͊_T:Br#?*X]R<-$%>,K}Y k#r`"=_|2BhWfއ*EF[S 2=lx{ I—U!CޫSaRwC. EE\&/k7:rnx,eQJ;vaH E,1?hv>QLqsF vQ 1MՏd#ƚm>=:8Ȇ]nڼ/`[AEH'Yx2~7ZDpn5G|{ssUZĝrUrq5u~Z#3G8Ζ)t7>w^{iNbZ@iK&7\]<I7h_6,sav̱{fˬn'SCXE-j^8D^hϨ}Ul8+̅vb pɲbZ 5[B~mG௮ Z+ж~=spk>7aR+ bB M[; U@7`|`ِUOq™h^ :FhQ\f`΢L߾`|WGk[-ʱ9"I"+ G 3'gJ)IÈpde6}&!<[/pA!g:]27XhCû [ j,6*})ޯ ̢x P}њsWWmM5=P|&7#T{-4<87xKd/^N{ o_ S,ϦSIF.XէG ##h+T (x%*ߍCd[Aq\iaP&,.)qbKV=mhl7Yk>K➓_M 2 јɶF?וHcH=}a8x)?ʂVAe5_l\Ut l,jJkR'5sx-/xW0D1⪎EsW, C{!NhS \,RA%BdUNjoݎ3۔]x\֔/0!Z<n\?d(gDԆ1Ep ROJ>E#:nJk FmP,]C޴T}6co6xM>~q#vq]X``H[NLzʅJ44Lǐ[(nؔ^w< _Twܒ<Ǔ$TN5H_k8 P}AD錵査OCʺci(~bеЂxg>u"`D͵p<9 zCʹy:oͰ@6!Ê'sCѽ C'J~Y (MAPmҡgiex\wn{7Xٝ(& 'u-x)y%Q= lV<֢Qdcdo_eR~(nEgk;{^_?|%Ļf0\#JF˺E\a"8 ߔfօBB95%qP(f@F^4lCThHoZ{6WRO4GѢgr9F,4+zޅSL,9 %e 9DWl?(h6g8 J迱&gx(̢r2/Z"$0W>o7Ps]=Ud?ʙ 6̬9+QoU@-M|f$C ]oJ -DN.yY͊ރ!8JN"}[YŔߖ=(p؜Bm}#13eNQ ZՖ4=RJa|͏;&FjuQfA΃#/#G#q$T[":I\\US] X%I. A'ϡJgT6&zv 2eyxݯ@Fj5WYtgCȈ*>9]ȥ9 [ԡ,RC C5le/5\k>\@xtVaUYp\vļ5l0O\ [ĵMºl x[C55 ]^Tw}̀htxjt![L%c{~c.&aF!W6SGCaM,$bI@ٻm-lqBQ=x_GV$a~?bi XPs]` [nfM{1*)FO|&\Pq֌05%J:5MQFnڈ3݉G-#;]ZSn8_ppE)Amq58QP s n>ĕU1Ec# iB(cbJS^[F BGoeOs~3BaJ`l$Gם>սf~0Ymgz{~Sav:H׮arǹO'd{咇ޣ-f=IvAѶW~R=i\*dPM?*'a]u;:efCRlUx ~,P,JHH,/,טb%i0Oe,Mt:j7q6ۨlخзX$#S~Ⱥqag0 ޠuCJ 55/.W^}  Ða.t, yPL%EA gŀMb[_t eQM{ݻq7INݝ[o/,kkns ?cߥ8.K]vP*AYrxEMY&>p^ye]d?tIv~ Xtj<Tt~EP_ܺLזbte!zsO'ʖZ =W^PC_(͎3[{gZ_\AKnC+[6Uĉ9/||ק[ޙ} e NK X0v ]3x8}s/ \PpgD~?)#30Уi Π]X: O3_haLƛaT3LN:ѮrHRj'( #G98/;ڳ`0Z@o(A@I-DnVmʃ栌ZM_HSdQ^Jm0,6)ME?3RwuZ~WxpN7--kM]3-ڝ^3&VlOʞ KJfs(1}ʫlUN>z\ NT7Uv\Bˋx ӹH%$M 鹃8({W@vT @=0aΎYJr!ퟅz 蘃 ^2ܮ>|T ĆXz!8[J&(\|j"oy-ח>zEz<қ9LMωl!$b[QJ2eXBs`ݽ8%֘ןq1{qನi;U*/dSĭpn*0O/ՍO\, =ӈ}-E&YA -I)"+zo͊{1SM`Kn4ԫ*z@zGNFz2J(ȌB1buXFFqmBFtF/-Lq88}7΋V;-} ܺeGnFˍ^y ǧ`:kd3X]T8>RWm@%;9|nhp3-&#B#bF0=NUsF5^#a3ޅЍ!2"4vzxVMB$E=yF۩p΃|rbu*L}c̈vyQlj!uYyDtAFÉ0=Hs!`yo>a{1D̷p3eat#?`4w3,Ey.ZLoRM@IV$t#ADR8Xr[,LhRm,uG`-VpKyw *ǹ5QY8HuA/Rʯ͌ 0ҧ9]$7׫`=vn(A:κ 2L XʼnL /2X#ȚΔ!ST T7椫҃plױx 1C!>dG,Nsi?ዙlm-`".ϱ<EjD%8$oO|JWjzp՚<Șz^Zo9uEC'U QaϦ-zR9\X=)ߒSi (.Pi3Hs1H$x. `7ur$5|)usyM.C=6=`CFmC8- : 9gpjwj, zMjɕlQ[]ߎk$ϳZm I_Q3wCw2&9q(&a}]-3StW{WAz"lT=URM\؍?Ē@ܺߠpz{n V`dQ3#`J+ig4>|I 2Z4K`Ӵ!²5]3xV,Ecz&"*Qfo&׎ 9o!/yl?PD\O"{HlX{oc3Yc0YІŝe @4G=f TEhKKcL A>ghzXXN#4=RV 16hhM{Z{5lw@B:KMVZogV>s!Nփ݂u6j ]NU!v&Mw%ʥG՟FܼKyy,Abl`BvP.;/lŎ*lUfe5vƩy&3/pIk͌SA fO4SL>M^N8փ͌75E\(ƀVمc(Y- 82)5qAr'SW '~]bjDXl2O8@7IϴϻU;Wi1 +cI",n-iHpaԽZY硥 3eV=kOά-> RUIϲ962_Y1|ogjZ`nG7}FZEu #шEi{p92ȍ=\rH#VUК;wm{YK%VNΟr/s`UNI띜S1u!C\xLAFl+2X Nt .tفP57 z'O`}Q[&IqHE. jN3PZ4/ߩ_E#of.WNTD膠ᭋ}c10ှ9;ӂ|^IqZ6kb0 ĽTf+emXݘoE%#ldw( t6=gW \iPPmEIHlY^ZՖI·lҕ֝ ⓸3ZkC ߛRb H ?" endstream endobj 190 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍtT/]%Ȁ9H#) 00--J#tJK(ߨ9{Ͻkݻf<~mp/( P >"bc3?Z"6c0 $]:E ݡ#PT(&)(#! Py@Zu8 $bSz# (t\p Z #]m!`?Rp>vD\%<==A.H~8 /r胑`k\6{0~"6#GmGy`Z؂aHt;k 4:`g?;ѿA`ApWsC`&? ~9H8:@A6hߍrzzC" ($?54KV)]\0W} {|!0;_#ع  n`5ſ=*(vl~%7v6Vu#!`/`mD ( #OvlGFo dƖ *&yy(OHD̢ ݅b`pğfѷ=>36X0?7E0C,w?Po+/a@xuGG3߮OU Bs@%B/.e*Fp$׃ *[gD &?K*lv%$" ! o"ђ708 @#~SX ~~):(Ool4~ſߜDp[Pֳj9OQ)ͧ\|6 R4+>+q.0_~kÏhNkJҟl!8N7\m/!#ߵq3vf:[8nՙgWmopVƝI8XiW63tx(>&n/)ʗcIC6 nslj!v~ZIr `SĮ4&$ |R_R)dI@jHz&j3ڐR[iuӃr+Q^ujяza~(It)i/9K:*J(9镤+;xz$LiR8΀ہFmCRn|qnV.CǤ1K 2/tx;\<+1R]0sߕD55bM;EJp@*δ;3Ŧn(rD>IE7,(sA%V=0!J%a8.aS>h;Y&`=uʚK#H|!PSynf/1T4Shn^B!KIi!! 5J-#Q(ͼNqE3Ɠ#GZHLwW$wC>4l(B~ב:S6!U/~5&, YOlj hy̥U1 N\Id:v@ SQ/]tCG2uk@uѝ,$ ?c}Q0@u=44mg z{ I.DmX6WD(LkEhni(9}d{az 1,Ũe(ǻ3e,3&—$O^u'5oU;ЫM-([t` ?Rl}1Đ7N.ĩ2t7?ER=zYbf6]pD`@g31,ܹRo>3kMonFJy_^t.~X] |N"K#вMd Cb.ך"&z B##]],P A1±V^aV36~jzwQu0<~՚ζoULby[p#i:m:w \!ܾ-onVIz6(JhqSnuߧpk#Eq",_U@i CF)(؁XkaD5lPB- ^K=&j2}EHLjq2٩Y 13̾< fGSiU[x"5O-ݎ7u>1^E.)a&'ѩ' J:^DN.E\&mدg#bCbv^~v& -ޔ*,lc@+nNG)d_LQ0:}_U-!8]0ˎqksm1m 6. Ǒ$2Z{ګvZG7Ym&Ќw#0Gf}P${Ǖ])fDDzGbez"uO>sl"ɑÌxG^IĺO4Z >A[0OT_q"2Wng]ŸխTw ΧRټos`bA=swǴ-Wer{*RP)N{^Ou/|fYڏzΜ~4N NA)lV#xbg&G=We\[i3SSM/:Xа*s|^4OA#~kR2Vq`L׬=GY¨Eg dw%nMz.+1T SFv7rTr]LRSux·{pD+6:5YE#05.h߸=0п# lD)cZ͓_g)'IXg6}ܕM))=fL#C~}wiZ'I*屨{lּ.嵐]-u$#] pdi+t}%-ޮJ=ƭ? _(UwR&x@fTf֏;;Om-(a C䛨LQO'_y}#kjɔB̞UlU$uw:yx4tJlRB7Z+&2Y'cdy䴧}+ݔfmycj'DUzkɟX ܝ=XE-*b7x2G>[<9ЬOgș}u^=?XecYʀߨS0z@\)"Jҙ/~nwY1z:|wZpaťM*)j/b-HΫIƹ A’C _?cG>o\}ѭ$JrxdU=_!;YH}U, - o'PWoܳ L|] :Ut&UZl¥RFQ'iSW%bgGO i,CG_ޱwȓRi[J)`\R!zB+l[4Ct?4wSK5uƾ>VkS#9c^z`J"BNu0Y,e,5v;4fc>ج]™kXp8Hx>:4"9 P6!K@Hf./+w52:' 8G'0c@|#bySb?C(sv,l_}cu (g&1y6Qyt+z4TtHHVaGR#ikTʻe;m2 h v2\pI_c!@ڻ˛xԑm Pܽwyn@.=| joKLy[0c-lrF2[f1*1^5$WlyNvGZm A>Nh$!JRt6ܴѵ)cԄC]7ĔgWGScmVKZeWІI3/}FUTּXkꋪO%y~@5drjoSXz_yecvФ%^Fw ΂4:[Ay~Q5ewWHG)]3YgwIR!&y:gB;!]| +V\8t\GuX mz}mNv-N?(mۇS3o ;z?lt `VɊen" eԭ$ca~f6Us< /Gl#ڿhD;M2slFp^b*U yµR69 }$ܓlF_7(u"R%k9y:t5׼I bKc`UGܾ̃#-EKqiDr&"ViJ|Yςc9(C"U)7ݣ6%{5!9i!E͘0o"ؒ]3{Vp_} v Jv|'n`#uAAUcmͰw!}> _!1+m%O=XX%cpW/QjpAeRQ}zsJrKCy3PE5,('v\W`68cZ >,.hAQ Pgt}h=,J\"a.hR;LRXk:2#[\eCQiV[ٶ--dÛwQ+Bƒߕ^ȩԼUq)ey`ɖwڑ-^l7f@7-lHW0p+ YMyGQym!FF 2JcX>c3V<,oΦ jc-v/enHy.Qiʎ8UP*!ᅀfOnux\'x>|\vLgEO~ ͙T' CMk?n&_~5*^o5$ʽa]-M'}6qx,ez4rtxglޗt͛=!pk1!Z%xu@.;R Ϳ9sp Lo1;8!Z#xnÛxectk->g)6pzE ~F u`2٬ojrVS8tl-\5\KF PÑ4AM7=G6}S[C]IT"2VմV.^ۡ9 xW_-]` =1AD3M&ī^?-~){?g>cAM]Q?a|&_5jzhg4D\%&J=^Dt[)þN>ET mM$m}'݅{M0}C4C$M'{@͖L BN5S7R*9?ziZr. 8$x7{HH=5=ۊs]và)~YN8?S7 -) ʩb ?I#C>u"Љ*m9[OQE >OwmX3z`Ќ%}]nk;1Eq*- IuF%Jz{rAdEګgJ. Җ`^]e|lw3`(=y'Ǎ!գg'8Ы|[qM` e#&"VUp[&(D$_a1vy$ê endstream endobj 194 0 obj << /Length1 1790 /Length2 12680 /Length3 0 /Length 13807 /Filter /FlateDecode >> stream xڍP-Ӹ; 4 w;wK{̽WW]}ֶ9kj*2U &1K's;3+?@BIʎ@E reEp$Ô67??++߁NI3O%@ tCprqY۸%ւg:@ 0s(w0h8Y>UVݙˋZr݀@K6ƌ@дepr2s {%7@CN t+XFrd3 'g3G5 dH+2{3-4wsz74ٛI -0{_ݹYݘ@tGCrprp:!O x?u?ﯵ,=YA.@9EY\<| maGqMgN?V-@V?73O O#66%`9"] ߼+`.<6޵ehwˢ(+gq;y8L\6Vn"࿫ł\9G+'_dO߄=u :RvzW,@ YX-޿egK5sWw+9OW%%rf3 hmCI w ]9U@<(&6VO?]--,.v.n#.ZT0=^a X$xX,#^/;E?=oi7Xqr;Y,,9,l߻Ӳ|eNoN?; 翻~Guow*T3ߙy3|g7dgO_Jpu}w@ %' pۆ:1B/)y=t:&U.G-b)chRk/~'M&uW1i-P,ø3c\x.ț~#Od@8(fXݬdwŧ#Ř?L]+/^n,!CfL`Bc>dϪ8{NvOcLh2q%W0tv[ovM#Zk|,%#FyMn"q{,>KLSyy}#8e1䪏+^ѿMaD@=:05q*P+"=} & Y|)n\4kB#ޝh3H'Jnk߬Xj5eHvv~ "e!*o')Re(H^% ;_7*%}өF]Nk\h.L"I񇋣dO)IUE<5n<;6BN#}+X۳"ϙ |22Rr>q\(b/{?.e/PavCg}w/-V4,F}k}{^׷TxsDڴw"TY$b5CK">Η*j@AY9tK\w[`>\*!Qly4iGFǢ2Bƹ=h~[n=^<M>tt y_LQ PtM3\Pa_3:ޜaQ;07 J{oEx&VzOx85h?zOҀ(t~=106{(oeƆo_w^C;d͛,=.ZZ<Jr>-nģj,3|UDy(sML38=>YAyVl)#Iv~ G y:i+hi'cD.}u$n%:s[!a"r|dOZzjN@C$VRaK})~Hr(^+Ky1"S/ )7jbnANH @S O!3I84׍?p'C8=[DrP՝ή:lkB Xi7'??Ao0cTzY5^s.,rˣ-6l*<%zHsU7Vw]wG `ǏXzlhk}r' y[j \R+8kgﻰn  #d֛byU7|$6|ӌ$1N 3"=@cA_Q[`@jx¹oY$gQcPGiۄdq!!4T!H(K\+ Is*zDs,?uFZsiB~,S#N1h0͆pV¶#wY˪1$h֮I'֘#?O9IB x͛#KĈ=\l3[Kj}@v /M;l)N4Cd!nO%5,aJC C;D69vžH^ S)(|^\?C5ک+^I$OK I2:3CN[6KkdXqda V&@$c:ir"iC)z>N8e_: l@mF%:Oj5>&= l&ز~!h u& ֆCrQY1\Ty@;ֳ^"( M)T3ho%ʷeۍDrb@;d!x] Y)X#XWZ aSy9j,+ZI uAu)2'iNt yX(Njx2uF*;䱿GTi;HlY} P%"R;w&}En ~Pv: Y D:X}ufLڽcJ-7v :+[/KeШ #׀]׶Hc&%;M0F@D/.fz>34.%/$dh&4| .̇ߌE{v FtR 0?!ݐuu^( !T#ShcN)j2bu-G)E{[)[/I#۷ē@-]ېxT:}_rڥw(9Rߜ=D2R lH(ҷG. &n+!(Y'gJ )Jذi%R`- :=Rg+xz=YL^70RЃ!!ϔо'{(vvD"R[&57{'6I4pM `c-HΆ,>܃|i%o"*w㓺Řds6F:̈́P-K9U+ռ S&N 7ttՠ6څ7dr/}on?dD S*.PF2_'|n}9 ~ɑDUhu{q/Lm\Ż儰59CGp=m\Pqڽ&j7n.na\"0+IͲ#QԱ,{RG~h97%v^;.Н. j$E(&Fh "!IhZB#DpP@'ڣ𹳀>X:v z^с$2 U'X+}Ԕ c`DUL>G<@f 9M{I]3jlo꣯$/PQT 欝\VCl&eL)!+4Cŕ]s'X[ɛX QL_qRJZPJ 8j8L-d)uo6Z>Ρ8WX5A (0.\NZG푰%mFLl0-麙投n AqF5:̦#̯]6Mp$Rl_AQ+M=S'^,;#89wngr2,ܐ;"O?h0Ā'Օ~[! ,Rb"Ť,1ќEJOQl6%` l*3‰1zu"QC-+w9'AKV'?3bWU%x&]_!م>s#(!Kʊ}f;Y *vk"P^F&fhl@ZTd̴=2o:c}\&P7{|Ѻ8RAVaӱcAJ2P•}oT J'X!֏fBH^?D VV5WhJ t&=H5N} Al}9ϽGӈkmQ >uwr C.q[`K!9Od' ⬜*.[> 'X{? Q]ⴖP_v7g¿5B^b?pxfZ^ pzP9K-G4rʳ\k'씤HhlJ+e?(_{8z$wC;-wtpEOv=y,;G]fNiկ!+_t |dn9P~u"͑ Ꝇ?k}%sbb}za4`$X,%1$z꫺鮴['t=W!:첛Dg)Kk/~ bYu:(<ıPe~:QS٩<o\ N_jUh'%'?wUj6f7&ڹ^X-ßd}@%vFoZ!ln/wo'W7%* AÍ)W4Zt=[֧+vsSÑt'8-pB"LzsJAft*Q~a_j¯1'l;5^dFB~@TGS+Fz0oi@v݌-=ji.4_̜PH~.mG~s N@Mk27 }jk[-S{}8^'eF(NZ~:embm]?Nh`ѡz,2>k73ݐBt߹.rd"Ir\tw4{]g: [y8]~1Z\eaB"rk߭;~HYrJYsM^ t-9F]qbB<2Q*G}9* ӇW=S$F OS CIp0 nR?)QlVІFI/!4rfJ[2hZ×G,w]- ^drk\X#Drbp4oG+#sz]ˈ;}.-JcW\Fh_&U]z(GY"pl(/mJTGyTVb xZ\AeoKrDǣ_޵tw؜cђKec[WPV~bˆ*[DE7O1lh*{oߧv;Qq|nο}{ymP~IAe1b_O-J 嬂A*3Jzdk0|yBꢷl=%Ʋ~vgBa%[Y3rU9ӡ/?ۙ!O|{<hs-lcRyW\5Z2BqKu/=ەZܩM3@ȣsX]3jWZ>f :_e&VLJڻ~3siĕw&='1#DjE'ʽ78~a_b#>si%">DCLV~;9-i3ʞ1<pz MR$ I[ 0M4GVmFF0-'O2782rNno"_g-9_&_jdsU{{ec%Y(p ;qD.q ?x[|LuY"s%];sI,;SSlqkvY< CM=HM珺է4!e+Lda_/$ 0yV>V}kR1WS}}$@,>'+9sHY qx`.e 9S ^T6櫷)I}G^=η-ʺ\8ލK^ oxD󷴯ͽ >#OcQcHHMhIE$2cwk&ao(E\-#`E-ɓb 1y N?QjC{4xu4o[-m|^D8?_.Qh{~>?CH vžkjUW#BSW<{ᕲ`/e* BU`Ua{]mxn[+Q֬?U0tI5E{*<\s5xnWM `59L.&PmBK8v2/8Ai*a \&k(|(F q q}eٍj;%{/@pas_{{pI(o7n7Ch"Ï)mJ~HI>MʞcoiIĬN;:>I ƁV+FQ;,`r7;R%e{Β)8U٦EWLKJm.DD?:C|(ЫX93Xwj_N9L:83G1ϐO.bi@pfr=i;>%Kj; :!x wwγc9C5ȕCAp|Qz FBS]+D%w,ADa_v#6ES|'Eoʐ벃aĎIF ygf09;y'[.>ɴ7яȳX5:t u2 Mg'P[ )fblKʌY~Q*łJ3趄҄ielù|V8a=xUN4@ IubdPS-q bWSݶʑEea5K,d'V7yIsjd7[10r=p,m1=D'A[d$ JʾJvS,~c⬄ce{Zį҆3B 6qZ׌MQZ$$Y("&ɿOaqq(o[1Q1'47nB,T(FXU^3".3Զ(h5Ζl/ݨ勔v gddUqғN@&6Q]giND  ՙ.rȷC5^iTUgk^27毂Wu-RRHj5 x!nߙtaAqUl˗S8g&mW*K/)?/|DQ~zI;jx>TLCܑS1OoR N,̮kS- & e]02W`3a[ft-T׍DZX JXӷcom BM*ܮVtIџ*/w:`+ o4@KkhKѦЁ0b<Շ'1؍Yܱ$僟7 ۮ't{fbp)ªJI%zO7 FB*"jҳ['NX'^p7p"8d41xeµx|;m2$N}k;M:-XO[ě.TfqƔQ"$jJ9U5./k0 ERCx-qS= _OО-Cd/Awڴ'{.cܤ7oAk If -]ց:HV. ]%ZFz$:pq6 ;1lR 1{o\_34ޓRZQ *k`MAþquwnLn0ި- V}*unj8>#m)ann ɗJMU׍7o4*Qޞ9hii˨go;ýFj9(fiAt8`U^3i3t!Vɽ*os)q+V(g@A4&K8U&R2$6t;]F/rr`Ck-T% Mz2(,DǝD РSE2V Htk2kStkڠOmi|Zˊx(4E,,LF1S&>e߅ #"HwT ޘG!求Z2~$g1tmE)P >7c64OpET}},H[x;vfIG,H(2̾O`&PZ` FX~R11)xLsC0f.?϶K{7,H+eZ#ThԹx09Z) ؑgrp֎ouvsR>yPloBkO/x]#5x%@@V !Fn-goOt>"Q?ݞh1):yowo%ḏ;Yx(w1(#> stream xڍP\ ww.qwwww݃KpwwAȽޫc\kYɉULl ':&zFn,#\9<:/ ӻLPv0ع8̌\1uXҶ #<{<(L\\lƆ 9=5@?!(y͝\]] mmhNe#he )TlM\ w1 2:޳Td v@_Ʋ>=G ПΆƶ6v w PwrsL04v}7t164z7tCÿs4vsrwG?¼Drr>Q 3}V [W6L@@)ѿmÈN6FFF.Nt36g#O%=lm-L?𞎆.@3ߊELL c'Ow1/~n/c0;LlAy 4_@`bbfp?xoECW]BX(!#gD%HO=_?zC k-ޙ>rFWhblRN 2{g4=+_b Gq 7_KǸY[,#ѽϘq|g*oZ10tp0twdzJ۟\0Ѓl]-zLmWv6;A `q8dA~ '#A]gzi_g'`/` 2LY f ^Z]f/ޯ{q6b,3 bO{jgz/_=໇ӿ19 W/^?=ǟa&w@711Oe]PC+$3+MƞˡR-KAPA)s[&6ަWz$7rC;.:ө3LW ,|ֱU*/a('#ap99Y::kf:o' ŏƘvWh, NNdNӎze {bqwAF*{V`ϊG8df/ƣl>Nhc}Yꥭ&όEdM=yU6?9,hS]$ŸF]ՈiYm70C]p=ǖRRZ+E:ZCCKw+f{c"6-g' JG m1vhK «鱿qGcǪFO;Ei%Nq^:bG/ DƺʿZ:63|i Fx+UC$W@eRڒ>^Us5 k[Ф;̫f/'g_(B|; +_5&E*I"n#9 K'mڝ l4a-j-H^g#R`=EYEgCϭ ^82lz%pgnf'Kcf9úc(J^UP8Ŕ%鎪4X^E5ؗYzyƚPx]'1Po6}Z)x&f1 ;kͿ؈}42w}6nCV2^7E6V*| 9;, cԎK@U7ͯXM+&Gp`*i'܁BQ#X m89aϓA+\3L(ys'ɲ'4mg10z^*a%2HݍKcs;P.C^Һ l艍nڻnPE\-Jh2ώQxpWrQBnЗ0֭i GʕM~Ko]- %,#WHm[*veW:iߺD)+֌ii<r)$i> W'C[8Uv=GsWB3YUtYtU_t1Ʀ>5AbG֊$YNFGV^2!TRzLZpqӼ^,1u}BT )P.E+?H⇠N*:܎g!D=/qaxGi<"ɡL4j >aT~'* j<{7y At1Z@!a·X kh#:j4'O$XmUh4n[xH{53 ^ZuY4Φ7nM7is@O&:^)UT5l0UL)fxq'W/)8zD&=Z&WG3Kfv{>u0bm}E]$|6AՏ!n;; )v{hC7%=IϦrJgVJT?Q}\xt#7[5O7z)@џB!8ri`9X$~-ǧi6/D55 j&tRpk:([lKШ)lyTܨmftO.\g77]*5 @crBP[3y)[ 77QǚrxDAC\3 Ux-pZg?= Oq!V/η|$u>?9Sbl["^-}Mx5/"\ޞs^ҽv5<ܰD %}Yˊ`;abuIP~oӿD<-ۄSb+D*ˤib wyuqFѨK^SZ3AA{AHK-or.~En`o̖"qB[RaSH*^(sB"!M  k~}ٵa)igy:Ǩxp|y%(hٮsf&.;Eeehv\ t4ANh458VVV` N~tp[dԢNݗ_/|R!4ؼ"$ȴk~x &S&F 7X~nR1⹸8S\m o ja po`r۲M(NBu uBwᏩ|B6e7u!81UH7דʆWH'D;*SnmI~Ӡ³p@|3.c.LE6٢Tii.w!yڽ_e$ O@ˋk.-QΩܴ㶝c\)׭@sشD|5#Ok-jg H-O9xPCV D;fRBE^ sw4@,lw9V)%q AI`#&вsɇ6j/9xRC_hZ?N&6¢\a쓥Ds/YLDf֯`JPApwÙRVJK[2e_1JHfM`[g^-Q aPkzJ(xBUHTkDGɨH#D0{T+6yk CLM!P uNFzF{|<\X`CmS}JN&ON!G|75Lw˞Ěp/ q x?2 i= KA @ jesrn5QRf`3ZUE*J_ ӽ^ro7Q Ie4bﳠfhM[aA%!mJеK* /^z9('5s4˩hȯf֮`rp&)- GL8IIJ]M8e> Ǽ>XK:{"+̮-NMA/qA WcI8'c<|ӗ}k6RZ/YLy^=9ħ-BA&AٲtYO7  qR8|3wQk|76'!mXjPQB>7|ٍGܛ"hZ1#u|lk D(1Bi|2kpԻ$_Tr,v Վ-w#Ew]c}Yw 6l)=W l7Ljsj3UQ;Ll]7 6G$&]O6U_}{'k'p3zeb u U{ ͩ1z{8m" .X7Tҙy6RnN|U_{x(гGK`9ؼ>4iJ!lB6^,wo >GƹLpyx4ɜ6"eҷqX̷ ls.Z,6<7isjH=̈cdYv@QcsbWo0poļD'a4X.axyƂe-ߧw(%L0ڳv@T~W {Wn& uqQ7q/ׅLZa{tDuiD`~ON-9S^ 魼N_ 'W-뒤8~< {.tYarVȕzNᢟ4S߼ms Է] Ո5u# 2Mך/i d&LdC^cJRlL㬤+L.z짳_*ڤW`zrwjD큔Y8[b'݉Mo>@:8ST?wbNr\lMsDj~2U=dƱ#qz/L;EJǓކ֭lO<=H@qtoR/[w 92ec@M5JIEӄfar nI>cͷI,H\*;o;>q.)~}ULH> f$A4MklL@yq~>dSĀלZn_h Ӌ$V/sijKĘ?_+Ǩyv|=C0t8cX)@{+|/n*]eDS'+@^oގ3+:"~3P^9H. =C;5;:lLpfpW%){<קv-K^>V. "X P-MG۠+䥪h+w6 G<9 ~d|8 h=a[CY`Sx|ڪ-a=&Q~mb6>˵ctˬv [}ĀKIr:F'W ǍO~)j X+5Q69QŮ;"9DU-b]g9Kd]%z"#RXc j=^dB5nl)2Mlᧅži nO)so*j%N]J#ςuHDPV9ЊP3#kĬL`x/ޟk;-Q5C:Ό>SLdEIUEa~hờbZ1^E7sx?S2u0r͏[? y ۂ4o훞5⳸~_ڊܘCJgZ |+MKlpđ^ꎝ~Cܝ떧pp՚h&%ChF>Ƥ/QZρt,S΄isÈyC> %Oo1z;h8>1UpucnߎnVWTv\ۆa}` ̼:7"윑kgݨF!s'夹Nfn?$!|yN%c9x$bQ#ЇNv4-}wA)Q S dBw_,~ {,0Bn``׃g{ya D~>:{Ri, ]]Cyt:J^EtIR*">J#IDUKEhUA(ny{{O"LXOCnlECy3¹3C:Y8/x8D7Ƭ-wµADǠ(|>硱@^٨RM !8iU2y~oD0ekY'Fߘ5iK\ `]msX,9ǁVn/pۄ̿Qml4*G" ^|TB:B;v|ZCU!6l+sX.W:SɶE;<8{QTzubYͷU|dF]yMV80yQ[ڐ&hB),M ͌gWh7b&&ROd'- ^K礜"} >0Ri9 }H=ITBS1;83&B-KQE.TȫC<P-Vbt|Wf 7ݎS6 bYpB\okNnʴA/JbgWyQs:9QoPFlkz Jx/X`|rR\e(7WEgmXᅥ}QiVpljLJnLX%-uXGSC;F뺂Jӊ٥(j-~YO]-PSk`, AV~HE,{+vz? KgCڎzQeDxf=ܟTaPYPPoy 2?k_O̸.H%io=eP;DSpa$*#obqvkwȕ86 \FD"N$QxMYHgh_b-3yrVD!TI1>4)gY5;E9u:?IB1hyȮ'˯aG`Z%0|zםQ}mcݵ~! Z)tf*/q]isn}BK6gѾ  *"Σ15hĹ` Z5ķwNQ*Ei] *hӜd9$4?oҁebM(sӬfR!͏miwu)/oSP=cV}L3 8K@ߚqV}] uUX>BFu^nO&)kJo_rONYO0h5v[kE/3'{t c(6I{q.j!M"oqhԿtUZ%ߡ:FHk]js_6 v<F0.X]/gYm"4+-ՉH?Wa7\ <ùs?!OLrk^bEf-sXM)a5={ogQ&1OIW]V^班L_ Ѽi0qh?k@2Xmv\Ro9imC{iCSwIngz(%bKH=A,{X*9aX|Br؀hZa- `]]t%VBlw#;ןz"NHQ@R]%ZłIȌ 2! =yĘt?߮> bEW7 9)_wYƟtK']%  M#7§q9H#V=Ac~ýC qu]h:瓛Pݐ87J07u.Wub,eũӹ1;90) +Q髂9nҜpџ< S@7p`ʄKHzA򺨗}F?h 0{CrX?嵡d8h飭,p 7*v߆Ws1YzZ]y2'BΕO.4B'_'Tڎ<` F2-هK=}%^)miЁ sg6 ml=mӇ:wi¦.sdʱ?<nZ~.O~P+QFdV(d91l]aE~65Ix٠M\ |mRuvN*g$hBRj@;[aB<δ$SO+ld`o)5&뺓ZCHG7p?QSVr<$r<5_Ԉ=RY!LMpFIrr{܈Y=$LeWWрMb+q-$1oʞ_e7?Jb2$ڻYQy1;k d][%%([RVj+6 ֭oŘΎ>u|8o- jK -wŒlAZ(4O@p>p57C03\~ nj.7(b'O%~|2gCO^c0,5[|XaȂ퓇[[T&5vKBd:cYcSRe_2xRzڅi7-Pt} %+&V7S*~,5cڄܦo0{_q`قV%hH}{H[ף?o%4;iEtW>1xi4h&aOEk&SqrT x6Kv҈V+ZI>\4umh'# 2g}7U58&]2 9N8V2(<}j {I*~c/+@?y)csp'&slGܽ_Ս+G}H޸;OP#Z7#OņhӪuec'}ly2N.uE"ɞoO#.2jHj,v|{:^bO]o5>#0:&uG^$zI%yW _XZ3bJs#H?&ifAxi͞,n\~k'1L|=ܙ{p3ڟi 1uήĴ\KM,9H XcoLgR_-Xnnja40Mn"J aL"80h8,PV3i!Կc1e:k[|^Ulh遻Ho"D&wLS5LEk~fc7cIR$@D}v#H &޽yb &ӊ>x%Y(/5pt<.ŋ|4~0;ND4j+P(g]ۖlR@9r!:l/ W<W5C\%{3VK2F.*<`L(+r4wb.Tm1gjT!9դN}_H,Q7k8S.aYD`Jaz ?YͩSV%2E=;]n7լ> stream xڌveTٲ-N 8www wwHA =vr{?` `ͪZU[Td*Lb 34э `e`feeGҰq Qi]\m@HM2IS7" n`qYY4(2A@W$* Кxv9]lMn@0=@dntnnN,,̦ +a:F5@ tZ*d8f$*?*u ۘ]N@.Pv:c#?1?qdmhݼڻ6f`7HL5BWs'7WfWd+ R +_IڸfA_X;h:8$c!Y\:^,hx;V%rXKX|]M=7wFHll s7wthO@?MX.Dko'k`|~v@p~ n_[_T\X-C wv`g9V9֎uМl1o'~'[Nd ~8>pAn@ 3?l?\]6=B\=h28+So*NڛZ_7k8srq5By {T^@0$>@(5ww7!+#-/BmB;='85o_I9!w 9 ~IY C+BC'Jxw1caaAF27 *\"N]$e|8 եR:+TV#*.>+͍tKچDd L?!aWwa/ r΅ 5\w?ZwXxnY:9RȅGs4/DRzl\}(J-gIyO>OH,o&0bq (#$'d[Oo_uSܶА4*0πȰ.ʒ&L hm/ dk7JݥY.70Ի^88ƐTs:H1a"VR(Cpj լ< 0y_,^/k7ZNd*$304Ko ,֟0tgLLce-{:o0S$BKB_LV!53F>#2l"zD_LLC״ы6D059~C\^i\{B;qjLD(kScb\Aʬ?_(Xeơ)X*h5r 4 /?Y g熙ԙ-](39X_.xH*"3aoXasp]t[q8 $k&6gBs!ִ>A|MӣxT5PdG Q dSX:@ہg&F@BȌfxۨk4KmUugkNIc_L_ܵt dk䎘i-'S$(?v0,~>I̢2.Jˣ?(a|j Ԫ-(,i?g6H[ a<VK`%ĻC#gbUSmJԃ/؞(uw労Tr!DƺRd@Xv9|AsX_t|B}ؤHFJ(bt$ ʕJ(%V5z|u`F˞up&>c!II= )B =0SxYELY,KXò(z(^'tTRDS[(Z/\FMѧR|8[6ct@n|/MۙkJr) W8ƦuN} @@&>.y&<`iiO2xh~Q%j0NŊTdlgZ^I $C'fx+//i_>pw|⟜G|$ҟ o9xij*7nԳ;uE&y+f`uyHJҳ5yw+<nᛍ}Mq'Y@3Mͧ)w Q׽ma7( ZŔ(f+HLj?`h/8~WEͯ4\~i-\R$J?ޝ#L)+)TshƧɸ$LENʈo0sn$̵C棟>C:KP}v zfYɧF#|XmY3 rlj8<4FC3M((/nInOY^]rȩ)A%AIoo{ft]ۓ{J5˰j~t͛"-<  -5`-gb$94$Α®@{S`KQuN+l7ޯjuogZVWˆ0Bz?9#5O~r8W /!jrژ~ \jM)($1*L~<}L6G%CxveBP" +}7£z (EkXh6czQMQ{]"'.2 VT%@f.8~}k?@->M] ijpӹ  zKFSHcM Wc gEb%qWrÂ^-qX`0!;F^Ja|7M.X8Ro\OG} /&]$=yѮRo<;܈ٻgUl&W7ǹ8*vC avf#tː`L`)֍_kg2I.Mo*|ҤY<òkkL7uGnэ=o“ b8,lT<:-^@PT+Wq9UhfO˧GHV~u 5t86+'0=d|KpUyGž8ٰemHz̴ۖD|bQ讟wn8#llDU?޲m<䜄/w/Dٞ5)J~ =9-4V4;a%P'C)4z--= 6tD#7(yzCL@_䀻5w2fwl97s~waCjgdkZLNv쓀%><ǬlbM|0*C~X-uh4W|yI˺J\l|fQ˶na 1\KƩ_r<0ִws),Ul8M\J/C5uJS%S6\jeMtgChCM '|Rܛzկ8mUBUeWDJv ݦ}EkA&A.0Fxa`D> f3I0؊pU|BZtDpC ۰kR%EYC:igy"A9fIs . y9^\]^ TcpX Z2C Y%7*Ju/Gǯk ^/|CuCl$,3Z*$RL=Xb\5:_酉`@NV8W:j|tfďn:}'qC6xMV.EH Ȱ /xjU.įg厪Kz4T;B34T~ |]_G1aCj!4'>ʱFyڄ-c>k>O);/LL6ױ*̧"WBC)%"Wd0brw}! ;ePBB♷+Ȟ-pq!" A|B_GQCM`hTMǷ2JT_bCrzBDU.qWr= *TsNzHi؁&5g\s=Jha⤛ WLMԦSEӽԪ/tJ[N5\ܤݿ{&,lwv6w(j,vo8> B!dXtM n]Pe\J%1ו@n̛ Y^2xsZ*hڑҨ;ըiE^e}QV-K~b |2'{SZ]/Y15vA>aڴծKLkBY|㍺zI`@˒4tmp4WB2Z>Vq^? Mx&z1ͽB %u+:!! -p)eU|m;cBYqINx9.7{KB3ct4d /YQsnd϶F[QY] )IWMW"&uTI|RDžܔ H|93+$G~mo9aN^Jo"ֻX>;˚2YABwu[$Lr4}PRh~/2TXjyY僜|okL$  0q[ȣR..#AB2(=[ 7f)gE/ysUCsEҤB7%Q}…eyM~}ZDȃ=pW%p_nDiUj au51 4vؔ՚gO΃P]*Vݫ T߭tEL;~gP/Gi ?KMV+h)&νB8z@>풦yRʢ[3 Uָbj^˚5; L eMAr$\F'۝+rؙ7U1Ns֖Ϫ,<8'LM/<+NPv@uԊ\XsG1|^C@TjiwD,vF;D$ӇѺ"{ϐPLiT_QVxglʦMDA Nq}O D]r1ЈLlX]'5O7%%?/hcE!"/<y#kH6/r9ۊ>XV-7U][|pFVWP(sIbniR!DH~Uɨ~$+xĮ'5Kiذ E'=RTY>kzazP[zTEXn 7-V9XŸ*'uMY%G4r޵򹎓 CW<69&8%zx<6G@p*hNLICl19̺hʼnvo!/z4bKŒz ?;eI!q"pxa$ɿ0vЎ d38~J˰kW1udiaE2 7bIt[|M# W}-|u-ovd+\~-|1᧣σQeQ熻F[]~Za%*֧oN3>H)}&6 N-=`Et *Mˆ~H~j&__}]}3/dLNLlZ.* w z;A%H,9 K.sɄ6dv9##';'kFriiȬղA7D:m1lgv7IH,m+XtfoR77GtO\povW1P5~[4uά e8E.MӲ:xxbʇs|M+;a$]}Ph#d[ZF)L%yNO:dXtq͉Vn nw!@HI)gP,/8q6$yXrc:HE_t=ML^7*hP" tFDֆ,6C=j䠼zׂ޳Ae ^3һpTݷ=1+!Gb -} z P#kaj* 昳|>JR\< /a|Řj3mIacpƭjf'/O2>?NSg5}Y=ceɓb;H8O.* .N_}|(HMi4Ԯ_\}uf8a<4]Ï}|,AKqYvR-\ g%ôVJ\fѩC8JX0 %?3zJT9u $cZ_;nmZƈsݷ$Z6`wRX]$hn6w߸@ +F qt Q6H7RmX{ԨD"uЕ[\^K}29F|kڬԔcfi,t{ЧR}:U3 gݑ0 ȸSTKFd](c&3Ft:) rRDr딜L&d1L_aV5d[KVc+Y*3/29U ͊ᩆ [y~s='qh%·$KVf_;:?d&qlm>;qGd -\-X~L[>]rlL aӐf!h>]8~nɴYaddxq&^||"mev/+ F-dT#Cd ;fѽXf9}n\K}*־*#R^9ZDYO+45bs䅸SLX~qa!&#%j2r SDž*kqBW`w34>_ZFUhg K1^2]S^fS//^Gi,_rζՀo^4_pzU Xvylha.H ӡRKEZ'=h~ VRx|PB$MWxʛxo0j/,"ClT^CQd(b]Ͻ|igά2ϕC-*ݸMtÍzaH??X~8qz H|^ o1-kc#H,c0i3B"lwj3NPTe3K^hɞ5:nևX?׮bqEJ(1W$9T(#[x+U8a1C|Q#/䛕Õ_#~a )>Z!'} U}`0 لV5ҵVŒ&36Es|x;)yju}Bqcdp !0łf{O f#}2H0YĻ8Qν/a,3UW ^M*ep30`b:ܡU;SQG Zb}dsc6Yͺ_#X90^aCa5Ŭ6;[ _dݮz$)5\S%-;&#*y#D[WZϱ:%2|/;"{[-Yrm?Zw.9JٲÍ+*z;a킩_!a_Jj 4‘ԧg멶W{Nfwjm?LeNxkvHKRD(QywHOA/ <ڣ)e>Fj:JT%Aaf)fi99Bi䑔pZ9s:&&󰻼w0g*\b do-?fUV@:+^?A\a5\U)=7UҢ$ |Tָ >x@9ABvi`ؗm̂H7ZZp!.n`s}s_ &=aRY~&!~E-WTy X]@9y\KI10EcYl_lh(hb(GGO,Z"Lu_ ];yyN=H˻Jm+>o*bWyېEŔGI/Bΐ:*]|IHU)(^yp׸4|TA5$f2,s%4o~pzyO`V?vŊ^u#;Pzi ˙yb1޺vFKϫ JlUwxZ Ɉ*X˯.:ň!nޚ7ȞVA;ΣJzx7b }䉜<ȃ׶TC2Zyij(gCdJa[iNs¼GO ,%kAJJ7oR=PJGz[! O5]z&_M-;N=! /QGlM L] P̓RH f pθB)g_c2?Z9L/Yw~e: DCP=g_$6L<'& ^bnZ~GCgcFjJzɜ,SBd1A8=+O(jJ+imS)Q1 )\uW(?.l`OoB ~ϾJ ~2[{g~#=v3ypA8Yp;#%cٛ0ܬu-73}G3K=ixM![ŻDW޹,Β`G1g`Z6F+Zz5÷ y~l$ڲFcv #xU,?Q#?yI }@i2TV}ڙ[k)uA2aުyihQ}^\C%QhPͨ;Ms\RmeUGf#=5v%')W>u$> NiI+Y# 9olA <*RvLY8Δ0`uphYy )>fD=^e5on;Pd -7,6PPÄ4;oƌ^jD6E5痾-H!ōkLқxmd9h3UE#%ü[__~CܵYMǘ҇u49 e 5aX4[%6h.x )frde_JF]ȔtqL5pKup7iuĨ ;-EKL -ӄp֣D߃@w?"^DCJ ( GZTa'D@t J)&gԵKemhT[3q|Flj"=#lC|-ְhJPK‰ޖٻ*)e; l܉G-V^'8:QV܎vR-\َbؿۼ-m/Cy}?Mw./?`\. :B797A( TdL14Pm牛0{i~DSLj<[3yNj:sTL'4üT\ ;f50/Ͱ:LdhfU}/WtBs,z()Tm3?,F o=.m3@x'jՅi%w"cׂw-'&vR뙞7yfNH/iT @=n!"ZC2[>6W6VKQE>ףC."OXk{Nk;爹T,Ϛb؞{5FfjҘijV,rTBIjWQe!m+7G)R$NmkLk1迻(i/zޕUo ]7=PUBD`iAj;2$M'@=\;9:_c-OpK;2g \ \uZ!:~JÚ[U`#l焷(i,1vq 3$EOپU ~d'/A):ڪ#.BOӛ pm2b~lԿ;xR4b4+H^W!e1ѬI.sT_& j;H;e{~{L`] y!rǠmMv/GW0%5.i#3+N!{ wjXbX(no[*7&_4nq N Pd"WIul6޺g)NhS50v55t468c/O cSNj4'#`֕~Lu޷y"5[bۺ/u\HQfP'`pݗў$bB|"2Tճá?eڕ7m]VE(Ϳi?Ǭyl3Qǩ6D쇿{HF$  T?̊mFg!nSRgM? ܡaxӔBp*;!_k vIOҗ Jih ]5@=k2%Nyz=:^CI}2tۺ6tPҁխI2lF8 '渕Ev!`Jbɕ,NfN>ܧxpF%I^>: o~P_|sXAd [!,e. FO=Z rHfZE 9̪Ru fh*(WFV^}5Лo2IXERni~0_lA A!^GB>go^dKnĮA0\2B>FLR5RlI?[I -.c y!v>QhOZ%퇽;s 5Mh*y F() ),=6<{pFR3"Φ:O֮ZꏞU]fC0|:VHļ(j/VL,aM #_XfzG$$du%G"&'V^8o&U'}P t_}%@A.\t:oe$Ƙ50PUK! )c{<>atƷPZYaZYKr Y6ܗ ;D3Si}CgZ5K^"3uls)5M1^g l|hȾр20\0z'2-)/MP\dJCZƆ.u*J{ SVBwz];Y V\qGxziVNo_8}cܕ,-vNe8τFME:~(feP^ r f{0=Qe̐+RH\>* ~~#t[<R#r% hׂUB C('QmƖ^M`w:j, :5|'X*AxH`6c nCjUTvjܛɩG[ry~vBR]0kmZĈwm%Ʈ%, e|mI}fԐPl{Qs0ogtwx㇗NEj$Oi@<7ێ8j%iJAPFlp6Qae9ċSE yʰ;xqw&3yXY0a]hdWZq9or&&FN9%mCളj61LFY;_kⅮl2z8w]{QRqԽmȚ^% u[z-M|e,6?cvwSͱXP{hP`}iBfFzمy)07atRx:ڶi-p=s# g8]Qyu N)ыHV ~y\q6ЇTϟ؆Pq %e:njx gWzmd{xWW@X<'z̟6NR'l$Żk^:6>M$hWD"hК"ANeLԉye,XX@&Gf|3N1^-*)m?+~bFP26G {/JuPk wC?,4hbxyV% 5$te*s[ EfG4_9e3)ߛOܒ& CV}IɕAKd h;VEX_OYglOR5z(q5D*v)qMx$C 嘛KwUjLhBl銉5Ǿ1U6@L Ml{ŬR[CgC -Mı=t8S*9;Be+Wwg&b>;77K -m7~J[ƨO9Ʒ} \I.GP YǮpZӥ endstream endobj 200 0 obj << /Length1 1472 /Length2 6611 /Length3 0 /Length 7598 /Filter /FlateDecode >> stream xڍw4]׶ѻut5za`F%JD^D B !:ѢF'y<}^k}εZƬ'g*#h>A~$/@ a~HCBQ0$B w(}mSHA1IAqI"fhjHϦtq98`qလ f A#zE[G hvD]%!.(~ /C;zPjjЂ@l 0pp#^w(pmlu\jڮPd? _`[[+C808VG{yG!!bsM]:P F`_= JsJ; FOw?Ba;_my 7iEuԸ`Mڮ;Ig(l`ԏ{ۼ9=h:Q% Ծ ×ueC:'E.َe 627x""\wـZ6.@ s":F.a3ʄuĜ$,@a%f,X>g,6I{[Jh1gvLC./zP/=܊gpF@7#f[moҮV'l1iDJH"_ ;kc+H1r4ڐ=>V6%O-Džaq/Qt)L'?"w"XeqG!/QKS.#kAhpaig{eMgq`y (j9Lоцq49EqV ,P񒐞J~Qbk(<s黎wUAvڶSCx3B6ޔ諸s[-O~r:xbzK8`sc^t%l?>3cilZ-|Wv4GHԑOhs|}h,;F@xYu>ZN䇠W,]=[z'W3"#]جy:R^Ƹ5uOuS]`Mm"+B\MhcN'm\K_}ndԻ|#Zz'<{uԩO\2ϩkve''2~&k랷b>]iXh3c Eho<KaTaԅV~y w]3 5(WtGޏLeR}pD)㑗a}%p M8etŖ**+g&~$F)˞fBV1;GZ.[2RaɋtyNG%-w- %u_ӥohRa>4|`b{- aex Mk\Lp06sGߣ[d0`оQudSEci?빏<$q$z!9]-\]_FqUF[H) &ܚ]kqb]]TCyE{m95PҥC$h cm@܂z_WDTOQ.L{?&UG!#0cֱZ`fbpfrٟaLJqlU7뚮/4?GV҆IHhk-^7Ab!(J3\{ʡ6)_:ޮx]Wd2Ī؟]LpVZ" ~O%eo/Jin o%t.8𭡵e^nߜLdYV-h۞%pcGer8ۂ^O%dIe1'~ȶ %-ŅSo. E9?ZYxUg3B8NhG`⥭ħ@rT&u.jMdXF ur]c jΩx/a "6O3o}pLn<^ ލX_ؗ(CQvP*`8V "NqBiO :At6xqM&WYŰbt DžI02vR-/{"iFfb-d`%X;kP~&πw+'1]ݏ٧4ݽsvWLVdlly>Os:[ |bDdto%<'>Kc=b8U(lckSy+Ǟʍ P.1a2ORmiwWepn Qq`*^ߤWS%zxȧt[dW]q, Q MwyƻZOES]/I\J< z#;,>NW)_؇WO;Y4W+Wft%uhk.,꘵9ouD'֖,dbAWsm#IRI-za.X# NYY7 ke)boDA}[Wn05E\ V[4G` V3c_-)'ڌHPi^1fk ?3-* _~NTZ 6ِcCՠ83Eu]$2 9tb!iɹ|W{o Bdc&mT$ +wR08 S `յĐlq&s~VN~,A=cfD2q{ DyzQ)Vqӱ}7jQe6t?$ . g'h\ 2d IINb1$ŋ5L3J>M ?^ٙf<68#~2MKa1*6LHt"+adRfq(E +- ;f n,AMLXTt#:X%D8mm3jT[T642EFZXP~(byg֎C}@ZeyC_x!d)wr@u7ߦ,Ѧ+ip6d|`cOa}G:"D㿂}(r>MͯD֚}l{+Wf3WB_.ap_zIRxP6>WVM$e<Jn9%` Ʈbi44`ɕ_OgH2g/ mDP9wj?@d~W~HJ4WӪZ瑨T.5 rڟi{8f[Upp)ʗn,ǨPvd1KIF^qBk,4PdKJv{%Ac)"e('ս KbۊR0c$\kV>'_U<߹}a_|*L Sq K79>/AZ`3*|qy{ڲBR I?D'\KS9oZD Q__JtB޸BDzbGvHӾΡ;KkXNsrOW)l˳TBQهFRۍOy'ͦ[Fd֓2Ty_F+6 br2ŘYT-}*9FyP 4;o; PnaҶ5/V.-{ҍ»j(=͹zМG}$†HF/y1Z褚.$y-Pts‚)ːH܌i ˢHc3fr~J`iP {9&cw8eah"/AYXBx'(/Sgt<1Ϟa֔ǚZU_GQ\s𘷞LP=Jiώnx@ITc g^h~f¾ޕj~SƀKmi z$K2 컸籣wFpz $nŽ{mXeMʼRaLXv!HJup܌E^EUfkʖct 8xs`\LW <F8q*m+t# Gr+{I4>y=zݺ!p񬪬Ym1?!%VhWSHp2w< ʚҢkvpb,{]aWU.F=Y*BQ" ˘Wk |w+1=8%$Or_=Ԑu$#4tp"Ք!~U.bfchM  P J sp=h/l/V{k#ݞWFAysZb[̷myδФKޓj>ϨF8s1jOU)}KX:cBƴgߡl_ɅN)}wF7<_ǼP\̼{b6<ؑ|(|&}z"8qF54]adnn[m]qG%SN5x&07DYl2@ժ퇍tA'\$*@_rG-9?F^wbǨ0֯3E/T괩ͧD,y,&YVsQm@i}iК/;Ph1[qsi9}md@H~Z)5uzm<ŎC2ZJ//u.Mx}g_d=R7liٓ+B˲%*wTI0gNh2hӤs #u8j+a>Q.!w-IB}mΎ84;5yWok?j-fM(S%sL< f/-elNf42{GDi5TbV,1Ry{^yMué[>uC4,a]9z&]ĭ?]"2tǫOaf$I> !T#7ys}M3WΝohɧu}oݠ4 &3HU^ᚑP&n+JX9/ut}Q}eOGUdc:{ɒ4U>#ބH|}VMHbB3J@'^}#Eʎ崒Y3K(ZxT6\Lw)˯: 7}>R /Xv.o3,M`4vsa8dZ0^ |A+ /}tR$ |6{iV!8tZOqe(h^9X([،*}>454CIaHsZk|=s{v&|~&u endstream endobj 202 0 obj << /Length1 1363 /Length2 5960 /Length3 0 /Length 6889 /Filter /FlateDecode >> stream xڍvTk.t#%H#1C HtJ0 00Ct7H(JH H )"-!9k֚yzzp +jhF,udH\#1F`̤Wb5Qh@OkO/qΥƲC IeRsG"7 %;+4Vރpwo&"5"^p>Ö?v_*C"Pp}k@J }ua)*%UQP4$+ědIc{&1 *Bc!v<Jk7Q_&b{ؚ91~CCo: m8Pd^#kJ4?&~>d+cIן( c:ߒ4QXP~dC HG-H2FecI`ɗro,LU|Ry۲:Rsbb90i]-3܍5MbGJ ' SS]Y;w_jK1IdfHʺ WIP(EHn r}j*co-$5&*<7q:@=‘zpՑ[WTiv]KavnV\8/Dxp:)Shs679_g\ d, +^n: lު:8mѬPw+]r ӸRԨ5\B؏ȤK3])R vnl]eܽQQ+d0f-ٕQ[UŰQbԔMB6 AC ƀOfhyMWRQB@,vcQ>,gjјJ3cOS  ܳ F+Pe*w뺂ju4Hb]&6B_=sp7#ð!Y@ >7{0n|mKq9Y/$Eپ[X}C*N4^ܐCL>M)eh@TRF%Ɍ?dc:/g|ZwtƵbjbƂidreb(\mj9Xʆ0lESzŠ) M #p?0_PnxI|ҋΔY?xf_U0uWFK:h#cݛ'J |Q$W>1Pl,|JNU䅯ԢAoy!+i~0ک0a~%:R*n#s0/ !Y$^Zm%W+fAБ??;~AxT``,I.:7&q`H?{20yMZ0}gj|:,nDž{̕q遂bΟ}y Y1D} }̝E7, kl *.ò&369:Rؑ9mw-SPv">u᎗Kaxhϑ uNCV#ލA⻩;9MT\d%b;_~}ʧ?bb/OHaKeںQd71fO w+7y Wd_銶l 橯dLKaR\w@Z_wfn\[݌걲sa1^gli Z`xqLx$oPgΔcYߐ-!wzlv^jP;hj*jg[M\fe͝4['׽҄V;8JMnp|Z˟S~Jm~AMCԮ(ʰ3'FK?:Q&_^BbRo=fC>4:>'D,!{|w#QY>~bZQE> +7FX[Shl\,erߦ\QH[&/V{7&t# ;#:9:̡JvH/yHr  H&_>W^``@(i:ȡ"$-8)ʤ|ރGF.⢇7TS׆#W;jyFl[ҸZ72loA W_fѽ{%[eXt<.@U henj9d;ܜ;l(oas9- Z5ugBr?ΰr5YYV'Jm6ŶE/w/a-JBau+Jɍ2V9XnQKnM.߬ਸe9,Qlڪ邢É\ L &W^Vd̫ewGNH Ώ@v(^Mw!R1RmEz^VCB:3jZYXFv2^w^bcpJ"F~=B Ɔ&vUYzVDܡEo-P@YMoM4&˜E'wKKt\  -`m4WMervTf9v? ,9O3go>uU-4 q5q\!!1g#b)LJކ< >9 AYebBF9R/yC^voj6Tw6{'!_SìWj8a.[G&qۨ;Uɝ6u?WqkGy.gN_c\ُKI?ܔ7^>5K+354[9׼naM i,6L`\f"y׌i?y|LDƬ!}N|eNoD#YCfo\IK9[3-Sҿ𸘛~5FNǽ'_#St^=g1)]:Y^CD{2f߬ae9DK8GG/z's:YIPUԜjXUčkɾN> ㅢ8 =3\q?jV͓\,\_t?lo~^)BLCZz@(e`grOsK6UO$~ֹ3觿lu3+wrJU ji"1FpꈩH.(ؓeI\oٓ]9D1tE^ -O<)}QRLs1;4_|ᦘLfsBiORzpiIy BRܱ[ :T󹊎>}%2(O522_¸oTT|aZBD6Dk?X==ݥsucђL4c4mNΜS7̦D߅gMo~xrUգ+)!IJsDix$>] +_ \1jB+"?CuJ&:Lȷ+_CgW'ģ}sllHoӯQm{ $A)$dzV @ WdUx}ePN5Bfj9|qGj cX pѭx">k=Ìm-OY7ߎy/Ut0ѨRbߛEϞM|s'Y_t }Tc|YI~:Sɧrjj  aן6Xߊz}1[#kc8zrRl1EɢbEB7`9직e8f˔GY6(_*AK^,U1>5v :N"*z1Iuh*c `cqzp|M!bYpf7(.JRge\C搓'ꓓ-_|3杉U0U-ӲL',5O 剞fhӪnU7}|g{DX.KfI; @#yfNS%YZ?Yp{;Etj,"Ray] ,*;ig0NMZ_մS+0?sXo0חV]["yZ=lX&"8Y1uCF/_XIȕc |;"Sz5kf*z G˯%C|/םس/Kiś+-sIh';SۚIZ7Ό`O;ԏjx8r:2 }棲|UDr ]F.g\ ޭy==!9 &<z=@[v 03z=ܵXr\o5x,WSC= H|^]Wz9rM sLݜG VU2#Wmy%pxie.}~GwC;l}s$E˰ ha| {WNi8JX{}37C^xIA=@U}L#jY.Pn(\4G7U]t/0zMjAd.o6-xAH.&PW3&R8s\;&JF963UV/p>'ϓ -GeCƇ]nZb)hqL>-v+|۠ 鎁,9j']Ԗ..<P7&.0+InY=bGKl܎Zh,5NW5ࡵ)~;|*=l/ЍWJ1E 5 Gϓe"EQ"CXS 1(qRwII Ow!#tǭ?8l>iyiYARïP/.FI}|LNHY endstream endobj 204 0 obj << /Length1 1381 /Length2 5936 /Length3 0 /Length 6878 /Filter /FlateDecode >> stream xڍwX>!C 0J;G+1ƀQ҈ Ғ]M8q<{:|E'o h>A~$PQ VA a~HnG;v؍a(w8!E ؔ h Rjx8%$A $*A<@m~s+"]}Pp{4_@N(PPBBw8PC!6sTB`$C+*) qqGex^pCyl@\``:vh/ Pば@PNgDp`tq |{UG{y/ xB w>ݡ(+ڝkH_i0UDhw(>{iGUw+ ˜ah(D܀0o>N_fHWf?Ce ecmECf۫IDA@APLTDzG: _Fճ4S$\Ab rCG Qs?Sw鿲dT<8D? OhA jC0[{$Z aazp4a78g8tz`B@adu113č\a%3Tc$+0IڰHl$~e-c^( U444fhQ3Ho-kl: Epd/>Y~Ϊ)p H*!1E{7 M,$rxEvf:*ŃM۶wc/ _sąΒ|5S5Kmu~ƌ=t` M͉4D zTs8a.GÄO!tHxd)B3gNOkJijH'&lF 嫡 /ҙ-X-?@@ 0$ ~LJˀ_XN)\JB훗,ݥy%Zb`6 _K T@%׳YFFf^9a?Es4RrJ]|0,~gyDpL XmgvW5jQ:&^QPO鄲wmN~ԧ),xϤˬ>JۨGZMTxطWEŢ7kh"Ljp_=xxI Ȫ]&e.~@ieI^8MƔ&LK>a+SIiheGO蛐jAvMOM1Q7aͬr8#o 58)b²83[] b$ʶ y9u}iy]3Pa)$JeXطqwdP'[M2/+KB)L^P",euPZO^煩OwayzIvb`oq_uߨOZ$($eJyj8%3pQXc6~v ټEh6 &ZsE)5_LG}*4>/Z 7Zdpuze1Mُw'oUn>).ZEв,%m=I@Hϊ7 Yd(O(w QOMO[Ac]7=|}<(dDSP7WUJ1@h7]$zT#wiT/Mpj޶oy#wTDiT$?L 󢂚y]a=2;ѧJԍU9Օ+L[@by g1V@#Ƀ2S%Jo,YgڭRrjvLE(aKL]7=[Fl.D4qÉ!P2QvMVg ~2yl=W=CH¸KkT`Z*akguDibA̋F-_83XXNHo6߭Y|Wdi.⑒RDcQ*PkIDU6 z5Sij.zjji_s~{qg~*qaA\>msy㵠 0ᚄķecl8ʃW(U2,8>XK'1~8sȸCRE꣠Wc @O"1Ss1jc5a R O+捖I +.m21)J}u{]4+fKnp}6(aNE,w2FSNvׂ/srX9Uf_hn0]|;qQ=]9}{]ijA5ys-́k0q93ȝ穂,A/8<³VdĴ2`5~-ާJ?X>dP$D q+M--LhY2)H- :W[9b Ӓ {\l~:sd~+£O^AuHAF#y=$ fzs2lWQo64.=Un&3GoUh, V.۷]dxmed4iO<ܩAMz+^^ |Ѫ4W7eu1;<2<&݌9|şp 3U{Vⷌ'RxIkxfZ<56=I!*k }84'=UcX"L<"-n Y[#3ɗz3' hAɳn$/k4eΪ6.IgE@ԺTKš~~8 0E-2X?Nyw[hea%3ntpոΏm\PE)kwlxWMEэPE9SBq+'F 'T}ȳdH.kq^Ys vByÌ6%qd>imܵBؽίVRG ,4w(Kd1$Tv|#cpR7',d,r 'gLO4\xžLyZʩIe  nGb&j!.z}ƛU(,h_--$0fDfocfaY)kMQ>JһOAɚ:/&iTGdSUn (6HVi>EkD {$UpYLgӄMȥ^;cc:ptA؍Kw/dݲ4C*Y͓ 󪓱TFz3 V26m*c0O➒@R'OH1} EVv_>n!,bUm͠0!ҾSksKSiRۀ/f dо5EFh@m7;ŰݼB_fIOAZ#|̈fY|$J<ߙa`6HV$els|2|g)mvMVˋ 2(ARIǟ ^*epm.;dB?_X^?㪍 QЦϹfJm ` FДM#On>ۢs?8Rng/'WI/I cv7;?7 /ް8F$Yn=Ͳ)="14\xt}ON~)?Sm&ueyR ̍R !\W4jZ97_IEN[ J~ -i|onQLYgCI|ѳBcŸ7X)9;VthvUfnUohMGUe5#/WmOr2 㟅h $i 'x;!ZK.l(ΰL\wNWi6ξ[!GS<ѐdG|E,[%Q:;GxjK]tх'w}6RY?/Rx~8Ǣ9JAdfv,ٽk@*'k40  * &o6EjLٶ#1hZabjc/ 7T3v5}L̅BR x2`0RPv%$,cםk[BRN Eh|YB@[xBHH{]yl.w2*mz\Kþ&ϭE? =eBUPz9u;D'm:/o-gbZ-8rۨbb?M<_ƖJ?Zg >:D尢hS`GbDMAb&*K˓4TKt*]]dXф5nߧ"R:ZZXDCZܔk}fkWJڼ1_ʎi=S$AJK7 /OoP'np◛z!_ukzÁ7_! Տ,Y,̈́!o(fytwt O_2Q } . -JY 5KfQ&Lwa!qe$.hlb7v٦';IjYàw)?$e3)vNKVw{RӗfS[OB-F&'_2?o472p8*r K:ؖ0G`2%itq` F:qE}N!~oZ,umо낵 {S׾ $H@dr"fK2HNWS SHEUKJ鿀f}urDv:V9 rny.[gD]| endstream endobj 206 0 obj << /Length1 1446 /Length2 6360 /Length3 0 /Length 7345 /Filter /FlateDecode >> stream xڍxT-A:[@z ޻tB W tD@tH&Ҥw{kV;{̙9$+&J':JTL PT!0`pBsK/TQhE@ @:@zm$PAx{A]\Q}ypxRRJ`/(sD=;a FGnYWSZHW)rBQc0v*[ !c0A@P^`AA`8 w{лLt`?@PogG]( 0PDp_DGwqЄߩ;ԕ ևyA=QHA$F_aǬwVAxx($T^`6@ΐ_e8{{ Z9hߘ J `?Я L=at O]8 ?>` "8CA( 'wt4 YXdV37wutu/2( "bcՂC?韔}j3>\0BA7ovW;#uo췝;z@ahzS@?vz{U 刞% ZP:lE\nk`P8a^@CrG"H4} a8zy9{^S -f B5 /_A` A2A,ـx=poo?y{y'Й}-~`,$"^W`jw\UsI.^eZڑl 1?aYE( uco]zquT#&Rklkt٫(^ѭK[s2,TRa#+VU԰ Yu5#h҅rg7u gՉFS f-IJ-~T;WLa+\rX1]2Б:(좯vhw#BlVw~#1mkZ+}62G3pQ(ؽx7В0BCb^mLrSeqCÕl&P Km{.קKtvޘc!TXeWޛԗZbyQ :s{BlÎn Rl梤Ŧs[9VQJd$UL?<}"*) |8q|Kh?aQ7'c!|;\ڨ{)Жmec"f!m ?n5Y*5އeL?e?Ęjb+sO91Ӱ [d%Y]UnY+W(̽0Of#U\QRzRD!_%)'Ef =kG5<?R70 i.%.}4믄i8|ekA5\ 7Jit+yUhڱȺHڶ*ff 0ݝ]Now }&<ܶi̳90j]rLcWN_kǃb`*^nHF "2N[w|S`.Dzڅ?l[AZSm04Īu;[_ڣ-dr{F z+r߭FVPN6{RQz% +T^*MBvMOb;E4 %yȁno-y48>*eFt$ӊ#]ԉN֥ؖfucBe֐f;7B4G sPؾɰV#$Pg>U]gоq̭Ŋ{ˆ\IOGC|Rg؛\*V=yg#%|Hh 銥ibvǢqhQyLDOd3)(H iO)OO!;1v䪮Kg%kʙ#_ ,"E \*kϧ+ڂ%">҉n GsFq VhP{L}./,_oO :_r&lؒK27^"8##_ 䱚n u$>\}v0ѸJeV,ymaG$v+,GX_5]ǯMnd}';90X41Jr 8 Z\o4XM_qʁVs\h[/|facl0DZ*l[a U Kq%O1鵯5mJ1ay^Nah|-Sx?kg`gYʝȟ[lDćxEJ4)27gkT>I@,,{` 䪾7m(l> ZjlYzyUځgK<}ﭧJ1c߮ͷ*mdB41Lcz%LQqMOrHy7ZKMa d([DQ8;igXSM".tKr?L4/1cs*݃QaԣWyp:6McUCޠDT xg#t)܊ q]9 ϾBԧS=2%vb(GutqNXu.I$xf;|)E$eڪT˳R'pa}hǘq/#]ٻZĉdrD^a;Jpc{ Dq\]z߁9rd+wH騲nB?y)/h89ϗό%:E%55nCjJjL,^&9VYpDNjh,/Eit?Ğo~)B4O:uޚʯ 9>G^cp R),Toþ-o7Θvf,ꎭhةB+ˏZEzYY6uyd,~aXTMBLAa62OKsRf:/!R(=k 1rp3DiGYud!;B Cm#,qj{< /ȕ0 xcP;ѤX߰vc4"ZfDӣl~XJ:Mfq/N=EtOʹJ5]^Z׌S2q(B)Iz' ԏ}>u67H9 `)b, .n=fi[]n!/5\5 HW Ж/8cvnŅGyĠ.>}N-O-Yzd +I,nئU4/KwIő,&v-,8D7 kuWҲѻ$ i1)|coOMKbL)b^q ]/;f?]Ԇ?GIywcVu~Ut#O_mTR^8@aA TN2V)1<ۂ$wK%@iz/qZۥmi(QC ՞@4ᲾGa tT[wvwwv{{uT Hk:l,œϳ=Y`FuOҍ>a;VR yj>}h[}RyZ|=MNR gLO!nɺ5Tbti.^'(Y!|*:‘qY[AZɥ]: dFB@N_dKٌף##kD_ݡ>W( !"ٝa d)+Qq~3EW/|H'dBehp]d{`,g#/in_|[O1gKʦ>F}dw`*5}ҰڪbG _. :tƢj: s|3Cn;k n+-23T[&5?YdrNo^ l4̣#'|®^>KSuĜ^22\Gxr yμkC&VlaPcS)tVFU-{oe5YmՏxBl*CE!%om !dM'>=g!:zˢ sɉUz'ߤ-dDXD*UXR& j(oDRcn'aGy]:\=n7TE x Amm|*}`Ӥccn?·t RΓ f!= y 喞'7(GESϽǬ]տ][EJP`,0x1`jtAzI)gI)ي-'ze_ZѐXy,'L̲P~rF%ЋʘO513 xX}1s^VRՅ9bY␩W֬Ŝ.m9G"J#O{K$2әJOMX?9A2$P /dsITe>t0q"<)vrYs>PW@Ўq3$Z;e풮8a0LF(٠*][moxݛ"{\O,9Vƒޔm5C _N7b&w/w:!ح|5Mb쭮/h.YeXʡC*oorZ;3W݌kmXHC^&.ߴbZjnڋݪ*> YSMƻa&YQP5#$ܩV~L7tCiʪ됯o;pv_|6 ÃyD>E2 ֘6-aʍ%_Ǎj8KÍH>85`<βh7? nO6М``Fed/l=ۗ=a ϴ֕J-q,k,!wjM޳?7<{VrJK𩻜)Ju9![Zl~",L@G`x6l3zĕHcߌQ*};/Lҫ:m6}=Y|B֣lG:k )7 y mَTIATc-"€G 8=Ͽe?6Î ~>#l"o!s!=n_sMw)i e$`~8U127vm0za~f >b_lJ|j7χl9t! Nȭ j] )eyWb{%ȨpeT~Aitvg&v1+2cww8F{7^ni)м3=~uXq=_!]O7}ج^~7 v U"›o笙Y8-ej]ärA,-9>l >nt 7'Y雿#_!3 Nb?Rp Hp#<0a6~C(*Eޅ]6Ib!2gTA gh+O#Cn /p]V&H|R].߶?~و:*E:%pMazO7gW"UAW㺓B돴S75F-džnFYK x.I9' %Sާ=LZ#5ġ.aeϝnicV6-i˧ d^'pio3SŎV$f)8YY)OyDJLاCq4:ug1 {_9?Lqb?h\cUU[ŐsRNӍ/ya(M@f@`͇M>acbX<uوLNհ;^i-? p D> stream xڌP[ӆ w݂;w .- n![p aWvΩy^wJRe5FQs{S=ȅ .`aagbaaTvO tr!4qyI*؃]mV.>Vn> &n&G{R4fV^^nDNf& -@?)h\\ݙL윙,h.VU3 he߭1SԭPpq7q f@W9 ^&+Pr,7t^W"kߋML@ K-$%0hbl=o&)Q{řJ͒ sq{;; /}N@}d~ٻC s0wu`Y;e%nf tp_=;Y2`xokm|v6q\\:YYf.S5fſ=z, `' 3z3J+:=ތF6N++(X[keA}ߧHv 74 > 'q{)+_ERi7w人Z]]ʺQD3r0pn,e4Wv1ˮ}흭züba?Kf->wJll\''O~'N74z=f&{ {',_ `x/Y`̲?^AzT/TX*YzS/W0{08}f[_'lk",wwH"Xy:Xns{w{'vHyGNFИwN2?=.| ucޕyʼj3W'W߯zmjE &8"o>hJ <\D-vG=l5}fdŇ\ma3.x,ʶ/٩k2>:~#2Kx7y$-@w9,u/&D(X\vDvJٹY +D"Q6큟e [iHr7B_{匧=Oq47miLԄdwdveU- nBBoƑ]l‰xRouJD.'ysRKcJ!-IM eAN0TwNΚM+bhTV^d6 rfk'W ˎY5Z t(lEA$E|">!,$<J{bnfnBO`>95̵_`2[Ȯ1At's0T{La,)ͷx%|d<3Cy=cQnmy9mnSF"hR&U{jfݼ@Bͥ 㘝4ZaZ/@鶴*jSYZn%~`4`<7~!giμtJsˠ@D肮KDĨ1%ez f/Y3y%`Y[&~W Pۓ,.KEru.>BjKzX#'_Z9[-xZ iG/'K}ݯ8<~c[ј{02~kf~AKYQeŴ Ls -m5.eVi 1Im(1Wpf͝vѺtzؓ% Hh<J˪VB%q]*99 a͊56)RJZ B>H |[;:P&EB="t~)4iV*$O|Ak%Mw"Gkypz:2ٕ# O]FmeVX68m^*`|YDYpCUQ^yjXG{̆bL ?zIbu RkZ¬c KmIˉ9Rvħ_h$N ୙w7:7i*ܰǛJ!n=GQFR˪li@ Kv)kp_~‡L\Wl?訒-CuP{ =H|ϭn,./դ3DO]W}19Yc>څM4" #As+(4m앧_cY==c\7@<~TQLȢב1-`m1/a@e|zl-zbtS0CU3^Xa3ۙ,>4fJZǩ7b!ops-ΓhwbCd )gF -~5:M@n {fVOy)` yK&sg'8pgT8$19^3[>a}K>g24B(H1y>4L9}:|#[Ç0j`j0ctv>ϖ]RvNI صt..r$ '%Ebs{P1cvY}V@N SޑN(Y7vb~秉{G2(c"@Qw d-iɮx5,Z:VyA/mA=4h"hፕq{ NfYciڣ H ֹhT&$o/8Ra ,vAA]wjc^:5sǫ7uJGM4!{gN*˓|&]IN>ɶ. own"6?'6EB~* Z5?y5>AbPb֛œFxijJ/G^nam E:ĔGYg v>@ݐN #?ɤ(3<¾)r99 DT #-ֲ)ڢWرν5e1S._w-4D.9 W^QSаߪ(YI sB\'Iv7&N%;N"a4YMH.[o,B\Ͻ;Q,7KXܓnnD%,C=_&tEHE;$~*WF$aY@32#mN:&IDT?g,E?[h}C%zh*v Uq<]Nd6qu]S"p3`&.juH1BÙ+s"c:z_\]664(&,:Yt}gاvW݈bNʋP+YQ]ZC4\~ l6bH7V0 (h!2?ݴG24k*k:ZuK@%8>@kwn͓es.ym<>;<3/,~.Z[QaQ w/Gx]:sV]56[=yrSŭ1NG# d&̲a&37 WBN:~HX\gaz*ߟMYtVC˜}ċ2FHES|VWQ lcW,$\~x]2Sc cn:G H[\\:WSD\ %_ /'Y$)V.@]+*L\}61_ W]ryP;OixmTcpnm}+?ZweMi:PlؙШXsURfED:"Yg= :z؏}fкy{00 :6yNȎba4&&{HEoM'{May4/NEG[1kf0>a(ًmi@AaMҌ%nx"0CWس'<9ra,`%>a^ד(ѯ._8к%N DFQSMi5; wNXڿ~4mZr.M4-󈞩o`OJ zu`)?V٩br:Xc)q MYp&OlXlJd#Q5rẀ":ܓ !q|ġ(Vke{PqYQL pXtU&>z_iM',jm;W/xݫWktk0}޺Y4b)_TunAhՁ]% *RUªv&Н֛{ž'AS8qZh* EPB5V*+G-u.ZxgMvcm[7;͐/:+J {~HKإ F!=fE-D\ 5yFV- ҃늏~JORĸ m~z|2a~w]ASܬd_ W60\43Go:pOGubG;tMGx͆ᅰ,u vE[.^Ԫa~,I!H.xSmeʹh Ka\ iTv 3Jl3-!F*ԝ]izT&+j-f?er06!%t--sw*$iwd^xg!ÇǀJ<Ml\sN1Hwip82jθ^y%6H94RA<5V~^R'j9=i\~: StmI]K:e )QU&qҥ p c06?uN{^X2Su>t2s^=  }^}\5bJz+)iaeɤ56K~'K|CyYpl7MYfXì梨5ɑsNpc2nm8d.:(WRAoiܻ\#V]W"f#NJ,̷܌W2wS!ga)ߍ?粼wrb .9q Fm7`("n;A D]kw@= ݼJ"X z6[`}ʆ ɞp :;+}GVL" vNvao#Y`ho r\X"b/#zwMx.K,AU[WBӕd#' _юѢ'[{EjL~@Z u:1͇QOcwJţuM?͕="OWD ͱF*\K_9Pユ(TQ{dAvn@w2{+X4}/gl+%I.3D P63ZwRP*^6,\ щ }Um( 69+n\rقucƁ^MIC{gU!>[|Gٙ1N7{\WMl`Zn8fWC<8^6[ >³ qaZ+xt7OX)[ 1Gݑ:htEb4/h#q: !&? ~Pq/P%ݬec+1#2 G`e=)JesY$wz~+=-)TXLv<6!VͻQ{ZH}!ό8eq}ԳS\}Ȍ&iE7~$*feJJS!G.3>яR 1E*,"BAPoyv& / SAXR2.ͦ#>ٞ5CVr#26a:ڒN{(ym-.K'ĮIUvs.> 't1vb4%ŵew>5YJ* ύP O.].++a%ݩiiroUri>?3-w;2H#\Kjp0h_}P *) x#ѐ<-XKVjJ! R 7rR [CfI8Xa28z$zL1 2DzO¹S\pHgS6Y!ff -Q`(%=3ui'[i32hjDIkٌjjw9g(UTd2hh6 R' ƨ/d$h )f3QNW2߰n4V~gpk(U<B#j^¿0I}k ~6-6P0w&7o9~I>TUڍR:\"尹4Rފsm=Rk׈-(L(X# Lԅ@ǬRn3΂&Ħ2)l0˒o;PlEؔgLˡ`K_-U~{a|=2Hezbd-6OJdGRl~L,AV;B/]Xxߏi mQܭR_rRMɬ"v.Lk{nFAg˂t'0&-כh!d)m+@"i@{oux-#؆EJiIzM; h+t^N/5J'"qS9kIvj).9o|Kũn;)بY*3o闩kKU5ijFJ 6*+" D(JdUW/9/M@`&5=#/ Y?GEaxoޚt\.yp$5U5mnzWr)t?"= &+xuYhMQ\t|嘩rBL~׍,4*4le29ܻgdk- {LLq㡍NAaDRP6U+C;hn$wi*˥Ђ]+8܏1в[յYhZc³C]Y?#jOZbP ^pS0F9dj¬PL8f:Z,[d5 x>覂ѿIp4_MOGU =pHi= xURI oYQ+ mX(T8c9ڢ$I%[;ErQ|~&`0J͸8φJ"BbCSR<>_"~f&$uJ ` RJ,"p?^1Q<02RCDo.*Ef|'fO昺*&c1WF*XF DFlji$iQp,[K&lTj=FM| duD^1 4$?,O )!`ME/^*-ʂaiE~EcY {ͯ)q56x\v"d$NvT[ǠY}%xlV)֥_ SBZZ*yJVa'ib9Kl m [N i y.hg ؐ A^`ֈٱZ({z@ ^V}^#"F혰@q}&ЬG1 c Q}Fx0gX燝7$3%epohԽ%Ӕ*P׷v"$9n蕃ˊ)G_wt]¾{d-,Rcl-jZ>XvM2ZoM%ob3Y?er-IU L}9t,նHWaaL@a:~VN3M 9BQ~jn ]~ViJ碣d=,nqESVk i.$j6;Qe۫ y\TBtoT֯oEӁzܭ1䤂.ev1$ׅ,ᇌ􂐉mof@)pNf~jQ'z,l_|yA1'pV\!% OV~X:pfalfGۆTbs^7 X(ؑaO\O i A(+ɝXod$%dKaZN"½qіKOϏ].&!&ZihOM];~.t1<J-d +Ѱ2j>(u%'j4S6(JBs#qPBKx>`Piks5$7>Z\'#Bi.RȉQCF;VK ?\&f.z&UJi,CjSy~-9^;bRm`DžHwBvly*Aƙ3Q%viap!e(/ ,_a# IZg7̼\~88?:/Z0Q?I1T븓Ljt>V`H]-qiOghIuz#ob%lZ\KBSP`m8-jDR)%guGdNO9{~9DNCvZߌ~/vHxDguۏV%Z[rz]`"3Y8.O1#M"'W:$B5߶'?d;:b禆uᆛO`{PgY돷 joJ(P`'za3F lP4-X˜aϲ˻%)1-튣!%OBܝ@h*Ceؼ3) u ৢ`w!x|!,'L{hw pmȓN:N4zQUVEO!ɰA28!q%=C"KD?~}JJ|㓑m9wƷܙs0nI7bA9i, E/ZuYlى2%|Gnd@&99>NoKEnIh7hX=:콛Թ+dB??BDz;@TA@3wdJ1G})sYrK00aknPpMYLї11du>6d(qvd/3D+`NvWsLYwvH@(le~ۏ%R0&9kDP]bV ui۫p!j`iq^C4&u7ͫEC ):!1Qp*▅zƈ]Wf*}LkJٖ;Y+i#4k;85${|^lg^BW2krכr~|8/!j%dyD~Q[º0 G^m,i"M7,ÜE+|{?!jZ ~5Awâ :LHDj#})ZcR"]ed>}ꀱw0('#܇产8襜ō/VA|}ꭾ[[=Sࣺ$q!SO 3bH@K:qIȢ<67CsDާYR]Ll9*ߟi:A,C:sz/=eMFYTpuy >@ 13;AQzv!S`5 ] An3=^u>z{ED $'9 ':YYPnܤ3jArqCZn}*ҁ%b`2ѷ k}'V47fCWpݼTeK( S2wu&^pU2:)YNg ɺ)b=!tŔQ6xt](ᦑVo=bZ#N@ ܋9 0qŨe5A905KZ;l LWs MH&|OLtZ/C߅igl=O@;Y ]-9Ύe[IqbF42ܴ0ApTWtGK!#yj7h_ddvrOŜosP|Tky6 WC;\*I5$qmO0 9?`a9Ӹ ?VyG q9tM38Ӛav#S|HA9zLLh6j{ަY*OoSŏG!5@+UMj/=CVRs')D%a?/6!Q}Gt)?뎺qx[k4T,v"xd;o!(NiDjgZ\ 9nLL1V"!BJ;-Z>IUps.YRiE=M^O .xkNix]-FѣyJd]7{ԔldGh Sro Ni$aCl%0/!C. c_16V%w[(Y]g˒F^Q^nIrtQ,~dBFH<+^yb},Wj[ OK]QccP xzVsdR FSdTd:R^@ްR>,6z./[`WlU|ƍXJfu -ցx؇XQC(TxmrbĦ qp,tn?eGfD+ "c +gE%6[ 1<Րv̛*\x}hmxudpԉ5V t񆚡RjԹ.K|/~1`ijjEC<nE=%W:%gY {Z= Ib(lLS{ioPB83Xyi'Ye^iGz:ּ~U̲*{Vą +=I-QsܺST AV&d T d&!UUs/{6zbw!< މFdR}8& N`CP F-= ^*~j(iŘ oeNRV)ǡmX Hsn(TM4D__s@Y)XMT[IEWL[rw*k*G-]o#JIX4t/Gm*sOjgL \H#XjqFZv8jUvL Q\KQnΊo0{>R)|icpGN^ѦI*e>8ߵv\&iVJnLa#6f@[8+:ҀRJq=j7xWu"As'{KܨҐp6|C~ΞPT(ŷb` lI,7`s$Cޅ j0.zhZX?WNJpC ND' Nsa-Tv1n`6J2%fF#Vk!:JޯjdBuJrU<e1[8eݓkN|p@w#kS˯WapdTNLΗAf=7N* 27{[=ID~DX^PMp|Y޵% f/nת>[uu ncY& 3> OSB.XC(%t+ ;msz07x,m \_rmtrfH˦\Fo~'dśwݭ.k8 r/n"CNUZ=yWK_ifV=ѱ9IjS) ez@pP@cX@ʍuy}d>Jˬg?Ԅ7 -4di#aע2U4mc5YLp#w R;Cy?AeVp5)z˷2q MrO3.* eÿSOdW+"*]%5BJeMٹJ'`6ɋ9Qɽ%EP M7~ lzA뼎uSM\≥(؈}%ɧ>8=8ћspYF\`;@UegB"~esm |ߒݒ\ endstream endobj 210 0 obj << /Length1 2453 /Length2 17388 /Length3 0 /Length 18821 /Filter /FlateDecode >> stream xڌP ${`pwwwN .q=$*ն{w=+  ['zf&*3\_9'Ȗ QӛLPd q09x9y,LL59 ],Lr -\d`afߏ*cj377'a-@hhlh P['#+#LjdP:\&J)jn xX[m\mM7v,@hcipxogCccPeprsښehhz7t164z3;uCs4vsrdpFƿ¼YDdcur+?1 [9\+[_e81Z;yLLL\,=flo%_=@vӷ2?p.@3O"8ffhfa ;hvnmc0'ݷ 3Z6U$h)_ Igaer89E,5[?@zP7@^LRx$`{YD>K5N|ʣ-+d-9B\э>}WiUB2G!Goo mK"ԵӪqm!mӭp[+"b!r0W{\^iEdݖ'vn{n*}%?`sRQsS8c+tޗs7]P[f?{a;JJPn?/nVOdisY NǙ;7XTHfd \m~q *m1q8ԌVFoC}:A5F&6VU_AnvHo8hEWi./;08vVeX"OC]f)uFT:^JGu+H}G;܇ʿTTSiLQ6p4)z{ŬwO^Y2?}Z"]wt58-W?Mf0# cDda4ԓIËCd?0Wk|@Yjm M vj'a}ٳDꯒ5IK)}8T9Wx#WH ZkT~g٫q->\B򝽿n9ZD%3;\Ti\*efYU;1nKP/5W) F/4 L AAia<($YEԑE^jbܗ:ݡ̘$ud񗦥^$?zMB@ VeS[8ndw_Bf^%,HqѕoNv#1?+]dKch:a#?B-@i=Tֲؗeuf ڕQnHzx{CO\vQDyc y]#9!gQl0kɋʞ 0K|xe|cϛVOd4)]sgOLWʄ`$pIn4ǻq^\EڬOCCcӌBp XT2](**;JctoӊEDٟIO7iEWbx ) C^Dz%pbGTf4-E2 )P|JIҜϛ57 ~ NP%MSؤ<|HqkR 5]|CQG3\UEIC'sClVK+yr7&~ţuaqȢ5T9J} )#W$!թx2HAu{b]_l8׃"(/]z0]Q%Ra@띺؋,՛mdUe!]:?T&sMIXZdi!* g ^я9nR.[O3ln섡QYMO=tW L)Vn q\moz$/aG +!ڮ:gL!!`A>4=hMmC@ Z8U d`'T<&?P{x]M-P=.1dʁk<-[FlG}bAz<]"Zؖ\zh yKVţ/85wt'ڤ1Qe~=0 ^| i~GCR38I̿0Afk+W{G4ǭT݁ Ѯoq v=A=^L%sԠ #n5k>QRՃ>@M,0l,eAn,kFdTHh$x;>urY5OhVC+ORTAOlZ؝jZřs3?6cظ6 @m>Hn[Q*A^D "nFO 꼏A) y"VVk=aMߙ=с[zPM |! BR'p©vb|;][FYb <2%u?_}p BQ3 -2'j$2d:b?bWG8IHK?ޫXC$wP0jw[.`f fGЯsaf"5P_՞%dIдt̿,tfuApydﯵ V=@a?~qJ>x Eƒm4m]#g*2F8'LΡMJsFu]̀R ]z0ii*)(AmҋFEr[x1n!Qp¹95&!8b&3'z9H &pVu22zGuuf]-Ng6J xEM5`Hve,[YȳzVfj[ehx!L% >K{i'(.'3SJ$QwLÌ5`楼.˷Gu.Bя6Ӄ'oDk]JIhQIa+'x)L~f@u3 Ӿi5 3џJ%vpޚҰ{Cڦo)+*ZYݪF#n:)*ZDݨz0,fg!T B3'ᾞȞkT".݋ 9 ޛ'uﻔcTC51{Li- ^K5b>LD.󊗕KyuUTHa ?Wt4![#]Wߧln /U8΀?;ۉYމh$C,Tzcf&fCb͘e7ϼi:3gP !y6<_SRH4\2kBCo-en9R[CÚnxt~UlzwN)^*yKp޲<n(8u[]0Z " xQ9hnN*K{r :53Ijr7C=[k3؝Abq$w dIKި;}֧t-Z OD[P nWr;s08ny'TA{;2~pZ^udړS$`Um}x^1l7 *RC2}^1 Q{y13]Cؿ |S!+DI+Go/JԮx2GN_X!Tc}bY;8q3Sd5f8Q(! xg[!jkb 1Ϲ̾H]K%{Kc RǮ@]&rn~'jdXA]c:}Te+r! $9+O#Qϧޏ=1RdWw3&nBS2Xt#ꠈj EAm6{f+k22&{V8%7IжԃRhu~Z3`9[Aa6Ie&!B(lf]QѫLS$ic*? ܇gg*ePQ^f1pH "E4aHۚy+k:)B Ykz@;՟L!}O%fjGC2QJͬu!Ĺ!3 C ` ǶYX, S1jm{毃:plj\#7AF)`݄)i苔o؟s!2\ݖO3jϗdi&g;jw5p9+F Y CHzN첮Ŝ@WmuZ`_s )\Baiy\B6L*݌3wD4A~q^OvCwa^U^Y1Ov|_YR]I %clY̚`'[**ͫ2B5P-,>b;3 7^wC-g뜑ǶI{d!G?訐${pxs/vakc*~5n hU dK x7ӇHߙF -#ʓy1X8qRRPDȪ( nrQU_ƌԑ0vBQӞi+nx8 ʯ-lҒ!k)1X0z?wJ~eF86 d%yvscL@pMl;-W;.gB~9(a:99jJ> \s|@SjfB%!׻( 4yDcQt2E0hO4L.%d':iN)ţ;R(g?-]Q/[^o4r4ֳ!*CYc@B J23ryJ6KdLӄyOY6)f5'w)NWW:#] 5wV_7#]CB߁[-fi:P]8?yˬx,O}gW0~;/n](")5|5#*(D$ő~'Wm#>i1O*ԫ̔qdoPmQP:G E}z54Ol="vN98R`b*.^۩j*<ůs{^@?ic~Td;@-/}՘ʒ|SAZPcX:אh h)x ha íMnHcޙ?T<|9i5bۭ(z'B^pkx_`aIڬ4(bP/nWZmv!'XYOnS4լh~pG6no9x>>srh^4M{[kVJ?HUtu8%F hKp11p}RLD{eֵ#+{jK"Ui[m{QTjut+v<\Ȟq;Qg61۶w~uRh T.gJ< =|%eϲfb[FK#T]+KkB(DLX'Fz;0T© $㼅_ky,]оfb$HǴ +`,$+^}q;v @ `ޞ*elj }PS՗ƷZ#!me\"))Nz9an&>1AÆt]{f]/kAmCx)REgէ!` Q@)nBؐWyHE\] 9߂3J'8@r-8ڕ؄ NOZB$LxKc$ : OF#މ9y)4,'? &F}r6oHo#rih톎C$5mn];-,ƜDϟ7RF>{_E=8#cEkSԥyzY{)|w8B Ty#;0^)XReEI2K>'g~$">{ںl?!(zk7pCVuU=>{ XP@d26O OhVA ~ᘺm]~yE\*FV PDOĨ7-,O"/ק(!{dry#!桳!#]SE6)\i PDF+\1+۸ y#nhy\Ề`M87dr@=s&65=P8 yӜ1~^j6v 4W]N1Cr3SUF)t0\C ΥU_InS%,`|G@+vtbC}gM$ Id)h*PU$o{sy^vR(w±&6H ki*q hT]F.iV5DT 2{ۮaeW\?1BfUW cHu*HL{+Ms$̬z3ȘEd⭤1D |KnNڂvSOyd`7 TI_F݄fZP{@y͠jbܫ1؜B]q5ڙYvB"Sg)8sKv\)͏VʹXn$S`0^v7/'/Huu+{¼N7;A,Dnq+YΥMW0⺔F1al{!-զ&(lg',#kl{xK ,p{*W&I enigD`|oM`[c`!ΉTUI#`hZt4<c~`[qɣ֓A?ۺȪ^"#xܚ"*-`'U!M-6k@+F@wGrL)hAGeAA\lȫà_ KlYRYxXOD?$6f,8R)j/,URFq2d`5~"$vO>% BlʒG5ۚb4W&<a/\_JΨߵ:94+RPRGor_.~m:!@D c|ᄀJ?ފKUxZXqW/{g ÓOo̓O>תGunq3Y3VYcM ZY,||MŻ.84DP^Y'{k."4pRQ>8wM/4DR;f  B2mj!ƲڔĴ׺H2a:4Nփ3_):- Vu ! 8]݌@^ߗTR*D1hioh8;~MќwB}!# UߋePP̸q {c¥V8DYF(>[|ݭvY:o"yDӯ=H3kOomMIme% GcJ>}nk0-AOC;P>XT'FX$mC;u6{V;%xPw5ԞP4.Ǚ́r:c1:OCpe&ܭ'pi*e8CHw+̴Ӹ$G_^u긋&e?&1Nj;\oA\/A'e^ɋa\ͼe4 ZiXoؤ}8=Nț6}Ex1H<~z5qAS$C̆πP ʐIC;~{ 3ptk8xh7wD[(@&ܮlpEg}5;ljj_ئE]Ag S~aLfzșo>h Gc/Wr scxi}V4%Ye}q A)n)m/9 ȀI0fmʇ#J,|:*vkVZMNo?Ғ?*WJIin}_G`P0}*Za dذQWKyI_3JZ%  u͎'wol/RͩB=q‹ZK>ĕ fUBaHZKy< ZY?U.0l$OebU!4 Hi |]80'SmM=ֽzt }L[fp{! Dn0%rt!NXVp$n%_uȹ$qѵVv5 L~BGܮ#•VZWC)f6䗈"Y]P\޳֑<FK[\JqU! )ׯ[PÖ\>jTXV۝" yD Y>HGhmaH^zӣGۺ{(\("_p^wʌ]|R>uk1 SDaާr|P[1cRPÓ٣*B3_T;B14]x9X)q%Ar+zGWCwϗ429Ţ'h͎,p[^v jThO{M [w+u%P&S\/RbN\C)GEY武wN*:Se, {ƭ "xgrFF S`2[xuPw9'`+E.j{8i]̇|>-F{ea 9'+3TYxU՛o|p\"BeGoGɒΣz\edS%pR}8ϻȷ=ʭw|:* emB\ ^5nc"q={t|&8FʧE1Sb9k64}*x=Y?X/'(9v'Q݆M"?Xx\г夵[2#Kˈf i+;|Dtd実 ۸TSq:KRK3ŧ.>!!R⏃_C9 Svo8-( &R>=PٺLJ*C?KE3zD&ZtcsY[=ϊC񙢽-{,KHY!2g!*1ALŽM>g|Eg3(vqlNGgLaS-^iO;%= l46}^u7Zw5C W'I'Q쥖a-uX^~Hɞ#: <oM^|z n6ߔ{=Řl%ysaQ.T|W04zcKGAvo_tKCXQI)}D&tGm.G/ۼݸRn:215y5fn;휶53ۚ-Zl@RdLv~ΨKxPa\T:eZaS&!.\^=2炯Ra;Oe!ˡF]VU~Q GѢHGyᬇF]WsCD]JdOy>^uCtqMD"6=;ӟhB$X7ʐ;ZF0A@=&> 4k;t5:?'وfК~ǡ>he -NK]E<%%'Ko?L'M9Ф 'T6K9z֕;Ky:;ɅSb D.Sƈ3;0~c[[R5z.u sӛyPiɛ&|^<&yȷz${ZʟĹWfû^77Qօ|3O JO1}Yo OMNjT?tP j>#Ǒ&oSbUVY2mU9s׻K|`ata4/L}WvyrǯoXM! Zc\;4÷E'HrTOn3c4E}vE0Ƿl*П7t{۪6 Uq`f>UnTءY xtTUcz~_}jQ))(y.ta4s;/N,hEʑv*U@\)1BP: N|>gOiV *=Vλ%M} ^Qi%'aΜ;5MAє/ MPE6:U~Qec1Bv| +>\3LZք*ߝU; (S`nN}@Zg 9 U;f7;)\Wr m,}uOcX i.QJbz&Oz-kKxCFtNv3:y,}lE2°m}lPjd;{e|lN<rz[2dCw2;@S%#G07u(r\fì<8VE|7In!YZOf>xkZuTOjjۋc ["OeƠe+Odf6rDw j7($jծezf`HGv)uLoR_Cž6+=˓iUE]qy+ޗZ Ty$pUƎ<2N. ?,5)Il] T\PfE!%ľ*4MyVHNcVR_$6t=R<^@`V|zPWa|/s&@s] PFc`6`8: L0 bQ53CWy +fwʰW?/ w @^סUrtDgRsΙ 7fYݭhv[fzrUC QR$DТLP=KɨGĿs<҆xnLR4*:Y5 KgM {NU 'ǻyg=lkց"W(e%V#[^,~P?r1[DM}vE1WuQɲH }.a1,6V12PzREwvW-"yhc zC\ĔHccoZꐴG;`* 5^Ҹ5yyZ^<)Fw]@okK ݪ/8=FZ6I`ODZ|Y'riE }Y ?HWly퍨8l>S)<{3 g[}7 72%ϔ q_g71ҮT?Y$ nJ2{k %Q?|g/(>͎FZ(UȻ|%*,1v\>9×Wy:cH/-p-عiqt؁:5Ë9 !:^! endstream endobj 212 0 obj << /Length1 1957 /Length2 10937 /Length3 0 /Length 12152 /Filter /FlateDecode >> stream xڍT6LI7J]" HC Cw4HJtHwwwts[\םR+1lfv6:?ZM#Sk@`?FgN` 9Z9<ll668 $@-L-nkj2<_ =w8@h21 @&F5[_), ;VVggg#[{Lg t;Ml)cA[l F@3a 2#@{sq<@Y/&g`ga'ѿLLlm 9 d (Iɳ@\ L#/G#kx#'#΍R*gs0AX@ֿ$J|ʒ`Sq[ ? =]YY+3o`ah B3Blll|ĂWzuW;ooYYd|Avw0r @O?  h#/a{=vۯ?leRWWWaK?611[;3xwe#M) 6!_ՠw.Eq]6n6/A7߿Frmml@֮;<#ylVVh r_,y D#A 4UAL,~__+f m@)fv6=syk%&`dooY?dN ׳k#?BC^s߯ [?st,Nio] A[*err>ԉØ(Ksи8N_i>CivL˷_O:# U']U]C"{ѷPkzh NT̥G :YW*gg "w:]]riZljA*MvU]c6* D\OR CŠ vHKz\y6TiԛBGaFM|SYO]/떻 >Z{}8^EgM6Kp7s#| tZvlZަx'ٗ~\r|M ~[3l2&cT(.Il> Iiea שn=ŻbַZ9~9OLhYY:؍'QFsdBZQ7Z&'.\bָൟvgMR~64aM 6L0yF>%o@/~ۛjeqC7Dj1O.r#hvQ g "OQ}gh5Td2 h{ xԏfũð.={j)d{b-Xᓡ0& WMdӽ-P6N_G#"֎9aʜeDS9@rOHt!K8/wgs Ih/Խ3Qdݑy,3 `ḟ"6t&>~Y8麝p}Yq,b-SՔDTje4q`%M9z{Ow$vNMSlF,=ddum<)H Hـ0"mr} {a7Cƅу3KƋ G9|1d}ۣЩmniX̸X:΄lQ}z0zTڇvhHQx}]3هBJ"b";s?0@h.{mj`հs~d m㸩SjRECY*q}f˞YPZ숷Zs"xz:r1/'gdG/3l)VwE%(dt?Iî[cƝ< tO[UZL ^)(mI|V]ZQ=ʃ, q5iԳ1T"(ͼ%aK l39',+ gQWpjgv<뜛h\ޑ|s5FMWGG=ntL|n.Q촫Y ,ɮwr t XR~,4CbDG1]=R@_)nRgOEvxUpDޙ$!Hi012W΀Ԣf  9Gh^Y*_iFSG3_ 73d5}}v+.ҵ kᰓ/ <ڃ%x)[jg8]'D ->W/W%f ?@:jvOª}.OH] d}a,,is}%="C<`Z+<ζ}PQIJB["r)! 4!mZa"bԛק3 h,|B0RiŤRmND F._c!|C !%q!ʸ(fe;K/[Mā Oa;Ae%^d,j^M;2Tj_E(w@Kje (0UI8?RŔ! W:a; W7.vm. a0!_1t~.nR(Z̈{UK5̧Ysm8-.(y~KMYf鮈 2/Ϡu{"t% !LECk>.LL GYR2`fzЏT4hث3N,Z=}3*⫹'q "JX,"aY(:{/6!GJn̜asC: ѱ4}O*+2]ڰ:C1 +waی/Fi"W? J48LorR#&gŊwʱbɗi>%jXU䄎" A4㛇ȯ2n*"g}V-r  eBP:bp NңV|=2ԦCr >'!Pn'P)Ҫ ?WKU,b}( l]VqmIA5±p ߸x#TTyrP8c0o4Ә$lke~ٷt*sQi(.ݪUgwd^DڍS漀OeDFҞ[^EzBTq/N8sfq+MƦR־Pb]h2cȕƕnul9_M;= mU7)Y(kedj$BJv{u\~exQm'7֖c[b?Nĺf}ώAɂNB#Q`Sv}ͫ]?0 \ #M#{?99rc\yЗc27^~#"ږ'~]Es{eNYNK'yLlzûX9Pӆa/0utW6E7zr?ʀKȬkQ&DP" \9_ xzAЛ"p`ٝbd.cI`&jcMy:=ʸN`sHv`n1Dqd5qaW8GE2^iD"fzΪFb'%ĝh$0NaENc6]!3,^V.WLgoQC1_^R2g*s+-=hdӅnz`x} ]R(@ SQ\:j=TdˏʀcFo{=,Kh)7 #Y=qS' +L˅f6N)z'A8"y,_۪Ya2GZKxʊ jbfTLiSqWw6l41'}PBԕlW$"mEH:$$Gmۀe 7DEglƓKbbv?4]H!%(Rqqsiaqfe^$\SEUz:#=yܗ݃"AzgͮY6fIi QxZz$˚w4Pm[T=cA.8-CARn෶j S1W'5IJ vE|rr GpQF+u`}bF1d픑 {Z߽֡pX^j ')3Ǐ=/ܯh }=>Ƞ;wU_~4*$uP<$~5N$ZR;> 4%dlN^wIj1$;,>DʚE5֬{[JDa o +#)Q,Lg!TDs\Gl<4t]3+ň33} 6*,sۀ2#L},VV7_ZL)|DjFn=Nh\/2|x]as4ˌ!:԰)-UpLW9uO'>3՟}D̙8h;4"l9d^l aDֹXG6('ҒREɋXRԷ 笉CXUuIM*؜6Ţk/H5 'xoDc j1(=}?eRt XdxE9웃~אbc]OmltH&޷&wZWn&}q`EKmyU͢=DOG Z ^7BKR~R"B"RoE8|x+*9BqZ;a8"':R8JB; CPߠZC QisRI4(Sjv6BDԪ{`DJvmwlPhpD{'/WeVMrgX4if,࢜qF4oahodkec>R]ޱYڜ "S>JO1&P@n`ĢoJ0/~^R?%N0%v~{8Oٙ9КQ?Rz-).Ey{w[ؒ=sƬvGL vyt ?p;.u(5]cb4DRys/,M-{mCx^ tBH`kbBE6TR9.>(P8Hֈ7,5"i?LB!$D1,x4j2RrN0Hey퐩5 eʇ &2wp. .Ժ=Pq, We4*<|n9Ĩ2kjDq&Ts]5S&!~JV³lxykan#1ȉs 'N?C.I_fLL,EdY:%2|š,9EZs <<4MuO7ӥG֤bVqE>m)<≯x}yuAG$IgJ:(1O5/qP:؜px5uO38qNn()zwS4+ԞL *Ψ¦S>P \ '?Ƅ}& m+c(/LĪ(i*Q{kz2I:mJT\=ea`4\:&?,&ݽ}J)~-p9/dOU# ;~9S\fqb\i-TlØ;q暣p0$i]p5$OAj^i#fPjHytiy0E++K3}H)QkŸ7M”2ܤ~v=qsPQrxLgl\6%E\KUS+u,wpd+sP`4MH * Rgs;dqE$HR3Qi|EO9냱 ȃb7ߢ*9G[QWo~Qx:*OuFyK!"E*~Bs7 2{/G9WZAȊ(mI%he|r#5΄e5)=u;@}cBU\9l64k2Jc!J 0cT%P41ƣ-v]݄ ZΦ`Ĺ.lP' :y 7poe g]oV7zN9f\9w%)f:U D;kkUبM`#^& nyW*l%IT쒰 aQn⾲pz/H#IΚQl!̸eRb>,Rt0wyMZ*~ϩIjhE7&y$hrvvT[~h#/o R_c&[qbmGTz _6:hϭ9[TEm;UP_1Lv3JCm~xq ;r oO$wdA}7ۈ7vhUޘ2@)ykBAVSVgEMGjt2|r6Bk+>*D wD/%!l^|wa3blDתø摍@WZE^T6b$;ޠuSsO!w=!+m +جu6w+7'l7U#&]b Rj׾;?|s%abzkߜ.M@ s?e[>Xsk!˓-ɔxܰ^]Ogf[/G):ȝ I$Uz4Jo&Ld* k]\L'. %zGjP l>`Q/ I^\Yqa8F«I>4ydq?g8cfqAo,lL_<2cL̩?V cf`o_kmB-%,bP{雠|mR j>c½zk5M ɶbt! ^*^KY{J<䵎xH%$){5sNYsf)Zqr#_=K>, kY‰&" ( t3zuRg(E.>ىԹ.Py9Qj{M#6X:K 16k^%̏vsр:뢑9@uЩ=)" Iw7RƊQ}F7">7/|Q> V id0w􏇧ZSZ6h:g5^ ,)Śgow 6hUxZ7t֊2|ww嘧EƨJ;z7o5!,ZX6Vq* \IOTd@ª~qr.bwodR4$U8a ll(|nY~M|Ij\ tG!׎v Yh)uB|if#vDX^gh^_NnaPewG&돽us$cF]3oz, wr1 4hF,PJ0Ƚ~' F}Q/ꇥH߰ǍXu*i{Qx؍sg0OL'wȷ +T>oRLڴF3IzWLRq"4ǻ:k> 3k )Em #v2 \z5} ȑ F3oT(D&I슶/j՝Fl\( NԮa*ӓMV!EUF38=W]$zma IK 8;ZFr0SW ,PN.Xrj3;xBɫdʦ.2{Ɋ%;c xX@'86ݠ6{}Qu!3z~PP&Zg2Rn"&ܹQlMЧ6/MsnlՋTM0[RWj-۩l`^Z UD,ڑe 6W@Fh3SG9g/r:t%%FK:]L=ΉaӇ-r؋Dž.ͯx[3-~=9y!̙rמ|;laH.;H|b+JO,הNZd4)\*p+gӗfc"S0DY^ *2)fHV_»~ C MgfWѯ,fjk n*[۶\8Ϸ1RzӗA\Ӂs`Cr.Iw[26 MVvI5S GȬ!?\T].^0ٟ3 L9 "%#y"gg9O] Ô>ۏ*#T1u][,gWQHeZG悽zGd#iC_#;)qIp͑EGk6EokE6fQ M#(aBT),lh^ ﻆn[ٗ}\ I"6quЫGםMȭY#G'u5C6npTd'6P؝N+(GaWtMUB,WiHrjإ݌%zE hq9S.t~M09]#yϑJvw;&Ik>rpcgQ.:Ҭ1 Ө68H7FӐiOx̶XaJ64fhCi lSUanpQ~) M86 :5l 11(xWm6P{?F%j126gcTgT M,o#%̗K?19Zcu@.&h\( NwܵA3R0ѱ8EL(AmLpۅE2H#񩡡CSs`Ӌ Vqs+?yUeNf8ى5 ;fFh8к^oqӺKWhV?U2.=dJr5J]N!`ҀRIHB(Ɣ]'KUO?9oM1xZ聎?ĴxZ:r9͓*'S7o4Q;K>qk#F~7 x n[o"Qփ&N(ql\N3yOI  XO(, +W ?`gS:I^׎}(YܺBNx5`-#>|С*SQڪ c"9BjV;Bz435ouRcL57`]KlV [J[ 8?# endstream endobj 225 0 obj << /Author(Kris Boudt, David Ardia, Katharine M. Mullen, Brian Peterson)/Title(Large-scale portfolio optimization with DEoptim)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.16)/Keywords(portfolio optimization, evolutionary algorithm, Differential Evolution, R software) /CreationDate (D:20200222214548-08'00') /ModDate (D:20200222214548-08'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) kpathsea version 6.2.1) >> endobj 149 0 obj << /Type /ObjStm /N 94 /First 843 /Length 4773 /Filter /FlateDecode >> stream x?Uó>dӃ,?/YnWN\z~wr^͆R)-q}@1r8@ (ߛN+5ģI)6`%a)`} &osQ_{OzpU}~!/ &Ax{?ߟfIài̵4F:>(=)>8CSa^OoP-uL^e@uQcdž!A"[0 #4Lk]h$Ê͘(:.<畊)V*g#A3R024dіmի J6uƕ:iPat-FwA4Uf0Y>Ao extnhhAc$ȆĨ{X@.8l\;&*SR4ˈoȫ(H́*(7x8RғjQxtd'?*ҫwQ}=2tx6V "9=%l!6;e_^pA>TO-*MŌƶPJH,iM ڤRBaU X, Aا-F{#vI*u=?v%&k!h"QaU,p8RilZ!=> @jDxcӆr.uCA"1! Z!58^4 eE\aGi}uk&i֗.8G-faddV#"|at%I&"; /-:umww,4#z|S!\8`oM~,x<D[Enc|GeC>#b3?Q#q ya +rçз 3yqGXm@3ӮxM>vBO*M#j%u.X*KZ$&ڰxL`Ort2l;KNx x؏0UvBաE4tDG _z{ЊAoE齝3 tWVhc@^1zPlZؿcXܾd*LnP^bF=ؐ(:eu#>JӁUTi6!=V27v!SQ~ f?ϢդFePUNW#R|U^g93Cߝtxb=FXP->BGihu8`T]6>;;{ L@oP2+$O'|+*8} MF6G_+~/_8 PLGIX tT̯bBCf}f:iu7PGYȺ!qWӄ”°g:,_V中o1>O͚lo+#+JA8~}r)dSe?Dkgyqzwq54IcQ>D+4uI2n#Vz]]lm_;ztqvͶ l[uܟ0!5uXm t*M_VWa1ZUbZ6ԇm/_CcNiV Kʏ4 u pGdRR{e8)n0'yjV@t9S8ɯHk|妛#SjV.z?{xp6Hx|9j>Frdzj U^?x9ɵ&dBOwթS]Nl_>{{$Y5z)=6zǖ( T۟4{΃z! d臵M?Q,*Fu7ݼ+V}oo=q<_r;>6O]~zsV8=~N9)k?ď < wmA{YsxxsIN! Bj>\٫gozA:!7e}]~ݯ{ _Eğ>;AD Ǡ}m}7$|{Rj3[f!GEHj7 r.%;w_)B[Oe5)roZL|7/ {bxKoŨܥb fnI+m[)@@!dN%0lk:,h,d9l50'jF$ ~)0//! g-ݻ.NH!A@b Y? z̈́7 ؇5vBq]p&"l2Uy\yoi>m  endstream endobj 226 0 obj << /Type /XRef /Index [0 227] /Size 227 /W [1 3 1] /Root 224 0 R /Info 225 0 R /ID [ ] /Length 563 /Filter /FlateDecode >> stream x;OTQPķoFbDQWeeXXY;ciHba@caccW˺w;5ffY2ي'I w:(s2H Nqi49͒rͰZ`l-v`7쁽 n֢m(p΂~4\^"8`3(@J0}cwknCw\Nv4BMr9J:4pBCa[%V66&$Hn TJU} %ޛ8t4AV3WAnz}n M:܀k06M_&,2܆;p} imUj$5 j4,rn .(\PpFкhu[h]кuAB5"E;Af< nϔ^P*z[S*+?RJ4Tb}!OO( {z[iMҨgOJc|T*0c, c Kxcb~z}< endstream endobj startxref 244433 %%EOF DEoptim/inst/doc/DEoptimPortfolioOptimization.Rnw0000644000176200001440000004272113024075067021705 0ustar liggesusers\documentclass[nojss,shortnames]{jss} \usepackage{amsmath,amssymb} \usepackage{xspace} %% need no \usepackage{Sweave} \author{Kris Boudt \\ Lessius and K.U.Leuven \And David Ardia \\ aeris CAPITAL AG \AND Katharine M. Mullen \\ NIST \And Brian G. Peterson \\ DV Trading} \title{Large-scale portfolio optimization with \pkg{DEoptim}} \Plainauthor{Kris Boudt, David Ardia, Katharine M. Mullen, Brian Peterson} \Plaintitle{Large-scale portfolio optimization with DEoptim} \Shorttitle{Large-scale portfolio optimization with DEoptim} \Abstract{This vignette evaluates the performance of \pkg{DEoptim} on a high-dimensional portfolio problem. The setup is the same as in the \emph{R Journal} article \citet{ArdiaBoudtCarlMullenPeterson2011}; namely minimizing the portfolio CVaR under an upper bound constraint on the percentage CVaR contributions. Because the resulting optimization model is a non-convex programming problem with multiple local optima, \pkg{DEoptim} is more apt in solving this problem than gradient-based methods such as \code{optim} and \code{nlminb}. } \Keywords{portfolio optimization, evolutionary algorithm, Differential Evolution, \proglang{R} software} \Plainkeywords{portfolio optimization, evolutionary algorithm, Differential Evolution, R software} \Address{ Kris Boudt\\ Lessius and K.U.Leuven, Belgium\\ E-mail: \email{kris.boudt@econ.kuleuven.be}\\ David Ardia\\ aeris CAPITAL AG, Switzerland\\ URL:~\url{http://perso.unifr.ch/david.ardia/} \\ Katharine Mullen \\ Ceramics Division, National Institute of Standards and Technology (NIST)\\ 100 Bureau Drive, MS 8520, Gaithersburg, MD, 20899, USA\\ E-mail: \email{Katharine.Mullen@nist.gov}\\ Brian G. Peterson\\ DV Trading\\ E-mail: \email{brian@braverock.com}\\ } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{Large scale portfolio optimization with DEoptim} %\VignetteKeywords{portfolio optimization, evolutionary algorithm, Differential Evolution, R} %\VignettePackage{DEoptim} \section{Introduction} The \proglang{R} package \pkg{DEoptim} of \citet{DEoptim} implements several Differential Evolution algorithms. DE belongs to the class of genetic algorithms which use biology-inspired operations of crossover, mutation, and selection on a population in order to minimize an objective function over the course of successive generations. More details on \pkg{DEoptim} can be found in \citet{DEoptimJSS2011}. In this vignette we evaluate its performance on a high-dimensional portfolio problem. In this vignette, we use of \pkg{DEoptim} to solve the portfolio optimization problem described in \cite{ArdiaBoudtCarlMullenPeterson2011}, but expand the problem to include 100 free variables. As in \citet{ArdiaBoudtCarlMullenPeterson2011}, the portfolio CVaR is minimized under an upper bound constraint on the percentage CVaR contributions. See \citet{BoudtCarlPeterson2010} for the rational underlying this portfolio construction technique. The optimization of the objective function is a non-convex programming problem. Since \pkg{DEoptim} is a stochastic global optimization algorithm, it is more apt to offer a good solution than alternative local optimization methods. For instance, gradient-based methods such as the \code{L-BFGS-B} and \code{Nelder-Mead} methods in \code{optim} and \code{nlminb} will typically converge to suboptimal solutions on the problem considered here. The version of this problem described in \citet{ArdiaBoudtCarlMullenPeterson2011} was stylized to describe many fewer variables to allow users to complete the optimization on a personal computer in a matter of minutes. Portfolio problems encountered in practice may require days to optimize on a personal computer, and involve several hundred variables. In the present vignette we examine a problem of complexity in-between the stylized, simple case considered by \citet{ArdiaBoudtCarlMullenPeterson2011}, and the most complex problems encountered in typical financial research. We hope that the \proglang{R} package \pkg{DEoptim} will be fruitful for many users. If you use \proglang{R} or \pkg{DEoptim}, please cite the software in publications. \section{Setup} The results in this vignette are obtained using \proglang{R} version 2.13.0. The function \code{getSymbols} in \pkg{quantmod} \citep{quantmod} is used to obtain the data. The risk measures in the portfolio objective function are computed using \pkg{PerformanceAnalytics} \citep{PerformanceAnalytics}. The initial population in \pkg{DEoptim} is generated using the function \code{random_portfolios} in \pkg{PortfolioAnalytics} \citep{PortAnalytics}.\footnote{All packages are readily available from CRAN, except for \pkg{PortfolioAnalytics} which can be downloaded from \url{https://r-forge.r-project.org/R/?group_id=579} or installed directly within \proglang{R} using the command \code{install.packages("PortfolioAnalytics", repos="http://R-Forge.R-project.org")}.} Computations are performed on a Genuine Intel\textregistered{} dual core CPU P8400 2.26Ghz processor. \pkg{DEoptim} relies on repeated evaluation of the objective function in order to move the population toward a global minimum. Users interested in making \pkg{DEoptim} run as fast as possible should ensure that evaluation of the objective function is as efficient as possible. Using pure \proglang{R} code, this may often be accomplished using vectorization. Writing parts of the objective function in a lower-level language like \proglang{C} or \proglang{Fortran} may also increase speed. \section{Data} We take 100 randomly sampled stocks from the S\&P 500 for which a sufficiently long data history is available. We first download ten years of monthly data using the function \code{getSymbols} of the package \pkg{quantmod} \citep{quantmod}. Then we compute the log-return series and the sample mean and covariance matrix. \begin{CodeChunk} \begin{CodeInput} > tickers = c( "VNO" , "VMC" , "WMT" , "WAG" , "DIS" , "WPO" , "WFC" , "WDC" , + "WY" , "WHR" , "WMB" , "WEC" , "XEL" , "XRX" , "XLNX" ,"ZION" ,"MMM" , + "ABT", "ADBE" , "AMD" , "AET" , "AFL" , "APD" , "ARG" ,"AA" , "AGN" , + "ALTR" , "MO" , "AEP" , "AXP" , "AIG" , "AMGN" , "APC" ,"ADI" , "AON" , + "APA", "AAPL" , "AMAT" ,"ADM" , "T" , "ADSK" , "ADP" , "AZO" , "AVY" , + "AVP", "BHI" , "BLL" , "BAC" , "BK" , "BCR" , "BAX" , "BBT" , "BDX" , + "BMS" , "BBY" , "BIG" , "HRB" , "BMC" , "BA" , "BMY" , "CA" , "COG" , + "CPB" , "CAH" , "CCL" , "CAT" , "CELG" , "CNP" , "CTL" , "CEPH", "CERN" , + "SCHW" , "CVX" , "CB" , "CI" ,"CINF" ,"CTAS" , "CSCO" , "C" , "CLF" , + "CLX", "CMS" , "KO" , "CCE" , "CL" , "CMCSA" ,"CMA" , "CSC" , "CAG" , + "COP" , "ED" , "CEG" ,"GLW" , "COST" , "CVH" , "CSX" , "CMI" , "CVS" , + "DHR" , "DE") > > library(quantmod); > getSymbols(tickers, from = "2000-12-01", to = "2010-12-31") > P <- NULL; seltickers <- NULL > for(ticker in tickers) { + tmp <- Cl(to.monthly(eval(parse(text=ticker)))) + if(is.null(P)){ timeP = time(tmp) } + if( any( time(tmp)!=timeP )) next + else P<-cbind(P,as.numeric(tmp)) + seltickers = c( seltickers , ticker ) + } > P = xts(P,order.by=timeP) > colnames(P) <- seltickers > R <- diff(log(P)) > R <- R[-1,] > dim(R) [1] 120 100 > mu <- colMeans(R) > sigma <- cov(R) \end{CodeInput} \end{CodeChunk} \section{Portfolio objective function and constraints} The optimization problem consists of determining the portfolio weights for which the portfolio has the lowest CVaR and each investment can contribute at most 5\% to total portfolio CVaR risk. Additionally, weights need to be positive and the portfolio needs to be fully invested. The level of portfolio CVaR and the CVaR contributions are computed conveniently with the function \code{ES} in the package \pkg{PerformanceAnalytics} \citep{PerformanceAnalytics}. For simplicity, we assume here normality, but also estimators of CVaR and CVaR contributions for non-normal distributions are available in the function \code{ES}. The constraint that each asset can contribute at most 5\% to total portfolio CVaR risk is imposed through the addition of a penalty function to the objective function. As such, we allow the search algorithm to consider infeasible solutions. A portfolio which is unacceptable for the investor must be penalized enough to be rejected by the minimization process and the larger the violation of the constraint, the larger the increase in the value of the objective function. \begin{CodeChunk} \begin{CodeInput} > library("PerformanceAnalytics") > obj <- function(w) { + if (sum(w) == 0) { + w <- w + 1e-2 + } + w <- w / sum(w) + CVaR <- ES(weights = w, + method = "gaussian", + portfolio_method = "component", + mu = mu, + sigma = sigma) + tmp1 <- CVaR$ES + tmp2 <- max(CVaR$pct_contrib_ES - 0.05, 0) + out <- tmp1 + 1e3 * tmp2 + return(out) + } \end{CodeInput} \end{CodeChunk} The weights need to satisfy additionally a long only and full investment constraint. The current implementation of \code{DEoptim} allows for bound constraints on the portfolio weights. We call these \code{lower} and \code{upper}. \begin{CodeChunk} \begin{CodeInput} > N <- ncol(R) > minw <- 0 > maxw <- 1 > lower <- rep(minw,N) > upper <- rep(maxw,N) \end{CodeInput} \end{CodeChunk} The full investment constraint is accounted for in two ways. First, we standardize all the weights in the objective function such that they sum up to one. Second, we use the function \code{random_portfolios} in \pkg{PortfolioAnalytics} \citep{PortAnalytics} to generate random portfolios that satisfy all constraints. These random portfolios will be used as the initial generation in \code{DEoptim}. \begin{CodeChunk} \begin{CodeInput} > library("PortfolioAnalytics") > eps <- 0.025 > weight_seq<-generatesequence(min=minw,max=maxw,by=.001,rounding=3) > rpconstraint<-constraint( + assets=N, min_sum=(1-eps), max_sum=(1+eps), + min=lower, max=upper, weight_seq=weight_seq) assuming equal weighted seed portfolio > set.seed(1234) > rp<- random_portfolios(rpconstraints=rpconstraint,permutations=N*10) > rp <-rp/rowSums(rp) \end{CodeInput} \end{CodeChunk} \section{Failure of gradient-based methods} The penalty introduced in the objective function is non-differentiable and therefore standard gradient-based optimization routines cannot be used. For instance, \code{L-BFGS-B} and \code{Nelder-Mead} methods in \code{optim} and \code{nlminb} do not converge. \begin{CodeChunk} \begin{CodeInput} > out <- optim(par = rep(1/N, N), fn = obj, + method = "L-BFGS-B", lower = lower, upper = upper) > out$value \end{CodeInput} \begin{CodeOutput} [1] 0.05431692 > out$message [1] "ERROR: ABNORMAL_TERMINATION_IN_LNSRCH" \end{CodeOutput} \begin{CodeInput} > out <- nlminb(start =rep(1/N, N), objective = obj, + lower = lower, upper = upper) > out$objective \end{CodeInput} \begin{CodeOutput} [1] 0.0547231 \end{CodeOutput} \begin{CodeInput} > out$message \end{CodeInput} \begin{CodeOutput} [1] "false convergence (8)" \end{CodeOutput} \end{CodeChunk} \section{Portfolio optimization with DEoptim} In contrast with gradient-based methods, \code{DEoptim} is designed to consistently find a good approximation to the global minimum of the optimization problem. For complex problems as the one considered here, the performance of \pkg{DEoptim} is quite dependent on the DE algorithm used. We first consider the current default DE algorithm in \pkg{DEoptim}, called the ``local-to-best'' strategy with fixed parameters. We define convergence when the percentage improvement between iterations is below \code{reltol=1e-6} after \code{steptol=150} steps. For some problems, it may take many iterations before the DE algorithm converges. We set the maximum number of iterations allowed to 5000. Progress is printed every 250 iterations.\footnote{For convenience in presentation, we display only the best value for the sected iterations, while the \pkg{DEoptim} output in \proglang{R} also displays the best member for each iteration.} As explained above, the initial generation is set to \code{rp}. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.064652 Iteration: 500 bestvalit: 0.057199 Iteration: 750 bestvalit: 0.055774 Iteration: 1000 bestvalit: 0.055013 Iteration: 1250 bestvalit: 0.054581 Iteration: 1500 bestvalit: 0.054269 Iteration: 1750 bestvalit: 0.054146 Iteration: 2000 bestvalit: 0.054049 Iteration: 2250 bestvalit: 0.053706 Iteration: 2500 bestvalit: 0.053695 Iteration: 2750 bestvalit: 0.053351 Iteration: 3000 bestvalit: 0.053273 > out$optim$iter [1] 3055 > out$optim$bestval [1] 0.05327273 > end <- Sys.time() > end - start Time difference of 16.03645 mins \end{CodeInput} \end{CodeChunk} We thus see that, at iteration 5000, the ``local-to-best'' strategy with fixed parameters reaches a solution that is better than the one obtained using the gradient-based methods mentioned above. A recently proposed DE algorithm with better convergence properties on complex problems is the JADE algorithm proposed by \citet{jade}. JADE combines a ``local-to-$p$best'' strategy with adaptive parameter control. The first building block of JADE is thus that the DE algorithm does not always use the best solution of the current generation to mutate the solutions, but one of the randomly chosen $\lfloor 100p\% \rfloor$ best solutions, with 0$ controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=6, c=0, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.063848 Iteration: 500 bestvalit: 0.058090 Iteration: 750 bestvalit: 0.055960 Iteration: 1000 bestvalit: 0.055235 Iteration: 1250 bestvalit: 0.054884 Iteration: 1500 bestvalit: 0.054369 Iteration: 1750 bestvalit: 0.054269 Iteration: 2000 bestvalit: 0.054089 > out$optim$bestval [1] 0.05408688 > end <- Sys.time() > end - start Time difference of 11.45833 mins \end{CodeInput} \end{CodeChunk} The second distinctive feature of \citet{jade} is to introduce learning about successful parameters in the algorithm. Under this approach, the cross-over probability at generation $g+1$ is set to $(1-c)$ the cross-over probability at generation $g$ plus $c$ times the the average of all successful cross-over probabilities at generation $g$. Similarly, the mutation factor at generation $g+1$ is equal to $1-c$ times the previous mutation factor plus $c$ times the average mutation factor of all successful mutations. We take $c=.4$. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=2, c=.4, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.074612 Iteration: 500 bestvalit: 0.068776 Iteration: 750 bestvalit: 0.067991 Iteration: 1000 bestvalit: 0.067894 Iteration: 1250 bestvalit: 0.067887 > out$optim$bestval [1] 0.06788674 > end <- Sys.time() > end - start Time difference of 6.5763 mins \end{CodeInput} \end{CodeChunk} The ``local-to-$1$best'' strategy with adaptive parameter control converges clearly too fast. It is the combination of ``local-to-$p$best'' strategy with adaptive parameter control that is the most successful in solving our problem. \begin{CodeChunk} \begin{CodeInput} > controlDE <- list(reltol=.000001,steptol=150, itermax = 5000,trace = 250, + strategy=6, c=.4, + NP=as.numeric(nrow(rp)),initialpop=rp) > set.seed(1234) > start <- Sys.time() > out <- DEoptim(fn = obj, lower = lower, upper = upper, control = controlDE) Iteration: 250 bestvalit: 0.087517 Iteration: 500 bestvalit: 0.077481 Iteration: 750 bestvalit: 0.067673 Iteration: 1000 bestvalit: 0.059015 Iteration: 1250 bestvalit: 0.054758 Iteration: 1500 bestvalit: 0.053618 Iteration: 1750 bestvalit: 0.053290 Iteration: 2000 bestvalit: 0.053156 Iteration: 2250 bestvalit: 0.053099 Iteration: 2500 bestvalit: 0.053071 Iteration: 2750 bestvalit: 0.053059 Iteration: 3000 bestvalit: 0.053052 Iteration: 3250 bestvalit: 0.053049 > out$optim$iter [1] 3451 > out$optim$bestval [1] 0.0530483 > end <- Sys.time() > end - start Time difference of 18.57083 mins \end{CodeInput} \end{CodeChunk} We see that with JADE, \pkg{DEoptim} converges within 3451 iterations to $0.0530483$, which is the lowest obtained by all methods considered in the vignette. This vignette illustrates that for complex problems, the performance of \pkg{DEoptim} is thus quite dependent on the DE algorithm used. It is recommended that users try out several DE algorithms to find out which one is most adapted for their problem. Furthermore, DE is a stochastic optimizer and typically will only find a near-optimal solution that depends on the seed. The function \code{optimize.portfolio.parallel} in \pkg{PortfolioAnalytics} allows to run an arbitrary number of portfolio sets in parallel in order to develop \emph{confidence bands} around your solution. It is based on REvolution's \pkg{foreach} package \citep{foreach}. \bibliography{DEoptim} \end{document} DEoptim/inst/doc/DEoptim.Rnw0000644000176200001440000006737413024101036015375 0ustar liggesusers\documentclass[nojss,shortnames]{jss} \usepackage{amsmath,amssymb} \usepackage{xspace} %% need no \usepackage{Sweave} \author{David Ardia \\ aeris CAPITAL AG \And Katharine M. Mullen \\ NIST \And Joshua Ulrich \\ FOSS Trading \And Brian G. Peterson \\ DV Trading} \title{\pkg{DEoptim}: An \proglang{R} Package for Global Optimization by Differential Evolution} \Plainauthor{David Ardia, Katharine M. Mullen, Joshua Ulrich, Brian Peterson} \Plaintitle{DEoptim: An R Package for Global Optimization by Differential Evolution} \Shorttitle{DEoptim: An R Package for Differential Evolution} \Abstract{This introduction to the \proglang{R} package \pkg{DEoptim} is an abreviated version of the manuscript \citet{DEoptimJSS2011}, published in the \emph{Journal of Statistical Software}. \pkg{DEoptim} implements the Differential Evolution algorithm for global optimization of a real-valued function of a real-valued parameter vector. The implementation of Differential Evolution in \pkg{DEoptim} interfaces with \proglang{C} code for efficiency. Moreover, the package is self-contained and does not depend on any other packages. } \Keywords{global optimization, evolutionary algorithm, Differential Evolution, \proglang{R} software} \Plainkeywords{global optimization, evolutionary algorithm, Differential Evolution, R software} \Address{ David Ardia\\ aeris CAPITAL AG, Switzerland\\ URL:~\url{http://perso.unifr.ch/david.ardia/} \\ Katharine Mullen \\ Ceramics Division, National Institute of Standards and Technology (NIST)\\ 100 Bureau Drive, MS 8520, Gaithersburg, MD, 20899, USA\\ E-mail: \email{Katharine.Mullen@nist.gov}\\ Joshua Ulrich \\ FOSS Trading \\ URL:~\url{http://fosstrading.com} \\ Brian G. Peterson\\ DV Trading\\ E-mail: \email{brian@braverock.com} \\ } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{DEoptim: An R Package for Differential Evolution} %\VignetteKeywords{global optimization, evolutionary algorithm, Differential Evolution, R} %\VignettePackage{DEoptim} \section{Introduction}\label{intro} Optimization algorithms inspired by the process of natural selection have been in use since the 1950s \citep{mitchell}, and are often referred to as {\sl evolutionary algorithms}. The genetic algorithm is one such method, and was invented by John Holland in the 1960s \citep{holland}. Genetic algorithms apply logical operations, usually on bit strings of fixed or variable length, in order to perform crossover, mutation, and selection on a population. Over the course of successive generations, the members of the population are more likely to represent a minimum of an objective function. Genetic algorithms have proven themselves to be useful heuristic methods for global optimization, in particular for combinatorial optimization problems. Evolution strategies are another variety of evolutionary algorithm, in which members of the population are represented with floating point numbers, and the population is transformed over successive generations using arithmetic operations. See \citet[Section~1.2.3]{Price:Storn:Lampinen:06} for a detailed overview of evolutionary algorithms. In the 1990s Rainer Storn and Kenneth Price developed an evolution strategy they termed {\sl Differential Evolution} (DE) \citep{price}. DE is particularly well-suited to find the global optimum of a real-valued function of real-valued parameters, and does not require that the function be either continuous or differentiable. In the roughly fifteen years since its invention, DE has been successfully applied in a wide variety of fields, from computational physics to operations research, as \citet{Price:Storn:Lampinen:06} catalogue. The \pkg{DEoptim} \citep{DEoptim} implementation of DE was motivated by our desire to extend the set of algorithms available for global optimization in the \proglang{R} language and environment for statistical computing \citep{r_env}. \pkg{DEoptim} has been published on the Comprehensive \proglang{R} Archive Network and is available at \url{http://cran.r-project.org/web/packages/DEoptim/}. The \pkg{DEoptim} project is hosted on \proglang{R}-forge at \url{https://r-forge.r-project.org/projects/deoptim/}. Since becoming publicly available it has been used by a variety of authors, e.g., \citet{Borner:Higgins:Kantelhardt:Scheiter:07}, \citet{Higgins:Kantelhardt:Scheiter:Boerner:07}, \citet{OpsinaArango:09}, \citet{ArdiaBoudtCarlMullenPeterson2011} and \citet{Ardia:Ospina:Giraldo:2011} to solve optimization problems arising in diverse domains. Interested readers are referred to \citet{DEoptimJSS2011} for a longer version of the present vignette. The recently released \pkg{RcppDE} \citep{RcppDE} package ports the \proglang{C} code in \pkg{DEoptim} to \proglang{C++}. The documentation claims \pkg{RcppDE} is more efficient than the \proglang{C}-based implementation in \pkg{DEoptim} version 2.0-7, but most of the increased efficiency is attributable to a non-trivial difference in the functionality: \pkg{RcppDE} does not pass \code{"..."} to the objective function. \pkg{DEoptim} version 2.0-8 incorporates several language-independent improvements made in \pkg{RcppDE} and compares favorably to a patched version of \pkg{RcppDE} that passes \code{"..."}. We hope that the \proglang{R} package \pkg{DEoptim} will be fruitful for many users. If you use \proglang{R} or \pkg{DEoptim}, please cite the software in publications. In the remainder of this vignette we elaborate on \pkg{DEoptim}'s implementation and use. In Section~\ref{inex}, the package is introduced via a simple example. Section~\ref{alg} describes the underlying algorithm. Section~\ref{imp} describes the \proglang{R} implementation and serves as a user manual. \subsection{An introductory example}\label{inex} Minimization of the Rastrigin function in $x \in \Re^D$ \begin{align*} f(x) = \sum_{j=1}^{D} \left( x_j^2 - 10 \cos \left( 2 \pi x_j \right) + 10 \right) \end{align*} for $D=2$ is a common test for global optimization algorithms. This function is possible to represent in \proglang{R} as <>= options(prompt = "R> ") @ <>= rastrigin <- function(x) 10*length(x)+sum(x^2-10*cos(2*pi*x)) @ As shown in Figure~\ref{rast}, for $D=2$ the function has a global minimum $f(x)=0$ at the point $(0,0)$. <>= library("colorspace") library("grid") library("lattice") jpeg("Rastrigin1.jpg") x <- y <- seq(-5,5,by=.1) z <- matrix(nrow=length(x), ncol=length(y)) for(i in 1:length(x)) { for(j in 1:length(y)) z[i,j] <- rastrigin(c(x[i],y[j])) } xx <- list(fontsize=list(text=15,points=10), par.xlab.text=list(cex=2), par.ylab.text=list(cex=2), axis.text=list(cex=2), par.main.text=list(cex=2), layout.widths=list(left.padding=.1, right.padding=.1, between=0), layout.heights=list(top.padding=.1, bottom.padding=.1, between=0) ) levelplot(z, row.values=x,column.values=y, col.regions=sequential_hcl(300), xlab=expression(x[1]), ylab=expression(x[2]), par.settings=xx, panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(0,0,pch=21,col="white",cex=2)}) dev.off() set.seed(123) @ \begin{figure}[t!] \centering \includegraphics[width=.5\textwidth]{Rastrigin1.jpg} \caption{A contour plot of the two-dimensional Rastrigin function $f(x)$. The global minimum $f(x)=0$ is at $(0,0)$ and is marked with an open white circle.} \label{rast} \end{figure} In order to minimize this function using \pkg{DEoptim}, the \proglang{R} interpreter is invoked, and the package is loaded with the command <>= library("DEoptim") @ The \code{DEoptim} function of the package \pkg{DEoptim} searches for minima of the objective function between lower and upper bounds on each parameter to be optimized. Therefore in the call to \code{DEoptim} we specify vectors that comprise the lower and upper bounds; these vectors are the same length as the parameter vector. The call to \code{DEoptim} can be made as <>= est.ras <- DEoptim(rastrigin,lower=c(-5,-5),upper=c(5,5), control=list(storepopfrom=1, trace=FALSE)) @ \begin{figure}[t!] \centering \includegraphics[width=.8\textwidth]{Rastrigin2.jpg} \caption{The population associated with various generations of a call to \code{DEoptim} as it searches for the minimum of the Rastrigin function (marked with an open white circle). The minimum is consistently determined within 200 generations using the default settings of \code{DEoptim}.} \label{ex11} \end{figure} Note that the vector of parameters to be optimized must be the first argument of the objective function \code{fn} passed to \code{DEoptim}. The above call specifies the objective function to minimize, \code{rastrigin}, the lower and upper bounds on the the parameters, and, via the \code{control} argument, that we want to store intermediate populations from the first generation onwards (\code{storepopfrom = 1}), and do not want to print out progress information each generation (\code{trace = FALSE}). Storing intermediate populations allows us to examine the progress of the optimization in detail. Upon initialization, the population is comprised of 50 vectors $x$ of length two (50 being the default value of \code{NP}), with $x_i$ a random value drawn from the uniform distribution over the values defined by the associated lower and upper bound. The operations of crossover, mutation, and selection explained in Section~\ref{alg} transform the population so that the members of successive generations are more likely to represent the global minimum of the objective function. The members of the population generated by the above call are plotted at the end of different generations in Figure~\ref{ex11}. \code{DEoptim} consistently finds the minimum of the function within 200 generations using the default settings. We have observed that \pkg{DEoptim} solves the Rastrigin problem more efficiently than the simulated annealing method found in the \proglang{R} function \code{optim}. <>= pushLayout <- function(nr, nc, name="layout") { pushViewport(viewport(layout=grid.layout(nr, nc, just="left", widths=unit(rep(2, nc), "null")), name=name)) for (i in 1:nr) { for (j in 1:nc) { pushViewport(viewport(layout.pos.row=i, layout.pos.col=j)) upViewport() } } upViewport() } names.vpPath <- names.viewport <- function(x) x$name with.vpPath <- with.viewport <- function(data, expr, ...) { depth <- if (data$name == "ROOT") 0 else downViewport(names(data)) result <- eval.parent(substitute(expr)) upViewport(depth) invisible(result) } getChildren.viewport <- function(x) x$children ## end functions for making the plots with lattice ## specify number of cells to fill and number of rows n <- 6 nr <- 2 nc <- ceiling(n/nr) xy <- list(fontsize=list(text=12,points=10), par.xlab.text=list(cex=1.5), par.ylab.text=list(cex=1.5), axis.text=list(cex=1.5), par.main.text=list(cex=1.5), layout.widths=list(left.padding=.1, right.padding=.1,between=0), layout.heights=list(top.padding=.1, bottom.padding=.1,between=0)) jpeg("Rastrigin2.jpg") grid.newpage() downViewport(pushLayout(nr, nc)) vpt <- current.vpTree(all=FALSE) plotat <- c(seq(10,50,by=10),1) ## something strange with Sweave/grid interaction, gen.1 is getting ## placed in wrong viewport; 'fixed' by permuting plotat above for(k in 1:n) { i <- plotat[k] with(getChildren.viewport(vpt)[[k]], print(levelplot(z, row.values=x,column.values=y, xlab=expression(x[1]), ylab=expression(x[2]), colorkey=FALSE, par.settings=xy,between = list(x = .2), col.regions=sequential_hcl(300), main=paste("Generation",i), panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(est.ras$member$storepop[[i]], pch=21,fill="black",col=1,cex=.5); panel.points(0,0,pch=21,col="white",cex=1)}), newpage = FALSE)) } dev.off() @ We note that as the dimensionality of the Rastrigin problem increases, \pkg{DEoptim} may not be able to find the global minimum in the default number of generations. Heuristics to help ensure that the global minimum is found include re-running the problem with a larger population size (value of \code{NP}), and increasing the maximum allowed number of generations. \subsection{Problems suitable for DE}\label{inex1} Differential Evolution does not require derivatives of the objective function. It is therefore useful in situations in which the objective function is stochastic, noisy, or difficult to differentiate. DE, however, may be inefficient on smooth functions, where derivative-based methods generally are most efficient. In the example below, a generalized Rosenbrock function is considered. This function is differentiable and has a single local minimum. It is often more efficient to apply methods other than DE to optimization of such functions. Functions that are smooth but have many local minima, however, may still be good candidates for optimization with DE, since alternative algorithms for local, as opposed to global, optimization may converge to a sub-optimal solution. A generalized Rosenbrock function is possible to represent in \proglang{R} as <>= options(prompt = "R> ") @ <>= genrose.f <- function(x){ n <- length(x) fval <- 1.0 + sum (100 * (x[1:(n-1)]^2 - x[2:n])^2 + (x[2:n] - 1)^2) return(fval) } @ This function has a global minimum at 1, which \pkg{DEoptim} finds for $n = 10$ with a call like: <>= n <- 10 ans <- DEoptim(fn=genrose.f, lower=rep(-5, n), upper=rep(5, n), control=list(NP=100, itermax=4000,trace=FALSE)) @ The minimum can be determined with far fewer function evalutations with a gradient-based method such as ``BFGS'' \citep{nash}, e.g., with the call <>= ans1 <- optim(par=runif(10,-5,5), fn=genrose.f, method="BFGS", control=list(maxit=4000)) @ Note further that users interested in exact reproduction of results should set the seed of their random number generator before calling \pkg{DEoptim}. DE is a randomized algorithm, and the results may vary between runs. \section{The Differential Evolution algorithm}\label{alg} We sketch the classical DE algorithm here and refer interested readers to the work of \citet{price} and \citet{Price:Storn:Lampinen:06} for further elaboration. The algorithm is an evolutionary technique which at each generation transforms a set of parameter vectors, termed the population, into another set of parameter vectors, the members of which are more likely to minimize the objective function. In order generate a new parameter vector, DE disturbs an old parameter vector with the scaled difference of two randomly selected parameter vectors. The variable $\mathit{NP}$ represents the number of parameter vectors in the population. At generation 0, $\mathit{NP}$ guesses for the optimal value of the parameter vector are made, either using random values between upper and lower bounds for each parameter or using values given by the user. Each generation involves creation of a new population from the current population members $x_{i,g}$, where $i$ indexes the vectors that make up the population and $g$ indexes generation. This is accomplished using {\sl differential mutation} of the population members. A trial mutant parameter vector $v_{i,g}$ is created by choosing three members of the population, $x_{r0,g}$, $x_{r1,g}$ and $x_{r2,g}$, at random. Then $v_{i,g}$ is generated as \begin{equation} v_{i,g} \doteq x_{r0,g} + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \label{de} \end{equation} where $F$ is a positive scale factor. Effective values of $\text{F}$ are typically less than 1. After the first mutation operation, mutation is continued until either $\text{length}(x)$ mutations have been made or $\mathit{rand} > \mathit{CR}$, where $\mathit{CR}$ is a crossover probability $\mathit{CR} \in [0,1]$, and where here and throughout $\mathit{rand}$ is used to denote a random number from $\mathcal{U}(0,1)$. The crossover probability $\mathit{CR}$ controls the fraction of the parameter values that are copied from the mutant. $\mathit{CR}$ approximates but does not exactly represent the probability that a parameter value will be inherited from the mutant, since at least one mutation always occurs. Mutation is applied in this way to each member of the population. If an element $v_j$ of the parameter vector is found to violate the bounds after mutation and crossover, it is reset, where here and throughout we use $j$ to index into a parameter vector. In the implementation of \pkg{DEoptim}, if $v_{j} > \text{upper}_j$, it is reset as $v_j \doteq \text{upper}_j - \mathit{rand} \cdot ( \text{upper}_j - \text{lower}_j)$, and if $v_{j} < \text{lower}_j$, it is reset as $v_j \doteq \text{lower}_j + \mathit{rand} \cdot ( \text{upper}_j - \text{lower}_j)$. This ensures that candidate population members found to violate the bounds are set some random amount away from them, in such a way that the bounds are guaranteed to be satisfied. Then the objective function values associated with the children $v$ are determined. If a trial vector $v_{i,g}$ has equal or lower objective function value than the vector $x_{i,g}$, $v_{i,g}$ replaces $x_{i,g}$ in the population; otherwise $x_{i,g}$ remains. The algorithm stops after some set number of generations, or after the objective function value associated with the best member has been reduced below some set threshold, or if it is unable to reduce the best member by a certain value over over set number of iterations. Variations on this theme are possible, some of which are described in the following section. Values of $\mathit{NP}$ and $\mathit{CR}$ that have been found to be most effective for a variety of problems are described in \citet[Section~2]{Price:Storn:Lampinen:06}. Reasonable default values for many problems are given in the following section. \section{Implementation}\label{imp} \pkg{DEoptim} was first published on the Comprehensive \proglang{R} Archive Network (CRAN) in 2005 by David Ardia. Early versions were written in pure \proglang{R}. Since version 2.0-0 (published to CRAN in 2009 by Katharine Mullen) the package has relied on an interface to a \proglang{C} implementation of DE, which is significantly faster on most problems as compared to the implementation in pure \proglang{R}. Since version 2.0-3 the \proglang{C} implementation dynamically allocates the memory required to store the population, removing limitations on the number of members in the population and length of the parameter vectors that may be optimized. The implementation is used by calling the \proglang{R} function \code{DEoptim}, the arguments of which are: \begin{itemize} \item \code{fn}: The objective function to be minimized. This function should have as its first argument the vector of real-valued parameters to optimize, and return a scalar real result. \item \code{lower}, \code{upper}: Vectors specifying scalar real lower and upper bounds on each parameter to be optimized, so that the $i$th element of \code{lower} and \code{upper} applies to the $i$th parameter. The implementation searches between \code{lower} and \code{upper} for the global optimum of \code{fn}. \item \code{control}: A list of control parameters, discussed below. \item \code{...}: allows the user to pass additional arguments to the function \code{fn}. \end{itemize} The \code{control} argument is a list, the following elements of which are currently interpreted: \begin{itemize} \item \code{VTR}: The value to reach. Specify the global minimum of \code{fn} if it is known, or if you wish to cease optimization after having reached a certain value. The default value is \code{-Inf}. \item \code{strategy}: This defines the Differential Evolution strategy used in the optimization procedure, described below in the terms used by \citet{Price:Storn:Lampinen:06}: \begin{itemize} \item \code{1}: DE / rand / 1 / bin (classical strategy). This strategy is the classical approach described in Section~\ref{alg}. \item \code{2}: DE / local-to-best / 1 / bin. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq \text{old}_{i,g} + \text{F} \cdot (\text{best}_{g} - \text{old}_{i,g}) + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{old}_{i,g}$ and $\text{best}_{g}$ are the $i$th member and best member, respectively, of the previous population. This strategy is currently used by default. \item \code{3}: DE / best / 1 / bin with jitter. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq \text{best}_{g} + \text{jitter} + \text{F} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{jitter}$ is defined as $0.0001 \cdot \mathit{rand} + F$. \item \code{4}: DE / rand / 1 / bin with per vector dither. In place of the classical DE mutation given in~\eqref{de}, the expression \begin{align*} v_{i,g} \doteq x_{r0,g} + \text{dither} \cdot (x_{r1,g} - x_{r2,g}) \end{align*} is used, where $\text{dither}$ is calculated as $\text{dither} \doteq F + \mathit{rand} \cdot (1 - F)$. \item \code{5}: DE / rand / 1 / bin with per generation dither. The strategy described for \code{4} is used, but $\text{dither}$ is only determined once per-generation. \item \code{6}: DE / current-to-p-best / 1. The top $\text(100*p)$ percent best solutions are used in the mutation, where $p$ is defined in $\text(0,1]$. \item any value not above: variation to DE / rand / 1 / bin: either-or algorithm. In the case that $\mathit{rand} < 0.5$, the classical strategy described for \code{1} is used. Otherwise, the expression \begin{align*} v_{i,g} \doteq x_{r0,g} + 0.5 \cdot (F + 1.0) \cdot (x_{r1,g} + x_{r2,g} - 2 \cdot x_{r0,g}) \end{align*} is used. \end{itemize} \item \code{bs}: If \code{FALSE} then every mutant will be tested against a member in the previous generation, and the best value will survive into the next generation. This is the standard trial vs. target selection described in Section~\ref{alg}. If \code{TRUE} then the old generation and \code{NP} mutants will be sorted by their associated objective function values, and the best \code{NP} vectors will proceed into the next generation (this is best-of-parent-and-child selection). The default value is \code{FALSE}. \item \code{NP}: Number of population members. The default value is \code{50}. \item \code{itermax}: The maximum iteration (population generation) allowed. The default value is \code{200}. \item \code{CR}: Crossover probability from interval [0,1]. The default value is \code{0.5}. \item \code{F}: Stepsize from interval [0,2]. The default value is \code{0.8}. \item \code{trace}: Positive integer or logical value indicating whether printing of progress occurs at each iteration. The default value is \code{TRUE}. If a positive integer is specified, printing occurs every \code{trace} iterations. \item \code{initialpop}: An initial population used as a starting population in the optimization procedure, specified as a matrix in which each row represents a population member. May be useful to speed up convergence. Defaults to \code{NULL}, so that the initial population is generated randomly within the lower and upper boundaries. \item \code{storepopfrom}: From which generation should the following intermediate populations be stored in memory. Default to \code{itermax + 1}, i.e., no intermediate population is stored. \item \code{storepopfreq}: The frequency with which populations are stored. The default value is \code{1}, i.e., every intermediate population is stored. \item \code{checkWinner}: Logical value indicating whether to re-evaluate the objective function using the winning parameter vector if this vector remains the same between generations. This may be useful for the optimization of a noisy objective function. If \code{checkWinner = TRUE} and \code{avWinner = FALSE} then the value associated with re-evaluation of the objective function is used in the next generation. Default to \code{FALSE}. \item \code{avWinner}: Logical value. If \code{checkWinner = TRUE} and \code{avWinner = TRUE} then the objective function value associated with the winning member represents the average of all evaluations of the objective function over the course of the `winning streak' of the best population member. This option may be useful for optimization of noisy objective functions, and is interpreted only if \code{checkWinner = TRUE}. The default value is \code{TRUE}. \end{itemize} The default value of \code{control} is the return value of \code{DEoptim.control()}, which is a list with the above elements and specified default values. The return value of the \code{DEoptim} function is a member of the S3 class \code{DEoptim}. Members of this class have a \code{plot} method that accepts the argument \code{plot.type}. When \code{retVal} is an object returned by \pkg{DEoptim}, calling \code{plot(retVal, plot.type = "bestmemit")} results in a plot of the parameter values that represent the lowest value of the objective function each generation. Calling \code{plot(retVal, plot.type = "bestvalit")} plots the best value of the objective function each generation. Calling \code{plot(retVal, plot.type = "storepop")} results in a plot of stored populations (which are only available if these have been saved by setting the \code{control} argument of \code{DEoptim} appropriately). A summary method for objects of S3 class \code{DEoptim} also exists, and returns the best parameter vector, the best value of the objective function, the number of generations optimization ran, and the number of times the objective function was evaluated. A note on recommended settings: We have set the default values to the methods recommended by \citet{Price:Storn:Lampinen:06} as starting points. We use \code{strategy = 2} by default; the user should consider trying as alternatives \code{strategy = 6} and \code{strategy = 1}, though the best method will be highly problem-dependent. Generally, the user should set the lower and upper bounds to exploit the full allowable numerical range, i.e., if a parameter is allowed to exhibit values in the range [-1, 1] it is typically a good idea to pick the initial values from this range instead of unnecessarily restricting diversity. Increasing the value for \code{NP} will mean greater likelihood of finding the minimum, but run-time will be longer. \pkg{DEoptim} relies on repeated evaluation of the objective function in order to move the population toward a global minimum. Users interested in making \pkg{DEoptim} run as fast as possible should ensure that evaluation of the objective function is as efficient as possible. Using pure \proglang{R} code, this may often be accomplished using vectorization. Writing parts of the objective function in a lower-level language like \proglang{C} or \proglang{Fortran} may also increase speed. \section*{Disclaimer} The views expressed in this vignette are the sole responsibility of the authors and do not necessarily reflect those of NIST and aeris CAPITAL AG. \bibliography{DEoptim} \end{document} DEoptim/inst/doc/DEoptim.R0000644000176200001440000001227113624410613015024 0ustar liggesusers### R code from vignette source 'DEoptim.Rnw' ################################################### ### code chunk number 1: opt ################################################### options(prompt = "R> ") ################################################### ### code chunk number 2: rast ################################################### rastrigin <- function(x) 10*length(x)+sum(x^2-10*cos(2*pi*x)) ################################################### ### code chunk number 3: figure1-code ################################################### library("colorspace") library("grid") library("lattice") jpeg("Rastrigin1.jpg") x <- y <- seq(-5,5,by=.1) z <- matrix(nrow=length(x), ncol=length(y)) for(i in 1:length(x)) { for(j in 1:length(y)) z[i,j] <- rastrigin(c(x[i],y[j])) } xx <- list(fontsize=list(text=15,points=10), par.xlab.text=list(cex=2), par.ylab.text=list(cex=2), axis.text=list(cex=2), par.main.text=list(cex=2), layout.widths=list(left.padding=.1, right.padding=.1, between=0), layout.heights=list(top.padding=.1, bottom.padding=.1, between=0) ) levelplot(z, row.values=x,column.values=y, col.regions=sequential_hcl(300), xlab=expression(x[1]), ylab=expression(x[2]), par.settings=xx, panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(0,0,pch=21,col="white",cex=2)}) dev.off() set.seed(123) ################################################### ### code chunk number 4: prelim ################################################### library("DEoptim") ################################################### ### code chunk number 5: opt ################################################### est.ras <- DEoptim(rastrigin,lower=c(-5,-5),upper=c(5,5), control=list(storepopfrom=1, trace=FALSE)) ################################################### ### code chunk number 6: figure2-code ################################################### pushLayout <- function(nr, nc, name="layout") { pushViewport(viewport(layout=grid.layout(nr, nc, just="left", widths=unit(rep(2, nc), "null")), name=name)) for (i in 1:nr) { for (j in 1:nc) { pushViewport(viewport(layout.pos.row=i, layout.pos.col=j)) upViewport() } } upViewport() } names.vpPath <- names.viewport <- function(x) x$name with.vpPath <- with.viewport <- function(data, expr, ...) { depth <- if (data$name == "ROOT") 0 else downViewport(names(data)) result <- eval.parent(substitute(expr)) upViewport(depth) invisible(result) } getChildren.viewport <- function(x) x$children ## end functions for making the plots with lattice ## specify number of cells to fill and number of rows n <- 6 nr <- 2 nc <- ceiling(n/nr) xy <- list(fontsize=list(text=12,points=10), par.xlab.text=list(cex=1.5), par.ylab.text=list(cex=1.5), axis.text=list(cex=1.5), par.main.text=list(cex=1.5), layout.widths=list(left.padding=.1, right.padding=.1,between=0), layout.heights=list(top.padding=.1, bottom.padding=.1,between=0)) jpeg("Rastrigin2.jpg") grid.newpage() downViewport(pushLayout(nr, nc)) vpt <- current.vpTree(all=FALSE) plotat <- c(seq(10,50,by=10),1) ## something strange with Sweave/grid interaction, gen.1 is getting ## placed in wrong viewport; 'fixed' by permuting plotat above for(k in 1:n) { i <- plotat[k] with(getChildren.viewport(vpt)[[k]], print(levelplot(z, row.values=x,column.values=y, xlab=expression(x[1]), ylab=expression(x[2]), colorkey=FALSE, par.settings=xy,between = list(x = .2), col.regions=sequential_hcl(300), main=paste("Generation",i), panel=function(z,row.values,column.values,...){ panel.levelplot(z,row.values,column.values,...); panel.points(est.ras$member$storepop[[i]], pch=21,fill="black",col=1,cex=.5); panel.points(0,0,pch=21,col="white",cex=1)}), newpage = FALSE)) } dev.off() ################################################### ### code chunk number 7: opt ################################################### options(prompt = "R> ") ################################################### ### code chunk number 8: ban ################################################### genrose.f <- function(x){ n <- length(x) fval <- 1.0 + sum (100 * (x[1:(n-1)]^2 - x[2:n])^2 + (x[2:n] - 1)^2) return(fval) } ################################################### ### code chunk number 9: ban1 ################################################### n <- 10 ans <- DEoptim(fn=genrose.f, lower=rep(-5, n), upper=rep(5, n), control=list(NP=100, itermax=4000,trace=FALSE)) ################################################### ### code chunk number 10: ban2 ################################################### ans1 <- optim(par=runif(10,-5,5), fn=genrose.f, method="BFGS", control=list(maxit=4000)) DEoptim/inst/doc/DEoptim.pdf0000644000176200001440000113627713624410613015412 0ustar liggesusers%PDF-1.5 % 55 0 obj << /Length 3619 /Filter /FlateDecode >> stream xڝZ[w6~#}N$H}s[7t}i@KFUQ.(ٓ$0$Jo~,T 3_LlzReZVO_ur \~+J zj:J:j /c´U]>^Y̮s|.9<_{=ͫ"Y@c$o\=`5?4woGtE?D&B6La|\o=$c8n wn 2,laJ7g8 @{?G1 KDNk-R%栧44;|!y|͛m\gUvlf:M" b?ߊ?WnI#5Nww~l"<<^Ka}],.Uv:י%Cd i4-ȬRUU1wH,}Ih$+}wI9YҺNy.+tt'Ne*zm&\j=GդVu4VE]M* <}IМf˩0Zd4Er 6cI`Y&:X8IfћfaAǙ㗰$$ V&U*+{3Yuт?>]etKXPq 4k{B!fɊý8 o:%*œ6 N:H&6 6T6PS2ZHP:K +N %+KOnY89U-ƍ zec'|lB%6C( X`X6qԥ[irdByu]2+ P⾰WY uU\:5'o]l0>6~s,oPxy\͜ק$ɓCJՋkCa>ljhB@_ n% e,m5&πPVUB2Kc"u#J vSr)Hn6xcR{q43eDxN)y-#P瘗_3[zIp|Y1٣{:4٣AT!ƞv=tQVFBxɣ+tх_?$EW*ۻX ^ImˆnƔK0%W#U&vSv͠h-,zԅIlI%(>RBUM㦄op`݅ _2^nilZ@!K6- WȤHrhh`r&s I餔YܢƬctXpza=bV/vr1)=f0'[Chl\vW%E1njo⤗=-YθG3TN^quK>Oa2D&}^2`fSmpwhb()r;JŠ`fMiuE8xx'Mß\z|ݡz%юZνXu \Xas"]a*==9: U8:*uhê2Z YH|U.1|'~[^]L0)b n nO~KɁØv}ـ-c)b 3'4!8V\fzK8İb..9Ag,UxDqp%N Os $ aO兢I}ևS7p>#\>v `=Ǖ 'H0ʊ!|D('hd"HЊ1RK Fb+mIt'랅R">|>!^E\ڐm]/1Zl~Q=K6.(7Q2B YK0>S=oIA\/qAFSUV)c(GC`C$ ย їcJy<-'HIAlx H ~Χ +GHx =b ~bӡVʳ0Mຘ?Եr3~` }TjPb Q|8ՁvjvHq%syޕm6n u1Hep*L*_q#,bbB/)sƧl㈙֕ʫ[x3GP7˒[w~o: ƶdt[\{j!UFJN32}?\#z9>#\7ҳ$ML+['yAFɈ3+Rf^߸Fb(Y?c$R1OsMJ@ 6],x%x'hUJѩ?Z D5b2d*Xl{ƐǿA" endstream endobj 89 0 obj << /Length 3589 /Filter /FlateDecode >> stream xڽZY#~_!%Xk'`=@ УiidZ/*dـ1XWŖH;,'o_LNq/o=.&TE%SLn'?NnUĝV%A}Qo ~nf֚=}3獮F_nb.;׾k'LH?{vp7ذ[ ~cE֟jd.K3-=Rg!1s^I{l_9.=q5j'Y@c騪,<rYMX`!d'fi7.Owy{7En!Ѭ<񊨥lݜ^9휠 hL{{&fʈ6n+-+j\fHwDUA ][/݁)fڡ@^8.J=j߂L~_1hU3IakG7ΖtkQˤcU 詸(Mh`E?B^$[MU2%CHUTu##֩CKZKj4BL7Vf/QeY8mPsZsu}(uL`j[ы,~/H?j;ɫm5)(Aҹ7_[1&ؓfzf;+ #zB{6-["Yi_8q# tM^=烷H[ny[a e>ߟf]!Eiˑ*1"..QW:/i$7 #;N45EiIWMgGr۱N*!Un"k((5˼Ir(t !5yuHoF_|VSiGTǒ9XF93rc8pd-WGE6F] e*-o;G\%gXm :΍8cu%dF8zfFDᾂޟ/36Q:~%m t,qoNn[N`ӲRd+,L_VP "us^ZC]|]dM ړm[laɈPe(es2mWi3gB gGD|\Ŏ'Gkmyޭ2].[ ;Bl hD820aylm((8PϲR!ȦF׍tpπƀg뉏4Gt0GJGe[UX&Z \>АFEL: Pz$h/`T^5/*/$jM(֣u!&Ł'OWf{C^w$8xʇqMR]MDjJ6#`NU9AH=f.'X9ޣVuw}N{s22l2.L2sVTWY$EPZԐ:9njK&c?thUK245*.h$_ Ո2&$oW-MW=Gxi\P!eAt YqwJz"{cӹ;^#LF|ʾ 8>1HJ0lzQ{w Aoy8,7㴂EQ v6)ax$3D5wCIpKw~B O4b%'8;{wA=A3+{.kMJ t#?(8Ul }7K\7u%yo~NbVUS>S5\ԬǩP7ޓpKyˠq[SYj#uBK3ʃ`DJ|q!,K?&e=I} }p.3MmaqwD)`tQAop-ԣx6+?Fxv"@(C,MnIЀgq8 @؂73wSQ7KI [PaR^N4h1;YcyeCX`\!mrܙ>UBɉP`=ZM5&?h*7+Hpz)I: :2)= ] GAVPѨ+OEɜCۺDͪlc$Lefy0lM ksA z-jxT@>xAGnl"6խ\qQsͻ$u+240_Tr$)m-\Z%|9ؾXBl>ڸ~umDg+>/җѸ[ `bpB0Oj=I{~HM'3}]sӞ8]ē XC#ngrPmMu\NpZGilE֙3Zw0u>8+ѡT&KoSc/FUFU8_Vx_}qEk}%ڌek(ҟ|7$RJA{()+, փ~ܯ|uᠼ)=Ieɨߓ eߧA rPЇf*UWpX\ŕ`!a{SF 9JBxGJ3 Q) ]p3::!|  |_m|? P@>rye)c3ax|'O+).iէA(X4d{G-|CE]Μѱcc:$4C%> ykuovaKE=WS͵;rj>C+*<{ϖvStMm(hD١pۇbs8Kט0mSV;1qn޽} Iv 1ŨnSAi|c«NOp 1ğ&;OPcd$\ . k+?0n{uC|A@qv59&SjyXΜYL^+Ϻ.B"r#$~ɋ0iUpS߇Ow ~t2Lz mؾ1/Gx,ϧE4Նr[< j JӅ2=9xSX-p\T :aJjdt/7a'?GaIX6]u9eaqJcذGH<wQ֏ yبlmPa"잇l~k'GszQF/~lΤyp ]2I ]խ]}; endstream endobj 111 0 obj << /Length 2785 /Filter /FlateDecode >> stream xڭZ[۶~_GLDK;}pvf+QZ%!]ۿR;ɬIsQdw7ݼzW5ʳ&oTrMTa2$nUi{ ^]c#X oHyQh{x͘3CY=.t, IGn}Au=݉W 4U @ $E*)D%QU:$7YaSAJSEӇ{Gn ]W*ؗTYMkŷ}'L#V6U]yDQrdGpaOR۬O3VbtpLwI\B#GF#NR%(@ލb+K*+AxkV[̱PEY^!W4S0vG%W\jp;"z\IBDleL1YӑG6\jjI{REtbs5[pYxYI` vyX8O.t0aCہKu-ulbtM[Wؙ|KȃTk; .*2X 崈Ń&)X.qRZ#&ƴ2“J8+ $8] VTE鄼Xbjҟp9KQ^e&~0x|t =QHD' WPbz*3s>YLZW%S3X ɂ$Z8?9tN;ծkZضNF'}E}ˆ;.iJ?EV!2q\XBEfKԧ *@Je%t/éI@2c(3cFW#=_: ˀZWnMtʸP܇vZ ,r.ѐ29:(х%DĶeit02Uq4qa`7wgc0%~8a[cl!Iq*9+7̰qUC{O7+ endstream endobj 83 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /Length 31159 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (N5]g]|IXezkP &HY-#w?s?͗#C~l: +{T\6_G#ڧzzԽԡӭY x)%sll8$}E82?(GOe=ߛ/G?s?͗#C~l: +-5}?j?0M\oPE/,nKHѪ3"sl@pW;X77;YY_GvC~,;*+ҥleias^}̗1@^9 A4=$n]QEQEQEQEQEQE{C,Ek]s?+Z2b@$P 3Q~3]bG#ySBll/REu+HȪQBl.uVmWi$^t4&ێ6V]Ew_n?ঝN~ʿ\5w g)F}AІ4XKcƼaZ.сjE.;éX[aƘu}0Fu%x0kx9$qPr=Yu]9j~/ӿqcחZBAjtpi:)ucm_M_4$Nkoawg6 g WNoj~/ҝOO&יZBՙWzִ8:>5-jVg:y G4XQVVqs׆}mWiVWj2yU.lGQ5E7k'_O]_Mo5 7`Ӳru=HV#_[M_Z5xx. uj6ۯԃQ=/-_&2" 1rPR;éX[aƚum4u-?p60qYB7%E>=ᑊ͇addCY=3vA,ԀI [Ҷ<%7~ŶvF]dlpq=`VW/"7N&Y@HBd5x~ ?^&+D4u@"RYDsec99ȠL((([7Y uE-d@q#=O߉/<]M7\lz(@Es?+ZA\9 Vv3g8m0 k;l.[&?N8<; JC4`8* W@N ;Jh͑o89==ԹϭZW!Wօ*$8N>$ci8ĦvvOJ͸+3֮5{9#ͻ@Y2xadfFq~5qz*&#ŵR3qZbvyw#@9C`9=E7yv=i#rWS;k*ՇɧrdnzWMh1gkq]dwX[JAD#_A\ma]7Kaa\ߎ[zC]%s~9n? Y IESIui6i}问Bo6dg,l,8- ;!1.I' 8$ƹ{(z_mvPC}q_^"KrZI@S.'(wS]:_ZqFm//uE;*ˀњB,Ė*}FLԵWEK'.p1ǃ }[i/6}妚}ٸ>PF <W$ h>ݦ !d>o}@;TĿ74A\nw @mt]*-*FIw$y<܀Үg S[eŝ֥j hf ۏ;s5<)/wXy]Jf2{$g8=I$((n.%"BI#TP2I'5%gg߇='~i-vWv23vaxkiy=$Ml#/)E#FB|CIYz[K]7ErA1Ycd'{MF7:,gK?}l҇/N=Smt+1_Io,'1HzyCXPm<c4+ܻlǡY2A]ź-50hl <3 Ƴ,vzێ ˓ёy#)'$33޴/mAS}jv\cޜZKVm==}ԓ^L`gO$^1ֱm\"I'pֽMUpOW N?:MMWLO̶wS݄q¨%աzAo\6q8iAlmdH90S<WgJȾS ^OzBgCb^]f޼aMؗ#>ՙ;F`><`Sd@;{ҳ1qz֥;yֳJHT $V]́؁ ۣ+5ulbA^>)6 pmÌs5Y^GSWC y}  Esr0qYd1Q]GC4LNWv4BήE` r:~pvZPqYu?(U>cY2A^ ji ;v uM ֬{V r:zZGmbUŗo5X>/s] סivfް!E*@/WMk_AXx ,Zy"KOh֍QQZXFd֓_JSt2ڬLy)9L9[K8{9p$B*85C{mk{*?os߈b҄k4qHq+?|;OLyWI_[Svj㴈!|99w'xu?:ͳBt3;d'](Q>LpI77 xSYc3Z(’:J]s72E,n_d FHl7p{{=S1W9# 8rowlYm=?u.OSTgQN}1S:G)||VDhw`2;t!qZKq79~^*hKvꀇf:tQgjGN}͸e9qKC̎K1=yY ܑVբy>KD=Gr˩-O*n&F=? m¨+U$?ڰYdB61b{S22MaS?kR:6OCڱoQ~Sv>sJʼRON}u5)H% +U V掟o[[<:ʸFOtiʺ1 sۥen7hzRF\Ã޷]99M\ְyd`cI4vgB}TJ? =[.==0AyǽX>~lY0ޭK:Vzc67zv1X?W ,iwhۥHP㢦A'_A\ma]7Ka y"KOkg+Y h77ާlH(zomvizvO¯mw5)7CGs$_rjrF˨H$ AFzZqMvoR/ai Bl;S sH=[^0񷊯_1IWWYeQUWc~_-q#_zo,.໵UMA vPq]H_A5[ cW8oϥ -*r;WE,=N98uq Wy Tg򪗓OU\; `V1gy`{ Բ'o'a\A!=k^^kYЈS3dOuB!U^v{VT)֗!r{{V^}gym>[\ g>27..v#<ڲ3*+gA#0 E*t&\CS86m,20 t)2;yOj 2szVmV2{U8.1',1=vPqޭ #urkAJT-2Ygb8L>+%,=+4ѲAe@v+n;c==F I'5AnK vI+!I8>5+:C]5s?8?yhW$jQxLm.ur(_6אs1=Ig_G;c*/'bOZ O{mkHg;=57wWZV?1@a[GuMfY5[Io /Mo"󙌡!@xɐ2fx_xPd}D tIw4q;NOq%{^!|I _^IjHT*22I .?so.HF!"MqfToj ( ( }oi7yv<>vXrpV*ì]H^o#F@`Igo9\$Z7 F@'ԥ'+M0HnA$MFeX&[H$:`Xq$cvL^2;!Sp02I?u#?jgo<+n~Ϯt{C,Ek]s?+Z7ho MyV0$u5Ηv:~\1*H2dj[PH9{BAǭmF|jHV+uՑr̍ZHz7*.q[n%^{fXu_rH, u8#RhmX8U[Fu$ U=*H8(*3Զ8heL+fȍ7.60ِ:`VN8^1֥Gbc;}bI<7QzWdʻ:zVE.O:՝:J'= +`R_4| (P"2S{Ú~bp^=+"T_4QE=>ՓCԏZގٝrAPƌ0BozB\Vu'I*x=OqU,+EªŠ\rTEmK{ZKr_Zh uZds_&:%-oExA۞`?׬_P3e ;o [ t@v++"]ErQoҸi?󤢺zOu[(LEuKmbp DZF㼰L $0? 4(v? ѶuS-lx?'>!Ե &IqIdWv0g<)|L}ޛiY\&&e*C d 3=M:e ՜[_UmQ1o? Mg׋u68 (.姸,2H…8gq=Cq}xķ^u֧ya~uF~86ipi oմHok=Ckx.Iq4"eiB#Hy= ^/7xT3e0.Y˹bOU7^ǦHQEqzi^ ].ZM,9/.p dB0(}Ė~dsL-0[QEQ\>"xW:vK"*}Y2QHSӭ-nI}nFdր,W?x±t{C,Ek@ݣ_/5ևCw麙ƓxOמ̄G8][Qdrvγ wsT猡mzW{ojKdc5O8:jݼ1v!+zҺ7?(Ǽ2~n㷵*rwFy>-lN*7 `VEA1ZTIN+;ЏJMՃuq'{S)! ~5g* Z?(3'pI;o+1,O7QWCq9ۭeiA1[BR +{Z-9Shfx ~i+݉3;$GqV?7N={[K+Y(p1U/lO=+^x<NTՌd[J5ߘ["6T 2t- e ;o [ tXW- }/?k"sMn?/_CPQ]3.xyCxү?mz-y*FפW-O9=oᗂCqG>v4,\T$g-捡~ӒHpvB@s,rN95UoqJMˑ~6:0<~%_qƻu<R9m'8%32qֆ#Z-vRX,z xtD򿵵[;>_-q#7zwp]ɝA G@+5Ϳ<9>oyʭ!+T輷 錃5._ \Ouk:u|Zۂ f9-9K׊bM3Eyƃkrַs(tɹPll02IEþ5oizݮ c,ml.X acoiqv$0vdpV(wSy>wm%m߱ m3g+Ŗ7u 8˫>Sp`'GZ%sjywzNơݷ $6xm$6F٫\[ϹE8Ww\!9>jP|+daq5b\=6ȣrCE f(W--e$d ;Dgc+Zk]_LYKg>Sq?,i sglyw%^玝(kY;t=@[H^Qkt^ ZA5䶰6=]繵d՝ytO^vk>yckݰrxV*w?gnr'=*5$B'mק Alr?ڶ܎1'}*i%rlNwֶ.`AoqnZ@_QV&7wv_~fr r[ڷo/kSrrH`/'9麰R2AQ["ؘY>(qezbGP|7+U5S9^CcvG^m7_۾?άMyMȬ\Ɗ"t9[&$m+o Kf Zm'c€2rN7cU_ij?eԋ\F2X@{ll`4ע;a &T#vkNZ~˙gysۡb$F*ĂAQpO^Fh<7gn'=k*y^Vp4wkk ;~bVw]lgܚGwt{ŽIGNkm)ƻIAl2Sьr20)O աzUOo6PJqxY}.by2EH6k+C.jv[m5RV6B;†$pyFXYyWZ yN7[1+ 8>|3Ʃ&j/&#H,f9c/dm7wywj(jABV2-3( zMvceqw%%̙3*\䓒FzM\(8>]wT7F'kv >bq$x>z=LK'~ Ґlg 0:2I=%W?x±t{C,Ek@Γz=`מۨ Ezvo!MyutQO-ͨ]T-BI?YycVu:֮)LxysV`fҙdd{ nN1䝈Fۏ(N{'*{= c^O#})A;CfC{k@ s])2[S;Ң)k)<X7V@'UuxucXW;SgxQjErrOaY#IUCr:SNP-UeEZ7#K/+v5KjEg՛eX$}9cV%Q~FjW)ZOe< $#`78܌ 3wE,a Ek{v83˻sG֝i| ^b/[+F&^z[cA5up:V0La'U[۫ z-k{=A :uT6% dzʒ W'Q5%҇Va҂;Vp.k}m-Xvwt=jzSN"mMU 3*K`܃Gt&ACU#urXhK@t=hKr6G_JIܴgn͓+4&z@3o3J;{&㢢vW^2t- e ;o [ tXW)DJᮮ?' ^\4hkѳ15<'%W6ڽ:om1]jX/w@ZΡMCd 7 d{QEf3}O xP5+Yi<#I2y@g`7rN7< KޱZ@`TČ@ G=U(((((sşHkgc+ZuA5V󹱑޽W]-?^aob>^]xv]Ȗ嘝γoLI%vC;ݐX}H\BI\NW'Y\U1jG5~zƺ%8؄ A͚ýwQں,Gza^;JT9&`C<`[cҶdl/GZd:pG#Z~s/N*N$3"izGxgqjtwp#WJq*O"vж/=*+ 8 VX MIv9-FGXcwY!iQFuk!tJc3ԏ)Kb|SKƧӀQ򞇱zwsYJq4I$?zu};օޘs}izj>utsǔ˕ܽ9`jOGj-4c#'֨^򞣱x<ƍ;;'li9; i328t1S?1$OֶR6"1wIa3b#9:9x'5{OzҰ8IV9q''WKjRgC5~S#>N"fǔR=+Y3mdw]\~K#~^6<ӜG$Ȭ=l;ydsgTQ{Z#n_CYԚQL%|ckQJ\ 9Z/,QMc֝cco[%r9g-u{΃׬_0m<+t٢/c"IXpZ~2t- e ;o [ th|J"ҸkKWN;8J(3SPwm+=&[K22]\ ͷ2w<ϬXqAts8&2q* f2o|g,={_x0@%s1*ceR#a |ı9nG6Z<;}kw`2)M98VQVԭ5Mo:\qr0ޏ4r?#[vQv5u ęzǵSinVivܸz^[9!@TF@lx ZּU_ӤB & EbQz%Z˽KA8~P$#}ݤ᫤qꗾ(O'=ic+| WS#<1H ( (9R vwXԶRw?sT coo/Yݜn>?xt²K υux4 $-Lrla)B 9Oƞ<4r x?KY 4Fa,m |e^~)(|6qI8䌖#p|kg2G/uz5tiN܏T ƽ3Oo_sg;qwhjzumfMٝdH167s1 ym55.p6vǐNu{C,Ek@z΋~xt5꺐ݥݏX\㦸;{e ۨ+E%VNzz;]}뤎\U;Qv\jj&&[g7;NH9j.t#hhi9mh7gd tJ6;þ%;#ѭp1Mݪ?ڦK0h!O5~_ַ-"}wKGV͵ vZԨ(¼vCrtcdpHvv,՘jtQ1l kg=;TcŚGiTOzKy<+k5,8]qԎO,/<瞵b{wh֭:Z(NZyjFSܑN}|t5uhyϽ:7Q5Hlw9=+L`^Z'Q>Մjj[m.!ޭ}gZvVX m:Ux_c|zƻ;#k5go8ZǞ|ùF=ҲTD-]gp<=+u\=ڢUa'}JchT#'{$gޤw{!oq4Tec4KUjc8vK9k'S̤| :mc'j6&cv54B`SW%`@[Q`v\a*K Oz1>"9mAlcݮMtA tTWQo M$,aK!7p## PkCMү,n[jZ*"Tyq!O1O_A\Ņr<r}.*" }YTUQǚ}֏Wds<'.1*FWWx;SJ3Gveki-gͷéZijy=:uS^=Cq}xķ^u֧ya~uF~86ipi oմHok=Ch((((+kQxV8ѯ 3n^WE(2dΞ9W`[CX_JDg'Uj+<˽=jF3 34I>zV2x[ʞt//s+eʖi[)+_';{RN4Ky[ 8B7[Ҷ'q\3NeXξioejšiҟ7oOmX/դLe<'eN<TO+oXIw*t-^)ݶsO5~oҺ+9_#{{SNŒ8lsYyO1m$sc3*aLm=ˁk vz)_{{JQr3QRLs.8Ue޼FV<}*3~O#O@HJ 0YU8=k Rc<`:i``W$^ :e?^],)<+ӴѲC2e ;o [ t@v+?7_eQWa\o?'ןgQUCB{_EQS_J Ѷ5 ?䡯m{EyjtC<^kukwdL}8hb?ըG4MN \[bǖ$I<I|<{'n?lxo߅|#_d# ?%(H$a؎?*^.\G+MZPHǒbOn?*"E",L rXdׁ1x>}!H\ɒĵqSujH<ַ3ҫ\ƁIʞ==z:ȴsň+AS6=ռ :vSBR*5zz4i=Gq](YWJ*u`d|lAT[rV eyUΠ1·+zһK]x=w#sNF$cYX2#&ۻQS@Ij#Ǯ(Gq?VjY1xnjHc?1Z]q#!G=jĶg<V.:bx!SVNV8g`g=i6$n6r~TT]tuhHXϖ8?g'w ? v򎣷cqb>Ա?/{ax_;8#NݫYv%D% 8V5݃;<һI"F/N8VPsVG#hv_QP¨`}+rR19Fc]ZCV4D@q]!Rр{Vc]^(TZuR>Sz~U>Q޵%#<³Gqs7eZ̉ t0UcVLr}*G`=j9VѡPrOz"gX9cLt5:+v6?K*@/WMk_AXS}y_6UvU|U8w|}.,*|HOcȨhEٜ;PW?6޽KtOc q\tbM?޷xsGVծ>c2]w0Q‚O$Xk9<[h_i*pyu/5Jr\i1$ (TF[,x<8#< $_ K\凉m}Pڷ?Mq)7/_Z5;z<qyrdݵ9r+XC Y7gwLcls y╿ 701G׎_iGFh>aױSUpמ@f,KdZ1ބH_t?8\F{ݐ퓎WnOy/) h0@nJf8 b^]'1{ HGN*l+F?ޭk{*Gwf%q[ss%2qzĚ9*v%p5t$w0##US 3^9kcc`oqZIB݅)\#Q⬸O/fGV%J=xwV]bi:`Im+'rg]ؿCךu޸l#U fԑxfh#3[Rocr1uV[?ި FªdQW*cv;X^w3<3yw%^玝+3J:ko^^&3ty$:DuxI熿kxc_hlڼ^fݲ+܌n: Lwm"v߱N3&+k^H 7S-pPYBmn'Aa#j_yO#JТ 䂹Td>4*~פv-UY˸rH!,9 v<x|ķjpn/Z11cs:{`((zuͅ~eO ɸzU(I|<{'n?W)X=K{u{nWm#7O`3^E{C,Ek]s?+Zݧ܏X~mq'ֻ,m'-&9!Zuk#8Ǩo΢&<ֿ9U{ ~nǨ&u2jŻ>69]թ'=+wN f]>$${*P2"}iAdr=ECJӂEװ3x#c\Xr'?CǸ;jɉ;B3h;6Ԛrw~bz]s"gzIܦa,w8v>sqr)|+BDӵi9 n =QzVHO=6Չe4epĊݷ=}ERpFkn9N(Md0;qYXzߞEױǕ|9&6 OQZb'j+G}+D854dٌnYm~qׯKR0:#=ROkk'8Ǩ2A֟ jVoαmܣK\{lF>zDH뻯jm9M+l5W?/WMkWkI]?*$QS]? [ EWi|! ѰWׄ|! ѰW㿏/wQQ^&Z<;}kw`2)M98VQVԭ5Mo:nχFº,rƮUQg$!^q+#yG>/Im_j#Z(n,ky $}kYs]_je"7*}EteN[f6sЎsֽ =Z7G1l5bu:?8''><;'ݵotj%R,i3ݓXe<}k} Mq}Ƙ<;kiYPKcެ1tΗfG0k7%qϦk9ӭIV:&oƱD %$ր/WMk_AP0e%?3w|`_[_)ƽIϞ'S4}Oj]Sj~:ung]2b^էRl9VD >K[g|BbF Y}x^ KJ F_Af*ؙ[GmMZ77 SXV(ʂz 1]pC3hx_|vH\ڪ2{;W/Xk_ y{ll2E Tc 9xG4fԮ#?-;$U$($ #pQ^_xE+ jxU*ewo%0]7dF {Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@p< 77uu+3qؒ2I]~2gwo(zmݍ 299?xwPG]ώ}?۾y }l p㞝E{WkH$y0^- +ZEPEP-om[FE|~2nڡG  $xq,lߛ8n@sl6x -[򿵴'>_]qgP5Rx~XO]^МI' x-h%@WR2#5'T][A VG  HB(q((/ǟ[2OekۦV8^p1>kmT*pO,[z~:-̗Z_x5V AcϤjZNۭ_@ceP# 0#8$gѦ:nn^ic9vK` a@((+m⻏|@uXw@(Ys\UfU(Ǣ$Ǿ;//?]IOe 8€1;|;Ѽj>o.PA#s${+V+ hH"VF  kr ( (8?Ƿ4G`c$[Cʳ@Ђy/">; HQ _g/x9pVwG- %Yȿu=dE[]}8&~k>tX((((((((((((((((((((+_k5J;'rDmAPrn^XϱY ƺrVo21I!f%X~*H.k#<-_Gih&1TǩO@kR?j?5ϲW7Dn .va#t*q}L KXi2ǁ@huoż9#`FApA椠(((((((((((((((((((((((((((FiK诵+&k /$mc#L|db>Ey>T/#i}ieZĄƨ<ɛ*I$<Ѯx{=PCǚbQ^\O xa$]y[v!QHSڀ,xI熿k ֛6]#Kh{+(mh*Y)# dz Ԡ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 117 0 obj << /Length 1378 /Filter /FlateDecode >> stream xڝWKoFWH5\HHO[Dɂ%R%%Ny-h(#l>m1IU\M M(`>vu]DZ(sA4S~>གྷp3Y,Mx8sjҰXMM>N$,%oa[E鸄o 9b\xn{!B'Jt tM<LEF`u=8Q1QxCڲǃ n'93'w 8NQ w'vm c\~( LE &f睠i\ "[^ޖwl=!q!+8üClfk!j%4DKb@(=a|GY 7fC Xuٗ q>$~cj'E6>y!L54MgTbw5Y! 0#J8F7d,.D~&L;Lʕ0a <ָbAvIkX4ڡE3G]()zAqbSɉ-G"5M wgH.RA fVd(61;uWu=hH(1ڍ@i[gOSAi?sTeG+aB?z=_Rk+z@M*x{cp`udyq:_:)O‚\4Z[r V aڊtG*-mW_aC 2 Wf;?)cW Hx`rt1nkW-u h3j<%n HR^˞51FׄKq$8r6@ha#ED!t,:e{/ߜ_]A[6=vc]ޑ>U*Kww@CJk[9֯&~0s4&YpYb:rS.% `0p# |Ț4/UF[/_}[R j+Z,S<V:TD4DM> M`EG1/8~#P n!/YC$04Cg 7JB2)u~^>tFd^z.F& WQT0䊉RvoFJu9۰zhjbj"MGIڥ/$kK7Q _ /Pzwm, endstream endobj 84 0 obj << /Type /XObject /Subtype /Image /Width 480 /Height 480 /BitsPerComponent 8 /Length 40803 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( +g4/iy]^n(䙔dQ ($dо&iψ#gӵT7jFpĕ lgyҊ(((ǸNiO OyWzĝmqJ4}_Q,5[/Ky׶\w< d_9_Zآ(/4>GfHFvrNA8d#Ph^Zm^LfV4msKE@;XuVS3Ƞ ( ( +g4/iy]^n(䙔dQ ($dо&iψ#gӵT7jFpĕ lgyҊ(((ǸNiO OyWzĝmqJ4}_Q,5[/Ky׶\w< d_9_Zآ(~fGvaRݱHB(s\:ZAi:3j.>e9PpzU\C%`oUFT(B((YM ZrkW~WA )y&e!T~' #"/FgG&Mڥ\1%pHn[h(((kZNpvKNTsF4_{j|$Ul8#<Т((c'}Gqwnzs/ڏx.,MOZ>Mcozy?h:X@b}@B ;I` zG?k6Z KPx./D6,#~c:9oŚ<|agPξPP#Q9'9Ro|?O3fwgN( 7~8xzw5-;(&gUma,,/QӮ!Ah?MS& .У?9m8e6ǚ"X c*6?^??{f5][m>Nqn{`0Sx?.5]J}oBI,n ml IH D%2G?}ZѢ5׫ M9u/<ѩEmʝzE_D=KYE+D;H rgqFҾhUljWO;5SH6ጛ6 5Rzs@W_ϏO5]JmRX_P]L$lH",);m)Ԛ=kĿ V=m/Kh%kkV`Up6aoZxrSᵷ[8<=pPC6TH1u>=oTw2ki:#_w:$O8wM+>7Mg?upo_I% {PK`7^e6ǚ"X c*6?^?7 C>~Oclٿv9rz&OxoN񆥣ZGeD-!z%%tcY>ֵ}3^%j7zu3H-Cd!a3g-QSݝB[:A@eFkԞ?^ԯu}&K{{ͱߴwn8molkVh5 !Y{`vO@aO<? {-zWq[lnv >cHWiz\sA-\3]:*Tc;z>4u=Rľ'ӧԮl/fff ccG>0:ԟjJs5oH.&y|Gm:XjO8$vxEvQ+Ծjqw;=ߌ<Dž<%x3F^ _̑I&R<B ܢ((c'}Gqwnzs/ڏx.,MOZ>Mcozy?h:X@b}@B ;I` zG?k6Z KPx./D6,#~c:9oŚ<|agPξPP#Q9'9Ro|?O3fwgN( 7~8xzw5-;(&gUma,,/QӮ!Ah?MS& .У?9m8e6ǚ"X c*6?^??{f5][m>Nqn{`0Sx?.5]J}oBI,n ml IH D%2G?}ZѢ5׫ M9u/<ѩEmʝzE_D=KYE+D;H rgqFҾhUljWO;5SH6ጛ6 5Rzs@W_ϏO5]JmRX_P]L$lH",);m)Ԛ=kĿ ??B>~i7dxlW;O \j~ $.y}nvKI=(eƙrO.OXةָit,eL$v"Gۏ))2=JK}qPMk'#jPQFUfg4X_x[/:dt#<:dt{)O}fU0I;Amz Y2)5IhKqxcku?ّBF<#᭭6?Q\m/qzI?ntسoz' *E-CC: ( ( ( +'#ͫV𪼼z"p"I.i::΍c[w Fp}M\ ׆㷸9SHPo!x 1YSx_h>G`c~)p: _\jT]IH  ԱUG9+d0dxU hߎّٱ\<'}q7C̺5,p8$ŗgu9<]>h_h;]cbZTYO}2dx*-ƟA5\YBNr]E}U{gkLbHY|!l\ҴHxn=>MW&q-gz|ȧOL&-h#T-kgxc~:fGfsƧO2OghԱdҏ_\i /t}ukKRf__q=I>Gl/|-⟲s#ԫķ~ֲyr6e ;AIun9Va9}3E!esGOJ"1GG\o-5_C#w@9"==3\t&6SN|?$c>c \.zxK&M9/<R43(((c\,<-66yiM^ʰ{?vP`=C>r_>NXPmܧ{|aoۿ+ ۤQڳDZ("lXݜ 4/G}/;Ͻ}uր9[x=>ͯ]*{QL'oq3Oj[3^\3~&e ;o [ a_MƠLfy1O֔F?CttsQ:L.S:I yȯ>l G3.x.l|eC8;؞+¾!|]})Bpnm=[.ަGcNԡyWxn{?ْy_/v8ݷoj|zcnZO'UZ壠*QEQEx?u˝cŗDžFf4)CVt1gG|8g_KyۧkpmRz/59-{wutR;Vh+E;M3] ϲE?`o/KoGٵOj5];|piD0v KykKf|֟ma]7Ka+ &9ҘHu'@ݞRHnj?gIEr[gI8!q5͓vts֙yѱTnmѣ8~:!ֵKϩ&F _xS^Ct|\My=*kPZm 9mq `nE\h?%ŮoH;5uc AybڔuJ̥<ⵗKoҾj|^17~\' *E-rOrQE ( (<:αc#oiV!i3e ~>]}ᯇ%kO_jFgiLLa˓ nZ$7GKq53ʢ9-\f`:D9LljȪ76hсpsg?ZΝWZԓJ GF.GQk&ռLܞ5-oҶڌ۸b"4Wߌqk7㚺1<ڱkmJ: %]fRnIZ%? j_aϵ>Odgyݎ7myڮxv/^pxVxI熿k'h(ɛ;KJ'Y4WkO G!)b$r@FZW2[;Ef9 d˴$Q!R>` S@QEP[{kz厉=8g'na~=~`uw)>|y~^ݘn1qܵީ]cD/uC)M{jTvA9,Hߝ4ntk䷍DqQPS mOĚ5g<&oc]WNjy*uU-FQ&N3'Ϗ/۳m11^7#|񽨎="* ap6FڭkقxB>o![ӊ]j$3z|NJ|e ;o [ rڕԉɞ5ɑHƏ(g~NkH6Ձiht>][G:.TR8wS&:cs\xQbpY$NW7EॗOrINFq{v^O Mn5-4RʬYB@O QVw:+Z{H{ۏ3aFdV~]ɀquGmzjC&q=8"O*DҬn,/[X8G23ЯB=Na4z&s&0 OZ \jm3}n~ٌ_^kXcwUqkkoWJޜZ>; Dr'gOyv^-N;㏽Iaēo1-jxI熿kv: (Q\>$ԭo"uL|ִq92V"M*Ta%}+e[}>^FcyK,BI#;uQExxŷ&XY}RxېFVG g[gyagǗmَ6 ]%4OGQt;׶.Oa T䌍=IFK>KxG0FqI_ismV5tct2t-mJDɂnd?ڎ$cG}]z5_Eo:TJʋ.By-*Z)qdwߩsg 豃{9t<1KfU#ϔI'~Z:| I5,;uk'Ğu k}܀&Y˜ZIAZ[Xx{EFԑgʹWB/8+~,ELwכ @uTML]t0Lɜe<29CGi;npQ9;&I5ͤfzֱi@*Fǧ֯5?9қxb$>9?-AM \M?}˵jvg߷}jO C ~$|و kSO<5`_cQE43W5YGJM<-+aa ߖ}ݓP8 ͮ> Ej3gKF +ycagYgaiy rI8Q$4XYqZAikvCb4\Np2I?X(z_#EvƷ{sqCon. CJC{q`֛6]#Kh{+(mh*Y)# dz mxÖz|_iv6"z-HC|`F M7Yqo[Iг(%@9P'O Xi}7Ț>u2B9Gq׭fjqXH7dq_1w$'w&G6iqhFYܚ·ռ3}Ԕ !|zd0{zA=q\* qx##ڸ x^[kK˘dϔ9P@R0rzb'u$7k6At<{u}AGO\ c{$#0ɻ!qqޮYzf K?4"Y$aE 'GtXVVA?Fx+{ZLJM" @r 9x}45[ETM7GӴ: QI9$I?i_>v+HN5žuren^h4(Ojiܐ3 ^hnr?ɽ)GONa|َGxVjk6k/w_nq1MᅷvAekKO<5`_W6AEVC<> t^@gi(W4𴯥~Za/vOˀ=Cx/K6-rI,Ny$iVōgd0F#E$G$cagYgaiy rI8Q$4b( uOY|Bƙ [9* ]bZl7t.i쬡$d@q+Y#~LOi#$q$z&y6XZIg=żrm&wB̠9A@<5awPj"jvsyBq^bn"i?]ƺºo\ƢfSh[QܙΟ]xzIc6+qֹ}_;fv j㌟SN8+BqXaàiqd?v^mn{ "[#Yw$@IF8qcjk ].`iK};*+ WF\n`Eu 8xV%դ4 Uۜ{ zVhpZ[(%;'=*U9TKBccwԍw*3ߕ PgJ~h\^,14g2~%iogv? iV!/ 62XA(]zžuren^h4(OjvZ])3 1ϿQ~5 -xZ;T${nZg<5aoѪmֺyjq6qcT[HghV $_ K\~#htQEd3|_ 'L V6O JXiH?r7d<-ǂkOBnY$瑂J<6ElXYqZAikvCb4\Np2I?6zevvZZǝ$ O@(G^/Q]iۻ@㒭F+<5ͣxWH6y2JD H?j1垡;Z],tȴ8^KF;G+lXGi7j:5Ťs[,gt, CA8:tV~gu ƪ&`O]L7Q*zuYV&R/! 3k+l5j)fn0 5ɑeׇ9bkh2\${ry<ӏ^4yS4H]'.mos'[~?a[D2I~O#G'z}{|'χ6%w"EGR +א nX`ݒA*ny3=+N[ -c*nMhT]º4km@elZ_e Nь积T5յі ( Ѽ=xH[ N@9w=kM3Ft+p|$I$9.UJ4n-ۓ+p*AiB|USN䁜pjGF;somƎڧ'0_#r< C|5}WϵoחS/ٷ?ÍC;Eg 2O'UZGc+!Q@r g\pm9~C/c[o3OuPɩ^?ĭCZW=K&#نpGc^k:'-ņ.+t !L}ٟ2˓u kzY&]2F,%$y$s@~$>Uzh,7# {fnu gՏxzgga *MWN Iƒ )Cu95'oJ>JVӗIb8"QIFzb-H+/s6{lg?΢NϏ1̶֥HCqeay9U/]hxq0qMztkv16F1V&0ZRKj9Ͷa s*6QGq4\Km 'uЇg$ɸMG׳ Ƽ'I"tO[ *]CQW6B>3#je'<<^IJMUԚ/c'SdϾ9?8rkZOQ3ߧ!}*.pEmJ$S[QʑWd_m'M27E{.b?KmF#٭r2;V^Ba< blb^Mj`&#۷ҥL r1Km.O1UlhN=*Imxϵb$mxp۝~o)0AܵW!Ҿk?~yjc;z洴&&OnZ'<7oH4goyZ͹񎹮:#*QE/(]soXm)om09>Q@&x k^^w$$:Q{H#V|s`N'X]}N<|I/p$pkfyOETm+1f|g,F.N1x.y 닉dytgI;Iya~4;VQvɠ7\B GU͙7GɟVՋ{nuy'r_xOkQJw}i~go݌9К&֦[=ek7,!ӿ Ҿkپyj6;:nh(QEW/{ºķZW.>(!oW8溊(E$ӼGqk#QM|7 ˴NONh].{{D 29d 8ڤ\tU& (+l52.c#fFjZJkza{o2MȲ) g=ߛ/G-&{yG'grtHv>W4 ?Ztn'񆲮v$@mHnyڀ|Zj9EWV9y쮎r͟ l*mՕYtOo iֳ]#T񆲳Cq"P΁'>֍]_TYMqRȅ8.S&墷ElunlۤN@<S=s=e~i\A em-x,-q1sҏmy. DiS: m\m6=|Z_j9/UGCKַY -+tj9DAtfxǔFBqPI熿kGOe5n4VX(PN e(Q@r+x|Kuy5Kk+=7,pY rqh.hKk-=Y,Xpq)B2nZ+p4[P!n?J鼝D n?J?s?͗#^ZV0Y܇ȍG-;\(AWDF9Fٳc<~C~l]?Zt;xakyKAeirwFOO.7MNFkWyDod G?xkV)h{T\6_ZNXv#Aeom!AP\)QEW/{ºķZW.>(!oW8溊(E$ӼGqk#QM|7 ˴NONh].{{D 29d 8ڤ\tU& (+l52.c#fFjZJkza{o2MȲ) g=ߛ/G-&{yG'grtHv>W4 ?Ztn'񆲮v$@mHnyڀ|Zj9EWV9y쮎r͟ l*mՕYtOo iֳ]#T񆲳Cq"P΁'>֍]_TYMqRȅ8.S&墷ElunlۤN@<S=s=e~i\A em-x,-q1sҏmy. DiS: m\m6=|Z_j9/UGCKַY -+tj9DAtfxǔFBqPI熿kGOe5n4VX(PN e(Q@Q@Q@W/gOx?F|Gdm;|Muz^SONHCHXTIf8{د֜אCk{ 4p6($g?#oGkᦞqAW$rG(ҵ[sK˘l|RFr<8"~K VYi6RJ+/GWgki[-^RI8rj?A/<ai7u4V[8`Kp䪑NzU\ x-h%@WR2#5OY9m^H!|˟(W'vs C h0\Ip]A8ߍ;%u*&LҥG󯶲Uv -a}oryQ$о7#T2V+q}o|5ֲy $#sq]EQEQEQEQEQ\>e/a 7}s@ηx;G{N >9!#cPK1%kb`񧍼;-:桿SʃDB0d}|$KBp>k9<[h_i*pyu "@TP0kZr^A D20ؠ8𝆃ė h .tsOZú[]gPm.4*Xd:k)%W`;1lr!mg'kuM #r0N# b_Mk'N0>=PEPEPEPEPEP?|7g]wOkꣵlQEv>,}>yu->Owkk:ɕ\xpH=ko-ıH^I$`I$櫾oipz薲4vqs,9g=4  x~EVAijSmĒ$+վY~#5|G=.Bio-/2przZ( JӾ}I͙žf3Ii:5p,[ѐ+RFA5r5n4VX(PNr((((((>w.;'fq uQڶ( W>#u478=OwP~bhiowb3`gմuKi y-h ԩ# ESttmKi +xi,U(' z EQEQEQEQEQE ×zku{8:[Q@s~+]O{KONe@8#3\Ah^%2e@jtՐZZTs1$1><`soVz rKКm@Lܞֻ(?Dҿ4x4_;of|o3{Rjl:΍}44d TFp} \):l:6c۴v*p=\((((((?#>Sg9 o-+~#~m!l3~w+tn巸9 I]H#Uwt--Oh,6J00Gcc.dRLAlZT*Oܱld]%gͦy!ռ}{o+o^ݜ';c ((((((((?#>Sg9 o-+~#~m!l3~w+tn巸9 I]H#Uwt--Oh,6J00Gcc.dRLAlZT*Oܱld]%gͦy!ռ}{o+o^ݜ';c ((((((((?#>Sg9 o-+~#~m!l3~w+tn巸9 I]H#Uwt--Oh,6J00Gcc.dRLAlZT*Oܱld]%gͦy!ռ}{o+o^ݜ';c (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((Ş4м-wyfQG2p2+/Bk> ANt}RdomYZuWF属;J( ( ( +:5-<5=^#4Sw}{}(}GTl/^yqt-~\}hb(+/_m--j;K@7,Y@=N<z@W?xZ>i7,̍{pNk_t/ཱུl vêʜEhQEQEQ\ɾT0$ c=vQEQEQEV=NJtkOZxj{͚Fh-;$hQg}_+ν['z2Q@WfsaywV3'';]I 2Q\ hj[D[326 Ǎé8gVi~!ӒHհ7Hk#*pFyEPEPE4-;\EuJw` ArVpA(? xH5Mi$?"FMx$G5@Q@Q@W/oS߈44֭me6fg*8RpJ(_nӭ>=K&#نpGcV((^$.ucwב/%j m=R\|.knvpxz,lfd!ˆb7/}zީ5d5]gLtFJvtHq2rW|o{:#M<4K8 9oZm5E=/żTmvIo|_7sٳ~>sӊH7ִh.j }wtubN]m4jQ[prn0v^'u'Rl/4{%J*3ܨs44.qyUĎ} c&MHaԞ%?3WRT4S*#R dGu&Z/u|S\VQY\8 "2Y,H?Y֙Z^[l%i+h,$j#:<嗂j>0{_ۋycg_((ۜz}sT׼q.=jCٲ6crԟN ϊ%_0\? Yx}C_<-sm~|uḀvA~(lgeq \_މYDlXG$u2rߋ5xBPXRkgyr|̥ )1 y xƷ? RQFk{Ya4H$$Hw+ qe3eK4!\3}GSCO|L&:f5pW~kD|cqp+ҼS{.sQ i_ǵ$QF|^ l|y)Ρn-卝|F2nsOSs<#ߪd?۟f͛cnP'Aop7jZ5vQLLΪےwYYH=GF5kW5_h/w\C4:~Mf?]F~rۈp=Zm5E=/żTmvIS5J[7Ͳk.$8}Jv`/_\\jޅ XٌJd~_񾵣EsPk뻧ӯVrl^yRۀ ;q O>kS4z׉~>xëgMⲎfH89 `2FF/ZOCa+M\3AdA&cPԜ,QSݝB[:A@eFkԞ뚦ukfP͑ [ntW&F{ ^ķڄ}w).NA#XWiz\sA-\3]:*Tc;z7CT,e^Z]+%Y~b[pIi^%_j:jM\&FS"+t%F?_2AmWdN/=v? j>%z!x?ZܷO}orG!*):+e:副WqW\Is^?ַ]|.}iA#͉RF.w@1#A?ѵYYx?.]t+[۴wV*mI|áp hi 3xV}ckqn wK(˽PL@۔#p29ON|FGta>p H|h%0Ĝ!>v֫iuZ0]\lLG"B ]z/}CCk77z][A*! @ 3iWfZf-ژb>bH@׈5{S{}jNS /|#r[ ϙ ` tO5F=3DO@'a\ ߾__m Ym6KbH. sgw-y+l4:mIDj'v6cr4ڏtτ~%ځ>Jƭ1mѓB +{}ON̵7#OJ~h7Ӽ-ޤ4 q"yc(i|K6gJ_.-w},IWDAݎI E'RYѬuKu`5]CpH W7!vG4zzI]M +*o mp:l}4CCJk<Pa#4z*7;F$xLng'ukM klTp@\4^k2?GI;e|#mLX%&ˑ (IRKqϪlp,I /<-2:|Vԝ2:=>}qiz$ޠ6O4%<1s#RasШ6^x🇄a7 lYGixI熿kQ@Q@Q@~yxU^^W=v8?$ 4JgF-E;@u #8>.Q\ߎ`qEK$r(eu7<G/yKß#\Ҹ5 *y$]BvXq誣[?ZZ_D|22<*} l oOUخvI]]iL@8 zQ3]ծq4/Spz*Y ')'4HE]2=5Ϧh$,_tiZ$FdSǧkDЖ4#χ?xG[[lKB/ x^~6g9O'UZtQEQEQEV?OGCWUyy\DD$\u(uTY x#Y 0Es~9 oqsA.ȡB Ab /|sSJt>4溓̑u A;cAǢ|slWaheiaP5O<1?#WbxNSny'uu3sjXp2IG/4rywV}оvNKf//dxL#Y>}tOH9U[?JkY<P$70 >ĐC~#ͥh I#H.z}c7M h;Z O:MB[xC[̎QӾ Dj)*$1 &h,KYeŠ} u? |DPVbaK(@hdcӞxO<RԌ(((w:Nj/ xͧiZSC2b0ݔ#%PquφO-;&?w)_jr[-Jv5w=v("V2wH9VwgfM ;3#Ad{N|wy_Ė$OkWJjv$2a8Z9׸?ºoXWq1Ls512.O=j/>9\dΓ*TΒqrBk+ϩ' 2 c'"Fqj;G:tC_jRM+.ަGV-3r{wTזےsJj3n܊\ ~1K\wcj[jŭ(4uKɸy'k/$7O}>?ْy_/v8ݷoj|zcnZO'UZ壠*QEQEx?u˝cŗDžFf4)CVt1gG|8g_KyۧkpmRz/59-{wutR;Vh+E;M3] ϲE?`o/KoGٵOj5];|piD0v KykKf|֟ma]7Ka+ &9ҘHu'@ݞRHnj?gIEr[gI8!q5͓vts֙yѱTnmѣ8~:!ֵKϩ&F _xS^Ct|\My=*kPZm 9mq `nE\h?%ŮoH;5uc AybڔuJ̥<ⵗKoҾj|^17~\' *E-rOrQE ( (<:αc#oiV!i3e ~>]}ᯇ%kO_1YZ_\Cw[ss",#n<&0u'@ݞx@MQ'GXU<qL28>z;Ov+=rlB{.<܎M+oԃu VoI G'Č;x+I~2s1b8ګ'rsOsh9sm~ٓsJ GF.GQk5m+'V3|NbpTY;9꼌qZnHn1q `nE\h?%ŮoH;5uc AyfڔtҭtFx,`hXԶTg 8'!]+?̓|?;{U3w<R$-QP03g{y}PIwZD&*i:"re3DNTK]JV0g}h}м!LYYv*$*G9 w((}s_otMo\<'ݴ76G ǯWcζ>'Ϗ/۳m11^7#|񽨎="* ap6FڭkقxB>o![ӊ]j$3z|NJ|e ;o [ rڕԉɞ5ɑHƏ(g~NkH6Ձiht>A-٘:ڻɑº,`=~M _x]#W+1BæH= }kN44g %pvîvgg#X1l68'+I(;wNҖÚEں\2>b9*A9NyҶ/^rVz \߭Z JLY2`!Wf_[)y# =#ӊt$΂3}n~ٌ_^kXcwUqkkoWJޜRjR; Dr'gOyv^-N;㏽Iaēo1-jxI熿kv: (Q\>$ԭo"uL|ִq92V"M*Ta%}+e[}>^FcyK,BI#;uQExxŷ&XY}RxېFVG g[gyagǗmَ6 ]%4OGQt;׶.Oa T䌍=IFK>KxG0FqI_ismV5tct2t-mJDɂnd?ڎ$cG}]z5_Eo:TJElOs]dl]0oq?_z/.ǫn՘!Ta ~>}mb3XŸ{|1m-aieo2]H|nW`e I(#w%Ӵo6 JN@S@}t81XO x[DKV[yPrbw)83pxiZbyUMXى[Hf0=ybҁߧVUŭO_^k[_(zrCH<1G ȟ{}&o&|Y>{|;3ێ>w5'!?NѾ[cO'UZF(aErfRM2UZtDfX6PamyCm- &THTrPQEa޹cxOGhnmgInAXA_,>m}O_f8یcbo7-wxX< GE j^ڨ>{PNK27h &k},F4-{Q{DTmq(&i7[Uӳڄ|B9) x#x͟I..L Dp #ima]7Ka[R7:2`3Fd쑍Qw֑dm׫R7}*Z18aգ񼛹9jXI gEFh Q(鵹Ƚޥ}޿wheԯX'+$`&(dWOt>ѯ $گk'<_/of|qݎ0I7}< $_ K\74GAEVc<> t^@gi(W4𴯥~Za/vOˀ=Cx/K6-rI,Ny$iVōgd0F#E$G$cagYgaiy rI8Q$4b( uOY|Bƙ [9* ]bZl7t.i쬡$d@q+Y#~LOi#$q$z&y6XZIg=żrm&wB̠9A@<5awPj"jvsyBq^bn"i?]ƺºo\ƢfSh[Qܙӿ%C%4b<;֑]4:kUdM/wՇt{(,&8cU}k3DEO hm3wʻXslSַMg;Fx$b25žuren^h4(Ojiܐ3 ^hnr?h<-xs r=-37Wh|Yk]y{8͛s8ێ1*o -$3Xr+Z^yZ襮 v: (/jZ?IB},4$x~\zY'!h Fw,Ibs%vWO",l,8- ;!1.I' 8$Ƌ =2;; H--c`FIŽI' QEx^ZxBu(Xnn4mݠDqVopB#fѼ+iw Oee %K"$dA\rP.V:dZ/@%Iq#p,#4ɵK9-Ki3e t: I ?OUyUӰ'ծCG(={:N+uL5@v57Z|nDwڎE(2U-1޴G1U9NOAEdX>Hkx>f3#㎧Xi>\Gx1`јj:=1].cj6#qSPG@{U|#t5X9;.k~<9zMSye%yvo<Vi]O!XԾ2@ڪYh:ZXH$ 9l$Os~h938)B1I2mܚN:24'n^4{nH4zym9&h<-xs r=-37Wh|Yk]y{8͛s8ێ1*o -$3Xr+Z^yZ襮 v: (/jZ?IB},4$x~\zY'!h Fw,Ibs%vWO",l,8- ;!1.I' 8$Ƌ =2;; H--c`FIŽI' QEx^ZxBu(Xnn4mݠDqVopB#fѼ+iw Oee %K"$dA\rP.V:dZ/@%Iq#p,#4ɵK9-Ki3e t: I ?OUyUӰ'ծCG(={:N+uL5@v57Z|nDwڎE(2U-1޴G1U9NOAEdm0h5گwᨬoE#dm)ڤz^ yӞ@Xg sGO+=㞊4DUJi4mzWL`ii^@gpg WC[5TS貵BAu馏M6O8V[tD6w:?N4{nH4zym9s)$ZGONa|َGxVjk6k/w_nq1MᅷvAekKO<5`_W5AEVC ( |. 7,r `_ǷߘgZ(RZ xU̻  (`L aF90' ,.ݧ[^}{>$ɸMG׳ Ƽ'I"tO[ *]CQW6B>3#je'<<^IJMUԚ/c'SdϾ9?8rkZOQ3ߧ!}*.pEmJ$S[QʑWd_m'M27Rmt]CGKA$`En\j4>Q^mǓڴh) k{Q(T^SӦ[1y5ԘnJ[U07I ۅ\6/c8Fq-۠&,zU֒BݜjŽH:Raj<'C|5?}>?3շwgihMkSMݲOxo ii_nϵm<]ss\u74GqET (+_MJ%j׊)W2H4H,tF0% (Ohvmyy_&6I^3;'$Y<9?n,4u GQ_۠V) cX\c\]x4$1fv1)$$'7iwҭ.tAen0ƫߛ3sn,'?]ƬxŞ;;iWwRjv`Gl^BNOO>Lɭi=Dc~TDqRNZ*Oܒ3NImF*Ga]~cܝ4hKc9u=;F4(nRTPl2Qt$r;Es-Dsb{5cNFGjGDh^Y[Tc,I9$I Ӧ[1y5ԘnJ[U07I $.O1UlhN=*Imxϵb$mxp۝~o)0AܵW!Ҿk?~yjc;z洴&&OnZ'<7oH4goyZ͹񎹮:#*QE/(]soXm)om09>Q@&x k^^w$$:Q{H#V|s`N'X]}N<|I/p$pkfyOETm+1f|g,F.N1x.y 닉dytgI;Iya~4;VQvɠ7\B G\~!K IK&*K(ds9\sxŞ;;iWwRjv`Gl^BNOPZ\}#\ ȣ-߹)ߠO]*B"8U)[N]'i-F'I銧$IW#ؿ]0^Dh,cm: XO_Z[t?j\j4>Q1|@TY;;pz#_5ܛ\l^,}%®h~O e]/nH,đ)>ҵ??s?͗#֊r]9?t@T۫+E]A ZgºFq egE 3nN2}M%ºo e5 " qn2=E5[\MݕEnt-R7Hy ]/#ڧzzkJӢ;[Y[cŸk=ץ9JZ\ҧ u"hO6lzGҴ?s?͗#^V:o5o)h,[.Ws j(' *E-j9SIaѴk.ݤh,㷍 TP3*˔QE ( ~WPBJ5u9%x„;CmjQEy$w4qj?iφcy;YvT)am@6֍]_TYMqRȅ8V)wer[6: qT6wM' qqWKC~l?ZҴ <Dm8n9|uGR֗"4HZ66͛Q/GOeՎ d[Z ,KG5~}miqjr3Zc#{!8| $_ KG#ڧzzttmKi +xi,U(' z 2QH(((+#lE6a&~Sr=hCY/hA$!v,p f$~=lW4|eT7syPh\Z /$)cHPqmg'kuM #r0N# $CkoQH8PpbY xkNQk!X_8cWr3W@[E7#OnȊFΠ+9#iZzew6w )S9A\}\%Z,)WRʊ%YILv~+䵴-Я `W$95|H~ Þ :+]-J0%lrUHڧ=G*O ռW4x䍃+sizN$fo>eϔpW+q Tc9S4.$KD`fpvf. rz׍:iuaiR#YM* ؁cPxk9<[h_i*pyu8>rkYX@ !@]8K_[zueI4/8<:A VG  HB(qg|59G t"bi|ᏘlPI\1A^7Gm߼M=?")c:XH:Pij:o1&N? ypEs'=phW?Ӵl]K*+ e'2:V_?ķ[B$1"/E\p8~-#Y_x*ohwt#Pq(U#jA<7V\[J6 dGj}:sڼCka>Q\}1QN O`-٘sp1^7xw_IF5ѕ8⺊((((({?} 386$_omn8#ր45oBv}rBGb bK1'|OxwZuKC~7 aYPbI8$w}/a}oryQ$о7#T2@A6[0D#5 `+Ş)׆&[Јe>aA%ppx =yS~;_ 4kb)#8@]\sgp:0`AA XkϽ_[NѲu,PUtY ?wg8K[Om rIQčg |9 IcЍBģ[%Tspr[qo,sA*H2AG9zϫjA f\GrF9;3U?jNAKFgfbp: p9'xߎmX-yP6Vf,2?}ܒ`9o }ON̵&GZ\Ë}Cᯇ&̍ta'ixFFV((((((>w.;'fq uQڶ( W>#u478=OwP~bhiowb3`gմuKi y-h ԩ# ESttmKi +xi,U(' z EQEQEQEQEQE ×zku{8:[Q@s~+]O{KONe@8#3\Ah^%2e@jtՐZZTs1$1><`soVz rKКm@Lܞֻ(?Dҿ4x4_;of|o3{Rjl:΍}44d TFp} \):l:6c۴v*p=\(((((O]˽I㵺ٽ`muqATv(.ŏ=imy\y2u xmm常8` $Q@$wմ.PX/]FB2pŇ Wcoj--PyYRĞ09sz+=OzG_hM6@E&NOS]i_ؚ<w7y>Xp=5m6gFEKy2u*H#8>Q@6FF;xB E 8QEQEQEQEQEQEQEWu)y~^n37 ?6y~_??ǻǕ׺O7VEJ$E `*:l4NkB`dBRF1ڀ1pFS]is]ؠ6I-@*A'nX2qH<jv>i=y nxǓcݱ΅QEQEQEQEQEQEQEQEWu)y~^n37 ?6y~_??ǻǕ׺O7VEJ$E `*:l4NkB`dBRF1ڀ1pFS]is]ؠ6I-@*A'nX2qH<jv>i=y nxǓcݱ΅QEQEQEQEQEQEQEQEWu)y~^n37 ?6y~_??ǻǕ׺O7VEJ$E `*:l4NkB`dBRF1ڀ1pFS]is]ؠ6I-@*A'nX2qH<jv>i=y nxǓcݱ΅QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE endstream endobj 127 0 obj << /Length 4047 /Filter /FlateDecode >> stream xڵ[[D~ϯSBZ]*,]( B3ۚ Mn !TJqK}v\s(/|٫gl,.^/ZUw6mO/Ek(l๾\j/TosF{?鿁bg@i5 hGZnuV?s{k{`WW_je&$yV W>z٩vYR75鿇~?\6Jy~ %k_ใ^溃)g-?F&i6ɷBhs[~)]. -\S/G{soJM1>\Zm5t/w ([$2ҷ|'$8F)j7 J]QnFI-Ҿ<1Ydd֪B7nEk9!q劤WK&2{c57n| Ņr__9i l̢>LܜGaznxC\ƚaꅭWqIf7)kRC.~t})[ԡL~¿8r/]O #A+jpP 4#Nn 14;.zc,)p@ LƝpHց?M;ڡ]b ^K7W梵M"Q9;0,x{Wo{R-aj- zl-{?;A x23 BF!KlUTBPhy>\SiGRJD/0k >d(ox˲۴tR_0鿗&0b̓AK5W[rcK–݆b6.vB96vg†M0U$#Nȇ<$ý>,ع"h{9J |lԿȔy8p$uс:R@Ẁ}*BU4VƉ G]'ׁ 6DK TCI6'u>yrIGeTQt{p4N3@rk0 Ex@}v;u{a7!!{ouXRK]ׯg7|"x;\8;XZ-Xtۖ#{IZ 0ٻѺDˡWZw&s>NA(6[m++a$xS&4_q$ExLv(5 M Ƒ_ڍ.@6sz&sC圬 1v^dɮ&,k-mHؼ!,_<>Md536MίzgL$ԍcpl QUsmipXc!p=gMx+w9_u`}ʆ%4< 1F'yv*v43W^>I w4vfUxg's9MV< U>a*pf,41U·2iE% u%4SN_vPi[t7Ī,Iw/ fjKr FLMԕE Eq)-z92sф`wB8lH$%dw6L3Bu h||ia#Sf- c;ýx3< gkQBn[BPȵZQT΅\e~'/vh7o%3/Bq&$8 X㷞nm rː7-x3bǽ 鹄`kxקn"#:~Me3.T/bB]Xq5 ScK:ULsF*8jsKJ꘶?bYLUETuݔnjƇyjLM=Oz CQwCc>e@u#zL{=r,JZ>Nޗ2DGJuU] s \=æe --l #TE 4EeeOUES5OUBb|&EK↺6!SVfFny:*N(E9`])s=OR?µ1fAeVkLCK4wB&: Lq#Z] QI&vZ!(l;Ÿّ$E ]S,UۥɎ(\x" "dm"Db^+C_FTڼuۀ|?l< qd34bK;P9Ƌ5UcgʒJŜGȬn3rt7Kk߆Ir4H3?铮. ˦: L*YB_ 7fjGS]KᬩaJQ' ʉƥA旪 ^9 -[6makIp5m5sfStJdϒ(cC{d gR4m^f;f 7 ;N.~G.^`KQmsh8ĺNݽcuaKd+L>e^s@gaUB;HljH+>rIzvNQLCrc6JnE\`\U6* G_knv8MOkw#T6>M nsM#StifuZ(ۉæ[\RBJ-Cp c區S,WJ]C3[[5^D,_X|sAu~ƞrO9lk%Cݝֿ )Tu+7N p]y:ʃ?-5khٛەڢ^Uy@- Ai3cּ@Q-l[5B˧ $MQ)5`OۘQ!3E,,Kq EDMam I+2X\kED[?!V:'< b#Ϊaa#Oz윖NVUl=8U~ƾH,H23@e6h`& c[>YigVūg| endstream endobj 140 0 obj << /Length 3647 /Filter /FlateDecode >> stream xڭr#}Te 9֕Wm\q*y#J^2G0p(q--Ww7Pֳb\;gPMֳW~v://}/t.u 0h7z-[۾X8g_.֚.L5o~ޮ;жÕzU8ьq~S!'\֫, wqeOPt%qQF %㸺޶ @nF݊GongK<ҍB1'McZBNsge0%`|~ZHgnJ],jk9 |~RlѨ@}k2tU8MVXszXNimfDY ䷕w ?HR*-Ej_wQ佟Ǹ e]*{xO=T@d7PNG5ARsT§Dz;ctcFB\$ow"p6xuP'plQ%TC EϿd8o'RYӜ3Y zPu(>6Ӂmӥ 4RYt8文wh,k n~ srWDhͿnǠ2oтzBX"kifB80: Vhj--hedgo8v'Rxu[g+ dԁѡW<Md;C͂H=죐l{p R5nQ bpVĂiA5~W |S]qIJbPVE[g1sSeEqpL@5*LlnD(dvqng{ )wH%gJٺyC[[V֑~tzŬ%M@Cj Lݩi{z~鶬VLtbɓX|O]XNW)S(vr@vP!w~!6xAe%f*#4yHMnH0QHf["wccb׏t2>ӁkY_ɝN 垿wҨEȒ1a$V[!m=cHe]Q:w<Ldn'ZFïr]C{(h[Bc r칮BgcʜᜥC4q mL^_Xrl a,}GYHJ(ML~atp $ V0ddMn=nJO 3)VYUDDvE˗ukR#1&Wu7&_Ypp5'8IM6|ɰ!:qиOC6x=.ٞhzHKlpj3%3'ҨCxsrt5ʲFQţIuA,\](EiTi!4VOZ`-Mj$ 8z-tuD?d݆j%ʗ# y/^瞧L~<Ը($ߧ;8t7?k3׃I:1c3m&: 5Cl:I.6 sm,_J6DI& hLJyJbDw`tb&duȁD[RQ wZLҾC45YפUM`FqadV(aۄ!Ro}9-<-DRMkn_+E7J!.ˊN$&wJC,/,2ϘDbcHB57 9n!XqgbO+uf["Ef Aȯ-g<>^*",F֊'NFDfN;Hw ~-ѹd1iHVE#x*Q݈Z>; |fP /x=;(^ALU8cf޳zMZ0s.F%8I~`_.6RDP#kC [dgW?u/)_RgòL,C4 *d,ň5j#vHj*MhBP_1/R^&ȥu|%WGTi,*p ł.)?(3/yC>u׭78'Cʡڤ`t/fk +ٿ2/;7/M-'UF,B"UӌI% ~IhV GC{/Pʣy2*]3"LH WI@0ğ$eM"јa|.TM@ޏ SwGZՀt5rX(ȽLh/ U˟WmrU&ٝ]lD$ɗbR"uCd.{xH,_&ΞzSp[?q7[ 4M|ڣJa(ˍCxR p<, ^XˁN 7Y+a@?xf|ϻ_Tg/eͱ(G娪V34Rfixj$ۧ3k).-/bҧHnƖ @I gय 'I&A4TåCܝ3@T;#gB!z|ğ]>'vnRgrn0ӹo_0o HG/2{ KH8th]X?y IUiFœ-Z۝bʪOhۓ"3$uR>zH wSWU|!Xe'd`avNl ('Đ/M0oۘwvʹr rqx&8U W S[W@:v/NK[$*>5O5^#%VEo?X/µ󞌇:T&Lr b=͇' -8:1S~|? endstream endobj 148 0 obj << /Length 3328 /Filter /FlateDecode >> stream xr6=_Gyj!Hdvtnu<Вl+c[]r dI:($C/]OxFJNvjtq5Ru%T7Ɗ2gjܟi;~7 &UUs!~s _sq ~hY]t3ݎo~~ŷ-- T7?=}LʶU@ڠE'Qe4NXmƈi2#6 rs[-Vi%-֢j4Q]PT0%=,py6x;ɖ). ldHzMšC\0m;!po޶h DuOo`Ŋ?n8#1@|ӫ(c,ZLL6kOͷy z(7<惸t Q^Su4EM(29R3R,%]7"fGRAV(6w?y5TK2{#)s|ZrJZuJrUHvBF[:L-?Y*h 0N#G'mGU^uG3E%Q5#'GÁr_ N!Lwu5~mŒRTI3~H`B8Vc~`$U]7ސ}+=l e{6.!`D PeLW[6ﷵUt'a@N&a>NߨlFeFLaZfp#\2Yʽlt(Tlkm00jӂ[`fL5 KR#!6va\Z,2/a27qH5M=jYSkGL C+lx |kԩi;O\#ى-g׮}~!`|6pL~8]deLxDDMABTi3`̹ˀgdNB^ V* 51Zκ5rj궋:dn-GC=Ʊo.}8UY%~9Um֫ k4XLI))QtrvC-T$J&ϱnc}m`Cq4_&;arԇ5sq Jx i%o2~A>qS^cLr +>m5QI^GxPrPlB: tB' qE vwfO k>`UH}*uݧᛣ3\e|\<,uL#>{s5ͼҷDtRkûҤxCxd3AoQ,MOPFo R/@bGL庘7942.P*$Q mMǦDtj j]&]7k+h~q&g2k!N8wRA^Cܱf:Ȑ-VR]ewx%|sw_yOÛ6 w'IBUWg*=hDj}kOH5l/5Lœa2 endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 822 /Length 2692 /Filter /FlateDecode >> stream xZms6_ɇXC'mI&.QlU|ܦ%H-˕Y b_P ^$HAJ3 B;= $,-փ̊ݵ) x#xX N ì E);H <L3kP -p(Q! Y$H4HHE "018jfbD   s^; \M3Lx bX&@@5 $-1S>`0#O"_JD`?b!w)t,dΣ$h(D(Aģ''~:@3L4l\j#V.D|Q"#&6 :F!P%XJ2^ /"y&@ B5vy2ItGl.`N!eP=KHWݑĜrl|,%fY4$=yDq$^l*|7]TJ/^t˼N`p8jvU{mty5)K!0'}sf9/Fx篳7-hHћNEhkYx47&L//..[٠KruuZa_~.ƣWobK’d>`e5A[Y?Wꬬ٩]/`p8]X74|RZ&,~T>Pkt(ћb|c(@>H1Rա%H%TRRx.NjӋr2IpòHR':A,jz0Kh3d2#'#'b #k$2(Hj{"=vcĀ'QD:J@yA@Zl(p"jda3+֣ƃS]A:zƁSzʼ8Nҙ'ԓQZ-0t==0%sNry>笈auTbh%%9A!F8f o= Lij8N=ǦfQ ,pt&Յ 7f.TÃzE/.aQVf9΋/W$Q`rg S\HI.95֚BH !]^ xs CUr^nYy p'*!\^O&'P)s"| CEQRx&?\< n}[ܠ}F_<'[1tRvPŧbBXbZbxTUTRm<`sc$lo&Kee..s CBs;D}Oq7ָ"Szƽ#`$y(%{CഒeIkT IXXOj|<>YO.Fbxb$P#< Ⱥjx{)ͭ@EjV)*|EjU!RKb4"LہCPP[>!CJN5)69Xs}x=&?#%8M{A!2EDvW稰Fhr6 Mt/`G?lHÚ " ,eUsŠ>D1w:sw=ӫ7}j*b͙%k@~Y4I>r|)N cP#%ܘg'=yB02 "Nٰ[C%Du|~] AC**t$~'¯[]uB[uF>qmH޵([|N$Rc E"Z1bq'Yk9ޯB=I(=k #]Sl#\,ogz͆"x4E,c-]mܑ軆]].n_l%h=ܻKo jmS*۴|O1#*ܖ {-Y5 #K*m5Mk<)٨9ks-2zJO2/LCtY_6YPn"˖&9ڲYStڈ t)wrǧhp8钇hqhʹ8^%B/ؙ2`/q79?(7nW2nn2]3|hŇI5E5(jAQsꤿ#7i< >%2#3K4 6 TH1j姼^å%2 Z\߰F7 2Ӂݾj }ޅ&vG}Z{ FFw \)'n Hv^؝jWC*9XVjZ9kfф7Xɬw|S-"؇3<"΀Uѻ#?rj endstream endobj 156 0 obj << /Length 3844 /Filter /FlateDecode >> stream x[Y~_5m:tbaMճWg%f[*ՑQb(_r-Z]4jQuޚrq^|5W?^᫺;捪`>&p4Fgd__:VW~*ˬGӧ22=tw;k<=8l~M,&Z-̛U1 nYtz/{+gN]5yzFʪ^]5a~}eCL!t-Cd˚QHIJ uKEN Nʩ`թ\*/UrnrSc/ϒs[ i *(DwUE;+4>{t'`=g"TG$z&b檬`u>aRRUuӗn8mNR/{Fut|RSaDp'_ īHV=  }c]}J#?b!@KkA.뭬  $cZ@0-H b4qG=x?וT~I!j5R~ ? KAT/Tm &>{T?nYeSw! 2L%;IwE7ܢ/[ 4t{yspƹ~u! 鳈%H0ࢥ*pBT_Ns?5^{-O|$2di:~ǧ +?LϞ`,EΦoɳK(+wI)Ue|?%he!| _7h˼nil6$YR42g/g2,K`' -Xa5@ f*mY0 [\\o#y\zyN3ordkƧ[@}5xԥ;g #|U25`B ٨ؾcbzd_PeU{Ae"Pw+lO*)̳ORдyUڤbH1xtdA|֔iĄ/vQm{D<5aYέ LJ|&+bl?FN}e0QY>aK B&ND^k$u$aŶQJ?*YndI`TD BO=nɡ|RdF/;888?ʙ%q$' B#sy4:ҁ/`>Ù ~f1NG9U9fm*3im#?V13 BFbdUs%+m+ȳsrq@*@8e %k w/e?PsUףX-!_PĻg9eNv5ƌUm)uI#7AB@qd%PP'f*.H,`йʡZ&2 ,ሰ6~SrhA}iW>CZ:nI$Y!uվF+BnR@<16 5 DxGD\< w6$H49#gq?)(7,;1cj6^:$nEX;=Nht6M)ÙF̧gc8lwډeAKob$iUQbj3f~A[ə5}kz-Ŀz$c\N l uEQ`;b)93HNshΟ>-72K?}/mmm\l,m>ޥZx| Ňwqm1 IkPiv"K_v\[Qvwif: ")"a{J-jřlKFJIh)n\ a[noe8&,U`qOt<y+GBE&A$w1M$Y9PنnJyKÂj[w8.ؽPk":0KYS.p|~蔷5ϱ@QQ xd(Õ*&w7x c -x]_'lކ prRʃˆA˹vH !$D;e]%93ٻo۽ھU,cwZ&0O/ <ŝxVy'dn]3 qE'q8"(ĕ/HG/iЅ*%d![u'额'OpD1~K wI0/lv`P@Kwhl5}3J]SmdB&tS:E=K& 5#x:|G F7#8&!XyQ+z hݜ6ky&tK,R@BE%wD#;)zMsd,$^\> [HԶۦOJ4 :pCxVƺ$Փ9o:< Qr4|ɸNť+߹p8Kx"?s$sW-3``ٱ!a&}xQB'|xd 'i<䐼ֆkZ/|=%_*8HϮ_L endstream endobj 165 0 obj << /Length 3132 /Filter /FlateDecode >> stream xZKs8Wt TmmɎ{]v@[TIT2׷_ A=&4@CAtpi~0ruppL ivr͡ C_0gr88 u=J6XlOP Yb9>%Hs(k_gG]p: E}X [ˆ> p:ˌ,(ȫHM@al# HSu0m%(2EHequ! CoY/fZ~! u9&-Z"zz rlj7tPJX'ÑNPiPfbOqJ&UT F\ںAG*Y74{.X9|cJ~%+ϮK "&.@-psr@'w$?g\2m*aĀ,46_81e3ђƢ d3 ڍG\6Zj-v8zSg-HʊwfEo*68 pF7uwM~{ہf)+pujB`QWjڿ97,a TJi?KбIpQLQߝ*vq0%ԗH'شC(Zmyi J@ *4uqp$-G\2ۣxuJ_-gpuGFv2i9#}CsיT>D ~GÑ`\˥m.njilQaF(;;%""W2|: {ȍ59܊ߎ4Wrxlc-Uwb6 uIv҈#jN=)6;-ډgx6iEw"$+B18{#7˃}[HcH*ɛ- adR`h2vMj^^$ NP@E#60M w(ͬ49^2o (n[6vpV`k)^cˣMhUGl_y- <$z#\2R(+;<ڒ2Ky*O37?Cr$42zx>t.!"d\L0 M+)5WݼLRvkXu=PܴKsɹ_J`1sZ_[O}w..{,SFfW0Yg羾ciD&fT[p(‹CB"JfQclh) -'ϩ-w}Q$%a=Gj|C.#1CW>Fjlx1F<6-oMm6C_ﱢ'$=PN2}BjL6$ T?DwmED*VL4L9R8S2h_P R;)i1(,Jg8)jU*c eJZQ-$&CqB@9Fπ@˹{n|a7 ٭Ov9ApNP':F]*m)K@ԋ+Cnَ9#tMvz9쀌 ;P;.ɨ"u F$V.2@$9tƑ ٬E(Hр29.("p F;tezY /.Fκ2^c>NӲSv5C9o;qB?#ȼ[_vxa=wytfqXkw:(*ԬA~啺4L 'ιioX,"ƇҶmfv(voK"/v<&ɶÏn~ZNXE,J꯺|;7 L’WJGt,n;w{.d:y:&Y\yU @>8?Zͦqg i2 S[y?Of(U[ uw.+$v"%ijg}q-iϽf'XacsĹ;2~g/5?Ɗ$O]N*YeѦ]~nO : q~Qޤ h@mЮϞs +[ޜS`՞ABoNW[- 򊆍dHմԍ\Œ=# P20!$}M0wxgtI{ՓNϞqs۾ EjB&df=rB#epJ_G`Ee~c }~.3aJ/ ]>r#tG.c*WZGvR<ЦvU(iL#Jso9[]Ô/*SVzgP>2Q*w<)NΉcU M{"UhZ ^Nѣ>CZwkX bݦ*Zݣ 25&I&`!\.6pdld.E'2W9:|#3\w.}`E d s:Ԓh}AZ}CoժC1Z{IA[S5"fRR.H|.}[O3Ry(Wn> stream xڽVKo0 W;@Je[=-mڬE"I;E*ql؀aYERǏtx4x4<8  4"ϢRD**WXyZi!4HD|施۸ҭ/I/doi| 4Isk< Bn_4|8ޭa[SYBB=Xֈڕ"-vpQ5Sj|w-WܽZNNd@Vl6 p5HL 30@W58vS4A=@mqwp4TxW}x<6v( zoN/A@~;p1=^'TԂqY*(E9,ݏC'6{4 rx4zO)#Y=D,WY.Rҭ(#"2ߥ C@0T+sͤ8+8Oo<|./]1 l`Tؙ}rxNOؿ'}C>pP=@Ȧ]qs;)wƣkh5j2@[`:ui`}bՌul+蠅:0~w.4(L)}iamཅn!v2]i 1Tw3HüEKlB|1ngTԍ/!ntqN ;bdq=F,g7tB(2o}$4}m~4d#4)U-҄2s΃`ܔZ|3owx9ufoD .PkIDT-'eaփ{ZR0Oh'zALo3˺s;!z~@BB3a݁gE0Wc|1-"6Õ'&;X۽=#'&:Zl|Lj8 endstream endobj 179 0 obj << /Length 155 /Filter /FlateDecode >> stream x313R0P0U0S01CB.cI$r9yr\`W4K)YKE!P E ?0? J!DH" @ l%r38 H.WO@.E endstream endobj 198 0 obj << /Length1 1497 /Length2 7576 /Length3 0 /Length 8576 /Filter /FlateDecode >> stream xڍT6,]"C7%݂t0 00! ]%HwH҂Jt{95k>{?^L-c*"n @N]<@ 3. ˌìuq!bsl`8u$ !1Etȃ=`u*uaC:ylaDE~d.0PAv$uW 6 ;77'1^^OOO+V shC].Pk/€`Gf<8];0zᎰ6訨4?j _ٿ  !l608#Ȼ|[ PEsrsqQUrHGG(W0(ؽyܬ 6HX;!`PBL8B@ PX:^;_uw |N;P? C|70 j Cj] `{ev'/k$+,o>YY['w -]F  l?:Kl ;ߵ"T W@A ,) U&mHf0_wuwu 7ghep@a a0/& bG+zf C@5_ n w ws-]\8wW|>Iz0tKܑ ]p~ݧW*D#;o$ v{cl;"; x~уoq@^P$"b6ZƓ{u8A;ό{K7AK.2)DNgn|0%i\^[$hL n~~ȭ+{ڌҦʜ.BOz٭U@'ׯǸcMK&󬲾P2`qbq{N ҩ&pm勽lBϵʘd`Gv*ŔOiqlȸِ/OkRq?Pk#ejd!O,tX>̥J6IUYa7:(֜;oq^(ʌ5LtKdg\.P_̠j[4a}-m*8gTs" [Y6Ң.ZRt0Y*zt`\XbjD,z`^ߴ$[U['6~Ce01lܡ쓗R >u`\wN E$`qgr⻣nԱo] M|2"AӔ2 ~h] <.i"d~ 5 gX\,w&#dFsV1 +S\}RU( ^5zcix22ljp xӾEJs' 6qv7'U-"iqW=f Ph`b|d}ymA,ZUeP4w܈s_7A/v"fG=!'kY=@󰬹[]|- x"7ěb GWڒNbH+Eus{^졢tZ*}o>JUh#쉑T i ߷XTݑN{&ADO?^ֳ!*W%HYDJ"^UUIV i]5<"!ylŕe Yȁ- u[{usTEz¨BL }ɐ&G;Wci6> pc5ɹz:?O#vbr8^S&ۭ (NZ2iyC:njW5 Id}سy _gS)uC{j%[E]>=?ى wv7?Ν,c3|6r[1BL%@|g&NJՋ^g~hYD&ofD8~.oU_$ 8\|7/Kg~IՑBy`t|iyCMbfsj򮷽@} -5;jXMn-ٲDDãb=mQ@ rqv0IDŚßevQ7O_5aiy\^Y~˅ I4 tZiv:+]&ç"Z 6m-|*]8 ?ՄER4ls.&Fcjx;TN ~g;1}KHּrXWVɭb륜mv.m\:U۬FPDoN`deQI=wҵP}HX!޳O Bt+>.Șu- gv=25CnC=!dh]).b~_JO~ 4T:\,%+RǶs{'3ZaWj ʣfJ[RE5=kqfYYHx&CRᡅC@c̾[&`jv>>.ZT™.XP8%\{7jζt#}zrs3IԠ YD:/y A\ 1nEB~CY766W1nʔ ɶ_vS=V墼O?y$(УA&j{DS]h-4 SrB) g8K[Q7 ڛ)~X3134=YܤV2+OLcwߊe3→K_[Ӿ57~Sp3]JkJ66^:opJ)Vų35JX`h ZGOqA\d*_?s.¿Y֋[d+;qރѦPPjӍt%KJ5D{`?~LڻxGػ]8ZE|\#(M8a#nB'%ժ'R{TW@l7{|Om J y&[:.ZYPLŴ'ݏwlK`X -& "?c:4fC\&A ؟9ȶ^B#b33M62QӞ?+Osx&ݼ 54oj\ rc! kc\n \S}g^e]:'~^Dn@W$ɴ^yZ<Ĵ+2eL$9LBUaGF8ܽX*n%FX ,*-yԅ긡|unzmt4_#ZNFSwi(i>JΚzX͢쒌0†ϊd: fIzSc "epG# $] b}~TDbHԮ;S&=̕~&s_[25=l 878-{ֿm贼%~L&GO1Ώ̃SpgO:|Y/bD\=U7{yn|oHgaOc?2ᕽeA_x;3zR+"dYc)`s6&^.Փ2ø!* NFݜDԜv0 cSM"T[HiM |p4EhvT}I'NaB?x0 l'ql>[U ȕM>C+Ө6)RT.ٮ#RK{$tJD:7`/@bl%oE{rC`N9d|SXLN-K2x{QG/m/dcugvZ(cF&MF4.͛: M)3C9^" U " $Wjcw8CTON[1"Q EU0EOGZX2؍쾸GͷxwEׂ~d{wEG_{R $*X̟/L32j_pqV-85sCC-iWOlJi;"(nο<%<3qXq>$*\lkVyDcgv\"iPdfCذ_iIMQ|&YH&g[aASam".n#Iv^qxƸFO[UU'} \NOsO VA}##&âOW9ך#OSU@W!}k*I+F),i-R]"57Jȕ4֏?W\w+ o}b%ّ,?6h!+P]~3Hoˆ;t0", pV&Я6^VRq&]%3Uλ`™&=)s+$ߏ(O;^i]g،&|`O9C^ͷ|]x˻h5`eQ8*6d ~vl~pu]g'*JAr41o7޺L86vZi/&T}o;kѮxdD|9 +203^0E=(@cp;~3^sDf21S|>ǹT J>].+YφҎl[ ˹0'ˇ EЊT|"xA}Y!C,ȢX"Tit5}͆󘜟 [AI@wB&m4sh1E[Jj-̿m% x;K0L| 3_wY|K%jupaCpM(tF ~NKꍍ@C<@J=X9ƷPϳ "SgبzzE{ rzC)١uPE|_3iBMUmlL97D6cԋED>~]К24V:͟7+n s,KɿVugScwJhEO,>UHrnG ry=,l/UhHMHRx?ObA6E469Gޗj}sOģaf;ҟx+`t%²NQtW.8[O d,~U4f8&3TX; yY0ylك,QDZs`@P2&y\Ľ] \ Uc1.:Į,s((i.E m&¤ ee߿IkaPcmM EXm2\2|ox$DBΎtIC H+n]եw>ő }]W1d%%c#mpOtOǯV y٤Tmxu{_ <[zvdUKDYhւi kMb$?T5ET})7 Hkͦ>?TdONt_z&Q\АY2MqM8'J6`Ms4p1dVaGۣԈ8/'iPry(R<A,Dk/\l#tl͹x#ũr8"犄r]F$-:k.6B+@! XiFa0tGuGYoʙD LC =s`V/cKYԴn +&^ڳ4LV'B[_뢾׀躎L ݤϛ28E BieЙZχ Kf;K2rͺkN\<>g/=ACeSJ>[ ༨c0jA~-ibLsaoIݓܹ`R.Dl`쥸{ A ^=k:[ͽl$ʻ9Ra_vJ\ދk!,v].JKn?G:wabEdˡ2Z8녚 < ꈜ]yUt`HOC޻Ġ,%RpAZoƏUҧd,fO7Nk6kD3uI]SKf)Y`7ċZm_"|-* [^)s.ӛ祑_pמ,`yT`jj1ѯ:X⬈¬Ro;^OϊĜȴaƉk@/-zk؝ull\2g\_q IV>ph 6?̽0yS|,+*G)'wK퐋 endstream endobj 200 0 obj << /Length1 1611 /Length2 9964 /Length3 0 /Length 11026 /Filter /FlateDecode >> stream xڍP-wE;w[`qXdq @=Gzj~;}tO顥TddNVvA;VGق! B^0i 䅨v(;8|Nvv`WA4 P;ܐiޮ6}^-|$A@' br|[؂ ^qdcd:]E n t+2-@O& t^[ K%;@SA'YO3pr߉lZXN޶N+[2+ :Y&/@G@:_Y:CXl~;18YJAN7Iۺ,^ݛ˵w{:mY:YZnݙM BA<| ea{-ogNK`gK [+}20Y:!YiܿE~߿V/ ;9xKTt j$ `appr^G hWdY9]_k@K\_[|8Gg +uwpO'::xxQ;e T/T]П+ v_2 NRba\ĵH fipe,_M o)d=e/7 tuz#\xGK*:!/!V`W7` a ؀Z6-?'? de2/%son/ոyWëX%N;(+my!+ "#׫Yܩ_ILq\} 68|*8zh `g|%),Ǯ,|J^HS! P#t -c RơruбRнh@ -J)5! {&Lփd%9>fKN >H~-Օx8# fzY |"__7,vv~Go(^jj)g'OmF jqB1M"!\)|?B8 $O*r3pHat-)IggrNVOO@1q(ƳѬ΁b;-E)&lսyt&K9]pJOe5bͦz<;3c: 隡0DiYKRylbA{!VՀ ZDeE&D-dȳRE'1S\%^X'YAb>N؁`5ݡtN;q'VR?n,uo(g0%D*>@ߍx 1F:tʢIsiS>q26:aF/ASBg ָwܮon ѾLkY |n` [6&Ѽh@0OC`?@;!jL`ѿT&âtN4IkF D!5xڷB= \'NsΊ-j煹}l`+;xK1D*& >k߻+,ƻo'D3(8̚;tKcBCѷZx;0-~4ҧ%6d ֖)V%1=T=rV9b4sWݴLi ןaG30k!f&[suF8ecɍx8=Ȋ nC.{yՓn)X*Ht,oTkjz1X3r% IS)C𖱫xP6v2M:>]ʎ)5x{ (w$ʋƆbP|sj>yR!I`׽g7 jE+C:Kw()`e)|oJLC,(SoFsQՋ A]nȏ쿲ݷ[:Ƅ=2ou#)K0g鴺=JXɑϢ|p(|6L)%b [W n2Caj<7`v>Xau Y|n^@n1N d9CK~ Mh[^-}/2{ÙTDcϾ2vBSQtk*caqBK'{U鹏opL=~RFO} `G\_$3zÆTqťPOv-bj߬ V -qmB´ܶP@ղj\ᮁFoBQu-ݴnEΌg31Uf'Y*kWyap[c&l~w3W gBKLݺ^tvLwA7?E>R=K60nCT)l^,¶EvȈar=+C YxҷAX(ВdUZdy}_%-J:;!;GKx{ ~YlD7feگڤ8FZ '&B˰7),J[9&+֋ІWohdĸ=6QW8[rB Jo #'Mu!calBqMT{Uk}չY eY2Fú3ԏ8PQK F]SbK~n-fRvѧiߪ, FS3eƳvYvH!pR_"\S\ j4(b|mLt=ޜ> |GIS̶ .DH(_ĊpO70\;_ء{ >+meuqtcarNTv2f =#Y=b#&:E,uP@S"Jz؛=x4X̗%M?@>Yw47[*ƒ0FDԦ$[:IB+yGBek1b`QŅ76yy<4lr0Ϻ FN9C5n" KToy0QiOd*%[I}Gz%es.n4%#]HWQEkԜMi1BQ@2}Ob^wd1 =DIJ88fD- Sme1o[BJ8:?I0*]0I ei͖Ȇlc:Q1Nl+A;`>RYJ'[;!  ]>i&Ә3垜0z,O jK؜UCh1Ȗ: ){hбw}*ؠ|>NUoQlNj ~w뉪r~3ҳyYe'eCHj%T)w>Yag_N{Tk藺sKnTc>хw6%=bu&0y٬dEsiS pN&5+13Ib+24&?=Dg1FR4%g8>"- *!NON1ErCG_堆Ukm!SгQY j 187K6`GxL* ଧG]!~-*K]yT#.}>wg{_T*+ɼp6 Nj.k̉xK-:yNh #ܯ-puK~.0~dfȩָ,?kmGC&0!A4wgp\_!rlkg}WLz8{}.P`hT1ى~{ӛ\[|6bA,ȕ} ť1V**ss1WxffK=(]<  Z oCtek%ȲF]&TȌєGV 0C]$ܻD#)$eJ _Yb)(Yꔞǃ%.([%ʸ*7d˘%WB:= q@]KEĆ}#[Ͷv5֝8OxAA QiM7Ij}|s_Q 2Y LO0W]'(C <7)0ZJHŬT\ḡ1>N Z@`fhhN)Ns^j"_~r8$|6I;_b6A*a{mLzݥ;Ϩ&\ <Ϭynmhjܔ]}"77wӰ$痌oej,#tYɎN,qD3nRq*A_+]xl^x`uQ%"%&T|6_b]ެހ3vs:/~wGB"]]ɒJwϖkVT|prhLp!s0jsxslaBXhH@2)Lðzp$.^ A*>ݤ|k}iq1x_` j^mUys\ۥ Ȫ U4H*! GF(f`؞2]wz45Ttn&8@R߀>+WUY7beFq2; xSqdytAĽ#%)\kʹވst`ˀuvYNfm$DKڅ9s! ۫<Ty'-TRBxuk0sEꏆ">Aϣ]Rc#F\ 놏pӚ3X5vGs0D#Ej^;9bb-ꍍ hKE^pH?#heR)ɀw}Mʊ"~m8?q#k)ܫ F DA ;"ő&&VKw :;2j] >Z&J"BqwZaRm!.nW9>yBsE[Wq@ƮL"Q8 -$hG"Ƭnt<ŷ=)x B ʆ%JHnnh#3`z@ӌ1}-x8b,,1`8F]5={:WQ;ΘC5k3ҌU#/Gqbd:eg\WYƞ׃\VM )ߊg?{/|g@&Q0J漩r^mS Ra<,>fe38USX+YsY.MV>g_8a06_p.I#@TӺa(cf1̤dnNF_BIBvyhtFh7we&&3ayk,[K*0oϾbʧ/Z1\% ̰CR#apܓŻ}1Gn:HX*d^(BF"5]*9? ~,.9Ji& B-Qݍ[)Omz=hz 3ݱOkha|-kȑ?`>u,]EW͆诟7\Eko&6~D%Wŗ @8QQDڟm'1ᐍ|7K 7=7]N:GL?xWG z.!nļ+:pp%7qP%hia*{|_}l<É<|7~pk]H/ܓťJ7OsL=VnNx}ru˝gS*PdW_Ctr lg4]i=3)9GwLahb-N(d}'+*/I6N"&İH%V>ڙ[cM߈L%M&G kM=E"#:*BP:BÈKgRV)h1XI(eN6-cVG'~4Dٞ2Egk4Bm7aDV5*T 6 M>6T1r`zg5{Ā́[ ~ZB $EOkX C2ۑx#}m3P\1.E{o`k[|}Y1GzW{yuc H Gpjx4bvdF-Е*Q_nV:nH?0Hd^CcON@Ϭw^2O{E ?y4 $ԛ"t6>;4W ooA:.mS ʏ͗jjik_iWM8i#QZc8HXA}d| _ޞA/Fj 4sETtk13/ay}RrEX/"V %4˲yOK{ 2p18<:N7HlЖoGs{yRl#sEINR` SBPZP`'@ hˮo)3(Z (}.ҨZ)/>}MPp|U03e rHRn >L)Co ]_bGt#n y10+{XH1mtn@2'*ɺ*Q-CO4ֈ+oXRh8+'B֙3ɸ 3|tB*rTlDLvk׏YHQo/6xFOew⠇bX%;Ơ&az^tZnjiCgjt=3xU@{POJòqhM0\#g•<Ĭ4PwŶP;qH݉"ƃ"RoNZIe'Fp;C04cb'CbG#oZbKσ Wي1?Xo8`,JOL 9] 4 K1=9<1 5yePVF#P J἖˳X4h_Ofo+F\}u(.4эu$ CR$d3TvYE60c^O?u]eH~(6o\i&ZIC8nJhFgj""$`zSlga:kh_ endstream endobj 202 0 obj << /Length1 2011 /Length2 13884 /Length3 0 /Length 15101 /Filter /FlateDecode >> stream xڍP\րK% 4{_>}os(HTDL@v ,̼1Q-V33#33+5?r8 -?,A@w8P b `app23Xych Zv '8 1;{G 3s< 6p9Zm @gs{Fc5@?!͝y6Nvf47 gs 22@hwkp5s )TL݀ dbkrg>كle,/zp+@cc;{$)Lښev{-FH(?'cG {g'F' zd+1Kؚ؀lOd~L\+[;7[_m3Z8dm.#3988y ؜j,{񲷳0y9]AgG?Kp,, cgOw1_~]c0? 3c3+H*EE^ lV q_徟Jv P{AhK}rA?lyv7E[z6x\-P{k Y_3}Dlͬ{N % gc˿--HG ޷>@)%lL2VN>J/u4=&F[;w{s>S;Gn$_ `C&?`/qId{?`RC1?LJc%?^z`_xY$9?/??4~?^?߫f|߫Gb_d}C^ڿo?t{iNw?'029{/^?mx>% ;neΘ/ز6ZߍaR`b_3kű &*3pV$ie}OFx븥&5Q~4Էc j/VZd)r\JC8Kgbԣ)pHaiݑonrވea+f}X(Wcu%!p6>C%3Y{ɫ{lhwSB&d{ I /R余8c] ё_֪98hu\E/,pNʝ/XQABV'Jai} D7BН?~&/q.R' Yf5s#tBp_LMIf^iMGYIr?dkVY @Ylvy")f <#@l/9/fb-ye{l!"XUud +rUߒ#̮y'gJfT$xȔNH+ WMX4 #ǧd8* SpF~6;P+af'#e6Xܚ4ХU]=דTd+֘;S<8 mfCE6Dq)QUj+0U(Y2FBh;x;_H#/b^8;,>ڣ4ePL =xSvbvO ;s_baiqg {k)V+NJ)uz $r:|z3TG38Mvyb$Rƈq>8(bIB ~[K>bC&O?N1]pXM|HM"Xmף\\f=Sy GEȤOo'GVRzLk 5SS^pFU['!WfҟII ׯxU\:>%tǞ ݴяx6 [{1Wj0T%Tk%7T!77/~:cRN@ ̠btk}k^nTCmz wj! u案-l0}!V{q,ގ@'11T:Vr[!|Ԙ ˞N P9zBE4(WEENa0 NaoI8xbsI*}= Sv:)4;n3$t=^يwWsnC-APTjClEM-R6ts- j "ز&y}< dʌkq|^mAۤf֧e!1ߺ!뛇H64oL3z!u<$Is6 /@grTeC." 1Al}1;K& B%jEOZξd8r~\M'v%nF]~l> ȅ6=T0 ?J{{0i>BbP 4:hH1O,^R7:d42f-1,_@J^GY(8-U$,G .Q i8 uވp J$<,96*_]$~/)yOW9sv1sǹYx`|tz6pO8V豋6<Њ=瀟n^">J`b[N"K)M+XH*bUm ҆f7Y`>NXd:H>Rn&prPW~Oe|Cf#[5ZOF~φ_e9. o'4rX7*vԊU GKh5+k,VZ9M@4]O.5p.t&7?~5{;%bݫBBN=D iF(G)`Ҷ"V+BYʛ^J3 C7N#9xu`g@o~UaJsdvK8k,cIo AWӭ4Ad? ݱJhX)<<)Hn4jMʧP *}5/ζl@"n6w*!]MZ|l2~kcOǧΦkJ /N[O~AїkK;W9axWvRVIse(\T5ԍgmC3,J2;wֹ#9Jp,mF#5 t6rM-CLlU|O\L\=cv *۶¶o"̿zͻ1T$ys)SɷBxǮͻn,asSKB`kK6B }V>٫ 7 dEmk4V\mBbmw,q?v` /L7Ms+J%xnۂW_I-ڴ>(8-ITZ&I.\]$(Z;W'~*R |l~$iĥ;()qKn tWhgoQfB(;O,: W%c.Gh㞊 HAGIbvPt\j$;Sվ!{VCUUxWًIDY( oC>u*% WHTb6p-`uJTFi۵,j{zq 8X}>c,h)Ur"7ݎR ՙ[KUGQj}_=+FKb f=ؔP'pvgݤ#\ `Y# 09;Ifx ^oܷMSv)rjþ u8شM}lӲ^ҘqfMȝd_aSFj-vOBzsx̸k E$JaNfeZ0[հG ;|L8;IÙ4cŌ{bK 4Iki ?N9f^`w+$]okw[QCϣXrc&$XY՞y SLS6j.Hf~bP@I?q8)Y% #6AT:TzLsMl̮6o1eSbM;k %`i<#^qVT:d89B>Gϟ<{u;67Jױd Fm{wms=BK8gTL.|LFan}~T}`o{əi6U*k:R3OE:4dZ2_9aI?/]ݒ^˥.2lAy^L?.sԞ9^YHq5k v9Ei>q{^s`>S`;;YaaF"hOSeX4yD4&EK&$$f3Z®88 A.m>YƮ"֦2$FPTWDE4o9E:hqMwa\jF\{! ԳǦ?RksbRP״&]s씼S_^ڣO҈iN30Օ,^e[  D`@i%4 ӻⴋI=_ق' &2dZ_!ϥMMVIF W0~'qRA^I6;JIM(h&%sUɃUזt:p2ճzN}2}A.!*=[g}'a)+BW>~W䩓NvBۨ>ν97O vR򯏹x.mȓu VF(+wnGL7nl!QThˠmrk;$er#OPIRKA$i>}־HWSiDSփƨ FJNkm  ;-H >t1&/xغ]i7#c ^M&ѮAv3, 1lW}8(s:λ;NzU?my؁ 0UuF|;5q>lhAi>fqD _|tMsᄘő L#od`k? I ]t 3`D*QOQ r@CĦ'pLA_1dc1QެOF>psA:UX}T݃97"~` rŀYO\Gqc7 /-e|7XE ^V B(_8Z_߄{{>Om(Svy0ÀyvN'X8D$t=;'h))/P|accj[F+B1{MbpѳpD Q`͘ '5zuřԽe%Z8<6\CF\B ,;üspڙƸ@7 Kbk`Ue7i@,' _Bԕ嫬rDb;c/;fA?DOJ=λ(wwO$5~w%Fp@~`~w1 ?Yʦ o^oZ_p*ªȳ h Ͻ,HpF0v"#ykpq6 JCQƓa(oh@ͦ "IS&)X+]q-רX H؉̎Z|faMc— 7O 4u%f94'=0e"ڈCZL+{R4IWǯt-YA'Kĝ ,Xj'\fHXַN5I%UX~]] 74cFƉ*9\aJhvhj}Z#F;}$Ռ}~cQ/o_nꚾP9'iV&/6f ^o]aGw*_`RlnpeJq&:Zeg"PW\ܿ0we"6|8.Aֽm1 'g Q{ğX}(V{UEYmc&9?Y"N#doQ2P G&=SĖCv&N5qeB}&dZœ`*G q351o4щtOwYICM ^A=QT7XiBOzu^E_ Qo8&&')uל\.dr7YHn@[TQ0t0_[v'OZ03$i*(xr\T7, .NSXiur8>OcXлHl*:&Axz85KOea:w_; Z-x/*j#OkK1>DiZ߭jqMTI*dl_k9U&>SZ%yĥ[M<%i4Ckؤ̋̊38"Dj|giPJBi:];?u󎍚U)/qd0*E n`u,G L@Bi=4iYFU2T^{"?㰘U蘒iYвof8*o12i(qdZF(a z0+R]^H+Y3,~gg4" @GpㅕfZL=Y(R#-?n*OJ?,EkV'b6 ;{` G42)a)cG"Qч!)jHEwf" UKs3[[S#6>NK1ց-m_(YMqXf7%vdf?co(/dpG\]Wͽ a!;fD FЀ9_atp#Mb<|SJ k*hk:lmc48~YBO ߙ]˽B?߇tDrM`GU(ɔ=\⥈W6]8K}; <<,rEjHվ_,.Y- SɪZο}e>ֵ~ ŇjBoBv<!IH1UTQNq4?Fr|t {^*/Ax֡x%5_?urlQ PjXsicϑIGEc4b\ӮYTIHD4RB[Z=]=VCU8:T9ED4NOo3w>N^]e?VbkRg az S "whu3 lm'WEVZe-Q.JocR FyBN3*bCd?vxHZGjxzw(d3;)2Gl2Z#ƞg$_rG߰2O_#.y"W >&XRQ)rP5)T-nӀ7bG%T"RkWʝM 9.3sNo{vpc7L35 W $J-_mh}St-Ҷs$5!`& @Abx00 f'ĿA!J)Һ1gz5*lzP Tޞ.цf|OwB$v ِ{9xQg]46ٮ 嗇|<}@~RkbgHnQaE>h;o\|> T4l1ƂPj[piA"g X}: y5`f ioB0 ߯~}?=TW"ONq5$X#CE6JLѣ{jd ГM"ЉNH?WL09IPKɕAW@CghT$H=/xhzT_DUJp/OB,.%:|4zPU -Ry𲇹g'YubgE _VNcpx pjI%αF)Cq܇T-Ȼb=aL<0 Fnv^#M">_l`:%E2xtp$YK'^snL~795da$y!l2^ƹ*~(FV)ty?g𩈥fH6 o18.Z?mmnG_P|WW5{0Eټ, io|J/g*͏nz: k7|agHWSݝkXP(?XH8Fgh-M+hʊ9ԥpOiL$8˓%ێ yq5g >wipFxLNtdY)_Ɉl|o)pܬU9M &)@gU:vu*ʓȪ(5Kkm\ڇ@J4ĴPf5ș=ZI~>Fj(QNЁVet]'-}JW:Nˮh_{n*yGE]qkWf2Q2W9]xz %ShKZ҆q wcC'TDfWn4** D@4Q> stream xڍWeXTmKiNFiR``ah.F$FPi.ጾwΏsu{{g޳Y5uxe-`E8 +?{"B|@ +. !`# p?80=!Qԧp@ J IA P?D8B<a`'Vy;bmDK'@@BBw8@X`  Ё[@HA"$]]]@N|p#N+i;.`K@࿚#`@p 2@!`*f FPtT`d?Y"NpT<QŃZ?;t@@N|N.AmRno!~[vޝ#]ac+W+z03Xɟ,o5 bb#fak]woo3oO bFx:\$Oǿb!0`?0Jו)JgpoxeWnO^A  (& x;&g%UYک8Ns= p-x%K?5):C/uҰ35Oᨩ7SAPS! F)W@(q[jB6(ޯB``M׽5lvJ]`,{] @ȝu($@M%|08@u #~8/Hk$P>PDy(QE_X8#-;T&`؂`rn!h[pV&KʻUP ˺PvlZٶ`m{@^o%MV5`[/x =vRw\Skn62YZۯq=q<\KTf)9-ewkd8.]Fٴrّ&#7t ,uMCnm:m=Jhf6a]iS?i0wL,VHvw4Fu@S`9u)g8"!ҔԻAWtNJ7/3qX}4bVib7~7z9)RD:n-FL^/+Ĵyl~)\+<.` (i|ݟ4Ch]'-K+"' +x0Ao3Zi4w7̽ܟ7dbՆ =URtp$-i~ a'Ä][?B|Zp7ĻRDPMfF2T}98_)]'ZCK@XeR =ӜUpa[5 !BO^= aGKxut$ÜX47E 4i+)\اW!< u2~&*?P39GWiK0nS Hh# %cD RxaK! fLcuUxyz&|;mFw+<"-6DSӿ|ڗVy(OjΛsFElB&azDk f gv!w1R]z.q]CK)7 dz`::+u=<٤;1ىTK ҷzZq'E|ak@$_67%zw CXt5 o'Sآu *KRd\O `T|V&.&mo|ؿ׻i |]JUn@Is3%sXӜT[usbf3Erw~s/BL&1eFV<-> EN:8X "? 琬%OH#)FQD۸ktR*%^E>L ZJgyֹG2Ca+,3\\3E+C;9U-prjJڛbd&Dbr Buk/,¡}۔` o,2e{2P&9ݨ-. -NAl\zINy1j{ pG Mdtc- 7~ZC[n`^=}wVhC2B JQz{b9,rLXRsJoMvXF8DpX; d iuh!_Sq=0Z (bOҡֆ!x_+j+:2rX>"PUx=ͻEojj[ndT‚+m"M;@~g9n\/cq?UF?\$IwL.6UOfVtc<WOOYsPc:ve}9o>|:JC$'NkMc :Ra U#䖗 b#dz]@S*cK{O}m $'4ٶ4dՋǯ 8UwȯwFO3 t{?08=C'jQP:)#jWޟd!w7cM&{blô@Ym9n.vw1t >`k-,S%:am!VD RiaO˪p&".u*~悸pT)èP‹L_)Q#1rrٸ$OuX@[%>Sk 9Rr$ ?WbnkM{_DU|4!.. eUxSg{5Uj%&`GoV99?\QCrC^鰘tA/qP#AFN$kOF,SaIԬ( BDv6N%c<"jZ]wtLɏ[cTkZs]WܜxF< OgyA}c5)V3:y\g}u1pj-oɬg ?҂"l{UeH҄{Er>NF2gg6L3 Qx; *s@`%.oZ X\$!\SaC83WmϑTn㫦05bcF! V&LEcP]EB@=OZzrnG =mo%p"-i{-0,uz`84AiDPz2;zѲo9%fCj=H ﹡%bk3)/Ƀ혓N{c*M%DЊv'h̔Z/At1.@Ӎ7ZVlx=׆fF]NF}o[Qxb5ܑ4J3#Wc85%@#r20iH pRhzxĚ)Upf>1Yiv "n͉ˠhlhKޖ;2@S5LjSxKFE ^N|u5ÈtmVl5RvkcD&QĩaK+ﻃ PܜBT4 T?y:'{ Rpb;PcpњF-4ܻZJ~T(wY,F04Ͳ⩟ө{ ;EjOcJЕͅ/R  6p<{ y3k kH1z"v" 0ClF/?Pn\:gwб&,~I^yU:) +;8ܑ%i`ğR\YͦcOtxPǼ'{/qDvfeJt8ˍ8;bˏrYUx5o !?P:wA2%5GSO,}:phEBOҽ0(t7dXu(eg:~&dY|MBI8Sh#/M?RRփN=^)?첢sWoZj  &Ù2/*rH*[MD3B_. ,rAV^)*d5ُ '՝SՊf> 94SKȽ)Z"y^$|RY0 CQMQze Qϝ7Fc'1b^@X*rFJa䳗Ӎ/}Ct5d?>Oj_u$-LҚO_^zyE[t^+덏e6<`PXTR@DыH<2 g|mcŬq~Tot=J1O0. 9 mj3!Itu<34Yl^ 7v&L`SzӮܾˤE_W8vU+$V2}&doX Q04M#q}!T6Atw.->h)(ܼU8;doTvP;\ǯ<\p#\o! Elir$P6 3y[\H~ŕ>RG;M"_Ra!_r#bc1ZK֖A9G {0-og ~hs*=?˿7㸈T6~VutY-f=/' d+8"'pblkKT i̱0\6 zD#V̭cxRZF>)_E 홆N]"d]88Xj~܍,ji(i{;Wv,1<+'ky# ^;]"X`erCϧfLsnR ^Er]yQ|᥯2Y*s \ZɺSu>}_5]c[]t.֧yACw K޷˂V]vfo`JK-I:[m tE&{[6.5lP?flq]T` ÆE[u@?Igݏ *Z)ذs:|ծw1yu*[Kr0L ]=h+SԭJ/kwh6ơ,B)9r"tq,` `,X3.5dzǼjx_% }݀GtK_6Ywe2 .;\vV}c\ &@Qk#`7³ӫDbM4x&@;am_/V*$vxmƼp}'".!$CkCgV1* VAn{SA;eJѺG;(}$:1Kln|2gTkfFioZK |t+?o9xB0 6-aΑG°eȔ?ޣ n|9"PZA̖‡DY~$rsGY2u ^JO<^u^c,&Sd!zp>bs?䑇!NX-*Vp'휬ͪ>U^{1N56jesP Z5‚}b1R.G>ud)7 cOT K Poo" kKދ\k%( 1uĸ)q5őZ| `kl8^gij>mVśjt|T*W0ttb%MH=뫫s|,=<㝾y۷ύnpDX+Hw2_h"Q'ImUʵRc$锥O.q5|G2.49<7N.RͽKi3^8/ugm$1t eK}$FtDDzVI龬AcKNs^ØS+ցy .0%Q}.?e*iZ#n63waMRs#;Oq F=fFY"[:9,KMT(Cq-Y=µIa }Uh lXIqvﳍz)@{=/ΥI}__q[B*<]}JK?n/iJ]&dbϿz~VWo]]m $9CEwT;;pٻۺm ,Z[?V* d +! pn5硵yUi(DLܢ< 3$t/u?f'E-#rrMԎc? /utdE7.1i>pܠt=On|IJX;iCa;3p"B/CS endstream endobj 206 0 obj << /Length1 1436 /Length2 6261 /Length3 0 /Length 7243 /Filter /FlateDecode >> stream xڍw4]׶މ^`{k3QfB A(.Q$O}u5}u}>gag10W 8( $ PU DM`(7v"v3( KC nl Qh{"4PBZH ,$$7|`@z <0'g>ow; ]~#0FaP?Bp:P҂ w/I C9^PU2@S;`pDP ½n\(p;XKEs8_x vww8ܠ}uC~An^r!NPW2n*S @y x~(+1!*ww(E+?U 9w?u#|W08WoAS8sc"  I KY& xS4y@>P B'( 'w3M0?Ѝ_ϿloAMbA c K%S?% TVF¢~a)q!PTL !! g O"wDL77҅t!1!.?*3RvssEp;Fި1E пfW y7݌_ RA!0/e75kn08uBB oz3?R F@~ 8Dn|7 2@P@ݸn 8"Dz*nPGc$%^oD GZ`o3tnr{2B`)X&¥.F/ڈG5Ln~ ?:;ly6M>u8|jn~İZ3\O|Q6Οh`Z2^3Iϊg$5qt25c^DbՒpd|W'=+zF#chotХ 'X=5MBQٜb$ak*meP0{3Ly[w*Tt!bGqX|*Hxjbo4 HxD{#I$Jsx*jC)F|λ(`Ihch Zq`p }PG[҄' Ӌ]j^JsޥʼnzI? Ţ%L< ;kgڢ[ӧhTu“/X+l>?}ElܺzAmz'zrW H@g=dp[y'C3,k~o1GNXJ 3oAe'Z4c;gBk{콵S(;!k/u ic^;mf&~R osѬ7Mqq,FY)=:[.vo m6 (zx"cG`4־9$Of7u8S3e{H\;3~.Ò"YGwoݒ7?sU-&ϻ5_J?;}yMԖ\ű!=%f;ɴt !UCfړJGJ?\[gZS3yh#Q&Oe; *,2N$=B)KN0E.*fY̘Ĭ;QA}C/k!LE-2约o=kPszfb0sOPy~x+zlZU6Rs=Upo*qVp0 T'(>Vxr:xQB3w/?ꈻA׃][[&[w7sHr)ޢ~ JSǵKS!xɮ7Eđ"睾üM?9>kLvBYg)pX`hQл%M}r~dU3˵9[0BW|kƹg}䐘ZdN?rl`6-N`ͲH#l_|Csy%la!RejQ)dj OX8jU a v~D2NGct]&2jmWZ&+`M  ȯWaG+`l$V:Zgmx':€}Cp2_Pʖ~cjЫ}GWF|jм9?yN9./aD^d%q4ѧmVD²&t?1'31.XsW={9IS^e[~5`]Jܕ-[̾2GGU5yl2_\IM0>Fd.z1#+yP,?gu"fMxd{l{#]n6YAeI0 //Cp)o&5k6(6˺J69 뷑fRg>۬a?QJCDcfHz^g/.Zoͩ%@m'8DF-Og4ݟ/oå|XgKEܕe rmx1kؑH9:&=V *;,/l˓Y`苺Z3c>j/ {+3c_vMBT:O>,LS12ė4%*{M[>Oo-&BZm !&UBQRYnm}C]5!] P8ŀ yFw Os}ʰTU\`QKkLx`=jxwo#HaQFX)Ul}Z1^.EaR7lטޝ`G1X Za!Pʎon6-vְWڐ(o19frwWXa=%+1'n>Do=m}c.Ā{)<^A3QzgN^Va{HECVԓO8O>=YGZc/>$$1ta,Nr$UO4٥}v\'teě;hs+ c&B RA3iHZhnnاj i6166<V/bA,ߞоik$$PK)K$6x5~pȿJ<xgN-a"R*yPh%2O5|n͡(шA2gP,ADFԮkM'#w1Xa(ՅS*ILqjJcڜFhugyﱗl#Ӯbt4̈́ƅSS&Ժm `5>/M3d }\i:L b"qhvYԃ6u*TH=Q̸LߛmU~'6Uxs5YF?9$gX1Gʇ͆rQ#|S\ vS=}z۝Ok(7+ZJPd'M! ,s#GeNK])Ώ<-uIXKq"opnAIF.'6?3d9d}.rhcǏ{7(L=6ޫݽm@kH֓%F g7V[6X4Lba9Ȧ[ j#h z}˺f`2G$ Dv/L6#ܡwåإ) !  AQ +:+O1Ѧu/Fu ;|ꂐLƸ FVM .$fAaDnD n\ꖒg;5Pc2:RںjE"%fLGD =TUPh6ri5 N[w-W;G0"6pNƵf/(mL^/WaF_? _0g2Is]9oDj_6|ay%pYbԢgIL4':}ʚK;\åQf ?OcV~)roLG֡L=^uGF7,W Cbp^0JSٚь!#ˣиr(Y`?9Noj| Ha:ҒiF7`<fѡjKқSiJ;t_3 `BU݊<;m94{* ,YIIΞ]td˃x1NkxܟF깴ՄiRjYHIrH:\FS,hGſ4ljcj?X3rIrZoG-Hz)R8ÞY#ҋxe6!+\Y?O28U]oI@;MFQyf'{'?= 'cD^&|+*E_vy=%jd (z hq TC/ĺTUE>]nJqKVֻ̓wU;䦳E0-q&D'}>QyjHi:Kz?BŃ/3[\:%M@1CRR3HLQYXa%?l~ߵT&*Ҕ:RϬFh7;h7v6"'⬣FFl:4J>hB! phmGtB?:Q#uĉş7eR.n(6M?S(<'itA=/4I'ay먪Z]W. *H(b>V|o8g<5$7BCGZ~`+(Ih ֯6%\>I wxȚ]~L,GK%-U,:Ko\cwѩDo+oOh0CŮ pB~P.*ht~ }7U,;X}lۊ^>q$@ow*쉰4J .}[2>J$^67If.vXkh =='u\OI[֒ÕKlɤ(;a7E;dطQRE6MeTY'|BFpn;9ȹ1;׿N; H Dd_8Yj e*gV]ҍyp.ĚyX+#~,%$W܂ytO7Z3g_8urCלԩGr{5'o3av@*]=j>A#} (G6 i5H׮J%gMU{6fJlW_IωnOnEEۄт@ vB\@uMZߒ\vڷy*S:_u=91ְ۾.)rnb7ǂ(QiJwKObPnCk].0+%ٲI{PC wO VG[{ 71GSa֨:EmjO~4G<u9Z2/%|A&ZYI=P`hΕ^G'TUQ&8Gxdt\Ld3Pi8#QqڏZz{0/|'怮y1yUާ<2I)v%;P=_OT[YBf5ZvP3̿vXZ\jGlN-x W3Tf?Aw҄Y=ZL|AsWr^EmE閊MABqh ]{%,qI;M+Kr2K}ys ÙAf8%o(0\}GirlΗ i?2#-&BUj,=>4j?FCk/^˪Z8&Ӱg?;UXOlp %n\Ҟ+Upz{Q#H5I;=J.Ǡ'jr9GO>gq|1XiM敘jb6Gy*K2fSx1%V;毠41)RHQ⩿vKgf?Be֭&G:a ٝg4_*0CkGFkVbQ%lr$N*>ʁMp%Dy%sL=(8)V{H/IƺX=QOy ]A^T7YTu:`2lj]k]ŸVld;SbUD'tGp' 1tR{EǎĹ-$.twxߩ)/"Zbp{ƞMidG\wi2lLGFkCUXD3> stream xڍT.LqR '{q(P XIq(Nq-RVhqJMg}uZ73;̛ uApr򚚪@ 23CNq npE_y70)H& |@P71bA]p\fy( bg@G5WTTw3 b rh`g 'FxWV {& rsC8=@ mKhƍ з4Am 70pX]H.6`7t@v'Wsܼw  kk3 qBm% n'r 9H;BHPU C5l<삀OF݋:@=\|#B\llacq} VU T#@a~A} Y "Al\8 @.//bX .DGA<@$x߯̑ 8yc@ UiX@xG&2޲ԋ#ͣ ;-_y_ґ E,ӣ5K% 3 *]Cս槺Wo^rj&Iޕo3u CmyZJAͶg\䔳x:eg*nߪ/vQ4%^a@S[อMe޵2%4{v7/:yo3J5s~ghVg_IbbQ!-6z"N&ؠh]RA[QqKc~x@h1J=7h/C?jIPp74qPlB^niԖ!"[`#"Ii]=i΋fZ"-{~;lIBz6 {{_rE+W}ACX GF?P7rVAG;JpDE6|G1Z?LH*^I5I!lYW"خת9[kf[I) ca ;\t{*W~;]ۙn/j;E,X751(:ן%w|c{7*`!KAx7z{1>O2hϨoV.DkR{eJox鐩;qI L'^r6^L՜e0/404 qn\?Vg_{eSIMxT3+rUjU'f >Oصmn~7tlqdN!1z2]ϗ@2jrȸ\y+Oía??DjL`4|zu_"%H6Y?;Ȝ\ n>9‰l٦D6o\(pY 6*L]Ow8D6!EEZp 1s~ANK誏T,O~y{ygp lw{ (( oɀuNl{vA20|8mM\o,q)>8uo'R7oEdM02 FiAojruQ4 H(^[RU Zi2^D"BmJ~[C@kgt#nݽ*_wU̚DzSk(dr.-}*QZGB6K@z ܷ00N(x(w/呴l+b[ՇN/`S)1ˊQAG !^OPԓ㈷Eu&aS2dvA=n"\w*yE<(xEɔ5&2(eJP, [ml/%y%//K牱9Ǽ)^Fi|XEr6;s3jLk-o`.nFYgL;UjsCQq%N=K2E䵠`yqN=~]X=Zm)vpIԭx bR< TbMr,4/p@ܤ̖dj w;jnH[?6:\T\$lQ$׎-؜L`)S0_"0eoEeNg۴i3nfSb'VZ6Q+% HW׳+P"]9귴lsC}6>-3qܷDݭg1L04};݈PH2Ht*f ɠw|ۤ%!ԯ׬ "u0x8Wam q@+xSIӶ;vf]t+`}G1J;cvy rH zGTǤX¶hrb2{:2g|1.gydϋ2]6ʬfd ţ O{0laϣ*7[p2uද f͜y^a[AT :支p=f 5&Z7l+.j鞴f&76UQm;-?L,l xt@6u\s+ 1b‹)NKc_$iOJ^x *Ry3 Y\9E?B a6|\Zv[¸eyV> -0Mk`-ݞ o!ދ#B$%՗/derG10~X71xSQώjx.!@^(99q8MqM k{q[}gVP?IZLn LQc0'wBњ/9[Rt'Zϯt=vzfߓk 5,}V|r2q¸d)$IF/W D ܏[PyQm~_I;_I:1P3U5ּQ2E(x4|۟IZ Qab$"FEC 1%.SnQFp<$BW^x[XX Vx9"]6=ѕ` :Īrq>B#\d6;6ۦmR 'U;Pҳ#z`ŷ^d[ mѭ0Ya7fxk^/8%=-b: 0>ww1%4K\;['IVѠT_6UUŭca%'d&f(jG*,1N牗r|1L.p2fq#qBhP8-fc JUq4 ozNH?^ē:I޾ j=uTeCyr1+QM,Áe"O;t?ldv3!jBCi= $:5TՍ% [J*^$y  (^,)G#V||=M4F34nkzc^R%HYDNªC4.OT!-h'~ pk{2y&y~'90n/QW&2@Ocr׶{|w /or=Hf32iHlؕkHDce\Oi)xjv@zmsJ׊yz-%Dϖ[Cpqh1LCV֦״3y }ba9z*U>z3Q7'aߺ}-RYL4sdAʔC5W*t؂#J%wvqT;6>^"ğ=?HM5p\q:eRE 0XMR|Ч| ty{75@%ivohmkNIJF{IXh@6X J4 J(3*9r#K3vB#JˆJ,|xg.ɺ"ëx&Nˍ.H 85 _4L(#暇NoSUP p$>7x MU(Θ [ -%I񦾩z=ZA3ēGa[m͑ ƌRKdџ^o0|l+b 6U8bGgzaBV E$Ѷwx̧gÎꙩ|k8NN)O7뺾~ I`*TBmk`֓-kȝd?J$`WmA ﺹk|=; 42Y-wqVj*Ս|3o0_DD%VɗZ)C=*J/roQ}k&׸g 3)@!PI]T]?^~2x_/1 */Ǭ!4Z]4/][U,S=dArfԩogm5'3GP{Yy{` ugFF#ʅ%SS<ǿ(yq\/"gZaV 7nHMDMާNƮvE$|LX8hI0nA'-h. $ i-4gg9\,6'slޫϫ'UH芟l7s>FOMʦMcJ=K4x5x7ã\gsCy׋ecEӑ_߿WSz~>bW5?\w"CA}Jw:?Ό O$ 慚JKt^BlT6.Wh?8)Mv[[Ep&;ƣ7:Y~$g4[9=OT}G4/U%!{is,7JrKddWV\[!ѷPMeA \M>KNǿ2U¾.)Zl*Tٝxh,?9hC%y]kKHw3*X?ˆ[6v>7I.,j3kx.]Pœn WpϭXl뾁Q-Pl =_:Z6̱p,{!ջt` PHENÆn[%D!w4;Sڟ 6fxS<5+ZҤhZ~VcnS!]EuQTB@KS{Θŕ&faOCU vzGa?ꎿ ~ʱ?7^kө6h쬋]:0?_R 3#LVF⹂C&EKW»25qCxjzYTa*RHet150Je 1 aZ$H28sW?=<?n}qz&`dgo4ѳ$F-l'HWUlh7Ug@lSݩ81sAE }UJCϕ*r?ɕ?# VW)~I:RG7'u0 cwOi['b:pOlaD2($YwU/]$^?#hҋzL` +SJ(n3fn1N?ꔗ5٤eĸ~-}BfBA~{#д@"~,.6A N4"<"%ꔭwq8ZYZZ_I򪬍+M,'mۮӬRX&&U;g=H7NFP>.\8@(> stream xڍt4־"Za^f0EQf0G-z[ ! !jDDD 5k콟<1iH[, ($ Ȫ+ `^0C` ApW4+08u B`0 * #&ɢ\vm[q ""+w9tQV8%0gQ>>^j+ @`:p4n 50@3/!g@l00W8ሰ#nHk+zs@Vu6/U B99Ð^-h*b<1F]aG5w06v=_㡭\4/kD_eOYi-rr#1h_!\Vf(_ imkk7g>}$ ,E@pʎWy=/g z_g3z/~G胆W7iB k` E ~/ x ^('kegddP~A? @ `?h;Wi\{}Nj/?ii r0lu;G_U7wC nOp pZ7̵Q:@7j7*c`JF^" Gpk-gikЈ_u_kY9\? kb j_6ZOCi%<~ "k \+>^$ s`r%uB>_Twe'ؿ=?L(o"smI+7W)~szٿ 8nEye%b*Fփge@w'Đg )?b5Z`fߢ!rergKQa͖2~X1G2 XZѤ$m;uA$O^O%y-Sxڤ,K>%[n[S\4 fUSDj҅=ݳdс*A+?X0dbtrxw~斺ofX*RUgҡ"-H~CeghiDIE [* T,;nc->v2g3Bϲ#чF,ʲ=^ih*+cGy rN+0[EHgNg^zsXZڞ]٭8Z7eU2iXXݘ~DXV]4ݽ _EY'&KÅ|5:o`+ˆP)ǚrI+Q@.V$wlor!EK$4&C"lہXdT?gk^ OO{bR,^#sOzѩ%n8\^J*G'DXNXb k^NBrzScZGkuǀ(=;IeȖEN\w&t-i'YrjL?~ rG2j`M1,U$E+[_2'~Pl6=qeo&/F̈́骨tLgtxw W\K4R* vBuf.3|ıHQ!B:.;^7/.UC뎜V6yخ0Jߤ2:T$ NvwKKg4lGPRU8g%h ڲTW߆qV[|7ZnB4\=3Pȕb[}Q/c HAA3ZD6:d9$%h''8!wVFQD}Z$'fN{.b_u胰7Be`;c>Mq<a+=FB?(GB$6u(oߘ$pXø'uRSFdJ?Jkx;v+0(a91>30,{)ma`F̒a7LLqX%91wrq uP&wsr4F߲2޹?nSE/ılC-UYhMfEY5v,,qzJ 30tfTz XS9Oa= zpޅ_+Y;-Y]oT !f˖k`! zjQ7W4ETUådYGF -tJna^蓁\[/u4]Tߞ$~NgD-84#E<,7_ų}i%4_v,,{s9ȿGb~臼"R2e7c { B4:/ivMW 4>J/*@ϧb>R3O~M4ʢ͛s (N3Rwk gG~,GU6a8e= TŖj'p`%n"u֡[;ɸY ^yaWcJ#̣7"_uAs>2*Xc8|#x k,|mאW?)S.w:甅g4Zy},#Q]zA -QΒX{1^ۓTJ+X J\Svc׷Xc51i15:B> 6Ío8#+ÉXeD_27_!E2zF{z8#<x~X <<ړ:ɡ9!.FMfx`0nsS44ԾMQǁ3%>dԑk2XLR!6QSpF+ǜ Vrpb'6?kn(0 Ӫ/#{ r[_ldǹv {?BPͩfYM⺺@%|w^@bvbvsMn2cy_eP+.U'ţIlfP{Yᡯ o`NvV,j.(OKmx#!YU^ 塱Ƃq@lJ^t4bێYekխ?]e i-$r0n>x0aQ+8j=y$|6pam:kqmhEE>Vg;ocR!Um!+.͎;jLXTtmOhC(8rs$&^9)VJfo='/z97=ә~9H%oqp_=i11k?sN'HjY sj) |~UdG K;#*V,BL*#?1z 3 'NNh&RNյ4_uQ>M=:JIq)WQd\nǮ.SJPznƊ-QۧBuwz㘒6}=!'^XR볒r~ TKv %˳QԳ!),Lc/(uQg#):~Iؼ("]SH?Ejo!71%lj(;ɜAP˞gi{x2\_E3u,9QQ0͞ 9Ģ!h5c)$-D ɢcI;^?@h6~^HưX"F .7-0S=Fm,i `~.I df {4^(^~V?9VSyb/4;u6dPabԧ r^ AV{iKW`ﵞ8aaBwҡ-1rH}R%N6]uQJQM{ON a hq@GRo@iss9Xnza˳!ެV #W"[04~Jȴo0~|w1'cvʎ"u!Qj2V Zh:=lŰ72ds W:$_L\"YZLwgħ1^e򽗻*SCG3TǙL{k?هS%mѦb^7zf.UhvRɑ:9gpgM+XWá:)[҄nvz.2f gcbFjvZWxyLgl^jR]f8GhI)Q_Y&G(>>a0Q8>NJ )k#"<:JN '$TsEϵRG٬K42~ng)uTT|23],ljUk?'w!a8$CtE]7!$Ėz,c>jL >Lj24)Z0pfՁEL2\R [V& ~!J]Cޕ )}MRs\#<`eyפO3tψ:F"ʹ[Z%-ZKJ.@wߤ:|07[\R-[Kun;>L}t=1ojJ[, m.9Y L_fewcؕ-!vޣ%`}uL=c5&3sB}?M` {l6 6>C [8hTNbHN1Vq8[]Y^wNS(};)"OUeQ8N(iIwS29Wa1v$o+gۿ"l 2W2zdW\ +ŚXHp+iFi)uJK\)R^'n[ͽ8Q%@+/a{J݁d}%5>Cԅt7q1f+H[j0\yDF}?_ wõuWĈ.- "3򼕥m&VկJX\)x9 &].fAEH- 6ͭGQ,Ոd&e\lDJ۾"~1'u -w-H3ҏRfѕNd  2p5'q´bwĉɪZ{vUHn}M(*\p5i+Zi>!N:"-TXVaVoC5{v3E&2ت1߈ZF0Mv&ˬiI@lU5kk{Hk< k1 6"}VHlO)d>l"i3" ?X-cyqñȒcFep^3Z ɲs{1 ʯ]̓^yVM<7aMݰV>7 zWN_bEߍ,PMTMv򼓽[BdCd9 %^t7>xfnì͈.B7vc+ !mgxd yє,G7chŭWNSnJnE=Sb(%4Rm9C)|qW^AӅ `dʂfnͯ}p؃0"l W)#Z1|)9 ^5иs-1rR }BΦfIA%3ff\p՝KI|9_-W 6(MFo8Z8oQx Žt4;r*z@aOxffڍӾY0͘11RROO_s.H*Հ"?4r$lyʥH5(!7 &1!Z?d pM0l3y7Y|և:r|ȓڧu<?%P~C$4Sxfu:FH}QNvh2Eq醹(l<3` endstream endobj 212 0 obj << /Length1 2677 /Length2 22709 /Length3 0 /Length 24217 /Filter /FlateDecode >> stream xڌP\ -w5{cw wNpw{ 33wWWT5m4%)Pޅ `aagbaaTv#:9[;a 4q$L\@v YW[+;?N| 7ks@ O)dmiJ?_4fV^^nv@'k3{`f tO+G>ffwww&;g&'K!Z@ tr~ P4]<%@oZA@'(9@MFXo?2_r613ss4XXJL.. {_& 7k[S_M*PldlmD_a@]~ko.`gwqO hj'ߓ}gn7U#{W?& o%=̬Wtd%U{;.N@_?Esk3)wth7 =V˯_e֕SSubboF#' גq7?4𕱷pԦasRtm-@{Y8Y@ϫ߆[MH/5_Һ@tT *ͭ]VtYhlbf-ue@eg_#h4K:-wG3h%RAߔo'4dxn\@.Py '_0b7Y70KF"no `ҿ;Y70F .ro(F .J"]7eW@#Pv]7eobj7u21{M,\~}*@E`fm /ք7d1:AF "qA N&V+7X9~A?bo fK;8/sW? ,qdh$#? L? 3YvȜ W{ ?jP1ՠ`W(t=TP#m]޽=_׃Ub%tp'/;o>4G_c_cZf rrYw}9'(3oN; Vӂ^.VN?]w?@1\AAXRjorH^@Sk_F4_Yt0 ,Jθ7)8G{ũGښNGzQw܈<{6 kKRid:<=8Ux,Z?@GȨ.f;V/]y1<CTp!<2hDSf-0ҡ_xΡL&İyn>,xmT9wQAޠPy,y.{  132eXF7պt~S b&Ֆ5c9)aմEaԲtYmtjXؤֿtZz6d Mmi*&tg{kƗA ]2ѭDeXum"R[! .t8geoUb<ڒ;AkԋB<+ƙ4yo{"Qʙ/$Xm~ G 3: 6ti' zS&:"嫆h*am pdxJM'; 4:|=bR7,Gjg7!:Gpߟ>zHUGZP.&g.˳e)%kv #@9\r64meZY zN\vL֥ϛ&v]x( p.] LK s:ɹLNnv%^|3#|CÍT/N-y}w(|M+87oME>St2v<;,Y9u9ܣQ9opq]1Nxb"5H9>6%9j.e ۟-I8[zݸ!|X<%*6Jd;q4W?J~\ia\ttHH3_&K7 䒱hqǦ/,s\vbQ?vLAk/ޒQ8t8%RArT|zoU9zXLP))KbNPe՗,l}jga1׃<13IFVdsزaOݫ_DHjWTeskKypwiƟ;dwȟX!찠NEBp M)YV>A=KLb˲T~˖G)J&&]\<[`.˖{mY^& 6 X0C"ZO:ͮ苿\ aB'+W@Ena睉K6 qs%Ir'1yڎҴԀ]kT? mCYP5jYS,NKw_6j]mx!Pn1H_zSm Ocsn+1]P zMc@(F8\` ;&r^D2zR5CO"qI_he֣zO ]4=YU1- ) c&*8k ߝ;f#{%*/[$3E(wB,/rSR楐~J]$ضTj;V(Tu M:kOx@2 :D՝(xJg^u3.Zadh*ZU(:ŤQfLop)+@|Z2PpknT`TF^&WKxT4s3qQLXu~R\mKŜ\Pt4u]$ʖ ekJf^)-w?USդ}b-ޡIoz%fGHY- zoY'IhJ>_?GڔXtF ѰoJFӣ>- (d֚{زwԭ٨ w]]lY FM{w(G &+dSVG?\5RGT9>}k_M"St[j8\c4| (̐|<9{ +<0+z[rB3CPle\ƀ @ @~=׆f<*oUøOӄ#U0O ChU6"9C <"!mc=;SbMMԻU~~rWxZ]I f305iW3(=F`Brk*QROώ9zl3 S /)cC;dRe)hU 3oI4}nc (m&HΣ_aG&bI&ɶ!S)GYLV}&j?s)TnR&ozhޠ@s\Bf4mmfc FTmF-cUKw3;z❜ӹणɁ!Bձ;H泌G*Wu 돮f9{ÔMfc#YY z~עtqF0dDŽN=+>bD˝s(^_5`whT#i$q' sP'$X 郆\gٞ3?M.Ћ"j&#Qgf@ y}7 A?" rwV=0O,t5ºe^QGѣZyNIg ~B J){S68 ?E%b->n*ZЯut} v Y)р𚹶<0ٍwm̝I~h)x}f3(NXJ7~/tqzxW8-tB;Xx&m VZ%Mv-*00y8;^e3^ck=)IAf:&#]SF^!%<>YC"]=E}]&E1o˭N _]-| Z>cl_8l_\SJ~~Rpː}C-UJÃ.qWD"==#@aYDȆV@xW#\u)ou)!֦;S"93>,:|` 1Yٗ:lCv|2A=YQp> ? H IuUeyu )yK, 58_)elf<׳L"'ͯx[a:h4f=@r:tMK2(RRcXE*\IO&V;Y29ƪdJaȍf(pOEcXmȋZkֱ­޼B(pv@blI!Q^нr [/РY`Q`Q+~x/Wo޼$^M\Exmv3e:3!U=S7. Gw2Qk||& =|PVׄo)jN8yCzcʳ3-;6v M˴`ah(0XI;!NU}:^EET8N2ၾ6p./1+L9|@9F "=娉jr)~Gl=85ħ:Z#u#o ҇"P\Q ~pxpꐷyL0,S҄ט/)v`D:CEQHQU$NɡYK|p _t)@g_z]e}|1}V^ Fݤ <[r4(YV˞*vƑũrs|^^ .AQ5b2eۓR)m/gnQV`RwDlZ mUyE7Эl,fK|Q=/䅚9"mAHF9P$:c YƳKD.ߞKV.պ<@n-!lbwCL9FՐ1T֗F,}OKh3&ljC)3%H tqG^lefwClk0Ji++VYr1eϗum-Z?lpvoi "vP`~cxZԁq{c'g"&bov33jjqݶR33vu|\i]Eg)EՆdWjDs  Hq5_=0R; 4Qjl[쮆B(1*=j^xmULT7L&qW F|*g?J#œo(Ɨ-H~ 2 D/ LB'ZvllcG;=pGCm F:۩҆Z}wxb} 2*Hu'2[*i &p1'n%l-8(muʦ-&yLD|3Qډn gi!/Y2ڃG|I;5}sv 7#N .Tѓ.snᅙ? I\K\ 2vCiYXTM;j4LªlN0:M-Me@"d{^1ݗjÐ}QQ$nTcR_P!DCh&U(jS2GpkB_Cg yStWPy,},n M2cļUT ԻmJG=6[Tz}sM_8vݮjx+ B :g{(G`&]J]_C%â˙ng†g=0΅A@>s-.D!gߊ/  cgB`-FH1o*v"^^Jp18QT]ONO3CK )̄IFTr-kziR P~!o,:%D?21 ºuJpTv K5Xht~4,աRT.SEm&jݠy8YfHܲԋ(h ώ<]:[JI/1Cy nr^L_N rYjB=k͇2ulai |#LR83LIaX_k? wIvMtk[wzMEgBBQCkhlJzօ\3 t6Y KQ 5݊7؟H#KS_lZDx+oPFP/Q6GqYQLG24&j${XV`d]Pxh*t-:"F \z[ t&Qٙd @VP)z$w&=Y1dt&W, ğ~@P|ajIrzV==1T#L+5a:3Rs,"~QyLJBXhVK ϲ4!_B듘,^֎]vFSZI㦭 ont} 2k"hwUoH*PI1vh `_P(~*Ztk1Jhl9\ׅ 4ąpʊ_Q=M+OMnƅ9pvML_QrJ,hLˊ"~C  ,b,I8wɮɅ¯Rď!#3Q&#OX+ڌzX$~D0řΘz0~(*GV%^4'n#q r84|S 4gO{]1K !+!FҽQN(//< 1%B"/8jHM+%H\| ;3OUڕ|zrgs:&$(Q| fLo:짠omš ;?^}+tŀ H1G)0kEQ^7s%!Lu KT8NF#Na 9;Q_R;JJ_Y˚YV,4"&+F/j;5*BIXޕzD"T]z~wX?BF\ov }QknF=MڛZ^.%8S\=/ѶDЯ]wt^w [PCOLb}DQ;(J(ikÔ׿?[o!F7^F-B}!%#,U2UOM'еC)n&b YBcdw%(R?7{[`rھǂ%9h\ξ.;7Z(PU3㦸*BIH8<(6ꂾk>r~}sR2ٴH"%ZRy2Y:Jd01T#`4DsdR 1$7ELQ_`}sU$f ;ˮ)29Vt9ѬOڞbUZilH:#Ö,f5}+oKŕ / Eo_=# 2!ہ &w*%,_/.TwlUATWP5z]AdgW~JvR&-M55SAno+'26̧Vuo.* LBt/A]㽌 ŵbUq֍˥?sa ]~\ =9O? 8K{.7Z)deX 4LI T*#?Xv>#`oG}C'J=ɏW^7sa}7#^4Vfģl3 |41 _V=*BA)oě E_;Я Ď{%O%+/J? &>R"1I0 eU-_\B 83}9i=Zu|)ǘevCfY gkl-6yL~fY6yK-髼A3)<*$9&U\6hLv~b"0s֛zgUN)'T7Uo [2Vgi90,~U$1pRb[~Ix8ꇃcfOPAsQ]n~(Zk8N(h 9̈́ǃG8ğӨ0e0G !WTiUcIR e{YDx _Mr3|[w}nA7=H!=91}+ybxSR+c(fciA./efb$Ayxs<^c v~kB-)RI>NwVЪzM}k'o|>\+@2 Ґ#i&SX'Fcpt,?Sy8Ճ#$QT~7lpv6."y [Dx9Ējz6^d a= ?9W$:֭1w Z|ǾeiG+7c ˩"OA8L/\7 3J^1ÞxO^pSa'?v@LUykK@5G.9wtOZ9K&].ġj#l;e YZ3{βe* ^hZ W}vou]*>D~I#yLJl;$yP _r ;q3@Xo°O3:)IV@rP'C WF|peT5&ыY# 75cBeEoiOTE<)I-b#B[j;QVזʪ5|!GTTAPА܃EcJLgOᕈ:$иy^\ ΓAzhW6wR81>RȌ@:|orVX?H* j"%2Ʒg_[ֈ%Kx˕. I 0h461;py,CDpfn"ykguN!=%@c :`yNb~^ѓw}!cS1"OeQ(QSEqlڦdyPq_;ʇo./v=ݱɈ!Q!-W$Zl&,+kVSN)\^oxJ#ZL89/R5 Lgw1|Z)A+L[|ֽpq?MlKU4]`,Y2姁h5 ~eT-/n|̒]s*܌!|x8 wfuyr]w,>V"}%rr?{=Owiz:(ze؛<4siXȳdU/I5#V{C +]yG iݟCG z?~׏3|,(И&o))]A@1:jM^@*M.M㐜7lD\AWSxu 198TjQ!W=m}υ[UҋvIӺ}k!"p{۪-m8P@O+mƪi&&rӳ>CaıCD$ O /r#TrY֬c2УڀN ;ܗwmO-QNNŤg.zTc X+# '|~7Y0VLFҼI؉:21MFs1o.ͱ4}w5{0l琬;/yEHswK#Ѧ{O4l?6Lnp/=(ĀjwAeSSjߍ'^X BE#~<3- ݔut}D4&l Ju-F7?r~  ;}VH;;1U%)«+4= D6ysH&8oƣ/uWB1$ }ow6T iL,jɡӥ*dʐTLcG,(VHRpo]h2)ߡna1]•"v$%w|RɋnMY,7_zl"elq34>|ET)3yHxkRt|CZUI8)eNtq't;~o~1 Xowt,"n)zvWQ\WVmULL>hݖBK\ퟖ?ܩu2eLf،JZl+,uOyos\X] ^;>BLt"s|".|W l亵)ݙ( UH>/K6 v9j\m7]dCv G䝆hj?{񺡓+DRJ,hWjp~ܖw}}SfyT%dQnmbXC amvrj|d|cw؛GT]ηGe璋N CӲīfv2SAOqawOد7Aj?xt?^sד零æ@X֞3RcqܨP,Q__j:<{g#Eͣ ҷ_~\^o@wԹuNٖ9k`i ;/Jpz{ם)SdM <(z^Ao\;G;i^G Cf2ҟ)"8/;Y7C4UDfFG}%EF%wSV&jz1xdYXuZϴ(;os[T(Z찏ٮlB ;TiN`=&IZ{՘T2prYTmF֝1!ɽ7=`t…JΥ1}z5Q2l4;E/j/U͌_g}"vcD=ڂ鞛x25$5kVtUs|94اrjƦD-U0h;U xV\׸SV+IML`?PTw[`.}F笟&F:(,qBȱ1事U׸mXI3^է4&D( N]Yܛ'vmLaԉ ?*9 dVcWBkh>jK'L?_6/=D; Lәf:$w8 I?Cv-pV.uq#t;',"V&kJ R3fA9 ~j؈`~VέC";y1߉L.?g%/,mԪ*vH\7kyPДZ05_xkDMۀN"ir!1jWued4yHq=:*aٞoZ(jR)˴':?Db__HUn-=q+<3M7O%<mm܋t`w_o^l9eU|^9f}[$q9]Gߺ'#֕?qk?O?;$h`jO]SnvN>'FL6ЬP솹[hթ7nTw̿'v=z)*`;z=b;.:?Sܛ4%/+z1Cۓ\ewV}8TX1U삻EW4JA@@+~l\0z :nC 4ѐ> zYpt ИyF'ͬCNc {68ZWi9w}3[Ht2$,bY/k!/PcuGQ_r;0+`MO%T"V(k7]yqK{i]nWE*-m߸km3d2z㰿ANcp[LQ!vX}~@ǟh:bV4nX號xG5;l&gJ ~X?S$0b{EfÌehzݾ1 @#)ĺ&vٹ[dݰ2*Mff %e>ynGh%~߫L5tX;`'KL*r>\󂶫y,aܠ/]L)L1e )Zj_7Fʠ^9vxEzMjޮzr~ R@-z<ÏX_$*!H $1ߺ1?,Z77MO5guiF#2|0{o:1z F x_=,aZ#;1{5ƚ *¢ϰ\;k#~ '`o `ZmK,N S(절8t硍rXkkXryE!zm MH7!E2,<_Jc}F֭`glUԋF084țdہQ$uPQNQ䅇W谼:uk8/wS|VR6 ,7dBbZG@ 弘jU+XNjX.wQrb2Jqz _xyrI3*38Lo% ^ƥ9(BEѧvH6Oؼ=@k$5['C#A<.\ ,#n,ˤӰ*A΍aL:8NGt@ +'y*ӇRK XE4Pև,(bgنCbˈEd^~ E=Yjp=n8qa޹F+cl*?ꩾ\-uLQ E);QODg#iDa@I不EJd x:FQF۫my䌑R8 u8,d|Bjtdo {ڠbɓ-iԥͬ09oF*V_ew /b;dS^-S8l4"`M/;?(>b3;ڭPxwJm%fIK.vVno gH|ɍf9)lC98X} ~.]}ƴ:Daz֛2$~ XS8QE˾TʾQN\XS+vuZFn+l5„u?l nN }#@( '"#U:%0r𿳅0}3Q63hhL.LzMB)& C\ua=: 6T {rR%ߍ#2$ﱫR4Myw&.b:VyP}JYM3LWCoxYTp0_6^ę~넀Uב-m;O^w{P?sRr#}x oRro۰["4yAc[}MP4Ms IK1H /~1G$ąK7is@Z = h;?JjƊ9i<F9)z2XO=b t z\5s $&"!%rsJCέ'0! 67z30da,ӷL,6,)(VXQ4N-RW4h=تcdA]0C9D9IHkU^-OM>)5>YY m*Hueh&%fZFˎʹ1هh/xxUjF^k:ĥ3¶yT|`W]:_(~v"wiݿsWӐw&Ȩ%d8CBfaQܗt~i8$\_G& L %VJ9ǛRmf@f =#V))v~rxMmWK3tx)NR9G?tŔAD;4 M8<'QZ=ρ$ElH%Uim ,}m v37fBDIre=0GP*x)ƚ} MzY& 5|TdͲ05rwqlxhn?`g3TӀ0Oh*iVt [7({V/ڻMA3@ez!Cނ  iǺcX:CΥ5ʕ(D` bBְի7` QU<OhR2M (hkzz/VᲬ ~?;!Ńe2%!2:4t@$%T^wackDͱ$*/Uj&ˢ?e]ZXy,fw]OFKXj=aS19e 3dX̜Ȅ ^v_AE^J3g>a|ej|#P➳57d09fYZ4߽@x(4t+oKj+-Fu/xo¹ 6~.zj%NVU1mbJ-sn(ƍ_gNF@9a.` GS-)Ţo:x6󥇒[^A YxB]z4DLO2<;ױژ~a֜^l4nQ s~Aѳm1jIE6$bs|YP}ôQ7II-Z?g` #bbiW̐{n{rRU-[{d@G7tϘU@TF?*Mo;e`m=%}Hlȼv}xB߉: O}~ZW`Cm+"ouYcu-Ƌ{HҤы:DW)膟ȉ_os3NFd↧52P0:֮m7,ȗb\zm5t?!VB8EJ386Drz L491G$8x"Ses$RVvV,~jn1{;vv2痲abY$ 9stlx:pHjudnݾVS{IЂTJ aM;KR0I#~?6V =*b{.zGb5! Dۅ: ÏJ]&߰^**]`~!zɒ5rbcl D8c(;26gNq=G-;NǠ vzVofP$Z${Nb'ͤX$K=/&IEw ,?χDCwah ʟ3H/t&"a cQgc"tB]_~[}LEgW11Hӛ0&r'U!9`&)F3ft#7&#ͻ-}!M>}V.R-AVKNLXy..U?cНWHh\qnAжL7S˽G6t3x?rP`XiMb?mY |Ĩ !Xids'ruj:Fu!K*Un (~2.]\4g۲ C\#F>h_L!yR>DF>dͥ0ujG/#J(EAbh 2Nwyڟ"38K"0"īy"O;~z=es`I{_po._ʂO$׬eSS#3/N$Bɾz~;H;ߞĒtc :<|gnj?Qo1]4ƾl{|F 1Għ~Jdꆨ.@i1u*0Afz 6Z8<r\Cg']:#xy>+LijzB1!oJ&#vdp:W|+77USnafy'sG$%59= m.N:ds;AX:MB8 *z^ R6WnEi/8SwlZ>t![F~k?B= 2XxI_U~PxJRu4Tm%Ŀ-R!@>7jt->?NJk_p/0$  v"6{# b^rȀ~OUc8SUUfؓZR\{f4LX!5iɷ,kpR [13Ut U81˃Ǿo1bJ?To 6'*d=FMgahƍn~ն)ʉB<{`rH)ŤϰQ~}|nvGnγ]شz6U .akcb^ez{\u6Vrv;m8*g{+}m?';%PNj,R5q!*B_Y:8IV֎I]vD( 3\4Ry, V|ľioS /*r`NHH#1{ƣZ_w!Fyl9+ZfF eG Q4p|_-RNTYM8&٭I꬗0fpFMt+R{EgUNq%G`ìv#v.'紿`R eTAٌ!t )g@3Cli8YkdK&j!86&%H郎 Oc#m{ݟGTlK=E'2ε2GnzL^zL( rZRV :\SS^^ /^oHR(rG,m+O:}.:e}ՇH-P-գpB/FM".l)«@!ؽP* \`SR\j~ O6F-ʧq[@ïFT/7ja1O$߆F4C1۹c% xoťQԼ ?Z.~A:xxogL h| 54^ Xvζl9~EQOOi8Rb|X𔏶ev>jOd^+DJ`.2L;f rZ-1ïJ9lr5 endstream endobj 214 0 obj << /Length1 1408 /Length2 6354 /Length3 0 /Length 7318 /Filter /FlateDecode >> stream xڍtT[6%% -Ȁt" tt 00-]"H*]-}k}ߚ~sg?03hpX,@ 0('U 33낑YGaPAH&gDg( E||b1r.`+@!eap-u6KvPLL;@[CjH[DKs@f !-(cms\H[6;~ƃ е#:0k9@%@98C@pl*@cǀ <+huCm`ʃtCr̡V ! 1@N 0GWuK8A!*uP+YDO Ynݝw[0W矵5je+gG^=(, !B|||"b@ r\ t9Q% '@AޞX- Ot Guv2Fi c z zp |"|Q4e2,_gk0C)`GF|B|[]o!GͲ qGҾ 56}3j +Hs @m _"vYi5`0 C=(n qG=S Hy%t psw|TQ;!'5V @aH U7Oa 䌺uyxQW.p8jkrYL,%^Un:qgxs|A^j ~"x~MXz[} NpCVוiF#o2]txܺқ^N^*YN΢D9dgn]sASZ^qGEL0g[OR1b#p9HMfҫr{F 4X:X(GQ3QPax>zrڳ| iyp!bP>o4aag$WXjPs(`L?WYrS)Ro҈j@DL;mF6#%6?i&'ԕy#Ijڔ]T:_e~.1)9S>k*"'>ɫwpLg0RLaHӘ;DيHnAQLfi~Z#ml,=77Tlk\mvNp5O>QJkf `Vle8U&4HlZ&424ŀNY+ q/cҩa2+Lwo1 =eLTC/ :Dp++\oY?= v6[@t󵛰CōrT5Ōy풪_Ϥ+F*͙jKXB33 $qr/;;x%WL:D'F=pXŠ,&6^@gCAvj}[6#UMv G$}Z P U4^?$}FjBǴ{.SOeA[48/[/P}A C`f5+9uHKnj!>0 c}Za7OG?RKUJSk֧1xu j6l:a` v)&i5ܽK-/v`PB3:Mt^1vmcLk8$3=7jVC$۞VGCCT;>&g:lb0W!ǻM'yL^T -҈!w46lڵxP+m&1ǯJR44?mkzO1B˦53ڎ_5|^lj*亐WB^y̙wdJn=mݻz׺m˺W_ͅq_)'4RLF2pWB{Ps~ľD{w_`[ iӖC/ 3N_\|MRM6`J殣n'NY7e枞m~Ҵ1t)}>X^sE/7]#N+?&%rlCI Ir>Egq8RᤫnmׂO.3z6Z=֩6+tSmh q{hh:::\lXza Mx/ ;C0g%RP黖.')3߲o}W!ܚHDA?,DV^M%N!-;flɑpя=to<לq:-s96$ ARK=h!QnZo2֫bZ,HE1t/笪ޮa.\ ,)>|]y.s2 C!jFZ'M^{G ^7r{y;r rsHkp(C#Cwk{d]ѳKn[e$δ3R[F=; 4.lX9&Ns"~}OYd\q}j{St+Y.GUƊC;ẗW VD_r:%SS<0iVut 4I!ġH#?%lí]6 K'jgt%:N4jZKi0|v|g5]ԫ>u*͋g+ >e6r,go,"hIjO 1ػH v{ާU8+J,>F6BS~ot}nA_a̮I2mg ʼnw'@%K GpyTUI^cܓ7|^SKdNUo1tdhh$> <55̕HA A4-RPUZV 4C;IqIkIV!>FSإƾS,=}nZ> G*ּBv=D5Pi {),V^ $A-]0kOr4uR@(ZʸEV;Sddy4h_o4θKCa\ T"?H{j3-c)f!'xi,.p-z(@x2_H$ZvSYNh|M1Wqa3mpڿ0z\}v yȀk,fqieƀP]: (f}GSSWz ڏ&)tX#ul*k&ְ&VWbjj_7Q$% 2>6  ]>n5%\`ydZJ( L RV\q"e_pz SX#6{3_M/.Pwsޣ:~lV\)($\xa~uSrw:=*KpPZe+Hv^$C[BH[lw/O.mTaw(W ;ӖfREQeW*T", h~CC饤g,L?< ę,^.AjDT 8gmF'D::D-Q Hi3t1cPnq͛AI-R}w{Ga--t7llCŘf)l$؍cvoȆ%9dR Icp-`; ˤN-H?)Ce0c'ܗ')55N31(}g=T+D],S +֎#c+nY'nɷNP^~gh,yt!9p}mk w/8NLu9Nɧj$G8O.Wn#J|efSUY=e ULi={,YL?%k_|l0N4>l}i,yJnÊQCȌ 8&}BۄmKn҇schMxѲ3or7}Ss8"Jf$" M r$L13pCg9aRbE}p:, 1w-mQ:YcJ_Ky|GnbtO: Eh}-28̯v80)E_E0|l8m9j րltZ)k,Ɉ<|'z}w616xSvΨub5e\FByqlF B9]17,RH4첷9vjSt4v;iX[ee[BO֍> EsK/]Q⳴2[yEws,*l2?ntc|*$~ݪ(*PQ9sdWݻ2u9wTHozUq)Ωn{ylcVs Ó)?.=}YCOΟ| cPPM_l7JI +/ijp 2bk9%tBK~fݕ8xǬ/wXZՐJ4Y"GY`gSD_v.V5zeP'3#'تUqƓ6lInےVtg6!^P?\*k JcF>V[q+?m8_ |?mFz6~Aw:Z7C_-Zj!%FfкCqnj1m\F=3A|ejuD@D͙$P݃cط֗ϺR:~\1O,5wMJ#o/;YJk\8s]^5|sT~Ey& 9!y渡TpŨն]t  1T|bB?HkAH#J!"ٸ,`Asm2з ,-[rk4Fۃ#9Tԩ0v[LjBM?׬]Y:%,V5@^8wqškZV ;ACmR/{7Ө6 xH'sj7R_}lEo\ѧN&W\[~1%K$DDz> 11L-i5$nz&nE_+'E8ZPl2 z:bE), W#X uEdAŃGht+Ǜj儁9z/YV kaC2GUpo2AS`?!{DVunu'y~~ApyJh!W;S[ױ}L@IRDU X_f*h, w|A{ldkJoCTOѸ19UX%ڑ4o%W+՜COK4u&ZQ2㷍t.vHtn?QS/ǡr<qVr DU~o )Sj=fV~x b[,? $qL(~Xn"X1|$IN(y)ql XSE4cӹIa}4wS U >&|U834:G`uq54n}cߞ`_;oJimk/]QU?jZ jEo!˼+;=~HvPLOߕDmZr6ڟ{^l_RxnH;\6F>qZvf=8BS]N(~_cE ? d_w|N(yPa ._3#eߢA)tl&˴VuÇǹ*g>j?7yR߆?~q:xtuW* U4}DP1gcwJ>퇏wJ&-߫56{T"lUv9e!rm Uzƒ٨՟qǸZcYmnNŌt1BZÂS^} Gt^a#-'$hB4I5>NqCԺbǢ!l⤅}mA@>jW<]`"z(|6`AW SvC endstream endobj 216 0 obj << /Length1 1869 /Length2 13106 /Length3 0 /Length 14267 /Filter /FlateDecode >> stream xڍP\րww݂[p84ww wwwwe9{{f}ǜc,hr/ CƑ *E ONbh\ h`=]&fn(H;YY<̜3GG[FFk5 t; 7<9@/=.2788_d @e2}8f@6:m lmL&V@,#C+л$ݟ=2mEA@G?3ߗkirц-PJow?2S# ]Hf S/[- 3h `ln0] 4>~?~>a +bFy%u%yڿ[RD `г3YX^G:+ecpU9dgo,yT W&v&)#ߊ$Se76r}r߷@ 6T͝V}mL'/+X쯡KǺYA`LLGcF/S|_M+nc2cX9nWN49F E/ {`0 !8"Q08{(_b0*C,FOg3/bz?HX[1 {j]i/db0 ߣ 5Wj/|/_^We/|O WeOS`^ệ2{e {n?粿OϷ7 4_^Z?V O! |Us>T{e_;B?e)~kfL ^o21ܥB>uub9g16žlVrơޟ8G\Pav Cxƀ>Ŋ!Q)R#<;)Ep#4qO(q?¾3RJfJprd+sq"r_F 0KCW ]{OR{S77o!Otܔ6 m 2ݬ{rrXl- B<ǡ:M}8ZU̔33r!3/ehU |=mT޻:jȸtz`} R7&#EH ܙPKګht7MQ_K[IC]@vV}浆խ`y[o?PNw_y]4)7F9=^Q~U3= Ux(;jzTf&4ji[hҪa&ˇ﷽%>ct)PemZj`6F0ISVNjO8&T~ Ώn H0;:{T F̺W6rǞxj/z4N<=!q6(귲ag<@*0"!%"$ZHPd2)n>m-XuWt Rc D[;:t'_־7n Pr^A{4~x<0v? .naJ./9\9~*eSApS1\Yq"u][ 841j@ο!<TAǹUCeR͂G.GB+HRֵRgiSU2S%2/! NC%V/lpu"{ $w`7_IOBS4uE4WB4?zB.brK6hf{'}MxxԷe;^DR/yKJׯZ88wfv=笗1P:v #,U4"/MPHY^:/>*QNn->HS+ ]~G$$0W0z' NyDӒOM(U9sv''M:.hcO >a\Ub88Cq1djhʗF?XPHLC9xJԷשϲ7q6hAq{)9pȸ&r0 Js+ƪ5EnHCmO-+f )M ː5sf-5eI>Slic;/C BWGp涱JӮKd#p@qu.<<Ó沜av]IH?}~Wh9:EԴ] ^IlP#`1QͥTtɌRnXCix"quO7{X:=c#х8_N\Vv* AY,|3L\f^xը0Ñ@c4Y~T&_/YS  @w5΃W.V3 =&| ֐LO+;2,0L%VzH0OԯI0RWV* b1?t=F)e \E[QG| xi ^I3޲IՏDȧV䕭ʐ]lܧbRQ<_팻x/&12uGog!vmUq j)Lڳ%Bԣղ41gP$3B<~xH^M|]d^`CI\&߀Ok:y<2|&f]f~1S)de#@ULa WZUb[N"VW`K׃K͗ʹ4J{И`'>@!O͔P xnF f>^K;fdWs27bղ| yO5]bgYg K$b%#k?Fi@)lƊ)j۳nԊ׮fX<{mn kXliٸYr:sDvz1ʌuR`s rPB<ݼ2k}1j*8np%Z  A~[ApKψm^^W" GԖ"q\٨7`bd4׽VECb8Zg%ħe|@ooؚN2vn{N0gfWԖ5HG䄦X^OH"oŹ8d%c?^@iĹG,|-YF)"M0Lɿk }lPM%?L#~&newǛn5VђPd5\UA,ʜL[ NVʠ``Vz9 h;QAvrHG!$p5RKíZlpu[\ھ=uvAK->X_r4S[k[?1^FR~o-²? IwF^*] txFdJ]FDЧ^Ah Z;bK&,.-/1yq~_&L_Y Iig0+xd6f^xֹY̗=?s ?sY l9~6" @#bSW=_z f<5:A f{29gVk7Ԋ> td|I/p |Zrs7ZtE͸aGΔ \5Jxz8ΌƔnպ{8kG\*QG Ⱥ.%[r5D8nڏy(Bf)/=f4^/!HB !&_gN*oEm Pp՚c"߁GӇWzx߼gVChbMD+c;~3/ۓl\~=C)f a3њZNRƒ_Ij()^u4ʝ-֌1(HxB^HHC'uG[Ɖ rLnr1Θ[8TWʝgQ 9)g1³OW#WV12b2~BDM~<6gaL]*a[U0Rxcm[>">9GR:+!mONfMx&1*4Jj͒~*k­uj>-Oʭf7B=eVN}74E@¢YPrT(A:'8/v95Po|4vʹLOXg0&' ;=ojZ OG솧,:#/NyI?3Q[%7+g)_L O3YLSf|y; $rMifyWT ,gujB3l +V#}m:b #tjZND4y55_F3E~}Tl\n8;OoC*֮^zE xV; %vZ QpYC~sc[0&ƴ@Z >F/7Dw8u~t®Ӟ>ַLhjd뭖41l1G ȳ2Ƅׁ{R~C; 59oL s&[W&({K-f_T,f !ڰ0[ &AVUKUfV mN%sA1KqLylP3nqW*g_:_qB .>[SمR${pIU 9߿~}}* icgAoMPr o7 5p<ƦzAa:8:,`w?=tHOVtCv+"X/Elx½}7 AcNE 7Ot?QQ.y˅f~ſ;$ga>d |R4SXdB -^p[i|A]ߊ/T+vs#;Hf6}˙DpbT6\~ϖ`R-BC:`T+Ik*c+}7`31(osj!S]zFߑEr`h/Ώ{;%x$Jt`+;Ό>=>sL#0dyIu Bf[hex,}X&!'3{[_qysPHN{A}G,9^[Q+KpL>h.ݦwvKg(]Rn,"v>گYޞ;ub~Hrg&Q\XcԑO%ִcFo"G:k4``BM+ui?vR_~e6LvYJс4bZX 1g ,R5M7yhBFdGJ^ݔky/_EbJ/[% r< iLeE~XlZixW"fx֓\&5 >F]!ywv8O3s0V~;m }LվnIZleo> Ry!G|> |\BXZ=Z kA-JBsqR|>fu7Lqz(+x5$n,ؐm ] ,r=m7BZJBk~Kr 8w#\N3ᄒxxqHucF06o43~?Twn(hai*73۸K[i({nq0| ǣ{;g5P*ojdyF׌d#j486? L8g9s!ͨOfiq?=ـ\QL󄗖CW#W_k_B؟EJ?7eT+&NvaMy@+֊R1ddRW:*\, ^T8.C&H&gP"fFx:yY'9X37/S԰}3ͪ&rz6?YI9ӪJe !Ve:KYn$;Eۈz4iNDD.z,y~U$bMNrE;'8lS鎭 ,ɓ}3<3^WlRYglCH-SToߪ,T;`- 3;sF,% ~eA%Ro(/% qmA+g?poKb? :h 8+mR|trK>Kk}c=j2&!j 'E~ѳQΰ}eTսt4,Y^[(f; 2]=)ZRxzNYpwG8Yt4qL.J/}O[o7[o6|b^OuPv&Ma{I?z3zxdНJy$:Z" _o67Xxo_dFup%!LCRb& NO:+c5To{x_N]?8%JSjf@FF61g<[E9$f"!WOO{R}_!\X>C^rv6-WUݶf: )Z-+t7 @[,B,ɂ {bIrsrN#H$έb2PXתf6+&>ZP|8lA =_3Un1/欭M YĘ$8BŨ=UWܩ"*5 YzAtAMV$<ӛRk7)0!;7* vrNW~e'}e^dI/rWdZzE-c ;hl##MDUAg G1ӣjWmdH) 0)-t`(Ϡq/5gz հk]߷Ud^7 4E1 z ) \oFyPf<^uqc燡55F1Y*$Pays/LWChy A޸\ 7[`j]*yvUyE (h/eߨ=|n9LC]ot5⤚nEak ODqM'1S@ +D;V19+VA K'PGM!pgn! XL_զyg@bAW275( )v$t|?{,T&uƃezc-[e*%`(ki2BK}=Aj; `\ZUuuӂ&AoU]Z+B|䵰0ҕquPdb)"g4wDKsvQ|8\RɦW3⼛z\"  .ǖ=N4Wr.> 6z(u[SW|U d\ nl^kZ5Xʵ^:Giord X]%XšR L.+ܤZ{\e!!`2.\<] |߽Oj?eik&.,4jS,eal;P5K!5o&s##ےtb'H?qk |Jde_9:1kjz.;z#OFs9V#F+X~݊Ǯ3J4mzr)2_Kţ=vN$|(LKv \?}:e/,zo=U +3ۂ2L 2-$a(];䛭 ^4ކǕ}iY]8Q:VbReVfA[Pf/ot?N򑾽LʱK`I8 -u -)Fї}%όU)|l8^ҊpeڜZ$ _p1 G8 Cyr1k6-|=* XH|syk=,\V`3~1Y+J;H" =x ՟O0O10}I+N{jEɬhk=d@ޭ%^RJ܁Z~D>5?>\:F # W1Z<# #׭rtr oո`&A{ ? Ȥ=lωN)[neA0md_U+ LTR U9x*³t` O[ nE~G!nnrG띲@Ǧ :䫽Gԋѵ"(g6{iSI͛abwq+Nəhg#;T^?yÕnihmj`: 'l0'HKG۵۝wx_ nRyheuڂta_ҔV ΢azӑZISJgNYM@LK*pSo`N\$WK5(C"ThUu0۷G58xziL2 546q<u6UXafNjGJ~ D þ2P ]Ͽ+3cMyUs}F;[ E c[vhGGcB`;@pʽ2!OIZس֥W/{0z졿.RMd-Q}-'i؎Xb?$]f|;$Ygeth=F!#mF|D&Đ^BR#RhEI}f>GƏlg64# )c[e8/VFLJh6]8O+aq$^ZUAm?| -Rw~ y gOR|_ M଴hpъ&I/SgC'b,ה5).W)ƩfE[F_GM4]ap' `EVyJo'xUA274 c?NUp"<՘͢p,!E=@>0M3c[Jh4`q;rQj6=d⭕lk[ _H9^˛AvsLge|]7qdW?FZ`/ZWxh=^U r/s9m(׹BUuDBFy:Q%Xxk~4 #V?>9UiI?N#~ x}$:ۓ4Ϳnػ;ƋZ {|ͣA tA7?tk.Y:`<]R8?b8w}z6U$_QҦADH,,3C9'sW1gJCjaKZ6*&T6cyx q!bEmT1 2cHHF"?`7B=sN>bvѐ]JQ۬ 1V  USˎl7 Fsed5)!wUZ#} ^{WϧռpX6%HF};Q_nޒ8xELUp"+FoD.x y+_+ "7'y#ȝli22jG%Ⱦy˰4LY Nuw+d{KθJvh ~jQGyzBF5 aW.33vr^=V0W]ǜ);ي9{Rd9i(]S8iԳd71: Mj[/VWڅY*~`4J+ 1  zӅkkx/ %'`}[ G^N0]^ aVkad_ɇ?zjs[( :\Yq(+q \NDnZ]T vg dJ_3<1u,h\Y 0p,[#sGI"6̸{]N{'i4 6Ni$]U=^1`4Z,e<麖r$3ju1C @8%׭aj0cB f ax ;oeXz Xՙ vT'9Nd#)N%!l A5;G)71>EbffRyiBq鎠l [(} 3^ W5F؆wb&(}rm(R]_-; )wesBT!E >^c8qidYQ2t `JeNF!|OuM]&DG~TRXYoQ.ib=fg*].f]`X֮:,Fb['sܵ13&~[Ht>599P[:"G">, a5w &m*;j?ˡdۃy e&Lj> A[ބ(Y`wnWEjvui:hR ǼDgc H0?)6b x Dҭ`50/G Dv;&^z*YL&ի5v΁YʄI*C+OZ5L(fy g;*dԊദ(c~>hWDDMIWTD<=GZd^{\q%Hs.9~WZ>_յ4n`QtU5AއE$&8>D gXXWR d4lvsql?5WςfШU8S糞q;JC?@a됮/F/gTӡt:}K|cG%p WU 0܅ 5f!(otf3j2(\9{pDW@z(;R2wTBaͦ러y+?YLȨd7 O>ƫiC|E"j;tVvҙ 3 YlW3 R>sy M^4gȏSt3g9dV"gp"9Og;6^ݕθ BPy(nj>8VAjuoPV>4QafM DlzPܫWt} nF_@*j;AܽqCd; ]4x;rx@!>T ~&lJܓe,EG4jc5少9dcoS$I\r[*o^acy!7r#PU#V6)ؿ>);tڟ4R"5Bayޛ8 Cxz)On]8VA ҉☃2dNRul#K@!{] !N7yJWq)T>)#̧nA?c^y6*՜)HD ('HuSD4\}P0mZ+:R HkkmVmr gEC3E)elYw /k*zZh(9xa㏉Y0VZƶ7Qw}/c*YP1y͵.T$JCޭ(-)MѲJ;0&8h639< endstream endobj 218 0 obj << /Length1 2292 /Length2 13954 /Length3 0 /Length 15318 /Filter /FlateDecode >> stream xڍweTk.Nb]Kn!{"ŭxqhqHq-N;YY+5s3Q)g5.l,qjjlVVVVv::5+[  l/"0vP9W[?D?@ ۃQNV.H@o9@dejlP0vA"ރM@.^Łtwwg1sf;Ya[XTA '7wEc;?ű,V;)bjor@@&0 ?cۑ_Ʀ`;c{O+{ -$%07M4uC݌lM 7H!5BgS'+gg+U4ZLlgwqFyO?GlcvͭbTrtJY\\9@A<@)~!uz;R@V   `G"!Sde !93zu@Qiii1QG-&x398l<n>n;R6O"27Ҩ?@=yo_`]=y9IŠ02®.uPCS5Aoke]!k!jomf>NVRV 3e+S˿oﵳ)~_jlK5S2@U晴`; 0vr2Da ; f d@L }`'Gߢ7((a 6Px ^A;?T8 > gS++S+'SW#rC4C8lA.sGc_|>$)r[bg 4io ى?HB@21rc[ vub#DoF7$!ͰtY B*7ߓGßa\rAԐ!'Ȣ QNH vl:_AY@;_j| B/)_T'[oݦNr]CV_Wd06 i,Jμ=[ŕ%z"M)gojp.,tXd, X "n(L$K"?)72'Ttc8:{JUJ{so~)# uJZu5MݽAm:1C Fq;5!.bx(*S͂"~MܖN40l F~MpY@ PӨ>1;*IL3-$;a{1')b쑲zpߴiONgXcbT?~hsP<.LٴPU^D75ihrQzv8jTJFpfK_鑘dB,[鹼 8"ƙ&Iga7j;6ms4A568TN$@(}ƙN |?9Z%|rkJÞyw,6}.AQ3H]wg&ˆck,Ң*)aޱY5Ls+[f,K+.)wg*-ϦyImPPBxFs)EtX<:_#{^oPZn, ̦e.\|42}s%@2?f7Bᦦ۽sR.\pF_lA)Tb)'yTנvr(ǃC' X؈x5'W㚯ph_:tE$y*-dyavI`Xx(I?min kV-yɧ)]1GO,u_ Db?tRK*d|ȥk8aIel{{=+HDc2i|:geb]~HW_2'ӨOFcC4VxgODW$FǴAilB/) ~<4I=5^R9V„0 Gk U ̓>-'FkMF$bәf@ˉbT'N3Tƣ,Kfzs|z(H}f2Хy`x{&e-ԃnr×k뾹[rOp}kңGl0K 2seds<݇ Bf+̢Gٮ:j7'K- >woBٮTU;ԓ7G~9W(vv?0d 9*:`,HG<$ ^u- _T|JkJ\!M94-(MTB9ӤL*H0K#2'eB~.6[Bp jzH);&G"LnyٴaEgd8wNDm x0]'*DylkU2M{z:d'0Y [PHV J7BKгu yK*Zo]qUre$|ցocMq7Mdjz@;QH zqF2CEl5 ̖gQZ}! Ch-R_ڲXg7jdy4|zmw`oUvuzFd: [W~4x!pA&H+7 XQd䂔u;a7 P-uN~=Pv?+Nd?yOw>f ~CSb"$Ĺ%VyV?2yB:3뽢N~U+@}2?)yD8Y;;ttDAAq<8-Y^І]\ 3{<:dQSxQ^g= {%Sv-nqe?7YJʅ+62i& 'f5VM/5\{˶V t~`M(/>%|4cu,oy = pXXRq˙0rk N;+`QfՃ=!Mn1ٗ3[QKBm|sr1(GD>~~ֺZXK>#"çx(dى+hSv(ӔR*I3ƞtΡzbujtR}mZ^""rΌ;Gonmx] fD(5o>W2`cn'XzӴqHkt3r\tzj8Wӌab;JWv #"lRh ;ʗՔq3mӻ f=v7(̏ĺM<su ٹ!"Yi58CÀPsD):aA<™q=nVN[1^[Hh>cj^U^sx S< prqE~\ǚ@Z6h(nu}O5.[c0%9g0!}Zl+P;X[yz Zg|ʌ}4?=j^{4bVaR.c/wH2w{[ Ռ(Ȝ1 ۞ɑM4~\$"$ځSМeE5yj :ꬹ/'Q3,oA[LQ-k$u)/<|n5:sث{BMNcŖ|9T_H?O}?ܞ߯8$z?위T#cq= hsK=R\Ԓn\NT>pR X㫀ySUuq+Byʑe2[d4Zs"SN# e5d25 WnO B&&\4tpopzT7nmGwnzX L!e߷uV;lI6v~7;]NWR\TFeg]1=/q{k\ 6[sСWscDN/e*rO:f=66c[rQh{)Nf 䪾&8䉨I(xs;ei=*}=J+S2MJ `榈j{Q}]i=UJL嚝)'~fF-\66ځZep&iSc=39M3՝y~5ˑ^!ݳ,)i#jAK2dXl?;BK3ƱlP= #}BF*F~]Ax7)愑^%s¤&(s2CM$,ݒ2bÁwuʇ1__jc>$pz,M B F?d#(U}k. Tw>2)&cljTշM9X] ]@ľZmj֏ 6xmTt+/s*ÌK)囦ڲM9SA #Px%:1ԕYG8Z?xfJ!౭&q9]xLCr6CUDF~oeQcHxs=Y7hsм6.׆ǷUk*x=13=E('G.X8b`zxO'>it8|!A6B Z4ɂ#齍DVI(X6@x+򲱃+sck/;4w픎ێDT\ǫl tQI]Y+dx-F FgnpM }CŽL;1dOS9$5@&ѝ6U[!jDKXEs{CΑu+‘LRk3 a75Oܬ+kظ:Nh }}%O!N%6t7 ^θf4 b}jÃbـസTUU\}Qs{Bڷe :ҍ 9M"QK!ֻgM]L'8efߝ&$[QRD 0I׫`D8_?Uދw(aFtkLY^\>=zIEdl-OV0y]I %Gx#"C%SGdr@jBXVf :*/yW+qSoP75bK1\lC17K>[|iUʜ%7G*_xsk|RY6ZAQL˦D3w,P|a{BX0y~?MJfޑt;<]&2zC0hEVN^Mnxգ Fh5tO%lume)0~Y ?Мyk2,f^!M'>-zq9cڄGU};)!/HP, C/y6J&}Ug<_b\d߀tkfF'\$ѲnPA4}SDbUúY!BaP`?vj'dYQp_uӊ4x.\='I1<]IU*U᭑tYGZ-- :z$ 6!j߫m&N  Fu J $❑tɲ~9]bn {Eϩx?}>[NXVx̐'A[y/q [IjÂI;7/MM7W(WOk9ym4YG3(Ωؚ?J׊9T+Gwm#)Oqh pTseR9*XzS1o<l,U3.N7;!1ꬦ <4>P C_SVSϪ(=%ͨ0w06ͶWF5b zu,f3z8f[J9G1dRռ(n%޳y'[g^얆oxt';kVJȐن;hLXy=zv(aJt{o(U.Ƴg&&-Ϫ Qhk^Z=ڤ'!Imމ5MOx/CH#B )p1qtig~1(kۊD[$4ۼtžcG8cIR/F;%m)wGQE~SgE_U"AbܞEI}쎾F0: Lɳ}Z@̎,NL 7U{7Ungf{,05냋[;]eA$gBK}c3.'{Yn! cϛ,GX$S|C9js ,⅊[m uN[MŏFGQ\gl$?eT:q9]*}g$b&)!ZΈO]UF[qֳuZ']z(]x,g&;9 Ah˼7+P\ի:6W"彷K2P>j xߤd7qCU):o k@&o=%wodFxLzq^ߎk]5$hEžD{1{}`؂ [ 9M' } o27oJh@œGp͏Ƴ&鈔AYɾ .IZrO/8LOG#kL|-TLU* P!BQ#޼L!rUK JB&`;8-lݖՔ{ ڿ]7I,ݍ 6.* uXЋnEVԢ|fO"k_x& *Bx;ckwkv,;"?I?̱&܃"ɑ)ou11k HzY+QCn.y:YT]PEHpd1?5y\7{tM<_~'yK *ϷWU.VذH&ߧȥ AJ;%0-eΜ۷G&e0mfv؍UP(2_>A=>-]uER͸kYnU{^e#}Z\=&dkM ˷1UqETfv\Z.NXNvc| ^"TGh |HCIa}Hsa`puFǔ?' r~l I Cagn7zSllPE)E>35^m;m#ȇZ*[+ms˧. Tbv%zJ'Z@{Qi<<"z7-(89 Wƌ%2"a_ub%8͏+^Y)*>q\AߕߪE]_A"_ST?|[waLAcJrgnmq SOpjWqWž ̇ծ^ Vk +'8X1-zYP.E1'O%MrbLbcTiG;yEe-ۛ`w>pp2+/*cӋjvE}Bdc?Irܫ?'E튜yN)9PEO:'?zYJ,*zdM0ɤ7!r$D;1tsғ_EsgkQˢw!)c-QEb*.0Ԁmȳj+:Πcs }{ R{ &sHY \SN_ Mf%yP?HNUSm$;$T d$YFo&ǡE =t^+B=e!S qʍS\-)RB;Ur؍laRʎj(e}Ξg2+;p= yE#_DaXl7X3%K3%)f ʍ_<$RDgDL?:딱hÌ?w qxHsͥePBhYEHj)'+[ǻְ!4LW~@v]s&PyE"UrrtO[٦y)S{ޤc qf 8?m7>:+pʎS)(R}frx@;$/!͙>ۧ>W7K?8+ vi;vz||XӌP!GH(W!̶kY91$(aY3q<׀o=Q Y!oҙ=W^ԼES8udtm++QZCmݼ2״W |7cP6!~&B+(QS7s ގcEy.%%(I&t-yW-m=z`^5O5+씤]T4gݛ<TrխD|G&n7EvC!_4="W2zW> Sfگ@.[qL e@VG="!!7Atx.rõ{,/9ڸesơ';u2VJ>xu7٣\n,vcΊAnAEm-ƴߝl򬞯MOѮyb /璗;5y{{ $; $ ,S*DYJJ!δ'󣩐"\`ŚN^C ۫!W8ד|jx}]`UQ0, V/ݰg!8;.8wEHHE|/|.a x'bS X1G,:#%M!:3'=LE%O1 0Uʺg`u_LfܽzͣrE$HP<ץ!:Ebdvi8/ $nv6tj-Eñ>a$셤aK[v(Vs>Q_OP[ťY߻LuVK3ߖZk-eD` XMsካfS=jFMd^rMPDv=} 7c+ +H'=酅;8~#'QBӵ 9UI::x $pͩH"1 [9!+Wh<~jHt6Qm51(I,V Sڲ:ʣzw`zAj3ouU{ۥ2?esrS 6vgLKv&DĘx\83A=@ %0'4XVv(L Ǭmuv^=+^d?@MS %.6ͦ.oL MSPY0ShAj%eG}4% !$r|ŁW-y@oTc> stream xڍwT]6" % t tJ 13CII HJ#H R"OZ߷fkk +. y@@ A|VV= WUDp0P:A_p@ D%$A @@J w  P>< G_#a HH.dH5CP!N.E{="qF!v`Nt((j h@Jga?[ N0k(u]"]e5@ p>Y bmpv`p;4ОhE8w buMu$ @eQ|(/\"F QCB݋u#<![ 7pTYOu?1;(@ ! @=-ple@}a|o nP_&5~ L@@>?];wk)hr)卵xE@ &"6Q Eڱs>8@\ p K&Hw8Üd\ }=Q7Cm`nUFCAnAPJ0O mm_?5iN08T z 6zz"akED ]{IPDGo|p "TT @H\I\3!#k~PXwqrC#/ #E~o/5nHPvܵԿ7 ƟCXK;T7]3;k.fmv+ᰫM)U_xqИ-ɀikzL,4boN~AcY,)bv6 {EXrRejXbp HiѲM똑F,F$1Hd7=ǟ/1#a1rQԧ^ &1)}ILUm/- KMD1E75y\J- MNH8^h{##vvF͈ oҬ$l1E҈K"8=[]Z&T$ngo+"y5r%8dd;ŵ(TFDqNW$n.g&g 5qip?9g)L:, &5XVg[0VVkbn\h@b 6 {]GBt/ Q*[iZ+W9@^w"I'~ƺ3CxGO#<)Vz` ]L>6ptN4S*0y|f¹Zh` o6%BdoCa՜[W,~حD/vuyrg=[IWcl&pZr@< q떝m>4XO1JmjaYZoB\vLպ{4'~vp.} ht[#Zz+].ouRl2K8veںOxҔi-n,'G(\ '̭]\mnͭ?yJog{*޺9麜/\d `zHd:MWvAsoddl/OIB]Jݢ+xhRx{<@V0#F2틑%LJXAHy㙡l7T&'Ľɀ,lUW "e`/hswb)2 pAiUWxf|*5(iQxi iо,,jݪt29%NlEBi\>LJO1+e <|09`jƋ5I~fnҘ8E05NN5Ⱒ_G" s-{ffN$iB?S > +pmnT%g$SѶ}J_zqt-oMc]uߢM3qb˅̖!<"KxYpV4Hi|{E~km1aq-_hA{W3ps0iD9sv(DJM]ip#/B4hxN20m { Vτq9OgΖHp8n}qo{o|oog ?n䰈lQxŊtw*8slͭژ&c5V0z}>Ίy[c[fjŁ\ 'o8-4V{4cm5pR Ls ƕyMXLRUxc prq s; ^$f*ƊEF418~gO<+I]\eD=gfU0\<$.v2_4%c2HkI3J_ټ cEɩV3 ޥNIvDXB l)e'(E`5l[±wb*7*Xߌa@}{E$%=:xvJ<ƠѰ:lQ`q10džձ %;fGJEɲ&M~T1Jd2rZ||>CC;Q̊}q@@hcPHjɨh6_oGbjAnzȒΧ~Nj::]a5L5Q=ʂjU_-&Y]Ӌ--t.w+ZO Jmim۫Y7) yHnF.7mHd[u e}Ӊ}Xp9=Ȁ@paW'"Z{7Ȫ Az2fgqZoaUyl>ci4 z`uaf~2kgRf5[Xd!?S*T1;{E(È?%;H,YܕY(wCH'1 ;i S쬩:T[I>+qC :@/yΘvxc ,N< }Ʒ%?e,"?ͺĭx~OHeu-C:L+ #1Yť( !}Al }bދD]A,  .`l̤=#q "b_H<ǔi)&amu-я:1(. Լ&《ca eev0q >FpܞSji؄+Ƞ2X̗|f#.Ÿ4'UJ"vɶ` xTK@9>`97Żfڲ\?pU6LM9=}$AbX&5q0I»;zk?6rH_5˷P+"y g2:K\e/ mGs{5 bv2i?3~LJ0W׮Nj?nkx$cǽGo\^/>ӄ:Y$[{\WKWd_ޘ<=xC,KBڨuiqMbrԪK)=.md(xĮ3) fJK09Ʈ=G_J}r_[!|ýTGc;gyLfFI%v.^?I$Z"0 -k@A{i#oⓝܚv[S"t'GDHwFc+Sf:;1;"@TPԇUXg(Gx̚Nlj#$JFX YWILt/V4d}w%:Rk88"Q6xh{H nY%Ly.0lHwE`L^{iژ.^S<@T6u%FXSϳZqO"*:-;/'ō|]+ٽFٕo0>dL+ŸQ"w&Α>+\|Bv4ݏiy!sQCwe4WMtjPQ^MREKoXZsゆ4gߢZ d'jymcF~o`\[.ie܏d0<ؑ|,t*}z"}SqpR~d~~Su| ?祔}Ju3bLTѫ %z d]n>n;sM޴ͭ?S_riqo}Aʬ\qʙy2)1 jcy+fzt ڤaZAxЮzZgN d!+D0ut攽MzUP{Qa|kvܹjZ U{;xMk:^: e|r'Ē8{*Xpn:~vwE. ~I}z.bt dFxaFitSGL>v2"OϰZ+0k5ݸE2SjY!ݴ}/.#rJǍlI{nc06Ҥ'yra\AePq=;OcDϮ0IA1? ui,e BMfQpKqtڒռxSw>HG2(j܋<1ܘ@ Xo7©O vƈSzO덠+^}1)72Zݵ=@={sBeAg#SnIR iwyHd3Fj28XZЩf0.ܶ\nG мB+*?q&{2hS7lo8syhvZ\L:M@<˼fwoCNZR}g([sByEwN!(TKl )>>Hw"ac/`tlk!b5R«Mw+;T#)n(Q .ty13Hf]}TnX/b; X+xBcEzql92"Y5o.j%ޤbᾷ6$Hǐc vJFcb#/%T+óOh[ LA봁/$F܇*p _%70q45\JX]'fvѾc*" 08:VIBKW{6~Y;z7y7EWYlug̛2bwiR0KasS t$ v695tsvSSXQrEnXK5Bd&[4je+L-ָkT=gQٹ6yKuhVjUrͥ'dh ##"tI> i:-`w endstream endobj 222 0 obj << /Length1 1385 /Length2 5961 /Length3 0 /Length 6893 /Filter /FlateDecode >> stream xڍTuXIHO$6fñ9BZA;iDDAIIAJnз~dz纮>χ!=Bbx| 0 @66#8'`3(`0ʧ\AQHE$ P BK p{6PQ>h_@N(,..;(Cá$Pq\uB@C*qqCex^pC{쁿@\`/`90^4 x@0U^ku]a?Zxܟٿ !P(#p Ň!H_@u+!@y} j?7tw>w8ז\2^CbSaЫ"Q^H?ik{W~c$'A Hs¼N~W{c]Q@U`p1h??`0`p$Wn po芄` 7+٣/_GP[S+(X^Q0W@Łb +ANHPNꯡ=dB0 ? WS/ Ϥ@Fp_ '+=hTo)+S@T!tD}pw7^:A?ƿ$#az(w  WJgЇW+fdH(E4+K_ @~>$ sZB~ݪ P4Jf/_oM`0(`r u m<]"N=~ ;Ph}өjCp iE#4R;gQ(h]g0~6B '@&kn;~ў7\/CyM3U֨2oLn ]_:e8R5LG`9c%1?¿ѵ '8S9u}6YwWqׄi쁵RT?mO?c5~;3Y ,Ÿ/+t<-yT(ÇibK xWŚe-lx٢ mequpu}  t};dZ[0Nm۵RзqNO^2PJmJԧޯק{3];l{-<$aO@g6jz.YA Pbە!]hWW.D`Se "&B-Y7 ˬ:|,?~[bqA'ld yi;BnV<1bmp XDg_4X\?)xTM@!&>S U2TKx.'n*.jDHUT1=yzm][־_c=.4$y 'RUHjNܙJY&-P@!i4AA'=paVhzJ˔xWTtF6wrl|#qLhnRٜ躰Iyq -Y[\ ! u%dz˽] "b̧^MӸ K!Htqgw3%K3L@zSYPMB^DsGpLYC:4#DeJE%KOTq 7:wx^2]|$މLrqzn YqB έ7Rig.\cP]Hb(נW45{>Ln!;N yl9'˺5řL &1XgWqc3,xgO !3[NE bDOiaƤ)~r~+v{zkLNfJ%vBSu%u0chd \`vPr}')~֑e6L袂 WF#eu|`'"xtzPp"3lTd^v }tb{b_cۖ/gэ!~hT@zo>TWQ8uC2%TlEI^R<6咎–?.] L,ܓ,~deGS2Ikg Na׈u"oHỌ83ZX9Ckn'~ `,g0#&Y9st{ŪDQBvLekxn>V3]8樃iZ}s 9mK3hSSӍ'n܏RoP<>4۽gE=kQb+cCv >IOJZje Сsqo Y4=H_.`[FkE|י8\\1@tay`۹{!hR-8oZa|ǣ:Qw܊:XL+&yG͵R3l ^[+7ޝKMV,# *ួqv: س-o&:;߯s UW6ͦ\hfH/]D&-zmώ(r$qiKC$.tX+_M^ɅvE}⭜V3kvb̺.6d$9f;wFo}EGfJ,?$xVZH./Մ."N$6h$܅68cM* ҁ.gmULZ -r8%M)=zk`cϾ=PLe]nMtVY-Uɭc6\V/V֝.fg9:y6F<_@CN)&CCiumr$~ lSA~ "b6[2N4#kMO~'eE:ӵlınu];bl( ^IJ\KgH^*;u菉Xxws/YG [a'3=Ƨ'_^y&u gH;1} "EaC/79m[23ueaxBZϨ/ܧnԕX[ :B-3 3h΍o)SOiE_^|(-\n3b_'>wMtĩpl\kLeS*z>!!"K5Mޢ2xDc̰y慯&'yOTW,/0uic^/W 4FA3+ft$o=Qj OҰ&\S;]Z w`ePYcWU {46CVUå.?T lLͨsrx;< I>z]Bw;41)l_sx($XmD aM1.g|asn'D|Ne›_S»0>Q{W&Oū԰x?GmI4w.8xP>?%. ?R&"(|SEFQkFejōGppk&2[Ѱq "Tjح 5rdҠ|> stream xڍwTS]6EZtMK MjH !@( Ф#RDW" "tI"Mz}~ֽ+kyfsŮTC($FPD$ Tֆ@4D@@HLpq"0..c8BJD b>(F!.@1iIi( ID*P/P[B=\(7_4][ ("%%); G#`P$PqbWA] #&-,-uBy#G{퀿@]&:"<@Po(:\08㉴@]78??w("$w?B 'Ca0@:.p.#"~.(l> pb{@(v?n!˯!*N Gb<SA0 uH7o5 Pu91@ tw}`¿0urcsCpbО 0 @u@#| ,E_,$C!]|>ea#}}f; JIE%@@$PRB BzPğG_Fճן4S$Aa C  {?Sw鿪d..<"'K_O V ( 5!`m(VH,EDp"<s5~)<2bX,5X{QU$ eKnwP4 5֒`uiMfQhs# Vm m\<=~;*Ɗ7;-eV<&FQ00OeނK}?ҎME1m /2'"`+F%㬙=l⇂lU6۸ѫCD58&)J҅6=h&;6?wyxm"O: MeEoJo`jm; $opgϻ>Zx *U'CK]J9c9:D+tiV8JU㦊8QKB j?[5{vmo՞?_y&2X[gj?~ʌ+tx ]ݙ4zPh$iJH1lyddŒdP^ 4'N]@ɢ.6gLs]m!15Ėd&.dR1&4A2Qpo٤_GȦ),x䋬~*ei2tCVe:>f\#ZyvqR-yE8ŢE0^X[jRQW50.gP.ɻHܡޠ54fuy#*RX5P[ENcW2UgףR-I(!)ޙ_q^ mOQ is[&l+Š_VY2o-I?f[[>|M%?fƔN+?u>n%zf>+J{ 58I/b=|g,^|A\9A9"Ța"ĘOp6C~u׉},òiMXn71ϝ^8UZ[TmHd!iLYct {˓Ki"d "`o {q/lT9 -?Rd\zv-nKB{*C[<*_%X=+I(wHKUL[bܘ70bB/ ;C? `8yRlcY55jv:֟H9hφkyL˅T_6?6WźV,s#ENAGQYdfFe+v7zԊ<=caK<|AO<ћ>aG]ܜ|2mɰdQR/TwBtPJ+@Te<#ä6iwɧV_8mjhv2G19(R--]h<^X\@0W0U^uT3Qq|;ha[$X8<4F9CHQOݫjdNcp \Mŭ]KG+p;g|Ic;6_ͳQ"WTI檼^>%mY3`Q#鹜 E؁UȢ8}/0+a ktք{'{佭+1~OA+Re$/b!wDeR=T-^j>;h|T4Yxt?} ⬐%4})7Aϗen= xFJ1_q}xRwmL.pfcWI=C.i#I'|*Z+^>6][O21gtw[־b.\Q&Ĕ)gOof :!<speP_)}su٘B(cƆT.d]v9i3'^#[wL?.W7ʒe\&rBcu*i]&EpZe̚T`_f oڀm)O2wE\WaX9wH5bӠ Fd0¤Qس$c+&ԂC[ o5}l>V|Jyt|F8Z2Nun]%Z2T}uZFo}\^pX,xqP'1W4xgx%"'$15B*%n"ճd @{ iYgPRH& wTeދ\y7):&̫@ixW龿av6@D{ pO/.W;KӻC~SgnjlFKO+(^ϓo*ȼu2{_7y,+KeKo~4(MEp"qrkZ?3$_f,{^7y^5C5cko-YRzm`#iڒU8A+WWœpB!Ƴ4xlՐg+<~Ykur1[uHڪ}4*K2/i"QUNV&M*8NW48VAѸ˷[oW^{Rb~2zfgMia1.G9 &ɒs?^'Wss~|i &19*ZRnV\ka,,|,Vi"6ۨ;H& .SxEAR6Lb|-ԝ ڊг 3gKLzPT{ELtTա9^.LJY+/Ȯ^Tia\X3hR*2s[+!fpg#qzb3J5goUطUk5+Nkbɧ,B@RtbZxsߢbvpSߐ']`^ _}iC&DލtQ:}rKj^Pѷ}@]$KS~u״W@5yu\J\}F˛u@[P%UAo&[ua]\g˩_c(Ϻn&0pWu狀o;oOX">+t "dFTNo:4(=? RP.8xoSNTW$qq JI \lWqHI5x=`2Cꑚ@\gQ4,W-_ ?O}Q!͡-%|q+m[*3kÔ'WVb=Ή%_)Y :#_Ps,<xX(ou*۲p2 |R7/J-,5d9n 0:s7K?1}"A&"8rw *M ֢RɊi* hoC}lrj}]t$:KWWPYæ.o4m@Z)N?bͅFuA9K(HْOtщJR6Xy? pˁ+{ˊUGR{E(՝0n"m!tiZHw1Y-dqV#oAcPxꚔ!oo(('bur4ӥW N0-LCDDfʯ elcS|Uu0(ʞ^_i~*]m =POVLӎ w{t:"H2#>W38.ΔT,c^ v8okьlx; {ḡ8Gq+Mfҕ&;H͜ܬ FAۘU"uSuBqvĚZLior SY\p1/8K_;䭋 SfιN k (Nhaʩ(p^wε-ğu<2f3ԈjJF,}96lt~l2a bw>L7>ɲ-;ˢ04puEHM}8Sc&GW1fdS9/l'~1Ҭ]m},~%&Υ<V~-nALYWCozc2~ȹL)ݰSexΛӮ񫁭{0ʎ kE]ؽ `"< LQCDwRZQi+[S0l}CR4xѷda6]9MŪ^yUy* M FW~Q(U(s?!) Kp$碙M;s.T,x`;Jq]=-c( X?07M:m0ѧEzFeEPz;*t :$*Fw)g^mYĴ#Z&v#v-s boa?MZO)LcS+ZL7=0cB\'iC! %I/,LqA'닉K@4պc?(([vRœWęS ;ZZ9\$kB[Uk~ybo_ƀѼK7_ʏkT=.̾-UcJ /_S,nm )u%)v ϾǕ|61cPѢ%~U$71,?3$sa1IRd+`;HHBtiStDt _CN˼.nXg]FSPw7.%yM\z}I}r^^]l6qm=ߒz_"ge~+}xw|:鏢Ͼw3Nh $B)"1E*޵ۂH2?|>QkTvvʪ OY1Q=Z3oV85K\^_X;_L[(壊әTL)J6P~I &DžV4x{U8n3iHXo 1>6l鶬dsovM=V/Gz} 8G^VIbH>TJ*<@HY Ox5Ai$yʪ bE& Վ|a˛u'+F?mw%z1`ϯUA_hE:Q|Ht51I@1׈V fz-yǀP|n]ʘ- >~|FU#qO"?5*Y6:> stream xڍxT[.IoJHE"W J AzG E&HU G|]ޕw?=dX@ #(Aa0@XXLPXXAƉ8 H(.* Qh.D"2"2Qaa鿉*  pCutB HKKv(B<  D9A\;01| &#$-tE "<yPxxA_%􀮐? qLȿ 7@0(G]<`;XSEs8A n@/p }uA0$Ba@{4w@!O}H DBaj}jp G!~ +.p7vUMuh!`@\XZBB\q@|@NB60u65!2 P P@mHDP{#NhJ-??Ohp[,bn4@@ZB """;' w@J}NGXzr!0&-.7g sE?@W(\Oz tY7BPOjiP;- rOP_8 (_ 75o0(b@B0h/a 䂾Ehi6A3} װK@_"t+qz*b ( ]c Aha9xA(O_ߠ8@@D n?8:%! kА+]`En/˿Jyzx񁀈g pWmJ x+ }Q(/t3L+ہ ?7+ `=yԕP[S>va#%GQ|I4d"±J6z"-UYx݁z(p1)va=de_E Y>"J44z Pnf1.IvODUkpMbV3SY\,55sNrtA1FG=[G<r'Y&߄HNv}ήQ8JR#ew,N#JJ/,ublNܹ{("j*RY6`pu?@EAe9|_>hK2l#!THE{^nb{ 3^5 TD-O|ntQ^.&M(>laZ~Зx竄;|emΠۂeyo45EeHڑε蚭h˭2F?m):]6O7z,LFj)'-Xg?8Sa,7t(Ds폋"a$*րnnpF/Dlݽ #w9&ȨrӺ5b=$\\p*UVW?|5i69NT[)e"?`W@؆z) ;Tp aT]Yuly'JuWk~Bw} lJvGyGlߚR3oOzd:ёN+gP>wm)i^`gxgR55\Aba>?cCL 4FOG-kǭ[~1WHlrx1+qɴDW~Oa5ٍw6\ҋmEddB$q#hz)aqdX>OxIąߓ^R:GNP:}<^Y9uxw6\ʩZہjEkTr^ҝ+nS;Ꞌ탟ҏ0%ۛ.X3xI% ܱX/7mO?B qzbM!K_oFpw %|lÓj $9Z<_ i7f˗N0&R?ɐPX,/fTe׍=( T̛N{ʘ %ż.k ӟfIB18q 0Z>҆oT- u2϶fNQt'r(n&v~R@Tj3i8z2&KG}dzӦ\|A}o0luGb)β&Pƥd`: *0˰'.z捖oo+֧/p/̌ۈq c)]]ﻆ#ہ!ݣ3h ͡ H_b807E h2#NڹOXAE.Ic$Cby>G"Ub9NDDbL:Ǽr0Z4Z86t\z+bCE*83ֽWGcե+ 5 8FbA/Vl̶ڰD/y%+h85ZsX`Q|+pq^ ( ` .Pʹ,37 e΢[ +RgntUB0ջjCjy+J-{}П% )xk-dvle.09`>N&91Ӽ$XPJr Z4kx:ĴC?<U?cҖBѓ3BdFZzmU|$h71i,x&Mcv B/nb3ѿg z𶑙%qɼDL|nJ]r*Y_g4>c$R/e`l.HCe` 1zC:I _@g]N" uBnlvJ>t*3=f?V+hMp#zjƭ%(R?tTZAjheF„Cj; +Og$p_xX%.uy}"nkYg/X((+.J֑X&Wri]Lΐ@~ᯖD3T;dn5Bluˉ}n}o:{ 4œb9X`5/ 73qWKiN1O_0$wOJQHQǿ)pՎ?әzfm~yK{nl ?Agu9"P(uw8k9H]\p{{Ǝc͐9[Hr氥\W9+䂣63×_Q V[ӧ0`pj0gʪ_zՊP;_SГwF P.>MCuČ^wy 2ܛ~HsN^hF-O9nޟNK VVj^]b 4"# _zTLYOšxԒ "m8Z< ^4֝^SL9,5Kt\ϲ,I%T y&Q[H}sS$I{}j"xBU;ې|tUqBV$u6 SZa-<3چtlCr{!ȝ0r+ % qe|E͕Uo$cMճe[C&y*W<?G> o!x|}N*.I~ mTI x~|e=fg5b~\"}+`˸#B#w7 ~rnTQ͑ d!;zH7(4-3S8F0vc$NYvawblIe ` xѯ`gډjDvr4i)gulɛ-{z/e_Z'xq'L̢@~xF%ЍJK36:Z}Зq1RTP֎5lQꐩ6iɫzR:"yqt&liw.( `+i<;L%։qÊCKЬLg, Y9(ȽM9;zTrĝ'˓N)IǴp5^ ɕȩe/W ý{l'ՄcXŢ'l6&9sPuc9 y02Cxώr-)Jm4kl!WjC٫ 0O&I&QDr.'cudш&Y;>b, 5&VYqIxIXR!TfǧtvTv(6 z+mنLI̫p~T c(1 ߇痨gaZe'Ͱ@D*]fğ('wEOUi1]N/ }_e{2+O|bY/|vGݣXlA\C4b?i{i3Srg&CY?V(Qiwϻ=(>3oeljmor>òd[5}g}ލv(u%nVSp}!F_lr0l  \.Ͽ-g#II띯E<<'k)i>Q12Ϲ@GEA1 #=𭫵 Z]|5m@hSkA: [__LǫURayqnn*~WnO2NF廣]~%qzLPHL*5)ؠǻʤ0)p3ڤ g[|JjFa,0uJi"cFВ{g4~uO օwݶk쥇$L0&pNYo[?qtӢLmKʚ"bc\aoT[e;aI'0bЮh*}GUB-XORHHMyT$1i[6-(1J6O3J\?(SZj'vIߣګVSs?.me$4t5]JI-U4vhcFy|ԐFF3Օ0Єy]lp9`F1@)FC].XmT/kw72nH 눞ʖˮP d7 y++>S]δyAՙ]Sƒ>;cq>8E C%5[ŪBS'X7a]/pu'UVwM(K,n0$[DYa> stream xڌP\۶ 4wwww 4.k@[pw .9}WW]սc1VSSi2[:e,lIe-yv6' 5l9 ( IW]&e~7Tvr(9<ll661trHy,,'G+tv~~^ 3GdW:!0YӓZ 4n@W%௖*fƂD в[d4s ۻ%)Pu:XLW 㿜,,A+=*3-24wsz70ٛt3:f r0,h)t!Uh~ެ\;G'OG!+_mX;j;\܁Ry!-lll|| eaW-og࿔{uvrXY|<;MHK`9"] 7߿+ }l}d>aNY%4$N^_fNn37 㨙S?|.dc8O.@qYH_z@x\w(;5{u woD3sq[ry-@` OͿ= tKfaq{;J;Z8Yl<3WW3o~'n/VZ5VG' G+_ `KoJM|V*_eMVٿ*7qX|UozϮ7gW޳޳MV=]ozϠ_'=puWKߕVWl|/~`66~:{^?|^}7{9nw?Hy+1|/_&uWZ -r m!N{ u*AwWc_=XR3?jQ{n/a똣Nx/5Jo|o KMɝcOY,=>CY!檻Jsx(x>>N*ٹNy*+DRÇԁQ2&HV*MƑ^"E),n4WOtnc3wvc56R%7R^l"g{n 2tIF.%iprӖb "/"Lֲdc*) O'k%eΦ2c7i^.O[ FƂ$:Hw5B bmMւ'5}r著Odu Hx&dA)cO-?X!j,s~_F~UcDl\RLgj%I*ҟ4G [sÜY;쐌 A}!y9'g^覼}&ծD.u1`,Vn7|C4RA[ V5)/<[gI=^b⪼̽dt= br'?w_͇qex+sٟ;Dmd(Mǥ'r(󉱖Rf*u 9+ 8\Dp8XltTzD n1j0KU6zڂD,fzC3Pʩ>r]Z[IEIAO[ipHJ6UEO`< R4M>Z=ʼn _ykgj@ #R݋B(:qy#@Ŧ2t9\&cx#`< eVO ^=JF*:y4?owgq&Ihx \o_|8eĩžΐo^XAeY_ 3T$dA8K.A3n/X`\n`yA~ e~uX0z[ZՀz@fSMVnz=~pBJ1\R g`m{{JU! 1|)f{ް^Nr~C4p Ċja~hxmt90WVq#l06X $j]Qye_lqʤ/+N`1F>~3V< C^}+y$b-?,2so麋٭m\Și;Tzѭ"M*\EMHr?bQWS}_meTUCfu-ґ,m"G[  x܅P,:iQ.x4ͭ)I |thH4"࿄Ϫddudou(3 _&`xhn+=b5Nԑ@Ah6YS,-=s7fJi)U֚gPG z7Woͼk EAYOYՆw*/F|y7j76>F2]>+u{J~?<%2: ت8i=>s )~at U,bVDŽLnOOw֡p]s19Yo9ڍ\$8" 'Ew+,x8䓫mi*8'^z|oɶ4'>7aTZYu-YiMSUaE'0D1Z$Vy˺*H^WU(]BU[LblR@.쏾L?&?0Jt9~1QhY+/6Xz? VrԬ݌1/Va~?r,QOZ`ؙ>-le5'eDjOݻpy:L/ ؒ6eShۈaM˶aXr dݽ18x |^m)HD 8xp@b 7L옚FfM~c9HFkh5"N{9_V^o$)?2 5%R`:;xb+q6OKIҮV>Dmi ScļPJH/vJn cn6 YD/+슀x`flѩy5hi`Nx gVnƁfwR8et̮VmC~8 ɶoLBፕq{m-&hG=7@8aǑ`f &(T"|Qp_]lwMy!8{4E|]u.WoPzOVA8@wKY]@m}{³O뵇mۦRXX]gL3\̪ BKHgurE_N1kɥ9Y"#nz:zzpl(F), %kdg>2B1.v7ڒŒ/NO[hI8i؏!:_ӿ uRZףZyE2 w4P9LB ^3|ꊁ+fH*iQK> pc^[L28 ܸaV5:B{(;J(U_@xLBP"Af:hWlMzAP' W#mƞ$#Ds&*i~L7 ҷ@l΍bpXRꌬğ3߂LDb%H A#IqAt:\o~cq>>#te?#"r5GT{F|hiױs0_̇gaB{1SR'BCC"qMQC-sϸ1@S?V (l>`?g7&|wkv >CfrT1ё&6d3Xio/#$ *14sM2V~> =6Hqd͍uSxRӜS",o-?<ڰߥe*AC24xZ+#N1Ha788g]gRKvU($6#qP[+RH~iK'TP9g} p|PXct r9S-eQ4c' '_ .v#11y:ҿ`-YDH4 4B+# V?X=XՖauUW3BbuJ\]НŎP1|8/ʿo)n:K Pm>܊][ GZhO?,'w lR/"iBl>Ÿ?Օxϱڮ$+FS :NũO\=z[?T}Q5iZ*>o?EaXScK|l| VE4ϑtP:{_WswR,K oܭrD`K%!0DQό#B,;ؓy>][3Vx&6}$xmd%gb,-˺l wR:TM1FHx-y"i5IPԖ*Xċmד`7MXϚn[IKzrX+ ^Ԏ/N@Ej 5yngjȔ n#t/vBS"p}sD0??\Ň{W#ZT$wS>F-?Q&%LWϱگ~_!ŠȿI{r4c7^ԦN~BHг ru6ư+kyĨD=&EV1_#I}LFYl*hw7yה68]L10Uf*RK+<^`B׊sA\e=Hif`^ZiE[B=[ JHo݆VQ!Z[G08^y]5㞣 q r$ :cۖeYsZ\N(7۪ %w^c\Sf#†Z^9D RaΘՋ[C$a:i\ F~j [p_TnaB+Rim0y 3*mf`V#Gx 0'[,D+(I s`2e,JΓvHv$aѐy֖B r!) NPE?Q<"+ߦ V-Epvr}q7.YS1x $H"o> "gӀf2͵@lё)ݏψZ2 ]bRgA%`ih8[:iWBHIdжkzyieՙs"M '"yba0Sہn?rQɢ:5+?i,ftR=$cpҥ^DKԧ犺/ W1v`@O>u2&tkj? DIܘEI_%jzxk sITN<^7I'9)OY"hrG2*R뿠@n;I_& y}S4P!Nvu˚c"FN 6Bn2 Nx$HO|*$673}{&IqۗkZkr'Ɵv0&r _݀krkjL3hrɩ׭$r*f mؐ״A r`-':{,Y 3Ѻ!BgǯpSVn`hA$yvi[xPU㢆_~r 5Wx o-^eĔpS'f>7:N0zeyۂ,Mrs^E6`-mA`BS;+R]39,hۀ jVP8Y;kl5y:>PnVmw|Ia$F~jsEWzϱWUǑ0̙nr"L=9V린*Ã7LJ}s{c"TJ9& n'wM,`fN8Nwb9B8a6ہG8-"))6B"if_hg{Y.b_u."Q; B?M. +P I5G UB'Yt0;;™h?*DvpUUπw=S ]dZGrFi2I)qPP +eSP֗Hm65eyT,d8-'AP`~?$'{=x"l}|[uw @ nJN.cm\W[is;/i^ӫ?uUB+^ٺ^ᨭG-¿>rcR(r ?JWb|hʵ=4~ }4~FGbFmV1W`re\ ?lGHs}ѕ!./'j ' s1&9O UYP5g4ZL. ֐9`j,X|+j=*#U%c٤d0>^& ̌+TS?!:շ^ia n$=KKUW]9cbe{1RoTQqIi S-.ewWƅab'i_wJja> n8zD۷>1ڥ9Wu\Q;~Q$̲of4Nf)NM [zj, gy #O )eTBh@< U<@N[82db-!En+>șNq%h\}Va%hq1Q3C; vvJIkWD}ƇMʠQ*%QF yf*mP߲ 9|tSNE˙N 4s+izd h7DWxCZ C3ܗʙUE襧Rd>9\]hLv3؅ 'Bx~IQՉVd5!tr1};e>+ùU3spuÁ=Qqx@W+Y79铓ozR-5G u|[l;^bdgEJِoHie`wJ-ꨈJ3Q lk `MKF6nDžd M2n f1nBq~Q ifvY<F-8Ӊ9#e8 dgw/4&a t0IaWi0rW>G_895~$by]݇y%PQ9mh69Gd9O%^uP>5OvGG,I †ﰾojSJ_y> NF&Ze/p5 &+x9zKe7`L#͉q#câMc/#?^hMGX6ے _G&~c.{ ?PZ6/Wɷ82B24q~F~ op A{,{Ff]JD"&Ta&BBf2^Tρ\Խoo;HaP6>Qeu!-9e"HCZlgw,fz`F0~'l@h =B>?ϕM%=_/ppź>O#NƿXHƟYƩMyX$XA-6.O&gvfod"uq6D[/w(#HLvp6[y2iyf/z,mG?y>]_2рHaSL5#Lݺa`VQ=K`޸mȰm~)hu&67Z]NIxx \+"l缰aNn0ވcr6RGE~?XDlpt¶">ïe~ݸox3LtPM&$Fuu@~Ӎ¡Qg1}WXTf) 5lpOovCAzԣN~~XEh책̯x>2;kzAץ+YӊVv'\$O2haD ~신~f6#q- `}[֣_ˆ,|~5wNx专pyS.Zƞv0ts?uwo Պlohᗣ-:\<çcMqi*AT4?B2d^".X1!B*̻!$ٔ2mA૜`p_闣%\k Ja _!xPRK|BFL 2'.޹dmH \Orԝϸ|G9f%[.BzCOUFa')%֥>qlOAspjD   @*e*mq8oLqF!ᘰGpnq *J@\D.}8K.. ~f5"zB? ܖu"&^!gӈv4u74ݏ#Ѥoyn,YMeo!K| TZS|3<p+W[ւlΒЗwMRyUFQ99˄!Hochc9qvs.͂Y wIos_F <zSiި ~wßqI&Ս* $I*Q}̦VA9~e'"۳D=%M%Alvi;DPsce&]߸-;yaL/ީ|OV*A{}ES a4?%M1&ejTwmKoA3 $u,MQnCM&ʞ[)`!J)qLfE0+nM"qG!dRwZ8W 235Gc |J?_a' %$a*j~7Ud!qSνe?Ke({Fȓ?Ml7-TPTSoOkOjOh[WotmDG!):2r@9Đ!ܗG9Wan7F^1qFsAm*{'2J*ϠxR]/vkh5aQC-aڛ9ma { ~sVlg4¡FN.z%j,)aVpTE'Cxu?k;F._xMslSyk}#J>WGЀ qOp!o䕌hc>M쀎L< _ʾA<ܠwt #8M_t 'DU̞f &J VزUk=ʀyޗk4`Ov6s2,L}Q_16qAr<+ 4GbU^|W{GWXK-ZyIND^:TZ_ k|>-~xRqĄ,4Pc(5_(f: Ĺ-Amb,0aOD@vsCF3sB1Zl[ItvDs uEy%R^xVZA"A}7so,cKJU@peZ:I4xi߷4EØ D.1Lslʠ>ݑiV9$`A5N G05AØiirC GR>m5/4945*3Qmkq6dq 6+6KM'xz1bkMIx^F>vaJ:X-ȑwaDԎ1B:DZ7W :+ bɥ!.!X 7?izTh%{a`M,Fw# )ty֝h Nr8|04Hzתf.+ضKúL?R;3HA-5}Q{:C#Wn ]>r/UƵpAV6ͽ&mۖg2F,v<5ziQ5% ߔTmg %ז&TiZ 7<= #!F/eNp+0v\ڟpTQ BAS&`hBC3ztlm~ mۗ(#QS XZ#\~ZTݯSFMBҼ ] $˶R1V7*.H '4:+?am\6n䆐S藻WG!6e6P)=K+0|0&C'cH;AbGBhJaHrZ9ZA`%M"ԔmfdQ8wT[(ӸVS"ҹyMdkZVoTl6dޗe j=AogLNfj6MwN,>si7%gjl%|G>E|=ڢ燰6ӌbt (BM O/1684q j0J[alhdȖ"H2U]3 Iԃ =&zl[Owx AɐX464CHL#3cmE"ДvHğ8VVm?);I&Dtʜx cqy)v 0"`әD[+GiLW%SZ?^Uf  qzqGnt7:4gb5 ]C MA`(4=N(ڣrMݗbbc¾O3AG~_TѭY2?1x~;^me=- UD>7矓5anaGM{ \`UQPҙ $WTv"yqk"A6ARV&fXd[8W-4+fauAh5EJc=sfի>!:W8Cf=?7H!頱 ֭̄ւ4Efo :OQشj4˲r$5%+Xځ?e äyo^E~q{Di)%fxj" ()[(W1;.#bH?!Bn8ϞP`#a'zՖ gFXjhy,$K& m"@H r8lxEu`\b~@fH&qa?8C@SÂ4RZ9헭HuBef^$WT.OUmviОanj?dL)OJ'k.19`s.̘).+WN/RIa& VD7 OR}.z 2Kd8Nq^P3N[+CPA<T^S6NY,>=h1gFj-7Ceeaafs,YY;a1>G`14MD45)>=8]JYDrɵ`{=ݟV!£D'h&%W~}!.Y.~~Lꑌ*Igʻ`U*tZ8JIu9{.owuǽ=cʄ,܂En??7ΙBks+% S0x'Ŝr|H;x cj{\'yВ$!%Ӆ|06SYvҶW6h bرu9?ư'H#FBލT6>/4#ó#$g+ y, N >W vDzVLjQDkjR9$+&|12q*4^9y`7=U|k ⳭHnf ,)G96I<ܐzN||pU{jg]nŤyL"Drk[#V5P?Z~nfSʝ`_1h :ыY27}i6[͇HP(G^ o'O68F~ߠ e8H s.?sGU.Gxz!{kCzح4ARօHa͗wԐIK}/SXlEhczH#'HBƓb(Wh";),n溋slu1s%Q'T(C9.LtfVYDքr׵.%D39aԚ6@=HbAfcv_Fx2#4Uq7mXWf4:PPh=Kv>6v<=*4lM'~^]O{kzX &?g\WثQR ]\BtXuRq?u1hXd ];zoV^s4N/lR$`fl61>4<=fpZN'c٫R-=8[%jjo R-I8"vG5y M,6ie}?| їX 4eoAnlx!|2fJM+0UM坳$E2Zx1"ҽziTȊwNUIV80= f q|.GFr^,NX+Uaџx3/]tDb{7cO z0}+2/LB&W7`aذIg9숏es-इ M 1?(a 0f* zI\2EM8ISCMU;xQf-C8\0$s1V9aLӓGjarޠXv83AJƐ EKq*9?8i*0v aɱϾFs?@Ŋ.=bD)B@.4P0;YQZ{rيU{%DQr)]!S½ [A cٍ 7-oevQo7 iH#Yd {2ӑA=Ւ)BE;:+1pG,<)H*@N#ϧ%j1ԇd}!5~a ֌D͹R>uSGMA{RM;,,\c=dh7Ff#TMۼخ_ /A_Sgqg3V8GCacQ:|~P=2R v^ZS \ا͙Q?ڶ̃gWs=:TiV“Jܭ8-c;~:Vᣥ/8bH3êX^$lGgD@tCPLj65*zB_g^;|f@ | {凿٩O,]R ~L:ic^(5ID̥Mj^fܺ8W`}6"w1օu}'DZ%;?^ulT b &$疵v1&ˑZ_ncgSAZOmRo/nVێ[J@Ĕ@[~7Ɔb}yIGʓh9GQG>s Hxl݆6GzJ- P;Jy 7v9UulNs XoyAHsͯtN.. H!j3Xy/k2;FBgt⼯ܖX5zh&Ϛn߱$3 ] K{>m\IFH> endstream endobj 230 0 obj << /Length1 2307 /Length2 16336 /Length3 0 /Length 17711 /Filter /FlateDecode >> stream xڌP\ c-8ww иӸ8J=)kεɉUL퍁v zf&*3\d\lio ']&jz7HY<̜ёBfqZ'ic CW1tu8A^¡5ss\د0wDk*#uuur#srV;9c$!!ۻ*ƫja]cL )  |$M NZgwU\m,o\;K &qP$L9-.3`qTTPzʹRpM|B.Ǡ4#9m禟'PYaF~M)7Z|ڵ? &MRFK!\Ec`m.SI%<2z]%+`&SR1˧2SM8~_Š^5o\Ǩp՗ڰ Q# ^nEθͮE+1I hA99wqu$}X3/&noÜ,^cƪN i"e!#2󐶙6QC^M._l?m\dէt.ƊJa~RZ{RPDdEr2T&ק6>j@KFlɥ=}a-VXp;/R\d.6vsїҮM^R)`;-8sfta$@11$#'$0k`3l2tц=iJoQL_~xV='o)X;qgT?OŶ0'Ħg6 "|f˯WHJʺ-t $~AlvwҝX%X[fy<ÌDİv+ J=Pu=\ﳝU'N X7f9Rza=͵<_J֏ Oɻ,(Jbjǐ^UT\oWc3x;u,S>w sѭqgPA=)څ9'+oI ^3}FOSBôK&XDa89w{3JE@Wp:ۦ>!;\>)Ҡ< {(EĥwW MZҲB ΂,>@,#pj[z,18oHVOT1G mH C"3Dɟ1SlKQGW 2 nΖ>f4?q,GԾwZx9O6Fn+jEwk 0g݈wR۝FUg*D!Gx4, ~@|5ܲЇETU*5~1/mvq7 vi@YLLL,"WkT*M; >"f7z]gϮQ=2wȁk>/ YC f|M*YԩѶZ<7i9 W{9aiq,KTnıqo:vN0l!$Ǩxgq- tk^1 I=3i>uai6579.hA6ɟ' r%]o?T;59k)lkGNd~XcxM}$Umc L&RqRow$IBAw+pA`FÖQ>=yX d3 mF;×iǮX~Gt^&zN;M -7y?A "/SK$iǝ=2 &p{Y'$fݍd (dG7 pyOƶ@v l %`޴  _靘 /H:o>ݬc3^F[o%E-P$M' >Tu(HmpfL1zCyzЛ:M#u=qJo,^/uիdR|m91n>gbh ; ϔWw_8ቷ+5WA\J6G010XNX*4WO]г])[j?]eaf pYO6\\MSo+^z+iPQֱM[I'#\1U - X#տ՟B)`N7_n###؇J|lЦz><4U? vԈ 5ƭZq&q%!&L8Zڱ▗:mB'Kh5 9GH{`s_VSb٫e}f} D#y}~4vAҔC*v:Lv f2mgEK758.i[(5^*~LI ꚰ&pLWA}auw J!M-C.`:X!XpE +j  ]ュj:S6a1oS6zYh@ JdcZD,5 Z΍++TQ+IQYR7!:?^1F +pp1(gane禟:;(䡾;Z^QÏ~=InB!vVA!9(½hө9Oصk#2s :*w#h}=[ZZ!c $͉dfM)>[5>gRЪ9o|s;GI.`򠏸!܁m.&{n&ލ=Duf-#A$w`O[X<ŷn5`U%GS}03u>*] b(m U dk{.TJqGC$jBPFyKI1Fs+%e4V G8coBߓx#nN\c!Oe58Q)! y: [1̿HH%zHfb Pį+9s[Kx :" VÂK+LS6_)A~E"fPIwhɟsV5ÜL8Y.ՈqDXJ¼5 gCr w)e;،Rx]a@%0|-ưxhXb|*PNYe~IK=7%/"[De ,S:sƤHYQ'y}>bBfjvr?Jb-$J1fIsSI@̿n6д -\װ3 RrI3Vl pM?400f׶/Ω 5 <^n8A-O5уBoLY64 g4t.B99ba,~Q1 zn9q.h k4ADE)`F(FhJWmZ;^s!0\O uwݕ]fw%ydHͨ7-\,D{)w:|,|,A9Wy\ZTYӳ\T51n08 ůMd/*rC 'q9J ?:!]aFs8^rcm>v.Y~8ruƷhnb}FzLf2\O֛7=="L]%Ooq;Ai 45yM.機4qzg7v ?)7ih fD*dÝ0/`N.vBװO&pFbd`7KTx1 EnjT:)QI"|KE%hm˾iQEM |֊$LõCn5n!T24u]B',"D۽B '= 3XJOO@@:#"Ԍ^}ޡkg/s:3n{3`&߹4UNѼʥ٬1[.)ɜh3@/aԛQJH uMK&I»b/4;(r+d;s/7EԗXiZjGG hN^2&XL’%⑛啪>`Le5'׬#UͰ®\ǂ(VJaB w1#ٙ_Xܪ%q6DU3Pt )^9lfc\,E؀GL ׀J8p ZlB|U +oXf붒飚czghh7#;@c w]g ij?g: A){`'7ms8ba&>/u*qU;l*?צ:7a;ٌǡM8[3¤nE"!#BWidi'3ب'U s{~EU?EgH6QL[)j)' VW/sN02X{k ,TOTͿ:T-~%-KjUVWzrlbS&x)o5WjOYܾ0VX9h=D>-3(=]uws^/ ^G;ߎvDάWטa:d_'T:>E [[4[i”e'9߬jyܸg0bt#"WBvnߘz1M[]<"K]*6R>A$P}"۽^ orfhՙZ3__%Q?]#gdLIF+[o?m0pJj[Kӷ>>= =U rS[~\t@gZI{Q.ۡ=`ڶUW*~!i1]X[ޚ9T[oqo̷BL_ץ!'*h:iHt'I0cf~DL "NKj#_e|(MIp&<ӕ-R nTe2 ԩTa9n.rBX7pj@bqW |h{EY' nj 4wB1M#θg{ҞhtGP*@OD(}T6x'B1rR 3hgꋪhR(9,׬`T@kRg!5%~aٴTj.OnW$;K'0cpb(\EQ=S[B*b[t @c=<$2 IYp;imH6bԜ5DE,YקCq PDD;. 1Q^X"/xFUTۍLc)`yoc5׳IWV:CU^[ՃyF~rcVN_P΄=)v|g[6O*c^U[;-<("B"nn_LO:y|`^{co_ѾFeY;| I DVrmpQ)۟qRYʨT|N1LNwªu '~w@ǥv%kQj}f<:}=+9e[@'O $aGv/rr52Q e+VwXs(v35!9Jq(f*4_YB2/re)ЀXΰo-~!vjN_2uLUcZsx;/yg_r?#:[iqNJwlxAir~wEF[ҡgj% (boW#Sg[̸Id|jM/H1EbQ`WZb^xX a9݂؃"(pQTz]8'JM ^ չO˵+ c#*ȓ1݂u/v,6 D G>$ !D9DA e!?j6a*| 8hh/΄,绞PhȡyBcqkB~-N $ 6fى-Qw ג%1'qkTm)ɻ8vfS&kyw%hk2(FϠ NK:/mۜC1W!B.`r~fd6AtVxװagSIlh*,Mcc-7v-\v"A݈smzyM{^CQWq޶A 7 |V _s K=luDQ;(s)^&ɛTqco6r/=9Y*4_Tw~^o%'KfioXt ?eA*ΈWwiTWX{S[Ott zFuZ`Ķf%\|"Y!"`( _vOVeX~ 鍅WЕQ3Us*E{@a>ȤB+2k1/Bԝd0`B0[Fq xܯC.EW 3hc. m3WSN>o8V!Su'T$NIªJmZ ,;v]qkz-40M}.CŅP)A@PF7ϸ3`@ׇp:YG^ ?eL&VɹJ6}|׏{SZ2 ,n.4)_6BsrS*K-g s2$2o"۰Dc D6,Oy+|yЃV>)H5d6FH##UTm~r-4퀀G!/ڥy<5F1g{@4 X3r5.-# 5AS+\n*E7NK\l/؂Fä` A+a|*:<WkO7i . h$/PkbHg YЪȀWA"EOJr@ ^D3-ETZ03/ПfTDZGf\ЈvCRzU.Kt4sTnvKmB+-Ԙt1S.BM_QF11Pq8kϭDc|wuWlP#A[2(-iGQ襹DE#]^Hs Ai 3G[lS;T8ða پ3+Ah}U]p)}Vks M佘%'Cљv/]E=֟ )_STŏ>ָlJ(=3շꨉz)2:RPHopZt ,bEx! ܗ=^.Y.:=k;i#1U]B-%J |fRc XfqJmio}Va8`Kj^Y!~x. t w %9G;hybpZrT.Ӂp0O8'=0 [}f> ^%?|?qB ۣ~>O%c,OVxJc+o3r*mؔ#Dpx)s[Mc;g,$q\gdқ=ZnX_xJZ\JAAJ[ P.b˕cbtkӢ!;xG͎a[7~8Je8a,@9O~(h6f~ǗNg3dI`F?܉ +Mr"u09U"ָBΨFt^CmE)^WB}!)0S>l]bfK9N"e6GݴŃ{^%:#ˌy\GH'qG2 4+HVKxSO r1#Z ^ut 9SU2h4*'XltrdC _VFy& Z0GNqYI\shQc6S#;Ӯxixi8s:ZJ%OW\pK7܇_5G_↸ )t;ߜ{6%[akk+kN:ݸXhlsV(tC傗'-c ˆם$b ~Ά%v  r*c?yT7e9% CVH54f+T~5Bo9ef<%$siȰxdNflc3]U@oBOXY2M׹I-8ocg)rx)˒L-iv 5Oi 3ٖx .KoN fwu۞xm;R7Խ;rﱄBU FF<ޝɇ_|."uyO%J/=#pZSǮMm5-GUh:RcptxZ67?Q]b<]쳊/ޡz%a%pd+˧M)'˲oSB/Co%^M*zuYi؉<5ox'" ]nGxW\Ƭ`=@e`O6 !([_o*Y]O.:1? <zdcȉ RHD~^;5*::'{bnO$ov% UT#BmcԄ?Q]3c8];=n734us5M_#lGudX8tj^6,DJH~ ?qp''wrqߎ82z^ 0dMO,>ehƟN;'Ԟ+}O\ҕT[wa(1s'@αSGdL"怶+ u'dY*(i +{'ql>~@Iy:C0l_Tq{'\`+:0KӊlO&_whӋzڃꭾ_ O)KJPoQ#+Vh^tYa!hbՙe< K~̞F~|q)ŏ|\)ӿ h!`XMR?I?0ӷS[\AfSC#rUW~%ĭ~ }' ځjh:7Nܦ%]:2}{l\||SGG![ K]S99 p*K_KyiyH@Қa#|z,[{+Ja}+wףK!;`l>NHPI%?;W*89)IցW@5ćq~1w_Zs),<{ wj.|~K:Z Yؘ*o" c fIPą-w_׻t8-x߆_fEj2f`trI󦢦hQN̎m3%N=6cBOa.4Ry &I5cCYi3Js&mhKŢzݴuq5$U]{e@ڔI`9lH{Z%2 51LogO1掅@f Èm 9.`v#+hY7+sG(rMV)A- AG>STJVx`ZZF"/hOJW<꒫{XOuNA5(gEޙm}i*S+pXLNHwd|[7*uM"Ċk vH=ɷ y=6*0[ΜXhXK2oS+m:0^!caXA3YsiXo nHOsii&ITţB> stream x\[s~ǙEw.Mqv\! $00C$M!33ןo-m;aSCaYnZm:B$CbLɔRž]o iC>EV$< ; ɁPc2;Kz#Kvֱ֓P"<Ɂ%06'͸0 5,-5|Ӓ#HJÇ_WMQF٠:0A;55>TO_ tVW.L] RTYYQz@S<|XTExz\TSlǣRXma }TT~/;Wɜ`<sh`W+R qX }˦}RXu 2W#|.YGr2>=n }Q?(͟bTy3f4/tRt|=9m gr-&=j(>#B58얨:t: yy:4UЁ'$+Mi0i} 4ϽQP2[}G{~u]瘰ۃsDV)d7uCk@[ZkK»C$2w ^ QP@+< 'R8;׊}mJ2xTW-QiGXQX8Zx$' y"zT. (-1T`nlio8MJ#& \7~ ރI5Dkn%>z rӻ1.ZLO#/R+(jRTOh|<12øH[#fk#XNO.P6Qo5mNӓ^ig>`KHfHfbӐ0W5Ok&R8Dyޓ  3G48ӘHdlƃfм fN]P@CuM#j¡ܧT3LJIPY+j+)' eM-11]PA2VHl}ߌ@Ck*ᠣC a4՜Qr,+"MZ.6<:ɈsT:( "|p)XT.Rm2rs'q$ypbpZe $dqíJ*$ $*Xh赣Iϒ28'ajhk ޵])E(HY5jRGws0ڄ6/xBI `$1EGc3tlDmn&mZ3k#&8\.e6l!qpfk2NJX h!Rrxd#Ѣ^s2ۭ{ݍsh4Z.Z(yN^Ob{|(f}0;yy2tDƃ`܂J C<kKV Cw0ږV&4<<_kkx8F_Pi~3lw7iӊXz/XV_n44O5D` '>ZvD@I}@`L2ucSSҁK%9}itA1.:6b?}ߥPY/a'cpq1a"E%$.ymvox-HQ#TY]jѱR!,h AR| GAB]It^ƓP4i͓^cpWO zN@2n N7}3=o@;joxi?᥷{t6hOwFMg/A.M2'E)~:NO]}jFU[]Vꪚtb!K9z o$u"D/|^+N5>@ft6~>_zRGM5մѧլ}4M5:Lƹd]o;-(] n.qw:~^7I?:#o\su1HcWUv|ƪv]}5~>|sG=ґ9\s!rclZo#w|ƆԐ.@wN.u.]|]:L\+Eq=/&DFחCY;,Fgvɤk :64kޯ~~^OᬙWt ?<%^}+(w,ڌ^[D%V۳㷻?CuFܨud'۰V.=ܓqr/3Re0~nf>~QMgYLi;(2yi^,pSZp˨w:jΣ/ .͔x֜}`8_-`jmfߦ>hVؽxg¶5YvwgzD4i\.B}?f&WNݝ=qro}My{`VksaY͔#Ēre):o+9?FNO^_O2 ,++9%\ʨo@ y+.Ufz{pD}|֥EtzDSu^%JN/vp Nшou x,Vի, *Z}*Q_b#6ӲP[Aꣽv6~:Df!nG CT%֭.2'1B]p,V{{ c2]Jߩ4\P7Ooלrg/U^mϾg22cogz[߀ouw~ 3]}q>Rٞyb|:c{gwy&,i^g`[2w}gnn :+2sw=cwVN L;`Nrﱗ"WjV|> endobj 234 0 obj << /Type /ObjStm /N 13 /First 108 /Length 772 /Filter /FlateDecode >> stream xڝUn0+xIJ8ۦyqzjL$]INGS'rG %)[9=mpnj:FFeEMxu}H%Gsp\hgͲnC'6 W D==ID5R0Enr5*h[.e!א+6UXq5d+EI| f@Zn.nRi}VVKq4l!z΅-뢐z&~όf_T+]eB;Y]lXI،ƘEԔNs>u>o+~ʻΌllZ|ߖйh>gfBfs<:!n-r2\/+SB/+\Q{]|!v0L=@ u߾>E04> z=oU򻩻9o.8PUݚtkV5uA𮃿Ld\8:dx.(L3󠛄+໯ڼ݄YJnȐVJ=n7~G endstream endobj 248 0 obj << /Type /XRef /Index [0 249] /Size 249 /W [1 3 1] /Root 246 0 R /Info 247 0 R /ID [<4DF2B85791B1C806DE27AC20C2C6FA80> <4DF2B85791B1C806DE27AC20C2C6FA80>] /Length 617 /Filter /FlateDecode >> stream x%ԹOVA9s/; "`b&vZ`&bld; ߡyr 3BCi[_'yesݧ A֖J`LHU ep{T@TBTVaNa}j@3@+Q8Sp,j?8'?E9;Dun@uخظ8خS7~98Bsy>F UB&Sp 7Ɗ&;}q`z,~C00b#: @"mDvA,/8 !z4zff'<38SqAEkˏWUjвR,[jز7/KWj̲߫^[^ShܔWEXJL0IL+1x#K|_J *1Tao3?ސ6 endstream endobj startxref 309590 %%EOF DEoptim/inst/CITATION0000755000176200001440000001041713025537633013742 0ustar liggesusersif(!exists("meta") || is.null(meta)) meta <- packageDescription("DEoptim") year <- sub(".*(2[[:digit:]]{3})-.*", "\\1", meta$Date) vers <- paste("version", meta$Version) citHeader("To cite 'DEoptim' in publications use:") citEntry(entry = "manual", title = "{DEoptim}: Differential Evolution in {R}", author = personList(as.person("David Ardia"), as.person("Katharine M. Mullen"), as.person("Brian G. Peterson"), as.person("Joshua Ulrich")), year = year, note = vers, url = "https://CRAN.R-project.org/package=DEoptim", textVersion = paste("David Ardia, Katharine M. Mullen, Brian G. Peterson, Joshua Ulrich (", year,"). ", "'DEoptim': Differential Evolution in 'R'. ", vers, ".", sep = "") ) citEntry(entry = "article", title = "{DEoptim}: An {R} Package for Global Optimization by Differential Evolution", author = personList(as.person("Katharine Mullen"), as.person("David Ardia"), as.person("David Gil"), as.person("Donald Windover"), as.person("James Cline")), journal = "Journal of Statistical Software", year = "2011", volume = "40", number = "6", pages = "1--26", url = "http://www.jstatsoft.org/v40/i06/", textVersion = paste("Katharine Mullen, David Ardia, David Gil, Donald Windover, James Cline (2011).", "'DEoptim': An R Package for Global Optimization by Differential Evolution.", "Journal of Statistical Software, 40(6), 1-26.", "URL http://www.jstatsoft.org/v40/i06/.") ) citEntry(entry = "article", title = "{D}ifferential {E}volution with {DEoptim}: An Application to Non-Convex Portfolio Optimization", author = personList(as.person("David Ardia"), as.person("Kris Boudt"), as.person("Peter Carl"), as.person("Katharine M. Mullen"), as.person("Brian G. Peterson")), journal = "The R Journal", year = "2011", volume = "3", number = "1", pages = "27--34", url = "https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Ardia~et~al.pdf", textVersion = paste("Ardia, D., Boudt, K., Carl, P., Mullen, K.M., Peterson, B.G. (2010).", "Differential Evolution with 'DEoptim': An Application to Non-Convex Portfolio Optimization.", "The R Journal, 3(1), 27-34.", "URL https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Ardia~et~al.pdf") ) citEntry(entry = "article", title = "{J}ump-Diffusion Calibration using {D}ifferential {E}volution", author = personList(as.person("David Ardia"), as.person("Juan Ospina Arango"), as.person("Norman Giraldo Gomez")), journal = "Wilmott Magazine", year = "2011", volume = "55", pages = "76--79", url = "http://www.wilmott.com/", textVersion = paste("Ardia, D., Ospina Arango, N., Giraldo Gomez, N. (2010).", "Jump-Diffusion Calibration using Differential Evolution.", "Wilmott Magazine, Issue 55 (September), 76-79.", "URL http://www.wilmott.com/.") ) citEntry(entry = "Book", title = "{D}ifferential {E}volution - A Practical Approach to Global Optimization", author = personList(as.person("Kenneth V. Price"), as.person("Rainer M. Storn"), as.person("Jouni A. Lampinen")), publisher = "Springer-Verlag", series = "Natural Computing", month = "January", year = "2006", note = "ISBN 540209506", textVersion = paste("Kenneth V. Price, Rainer M. Storn and Jouni A. Lampinen (2006).", "Differential Evolution - A Practical Approach to Global Optimization.", "Berlin Heidelberg: Springer-Verlag. ISBN 3540209506."), header = "To cite the Differential Evolution algorithm use:" ) citFooter("BibTeX entries for LaTeX users: use\n", sQuote('toBibtex(citation("DEoptim"))'))