diff --git a/.gitignore b/.gitignore index 71c796e..873ebb0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,4 @@ .vscode/ build/ src/std/ -info/ tmp/ \ No newline at end of file diff --git a/info/BECERRA-SENIORTHESIS-2015.pdf b/info/BECERRA-SENIORTHESIS-2015.pdf new file mode 100644 index 0000000..7b80d10 --- /dev/null +++ b/info/BECERRA-SENIORTHESIS-2015.pdf @@ -0,0 +1,19703 @@ +%PDF-1.4 +% +1 0 obj +<< +/Type /Catalog +/Version /1.5 +/Pages 2 0 R +/PageLabels 3 0 R +/Metadata 4 0 R +/OpenAction 5 0 R +/Names 6 0 R +/Outlines 7 0 R +>> +endobj +8 0 obj +<< +/Creator (Apache FOP Version 2.4) +/Producer (Apache FOP Version 2.4) +/CreationDate (D:20230928081746-04'00') +/Author +/Title +/Subject () +/Keywords () +/ModDate (D:20150401155707-04'00') +/Trapped /False +/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.4487 \(1.40.12\)) +>> +endobj +2 0 obj +<< +/Type /Pages +/Kids [9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R +19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R +29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R +39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R +49 0 R] +/Count 41 +>> +endobj +3 0 obj +<< +/Nums [0 50 0 R 1 51 0 R 2 52 0 R 5 53 0 R] +>> +endobj +4 0 obj +<< +/Length 865 +/Type /Metadata +/Subtype /XML +>> +stream + + + +application/pdf +x-unknown +2023-09-28T08:17:46-04:00 + + +Apache FOP Version 2.4 +1.4 + + +Apache FOP Version 2.4 +2023-09-28T08:17:46-04:00 +2023-09-28T08:17:46-04:00 + + + + +endstream +endobj +5 0 obj +<< +/S /GoTo +/D [54 0 R /FitV] +>> +endobj +6 0 obj +<< +/Dests 55 0 R +>> +endobj +7 0 obj +<< +/Type /Outlines +/First 56 0 R +/Last 57 0 R +/Count 10 +>> +endobj +9 0 obj +<< +/Resources 58 0 R +/Type /Page +/MediaBox [0.0 0.0 612.0 792.0] +/CropBox [0.0 0.0 612.0 792.0] +/BleedBox [0 0 612 792] +/TrimBox [0 0 612 792] +/Parent 2 0 R +/StructParents 0 +/Tabs /S +/Annots [59 0 R 60 0 R 61 0 R 62 0 R 63 0 R] +/Contents 64 0 R +/Rotate 0 +>> +endobj +10 0 obj +<< +/Type /Page +/Contents 65 0 R +/Resources 66 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +11 0 obj +<< +/Type /Page +/Contents 67 0 R +/Resources 68 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +12 0 obj +<< +/Type /Page +/Contents 69 0 R +/Resources 70 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R +81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R +91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R +101 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +13 0 obj +<< +/Type /Page +/Contents 102 0 R +/Resources 103 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [104 0 R 105 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +14 0 obj +<< +/Type /Page +/Contents 106 0 R +/Resources 107 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [108 0 R 109 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +15 0 obj +<< +/Type /Page +/Contents 110 0 R +/Resources 111 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [112 0 R 113 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +16 0 obj +<< +/Type /Page +/Contents 114 0 R +/Resources 115 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/Annots [117 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +17 0 obj +<< +/Type /Page +/Contents 118 0 R +/Resources 119 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +18 0 obj +<< +/Type /Page +/Contents 120 0 R +/Resources 121 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [122 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +19 0 obj +<< +/Type /Page +/Contents 123 0 R +/Resources 124 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +20 0 obj +<< +/Type /Page +/Contents 125 0 R +/Resources 126 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [127 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +21 0 obj +<< +/Type /Page +/Contents 128 0 R +/Resources 129 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [130 0 R 131 0 R 132 0 R 133 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +22 0 obj +<< +/Type /Page +/Contents 134 0 R +/Resources 135 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +23 0 obj +<< +/Type /Page +/Contents 142 0 R +/Resources 143 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [144 0 R 145 0 R 146 0 R 147 0 R 148 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +24 0 obj +<< +/Type /Page +/Contents 149 0 R +/Resources 150 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +25 0 obj +<< +/Type /Page +/Contents 151 0 R +/Resources 152 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [153 0 R 154 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +26 0 obj +<< +/Type /Page +/Contents 155 0 R +/Resources 156 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [157 0 R 158 0 R 159 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +27 0 obj +<< +/Type /Page +/Contents 160 0 R +/Resources 161 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [162 0 R 163 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +28 0 obj +<< +/Type /Page +/Contents 164 0 R +/Resources 165 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/Annots [166 0 R 167 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +29 0 obj +<< +/Type /Page +/Contents 168 0 R +/Resources 169 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +30 0 obj +<< +/Type /Page +/Contents 170 0 R +/Resources 171 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [172 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +31 0 obj +<< +/Type /Page +/Contents 173 0 R +/Resources 174 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +32 0 obj +<< +/Type /Page +/Contents 175 0 R +/Resources 176 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [177 0 R 178 0 R 179 0 R 180 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +33 0 obj +<< +/Type /Page +/Contents 181 0 R +/Resources 182 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +34 0 obj +<< +/Type /Page +/Contents 183 0 R +/Resources 184 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/Annots [185 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +35 0 obj +<< +/Type /Page +/Contents 186 0 R +/Resources 187 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +36 0 obj +<< +/Type /Page +/Contents 188 0 R +/Resources 189 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [190 0 R 191 0 R 192 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +37 0 obj +<< +/Type /Page +/Contents 193 0 R +/Resources 194 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +38 0 obj +<< +/Type /Page +/Contents 195 0 R +/Resources 196 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [197 0 R 198 0 R 199 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +39 0 obj +<< +/Type /Page +/Contents 200 0 R +/Resources 201 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [202 0 R 203 0 R 204 0 R 205 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +40 0 obj +<< +/Type /Page +/Contents 206 0 R +/Resources 207 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [208 0 R 209 0 R 210 0 R 211 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +41 0 obj +<< +/Type /Page +/Contents 212 0 R +/Resources 213 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [214 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +42 0 obj +<< +/Type /Page +/Contents 215 0 R +/Resources 216 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +43 0 obj +<< +/Type /Page +/Contents 217 0 R +/Resources 218 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [219 0 R 220 0 R 221 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +44 0 obj +<< +/Type /Page +/Contents 222 0 R +/Resources 223 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Group 116 0 R +/Annots [224 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +45 0 obj +<< +/Type /Page +/Contents 225 0 R +/Resources 226 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [227 0 R 228 0 R 229 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +46 0 obj +<< +/Type /Page +/Contents 230 0 R +/Resources 231 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [232 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +47 0 obj +<< +/Type /Page +/Contents 233 0 R +/Resources 234 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/Annots [235 0 R 236 0 R] +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +48 0 obj +<< +/Type /Page +/Contents 237 0 R +/Resources 238 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +49 0 obj +<< +/Type /Page +/Contents 239 0 R +/Resources 240 0 R +/MediaBox [0.0 0.0 595.913 842.74] +/Parent 2 0 R +/CropBox [0.0 0.0 595.913 842.74] +/Rotate 0 +>> +endobj +50 0 obj +<< +/S /D +>> +endobj +51 0 obj +<< +/S /r +>> +endobj +52 0 obj +<< +/S /r +>> +endobj +53 0 obj +<< +/S /D +>> +endobj +54 0 obj +<< +/Type /Page +/Contents 241 0 R +/Resources 242 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +>> +endobj +55 0 obj +<< +/Kids [244 0 R 245 0 R 246 0 R 247 0 R 248 0 R] +/Limits [(AFN_AMN) (theorem.11)] +>> +endobj +56 0 obj +<< +/Title +/A 249 0 R +/Parent 7 0 R +/Next 250 0 R +>> +endobj +57 0 obj +<< +/Title +/A 251 0 R +/Parent 7 0 R +/Prev 252 0 R +>> +endobj +58 0 obj +<< +/Font 253 0 R +/ProcSet [/PDF /ImageB /ImageC /Text] +/XObject << +/Im1 254 0 R +/Im2 255 0 R +>> +/ColorSpace 256 0 R +>> +endobj +59 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [50.0 534.768 338.432 546.768] +/C [0 0 0] +/Border [0 0 0] +/A 257 0 R +/H /I +/StructParent 1 +>> +endobj +60 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [489.344 474.168 522.32 486.168] +/C [0 0 0] +/Border [0 0 0] +/A 258 0 R +/H /I +/StructParent 2 +>> +endobj +61 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [50.0 459.768 427.448 471.768] +/C [0 0 0] +/Border [0 0 0] +/A 258 0 R +/H /I +/StructParent 3 +>> +endobj +62 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [278.48 379.568 361.172 391.568] +/C [0 0 0] +/Border [0 0 0] +/A 259 0 R +/H /I +/StructParent 4 +>> +endobj +63 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [50.0 345.168 115.424 357.168] +/C [0 0 0] +/Border [0 0 0] +/A 260 0 R +/H /I +/StructParent 5 +>> +endobj +64 0 obj +<< +/Length 1764 +/Filter /FlateDecode +>> +stream +x[Io[7Wc{(Mw !vh-Mp/D-5-"#6067&wj4vijIW>saxA>{qs@BP1}aۛ;n޽۽|{굪|ȋ =ܰ^8 qw;eԮ́DԅbH*$w$)M4)d]d>LJRޘJr8yhʽv{ Y鱪*gz#gQh_U7:Ȯ/D9$YDP6'[HSZ/ms2GT .tTD0 +=/ϋ`zV˔k!tc"2$H{?k>L؇|.,| QARL"N05"+; +o?W4fd#k!aA'#+HKKRbsiZj&D*wwh7y7Hhkz\>;hzI@SF-wk/$Z9+|IOɒ|0,iUqzbngWMVإaW.fZR*Ǚlۇ dMNЅ]("}'K#36 Bڝ6-4L6ݚF_n}Ggzn3@q81wq3Ҷ$֐3T; B3=X@vU6zWY(tJ~PΫJPwv%v}21m"٢ԽCZuDS&fs|Z2>՝?}*]S4LЫ2Vnlٺx} 5-ki22>\+3 r^& HF:[Uʁ@,e _55Fi k@$(?Z@s- X= /ǀ puw]¹)YjV3k8^LYB +6=&}ڂT[D`'GNmh2J4k clh^:z,=FKQ@4K}VF~ą1PQQ@6U܌۟u+Kvy. +LMVyy\!>}S%x1tʋ'K:ힹ>m(0j)7lj:?jۂ٤c= I>4B0Og-\ǻb5t3n}{=R7ؕn#xjۡygF3P,njVm vE-/s s-3%AT2c,&U5f%.'Zoo7Vp}7B&> +stream +xuSKo0HYlq7I[ET𲖼@ *>c썴[1osl|eqJ5Ą"H՚TDM~ɵVhwFᣝ27` }yB 9G[VD"}vF"UAj)*5hHgC +/ $)/l>^ +endstream +endobj +66 0 obj +<< +/Font 261 0 R +/ProcSet [/PDF /Text] +>> +endobj +67 0 obj +<< +/Length 706 +/Filter /FlateDecode +>> +stream +xuUK0 plJ*und *;ߎf ]t54J9Ȫ4CPI|zjcm C@q*N,xّ"Na s/̓6BLfG֋aS:@(dKgzZHMjVo"?$3frҐ @r*X 6~fS lƩfE1ɪV"ggIphM5XGui:15S +eQ_6^L@@i$V=&i.JGJ򐃌xftҌjlvi++$,[%";fK_d,<9x>%jub*ỻʁ3pʞ/ O=ȑ<s.> +endobj +69 0 obj +<< +/Length 1245 +/Filter /FlateDecode +>> +stream +xYKs6Wp@.){8Uv\nxFeÛi!g.' |n<a;\DaGĻ=)0wYYF `x>i; <&8`/"dX+WuS>m^qBCN8&e~bd$_2j>|Yoa`ۙ!8 +tnlWlMox׀&#/ֲ'B~Smd`J@x(x~`Jї۴g e9)uz~ +@`d^ka1NI-'i- &:RTq?qP-u"蹻|̄gZ1C_Df)ֵlKHFa=+Ww7kwl˛پ Mc=h)jH/'Rv!o*knWF:JQp 3\PLTnTz"RzK'>JutD2yFUt>ڡ;`B޴~ b ć(=-yVZUnW╱B]֗ϯ yNO "^BѨ9p5WmWv\Coڨ0@&3I 4Syq۔qݚǻHٷfV׻X\˴kv- ӌ%Fb'SĠCe{9W;1 +%{5Ac]]uUW>i:_|~a7d6p.{91<,c,B1 +Jv=ᾃuVɒut + ubpYa樌ovX`#xn$[6XcY1p )lmy], *6)E{1hwɠpҩ +[#RіvJ+gJX4~ +Z +Z/A[6CWRv =b_97K(뵩M37E +IW?]JY}^WjΌB3 <)gaWFKP9Cja+nAGDzP;Dr);r"'tHO=Afkk]zq4R- {(=[Ζw/]ٻơr9t3NV +endstream +endobj +70 0 obj +<< +/Font 263 0 R +/ProcSet [/PDF /Text] +>> +endobj +71 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 603.657 156.997 613.225] +/A 264 0 R +>> +endobj +72 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 567.293 158.028 576.861] +/A 265 0 R +>> +endobj +73 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 541.838 194.526 551.407] +/A 266 0 R +>> +endobj +74 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 514.263 190.852 525.952] +/A 267 0 R +>> +endobj +75 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 499.717 258.178 511.407] +/A 268 0 R +>> +endobj +76 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 487.293 230.875 496.861] +/A 269 0 R +>> +endobj +77 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 461.838 201.867 471.407] +/A 270 0 R +>> +endobj +78 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 445.172 269.936 456.861] +/A 271 0 R +>> +endobj +79 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 430.626 242.148 442.195] +/A 272 0 R +>> +endobj +80 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 418.202 228.421 427.77] +/A 273 0 R +>> +endobj +81 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 401.535 266.027 413.225] +/A 274 0 R +>> +endobj +82 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 376.081 276.347 387.77] +/A 275 0 R +>> +endobj +83 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 363.657 202.512 373.104] +/A 276 0 R +>> +endobj +84 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 346.99 234.648 358.679] +/A 277 0 R +>> +endobj +85 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 334.566 257.694 344.134] +/A 278 0 R +>> +endobj +86 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 306.99 250.338 318.679] +/A 279 0 R +>> +endobj +87 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 294.566 245.936 304.134] +/A 280 0 R +>> +endobj +88 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 277.899 238.784 289.588] +/A 281 0 R +>> +endobj +89 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 263.353 264.39 275.043] +/A 282 0 R +>> +endobj +90 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 248.808 405.088 260.497] +/A 283 0 R +>> +endobj +91 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 234.263 418.921 245.952] +/A 284 0 R +>> +endobj +92 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [183.368 219.717 333.451 231.407] +/A 285 0 R +>> +endobj +93 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 205.172 320.391 216.861] +/A 286 0 R +>> +endobj +94 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [183.368 190.626 333.451 202.316] +/A 287 0 R +>> +endobj +95 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 176.081 257.603 187.77] +/A 288 0 R +>> +endobj +96 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 152.747 302.271 162.316] +/A 289 0 R +>> +endobj +97 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 136.081 249.845 147.649] +/A 290 0 R +>> +endobj +98 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 120.929 301.784 133.831] +/A 291 0 R +>> +endobj +99 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 106.99 288.845 118.679] +/A 292 0 R +>> +endobj +100 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 92.444 524.91 104.134] +/A 293 0 R +>> +endobj +101 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 78.895 298.754 90.585] +/A 294 0 R +>> +endobj +102 0 obj +<< +/Length 222 +/Filter /FlateDecode +>> +stream +xeMo0 >'4m˭E*ڿiɖ Tf `P3%m v a M4ta5[XZa5+#Su)O7;լXj5\d8;xS/ +'9u6 uEU2y|C?zݘSh?ސZX%QG;>SR_ +endstream +endobj +103 0 obj +<< +/Font 295 0 R +/ProcSet [/PDF /Text] +>> +endobj +104 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 749.659 185.369 759.228] +/A 296 0 R +>> +endobj +105 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 722.083 179.367 733.773] +/A 297 0 R +>> +endobj +106 0 obj +<< +/Length 1681 +/Filter /FlateDecode +>> +stream +xڍWK6WV]%_6HZ h]JtH*^wm@/"9ftU7~~5p7,,+3srܶyޭ"f\oʪNۤj$xc9q%kXm\[3M 2̖x Fxgk ?){:5 /{$0iZTlVDG )1E<^ΌǙ-ꔜyx^0U87 EpIg#@?IsRH3OLdD-:j:06A1A$8,·aqG_uU,Ό}wCyOG{`â( N?gflؒYݕ%(c̮yIa +2Sb.Qs lxZY!'((AY:='=22znYWL0J# kज़w%~`8t L똄H qsbgB,O~N&2t#ʨ:+Wʙ#D zŃLitHGHY{S= !0'oKRBf M.|ˤ0l; Bg8c W!cMEs(ygy>`G&&/O [4] Y!Z4 Q`ߏ veݓ mPg@ +{j2%#&"bI\ GȇEl3Ťŕ'm%q&;\WVfUí^v׏AY T7wgh=68] 5aImF@wu/,D$@a䨦Itn%* WY fJ`:5O/'Ĥzh0x49aW pS(:ԞSbdF%ϲ6{|T /hWK<`a/3/l&Oc\$nADK ; c/@E[ +kSкljxaގTSJ.PU[)(qhY{^cr̐T$ͧ7ݞ¯{ 8*S2*>G=)ܢ~s`{Z:Rw4襻BDL4@~EEFIjz|96 I@K㤴5Ӈ։Ĉ#/"(KL8pe#Gs/ ȋA}Ie,UV _8&zdH8rMPJHzROf)Q/SaYV'c`Z'$By1μw𧜮e 1aB0Z]gpD DHo5`gg~3qyZm|ȶ5[#{iV +endstream +endobj +107 0 obj +<< +/Font 298 0 R +/ProcSet [/PDF /Text] +>> +endobj +108 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [299.659 76.083 307.106 87.772] +/A 299 0 R +>> +endobj +109 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [358.591 76.083 366.038 87.772] +/A 300 0 R +>> +endobj +110 0 obj +<< +/Length 1376 +/Filter /FlateDecode +>> +stream +xڅWKo8W(+%H.[Fmb(%M~ádu^yԚ}!$:g&Eti?>u<.ЎSJdvGf}2/8wowI"FV0r=_L]feZSQWvM?rfIkZ5#zqADq ;3犘|I} Ҷk19BıRܪZ7Pvξ4j|xfj E<-U Pk_+Ӓ, +_>d ~4e]3j2|w,ݙj,F N|H7hzdM?vQ;}S7 ƺD/^Fuq'c&^̈L_9PP9&Z(9L$8I۫e+vvnh1["^h:P64Aoho¡P_~#Ui*O3"znh8/曃'ulTO@.sԭ +_%nr*v-uE!hjc,[΁A1L9qo5G>eΧ`ԯlr.|ٙR0xFHӐ]7>֞fp qިb*?p -=e/S&.DumEOj "1epABhưa cHPaYjGsq?~m5k^㧞LҲЬk'[*$v[_=cJ3gݫnB&Yhx3[@x ݧJ, iQ^} Ƨ-ͬun5װqs#lUR\R$2Lݓ9pk|~aN|’2Tog`8<yb?Y\6v(]NֺAM-~}@'tQ8jluc;մ{à +c}N[l$5g5_ձ>x!C'DV$4W^CWkΤL8Pվnӓ%I&}ӥX1B)Q~ I+Y4֫NHn8^ 9d4O2}ۓyCw&> +endobj +112 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [164.29 661.262 171.737 672.951] +/A 302 0 R +>> +endobj +113 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [314.258 493.69 321.705 505.379] +/A 303 0 R +>> +endobj +114 0 obj +<< +/Length 1321 +/Filter /FlateDecode +>> +stream +xuV[6 ~ϯ,%Kbr=t}Pĝ/Er6DS$ERI!+כ"/6^IBT2c& U Sa<&W۷Y*EjaK +/|-ea~UZRQJP'(!;)>jg^m0?Nu!4ନ:9QV'QO9C|fb]؝:U6]M~:>>0ףǭ.ǁm.n$GC!d8K2~9eJ4gi[8I|9&O7>yACR_)Tw*Є#f  \t 9dL-R'B3UIwe.~8;]>L6f䫡gRoEUۄ~ +1#]ΛufS%yg9Ofі1*`,F4sV?m+/ET"|"'t$`Bk}@\&im1+u#$-rP"(0K1 ˇhS[ՙtN(SfMv\ +_]7q;|V;Y* o=k=dN +'kO|\-%wW.H+Yu*:ʊ9XdЀ&\BV_E*DQc9S"R2("4>n$>vׂΤ;.9~;/at{ +gyj#ti!yRư5lfUiV<`2wu%XYZ|!촨\mi*vXt1hc0N+C/Vq ͬYѷSdM3 [#xh)5]X Enz 7?W:ρ i}[~Ura{anB#qZ6M=K毶~[x_ #i5/EclηsFF(%E\)w?* +endstream +endobj +115 0 obj +<< +/Font 304 0 R +/XObject << +/Im1 305 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +116 0 obj +<< +/Type /Group +/S /Transparency +/CS /DeviceRGB +/I true +>> +endobj +117 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [304.081 376.187 320.013 387.877] +/A 306 0 R +>> +endobj +118 0 obj +<< +/Length 1878 +/Filter /FlateDecode +>> +stream +xڕ˒F_UExfxħl'NUJeoq,"Ȁ|}d\q.b#4 +~{V@P`YDiVug6 c+?dDz!^Wږ ?McԃLcUέh7Y$UH$7 N;@} н:ؽ #];CRΒhʞVqX{LigST[)mX|lx*GʥY60u -ޘ,>ghO;8F|]9/ĵf]T(@BRXoK7L*YrD54P~;p@猴0uWj޶CL=͎MPtBU&9^ :  jc4d /jm1&jMDn iŏ kNhhP~71#a=x ]<ɹW6|Aqh^s:V9PjX^B9>]󣣓s" ;W GC9DV;7P@~>iUm3q/`&$4#Us}yicQgXGe`L +]o<W}`ƑIvI\u3EJDj&H㔺DEE z(Y%mۜF,{nis$^ѳyܱ)Wh^s9ubJݷ< պ,Vf/ +kYL)'g %G7*;2a:3M;,J rd +v&,C݆"EGɃ2;F*d?*HX&*r$2#}ˡ9*ΰ'PCAإ}I]A|Xnb"jʈ>Ψ܂Qvąd}j,K,§9РH~U;)1bJpˎ!U8S ; P-F9 +bjq̲3s6t QT%+o Zم*ǩ(b#mSU BUC/j)kl8bpvw7ޅ۩F1`q, : =f.$ovF.N6X/-&rŎ)Ոj4$@G1"{c[ L/aŬ6, +j-.:2TIu[`,*KB(f"͠36ұu`U2%.'<+ac>b!4*8Wf\FsI.= ȡ7衅y.CƏXCS"/lUb‚sG}36r/"?^o,i>xi|pb=Yj\yC ;8yT 7Pw1q̝v<2b1eEx'xzSP|Lhi1ÿffqF:e(<+Mxx4! -whH>%&1@t(V0N0"b9цo}h> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +120 0 obj +<< +/Length 2395 +/Filter /FlateDecode +>> +stream +xڥXKϯ-TՊC|Zd]I\ICA3|(RÉ]F?>t#ڝww?"*|:Lbp} >]AkrMYDZ->QA7G__ ݏw_p.)"+B owQ|Bla4ݿqι(LwAEmA?oi>~Uˬ`faj;:cǓgHyrcqWxdVpya3/^  y᳀~ dǩtGrN0P%93 6^ps(y뜶#J5}5bٝ:LwC5V]';YСY0`iFݪAg8̇X<dj\}٫C,W[tiϣo@/v*-jNV +bjUV|.8+MמLgJ$gsTÙ 6&81d=B+k;.㼣piRq+DSG N5kk`~:ReD8E ,?ʮ]9[PstЊe,Ӝ]덀8Kgɥ ?x%z'KF5(s`4L3*8]#goU7 <=\!Q|vѭLdGۍ|*c'.7kǎp8s7s/(?vrh xℇ{W좑eҪG qKk_ݦNUϸ]$1r°"T4PmL%`bJw'oD,M8ׂk)ZY1%&[MhSarA$.PbJ)hzq0ϑSy /W?%O:)ޖ,BfqT$CȎte7c[/02l2xKțɤ]Ԏxv4If7 5oif6*L,?A۪Bo{pnfmmpM2߽/X7vJMRp1X V|eCpfN }0|uK)(I=Tkhԕ@2R|\U0Ȝpx"(F\=! cEG)',Ld +Wf݉Jl>^s\KeR)~Y@u1I7/2n=0-eJe8֑ҪiyӰPkR8o:-qٲe0$r8zusg]=}r؃!H)STs#CWtt=?R1u+[VhzSa#h`Ldy!Xwf: >V(^WL*yE7Eb"eQڍ㱕eW aN-Jy' J>+qvnKqE"4V x/ +endstream +endobj +121 0 obj +<< +/Font 309 0 R +/ProcSet [/PDF /Text] +>> +endobj +122 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [398.761 395.442 406.208 407.131] +/A 310 0 R +>> +endobj +123 0 obj +<< +/Length 1412 +/Filter /FlateDecode +>> +stream +xڵWK6Whk._=4ih$UmuHr6PV@{!98o<:D2RCIZfoҬ]IsMcغڻ nRi;j] Lx.! +Ϗ ȅry_|I5Jq*Yzq+Vi!.=oHÊ@+U}Ɏnу$+[$4-UQejw{'hEYz3s0HU:sKՓ3[? >4Rep"ƨL98P<}J=c-0c~]bB'v\mf>ec@forc}b 7|1_/ +jzά^,̔FԀ/~>B|&oJ-8_Dîw>s(䏗wKXRxF^dbx!TL[3.J)}N ջN TMhԹ)z8"k/Ea? =)jLJg7+<ÆǁU@rW5>>fGayJXb9;CAJ,C%J,T2qDX/UcTp;Aj,r1KX?]!ݷMe) ,9p^MZLBG Y<*6Kנ\"MsWK,gXahea! zS0n)튬w)]3y^=M5P׮s;;t [AiF.)`{pz##lvR|#Dkv)uo:!l: Sf"/| bkl4& /Ȱ +(YtI +6.m[jKsTI +r%, %"QѰ)èp獘W tbdYjz.:vG=s7[>o|s׬/}/aP> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +125 0 obj +<< +/Length 1300 +/Filter /FlateDecode +>> +stream +xڕVKo6W=qHJѦ40rsVVrD3áal +{P$M""~߯/~=3(dLI<Y$>Nn\L"Mi2TIZTܨn\g'!OJa|e+]Ȩg2ЋViɜ?TƜ{;c羵2F3^bT܈botoj}'׋fJTKJrpWT%BK8ݴJxە,!qDs8җbNĈ9$ߑ8h=)XՐ<٩zuDܴ"+깋&s3 +ԇU^G;N-PE"^`}<hp Uhs:?^ wGhM Y@MBյ<Қ C +!t* T*}09 vdvŠ /EM۞lo[OGkfJz.Z: {r3>Iجxp>Ȣ~.47)2^\m\z$8?O[쌒mI0ܴlv':W#y @D&!xUd&j 3 s%r{Ѯư;LAG5*H;1OظD0a}CgnE*ulœFБGz?!7Rq]G#0 ?^`?2 C1>4" uZJ5&kXDCEj=پT((W)]OriM~m]D {E4 D +@B=B,V!]yݔ[d(9h.,?88itZfiQh*,2.BՓHhkx&^ZUk nhK +m4q zDŨGvҩݹsK驅XR {kt>6Ve59j#۷ ܊\a qH#)kE{dhlp@:׌lg0qN]èxh5BVh(XjF+W6+)f+`m͌g^@\a ̝sGZrRR?lKT~ ~ ̐tV@5א1N:97Xh$?yu kT,&f +攧8Oj b5ϯOLa!S]a1äC!KzFU'I8ڍ; +L=CmΠk߭ʒ!J<B 8z%D xjo")a$r^D̉oc +endstream +endobj +126 0 obj +<< +/Font 314 0 R +/ProcSet [/PDF /Text] +>> +endobj +127 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 406.331 518.849 415.354] +/A 315 0 R +>> +endobj +128 0 obj +<< +/Length 2665 +/Filter /FlateDecode +>> +stream +xڝ˒۸>_[*KC묽7ٝT^8"$L2Ay< LsBn0ZW7߽Uf +\iVnՇ͡< _oցo.k <ik۔E&x8m8J9x{qJ1CY&p{1ZU0* +u츂PfͿnRaaL<^DajR>U*bloۭ]6ZmtjxzMju3;tMYf›F+9uׂ-ETNPd5}ƧWCx2r_MZ/+ԃ۠e"QV<C恀a851\3k\i*)W] Tm"¾btZiʖvX!/!ّzq<8{*q%Uv[;V{CEI‘ϳlCډup6Ѻܒ_87i|ͺ~1~@Vc4}vWyx]4p^ >k-0Do`t3q`xBA2B)ƖN@rj˚D"6" ?K=S;' l;ʝXpk_!+UgNwƁ$34X.´ ;Ƃv}S3=0LhH:MAEE,GcE6%0aՙW}=k|ׅ2mvn e&Y@& ?w`M {oyݑ$*(4nkd/)HpLA >뚆b%(5aTNAy:aYK9$4lFRcp{Sr!C炙\M')@mYx,y +}I[ɽ4Y"Ao0ZDuܟs v-- (ZX$ \Ʉ:2/k&3=6̎t)d'$B2T=cFe{7t>:1nDO,NQl0=I*kMC?*xX갪 ۞Ncy楌Жy)$7@9xX]ϸ½{z䑣";Iiqx=E Ze˹IDjڏR\!umy‡rr@MJK+܀ͣΣe`(i59D<ʾbTV +JAa.^Ґ|Z"Lg,I4Vs5 x8e=iqMt*w.9I<u޷I׀Ჟh\pR]ra^[}>] 2uCG[-S ɔT^]z"1pP.GwZ201$8l=x!(wI퇮YVn)SJ +u7=t BQj&Z.՜Ջ o]|s.OJKnIP=AҬg߹]egC%u&}sEqych$G)xQmQ6el܇*䱙bLl\4>I_l"9tҐm>^fBv\؋x9ߏGD)z_}2RtW5-:"CK®~+K_Z3z7ltnhvPS7eϸ]tsN zդ Е`l\>Fl^ERAMCRW_I7κߞ}ocAZ`K[B+:7O8-Z_'I1iNfkcCj}%`̔CG]u~w&(~~-Sqgtkh]6S4\Py +li!1&Ez$16>Gm(CwgGKvYzIo4guGa9{d|_\Y +| o[0.fy5̝#~UhZ=4s[#z2"w u oB()4C.1 +endstream +endobj +129 0 obj +<< +/Font 316 0 R +/ProcSet [/PDF /Text] +>> +endobj +130 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [369.868 696.985 377.315 706.008] +/A 317 0 R +>> +endobj +131 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [227.61 615.69 235.057 624.713] +/A 318 0 R +>> +endobj +132 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [339.891 382.165 347.338 391.188] +/A 319 0 R +>> +endobj +133 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [480.742 173.946 488.189 182.969] +/A 320 0 R +>> +endobj +134 0 obj +<< +/Length 2573 +/Filter /FlateDecode +>> +stream +xڽYKsWjDy֓lj7ΎR9$$1C8C~{%JKOrEFA7?<^4sLyI;}RUO*_c/2Pn5 MJ3ש8U|6'owa(ͽg){*ϜFkl{y07%q"U_LNS>mavr-'%vR/O}ȼ˔{;2M*qB/L5^"eaTMfV00vB, +Kpf􆎬 .f'}fp53_r.԰/YigƴDeYeXe'NIel"#Օv[S_;([$ħҟzE5p2ͫtWRtB*: P̿= ^i> vapdm5 i5 n"$rθSFBc/ML{1fL]beѶ=y+z=j:fMEOȫQCGhS~lV +4{J4 +UEBZ4F0!-П*ù=68N~W)5xA(P,$"= EI.ixxA8cۇ^uy)_<8/C4AD|S{z~BH輯ȼpOYI=y'*Lwjb V1QB9J9/6k3fw&icy3{4-ݧ8ɛu+,7kU/1i^]3'`QF0Vm/D9:,!Ru;O.~H\[}bPgru- 4)`Q[lΥg|~N2%V%th+y) ,HrQ)(so/}JCa_Y^F]υ6mD>@|*c2֙pى٥qmʤ8:旣;hx +H==4޳д[6'L;l?,a'%gA|QB)CE4Ͱ R;ޮl@9Wu'@ֲ^?ݬ]Sf*(y;/r݋Re},wҫd`+'ExT?_t)OxDҘP$d3x{f ]Հp}{7$#$T I +endstream +endobj +135 0 obj +<< +/Font 321 0 R +/ProcSet [/PDF /Text] +>> +endobj +136 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [140.903 563.612 148.35 572.635] +/A 322 0 R +>> +endobj +137 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [394.348 398.901 410.28 410.59] +/A 323 0 R +>> +endobj +138 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [429.936 355.393 437.383 364.416] +/A 324 0 R +>> +endobj +139 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [515.155 332.948 521.879 346.157] +/A 325 0 R +>> +endobj +140 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [298.642 312.624 314.574 324.314] +/A 326 0 R +>> +endobj +141 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [339.673 126.85 347.12 135.873] +/A 327 0 R +>> +endobj +142 0 obj +<< +/Length 1708 +/Filter /FlateDecode +>> +stream +xڕWK8 W{RIgl]`N:=hl%j[əˇIf{MI0aaf3{>ʂ(\a-Er^ze$ID}Rd2/ +H +Y$T#{D Y!U/KrGA7 +qf0{4v[ 'IY' ^Qt1 l:UgB<\(Ǭ~/vhݡbϼSكrHR8Zb[c- nTcd]^F&Zz6/ʦpN|2q%kHH;D+a|tV7?xweFU=x3Э5pbѭ B0 +LSz&*0Ǟ%t* +0c͐F֛Н7A(Gi7j +`>XDTb vt!r`:9Q5`1ߵP̢Vj*Byx݂O=ѪA8z +|$ivIieW_w3""ne`|DLS8[&a\F#Z߅Q:2ܔ$\j3!{Gq$eCRAVsmeLKZ1p0 ׷7DPI;^vL=9 b1$e$*$/lB-ix(W yak*\lRbd_Q1A/A&3ZD`őB%,bPJmMv+\KY)wa}ctv 5y^{Gj4 y Db')LcU8qaߣsU^nF&(y +Tle6Y ջcũ 𨟅 J(0mVAep g =B`lXhJw83Gf"!/}*[lpGqT\sHihO+7U;t<,}@8Zx' Lw$q"qwFcTzU6;c߽==1/d$ADaT:qcjp@@7BO(H:/.tyDvV>P KgCR;Cr!aTL`^LNH M*Ѝ)  yi!,EBDςQ7'8yZ5z@*Zdex܉-C]^䌅Rp/Ĵ%Qy%ÁǗQaXU?7xlbFΰaq +endstream +endobj +143 0 obj +<< +/Font 328 0 R +/ProcSet [/PDF /Text] +>> +endobj +144 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [394.489 668.364 401.936 677.387] +/A 329 0 R +>> +endobj +145 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [517.463 458.024 524.91 469.713] +/A 330 0 R +>> +endobj +146 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [390.792 439.821 398.239 448.844] +/A 331 0 R +>> +endobj +147 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [359.966 373.868 367.413 382.891] +/A 332 0 R +>> +endobj +148 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [401.671 353.545 409.118 362.567] +/A 333 0 R +>> +endobj +149 0 obj +<< +/Length 1697 +/Filter /FlateDecode +>> +stream +xڥXKDW\ if"'H*[8J=DG#ec~="okӯhwEEׯl0MU;(ߥI&Qv/2$0?~#&,#as>ms7[W}]Uvt h +X$$a,<ܫi# l+d\P@oK33 w\]@Q"$B 6O֏u9'V$amfbY^i K͂rw \83x}nB;D*R&/R" dX1n]kLV(4,pqJ{ qet.8Ϡ%u~@?V$ԅNp؄ڤ +T$3>k$x* 7^VAP4Dt$_J-G~ZLJ +* ;VX;ⅵtW u%$ueP(K0xUM{7qE Ƭr=S:.\Jܲי,B)-)Rɟ!4a+Y%jCt^ U0t^y)8#=IbM>,p]Y(Q(XݻJ0#l_ζ=j3bE6e +Xnt9CT`Lz֊idW=Tmܧ8 uZ• + q?g&Q^^ daFq^(P%s%~0E =YVMQ*$ՉQB"ml:Kk Q+"/-M$~:4PfUS8آNSl?.uPr)rt*;([k #J sB؀\H\. Z<\áiкaDY[0 `:3,)MXt8ʛ#v~a[+i4d'OH g3Ƨ4k0|Vs*_If6ڝ3i@\" c0>~THÃ籟^LYQci): yERDH\ȴD0XTCk9ad?e{g*_*:Hvo0Ʋo2:T UiNCVn 2)o2i?rbx׏7bp`봾_ !.Wg̀%p 8yQS1aK_{r }jx``eOU)4)U#G? a-}Ih3slo#/6gm*xoY{%9(B`LenP& n?ne?R? 8LHRH_:P$#}*x8C[2MW4'C?tQN @MZ[O#ΥG0}=Y +endstream +endobj +150 0 obj +<< +/Font 334 0 R +/ProcSet [/PDF /Text] +>> +endobj +151 0 obj +<< +/Length 2474 +/Filter /FlateDecode +>> +stream +xɖܶ>_ѷ_0dtp$>%$@593|bc%T +\zح2rjjCmxs7?\ꛗnd,8jls]l^ECmwZȈo?}Rg= +onmj;T{hXC_hy6P2 EW/~7s0sz[)`M,tne LLjכ_uc&tlܴS g2ZUQQ}I*}CՔ=i;MIcޕEwη* M#)At˂Dne<p vHQM4meTx%;%)v.d5>))a063^t@y}ye +2`a`=БcWVaa{C|pڼ+envi:D/{:_( sUbtj~ly3lj!yIW:6^8yM@.蠦m!d!:^'Jniautdc;B45i\eK#E J2\xj ȬkF3cr]0 2R ~벖֕:jn s^=5F)08҃xK>گ4"3fi2?}Ց/kxe,divȫӼ{a2 +rKdq` -Hz-KQtϾ,82Q]ݲ- U,eĐ7EUCPT͞î&z )?L>by֡E7I[kG9K퓨k_CxAA_21ﵥrq( +D@2bwEꏼMuy~b&z 7w;Y ^5񊮎>0\k.B +|Zˑwq)ڕKA;ԪCIxS.ԇ e[5/)k0wiVn!/q'.Fg~w'Ex9VU^LUylT0hJE2K UCU&5RyHFti+3ـ$7 x }Xt},Y<<)(='Vy5]?q.>g=S"-Rm0 + +0K\c|yx5'E>5ps9*wf~v_0֞f/VN圵\tnPd~._%t4rPQ$\z+Zp:/]5#&Gc e#l3R8l=%tqz]b:T_Q4\IgJW}Ȓ{D\q=$9shs +eR${_pؐ|*LT ~MOD3Vmc`+t 'Lj7Z hЋ5V$n\ ˁTde"ܢ2L & 3b%J_:i,c$}!5tX:u퀅O|rpjP @G`&@y XϱꇮzsrxvR A<d@?-nmWWwшPGЃ-芋6½Uq2KM |\9V|ߕV~1`%) +ߗJG2.&6ͻl2kG?KD=IO3ԙ~7E$j&Z{צTAς?-?iԍ`ʟMS +cu5[M{TAf'J"S'ϑ> +endobj +153 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [168.32 339.269 184.252 350.958] +/A 336 0 R +>> +endobj +154 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [151.549 298.621 167.481 310.311] +/A 337 0 R +>> +endobj +155 0 obj +<< +/Length 2303 +/Filter /FlateDecode +>> +stream +xYKsWVIlbWrUbDbIdA@ֿ>=DI׹`8M_pMp_`d!Չ IeM6}o]e@Jkimڲ5QMSw$@KDF"vկWqB \޾^`ČN\}! _)0c6̛W51cBF(P)ߑpPC3{*|GـF$ qA|2b"7kGDZ߰G JDH23Ksj>`S/ =ZeTt_D'/CZ8QNN=(MT!%'^]gHNeKq$ 쏻22+ӕ!1@,Stbl+Ĺ=7NT] +RP ?Ӏ3.m_vU Ȩipm>^b$GZ,%/Lj}`X6"ôzQ!J]EeXoP &E$R~XrѠ)EQFd00} X82h\1`PQmT8>aL.ůV"wi:= ZH=xS[.כ_!H@G(}>|r tVU;JHT wک0ҪУU&)Ml H-\ $i&+ү5д+msߔU[>M7  "uL <7xhCd=.j)wyOPD@EBNrմ/?˨;RA|gA1-^&CŢUPΉZTKQTJTUVz\y?7!iq(OlT ҝxNurl% f7PkRG-m&U7nѮ-'-o?e Zh,,OxɨnL@KX(2zꂙ" W^sP[1xnnm}=О(w‰EXr&w8ƁOUI$(=%hJphz=YZiXH=F=r*?LP ;CɅ9>a + vD.B6!3n'jln%ijҼÄ%_֍eM[:Asq[k'3*n|ցКtaU~{)?{ZAӿA .!@ik&iK)X h5^y;q.h_l|-m,&a?Eħ.Y5oPSA] "qHd?TO;&@<HQץ]u\#Iy _G+ʸHaݠeP ȓJ'/!)hcX-^e>O @#2MLFiA@%\0]Z5Ꙃcକ9d 9 Sr_E[)d+& yx0D؜|(C~+n"ٰ@@,3>߭6}}1r_xR)?_o[7 %+(R葄vvi7vrSv=hC2'|"|N;cGӉnR!ݠ+ W +endstream +endobj +156 0 obj +<< +/Font 338 0 R +/ProcSet [/PDF /Text] +>> +endobj +157 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [430.821 480.15 446.753 491.84] +/A 339 0 R +>> +endobj +158 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [479.675 305.228 495.607 316.917] +/A 340 0 R +>> +endobj +159 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [162.542 221.073 169.989 230.095] +/A 341 0 R +>> +endobj +160 0 obj +<< +/Length 2454 +/Filter /FlateDecode +>> +stream +xڕXKFϯm9E|"f '#DŽ<~hr{Q]]ϯ펻hۻoM3QXF=`X†Y^݇S4vo ^LyQ#x}gA{f>u"n触`&/I&LBD7on~1XvF0CwhWc]ڲ=3YvXq7Z8Y_Et[\-@gJ/ܯQ 5$Pxe1AƸmoBm]yVTnq^.62|u3J.;@>5mVlGa#؆I*͆q(40ElHȯ͜}[H2k3g[]ӻCB9m!$\$d++_-0+a% ˰O &,Q~ 3Fec 6Mh[zžH^(,Rw[!˜8LblDIh$L„̷Sa%BSpMձj4N"n~timfZ$I6ꏦZ<\X-0KDU$pG9ЁO +K߻c5֠8_[ + Z|XZv\B*5~әs5IO{\>5ɟE,6ne@i^j#JT!' NntHBg<@1Vlpʢt8 CXuʂGd6pO(NKB"Wɴ3 AbՅt Fʜ n&ߨ\:864&h4.jV_dg 9$6S<|, H ].6_20X̆!a/iɽ<]ؑF(5={\Pb iH"oWsdD ܺnt @YEޯf ?Fs[$S?^-OzW[S +\UT pܡ1DH%OvQdr6 1S}ap~^Iw7|S%ޟG63 }^Q\~uDo,e39Oܪ %wI®Z驡D1p#N#[Ld*GFge4"rgA B-FŔ$~bXI|Ď$EB=haF;@ ܢgEt G42b> BCKĮj⽉P}< Eihe^656ЉEvttQE!nc0@& + Kφœ;ܨL2W]2K&k>oR?/wQN2N o~eF o2ھjD VOʃRJ<2uaKK-fuwr0`"wїiyx`Ińef#"> +endobj +162 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [420.965 442.751 436.897 454.44] +/A 343 0 R +>> +endobj +163 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [239.616 143.274 255.548 154.963] +/A 344 0 R +>> +endobj +164 0 obj +<< +/Length 1807 +/Filter /FlateDecode +>> +stream +xڕɮ6zX6K-ɁOⳉhqH9_$ˎQk83$g`ͯoU8ZVAYQQ}| +_q2nK4̢/ߦzOGeUmR~tv:yo[8&W,ӬU'6o76 +qX2O_‡ Һ +* 67h$QeAQ0N:S*<~B]pimRgS3:{FcdAc pZpcOnXI;`lL v*#w hd,ԡ !#IaiCNF.@SuvW*|=nuM]7YO^;#CwyK_*7N7$Txt~gpG/hY=1.F +ih)H$ Ȇ:4@XKƮǫJ*{Y@,A{ ~u'HkMO n/׻ HP_PlH#*2B,渹wgiL"O:Y#T43~@jHN){à753r?SY^.mkѳ/.OZHê,u?]V.U7A\#N\{j-o'G k&ոx,@ҙ~Ӥ!D̵.}4aN%!{ z3~LPH4%%]g +4o`{v27g-wϷs]Dq)T@<"Kgk`5D}Eb~ڱg6)0SzU\ ++e0g}DsrnnC7O\㡒I#s@xt>.Y\Eph20& sFc'11\Cfo4ۓZ ̬!wyG7Z}PV+t煤7/~,Q gf2TOLMZڈ6zu'g5b{v[80)rHӠӖm50 B9QRukvʨ]VOBEUx7nV5l„!Y(hdh iܝ؞؄݋k bÂ+nU5Ӌ-03]ZQ OzH#g8ƬJF|,`0O/Է|=,1-c$󢋐\H"Jy r&˗u8x $ >^zT"xTׯl +U4[GO._(eTP ܗRZqhgyyOq.ĝ8g5ѳJT^LJYsq2f4<=-g)p +(bM=u)+ 3h,!Jq̐74DDQ.!fIEu(q +endstream +endobj +165 0 obj +<< +/Font 345 0 R +/XObject << +/Im5 346 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +166 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [350.551 688.688 357.998 697.711] +/A 347 0 R +>> +endobj +167 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 501.457 518.849 510.48] +/A 348 0 R +>> +endobj +168 0 obj +<< +/Length 2249 +/Filter /FlateDecode +>> +stream +xڕXɎ7WmX@w:E7ې2f,ؙ*ZsQsΆǗ*f0dl/>!/ !#/͊é:~hCE*~CT$9HT箷㥱%,Lrc1Ihm7 I +Rd{.|YŰl~?T0"?<[si"ׇ_{ƉI:>p~򃴜њ;>dE~0W_l{FP5py"e\ „醃;2> ٶh!Ø~=>K⪑0QzX=#^@ 02_,Bje'͊ dڞ/tP6E6FSoE!Ϟ*d( Ug `jLS6^D>9T{qB,^_[A"lq2U=@S3=- ACpxK!6Vнk:KZ&ۖ2A?L9/q?1hծfo$x0_xZSDmk*㢏 ^ǠNE~"Ȱ6Mjp?h* ڥ7IKb6J=CNٶ!<rK6BM;N~A~ِa8Zg 0ۄiyq4'3$`I:J,v |49Yo:~D6ۓ;B3 +=sEKoV ~E!ŨP +偯I -5io(^P"+2m^7UEyO3ȑ9yi%B0M;LR*!F o,J fG `& LѿYQ O|%/<8GHŸ1m+Wvs r֊,Q#bʠGetlj!RL&8beS0]k8tlg{Jjzj)ymlzgJWE{ ]<"94Eb?LD[8E3L/\ ^K1`#\8G4# 5Q#Aؗܶ9<|Gg.e8K$Su@m+BKt(L"BBJCf((`tq!h[ʔ< j߅0M羛cqz_v[ +GK ̗`7a^Tw0Ϗ}_nu haDm({?ih '-,PK;|Lh[oK&)2tOnB#3sSM{H-k.8IMTEL*7MEsn/h1Vŕ*&>V]#dݸ!ZBD=A /! I 1/# Reݶ~>`buR7jpXXChNnĨB40O +i`cf t|Ypr~v7_mE"u$@} +J /]@ s/N ,󱂀'J| q>d7 .qfre+N5cY+avOeg|L$k,(G+Q]S@b4GxK^Rg. 8  =]>`vb`UB§W~ht9^_:s yR{u=> RƱk(~R l2\6g./TӵU|I)iqL$7wX< ,#ӥhp!_d|5^S[nFɒeN@<κ +pnB6?- +endstream +endobj +169 0 obj +<< +/Font 349 0 R +/ProcSet [/PDF /Text] +>> +endobj +170 0 obj +<< +/Length 1670 +/Filter /FlateDecode +>> +stream +x}r6Э4fML:NZ{$$\|}FJ\H=fQWJ]|M,nU"L՛9v^yw$̋\0 p}cmut;f ;w ؆*riӌV޵w}?'Ac{YcLxh=Dž 2)TBNZOR_-@+Pi[$ANuܐv7Vδ~z-۞$mPw5i;3ʿC=xwu[tYX#!Q`-z*Im\cW93g=k[[;;WmfW/.z{cA[_#]Q.'l Y$MCOe-#9VPΓ;РHԑg!,Ŝ$5!Cw_Pr1XW֋T*X@.owWM +endstream +endobj +171 0 obj +<< +/Font 350 0 R +/ProcSet [/PDF /Text] +>> +endobj +172 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 128.345 518.849 137.367] +/A 351 0 R +>> +endobj +173 0 obj +<< +/Length 2589 +/Filter /FlateDecode +>> +stream +xZݓ۶B3}4`|[wmsM2'Oq2HD^(_:)LpGvA:YOxzԄQbe4DA2m'Wӿ^7mB"}z)pRD7e0^uY|63ŧy[b i gYŌtů :%f.?H'KxaN5L@{3ys#',ɨd*#IG"_'vRS߆ljXuG3K!X$(A TM$#}-QNn2{J>2yqM,v<@1^}T =$(G~WZx2=崬vm^- +W7|j*ϳ9ͥӫǶWlΠ ݿ)b>o`4GOO 0X^, uF|2#Jlv-b+d7[y&4E^UQTax޼Xz)ul,dpGA_:0ĴxK(mAJu,X-c_zy^ EaI:d1 XgbWSxrh^lR>جλ{.%#_ +~@Ћ \Ny=`3S*sź!Eqц-#ZF 0"3Z,2shR$\qkfgИLOGI\.EnRXۂz9WtPm8>$X7)@U?$m "e=""Iڬ!nKbeoZ|=m;s8n"DH9Y%d:1hlȤy ,YF2O"/`RȜusI0y4r0Ju@AKEd:iF/L!υQW>ֻBHJTLe_yx.50!mȩv<5Q4T;ej$+jtR GS_jar= i'W 87$o)2Y&y"S" _)i#t8!@mKP#3Wk=\Wg 2B5K} TDqp…1crx30O๎"' r& }Smͱ' ^:)Q8iǀvDܖck!B]6 J5"[b86(c50d +l + ؽ.iB:JZNŢvسrt;VK/ >RGϻK׃nxSW"k,c2d[[RJp3%|u"J\j]VL9 Dy, 3&} 𥿚JYBRB}^-Kj}kHҌjH0EPԽ.90t?spfzj)W{$m{ܪn(WeQ~ %U ,Z,jbcQq'q7ZMS{a,b(wZ붗諫Bƃ +endstream +endobj +174 0 obj +<< +/Font 352 0 R +/XObject << +/Im6 353 0 R +/Im7 354 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +175 0 obj +<< +/Length 2534 +/Filter /FlateDecode +>> +stream +xrܸ[!rr&c3eljtnD\m +%'Uʩ/hwEWv* +R=,]Q&a^Tf)Oo$ ?I, t~VO,d3qL$X垖ꧻW +N1Ep>}v l¤*w`;Tvw{;2gQg9_kt}&kӶR}(iԽz؟TsC V㝇vby1VQC M ) PJQ3;iFYdC)\u}@BB` ,40N6:Sک4sCD NyR 1Gl ~Mgr{rB6(ē`+䆳3s+a)e(.4)gWfphtDUoI߃g9#O?JIX`X! ޗUpQnjNNd5 tf-_"tИ|(p]tg\ Jnâ~A;@%.:xlJv3 %#2R78MwkMdkv։)}φ<63Vm[iTyU K0Q~enJjEYp4 RD6yNUS3@zpVڊX##6= ?3,O=wIv9R.<. Bx/ #H'!I9FV6{bYǤ8U*£<Gτ\U̎"PH"I{`qdYa1!aZTN$SEEdtG‚NJ0 $?ǖ3(>3c a},0SRԍF5 ?ɸ6Ό1)*´T/]@&CJLO؎ȅq[$]uS˱?сn%-CTFϔ)+RJ v/aQUOH#FoSFn=oжX8Rperp;̼b^Ys!*d-𻆚c]'r`G)Xv;>R )(p{lA6^^ϯxZB7qYzYO{TdJ")41'[N6q\sõP/j$-"eUA&IgcO '+Y]A0C\ 2lEr3[w<4/Y[g,&e1]xi8yF)& +'ńmx~)b2|O>w_N7"湿﹃{8.0K*ΛQFL u-Cʇ6<**>vTBi4g}C}F|)xߜNb~!yue0Xhoi) J{^iON7ԵsBjߚn&8?ш8}32~Y&8k'byJ" eҥьf+l2DH_#HjakǓ'zf'r9"/O۔ JsqQ]#N;WJ!UL|9~*70|z.S\~vh^ 7,|օu#=eP#xU\x*>E@vt,֯CrB +S{i֍ٜt䎷n^Wg K;GHTњ׳ƀy5m؇_qqzPwU׻w2f,+VvlnC#~ŝAP"/_飀(M ~JULLЏds +endstream +endobj +176 0 obj +<< +/Font 355 0 R +/ProcSet [/PDF /Text] +>> +endobj +177 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [411.009 666.243 426.941 677.932] +/A 356 0 R +>> +endobj +178 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [367.459 627.717 374.906 636.739] +/A 357 0 R +>> +endobj +179 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [202.142 436.688 209.589 445.711] +/A 358 0 R +>> +endobj +180 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [450.246 282.338 521.879 294.027] +/A 359 0 R +>> +endobj +181 0 obj +<< +/Length 2234 +/Filter /FlateDecode +>> +stream +xYKs8WB$ښCvk=J;9"$qCIœ IC4[sك-F?>t7t]ŏWz{ԂQҔ-7ԋD '>_|;,WBHo?xR$(wE- W:sͻY*eY*m :RL gqOStW :9HX_}.riAHN/`L@\]"$V݇tD5ʝ3k-rӘMv |L6m{44K'3YͶk:*6,ՒE- +h6ɶY*׍A5x+JI\uxE}uuz:' !BF "^0IR)Hx·?~)%D`NcS +JwCn;ϾI"\W[˞CkoKGo\I~[rLGK tCVmh5I*;+eܨ#кvqE;*Slwȧ]c]Vm j^0ְw~)֫k=CՎ*k-vp{ض_ mQ5$Va\LiTQc1']R)p182&`7aT} N ?Ȱ;e\ Psإawsc#ܘ׹hrR #ĝ"!٥'D<gK&>PsRqؘT!$p \nk|1B%$}DKu@ +10fNPWn><$И]ȯ5./Cp&RT0H Enh1NzYؑȹG;7.쾓3KA +^T0+;'I?5c,7N?91p3g<~t5l.Tm?rX^ +%oKTȪ|v-WƸ&ߍںjB_y8laO;-f%'7]FᱧHuU +76QKVR)bxtn űˢ5П¡i[.u( +RGb9]G- PnU"5LWX +endstream +endobj +182 0 obj +<< +/Font 360 0 R +/ProcSet [/PDF /Text] +>> +endobj +183 0 obj +<< +/Length 1713 +/Filter /FlateDecode +>> +stream +xڕWKs8 W( )zlOδԹu{Pl:T=ɿ_d)U݋MJ ޯ]]^)()24HR-$ ncйfZV~TZ)hۢ/4k6 +έ + גd"R+RȴvR@" LܝV_`)tOȔulW7+ڇ[o4tHzc#n7:VaV1hS]8<#E8Ah-$FwogDh`cM yЀʺ]V$&1ښ$oW5ӾIWկϨ8fTGmk=)/ DꨯQbLy L˅u}7KR s@&& +ߢ:s>ԣGW@ XkԳ߯ ퟊$3{}u3'fn 9o~ሉd!Y#$!l8̺:G[\@C#= t4(5ЇQ(꾥6e{g0:@S_r'ej1\!ӱء?Gk+ڏ=?__=۫^qo?}f   7>.5۶i(Xce9"y0[_K<揠]ӝϗ%m"T4*YSRA'!WF=5M(ֲ/ixXW;>.cG{8 0i +Ӯ)e\'MKQB0Y}h;_nkZ7xG4oKuyy|>#e7߅muiF7P Q,!;2q~Ӓz:!V#3;Wy>':C XqyD,,ju2wB׌gmaO7I"5c '7c6E-RXe~0&iBqc4jajz0pIgvC7> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +185 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [452.654 520.844 521.879 532.533] +/A 363 0 R +>> +endobj +186 0 obj +<< +/Length 1885 +/Filter /FlateDecode +>> +stream +xYK8WpU^HJUl%&;I-Tl$~[l`S3Z_jI/7WG8A*Q8YPFBR +,uvj:M?ݼy~EUw HH Xm42~_EM5$=8^vSi+3i$NCS-ś(ATNF)La'&y (v IA<<fUVy71 .$S[ Hv +ȹ,~?%2|ͥ0=H)p jzVciƑ Q.5![?җn +#}"?*fY^͘@h)SݖD]{LgDx'-VY]SB)A" ]rJةA1J9h NQ"iKEn=ջQGsBG[ _ JW -%X>-١k'nCi^TMfgj}WVbc]4F~Da8%lS볜9'}0&(98i/4*FnΝm7"ѭ8.@όFid+]LcYU0Ǭ3Mܧ:\3]G<6F0U˝iqo{[zYE̼ac-tF)mS +=42md_ ඲ÍUn5s: DA>)5/j]5"P^ė8HA!F;-QШZZ绪T.gʵz0j[(}:洚 csl4*M14>enB0 Hu#Jbׅj6q#K`-3p0ȾL{ h[˪܆K|?F ٟ&+Y!é ;M!C >E|T3C)a]2› ^$lw楁ς!R]C!l`͡mo=4BP&crHJY7Po>כM]A| \dxt{wcʍN?+kgWآ +yi`=7B iV3ǿuV͍=kKdxk;xr;7 +>|QC ,8_]NI`ZG?\=tdVoP K> +endstream +endobj +187 0 obj +<< +/Font 364 0 R +/ProcSet [/PDF /Text] +>> +endobj +188 0 obj +<< +/Length 2490 +/Filter /FlateDecode +>> +stream +xڍXɒ7WpuDwenK1n $+T U(%\P\TBDLTڭ뛿?*WqQVJâWO{sx{i~UZ*H Mk-*x~4I`&{ND]fuątǛh :̰sݼ}6Xyi][a9vxM:QX>`? +_Nʸ6-e0:a52tf@V08MdJ,ԛ㒹0g7N䍶HC-Rav:C +Q>%ɞ ѸeViV |?#W% 8޵GKƭӪdjRЇ-x4mL]KF0q!UȽ;Yiũm B'Ka.G>QUH|||ٛVL?@(D=Roܠm>SoUڍg?bao]8b^]`haOdKzDWT~܂#*[Q~IshBr͢w$Y5l:Baq ګCF/_ N[TgEʰva+FrN"$O]0%/ )K4ϢtEQd>RVe!@/|Q9i[E +,SC7'ݳ(xnj޼JHL^$A:J7RH3 H3U&73s3e !"w^CXJ%2 +ڔ\-cd KT |- fh<0|Z tU?=C_¯L͜iUAn1I'nlnˠsY*Y6_nTxFdCJjɿ,j)E`g:z!]08!$ܚ,6b;¨t#1Bs-GyKk2q#0/͆W%PKuKuԐ& 2M`o ђw`o7&XN&u2-8sT4 |HLi%P.ie&&̓7D֌} +GWB{Z @Nt*z2Qd"!eX]IYtg!* wȣJ*GXB!*&%?6]Ӛr[eݴ'O`ӿʼnm! ~F/2^xE2k +]y=ZyB ,c'ypFxY޴_\F9& ߘFH2Biy,?*2}XՒ[Mwhmg$g"rD:50˟%. h IJ#=^tڝE `ⷎ$ȃ +95G4l&?!2&[>7/J,dZɕۉS3 +ի8M:qU˨ OFgf_eJd31þӊɳΑ|wgU< N(yv%v-?[:ltI^ d/SE/אwߋԎ=-$BF6tbmj뉱(ɘ"jA8v +v84MyL~2c" )F2^Kڝ2:er|D ?rڥA$hSALR)[) @ʽ6md*hN2 Ӣ^:wmwvzBIoOʡRzpT]f r._jJ5H%ר:K̚U0$7q'{(,k?;YyB +ƙ]#u 4x_˱dwr$z4m&m)(5@\ښ@&E)REprtnB٩4j˵Be6U2&#af+$19s©vj* v%׹(ۤAӅQz/1&3e7 +NAgYYL~gU,u֊]Zf9 XlF۸ISQGJ@D"Z `؃,69*$}m]}ѝoBn +G72C$\ 7ӆ ǿrB{],!5]hTʒ{d)ЬEčb]PW?wz2_,Z2gNҕU71?3B0l`EVq7ya +endstream +endobj +189 0 obj +<< +/Font 365 0 R +/ProcSet [/PDF /Text] +>> +endobj +190 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [184.906 366.303 192.353 375.325] +/A 366 0 R +>> +endobj +191 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [151.449 298.229 167.381 309.918] +/A 367 0 R +>> +endobj +192 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [218.74 298.229 234.672 309.918] +/A 368 0 R +>> +endobj +193 0 obj +<< +/Length 1510 +/Filter /FlateDecode +>> +stream +xڭYKs6WjF~4ILIȜD aҢQ1ŤH`]K|0.v.^oV^Q 6|[](͐Tlo՗>c@돛^13#RZ~uj/tnߴkA˪ׂ>:Scx D[A Ce7qo ~}! +cׁA`KDLF!T4:6"* TCs%`-UmMuiWPS}Pb% *b0uaG&|Gɛ%@> ify;ӧɻ$UR+d6. .u&*Rv^s 0E$7w E9`#Qe R 60|PYsZd$=)Zb7kS/$DU0f5ty~pj5)A{P.2+tb?g#Wͭ{z$uzXLXl6a 8W37)E= n.YC/Y'*'0C|jv>D!l*#hH&Ž]J-P^?MNu{l:;7ӃXxy ,1Ѧ\N.Ҭ~(/7>6Z]+wٷǮM$~tƭ!TRLja ?`L' 2o|YXGn_^nuۻBcwͱkn|V|L0?g} +endstream +endobj +194 0 obj +<< +/Font 369 0 R +/XObject << +/Im9 370 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +195 0 obj +<< +/Length 1496 +/Filter /FlateDecode +>> +stream +xڅWK6WbE-mAIzHsZ\,mD)ͯϼ$˩^p8|t4A߼ *`d +uAr4;7Zɲ(KHn]״R]72y;,Qf,VU]^*L|֕d(y|_XTa +'͇QP +uU$v +`;b tnDasUEy>oR.B +VD<3`pb`#AW>mT]3u-5X~rogYɎGVRNn7w:=┬%LU*~phZ&Vzxu&~=*&*-۸[jAyxzs@ѢEp "=un+.-QCe@z:Up^=c /-ҹz S|cPi8{ZK۳A;uՌa ܁( ?]'^OaFhat8¦měZL\,ٚ\κ19FR7ߟHr 4,@Ze ݮ?S2m!"4&W09XAP];sn=A]DIG ݄;~-7^CxEGT9y9gSfEף5HRďnq*,irR_ f]Cg3fnD^.Ad5e~p%e|n\3B]ƶ*(b⏼6_-G3<\3zȳ lVp@Ɯ%p]ۂ5Pka)k䇡 ++0f (L:%5#" G'_-5;O"BI X~j1a5h0eZ3u0ks'99_Qn CҺsʦK+T-- +X)V0~y!_iN+;RXt2_jo\w:C.&eJJ8qO~)Ѱ 9$ jz>HM$#kMs@Hr'\ MJC)j c$#Ԡ+yUh8*2Z~.=U΀(g0k"~3C?4!o~bqJݏSJH|x T[x> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +197 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 666.243 122.936 677.932] +/A 373 0 R +>> +endobj +198 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [357.947 625.595 373.879 637.285] +/A 374 0 R +>> +endobj +199 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [203.396 584.948 219.328 596.637] +/A 375 0 R +>> +endobj +200 0 obj +<< +/Length 2595 +/Filter /FlateDecode +>> +stream +xڭYo8_!P ZRm.p&=}P$Ζlﯿ,;%p/G@~NB:idҬnk~]ޏ_,1a-GS$I9pM8؟ᗮiG^"rtD PESt+ Dh0+" '*a@EȃGڶ `9*&Jɝ8cfIiӸ"eC&I͢vC{ǩGLYd2m\_WX`ê[x'ydQ\'NMdr11_gjړ8\F1qdDnqnOU((.˨`*Kub Z~|*ަ626} NfI╞a4\3LATa[{XE6WT}?^ ĥ&Ke _*ӑ8%{53q Gr|^X*+aY_Ʊ k W$=U9K\gpoV%zH-^BޙXXM`4ax!X; + +K$Ae3}"'{LXDq3н\ݹX v/!v\n0>W<^W4/E&bٗEޗ/G|QGy<|/"V;Cܕϔ/})_B1~ 䪀ޛ趝92a EL m(;޴yˑG0wÿv{aw#;@-K݆>(&n<}sJo<8e_{j8ϧd#}q63aYA4aLqF"C-7k+pϚ1HL<*|:zH]T i+4B3aOeqp:lAltLy>=nǫ5ݬ֞%5`;\oEDt zO +_8;/U)QxE: ɋ#|Bixa %;w"XHLɠ\PaS 9 +bOLx1S2D/QbpƆűr5>{_"WDBg,bAQQ(=IxiiTێ=U]׾ze+nNդ\Jqk.N$n8rp̠,L$l%,G\8F UQõa +lnpz*aIėHaY>8MDX5$6k*baUR6k + +83+( +}k#R8#;iIAMJxFQ4o)}9Pؓ<5ˊٲȡ7G0鄺oB%9~C=0Xw&̆r6=U&Tp{5x D{P[DM@C>Bd!4TVك +MI|Q0pd=ܜL n'4҈3~γ~w-Y64wd\Bjɛ%¿$~ +-k1`'ܱY D7fjP.RsrJ^Xj78GeUQ(/%K}Sd$i,xchs5%X!%}N^}3Η*#wcj'0ۍc5khA24V!*xfѺdaԸ@p{K/Xq 8zIɶ`1Cg>A\|Ӻ5QG~H5=o)fw<?9RƧ9X[Z-_:H3VP>B-m(TMVP^c˔a)xKğ׉'[ps_ o`> +endstream +endobj +201 0 obj +<< +/Font 376 0 R +/ProcSet [/PDF /Text] +>> +endobj +202 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [195.223 621.125 211.155 632.814] +/A 377 0 R +>> +endobj +203 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [265.706 427.784 273.153 436.807] +/A 378 0 R +>> +endobj +204 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [508.978 425.057 524.91 437.959] +/A 379 0 R +>> +endobj +205 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [167.247 144.523 183.179 156.213] +/A 380 0 R +>> +endobj +206 0 obj +<< +/Length 2277 +/Filter /FlateDecode +>> +stream +xڭYKs6W*BL%ڵ{@ +E:$evdMbhE':JUV$`GY2]}ܔ闫4McŖi1?8]7q[~</dYp#x(BH4-yLJ`zlR!Fƿ'*ם:PjT*ST\qk1+%G\Cs+\` #)0LWA+)$Z?3~UNLH^ClLd9^CޙX9^` KCpv + $q?$[x "'{ e&2G"<k НI`b'B g{&/ :/܉W)bEW'铇`ӷ{s2轊Ԁ޹d{x?5xyc,ETB '2P,aZ{y2GB{"yxmVP\w;~Q.yjO-4׮ۺxӞg;nb}$D_@Z WheJ|8ώ+@ 0:7ǻ +dx&]ۼШ'L~C zSևzmGqSDִy)}}AǕ,IzЭ7ĽAonBh7mYvا9ᾼ*Tv];8#D q+=Ar5/ߙk< 6f6C?~&6&x\vyҍF tOOHM(Ý>[ ])oo7((|qq6j 爐0ԻjImibǁjl \2w,|eq&vHcH/uC|4?4A?.'5ha?؎iBamni3%d8;5b]oP/<8gR:<g8CNB~{Ā0'?(TRu*]'϶A<#Eoع ,*% `@%K9>Ώ&p0#nC +֣lkLD<@MևlK O;Rf kv?G Lvikb3Tb*p|TEpmKu.ɪ Q(.'}=$5xnʳdT6s\u柗{0`0ʁ&/[Z;b#7$PE/EB*wWY`<.$xuߢa#W.:} {YSǞwWϊ7fփH(M} F'(`cWV&X / ſd]zBN!FH6Sj{ҽO1}:J0-7ԁ l&澦VuП4ZG)|# }V/dʗhRSׇ&kKfu 5*]7|e='H垫b6:L?}{[XI +endstream +endobj +207 0 obj +<< +/Font 381 0 R +/ProcSet [/PDF /Text] +>> +endobj +208 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [452.411 387.008 468.343 398.698] +/A 382 0 R +>> +endobj +209 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [237.842 232.792 253.774 244.482] +/A 383 0 R +>> +endobj +210 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [275.159 232.792 291.091 244.482] +/A 384 0 R +>> +endobj +211 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [462.859 232.792 478.791 244.482] +/A 385 0 R +>> +endobj +212 0 obj +<< +/Length 2530 +/Filter /FlateDecode +>> +stream +xڭZQ۸ ~_N噳N$EJ[MLCrZksjI{ޯ/@\ֺH/+Z'*YǷLXIV0WY.bj)Ǿ|t!"Ƿ28 M;hy5@ÏC<*,S"-bΔs$ys{ dHìSعo>*XyĢW^r\0nwf1TY,0U1E, LOH4UZ\cҞ2sP`,`J"L8|ޙD\xFps)-3n< "RBƼ(Q!M:ׇp)>Ui,R5˃#F!D3!-T̳%D)01߿&M7bs"viVh">8T7''T +Nb)J z^@@ ä.qt@w b +v;  +LL*/E +berEkϓdỈX߱T,^F"R=zba$_?y"v9xqcU+?eI;:Ϣvvo} +侣}eō{zV푘׃~z@Sm Sz4ÞF]TmMc]E{g +!!uzGdZkX15ӌǹ\fd*.YZXH!:HKv=. GX,$ 0&O ,̯|1'pKwԯW'TO]Dk]"bxrt /w.OS?wBNK4'=[}` +g:~8mpTn+0&$M@ ~i峥'쮢FF%=*!h*bVX}C_AH/uSCKܶocEjs_9jY o@9P0IY$+ӻCWbD ! eWb{khmk=-:qw36 $ =d*A'I8Zw$A7a8$D$u:N048=݇sѹ玝i;{*.c[šBQ]"q.KNL˼ z$Xz l :e(pl<\xU"4̖p+]m~CDE,:=ib{Pk_[ %B;> +endobj +214 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [281.612 210.034 297.544 221.723] +/A 387 0 R +>> +endobj +215 0 obj +<< +/Length 720 +/Filter /FlateDecode +>> +stream +xmTr0(r9cWX&! cyX$j$pϷ-@Q;JnnY%*Vk8V)JV-z?~C !pNͭP9yNʪ>NC|^?S8>NCs\O:=R gR+Z%o #E, ,쒧gZp#JbzLg^rr"GdKWZt2#״z?).K\f~7\w: }җIƔD,y=:wS-TaV V}m [Hb=[7N˭= oL?4LYϕ먅WƱY$n׶7oV +endstream +endobj +216 0 obj +<< +/Font 388 0 R +/XObject << +/Im11 389 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +217 0 obj +<< +/Length 1734 +/Filter /FlateDecode +>> +stream +xڝWK6Q*S$ +(zHr-f#K(gPЋHpRwʯ>>*V +|-Ar +XEI 娥 ={}2̷QBw7?gidp-e4YٕmuTZrU\`A4"MZ\ʶ56(f2%cNx^zARoVRafDa 1B e|LAWzS2SJ3\ז#DPBSk\AyVߥ(VUxzUKe+*@rT䋨eP\cp≞ {8^u=| +;|dp.UK֣%pŰ$uN1]2vɃyxp^XNV)۲|N+f_*A ›u\Z꿁7%$ +c|*_i;U:h6 L-rlc@t9{T'.W(*" Mf9 + cYUY^ӫԶ`YXdM$. lʱH^ђR%qx$/%9%&ڱu40&%4 Ŷe=0p՜ӛy~,_ܣb{+_GAp1ϊB_~Gp ƍ3LANs>#3G-a'\YD-3O ~aEƶyY?8"17=L"cc{'53NJ8T `Ȋؖ٥ww=, +endstream +endobj +218 0 obj +<< +/Font 390 0 R +/ProcSet [/PDF /Text] +>> +endobj +219 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [506.943 334.715 514.391 343.738] +/A 391 0 R +>> +endobj +220 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [250.726 79.988 284.689 92.89] +/A 392 0 R +>> +endobj +221 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [397.782 79.988 434.623 92.89] +/A 393 0 R +>> +endobj +222 0 obj +<< +/Length 1605 +/Filter /FlateDecode +>> +stream +xڅWKo8WH*]fۢ#=mGJ _ 9q'R8(Q]^x#u$J*]`[FE⼨&&dzy~U-he Џ[k)jOpOk=qWo';H)'~cfSJ"J1$[ZTq7$j}Ī*[b"8+`F_WW89`ܼmcI aZvP%u +9G^sa" R-R368se x&4%q;u#Q _S+,lW`q: lH'Yo'g?;Soz:o<.mrz鹨ϼi-Ty={w7 u]ovi,\_K%qeWYuSM)yDpS,h?#/)+ƙ清qYՙ, Fnl֠%Le/>IH~}cN\qq{h]E߈'gbwttiZblrN0Yƴf7`WޠUȗٝ{mI*[\xa P!&/ĻI{Oi0[92; &٫gW,hp).pv >gC3q 4>x,|CLQ.c}qy=(0kh߿44 +\ 0@cU˥{$Z*08ZYa4؁{  AA/-(D!Gsv 8b/ oEK}Ns=Rr{b Ǻ3s3rC$Qf۟Gä[Kc[ +?08&L ,A_ Ӻqf873[ >4O,)$qbQ:NدD,aLX:F0B^LXB'l1RƥM⳨`fa$YUq9MiW`ae,}K u(r'qGA䢦#1>wS*`"-; +]aR y%֌@]˛2(\2JXà/'=$OO:Tp%AWϹ"R7K'NZ|ptNhN>i~/ 7^^$M[XqƸQ0Pnw>6ɛ-S+NK3wOe#=!CnV܉tJwZOU! +endstream +endobj +223 0 obj +<< +/Font 394 0 R +/XObject << +/Im12 395 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +224 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [241.776 579.966 257.708 591.656] +/A 396 0 R +>> +endobj +225 0 obj +<< +/Length 2402 +/Filter /FlateDecode +>> +stream +xڍXK0rVr fN6rm6zxD;_zQF.6X,ŪlN`~0ˠ 7G,/7.8~q9_~^tmzʴK A a0]$}V> pNfg~aMQf87LF7jGOYw0VnDW?^IKjAյhoQ lCōS< AwD}x|)(<0#J>YL>fOI]E'8:]3tepVl%A%^;dX^oHJ!@|~jHnuaov;t}wd]!mʴ'6oyLwxƗiz(g +? R@lJp1=o-v/7"̲zE=o:(HyٙyJ!̷ Le)5;, &jhSt܃{ttޅjd]97צ%GL7-Oteդ `Y& hK8HY?ڃ^s<{bȉś&yӈEI n+0t$`^"%gkXCu@Iֲ+:y@V=r8ө]C<OklhJ82+lu oG(zC(NXxRWpS;G'W%:a?AW`4ziCeɳ!c dF F + 8r,ۀYo +RUGœ fM'):+' + tvk_2 _U [$5CRx&VQė"`2A[2@+SRpV3:UU,h5ךA[ok_ R!^<}8cpt+p,j؍mW gy)d6XjBAP cmSr)Ɉ ޳,"PA9:C؁j9:F)\/( +FCpՑhC]+(6:+./!V7Ҽ+Vw" '@J"0Vwؠ,` &Y-n33 p4 .qz 1*DO/ u,g2KlD_]ֲl92~PGO3Iu<= A=MrqY4̱*Vb v$0㐢'syTnAP +EpR,޽]HC)8U>iY& kO@P-i\F\ORٶԪ4{n h#8.]V(/8gN +ݸgh<Xן&=)J^0^d@3m";b&%2^(-BybVa~QOqm Z +jMn \Ny]#7$EP_#hm+Dhz qregf_X0J6MW0_0;L=KNB~Mf6>.O:P\Xk)^hw ~p2/XYwZ%Vxlj. v =' ރajC;fX==^5Xp+'y<䱇_[Y&7i? +c4 UՎHf FWF(&ʉ(Y4P iAsuZƒB˒`gUS-2;IĵBKcZ ]C K#s1;ѧyMp(=tޭ@֏]Tjbq\&%.V>ZY MfE2J%̨$AaF'fͰ$!fc% 搇|?,wbo:Ϋ m ,s]d+4@qٗ]LTNV0ATot-K2og6 $LS3z̳\5}ݕp 0L2{&.\Hz;BB"#M 9.? [ V~k\Lwbz^E=a%6f%o6s.WĮrz +endstream +endobj +226 0 obj +<< +/Font 397 0 R +/ProcSet [/PDF /Text] +>> +endobj +227 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [363.211 713.551 370.658 722.574] +/A 398 0 R +>> +endobj +228 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [415.966 650.459 484.835 662.148] +/A 399 0 R +>> +endobj +229 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [210.089 249.362 226.021 261.052] +/A 400 0 R +>> +endobj +230 0 obj +<< +/Length 2107 +/Filter /FlateDecode +>> +stream +x}˒60$*]oMj+q2$!1_ ) ''4F_@蝼QEaPE=̽,WA;hRO_|$ <k'ov}I?EL$ UC"T +v??"@^ĚfEag>} ,ꅁ*rJdA)kq.qPheIIʢqʛxnxZvvL Cai$Ùj=0v:-?IXv8_ȹ*0i!ǚw*m72Pw BIB!{kVR0/GƏj`t5u> 4nxC{Ql8N$6XYQ.Y2JaCȼMҴ߃'uMj9Ƭ4ߍ[-@:Y1n!䯺XUKiPlG =ұtHHʩ cߍKa)©hTm9&D"ISNpmU^EG|'o@^[S[>%Z5KFZ_ ׊r32c7ƕ!$-+4 +#\(Gb u6oGQAV:΁@%Fq pڠ-?nL`"}BuP91wTω;Yt&_T&Xy.zE1|P&8(1pN8йl񌡾c.걂(PNhd!+rA),ss\#@F RO"l)ɮGJV)؛SFyAFJNKi-a@TTyRD.{RKGhwaUȚC+>p430')tnJ)쳛|G& +D53Mƀԛ NBlaALĽ,ڗ Ʊ4Q_ +T÷L fl+7<f[|  ]?Ka/Z.}RvZY`_m g8͢#6D"K0B0!"# Pu/xg]9[Ʈ.w[#Y.aqRp +b$K<3ybnxȣt,0USAYin"8b.Ε' w`gd_*!["xs8i`u[A\^> <)#yB0 4R/.=lFٍ+bdP`9$ ˱w웷c?fFJ}kMt"R@c.z>FSܹD"Ud6Crhc^, vZuE:4r79qk'O0iͧ4xxZޛbkʾGq߃-wŽa}"B -UXV MԾݔV{O8qeE9mLSC׌Nߨ*?~wzĞJ.q*=Wg<% +endstream +endobj +231 0 obj +<< +/Font 401 0 R +/ProcSet [/PDF /Text] +>> +endobj +232 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [286.368 140.071 310.785 151.761] +/A 402 0 R +>> +endobj +233 0 obj +<< +/Length 1973 +/Filter /FlateDecode +>> +stream +xڭZr+qU!ě.q2d;Uw1ɂ#(!qxhA YKO7߿<R#4D m1OC٭֔T_Αsh'M?t+Ӣj U~0#Ouy"O͠L!It7:[KB fn7ʒ-|=UylЮdw QBP$RBd pjƞ  X&C"7Șќ&c$)1UMȸ %N覔 vfEPy(U1&(RqL`BS~i+nTCE pl 2BbXSl-H28`;Z3WMK Kxv ڠT)$G >9z%C8ɈzCF(b&D+dd-1a$ca&+Kakӟ3ڔ p' I5j=~GZk1 v)`d`g'gXqu^mrc8a>@7^ݱZ[ vc 녊f T Ẅ^(b4dr(x\.W:|uk`EGX-]'^-8o6fȌ$ +6D |xX2-e*dOnPn-n7)-qvDwllph Ѱl_uFSƩ)_h|?O_IE20/js 08ncNzl7Q% pdNeXqb.3ik#9"j|=ç'&8C(1+7dX1آfŒh Q[cp$gPaՖL73B13荠փwMnj%A "`3X\X7p&^|!L@voQz/aQv]*^-Cȅ\o*xy.쭼z[&_"Ϝu=Q;ό=K1 +ם}Όп@B׉þt쏵c`M>՞AO}y[G+A+~^\t[mRvV1s˶3bfhZJ!4i + J!ڽ5VfaT_n g(°`+-=ݡh6NSX%w,Ulհ7>2H${ëAC?ڋ3`U@vq{|\ɲn}Eydj^ou4Ẅ́Y7<}YTݫQt2, Ȉj^,S޾~ffY)qw>'#iQrd}'@.gv6k$t=ex6 CDmj{W UkvusnO urU]Z9w~%(j7v_lOҧv^qKzgs_L{-tJ٭^9[æ ɶj`ShٕJZN/϶6.ڻ^z}D[tbGy-mc¨p~-d4p0z{۱{>\lYf{PQfdu'uRzzqE[PE 1`Fᾭ6݄zȨש{O{ t&^6uYteڻXiۨOƵ-Ѿ,E2Ue23D"b\lfʚ3拓?.?+[&sh@v MuA> +endobj +235 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [136.575 461.364 152.507 473.054] +/A 404 0 R +>> +endobj +236 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [174.507 461.364 190.439 473.054] +/A 405 0 R +>> +endobj +237 0 obj +<< +/Length 1655 +/Filter /FlateDecode +>> +stream +xڅWM6 WxzoNx7II}Yi,}'vgЩvUETmzMova_e0M83^C|X}R$:v]E/[qdi䴗^T4"h31!L"M" !4{ޙQ #pSs3D6cY g;2άQ_d>1 ǒܫ F Q3-4 a+;L+,sKlm&;Eϋ#l1a:y`;Q95[I\ud+9E#*5N dL+BZ&JgA^F{L@PEG/abElřd4{\7lz`qɰʇ @Ɍw"zK2RmABG +abX~i[t=觡Y^734'B4Ɣq$Q|f> ݗCbEH\"3dg56$b8-v Nv|I*'q8HY kN"DWfٜ[Mw+7}5K P- "$w^YCRDrhp9=<ݞ$sà 5*y^NpI&|*z71{[~|4~=?^FyM9(yt\M(LTeinfdw⢘gѤ714+Еƣ}2yCU^DL#,*j߼`{sO.kqSu/snuʵCb- +{Zz`/4t(6仅J:y"GtoaЙS'dUo#mK qbVY/=Z: >AVdeCloV$Cff_\_Sk˿+/ F D//.B}ZtVVbKt-dRoe_o>7&fd=k&x?r(@<Bb o~8Ì^؇:l~ٵ'\>vs7ۃB.ˀ;"+ I5w.m0ͼk߉qX~reQ3HЂtL<U6y+o,_?<|d3__Zj +endstream +endobj +238 0 obj +<< +/Font 406 0 R +/ProcSet [/PDF /Text] +>> +endobj +239 0 obj +<< +/Length 1489 +/Filter /FlateDecode +>> +stream +xڕWKo8WHˇ(JAM&AnijhI#!$`{(jffwWo>p=1թ͌t(Nf슼˯]^kSm撓ŧ[ X,J:W|v)|9)٘z5$9'f.4ΣI%/lsgl5Y}J&]Dr[9ۂl̞GHI%S?bcO*Ŵ5-CgcrR0-7ѯ;&S*a%S [tE2i`TlzH`1@Oh#Wb#Ld\|yIٶ4`-"j$!][-&X\%dXk OM!"tkp!Qm6N<8=!sݵO/R֜mI9OLŘkNqrG\ Dcϵq:Q0 iLcJ4Ū 8 ֹBtm e^+ivIe,D9\n ! -QBј1&  !е:54ة򉵓n.qe $^œ63eI2rAZٺ!4c˛ YDfB0 $cnySk7ˋtE,o7tk|lJQKT,AFQ|:>:X2Tqeֶ?%Nɴpԭ}A$/iڔn5WCez4 eY`$Cmk,}z +rv;5:4M7A\@XAuX;40Jp +{er ndLy!Ӷ9v+Ɠen mAe P{ +kDPo;H*L uzܖai-M9mmƾCE_ +H&20;I׵fRD.4L_V5xuN$N0gN)ri: ^ e1O%Vx"mq0৬`?WVm6 1 o_"ejgJԾGL_"NI>1wzr~ȩ Z)U<;6|>~ \#ƕA[}: 3^k?6b'd2I`7V[;~hɈ!45XO4r, 8R>^ƅy.-H-*چnZߨ¼ˠ?GsRuh> +endobj +241 0 obj +<< +/Length 435 +/Filter /FlateDecode +>> +stream +xuSKo0HYlq7I[ET𲖼@ *>c썴[1osl|eqJ5Ą"H՚TDM~ɵVhwFᣝ27` }yB 9G[VD"}vF"UAj)*5hHgC +/ $)/l>^ +endstream +endobj +242 0 obj +<< +/Font << +/F17 408 0 R +/F18 409 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +243 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [54 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R] +>> +endobj +244 0 obj +<< +/Kids [416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R] +/Limits [(AFN_AMN) (ALC@unique.73)] +>> +endobj +245 0 obj +<< +/Kids [422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R] +/Limits [(ALC@unique.74) (chapter.5)] +>> +endobj +246 0 obj +<< +/Kids [428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R] +/Limits [(cite.Kaye) (page.15)] +>> +endobj +247 0 obj +<< +/Kids [434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R] +/Limits [(page.16) (section.117)] +>> +endobj +248 0 obj +<< +/Kids [440 0 R 441 0 R 442 0 R 443 0 R 444 0 R] +/Limits [(section.118) (theorem.11)] +>> +endobj +249 0 obj +<< +/S /GoTo +/D (dummy.1) +>> +endobj +250 0 obj +<< +/Title +/A 445 0 R +/Parent 7 0 R +/Prev 56 0 R +/Next 446 0 R +>> +endobj +251 0 obj +<< +/S /GoTo +/D (dummy.123) +>> +endobj +252 0 obj +<< +/Title +/A 447 0 R +/Parent 7 0 R +/Prev 448 0 R +/Next 57 0 R +>> +endobj +253 0 obj +<< +/F18 449 0 R +/F19 450 0 R +>> +endobj +254 0 obj +<< +/Length 20382 +/Name /Im1 +/Type /XObject +/Filter /FlateDecode +/Subtype /Image +/Width 1455 +/Height 200 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +>> +stream +xyN/fed_'KR)[,Q"$-0$E{2EE.[ؗ /{μ^ܳ/{s$I @ @ @ @p|KuN |K N  -#w@DEdN v AQ];@ "ۢ?}'ADq[tGv (nn@ m -#w@DEdN v AQ];@ "ۢ?}'ADq[tGv (nn@ m -#w@DEdN v AQ];@ "ۢ?}'ADq[tGv (nnkTU[X VE  mٗv5hSXxW=GXuCFL2LԡaIsR(1Mt'*6ÎlYX |}\H2ONg$D=( sP +$Mv+Ҋic C*/.τUن^$l9^$txx_ Mђ1 qJ,tٗvbZHT2b +"mҥKWG.d]ҋxmЮoT>,9듘8_TJ[TuLB z3 x/l!4Ial9\I.x3@ SHk^ NL@/ +Pqd0!\#| ]͈[g2#tGY3r_%+-%Hd_ډ L]sz q6v'^2u@ 6J56Ⱦ0ΒD ]\H߳Ig=e8JpS"ǵ Q3,XlN"]%U`=c:(%d: +G ٗvbֽ$\/ lԮ~}\aH 8&}oș\p YϚ4׵{,CfNٱ̟IGBB5ٗvb=\lbTf$y- $92m\>qeLϡ$d.-kDZuciiOe# ͜B_%m=AQ NLb5*`ǩd$9Kp t z=6Hifz"q>!:;Yn4d +u +{0P"5"?<#ܣ[dK;1B zI5ߵ[kc@z$\NV?֜=!=0"p̙ן۟H'] %"8d_ډ XwAփ +2%'2l1x"zkc3Gn*0|Oš{ : P\>nKs/x =A }6a!맗dA&F ٗvb\g&b6/ꓰڨNHR7WAIVxdCBzRUNu;O(O+{T3.g )r8\l!\0kAHk^ NL151YG|vw6&([hmGsj!/S[fm֑VCc^F %Xd_ډ X7Z]wpd΃i +||Mӫzk>q^TZ1˔X8[uˌ!׫^0^ gjȾSɵBMi8rQx3ٗvb1W,0Ρum:p.ĤQX%x8q72<ŵcqfOJ 0I%FwvA\?f` 52-o6. I2@EZrG dd_ډ ԫpy9˜Z…trfa(  ; [\Q`/ iV4 UGx0EPfu4Ժ7]`)q4cz$8rQx3ٗvbqCY+m@\WBܗ+w*OT"DRG}G1U)˲s0xDu,O*/ +¦)okc>%kz1ɶq ¥=%尤s{cQ8X6Zz2ӋX rK!%7C}i'&H&hiW>ZZz}GSMg6Oq(0ݺRAƑN’fL/nٵfњ]3WNTf7fɔ +{+ VF>2B9Jo #N.~5@ǼʏcE%o +,7F§2q9,IRd}pݵI:+E9 VSBCb|W\I0d-Ϛڹa'~ǃ"CrQx3ٗvزDZYm#Fƺc5ү<2$oBbLSV8uf\\S2vU/G?K>[d +m7 js;5edcMigIy@!%7C}ig#7EHnཊ4|ܸqj[% NٰQ#$Bi3.&Y,Fn&n?Tl@+ˤ7V`XڼLТW$Ym\F!ȍl6u! rQx39&XktQi/ -v>2B9Jo #wA##:f2}'>2<,@/fC s+Z<@sX/*Tǔ@ d M_>yo26noGr&\3))qwu+Ce{!shEm>ƈ4 `llV 2ɐjGъW +WsoW͛?nS-NdyO߰+n5sUqzz͟ǬVuqfr +a{.3Z8>B \l^G':RdYOL%M8,a"ׇ{%7Co@o#0wjQ-qvy1k*6IUݼF2t^tsdClqG*GeM4~8GЬzbp=uh _lJƩ3)CJFYt5/(v >2r'񶜯IW]4 +rcGc=lD4N)Ssd*cn[ W3 i{0'>JzIqD58FlU +ff{f&e31[8 ( >2rؽѮE 9OVިhI/F#QHlBiv)7#^ -_h+YWlD,(JI>tipXw6:kz]bgx AF]|A:"R.kl 'az8Ŏ_d@yk ܌^ jn)QzkO6wͰvpC FŸDž{¥\f2rZ. +דr75D%4RfQd :.gx/[S=d6.2 $ j3"3#^A Zmi @ :eq\B•Jo #A~ r]-;ǨׅQ *J&@[s 63=[67Л\ic($%Uˉ\EFXK"<74 AFm|@rjQYt?JapFQ7l!\nS07iڹ凒Or=^]A.7`xx %R(CzwfYySrT- LҗU>lntKu(:ʩzbٲe[O8N>W_:2e+A/,lz9n0v#uf)( >|d@A<:ٲ^ #aXAzU%w$ %7Csz'OKNŨL=ڡ#4Œr%cpNg?!12ns7&7Jv?tk:`J䰱%}͠%)tH-kS|D d4_ #A㠋wʨ3V.ČS¸q*^YySd>ۏ؉:ʩz_?§xA\NQ,ܝ i im&C<~v<(GsʔVr3(@ri܁hl_0 FDP<{J3dT AF|owOo#|ޫ4i;^N"ävH#HpC=M:$j9)^l%qMb%$SK^Ol XwpÞcswaP9d!#p? p[/`?%JMQ|Q]ʎjnT{p5z飸O;])\-ȵ LeH!i⨔Zs-b_3RaL_([KM2v~d[dhP[ԓ =!!u7#\f3kg;r2x3zRVVء잮Z +)!v%?HȶW'xcd 4w;Id~¯Ǹ}.J_,mMGƯR`a#D׽[ +4NM ۿjKkn v4Di[ĭrնY܅ɵT̜kR| f;sr{!>5t&&o{ߡE6&.zt1`.Du [ Zː-+c:㭵 V|'|IX5RΏFYq]٠skCkgg&ڧƏ{MqKy:s{u-k>@4{mܮOf39H|vYj[Am@3p)ut>/cJI5"1ɖSn㬁;u& Kgbܝz߼e嵎.cy^,"Emqt,+mԩ3iYŹ٘.`V*zd$Fn<È)lag.`~/]WhviRv&L٘',p w.҃Lk9r%Z'%\fn8dAMwlYoK=34?;htY}`z[JI5"N\8gjӺ^giX(=l6amOڼjxowwnDGGʳ/B :fEQu^9ow٘.)#gcz'W{P=1j^~{ F(]@Pa⹻ޠu6.s?4>=2+U+&x6{ ͅF] 0MbSz( UMܶIjSkBMޖu$+e0OF!1=T%s^6/ ״b.!J'h溇͆iaA. 8[+Ȍ+4ocrv/pڜ^{Rxe6alDvϧ+;乻A}rؼk{d>简W~1C` +0{E®bҹiHeW}pQp|_E-'~ݖU.kǃ\Wg{&@ӝ{(xB; ӝXm?URs>n[||J2*m}* 9zptzNxI_Qv+هfȴ ,KYm5a™7~l[ykGE/w-dkPI.?s9 +e,y=f-"SN_cUm:޺K6Z mzblY o ;zUfXe)uG[f]v͌A7 OYsscͭ㓾MRs'ELޕ7֯Sg_l^V!]>o g٘{U=m@}v?sajgR5A#0%PB}i'[!63(Eo"?@MxkK/< 0󷔇'oW$'r!#[P6J *^"fhowieo;L:.8ul:'i^x3?Qu+ٗvRkjpd7=ctyߺG/bu7&r7ʗW̌;*8+ + r=nFoT!#C&`Npr(Aw}NG`HFwv.tv_=̇]/POT["%Jn#8_Ik@螒 7!`16&BMwcZFR{p݋@Ҿk/&մmB(8s/?S zB~*IRó1O讒YT"ŘtZwr.puẋJI*NܙR~agn (SCoߗ3~|ڲv,}kȀ(- R-+V% Ϗx[t#${}M7;M8V'E9u VgbP4:a.hcnM1cs)vA, `l?§a&̷ <ۺkCwS'Rzk.\m3 n о L{{8YRPiVfM)u!^xHUWFa>og]`h©(&W +pƆf*^mYbOzסݕn.vn (@7UrU\ϯZ_9gQq8M\mhasc_l3/IIM+c w1Ob-[(`N=Cw)pusOd_F?E oiW MQ_ڂ]U),׸V۱qx3e,R)I|j4;RѲ^#gqa,dtJMpLH>5p0nэ!K%qX kȹF=h{?ne [}mS*% @XƗQrw< B;6Y/„ Mxk3 Q[XP4wuJNy&s FP"\ISzN$EyTJx?_7_|'6rOo5.Վ| +wB*ET0._4dhG^p&Fg'UӲbX/&p4r=I>ރzV5!Q;DK.[צ_,_GwYpT>=O& !ݳ/řK=SO)}y)W6 <wZAmr[b~$jʄ= +̡ +x[40ɓ\7f.MF b)L9.8GDilL*gIJڹsk~M\JƲ o ' Sz6?a{cg^k m OxsRaڶaá3NKk%{9o%Z\ƜKk8y˜5ˆSoH\U(}\um8$ן/{)Lг4 (-*= ioײQoNn{3cE" <G2]>h|;PUAg64(mw ~ڴ?G氦o*=MvIMZmW;>{O|\]DRm7ΝbϾ3SJ.osuUq=Ӎgƀ +%5ktg` +xh#4:Gś=qnI绍36 g}yVcU2ЗP?/PtY'epxczT.Q5¿As<j|}ys=\8Yi~QW:)^Ǭ,mԘEǺa/COÊaxy%g_lo[eXNpy ӆͭ<.pهɿz1ah1,}6r-!Δުԇǣ^3QDf:M,/FPEˡ+k_Us0G3N իR +d8P)b(ZЫLgEb ޗq}^f<}:Yɼc2G"vJ?~>xA 9G@m 8$LkM^\r0nlhmT/G* \EBpZ\*Ifk7gwEJ֮]+ BpcS]h{j65\qi \f[9NY_de~x!$ +*0jXǚ?O)r47<ָg@_ЎhiO[Rgr&GB᲏JɛWxYl?fDB]zz^ˢ&pٗ+KiN[=%({[ +Kۼz^̔*clW3͎l!m̵.^ϺЊ] ^tPP^Ak_?s_xE\x&.Erdy\|Cju?r%g~Ol6캂3CV|c1P Y$ۗ{\ygnbU󡎅Oq]kٮ?Cs)}H&㼗SNC I.:=ڇ͙3~puW)'`O#oW3ֹ3|A[uK "lg%v;g[C`TjϽ4̸ɐ/g&=_[{CM\gĀ/C 1Lp4sK]T o2ʀRxW_Et 54xy畁Z=lW~=iHv|W)s H#5yd#_A71tЪگb_ΜE>eCH-]ARU8xH'h׎Vn.AC%-3nyğa\Ƞ]g׮xHgLy ͠qvcNӭVVYkvMyiˆ]vVk^Yken]" Lkɉl~s8\ +I4cG^].j<7}ܹ[58O\D3e6n(IV;a$ӒÌh\~PD'82w>6o`K~86$U`|VVqx;[D|H )N==m1XfJZB4C֟Сoh8y ,%{'[E'`&uܹG%d{.#ƿw\|6RjC^UIaX=ƒ0{udG~If=P8Ao~STEq[I:[U8ig% t$V|܊[?9[VmcZx镶-ZX޼k΅gk3 4Q^ͯ2sqgy݈ ꫯ s4h*ER2 ZUz2R 0EQ +zwg+".$9 ;H<{6:U-/؃Ju;[ `9h&RK^ a]L#JX6n;\ݿ,W{2>s\ȳpЬ'-S?||bVXv Mcn32S%r՚Im'ϤR]3iscF·fj7_kH- E%dd/@p$'~HQܵ:_6hIJX)M94HXCƫ?~(DzL`\E?lWk^[Pl 3vjG"@JFw?Ip ı&ES$ȿ? `1zG; aZ[.]%- \6WԛRToֹG*kX 7ŷ/jUAGv@p]3ǯ$Uez^z)QRIgDt#LUWW̤+~d?1/LBer0JTC4>KOm_TO\9Vz,3(bU + ĢZUʵT8u:xy^͇L5:J|Jh0a79lW{Ե6Vf'CeK2Tkcd~C-<0; e-Pk +3r];j4 kd3Syg!uA_K(GEVGYu +>V=eJH;V[Y:Y|P7)`"KA~<&{//?x dr.W +Uʖ-jrM^֥ytIct/b\viϦ5k VBXlwdZ>2GF5FΊ]-9^u{vYA])*!A>fOIsHsTAGs+_)\V-*hg ۅɵ֨&MxZH#m V}QbZZz'-g۷QҪ-"!A>>%uo*~񪶎݃\wfr=԰:n_u1c̏ڃ?i"IGHZT=[ۡQ;ܵ Jpٔ8:ާ7#+W.vuK ctfyQ t툐k ?3LJlsXश2ك\Wʂ]!Րbt&լFuw%\]܀֍HIϢMg+7T=ک +\K` 0p gԥ#^._z,]rޛ\_>*MSiVZj Bȵ@ΧgdGl3,1{&{`:)ru3o+&kN?I* Qe+=ŬloFRQq-eF̮kTI4 ~uSz+ 6mҁ~dp^JbͪȲh}Կ%mlvJtk?j C[H}er:zXuiz&2J!![NO–bGq}B4_KWjf VYd(yAA|xDN5>Cqf [<?65JM(M%!Ӫ6,z4`^l3\@K2Dy3ҰGpCp[胐jFMZ{H3!wsj$U.q8p +v$3 .M_LCPa'Lz_+{l4Kb2_i셫ܤ(5]3d=]c!/0M S2p_ǑɰO9#ig%RR}(}v! JQ8)/y Ao\onؙ4Uk!ݬJBEI}vHsݾXЫdI*K퍻gI͹"<:/s-c'qqKӘG;wH;6]r?A õ|H[p?H5qqm=){::Ⱥ+Gf^[I?~H?ۭz()ij3Oo)оn67>ISjB쁫ίK;2ZyZB|FS9|@m{.,e5oZbۖdxEIzqTd;]FZ:jK|B߻Fh"Bm۶S- |32}x;s%r|̈m&{̘Xr{ʤ&y|dH=Jk& =RّfRȱ$jQ^#H#{in9H9vЊZ|r-3^H>)\|E7X˰ JJj^"w+NjycJ^j!w;@j];gpG{Y+dN p<VcF-VJ>E }'E6zWkg+GZ\ó^qd)r-O^88;: _fv .3lwU!BdN p{۟vBDqIkv S5_o> 'Evkۿ;>;_s*R -n 6izfaU I+ ۢ?/팉7=V7&~}$uëiƌe{y 'e̟ۭ3mFDL :?f|f;fDaZGV/@p-#N=ѕ^]V\peU } ɳ y=xP@_kkw lK噑RM+^:F+1{d_ fҤy pIS csx(etaF*҆-cҏRRH!ka6)px+ +D fDZaDD6ʍuK;)wŤO)thI/ ]uz$z1dT`$-ݪwx 7CM_0KR㭐TL8`Q˽qUBۢ?/4$m.z>C/+ Տo,"E2`- 4uut:}1 %bl(q LDKYZ}! mٗvvK +L?@NNDSC"g+ 1:/2ςsJ.s`PB82Ds)c(nȾӔ \ cz(a%kLGG-<ii C ZZ: s<ȵ^ȵ@Cq[tGM!t}ȪV6R&EԮVrm=#(?ΒTh l,FJ|/@Cz1X\,C$Z ϡ-#NS^@e~Kf_y3{U6rm.%}Ȭy6@E= X4{UW +3|z#M&hi[Zr-P]}i)iM;2@FA5_~hV^lɵ{\q-|j}qMaBuuwa#I_a(1FdW/knK ?8BJ5ȾӔnh/I{Yo;G[^8˵{5|E= ?h*kQJX-IECOt HarMKeҒr-P NSѹ侐&ό(&{ޤkwT6.<𕶰MH #sPH“`! mٗv:@EI8pZ8bFqΕGi>O$|PW 'r<>b"c(Nka]RUnVoy8A۔"cEd_iJא*IalfbL\d 72WjNGj&J]G7,YoV7XJg!ut?b 1J5ȾӐqղ ;(*u[ac9Gh&pZoi ¿EApHU ̂>ij : ^.rR[Fc6P \(nȾfOa +B6Ѣ +uR7epGL +fr(G?.jJ|GLm=uOծHh[kfK;FӿBRu!Ԣ%!N>K{ade8ꋂ,kмi UZ8_TpSuPa)L]ꞀKh8R fJ \(nȾ`rժUSNssp^E+ǹǢkٽ o51 +۵ɕH5{E3 w3ST֨ջӐ$Պ#$Ri!L6@҅ -mٗv\> +stream +xV ҥޛ( "b +&ĘDiLLbcX&y߼*첻, K_KKg\{mO}?{gΜ939P@q`0G= x 3`0G= x"5,,{D+kXY,WְHYa1g޳'"^Yb"gODŜEzxe 9<s= x"5,,{D+kXY,WְHYa1g޳'"^Yb"gODŜEzxe 9<s= x"5,,{D+kXY, Ouiyp",IC$2^ǿae8Ogdb˲W1drXlY 1@"1$ bbH4ykÆEOS $Ňȱݭ_XW5>kY2qa3 E!f!( +*1J^E~xWwG/u=S1$,>8L#"sV y!t"q빻^> +rGjK@?p–Rg55w.ռ|tfB PTUCbO əorɓf~bӶ=LSW a5qfѓbV'fùURK|-Ħv=bHY!ś8شi9);t*Ș60Lު hl]G*OۯܺۺVK!a􌼴eg-CBwT] +18;Eu p|7f-Д`ͭK/d3Ux ^*&OZԨɛf:?nW20y8mV/eʤپtkJZA_0A1ģsϟ<~|5Y)LAF˗@ + ႈ!T}"*ܠcpJmA\r|!+~!Dl{y!?w3sӢ32<)bHdjPG""738u‡* U^ǐbHLMΛsDӌ.4i#Đ;RvA}{|u`GOt +իWO?875=oSGN h4ICNv>C+:*\`5;1$o?5 7֞2.O] .*1d{5E+ssȊr +g vdu~֬ݳ㓓'N(sgnX&zgd.]'>,L Lb!]tft6/PhՑ@ .h.y +!Lj2oLK oQa> SJ ٰrM^ڲ +#i 2Wl\!+=sVٴvޖg K̅5k;έZ"!\(2ʞ!#Eȼ):')! ) !$C6^אGVmZVVgN.ɍBq)>Wg]CUdMAg{!GYesgdNd/\E ~R&1Ő_β[fBqJ?aCl3ßM+$öURV3lG$ۥn}'-w_\e[8nġlMw~1(Y| +LPG! +#TUxvQA{!BZY݇g ԕ BG( G>C!43ƶq:Ѡ ^RGR))[cC̟ߔ IC ]_`_ЗRQ~{> [.ler*\qz-%AW}LvhxBP:Ѡ ^RGRpJpʕW!:0;q,'eM jg32!mQ)ĠYuQŽDG0j+z!i]-2S1.C>'Щ|!ϗx!3hPx)V !dvp!&\,<#l止tؓ2#<(P;ww[LjR!_ٗRQ#U< [^͐#LbvWgH-D1)%|Nԁ*TB:E$FVdxKQbHUk)c8z+sL"!B>eNef ݪgJ +2bʑKJڳT;]&G3u y]p}EVSh#/:i>fw. +!'S6MBi:I8~ct,@(f1O~ekؔ ڔ=#O ICXś,ؖ[ۙEQ 8͡T; +^O4?ǀ*zZJSPԥܚWXD]zӣI)%CLщi dnH­m{rˆZjzvjG-5#L =luKۥ4VS3`}^k%چ?SG icFNgD\ʀуO XY^z')OQ',B˜udU6bE!MfK0(!ygdJVJ^%):+ĄݭkNvS]ڷTscѽVIQ]R {7䍚.ԷWL1d=iVՓZTnpc(Ԡ-5*9flPՓ:VOx^'Ӗg W1d*3  +{?ٵ{N[;zБ\C!p?zov{<3dĈMޙDvW͚dFv0j6gܦM naM[bHngg~Ky٧~zۗ5cUtw&9sϟχJ>h@ O30xQ;Saf|fs/īT|PX_1dr[!v $&;+6m:qDzhѢ;wZ*ѣYPC 8R7Ur7 bo[zA+y=7o0`0 + Ah_~}^#]zxL¯4-m_ Mcy?ԥﳎڙF.;t\+Ɗi:71\uwrĉW1grĥKA+!Ȝ9I!HLrC}1BOj… ?O> 2f͚=z(//g2E+.H-? jo?թ{FVΝ;-ZD~u1 7kncSFGm_#NG/EȥKZէy ^sGtEv)  b0Wv + :s G9 +oΛU1n }Uv$.Őٹv tg^I!HpfΜIk85xC+^Ջqk65kvm_Jb:6JVVSO=c\h>B_ +}ծ\6vBmL!S6U [w0z);CU3~Vn| +*K1d׶m V-;s0cȮHr dz=!DR yFQV-if?񏴴4:;hР1UXXhѢYf +}З8\]Gs'P၍[ȭuAE IIS*8 ߣU0N$Đgdgd.]T<+h1dM +yRK2ٱ#e#|瓓322rs8;;{Lo'?/~QRR"!gϞݿqqq.]HN;f|+>kĐR7nȋ!xh۷!ȹs.\=CI˵kmq7=N|4P}LђGn5~}j֬i|/^zݺuwlҲEǛ;pXw^ Yd 4jԨw71ɓ'[hAw3C֬YC$'g<f1J'S@߃Tn) &kj>r3 RD]!)tS_1D_]1Eq]8ʹf V%$wbHQVW^]acG\EFP32K6pab;k/?!}n+o_rq&So@>bt{^`=cZ׬bk_^|[ +UJb|#rȽu%Cٗ5mQ"@Liwm4!B\)UzM5ǝ߹D J~D!vӋ"ʉ1$;%u疭W\|^|yenළ[?#Λ24wN>wUV=r`YYYqq1/I&mby^:iG㧧LI/ԭC~ݻwnݺiӦgΜyg !k1ݱ/WTNk\U&zVȑ4d&)սt": /)WW}]_E+yEāŋOn m!ȔyF24@ @bbT + ,0D ݤ6mo&MБ˗3b5jXhQݺuk%H:R^w1''[S4Ői; +þMsZY]K(25nWF":"7:gPEV:T nϤ(29|9}Z[!Q<|'ĺ4pyޝ*!G* Ȑ)0yFfˆV<)S&>)C@C\`T +Æ CP*gZӈu1Dogw +B(fnQy "Z9{N'Da+Ye9)iK gnٰqJ\SBKV2/;QxRF +O@ @b>N&MM?qϟgQVVԡCo߾o߾+W4C&&T)пfw[‹!%%%׿#Gu6`sҩ6i҄Ξ>}Z!!#4G)_Q_ʶ-8*T cF4a~ +%L +-lIK[4hrHG9Q%/)X$EٹWnٰq'P)JVIM_Lgdє>,{ x>|w$%gĐr^z=G&lݺ~5>}kԨ6C!)sGi^#IC^5kdrssgϞz~|wԩCg! U~/CW|-WTnlTqjE7bnZT,!)9L(t~3Pth!Zٿ QKT!N,;td;|#eORh j:0lJ32W<>#lӚ 1k{3˚6q̋Oái`]"3.`/1]ace],/-R 佻iwFxF6} uQ^SC*~fy1ԩS˗/_x{kvvĈLSO5 VCJKK + +۷ ]Xr5!<΅ +\ >ŊXt_Z+!ݝ]ywa]6Ӏuiݗm7D?I 0?fbC>vifذa}߾}ZU MZ׿?E|N5lXܭ[y֭}CLh@h^N}e)ݲ|l_큺m.dCG(ɚ:XHUo!Ie[V?1xOl[["75=<ߘjXUr<ޟaFs9~jOčb%YȂ'g}:Ӥ3 vZ ΝV4[(tPӡl"KQ[Z +2PuҮN3b]8.Ƹٷ ymvĉϯ!Re222>|tMݻwR +ӟkM29ԩƍsϯ!TMQ!/yϓϒ &xOEb/P90^1k TI뾚2ؙ +NtdC+dG?AuTE lo߯@-b+WϜ:ٞ=6}(75=7vڽ<#l5~b®%oބ 5.y[[[ArA$!ƑҸC]dOfK!Rgo E_m7b;imc/F챸ٷ >|S.\>PƓ/%%%VDC_ڹsgΝ;͛]L ߿+v)H>)$vGGC})iVayJkOPG>rG zD)v.֚_>.Y% .dOD-hh>`6_EInz7qr+jFb}i)`"G^AdTP&Ũ9_Go:|O@fСcǎ}7>& 6mw}^p $;hР'NxqSґFoڤCN?!Ԯ]?3[nG:v"?ԽK.֗<* +h .Vh>?B5aꓹ\)'TF G nMzӪushPȡ"fo6+' + ׼Xv肦4Zz~a:w6r 1SN:ןn%~!u-.|2Ƶn/W|KLL̴m_rȚQwA !" * $H1DXb jLs'zuu>ĐX8CL.P(S}@#4`zǵ3,2Nҩn$ w=-m@@WpAiehK@g3lCbtRpŝ!uyWoJfMŗ_bN V^Lzʍ7w裏1p74ƍ_x_Yߨ7T9BѶ\<;)cVQĹj Vf* k^f̼(! @%j:a b5GVu1aN6]##bfoہLF(l :T8ns|}C'Nn~N|Tŗhr4nC6vt]bk9J{2p *_ح0nvժ~=Ӎ5Q^vm 7>wP/ؕ_7`V:Bx/@6moc6:Q2cu +Y_gw>n՞Ƿ 7~׽0 +(zDqrL=+(ɊAզdlXj9 +ޯ 0|V' ۫)>82!hq ?BݝVk7?4Eɠ#ݸvZ ]_W1MBIsPE_ZQF E/v{tt6s4n_,< T~Nf4MGf4OݻoR2A[[v'Đe +پ1`4P5Q7lBQ):A0]\9:wˍ_Wcz$thGA8M{3je#яq‘A E1$t:usōĶ RǧA1@)>ù t8B2rq# Mxc DsK8|:d +MWA\}_:iVδ}0v2o}ppCxK*,s꼏Đ%fqE/蕡Yҿ4(u_~ G1$->̎/Wl.I:9uW6x|Ps# +q7R(JaV3Dc~u:+hK>4i#`:i~]j^!˭) ӽݲpԪmZu4lbtoY= Mm|G6i~|EVT7:VZu=82!h 0t. yfn|m*6:a;uq,R7t]CҸXt_Zjɱmz  ƶC [H}%'&.F˝|7TyX2aƏ8!yirRy#t< +C͑,:ƺ0^%CиmN'(Z٪Y@}r=.<#c\~ FTVml+7Nu2"{ʒ(Q|zwHY8JbG -:ԿCp1>M}wqaVE//M1dƍz…7URn]%ٳTVVCV|G5T"!Ν{'M6tgB0>4o4 nGKtQ_&˞6~dH0PX )AMZs`}s= >8!i˲e%ef+XWT9KӳSR_ۿ-ffQ ё ,Lp1domeΖ73P}Y#]{Z  : +X] ֚)+Tx7v4#Ȟ~{͖^FҬ3% t oLy<$/F٧4lyNzE̚5KCJKK}]z1wav*c=~\bxwyk׮rz(tOFoG2q?flTydtaX?V ^G֒?1LbzP9E|6:@aayqJ h!aiYĐt5E7|u}=|:gmnX8;/;%57Ȯm)HnKח$"ؚԯ*LDžՐ/k-ݶfo"{]:߯V>Y% aGyک>`QF)MjUK9dę'ݰL ƌ#gcp%Ə|Gu֨Q+WgdnƢ"zuVduniЈ$u=Fժݨ">`Hj=ȢGȺ Dt>b[nKcpbH(y%j5:(Sv0cJC*IM_WTmˎ +_Tenp!O"#Aݷ{O!Dg1ft]{yIGfKg@ v~.cl7ӽAf[l$E]dOfV~+迫3!cٿ);۷o~G-7oΞ=iӦO<Ν;ĐN<'?mtҬ[ ty3PBX iVUK-5G_1Rd:(]* 0hC^]:UIE!dJӂCrӖdd(rq Df#;qLvO <ڭ;[m:O:K3RQB1YMV~as%Aђ![_ۍȡ+EfV#kj|^" +𼸵NiTl;j^\r1 +>M/C MgF78p8}Đ#FbȴiӾoӿW_5g?ԩS߾}KKKMŐNu C4~?t 77k=~@GUUK-2_ ܥb#ߐWБuOخJ=GCIHC3V۳ǝ  +!V-j Va\1YMDgPMIs.ݗ]55(,H=SǭvO`Q⊡Q244g|bH!I iݺaÌ^N:Ǐ#eeeO?9ry4Ő%gsw@_HRybZ*j[e--QYuSsDUA=C<W>.zuaD6 # H ));tX!t\zi5ECX !ֽwִdhYjO}Ar,b?CbH 1ݛ޼yA>G}N:O.,,lݺ;={!K&I!AOk:h͎ `S! J=NF/L[3+rG#*<:Spk5EM5|l4ߝW4#̛;ҮX= ~G?.@S9J tj%PoB yqnFGۘ-Na(NMaeA!y57.?رܲհ]vБÇϜ:e#g΄ T!D{!˜6_a>򽜶or :&x( Й-)$uc]F+nFƠO^" +r(~dI(Xume-}w~T\fj'9CVZEoᆽ|+_y' :5uԿo{կ~դI^zT R> d 6c'5zټBPQKna3{{2z!47jS)Q}O~t'vRێ|Xa:#:6"H<ACT Ώ^ ~Gc8zmz\M,rNxb]lTE߃?hLA8ʹ=+H g4 & + Ei:S%X-6+\%/#3ܵm5|;é@ ,cSݧ;'. j?ݍˑga8/l͖gG DD_˦7د0<oxŒ*^81Đ/߾򕯌1be%Æ {ˋկN0!77G?ѨQ:w<}td1uR-㦥MdŒI:=|U O#PT&w;LfCÖDzCL +]+хP Tb:7$b9|Qi[f0E(t,u~0(ԋby/Ѽx%ИAxt`*6~Mk4*!hx[dLK燕ʡf*1`yV3rٹ)iV{g䤦g%/f;l[SbH!޹AdŒ'zӿQFwI!đ#GǬuL~G͌ײrc(ԱzĶ~5 !2LO}yk;_^#73/4ga^e)јTF^t *fuz ,3n;"?s!Vy۸CrbE%_eLKET{9L W⺐7LXbL/3vbJ ٰz +gi>BͲRR 8^0`({]j;_Cd222l Զ]*>7V=dV7iXbzJfaJ3XQm}M3T]mL%y +i%.dqLƸ +/TY*PEmؑjVs.hgm]+V+ehCO+kVgY܀1F[6#Fz%6mbbСC{9bHvv6ĐCYfڵ7{㨐4gN+T=a#pW}PXF)7Yː|CfW$XVgT<ˡN\e{϶\m{nal6FR~Z|Fı㹩: @ @;H>}^yБ[RRnϼ1114 +aM[7~g_qh6s +4=hH4Cl# Lq\gY0h ߓt, +>4fsVZ}{I5m[GaЛ~{qI \RC 8U6_ן|t&ԨQcܹ+Wb.]JϜ9k.͛ׯ_o~y{;CժU[o b\QmFnu[zKh!0oyPz8bt;9K'l66 | {X=kYv04mϯHHPfܘیMb,پ#B!H(nмJ@1b&rK۶mY0mڴѣGKwƎ;L8QF'Twj]"^5&- +Ց`u||գ+bʉr-M?0ԥqXY9!C%OV}%r@ +pr-^ L4m q05}-i~axy `III~{6W˖-;wnӾ}o~ٗFS,B7ifچQN^t*J8(@GF-uGWR2v^VߛF'6$0LlXY^65pY~BPG=6H5?/9':xж1U0]Jkߍާb\6Fre?w\~F!CPQ{;oorz5ky .4lkf|s~Cn333#8Au-J/ObHHdxcbU,`-ۨ+..)+F4ͭ!5U/1É\ >V(NS`+iKumc#`aymoU~7Зpe5v4HgI 9q|sȖ;T!III/޸qӲeKi{;l۶$//oO|w{ߗ1enFeS0c Yj&tFANta1lP芖FT|pLэxGatŔ0˹eճ3̓D.1Gcqy Q3cu1ȏ,X{Xȋnl>hXd +tdt֚m F#?` lrO)6{lJ .Y pº+sR#/zXx%V;j^:or}{ +0VÄ#cE'#hzjފ)8%tb0N&.TOS@VSV*r:y"<%=xdOV',:KsP6dPr+jnhچϡic+?n)5*1dma,OoX&oYFnڲCoGqFoTO h԰ q-7UizǝU7vՓ[d#Ê4۳BqڳTrjʚiضX ϩgރi +bbRZaN&W/A[E' telÎSʈ*1$7mY١Cz wl޲:D$"ǏIMhb@dYF=\uGִE'@Tp_m!p[&e/M^ZzJ!Μ>'6^[qIDCb@h^=L>)!2y̗j_+*1h`ǘ-2پ-D(C*O\r֮+ʉ_TZ=nZęJȒ 35nT;#8Qij}p@bCV9xy˯lޒcDn8:iGַLCtY*HԊ!4mˆM'xPp…me_P hCF~ThL[t̉f1YҴeK79t;E[f=DC.]xvI D 5DϾ3z\Ʒ$Ox4Ft]7$Ő'_SRs+^ٞNP(r`gّC]8ţ!^t:i_F{k[h D71!(3{-'|钕{Ȋ!t$C7UޡCG j,'fFem?sh!!md(ȚGgIeC B!rӖee?vTY 1bbH~-"EY٦_C Z[=j8l3c5/ F )\bB o17,uljP#iN m9b?[4WF蠋HmJMnO-uW=a@bH^z-d1dۦ!ķ|iKJT2rK\{^=$Ub#Bl22C)Vۗ8RbWbA  n.1$#37mY^zS%dEVrW+8bHȢ7*w9_S{&{GA:j#PJ +^n1R'1RO?dh +3N.@Ub5k֭(^/U(!o 9yS]bH!į:+ϥmښ}Y20lzwwM0*<'7fȧ~S( .Y\әvoi 7Dq)ٳnʕna;8z/r ׄG ~\j,KG'Ʃ NЬTΛ"ZbzbqC!E|HٶK׭X:8'.bV27m%OCC\ @: uWK"Cx!Bփio: CLSЗL=C M![6l45O>r;wnl=ǎ]xɴ=qܰ)!CfY7cU+/} el;YdX!P`8L?1ˡzfk.{`c9MUx~!r2 z1V#N<";7l1$"hF5DUaz B׫.9C9S̲!)+!ԗܷ{M/K"rCa)KFGpO$~lV1y,LSkrH!AX56Nb6@L8jz ! &Hnڲ)YɩKyKrRҖEPE{1]5M xP0%e9hDcɓfc܅o`R[H!8Z\hi:↨C`Y܋!F,}aO5'>L(Cx!Bhl( |j-tRa:fJq +U^\ȣJ $űdƩFaU?5{IƏ93#sbk'4e#~u{ӖY<+ 1G䫧PquOGjj|l"ĐD8CU0*HT]~C&`Ȏe?Nu !3wN(> +?rTP䎼@Hi`7U.@  ĐD8Cr(HhiU +9ǵ.#VA8˪Y9uyAɶ ^\.@A? J1ĐDCLeeUgXwsӾjϦasb>B~M>ҌY'ڐvJ daf $ŇȱVfc'w\>kʑt1m`1`%kv +v A5 !f!h1@1$ bbH ĐD3!bHF&,,A x)v?Ŗ-C$2q3f",C$2bXZ,WְHYa1g޳'"^Yb"gODŜEzxe 9<s= x"5,,{D+kXY,WְHYa1g޳'"^Yb"gODŜEzxe 9<s= x"5,,{D+kXY,WְHYa1g޳'9n "g+?KM +endstream +endobj +256 0 obj +<< +/DefaultRGB [/ICCBased 451 0 R] +>> +endobj +257 0 obj +<< +/URI (http://nrs.harvard.edu/urn-3:HUL.InstRepos:14398552) +/S /URI +>> +endobj +258 0 obj +<< +/URI (http://nrs.harvard.edu/urn-3:HUL.InstRepos:dash.current.terms-of-use#LAA) +/S /URI +>> +endobj +259 0 obj +<< +/URI (http://osc.hul.harvard.edu/dash/open-access-feedback?handle=&title=Algorithmic%20Approaches%20to%20Playing%20Minesweeper&community=1/1&collection=1/4927603&owningCollection1/4927603&harvardAuthors=a814dae2f03884c4244aec3bac9f3a2d&department) +/S /URI +>> +endobj +260 0 obj +<< +/URI (https://dash.harvard.edu/pages/accessibility) +/S /URI +>> +endobj +261 0 obj +<< +/F17 452 0 R +/F18 453 0 R +>> +endobj +262 0 obj +<< +/F19 454 0 R +/F15 455 0 R +>> +endobj +263 0 obj +<< +/F17 452 0 R +/F19 454 0 R +/F15 455 0 R +>> +endobj +264 0 obj +<< +/S /GoTo +/D (dummy.1) +>> +endobj +265 0 obj +<< +/S /GoTo +/D (dummy.2) +>> +endobj +266 0 obj +<< +/S /GoTo +/D (chapter.4) +>> +endobj +267 0 obj +<< +/S /GoTo +/D (chapter.5) +>> +endobj +268 0 obj +<< +/S /GoTo +/D (section.6) +>> +endobj +269 0 obj +<< +/S /GoTo +/D (section.9) +>> +endobj +270 0 obj +<< +/S /GoTo +/D (chapter.15) +>> +endobj +271 0 obj +<< +/S /GoTo +/D (section.16) +>> +endobj +272 0 obj +<< +/S /GoTo +/D (subsection.17) +>> +endobj +273 0 obj +<< +/S /GoTo +/D (subsection.18) +>> +endobj +274 0 obj +<< +/S /GoTo +/D (section.19) +>> +endobj +275 0 obj +<< +/S /GoTo +/D (chapter.21) +>> +endobj +276 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +277 0 obj +<< +/S /GoTo +/D (section.28) +>> +endobj +278 0 obj +<< +/S /GoTo +/D (section.30) +>> +endobj +279 0 obj +<< +/S /GoTo +/D (chapter.31) +>> +endobj +280 0 obj +<< +/S /GoTo +/D (section.33) +>> +endobj +281 0 obj +<< +/S /GoTo +/D (section.34) +>> +endobj +282 0 obj +<< +/S /GoTo +/D (section.61) +>> +endobj +283 0 obj +<< +/S /GoTo +/D (subsection.99) +>> +endobj +284 0 obj +<< +/S /GoTo +/D (subsection.105) +>> +endobj +285 0 obj +<< +/S /GoTo +/D (subsubsection.106) +>> +endobj +286 0 obj +<< +/S /GoTo +/D (subsection.108) +>> +endobj +287 0 obj +<< +/S /GoTo +/D (subsubsection.109) +>> +endobj +288 0 obj +<< +/S /GoTo +/D (section.112) +>> +endobj +289 0 obj +<< +/S /GoTo +/D (chapter.114) +>> +endobj +290 0 obj +<< +/S /GoTo +/D (section.115) +>> +endobj +291 0 obj +<< +/S /GoTo +/D (section.117) +>> +endobj +292 0 obj +<< +/S /GoTo +/D (section.118) +>> +endobj +293 0 obj +<< +/S /GoTo +/D (subsection.119) +>> +endobj +294 0 obj +<< +/S /GoTo +/D (subsection.119) +>> +endobj +295 0 obj +<< +/F39 456 0 R +/F15 455 0 R +/F19 454 0 R +>> +endobj +296 0 obj +<< +/S /GoTo +/D (chapter.122) +>> +endobj +297 0 obj +<< +/S /GoTo +/D (dummy.123) +>> +endobj +298 0 obj +<< +/F17 452 0 R +/F15 455 0 R +>> +endobj +299 0 obj +<< +/S /GoTo +/D (chapter.5) +>> +endobj +300 0 obj +<< +/S /GoTo +/D (chapter.15) +>> +endobj +301 0 obj +<< +/F15 455 0 R +/F39 456 0 R +>> +endobj +302 0 obj +<< +/S /GoTo +/D (chapter.21) +>> +endobj +303 0 obj +<< +/S /GoTo +/D (chapter.21) +>> +endobj +304 0 obj +<< +/F17 452 0 R +/F15 455 0 R +/F24 457 0 R +/F27 458 0 R +/F42 459 0 R +/F19 454 0 R +>> +endobj +305 0 obj +<< +/Length 25791 +/Type /XObject +/Subtype /Image +/Width 107 +/Height 105 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 460 0 R +/Filter /FlateDecode +>> +stream +xڔut[g[K2$)0Cq1̲%3i2N)C fܒ=3gι[voz}ֻdko~Pz95-ފ]+ͽߊZ3vՎU;WZA4Fzk%7ފY#f;[l V]3r[1vDἹ=߰w,=\-1Ŭj[Ԛmg-_+kwnzk7F5mKzs[o?Zv嶈[olrU[n]5js˖4=xmQˊ MIք6{bRTc5XZ-^gͨf^SGj-iǯ`#ƒZUkG6\^:!ڒ`$Ua)8K攪”\ Tj5œXnb,I UfZϫ6$:/|7WUb;o.'KL %RCR!ܐ\aL.̿QfN*3eƄ2}|+cq"̑Ŧ"kj9-?~~ґdיGe{ӂ1{B_J.hxV LOby,-gOtvsq Pq'ap&.?СGyFOap. ~;_ F;;m{}\\[n([ḕ?z1nx}V]4  m-x;]o}V{x!˜FNowr?;uHDiԼ+ի qU +ml>ʘpޔPm2=S.G#E"uj!I˟mԅw\ml1L].QǔjcueR]Tv ]t1zY(\$@ t"m@W$W꒫լ~{m}D')%L/P(UڈB]d>PACaϢhC: +*8bmRkkan.g8\'7zV}N=jg(}֜nKN7m%6չHf'ahMf ݒjIm6'7rmY-&]M]G܈)3lFcV>`r:Fsf%ՒbNoi&cr!'ސXOՆJ]|!ƒYgJ5M[t#폼7f6[s Zr܅S)T`r  5j=yS|.\SI,6eVX*!thk'o?ѳ %X}5۔wY{**x '8OO# =b v֐9hcVjm귦w۬-w9JtvS|Nyn]|x3ސoev{Cm>OFgebn LP:VcaJi%a[x]_Q۞e4أ Qw󿋦[`8 tZfZcV ՜b"73)M:m\"=[mDpH4R|iߧ3SoySÊ_#60ғ5QMF˓;-nGcUL?avٳ:M?{'[}oa.oX 0->3ǘi0f4RnX3:vxNk7D wc>+X` l h*nB2Q; cF1N\mdܾTGu[8y$|R{JnS o>k鵧)o  +2SԂ`{ vА;jXC@7-ok%W{rל&Kr#D~kŴNS=!}=\=+kX hhڜ}z&T{]eI'Ca7ǟf՚JXOM0 \;x + Er`}B{,n$ ]OnfhӪUQƊεgYi +.-../<\x*z"'C87j [&Ơ>I^`߲,yő{e+Ek cBd6( +CgԎ{ +13dazҭKQ UӚ-(%DUggy6:n`ڟPr1F?Nkath:j&UZ J'4n":iՅ|md9!.<^]\Ȼ2N-''vM8f2 ǫ5W [v_<uhp*XCCcX# `  Qm;z\p3t +)D x0Z/QBHvgi6dmd[}fVcbtiV]RThT@T-$$'M\ux5=S\XH7 pCY#&vڋSTm%"W0WRuC=e ?e9DHñFl!;hF΀ީ%CkQLh +Xq0j/ap + -AWYr3c!H~3z nMl/yg)5G]}f7qePQn&D==H7\Ib*&,yf ڗ+m:}po!\uh !NrS+!+-wBH:z` uP`H+ʰ nrP - qD0rѰ`Z0n5Df^lL2$> +ay/lMB~\3k^bȉHF;'<7(Lc`~`$vN?ݤ2dMeNDq[0G\nY0noxBȶ(aQ-]x˟Huhrl׸ax jސ5 hs-ˠG8.^AE!c\xpG-^)o(4z իuQsɉt9ðuou]$H'՗ ‹uȳFH%Y#ojl +n{0јɫiF #t>@@ [t9,Pߐe +<.ƺ1kpZ4eŃէGN_1 s,nHzI-IX 'qn#YYO%V… opժ\?m\@Ohu[ky+'XCx6 A1$`Nް r. +?]v&ZRI(QsR4ɡ8 ^-!v+'3aP-=\ . +/X/`% X"L0 +Ā͐ѠMӂ(_d=AnS‹M,Y &1 8 +:<(ZF`xP; fCz..Fi>҃ fG/+pU`fz78g' ljH@piv(4sz=EUMT%S+)xSW@ &L[)`MEy +WtRTX ^}@G6%T& cB;Mv=MGiQBh4 GTAċWDa<9hVO?Ƚ2=%sK7tkғp!$_ cu{zu-&}z>Q|u,! d +?]q.`ÏrpDxx"? td'Cr4aP= Q{n6K~4Y4Yv*G-Βzg"2%^ %GS`9ІC%r +" g/13ANGY5슉]ON')ES8X8m4:RCrB89AAYAACÈ!`"Q6:?*_ioЬx}4{ A =@@Z_Py`P``@``PPxxIO/V$͞n"9絭m[%x&76~o:GymllW)͍7j2םNy=\| BS#:Wʼnn xmV{5`֟9چs8s^7yCV|}}ݖN)ՕG8).]j(Eb1]l>8hH[)P>G34&@H),[Tb"r lنغ}˖-qg?nۺu-o-[^+ !BM@ׄQ!PESGai"::LB;D1oiS_{59,T[~Ec6]0f\VQ-h`g^0l+Y$yC:X}V~6}[ή9Ee%eK+Jˁ +bX++ + +*mܸ?vX&o)U^׍,ZE}6QU؋ zE,Cv[f.лՌN-G[u]owBūk%DPM_ą[ȕATd,2n}╋+ʨklmnlnmonioi:!Z[S_V\YY_PP~!W8cODC a|MO>"*CxP iC8`GA A,aB T9NPyڨ"Inn~i㚍{ tN(-Ònh66S`56SM)FuZCR>FF$W*1ehh + ƴ*uS;Brq]`r[::Z{ڻtwtwt5tUV6oٰ=*oL6gR˕ FCR6J_ZM%T†>\[?}U,TA!'櫓DBelbH}wMۚM\ Nٲ՛cOow͵L,zMnC36D iVZFPbM3LEӰfr)ѐVuq5i릝I$>_=2qylco.lzG_W0?94: #+#ƧM]yʭk;|=hɪ[HS,hF0s[Mv M)f4bm64sLH7j5jmF:J_)WFjK46NNb>,6`iMƼOa~+mwӰ8zkNӘll4d(k `v!xoHj+]Yk};Mħ9{a_}Koܮ?Qd_ZGf?[(~[ai6\ +A}:[boi;(k0;.#w"r;-wv3ffSvܨG_3ץ%RCv>Z9.hc ٘MZD{^ [0h5iժbSzNO2E@ԛSۿiaW]H.n\\;n8;]r#:bR_}ih xؾK~kZ%TKk7X&G}(]ܮJ6(ݘ|vbhv  JnFjթEphXc醛5<ˏDP6kl6TC'X46ti1c[ZtX}8HC3HSڴ9m*]WWuQi(cp]K̫s*[\w^qەxDžx庫 Ҵ 3(zÅxDw.;_~?k~G8g}./q<XÈ.n(f,Pn;F>N D$<(FjҢmԪ2jI`P}_`5ͺMH_C؊P| ֋{.}'8KA砉Aݏ->3D2ڜV}RES>ڼ#b. :ԛUڿl鿻~V]wD;#^]_Lkv[yew)|?0-豇q\yf 9)8lFRѝcb z//3.@kS[M$`|Z~Q|ǾˎD_4?U,RQm>FӇ0|9g,{>#u֩겚 E:,uvӎ%PeWg̓y0eG2۷>0=gz)Ҳ$MgkDgg#f-Kf>rb_U^-.c˳1н6J HAqڃѐqRHkӃP[5V5I W+cAzI ^Nף1GTgc( /ЇřX|x s ͦBWhHaY''С>=۾w?0Cɇ\Z-7h5_ܡ޷3ogX`':+nA+Nk ]Ǒg7XritbJeC]Ɗ.:v@k5 Un+Nq۵Vm8>G~ k,aQx/N.fc97~#h7f5b +$҂~mKI yȑv!C),%\{D+.[|yog@=o{l A8‚"a/F}eethc; M@v#C1ֱvMn6Z{pZ[w+xЉ@:spY]v[$l!X|֊= O4!fa ZB:Ch2_0bh6Cj.\  y8Qo~㶇x. { ~"~C|u՗o,zc_n{[ylyF.(A@wW R bGEs:جR;̔vJ(;4/sz^-GАg,UulNNQw +G5Ay:J \ogpcd 3'hK2sMa41p(6!+ALW<,A~ 3<Y')@Iݷϼ[ 5ҲD! g<"uhm9[ QH-Jxs7:~/&\YM]Ugk׽KfCpaO\@,*g3jth69, /HvpU34͜>3A`@qLǚuu2UPǘ;>{(n֠O~;V|hi ]$洘(Caͧ6̄  AļQsP8 QF]j&DΓcH}G%v- N@b} Fn?vBUםBG"6 ͈۝op[sx@|# _lVG+H7^C\@"t]&vkt^ )XKndW'Etw9J|N/Qz:CAuvR9jc+*hlCCQSߔ4c)hh9&B[,(dީV- !K~+y<9(7^} + WK{.nW~!7|y}tZzh'Ъ. d(Ӫ4 0@2zFNۇnqH5^VL*Q*D 5gY|>KЩӡq UY z8=ƶp$Fw PLne*PPR&BU<2kXP%K$ڭ?ze]E戮O^q!z>kMKA?{ʔJ5@j5vvd[ѱVXT5JeB<@BA 5?7c>סX  ! +A@*l4T ]c<3o@w? 8zVzF =4(X-`R8O}*W4?z$[Y $..`SS_@@o;wNs斧=;ނ eˮxsX`㢀*!}y]  X"7B;y  NK0:5v 2"L `b*)ɘ9xO裬J4j-#>*y +%G _Fn4AE `B+ Ӈ*dX:fޮmdիL(C9yh&' (}R4=O=͟;{4.ݬԟ ]Iu W7]7pc߁.{'WM ? `ۡs;`h嘲J-@mHoC8[ަgmh)jxJER"@)s|Y\Y bH@}hG|T8,# rQ/ÀFZl,v EۤɮdTS*Uʨ|yPS)U`;K완b)5:ncsx]=M-};*̿#վ_xw庻.NoIw:(6$"Ej6Þ` ` @iFh@D롼]ΪSeשrhf*3iRx|Y8_̒1šiC@Dc13"ffo?\ ? a# ݀O֩3jU5:~hMF:JTN(Q*"DP" +d#sz)>(5~. 7p'nIΗ]^J\aL~,Poa eJ1$ɥڬ*]z&RZH);HU*2yb1;EHhҥy1XTI'=<xOy[<h|6PJR')K$ ߨP$XuBb]T>f0\ / +jRxQgIՁze{$ɭ<$̀tz)OL-w..I΄./|{? . >Z ojdD e +  +qR "4PW$+E +d)I*:}ZVI@rGI{~dt彯oۤe]]o8%d~P$.ӛugH{Ɩ1B4Z H`JH$R( ICR*! 2t@\b6iICw+b +!M"c8`4,W -g̃;g[2!={ gu0w_C_KwL^M"ru&^_AI/ f4ϑg=3eBy|)8i8WD$az㣲wCnm7-Pݟ^x$$M \?w+c6tqa1XdXyƕ1JSzIHԣ]!\ˉ 1g:MFpXQ,L @| xn8W)E[K R] ].> 8Fz h|7顶ㆾ{k\',{UgWn8;&p.זp獵9PK e\@a]~Whm3^hp8/('q0k +`=P.:HL(Fi(hED]a PͿ[&yt:Y@ bK1CR؏HhsT\Y YJ*`Rb姲Yr#)_R+["p9޺O˾};kvfu]uY~z#g+΄Vte-? ?@^|{cQo{2'vW'|;@4@#ϝɞ9={&{tOgdKfKϑ,h|!J=/>5{0_̮]6]{̫W +r&]z4w)Y8M$}s>bL9 OǓKux̱p: HL{쫙oYg͟^rw箷W|u7eWH+n\/;;_Y8QЗeP +/|63gaOza=g/L|&y#wSsŧ%'3}38'g=f OA33I%<8ƣñ?`ԗҺS4ȷnn]yK{[?썝;4*IfNf}iJ4w;M.+u3e@q̱$83~᤟S봍68LpƦ?>Uff`Fn~?յ}}S>9OZuş=[bHjgm2%Ԧ=7qXϞy'x'"fg<p#cx ǁľwG|x 曄rU͘}S757#wrΨV8d}3琁xy'RgVNzH'/r,n?,aX'aNbzq[$gHX-XŬ00n2-OLɁ`D6ŦX1[Mo][1`OV`qֺ1 rd.5Gx>>D2<%G8 +GGGGcy|W-2*[|%-}%~)v1zNENeO,DHdH΅`򅠜`dHTr2oS=oίz6hs)ڦֶyFgWiJ5)T0êPZJ" +܁0VTemPklj]o5iG'{A*МYӉHXDhxhXH J' yHT2kU6Ů*~~3Ʌ?;]DW]F .'-ᆃnΖ;KD+\-DBK~gb݉w/Kw/|_|%l\| M_}Wnt idF" 4HO !1$] +:D +g2"v=n9^ZyU/>ʪ#/q7Z+:{sG׫+Vwu~ʼnk_^#:߿x!:+8Eo{z:Лݜ_^D|U?Cqp׏8^|#VJG_y(+ɂ/:$Gz'C @ fXP(XJ(N1U@Go;P+:fϱ01M~ڪN$nx%jYPƟZGȐ3!,E[Gd)LSGr,S{l ˜Do"^{g$]R +܏"C=4! 4i4YDՄ2q/\6fA0#eU07d[~p^SP/ +.=Mf[*2R8OnTMlЬ^{r@ሕRiJSJk1eGjcteژR-B"EB5*px*4O,TlMP)lvЙ=.ߜ]eLʣڸrmt*:b%6}Cx;H30Pr =@e}!Ro7u#H=h³vg*o!R7g/dfFZF.o |ŝz:|:?wW,dKq1XI*W+Oˇrl@/YHx! g(21b9Qd:|w$ޝM駭cл:[[D4G >t.] Ou=DŽGLE0w4 Qʐy <ʬAWt!*bHf™`:Ɵ'RuGycH3l +!e0|=b^SYiiiR&}>{l~_f%&uB`PQc9)ůŸt!SNEGñwNXap=}ɿo|?/I1)]9bcBB/E1\Hg"c1He %ߊ:_q,}f?d4Om~ʵp1&XLK)@[5 q|L<SĪᒅy7HY6st~F@$k,JUIm!XR5J.L(3"x." +r!7/:tۇ$j=>O}KzR/YMJ}@z@0/Y&h4&$o Eb@`D8 pF=}rwhm %33l%9# @@xp蝯 =`WYoh1-ĎO7Oy#A#uxfOsrXƷ`_1{"̈][(d"JqXxxT%'֖|)&gm:up7*ӿsa/=QR_UF[buR}8>t%)[N˔S.(lH8M[5*dO/bCQc?-GkqJBf`:'q$=Usu߽X{Oըɘ!]Ek(MRl< D%hQl o];7g3dsɿUU`7Rt[hj<-ru@T)3 FTkqjJ-ET,xxNm>v/?:;Txx [=Je!(G;ܗ ~'$[ƊeRH~΄;znzϜ^̬[98dB/Z:-IR#r%[M!Ir8̅٠j>iEmVjl&i-HcӾZ$ 5P+ W_o H#ʵr-\ ɍAL7wڽ=7'_x4lTU*pvo0C c'hU d/eK 5b@2Nx6Pz-0f9Y#8/ZD @ 1.hke āQ<Hgi Q4Uc8x''_~Z+swu|LD#s6UMneN`qzTlFJX:Mh]wFWҞaFzs &x PJ ڗEy`OΕA*LyA]ıWïx 0Q'uT+ݼ ژ@^$[Lʗ }KʖAdl!,_ * Aٜ_4oUnU- ܎ Pͧ~ދRcROUO[_@bT P9[1ݍf=*Yp&dD`^@ urh L +?E A @1!KO@F +laFLG$gկ@^Jx_9kT$~`W 2)AKsۄW9|14ArHQ.bb 9vr;^EhyZ-4tE!=?Uo`Y,F +sr1wk5[Xx+yYA-oFYCZ<[즏7bh~!dF"v }P%S1QbKW@PmE7Cí0tF( +3uR{1ש[fIF/<Ю$ 1UW1:"|B9 ɍ1`kz!ͺ_ԁ/cAZFd+b;T+nf"GwD:CXd,D\Q<([X\XcW1xۋ8NZę2VG)dM4\FtOZAjWjfvVn@ᎆȝjͮYz(Ҙ T(Cx~0'C)![zTH$kyTIpVҙ0wO;+Vbw|yߍ_au&KD(,I$If:rV;H` F!YFv,cy[Z ?mƫ%j?-bj졽)q_"+bwwJn;ou[1*ֺ0{ t\Y.ؔ W_5G fp?(!H`CmJ@ +,fӮGt"d!ip)\eM:>fYf \g -s?-`D[8@Pm"7#~$*[Q퍈j.1\:wUƱ%˧s^n3Q-vU+}c[2xDHT$Jn`NNn3ـ$0,xfRb/k2lY')+pak ^;0CDURV{!81k:M +[RjΥZEot7ӎ$V옉b +|-Pmıp#GyF k6`>mpS; +ma8 )b#&d*;--Fb)J` *aGh@lR`_?h2{ݔNGy]h/m\٤ӎW^HŚS.\)w S_VI1QFs4 hD0ʼ_4Z.'Ic[ŬKd`,2!X%r֨ɈxZ׿=<հuN 7`t1( @2c^UDK1ӾJU +/w4(`j1*z T6Q[hxU"?źa{< r5eΦX$S?!pNCh6: ~瓢.3FU+QpU:6Ka\s(v1$\U^!c7y?b{lnw.@NvxD ƀ)R>(h0& "1,;$⮁ Q)9 ,UN̆C"]+V}ܑ@LJh`:a:(l:`w3`y=.zgJvX LE< x^:aQLHc]t!B$*G +8*^M58'5meݎa=%m5@&LUt^95az-Z x>0Pvi]@`=jPy @`򶴌e5~tS-' +f"} @ "xNJi * +c@>ΨuGvtj˝\K}" D!\ ')CA >ɜO4pGܜ!C78fŕK{Wh;vf,.wBi?=:k.TBKE%2fD؈%@Da("!fL=wH:pU +w V̦:DN>a C0B/$ J)+Ll"* .~K u5.CփX\İ]lt _:{hZ#s`'.,pHLu^ޘ}:b(gѠt4kbVԶ[@3gm}W+>wߨԫɄ #1,Aǁ@&Q<bt\j GҹكX̵8(6 'spOXcE1TD0LW0޼oېGA!ejPB k%¶BbmjIU8aDփD;yS0󴏸؃T<'A;TZJlW]~FV e)ɒ"P>k˗!n|NUc"  'm>zG}B,PûdYnR:pb0D"ii[Sf]K@2'/qGB Q zۇ1O8mz=."7I"L…;AiCR+uM4˅=^5UR6!1!X}Z]&fB-U"kM*G܎vZlj $–'݋fv3! ++szo*0 f(=n~f&GRfv+u +Oޤsq' YnrDY0fI3>X:ٍn/Ctѻ01q8&jTZLS+uü(R;xj>h>#B=BJW36-0FrC9:Z pb "G cO5rqQ .pP,ENZ7s7i 8)7L +ث9+D{ j;(;f3?E`:D튎IOcΕ (Ad Q$B% +x{0 +rQ#q\a.S΁Rz_2a*nmRX):;E G«wt& :[{U"woZY}W֝<2hjIi \.(X59J*]Jd-IW9딎:#%-ZHQ#vGAC?!0'-+*JQչi`xjPA1Jj ݂ʬ0A`34Nh; 9sAQ)ܬt 0fpRtARۛv4߰gXA,MB +S{D`γ r.=xs$P`0D7H~ #Ed{ +8N/]Z*&8ؤsWo lXbIfϢhG`'`xmS@;bK1x6#?'|}Gӻ j 5Z., <@ZwkE{d`{ +[̊P!pI`K 0{h'Δfy" h{[{U +-u2R7$u2{5R)W +7:߅S)Ja/mmx T[N=0l2^8W+'Ţh{;UBLN+ɔMsͿi58[:sӿUgw*jL<[ITDMo)Vn*h-h۽IڅSa;~!er ic.\LnngduTZvK|sw! 6rE01'_Tf*h5]f1KC"/o2~woe;[_o݅W!{v+ʷlGElkApe@#Σr){ C4%9SX۪ י7ę =|C +e;O[6]Xʹr0v6663 Tb*!P:BI^ \ds(>]W;~ROD+aß|e/Jُڞ픱wئV\hu-b" +Մ`kj8Mʧܻ/sΪ~c!*ߟoɣ>)dXO0D)<0I q ;E__<[@pnk?8u>xgnDDQȱ]a[vk9Œϲ\fٮ0W.yȧi\-bO!lK!bcKZ~ ?o_i*)_oWWZl|%nЬTy G.ݞClhKTk6ŖEqj#>dQ94G ϳzʮvx)YKTH[L\ړړ\͔K=C.LΔ~ڼ0e7f5=lM2aoN(q&үʩŵϘ>NR)aVvRm3 LŇ)@@o3d0emC)n},}waүSҏ/onߦi{>?i]~@#Ȣmp$x ? +?PPCaajss/Oon +endstream +endobj +306 0 obj +<< +/S /GoTo +/D (figure.caption.7) +>> +endobj +307 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F27 458 0 R +/F17 452 0 R +>> +endobj +308 0 obj +<< +/Length 68169 +/Type /XObject +/Subtype /Image +/Width 229 +/Height 162 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 461 0 R +/Filter /FlateDecode +>> +stream +xڜ{SW+LzڤPMuS^-^0z'3$3 ^{lc_k#C|GϱΒ9g/~q8=6&Әo~٫ "3M0:Fb){:d4b&ݮc5*#@'׈* j~k+LcӅ`.|Oиgo : ؇c֡e0jq!{`Q=E3@'WC:ӧP6حQ{>9<9v.))xBmCQ`<1 FSz{Lg 5D5_5^I i7W{p.UKTT^10읜M:uyεdD vtDl>m/lKO 1IètۨaXݝ%oK- L+Pmb +H) *9u.zW9­UkAQ~혠v\P3.WUn~z$UDqUTcWDU&^UJ7I^ +TJEYR5¾FnN0ba$6QJ7rbPPT8N$EXiYEzx`+[&'/|e%[V8R??hG5yOSk/!d {l"ȏp=@ӬN*4JÁ3_؁U$}?*µOZG~낦={kh]Sڣk'*3}HIંGʧ6G3ȱ%)L.*56X*sqWDjhD@WҫݞiOhԩ+R+UV ^Ŗ@J{$ mc1xƥ c҆;;w8e q_m+1}]|E.p}akBȩgt +l| ȬpVkFHc**5AQ%wJm:"+"=IػI9 WJ5 +[&p+17>_5!x L[P9$W$5NIURc byFf,ˠwܳ)/-V!\img~<ȇ+w'u_%D6EC}G \bSЌ%@M:}`RK؅gqIj(]Ok-1Nq!\LiFT5UY<^4WՇ{ \U~Dɯ2#Gyյk>u(jJjpDQxcKDe*͑kUWGǸ:| +]Ao"\஽2GJqł poknmV;w;Z+̐rxTw"%eD+ºAxb G@,TXW!_k$mNvlMRkᖛln)I ƸrrZnu=JP@V Wy +jzXTTj]:&E2 @9pf՜JZ3x{w{R>ܷ_u8N:kt<Pz|WIlGgUgt>WAZ{5~{ks0C ž@!VmQDkb97/p@9> jjޘV=nԥw\ߘk]\m@S<~TT?"6"innw˷E6qEYd9c)V rYVÂq&|UT7$nm7 \lo@>42$ּ59\Ip%Iuq\efN8C"tL[Z ;*$ BM<%ߛ>q\ |k' \K2Kl aݸ=Qqݰ-F*J6%uaW+QQnbrEY) cS?(KP3,L\LUR?$koWŵfA[eHҾL^&Fjҽl^wxrrzW8!Ejb CU<#T +A"4Jd*bUVgւzNY"K!FFˇwrrN$%ր>X[MޓЊ4ҭ!C6p $p]`!dȋAEƴW%w۝GkDsq=b뫽4鴴G&'30AÞ1HHjk@UZE\ud\ "\Sk0.`a5F(F! Ӈ賸~5D=':pe5z5Y` k%nIݐ~(`lC\ iEJj~w3se%[Н84WZFYf#r࢈Oxt#P*F³1@QiMT啎]f*(,A漎 {tfӏ&'qFv ŭ$Y Tvsk\Rns:N2m^!WR$YMyԻ+ootd3?@,c>x)4IrY_=Џ*(ƵiϑDAa҄|ҘS#vӸ?y:@H副W@ \Ϥqdj<0O専)W?=k-ƕWĪCkWyWEc.$Kmx|lq#7E G~6ZcV8oq_ŠNZ-w*]쨈J'!RUVQa>_fX*I4*G8ٱW,OowZpG\gKK\3&ZARYbXhCi&E+W硹<\5~DjzkӞ 8DJX_ +=4C] \;6 +C \kDƸGfKCB2ն~tAމ=^pR)]^@+t]T:(Br-e;E6,+#vn!H7K(25S#՛X(--T]ʼnUϩ@`D _tG/(PRxvY+\Q?E +,Ff'P2&VVє +2;* +PaZnEz\K*H>EIչBFZu}+m.VY4j!\uV?:8=2@UNo} @Хcu5a 2si\j FNW[Bβ +J&Ä*UhWRn4 c_HJJ\'Ca0Ma4 +uP& ~G\V}0ӗ^H+tl=|Q +5NA]Pmr o!J+ +LWcjr5ErET@70;גnL>`k_7Mf=uPPnWxU9TR ~%<88P /GS3E 3,Te;֐~yLo HJ҂%+$)Izz+IvS+̼r5AȈ(-8%:0Uz$!DE*T+Pfۉ@-c)I-ceA`\\񻻝HStahB}ppc\0#&w"cH2u*,|[s'&jvTci면{0i-bhKU~-fG*H \\ \W+G!KO>oҖw<3Zrxvn[a, TxXPKy0jTf{}TUd\3kwWeHڟ4W㢍&ՃA^Dql(Br[㔡@b @MWatgx+Kn A]{C5}3•pWA2 -AN]b`Jtb T v1T jo6; % 1 +Pչw̶`Opu=V\u<4|whe``5W:~}\Cgբ$D*4FZ[DaeuRbƈ|ivJ@"ЁY\ɱCmbj@?Qu'֩a`N I5W[Dkaup=sUN+q+M0Q @c^UՓ*XJHLIF +b5|-Bj3W|v.yMD z `WlʃXτ\,*"~( +f!+יɃn(0[oo`oƸrr%hu.䜬"HWBPGC: +ܸd"YYv7BIZa\@,]P+t!1NмFk )S%|_[<קXUc0\ӛC>V[ +Ζ~cz]} 5 pjKH@5`W"Դk_鳗Otk)-|KGhrA~$ndz@4SbH4`zEw7 \*ȕjJk(m ͹TI?EK9z)dIo.@Jr;r; b•a[ne06a\-ggRjү[؝8TQ%JX~H'b$(+n/no#-j"Q% Y_o@vepS]͛7n B=Z +bb{ߙ}k=r4'AϾ5}귖O7puk:k$q-Ӭ&E%c!b1E-:@C=՟#~P&/۷?0 ;-sd v"w]0Ww]Mm ,(@,FQ +E94=[|l-@ s]%5970[I2H+A,)D!n<V{{7#,ӳJlPqq\ +naMοmL}sOқSݕ罩y(_߾ε[ji>7GklW%>eK1qW)mw +{9E K#W-WvD pD Y>]!w=t$Ν{&!kxa_%yexnq_^a<U pK!GTus+~p{'}ч0#!O_xE +kV-np>[ 坧.he kԺHuk(I%r\.w- +s,2W2:X S?YmFV'`ɫ"He5[`b0//(m(Aݻ?G0#Pd 9UP#RgcX+3vcUŕ#ksl# z7*Xe Pt WBʁG^h+0.PͷUɃ@9'yo6טs_ݾ E YGأ检kcӾ$rWQpN FVauyzfYU| 7_',՞b7֩ t!wИѺ?G;)94`[6 5`:ts7Ae4<^X9]lC qtaYyȄӁ{ET6Ȋ@r"AP>qц kGENu9rj-yB' q_,(+FȆo CibE$֒İmr`z+Lޟ *ʑjE0;r(D"JO&.r0|>b$#K JH"KT!̠rgm p󊁢[[i$. Dv +x]Ⱥxj9ßK&Q8%TK:SdPZWp>؂x׭(fsӼsSٝ9ݛ]k}Gմo<sS` 60'.ZXFZFbʵ|=x~H&Юjk\m{SOO_=cwJe +* xM@x͝(ZEʍ?s)~==~.i^jYE͈7UUǏ)t5ڀC8 @f>2e*zg~Pπ5p<:~M) l…;>?nk[ndv&V&VƼ y=̮uuuAXӲrȤJI]5qNQ;[[71;6s:zpXY]$FF&z:j;z$ɺ2o|ޞM;:Q+[ IBIoaڒ׶ B0ldnØZOph5 EF;leO$.xec>̛U%u$InOU +MXk fSw/6=2/eZNL!Dx?vxpqg1\fuԵ'\ۏ:OaC1x&ԧ kt1hzбSh#%5%o=@>G|<:ўvcG!ۮ/n':=}>"8<:Ŏ@G**F<Ӄ@׫==*Oӭ'wQGӱ#݇vva폎v|l?hwtM ]Qd̅kKސQ*n2~FՌ۫w673:63;71:666P[3(SZuԖ{kwW +soE9~?u*)ůr+~fluW~h̼lHv7vw=eZJZ2a{-v{)9&{y*#s'.\*R/OW񮭦cu7RnLozw=Z;ks:,X{gMٷVagfwi)bs%93u+bEaoGmC1pfܣSDqS!F~wNFcΑc8fwGq8Jlۆf-6;f9,V ۝ᙉ lZgC#H6G-e(bDB lF;!25u[!5lNSQIahp:|fgdrY  3AZ?s ;@ę/!ϑ*Z}>r&=XCn]Kjդ{H >D?+s~{;wIJv &"5p~? lApRZ`IjY&jH9;0?Q~{{덷s,(ɖ^N? +Va7cǧ~{'Ykrabƪ;F<[dZ~d#󗷶孜nle,xy9kj :cÓ{{_v49GfGO>A>\_F )g +{_Ȥ1mǙjv9!t4( G z @ {{ =􆦽)(ׄrӾ ;񆡔 &'0jSݟ3o+U/kX`j`` m [2g~e-Z]0؄`:MV\˻cp8L_meut;"V7i3h7`c=e!:powVS"HOw7usŧӠnBU-I Q﯏ {FɷWn"Dү;dhضn` [dY_N{d4ÑQ/|3P8Ǧ:ZUՍ*7773613:6 rdžܱAwn, E#ё MFb=g^,+٧vOz=ީx{ðk0r<Ķ +:A3p'r A7D {uKtyBQYkhzGrn~N(`f "ك6G`ÆÛ- |@<du6d蜳'$LƱ-#(66n ܐ{h#3_>CCTIa5¤E֭޼c]v#}-<7\&ͤàM ^)wH:>t0q'/,cc zy75Mea >a"F޿=Ƶ.k}>1{5Wp=cCYRjڟƺ;Ɍ~ 2GW?'_W?gߝ>} i#G8+7>+_ե+_eK_.aۗ/_|ZBׯ\}qw\^݉RL<񏿺|W>'_^+]~xk_;}.4 ^ŋ_7.^܅fgӷjyjʂ͛M{.;ɹs_ _8vrܧ~F/\_?ڹ=3:{u ;z*S$/LBrJZrj*SJʋ ^IIh>YY%O%&͇'žSScR H^`fIIJҰҟ_) SRQԅ)/ᓒ1O>on)(-5 @/@4"P)ixY\DOsԔ >X\ +ůh9q--g-Z|%!^/g,^\ir%+P/~ /aZ҂ V&1㗿Z4G~2k +ůr/ch{^^Y`B  d9W&QEEX_yw[7pbYIAqX^* +A**((DKbW`J{o y|84H./Q‚$"(ڭ\g{K +dT¨xLf_X./.e2ya>E*&ϨCER9%%S$+Wf/{d{+G7Ҥ\>GΕjHZ\ $,3Ef =IC $]TGb+Eb򮌭I˖Zܵ9OA)bcH-H Kr#xaZSDfL7d]Y{R/Y. und$: +DDl&rCdBsL{RWT.}"ȳ +EqNjL:%e^٣P/ Ӥ?+ Ű?  +P dS#Ia偭)-Ozmfg"_( Ɠ߄_''/4 {Caf]SE^ΤҊƃ1_8<5xJϑ/<>}٫kN.}C +'JqNUⲩIt۸dq˸q.^~`ᰟ):Ғץ[9j^XnSFUHFFU eP[T=$D^;}yK/-z9Oɩ)֎+Xw2,ªbHR!t B .֌>2Ff?rX !yBAĶ/=0߾c5T^ٔpG??CW`@?Z4mCu6`#OD\y@GȣQJ﫨jNbݶ& /_(vFF;cEqˌ1@jc2zP9ҡC,9G?xŌ|s?=J7mJW^Qd`L+4S -Hf +,7Q&z.7Fj Dbj(b=Yf!l* Cx<9=u,Jd>¯+q0 +,tަMN@|c\2#U +2( i"5EHblBR",Krڼ3|0N71b DY23Eb%Fd(qbsJH IY^^Fk$ ^xNO.XC7xic3#H(Em$AŸv19q [TGBAWFUL\n}:wstƃ̓otΰ1"&ghhCzXjs[9qc{c7n{n<#qajUm7D&M4Xֺۃ[o_/Rwj|(oڣ0M8=WYJ+J{inW}QISTT7έD$pCan+Q1 r*\XNN]+XX&F^hHr@K`jr[wEuchoHnqhH2.XEfVY0RH2!Im^]j.9V<]3(:٥NN:envP^ R p%z4`@3yĥeEfG`}S_5˶ghW55:7p\c.5 |Mn[) &Mc 95Tgr +8DSq+A\DR ԘWZWd* gRR.^Εyh2Yi8W$r!,改F|k)ћ #UjgXa`0h2%ETZh0.R_D]\$:Y,9UE\NB&ԁp'+j2~&V*C`u.m@kAB D}(᮰s)5w9ȓ)RB+CnckOd![%p=py +YV02pkVbc[7ٓwv׸ݩoNygOںKzU1ҍ/V{{TO^l6$ڼRl1R3 + +j1hcVO5ƽ\|t]f`*T'2S'S_\*7JIbU^CW+"y9c!>f;a\]r'-ø|$Qq4ٔe&ixP, +vw`U*F*G0:FycHx`\1Άy*$(\&FbrKkDuh@qNkUer~|1dOB)66q EPc@':<DU+r`l>2=55KiC|BOט?\] :%p0$g>:zV*\ɑix27#Ufp?фW Il)w} + K7?_uhkmN{w_\K)o731.ѿsCTz2 +DWa{ o^h㢺 `IX;' UNa_ibY:f2]Ϥ$;Nr Fmv j^ +n1KԌ,A?BJKW2#y'CA8r" 5Kx,n[nTX9e&40.2y +LM]NN~y2jX+>rVsIJ\ȏ5Y\7w}*2U\AJ> .IB:Q1zT/e\<8MOžfg ħ.J^bdj%.FQ/@WjկVsգ,A7}w'E՗몯ɮȶٕnSͩo_΁ ?4ubZ[`uSfܴjBP~DžcX7p( -+p2 +[8}t;|=ºwpJX <XT2j7 B^9%Fb ,QS_Y"$ESC*+ +Vϝ/D[9 5{U8x6WchzstWpL5ҹvpHB2CvQO`F'n Z@t|&&:e5QQ'0`wcI]>km}GNܫi@#^0\9Vt5+Ln0.flWr< u|j5nNz{W2$Nc"_q?|"jSamW-)|:8XqVnQ |}aIPiC2΍y=C5>9_)~)q"V&4B,n!!kXBȯ@=W`Dlbi+)ɋ-gk))n*( 94>M(N꽯'ƤS}菗z[{=q#ґ7 6n8YMO5X$Z%u 5;UpHS.~pp+,vz[1t}tN'=ثm*vQU\c*Lya\BڹXH:<"1]4Qn\TAbcUF?Y'|J-%g <,:pUC-},3C2`W8&*Մ!)+q݊00ܣv+] +g#N0if G1*PXёKHYUBJcPi-O#OȪ#p tB_n؆9Q=8j<" +L A>ܐ8'~Eo6;=ixOZ{6#UL-4q*+G8=pTT|l/Vq љfC}kJ3@[Jhp F]n3/&D4%F1рh;SRgYVi]; 5{#הPw-jEo5+O,86D@V *D.)A`` +:s + + +%T:ツK]m^ӻv +3ڦ Ux +Ttć`54Q xp:ԍ4 +vy6[rxJ-_ +OQ0 _nc!}H}.F((j m%O:|6i^jUuD 0p l@āf>OsngW @Vg|1q]01.$ +kVq~JZsH0at@~(?BGC6˫0ln7E̓d`ׄ|U-8 p%%\4)#lTCv{u7 6-7)rgRR^X+ձmkmMp|ĠVhT +j0S$u fwi2m{=',DEj.RޙOzFK踎@7-GE + ++N\@91G酉[Z(hUXxum\= \#I(|pY~R5 ˧qEzҏP[wbvL>r.i^ZUM'tV? R(S Nq +o;MV9ןσn +%,ސ +M4uV@U7F4`˪[րw 1 6ī0$)x=5AO6Ӹ `p P m Tb0m|mǝMtYlb8#Ěly.ӨB O{#0蒨}OFG=:K?aqeoBıgZIkPA:֫bף瓒W{ IŴfB!Z?Q^)On@prOo~1{RjвϷԢ=1&Z&t!\GדW\9W +O +2(|ݳmkP|K8؎fq-*Q B5V-l=;YMpNoCDmA|\怣Й~Ui=A>} 2t:EoC]a\lBcWnPlűxO7| $Tk1@] YqIXnBT&0X)w?ȹݑ5[5 )XfA%+|= >llݳB =#)AOWcJ hy4MDN50E +n ;GD.x/;V}D E0+8TG^HJZPU6Ҙc^^X!%{sz_p~дwv%E޵_ni9"puOZ Sóމ[{>nN؅L|[h콛XVfve'.W!Zdxh.,`/uos6-4ijDzw[}w33B2\9\tj7P0.\!;bՊ |h`#]u{3=5{G& \uo_@* a4WF$A}Փ V]x)>h&}Qֱ\G1Rg$OL%kܵ `>ng:kpBUMF?>t_9(=[39o7ӘAB)ڹ݅X9vc.'O]Ÿv2{{qSb;GZ+ĝ,vK#GRZϼ 6h.qm#91D1E QUͺQw+qW>:^ q4ٹAĭY\q\4{Gghz +{@hM r`Ar#T*H+G\ג&f{7/d?,x&实)opH:rWujP7׹i{{6vWI4&]V;j^`%BݺT)60;בZzg#cKj#vQnCwp턉 + D9119S& $%!2"%D=?3w?;$s罵n*i>N}6583 U uغ&ak'")(QɈUS"A-,񅸮 s*.t ]j?a`Ɇm&@\',-+k2֏74~ [3aEUi-m2]ց:65YЪ?Go#] ] ~•qݾrKX7-k/*ڹUZV#UZSW?\gŵu[14Ծgm7 +[^ӎn$5N:xZCU"ٻ CêA.F`&p,~KN1HF&xW8'5m!kld +_T=%Ƈ }zh ܰ!ٻF+s?`tuapњ1p#);'O" V'ߠR^" .\[ +[iTf00{2:\PSiE&\Moe- TS>9Woծ2cn80k7:qUHF%1=")[IK;,~ݺz`q=U2=H[F(EM탊k|-կr|r*grD㸂b׊kWyp)k:idui!ؽ\YٻI.j0Wg+}#\k`5Õ +qm_Ek؋m5 3LQ`%0TZʋ%E3QTjו hv +r +ZD3?6frKp228I$ Nn@{dV[MU,1H +tbJÿ҃ZNۇZW}Q W40 +نfkMiU p'\&tfο/bqf[`Ն,̮PnuM:#HMEؠjʔEמ[|ٹrs&P~{uò:@`&pP9r8B5CÇONIGK<ط/W ^M +C,̲%,jV8Ybz<8q'dU`%g㑎8%,=Fpt(RdPUHp o׃ȧxg1H}hM^KQMR%pPYE6s'E;amU"07U >ׅ^/NւޏמpAUߕaN3!<()1\ +zJ̪ ۼ8nߞq5:V8B/z~{m8}WAK+w/zIIU+̮PGOW(zޝ]tL\ҧ;ȳ>XɲVfZ٫rfȚ}Ya?x:֎00Jn)b1{0a;Z~6LAR{gHWJ AvuJtGh]Pr+QQFpQT(GrDRF-h*&?W:j:.Lbz{ +pI۲uf=?T I KoޫYIl1rޑ=a_o@Q7Ʒwpe +ˮ v8ph7tv``G8_\s`R/ljÕ]:0`Ol4|+C[@kPRi05%CFmjp;X +{p UW-3J00=_o(PQ-z* ٻ=1.{o8tzɭRt&exϾ({OY׫5B{‚Y6_/6eOK2+0>rFA4Wys O?p{5z0Қ- +NL,jW ϠJj,P[3[;xȮˡ=JAi-FIib/Ij1*P Opio+RB +U +SZFȨH%Ұ)rzt_T'~KHp%\YE>/VC//A 짌 +` z:PxPp#9 cTz~MCvWxD"猸BΈi MQ<JJQX߃J/3{/얙Ccum#%*v4as,gh4ՠGe`V9RCGڠѾɮ2r4ơ.U*, vk̑` +(({o`byE8-,zjt*ͨjݳ0jY[tb!j,/umȢ`lgf| }T9/2]dW|LCٵZ߭y0 E4b^ (`@MܙU+x.Z@uh݃$;ˠhe |e=8D)Z +wsZg$P.6+WV0x++cE`%C*P"4{PK9}ۏ#~io?x%ʃK+e -/p ^wćBfJ\Y:+\/>fGiiś;7Vmӱ.} T>!g: 6e~eU^nrv *`=|RT0JDW`Dz:aNPWkRMe TR +r8 $:Z;we_u6Z$ rAoձmj-;7wl 6ڰcMnۖz*%J_eZ:#CǹR6c]W5?@f4z~ G!'ÎEfD :ˆ*` ,d$ +H)`Db +6p*D ++Ћfcf|#hI/R^vjםQ2j˗9Լ/mߤ Q,y,y㴈8> &? :$R8ȿ|U=betu_Bc@o^ F蠌>#M p>(uveq5TY*scI]77ʚ f#XnțOQX[;toNpni fˠTͲ6,d_BiW@4~٨ԃ/e- 2@s`΢ ,2}fwTMh^ |8I8K阆| |X;2|f{ݘMΖ$l /M^Sz@o h)YSn ݻlB,Ͼ!mQ3w |b!lg )[[AQȷlMުx/{7w% +$~z:ʗ^V[ژQ>wAh&q`썰DKuX6f~mӖ4:r`ṫGC#Q(:f O'-C/CC/G^j-Cm\׮Oo?5Su/ByvMo2?M`5%4s7$%+m;{IgFxMAm +p.cs +b | +sاk +E9W͊8'Nʯ?VŌi[/%S@AZxEMm&yp,077zc/Be5C"Pk%O===CӮYfn`[26n4!5-]R;34`w*`~s5} ~ IVt[;\$[bVǢO3ܧRYT TYЯ43 &;TMI9ǹ-*`[ Zoh@{wXlw@6hw.sgKmZ{;vj˗zeOcCNf/;I?- +qp5z_`v[w7 +AGF&ݍjZ<8_{嬤3X'CCN; x˩WPo +q`zg,VQA;x?xDȸV>tG׾;C"nЙg`/c{qIٿb<`{gGƒvp?lTݨ[׃և-Z➹g_ o^p yz­Ko_'.;^{;=Ғɤ Q~|Kn^p9[q,soyߋ^Ż.-<~/_GؿPsxś/8}ƩO~|={-g\^.<;07v+?pً7`;:Mga2p1BAl -`{<|QkH8}DX! +Q•VJX3(KVnuMgsʔ/7oy _0w<?K?x]4ޒ?; + ]Oa+|rz l/8: l`;Eh=f* + <02JhOh#-R!zu.@_8yNGɧ?R"@B Q,whViW;\++%l!dŪ6c7 F3d0L7b[^o{5ť-)vMI&w6zd#(/MZҿnDwaLz0iu~ݠJmu?+Vɟy;KY7U?j&z6v>n؈ݪ(b5e4moH1٢ެڤ]-LZ PAᡂ#(G#͌Z\ZןiߤcS767GlDnтآ޿f~>ö}5Q{Nu=!ԡw#I{OGtGt;شg`TO" 40Ce]!19䵫̆ߛG^0B;Z4MgA1;{Y^gzgR]'mؔi2 6 h^o, FzGPG7 / tzM5 +;g|ؚgf&uV{`h +Lަ(ʊፎ<++G4zDC|zʎ~}[2sw?tFz6W$^ : +/ ,eސX;[z43ȓej̃W*P[a*uL.Cd!@00Z{,=QUyG~iR"XkzC?K`\[P< maƷDҾWڬ[[Ϭ~Xs5&jԈzBi`$̹K޼rW7z*x~n9s-*:OB"bh͔0y`R+3NO3M%#)bmSeKGjk-j,qjRz~\augݵ/UQzVPjsBn=/"kh/kmsM{CW;T' : ;^ŤnرӿzSɁ5TUpJ԰'2 +zBolSfz.0hpsKW]q߹g޳ n=uç_ߒumKNk[e~3oz~3G\ ⻫7߼'q=.[!}p1&䖄L >I[;w^=XuDدR7PW=v%050 9؛b-VJkđCGtA]`ͧ8|fd.?3_ knzQɓʟ<-߶=wʧ a-,4ž +(‰̌ݮ y;Mj l VUȗfC ך&K,Q`-Pu"՛>xY ]3r ~h @P^#%Jg|\U]yo:?9WwUrc {pV> H0+mHF7167bSOܝ;]h?2M%ܺ_xJЅC ؓ`Vn )![͡iݩ~F-Ffm{w>:$zl^__2 +U/O1lmf$%w''Yv%{m+}GEE@<~Rh1*xTp9EFi΢obN<}eœL]D q}geN2=heh1ylDV& +@kBYcU ጌdg\Qsm]X&KU+1:\@\Ƒk'&{O{ +vڐ]M~ qPx VQTɌU_ɁΘm:pJinHHɵ$eR3vi[ ԚvaZus@{ΚZLJkg0SIJF\=x .8wp@\m- O 2W<*$VH[)#ȸr72AB ŠřH(Ȍ]}C=c[6j)ͺP&eh֤w!q[͗ٿ~8W_WN)d[S`R33 jLB:JDgdc$k254j5wyҗuCN:'򳉋s? ;H/\C:73 B\?jܨ kp8= +)I̎knn>4=hwf7UjENڦV~HpmG@}~\Q Z/s $b=/'2!Qk,+ʮ6EHޫ{׈M}Y5M{2{?pbݡy=_'43 3=?)hc5JiIn e*]pU WeYUZꞈl+G pWIn\2L<['rBb.lz +ٳ[֪R)|CWr:gWgŭ9W^F +ϟ_x(fדwM)6p8AIP }GUӲVZ!` +wf3pr _gfΚy, oqE}6N^ꌃ']@I:,~OYb՘އ+rc:ٍ#,{jg ?]27Ucaylg}|b$~ Bv"ve5 QY-nD{u#= u+!)-ckי4'%''נh?g [,a$ \pׇKjdWH +,'"aPx5bW%CR8+\'HrWDr #م 3Ł2|}{ְ-P.Jn ]X_K=䂛.؊5yTJ^H 䟐<"OIR._4* 9D`bދ\BA%u: ÇNBqt#3;D#KUܵv+럋0pi(5ڱOZ+&w:-4ެS>!M/xH)<(pP syI}t\3k@%`+j$U^Mc&8pER:ȪZ_^yCaM}B&>)IC2/xgWw^#נb4tZit~Mc*ZcUATk{ 3uWlf IGP `D5ة=u[YDq!\ZU` 8>guN(9m\Fi[;5\ τv4Փ}㎊/\ ,]@muǑ~»#c`^^t;B6lRMC״&*)Rk@\=%x jb:*uJk FL YQUg͝=J O,'*?%> (˅XaFשDBF&rd7Gdw5m-9vV&l)3I<_?&PkLTgTGnh\5$eW/Q8q}@ii4VrD4Y?m +p2wʙ"(WהURZ +p5* +AJojpElCܫ'w4=c0B5zyUK}3t#%+]Mq]@h%ZRᚭ3 WԦӖF]Q!,z=ԪGX\#6a{O ژP&kebljed*w7n|Bd%~MGҤ&'D}㏒ q:AlXJm{D AWҴi츾>ȵJF(n0>PY/;^=eTNt]yKVqKL_&V;pה~|薠*M|ٖ5oj"N;O$WoVW׶RZb^LR77>xT5{Jnts BĚ ^C\gƱRS5Cf;q5ja 3q\1;ȮfP4u BZM%YZof/3A]\+1\5(f XvU콡ŖjfeQOJq\=;p Y\A% ]qNw/}=H:s~򧯉&H$kn~|- hح0Fmlgi++AI# \4(1VM2ț*!P#Պ83f_J*4TNXR7qUC\{DE2ST6*Qs˿]{jHFJӌynSH H`5v):G^ju-H^:P ,Z!^dζ "Vo*2so]8; zfyt?qnie_) \Otƕ*6hƜpA*z[q?$IY0 +M,պJd᪃vLXHvgX4i\z 09'fcژ{ ؁uemTnnaw(RŹYΤ|V< j>{.C)`M!iPxEdWT,qiQR8t:q'UvuSǂ#9Hx$ |4T~~!\>  ׂ3;C620][!oˍ+a;+M9LtP|zCT,tMlt`ɨu̪܅phތokk 쇋@JtIR4+ ?'8ug7<)o./ῃ+frrKgY562ᚑDdC.ue~waha[a: +[M!{FVXG-|Cjӽ‹Þޟ3Ұ;zÕ ؛Yikl[^Aa;SwZܾŌǎ6Xv]oj@v}Y@|=-Ƌ-Y$XA/_DP"$\ŵ5*']QAv $2L.#+N,$3v-`:z B{L fr7vi Gݝumˢd< [ӟ2VS;z><.(9+T*PYSYpeW{Jplh.R>cUB1=>&~K~qR^/ׇ +z \߱ + !\ 2MfV[,^TNˑWC\ͣPNqfK  q_J ~KGVU \ΌH~P (1{O؆nNxiy<ݭg5AIUX(b |8>abO?+qڴj;X{Us\"VJ&qIdɵt5ټc/myUW.W1\wJZD35;$7  +]Z1(>&O[SCFUɻ5q TɊ<WB$Gj  e d-ӽ8rjHe~pZh/f>.Waj-檱b +p=u*G \\ql쎤^.enY來="Vά"Qݗpm0vk~ouc PGl]G]zN +jݷ >Wu]o]76d*2w+[~#sOSЮ A4RxVyiS?ILH'.qΪ}LI[L" *\'8'zTܗVWu ^>|lǵLͳ#HS^JVyNG?/R (EVѢ@Уj=bG@W+WKޠ~(w~ X܉2q 'Fc=@^\} Wʀ5FZzXf;.kcNVE' 8v ;ב]1\wDu'+EitcA=|: rEWWǜq]+/ k2eg m 0?/?&9()Y# k_NneĖl]'bYsiᆽZFw}FY=&܅ΌztbaZ\-1*Unk"#Amy/94M X2Nv,m@kFh/ׯu*8ox qJ|oKNuNC˗>(H{zljlF qt\Q现$}OOS8DWX+e%׾bܡ#GNT +-RJVSa +ݩ6vj+27!{szYn?w&f}BWWX2?ye>Ĺa1pw=js| ViA +C:IEyI3!Ww2p%vupᙳW?J\F9A=fk蛸FrvܼPG у2ӿOVq >vKo6 :д0j"Bho%sfzUdõ !5Q%;u +d;BRs0#)Zg6듷_U5*>jP`7y.-"\|s\pS%$&_/Kzuo1JmnFP~ %"AH $X˯ +Z;39j5AEY!mfLR09&{I.8:0?O=Ǯi|`'SB mzw|O+߃ ]\D8+En{.lXF[?JǏ-șe& x ߕrZqTb=2x\ԏ1\;qG-x U;F!ܼ]0+hTkzq[C*7\Idrf&uG?X&2J9:g+Hs]Gt ׄVZ2JZd39؛](LHJCPɾuwO??_u惱7[ +*Vpr%%=;Sl{EWqXm=6 Qq}[Ap$8 %%`CmYm?Q4MA߇+  _LuA UO sWhaQ%IS"|#ya痀oz3AM?*O<<|l'$]tyU:Z.uNeb6 W/'M$B W9wQKB+EGi+=DHEW%An15 +ރ /0u$ +6Fʖ+z]]2u8WVCV"}3nɇ"N~U.iV낝3"G|pEE'R^?P $N5ܹ7AX49S5s +D|0ffH|`9ms;do}Xkn؆+1 t1"Gaoc=[i@ \/v9w xM0 Y=9(a3DDC:k폮GK/58&`OsO_Vر*U~qAmް}  , c~db^UVyHUq*JZa =+*Q%iRɭLX&µ=~a"ߧA\$b`߰*0xEl0dUƆCv?C{IU c -``(^ ;\Ӂ+Z3g S KUaIlj/>-U 5{3}B \e;u ؛ 0A[h'\ph-#\1bjUر m[^ҥV Wl6O{ƛu}1U'fW k_Ȯ WzT_4ZWs`&nmr842د1veI¤욀vxp׻]d%\J"s ZPM> \v\A%yo*kObĚ݇;Jy:b2 T7h +toz~ ǧ2O>ϝE6\ܬl,œ\\t ]*b+ O({oZvwLȮ&.M ;i5:5n@l`&vbCg" +WG38l|Q7 ܏pAZr s( wlw`|=Qʈi `wNu \*D:=Z8o?ĕ,_[(WӢ@WKC-ulLuaT9guWut?)gܝCg59[[h⯩ ;%eWX ܺ+ꁷ؄&ZI ĉ/HˈD\%8Kv㑈en +I0 +zT~? A@]ǖ CGa x|J(֞\&[{ZrR*S^ߛV٭5(̥tR2Q溗3x W/¸zsJ]8B퓊mE_?}EIC< E~N&q^&ltY,=trIE}"K3XϜ-B6&6-~ۖ`&쭕Ժ'5=+dҍVL \-5"\RM$ڧhX𮽁'10lUR*حXA1-#hB -l"+c.M d#.$ZpDj {jt]=OOI׈yxy0b +Pq]CM.cwVݧF/_եnikP?Hi#CVjӹ^^.D´R.^z3H?}|N@,JIn|[iB%,&$nx pbd<v'%,υł.>E?hC +P+7RHM竩w${wgV'yjUX[ͪnCZ TFSVuɛzctq1U@t{qD"Z}ݸ¾uir[40;4;lUרb9uꔏ#DŞo}^H: /MCc9y;QUzTa)"A(7dzLo `ӂ1-Z%e|83/6 +:J3ܵL-}GnC=V#V kuGz&9@IU:^)EFX]mOU ?xdMW.n;54<cKTcn.;-یߦ/>p_ýk[v7~BIh!bJ L55J`mz5wqUŒ-wj3nC=[9>GXZfٿuEj$3ҝ]|iqH}ooظ' +eȓg똢Z :oGTY'9>(OsL(Y@nJ~-8Q +oK?[>aI'~9yaޔESY<%?r%:FS7£.8}![tnQQcvzjJjekIͫ'˩*,L_j{?JyỊ/W*u.k7Q^߀]z0&"p-+j˘v+oܸ~^KTBВzB@:^eR6MbCRYZzˆ0:.>fz4\wSHFZA.EW +R S^7 +f6hҚ|?6UPgbNtD<~cq5Q'hKt9ӱhہsIZy^5(-V^!u{ _&?,(|^塋'ڏ&Nh9:D^cU6t$HpB㡄É#[5*6;xU쳿_욚S]ͼuZIWMzQͅĚ.zᢚk/ٽ&>635 uFBۤrkc2pg_6sUo1o?$r&B͙pkŎ ڏ$oVsEuՑ+QG5G^V,ӊڗ <?JxSFVJl=子_uB死6o]ܵs$xeζs6YyyĹ;mxXU'F Rҡ&1֓?myo nrpOmf{UؾCvh0nqzmb6[MfV rQ߻ n(H n`[ly!]:eA ͛#BZ&- [4`"hv9V!k񛞎2ns2jK2'-J)4*iܖ6_2)$}ꐽњeb};mڌk?xWTw8hªdk)"m vȨ&X"o2>ዧ.([iN'Ueػ(M6ݺCömo2!s0nή4j>nhwܩ;L.Y::naPX +k2u@w6\avzFwtÎwS"m.9y̫]ND j/z䟏?k7/Y`s~M4^ ^v_/si9o?z~*eim~GiS &$;/ Z;ތz]lkZ&77 jAmrTG;՝VY,]=E=;~[uE+ڜ ?ru3]OK/Ys?eg |вs;{u !۟nN>c]}N~~S֚aovMb[;l3)hZZZxh[ma.1r,'vlyEݻ~٤g2/o$g{Iʋ')/?}Zi y}&6o-wy'~Q#PR>~N7e=Jr >$øQě/N~xɟ^pBC޹L|}|(ޗ+!~`v@!H,A{}|>ٳѣo~=J~a3>Hzr% I txK~'_'?ʽy#_Fڂ(x_!ߧw0\ ]~®?{3%|A5lm qRNJR)ѣW7n8~"(//|B7ew+ +;׏0b`AzFy{bz3{{ +q v +:C%v00!g|} |ܨ+Uޏ~ {AX?z^D cu^ +DAߗ>=i> cƌ3fΘ:mf3O|Gii3gpi&h:h3D3<j|h3&M7>x0QAAsN[8ӦO N{jFp0)3'M7n_7r#FבFP9jQF3r>o'N~ ~ì)gL>m*(4#Λ9c 3&_}=W8US`X1:5ʺ9@oܴU4t8F3˙[9`'ZXQD "C:%q +%TtdTlڼ? `ȦM{ 0qF׃8EŃ^q0b<Èz]͖U3l> +gsΝp.҅W.\{"¥[2 cAظgVX- FmtFzm3 +8Lw}qYsjj Θ]._[tZtRlQ ~P]ԱZVqZ=7]<q0z +rų={>E54L@ OwTI nj8z.m۬ʡ,Yx[*hG?/_ +hjasXd`;vF(U #S`(ь,#BA}[z!(Xa9ZR%n;9s] 'X|qݾ{Խ\z[~Ls 6uz'0ͷ5و줎^8 w9Qnܹm;Wz 5`E?Mݜb4!Sai [=o$ڍesX%sش&K\w /_]!,J0A~WY*֪?{? Xu[4v;ಭ +jF,NdTe6 pEڤhm6 +gG'h{Y?Qr㠔 i8Ud%JAݤvV_q][xv{S"lܩ{{E~!e? U6 ۴uz87X]H%@ZS" B! ܠBMj+ݦ~wh9{?4mfFhciј: 6e,o0ɔ Dt' B!b(𵯠RXloT-Т}w|YYf/?o"Di(u`7y^+<ã"Ehn֘:̍wWEڕ$& iַ9t> phdL4dlَ7#gEbVb5P) * +U!3)\)|(^>O.5ש6G_IįH|i0aH~zD(9㬤Ǚwe$\OK<6ie( qG^gųWaNi8"zj߲#<0LE &,4܄彃ThT'Tߌ +Bffkͬ^Q.Z8.]/Xc$Bw4v) ^(ViMdan=srѶ; FQZ(H$XT8SAk^Kq+lIԑ^]sw{*]E-WQR:Ssh!aa  \$`Ch%\Q|KNmxŶSQg%ي>pAB#u,owh`1jT4sJWQi3gŧŭO}#b>:wB:$SyB7$ƚz?jX_V夻+ ؕ`WEa*3dms^)B튤w4'*+rPxkvmls9a>֟qbHՊ ޾(mջvUx,&O U u][/Tb é/tjZч*߾hmjW2 GrSpiW;WHºجegɷޣ}F]FE{^V*\."wN1x|SO׸|5o[-'ω]]L8r:`- ocWص^ mH%RrٙfhT$4 +a߹`A1>J''}\-m`O/1dq*Em'EtѳkQ-|ns=۵{w^H"V)nD]ߓ]i^%nRGu M.{Іs-uk]w\J) L`WfPTm&'Sw@ۚhOJR G˄;^?"&gjmq8(LJ}kA1~#c|F:"jWQ^cdž{eO˝.5z^hsɕ\ -4j$ B] J(VmlKD!QQzP{Kn|QP,[#IKkk +Y"xˮm*2FJT4W+U7\O_ۨ]#괫B[J>s {eCM 6. +._+]Fn[èYBҐ(jcdW/ChA4b~ T`C crrK갪K$$Z9a`0^*q >"kB'3sEg-: Ɲl!߈S7< vRn+0R(Qes~ _rᆊ%Cd7*ÏJS2q0 P%A<``PH6ADw{3| LF=7dz#;6tL%n,h@yֺZFvbW|kO <+9jQ̮62 4*ͫLK5^uڕ>ZF\q5~vmhڀlZ GS͎[woӲ'Ry!_5,POy'SF7y y`!|bJ952+ж?[D( Я0Phòv_$ +%)a. .2\gWe;Wqyǘ?b3gUK* UT?F$Qᾣ#FF/:;^K [##_8]Y YtbIy ov. Shj>YVْuX!T6 =ɔSW4p$Es0ಫɳEX^MN'Fv-;u +NFemo̻0#{>551)>\I@$Q$v`֪e[:V@Zp=xvp HakJN\ +jyb؋tV!t2vS}jIhzS-^GMdsBd+w∋0ZĮZx;ΓW=dsw@!tŎƫw5Ԯ%5%|-vͫxA/<9WG +xڵ.sq>"7oV +JZJjgWRЮd0i&E4+CЮڕNDRBfkW\@ɜ+Ujo1abdrӹ&g{wv a#p2"_2UG*AWk4݆=kUW=V>P-oWreJ&#t +Į}VXp=aL]tU +.<91CEz}=#O.!-*H:բvբ]yD/*yBurVٶJƽ.l;}ֵM|2ZO;bW&+cJق2 }5t0@``'Y^ɝWϡQde_/7&ڟ(1Vv]kXJI ĥCJao?vvUu҉U_pU5_pȊV+ ]ymW8: uժa0@īԮPbz_SZ+8dEs rX]w] Į$4ĮOHu}" s@ `vU1>vݶ +fUZHD.W+ {0SQDO<1P9سR%]l@XU@*yQC>v=p\QGwͯ0Jd@y5etjn3<< ]$v]_DZ|Z&ez|a#|D?suyL5:*_J/PDeG|#G9m; [KFUiJ\=Y<ȍWVI=]dmlZ[%~QFkaٽDA")`ׄ{J%(OpJMv=c,g"eY}T Ui;nK]Ka$!r)3 jw]95[\wuzU!c:!WϦ\{h(|n q9?Wa"v ۲UkX]!ZPɮ5v\( W yp.@JCڌv v \r::Ϫ&Wo&'5ZI{nGq&HK 5`WGBO/mPv=Ef;U+-4R=~h{7ڕ zjGOzyhh@bUi4?~C슳V%-Ljv"ޘU\#GFx7&r ?Bl v ,qUx +NtEava+fR6vDiqQ=Jy˂甴{tc n>O-Jօvu]vU2&ik@*[&Le9o2k_Jr߫%X]O1FvD;$m'b\$XT;]}R+Ada]0s0UA) zNĮdNv=׮^ٙT.:}Z Dz>1ܳ?*NTNIGAU]!Y]W¶, To!\!Fu$_]k5ZvTܕv@RXW_ouFM8ɶk3H[bx]@axOmy4).z#y{]9-uIz'MTbnh0]v=Hy B$ЮS`f G +Uvr#V]U +v+@/FnObsVsp:L߮:!v-3\vve]E0jܹ%ʝ F|32kLL nfg uehWBӮ4TMj;o2d\u + +6Q9]PP +r5v`1d5/N?JD>ԋ)R" `>c'ҧصeW]nש<ᢅNy\@an*9>OWQW|p>c"|Fx-R$EӪfk,vr\% +҃Y)rA#M뉋5g^58]THPW@`x#~S)+Ɩyek,> +{5eX (B}ɮ%=\cA+Rv=]& kVsq 2ʞ])@l#GΛnT+Zv6/ʝvˮ`cW[y#cU/{.Ý{qzG|HMJ0>/іxI{2*OΫīG:ho:.Kk(v13YkNk琱C[ol 9fi`WɣgRO%S)Ԕ jWvE;/'Q1~c䔗y@EXî݉ג>!:'/&_ +^D.b)88_8d.u +Keu ,@vu&`Y +*PJpˮ!ԒsѮNx4 +v'G`Ʈ]|ü*\wժv߮t)îҰ`X $ +pLhFEǒKȭ-gɢ|t(~#};8,$aŃyβ/U͛b-ڵHG + jhWB0sU5-v!v=e_ +vvr:d>/*9Jx%qC\;[0 H kג(m?/C$U2HG8̛Z"m0'z/ҤG_zHdzBj@ J2LuҘS*4>d\ 8|En3@H\/ں~Oe߶ZXJ@"Ӓ]FĮ:0o]%.Y4jH JyiZ6 + y]ubUea-?ϣvFS*Z=ԮS'/]])ڕ<Ao *a&jW`W{\\W>:J< Ӟw۵NPవ< -ھm/YЮ"g\]'kzj:85`]E:)di[vhoz{"D%5+UPnFȹEZl޲]LjjZ @W=zI{4]e0wvQgr'[.Lǘ5}(}DτCBng-z't8HFz6;a3V"x✗IzYz"xy{V4W^kOXWnS]`Wrb1\0Ͻ"X{o {݃=r!î&+h=z֤1"rD[ڵuu%αZ} vS72!2z8|xUN.~NrW^{ Pyz/̜/Jv-ƇAi6-T`ouh#W+v/8YEĻ~~knL],މ g~+ 54j yܻ/sȻ{/;NYoTD'`WoqܸBtr^gW:բvݳ'3]n51 ye^vH£!?cMjpEw1.`fidu=>ԝOl_"5%S}Kfus0vݲe B~@?TdtdhbyBŖG ԮGi]5d?v ۲C]E|܎=[>tH P?@Hba*=2|~};*gΉ)WRPؕvp)q.-yE5G1}oCjqOVbųVȖmj ZjI/NNJDu(=+]J}/F临FWnqgYv.6?pưX*dRRm4Q1Xem$!krE65ĜQet*2.tW;Q|&ZS#hXkPBo*n"1#MA {2O*zS΃3Ř ~5 V4=JO + RoJqf\VH-j~}}1:m/^[o!5VJi,*bk@+E"\[oJ*%e|U k۷iӾ[*RX"cls-5oӼ~O=-}պ!-4yMWuഫT(*++E|2j>y?=pqA93)~ +%7@7F^ݞW u,"|!z-atmm8+𾏡zې[v&S?:Üsaމg'-8xМS Z~tc qlLaV5Ya7[OF uNdo FH "%8BRFjiPWhl$XU65#-˷>ܾs/-\@JV2Jva[HWj%}D_-5HE.\a=ASM,( +QRHZALu]j$l ڡuf1Vʐ!n`5:,3:lBAa:QQ|?XNjkP \SW.?XhQCM&[K_,oeyː[mC'tw[߽sX{-=fG72̎w&[x)VPa5 g{l=wwZeM] +{YzwvGw7ow[mnMX=TT;3` 19z=̎Uge_64`jfYhCŲ *3H8 ~n;,vdL#[Y٢lVsc~#Q}D*G8f2MV"G7;DM0lM&g3o-vG_0F@[D$G0E +U<@6 >nvȘ,&S̑V\נ1tL BZ"곛p# I">KW>oMpSmEzVuMq5VA4 +& mZ,a~gyM+XGZtFg?2w;@[j݂ߴw؈TX@m /#'ty6Q^ڡ33a,gfjoZj!mmrSfZsX d"7nm▎.:Ƣٺ9jFD4P>Ђ6Z'WyED8[_lYޡՋV[(-J-bŦfD_v,5z3s'mPզ U7a giVC,:կWDӬFD((uuƮY_)BFgBaoCW~L@\$rjS7p + o K#ӿ0eΩbWNH쬪쬒IEqWʗ.wȲe}7/#&;4#+?=3/-**= c0槥楥奧efdfUffg?x\|Jٯ `ٲW2oIK*~<3YFtԓ7OrS7 TZjn7nˌҬʬ̢I.._ >o_ܼ*-23,=>>^^C||3C_a~ 7>>O/ ?S_3wW_C~ K|7+ 7DE>{ + .?n`]/}|~; +M`K/"OϿ OtL 0O||>@A 1_R)w@a  8oǡ?5x@M F L<5xO_hO7mƬSb~66}j⿩.?3MӔ&N~O&@ 9 >7;EO>]14CS!XX/` f\hєiS?- Fa 0x* 3Ak_~gN?O6Bn|?'؀`R8vܔ/oh4дA6~-.3}MǎWamO>~I3'O 2m;P:$ 4sʔ@?|sJ'/sn KZ,~հ6t7:/-mQ.s3Q1A"pcD\K84:cV5SVٚոqcX@ޠ'zƨgygqXx"Bg\Nk \PVْܲ堗Ua uRMqZsM k2A\=aYh lK)-M} ȸ+Wnk ] 3tzFo`G#G X capK\VcY8C,_1/I"ӓ@ 4\JzMf` FzbqƤӛ;Ҋ?w_KB޼QHhOl#Xz~ D+l,0xy#P#ڻ'cj-%L19}ě +w& eL膽0cwc + +`u`Mv +?P'R2d[n:n W6?I ×zT>IetaDb;D{3řl=ݦUuưmጶv6B -c A&h& #:Ţht `"}/fVS'5u?0pr+ fNYWV,R@Żrv@1r6d! .@kd@d`bP0{ffѦ9S7 }Ћ:i߾~+V3%&g Ȉh'D&A`,2)OX`rCJD4QYM]]ã3&ujv[#a#}V5MNH2D aI(xT pJ͍msk{⶙8Z ay]Wz{=HoS%JQbk26hM9lx_[&Be + -JDaԃЇu X'w2XJ57Nב`be. +vYYĤ6!Y 6H/%fDH$/|-*TN w;~^Wټhv P,F"sʊhkqZUoo{uJQ팩]gmu1maih*-o4ò2Ӥ.ПB{$@@Md¹+!{7F֣j<(9i3i#N>tHY &{ڤ4uZT +Fbʚbȹ`E @" ~_]/ =[ũfo9|&0pXDTg6DCT"]lh3io + +k6ɚL"5feA +)I ] +;I 'PzȮ; &[C; xI*uK c_H%pQ/!ؙ2ëB}AS)5Su +z~쵀Śz.Kia<,'0eR +oU)1(43eR%#U+:%a0@x+0 j)\m,dFT(45 YKJ?-,N-zY֘_UZm,'> JOeps48YE.zcU^? +mtamB]Tu6Ťф"$Pb/ %JNDx 8Eǜe:ֆB$'$"BLu#,ᯒDbkOH"9zn~^ \Y5WXƾ׿?x9y=7P&@@>TJ {gz3@fMS,*A5|a9 cqh啻2^|ATj0N6ӫ&>F&& T_ۮa^Zg'#\V) ^LKIcͬ>am|hM \_]vmaӫ +Fu{Ut{s5:A`*̮ {ɺ8=wcFټE6oX&XXMy/ӤkYRޟkW>`roJ@k*/]WSA@P6{JifUH&Åɇ>.zȔ#柘_O-3hL 87ȇ7)h*ZJwScgNjRC.:po@@Lw3k֓@iΒ:Vxصa6O +jmvWDW|8ڕA*aq!^-`Z!;M%Rjqas@BjQ8k ڕz`=>UK сvźZ_ԓxB=5 OjcWgqVJ϶*b-Db3I^5ǼS^pZ?]صxk42H89ot@pԒ|!aKPѱ]Ikvj w||UӦ0zLiw󢍸aZWj`Hr(gjﵫO>o8sUvN; BS;Њ퍗nw]5 +*pE0Mz @v5ħ?|}̤* ^][qyG'}p㎥"& vec׾ J0!ЕEUDw^ztgIc$дK` +$EbwRu+Y@5xOckWB TӼj&u`-8Iw @>eSoĮS \H>S~;Ԯ)J1/Byz_|D[3U:r\0Ug/Y熽;MeJ52P^oW@ EkGg4+h+*}pөM,.*Wﻃ3*vnn(6T-@5KmZ[qsBpS }\{n]*טe8n(7S}G=eh UԠ_GzoKq%5w.EG|ܣ;}V"*#F\>Q.zW8_aqu& GGj?Т#ldvB-ȳž7i; +Bx5n0/]~{n.\QZZqE={%*H9y+&а S{꼊hBݳfpBSC!NzW&,5>3]aߑ_SɸoOFdV 0ؖOh.{fȸ$\In(U&n@YUF|r7pH` ;P;A_IO_Wʪ+~W] ?d88C;cB]F\*1Bp/'+RH g?4byܠgnMpk@{v2_hpE=5 +kr4TVVgZZKOVϩV +`Rp=\6< \(f;H^k$&`'8z䯽xIpH.*53 Q AMӮ%eSU4z 䗚)2 nj :Urv [jYmQMFh"/A3%v4i04M:׽GG>C;Fi b& W7z4FGn[O[ꐭ&bSk*6/Qpe˸v*ήB^9(*DBTj}j5+~y:~2\Jz仧Srq/WRM"> @]U%ڽzy[Rq)VV K|>,jr +*uN7-?Xܘ<Hnϔ WSwNjS;AE~ޣ}I;H^k'/f?: +Ym1r 5MmZ{6o$kj\j,=Ⱥ3WRq92*ŵJ'F={M:^@5U& +'v}w#[" U:kh02M Zu劏i3@ i{TѦ ~2m>JV,&")oZ*TfB No4p뒧u \X%Ve!j+Hhd`Dp--٭O4B4$E%$o&ɵJN1GtZ\M\nHpu6M,Жpj {_OpPv4s wŞ#XC;);Ӏ#O!IGd\a(q;W>K錒MNr VB5䶹U*gB7w3U_3 9~דPcŸ㦿Sr5/sVtO(2^׊s_]kl2əidVW7)Ĝ)iA>`t>)#?p# ŵZ"n:LzV9T9+&Wp ڶ@^O6i Yɸ6ê6]@f[W}4ţ:`R5!Zh]Q\Q+x י1k*@ihG>WݽID#gBE/VH٫&oA mxAX7.&o6{4z}*-Be֧[BJi 1'բKT`/bhQf1MŤy$y*k+UMh5Km;1W+Ec,P'=/e1Edл,視V K0mΙ0xHeվ4|Lpb$mr!L\&!ܻ̀ +Xu!n*\gz%|m[ }%'=wAHdy6b6wŅIt߁#PhMQ yF5AQ,O_"z/h٫F`U㒥V4t\3WX͋7,nࢸXYxzČ´"3?9m)0†oOF+ǎ?ΟFѡ5 _O䗂rN_FƸX% 2~X +EqtK#,~l>q"kM6UhV %\&z)+hŎY/RcoZ=}K7BfLTEvgў1 Rb: Uǔ z}FTbe[`ה$+r\Uw:5D! 8>%yC5txdu+ЯffAY2;- !WkEQߙw'Bxh٫mOD} I[@Àk^k +ZS5pZ]\٘٢Q7<0ӚˬZi)iCEIv]3J`eᲅpMx?yU}Rh0X*VgW+ 5%]y?g#t{o !`WbT7_Ou"DIqLͩRPqXp +H.T\Sd΂hC[FR\s7BEm=~R(}ߠ1hjV~Vyu]Mb(B +ECh\Ofd bBbGV׺]us;P6׫甞TgS )&q=~?5w >F}ɸa~Cp;ZX ѣl86ءj՛~b͵Ӱ*2^m-0q&lɟbA̴O5 +pŁ=U@{6ήkn]pUy@??bVqUgW"{#׮k(Bf Ì +}{)Ayv]ׅtBh25ݧZ~l3J^xW}ʪ Q6ڕq NN~p-\-iUb4Ul]#|$]w?z&3ɅXZ(#v}<Л/׻ 4ʯY5X)->0,.[ !Fq*0E&A} | d1jn.fTܓz͆1.8‡Nք_ɑ0^&k1ciߠIrK]. ^2w6 F\G։@gco/G -BN(*id3,Vqtf!hV~;*l]Տm7,bG8R)׫zq`˯'hي;iTw''S5ݏDN yoUF/IJ!b?;z〶f&6 ~H +-ڡ&Xd|lFb8c>0F>OpnoS>3_z않sʳ_̞=YeY˲s0z>iKddܻdYΈ/0HXޡNF@ŷ5/B/V͖ Ue-B٩*9#X2&37x'⋆?͟⻷=6'HJw{p({/G3('/3NMľ;a?wOG:5]N =lD*d{6w2ozUcs P[ +gba'oaupNl[ 0~6Y]_nWo-8nr>zQC)v<1]Κmu9.PN|悽pp'3] hvc8ٝG e4r^R ?_cs:a=tֿ<:Ϝf@<U :3Y~^wݬo< #U.!zr(4W<qJ +F|h  cPx{7OoƼa~ԋNkh;?KiÃ1aC-Tn0 E?9%`Fzn R, x$#}1 L.+!Ƴ( H<ĽkWPr43sk8)CXE( {TBݺ\P=_hƱV4=Ra1~e9 GiWzc7ODXODx0' e\0{'T>XqkHD> +endobj +310 0 obj +<< +/S /GoTo +/D (chapter.15) +>> +endobj +311 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F24 457 0 R +/F48 463 0 R +/F27 458 0 R +/F19 454 0 R +>> +endobj +312 0 obj +<< +/Length 29473 +/Type /XObject +/Subtype /Image +/Width 112 +/Height 118 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 464 0 R +/Filter /FlateDecode +>> +stream +xڼu|g-mRҤI!i'f˒mYAf 33m04̌vbfNi{{9=s禿ϛW=΃a+"w>[S|l}34a9zRk 2OIziRy}>OVn+6+>:诃ǂ#0X⬅aEurبqxOdq;.ZUl}LuPjtwqkj D5Y%Y%I3Q9A!V:-,^-0mJaT@Ʒ)76FKi2t_7M面JRn x18doM؃'q@ĕ^ɾ}qSv5O2wI?В kU#q[^|C[@MmypGGl99 ֳeKg7$Mn3xK⩥OjG*K$~6#,_zXvXuRTTTҬҬD.J_hmnmvMv5[XU,krylkT~h[ZPKO#иkJEEhֱ5kY + z K:\ ZPܨRXWR 7 "[Lٔ0bZR֙8giW4{ eߨof M*A%]E+VAhr J:"7̕&uJҕa/E +s ]6ipcptX1[ǢZw_3 +1.BN!\9Wo9UzN%U,ױ˴R-:Teh‹"5H(R:*Uj%,.R,h]rx_o(:lݫmrQڈ5XB^b(J&*<9-WNˑs\=WNϑёrf"L*6tyL8>w%+bKuE{tEuud)pP$cdIY3% jʔP2Qr9c9BGev}kl7caB-As>%>[d]ȊAK:xʠn\Ql?{C:lr2?D>]kU!mt ֻ}kCoX6`/GlߧKA:?C~rY!Kyzl)rE3xa觋HV/xn V 9Ca||>Y3ϼx7x,sװe_X8a +7@ OMxg#.83L +V,Pp_K/9Sqpp"3#:Q`1ȗpUƏpP0*ŹpS 8<~ +9)"6D\ +7c假Vt =r5kVXQ~א !m_ڿ<vU෫ FNaK. 8<+r;w>79|w +}.}/;>߬?*4,vsx\^z_oޥ޻zZk9w +=˽eڳ{7"/zY%x}-{omqg"ѥ+{ O|ӵ9[St ? h;BE9{>gߋv!_B5s"kxD֎wؓ{)Y;/;`DN4u -,C{Z7[6d 2z툶 Q znۊ]I%wZ- -6Aϋ]`vR-IQUi=v[|%dNj3%S:,)R;,֗YZ&]B:IآOj3[MS\۠,u̔ofv/rZKWg1㇈b-XK B}x]jb‹ E,EMo̍zfr_SM촖- 1rEe]ZB)ji2̱Ͷf;=rhrQ Kt/pM^V>dbЦt(uXnrS V>RaH -F]k5FVjcj4n͗nLF[,`z5r#H\Jh6-sƌi4v[{Oޡe?Y+o:Eٿv_{ݙxÞk O"eDމdжqJuٓ:m+Jh5[j0D[vM* sK3f>e~i<ײc%t:- Į ~v;6 V@`7F4r}Z_ޱB6~垶9Fƭ3ƠBV"JbPs5I-Z:ɉ0sL&3+cPi;x"=i_!}d=l>mI@Am%uZۍqzn=DEcZiwnzH"=I\{"k A6㯔͞cwYG] \n9[I¯ޙ$AzxPUK0E;̅,;5{)߯EϥK~\~~b-VaO\F^+5)kUZN2H&T֩I +)=&R|-?sZQBDr-8OlN>.e`i@*=gy! vMwNnmR-Ƅ6=@-ZR\=niPmZSr5ۖmL"eOR>)pmXlU! &2L -F^Y @0TRMXEIrZ2UWгGyHϛ_}o]NŚShr_SrĮ5 ]TiBI@2LIOlqrgB׌}8uv\DB?Kin~FBxCEx37yz0-̩ݦvC\!nf~+S՘R{^k#j-u L!`bG`:I5%ݜnJl3$5p_&LIoagZEQ|ik_:Wf Fiݦ_F+++; 7,ΌxjK"$q]\WpT\O^;By2gl)p;mğf\s>m OH:a~w+I,=hd׉iU*MT*RxF +j\his"e P*x4uL)ni&Ȥ`ROSjsL;Ek'AHAV$t 4uY].sZmcjBҴW8HXT><1xqruJ[O OPs;7 BXFnz龦찑$In3)Lf(=OBi`_O^%0wAx6MBMt-O}A;^m齈qfgee33wSzt^IJdb'B0B2JBB܍.h"$v[-Hp2 ӷO#U |K$P ( +'4yF;t>md9u <-;&$>.>s[X&7ҌXBU +݊_ؒ _)|XԹnGP&XFgb'BH9´4P5"1g[vX2w[L(;cpr P)KzrkcaR?f9 <"-O} 9MХZZ,HnTE6H 6͊䣃zvpt2ȉ- LnYE N `9x~,0 08c WE`q_d@g <]=V^Dh&@Il52"Ք\obs| K +1LJ|HUP9EPV6E+ȹ v\`Q-&Q4[ޣ}4{!v/g@)R=#XnaÁ) L6d}`Szg.yBeמݞ)v[@;uB`Iv6BK+PC sSB)|s\N%ڰ5Q,55ɀ4P^­Aҍ`qNGJMmT6D(T1հ!g+|d+!_.Jf`uLmc30D̄fٔbLnRoQ%{_mv]:r =GJ͖s\UHtszЊpI@x2]O]cHDąhy| :`5 r V蠡-X aSmh}STIجIhT2=f_U3e MdCe!א!f%j?3_V΁~3hmƑtzAvhS{,=&aj1ːa785Z6"5%OM7GUAIR(քI-"vǮY+E^CݒԁXfbna M\5 B$Rf)²|<$4qPʘ!"Udhj &PB`D*z]l&V_ժyժmZU] +A_H 0RS<jȞȳ&kƄVCB] #C\6Yֳ+tQ Ԥ\Uh +/C ^zIHDUA/ӀXeшS*GHҋt|-9WKхfk35!L9243P%^M"zR +X9Y%7rM8f +}b* Re)C2,"0`*RiёFR=zt cؕ<4RIE(ׇ?OdˠG%/%H)"HR(\{ wn/<{Ǐ%1PA52"p7n猙3ֶ2!<ݲ*#VJ#TJ(vHIj8 2$KTf(,Yx9{a/yQ+Yź"Ն40 R +DShJp($)[S LêHS|R +#bܱ5aWs sF]X㏒2%,)&%#gJ!eH}PP&Dv[%׿|ϐ١J~7aJՂ33t&Ds'̭4xBU'zZ 2 %_F‡+NO(R~R?'“lJ<Ő+J8k?&zkdKwoܘo%m;hǃk79za{vttvwwo汫l:z< GN>hM$yȟ?Ϭu<_b0٭m.#SAO-3YWXǒz%H|Ry'%^I@O `#3cq<w lȕ|_ +5]C_m$J_1Ly-Y>tiz/5lkg+/x ?ToїP-Y.ԍl]*J' W񈿇R.G晱x,8 6rR%83) ip +087΂w'B߸#=9D"-,= +~r:ͩrtpρxxg,;;̙;oʕ~Lü +*k . ;y$<A9yozt.ܲhS]6ŦE &T_ o{Z:eo^{Gb\^{4P0iΒ%L#Sd +D!Ȉ(/$QH]a$2GR)\Nh-_/7Ko6jP* 1*}l<*xi@c**N2\ɭpt1`]eWh:v1*hQ޴oҘg"ŗ/o߲򪊪ښںzD uk]m}Wu55uuJ//8֭p5'Nbn` +-GG2ryzʙy:X٧hڴ:ckas}J,]eY*reH`-W_{31P[ֹs[GgONޮήƎfo@Iq, J2!yP,8M"8MW4()'"9Uʮ''ݽ`)yf10I(}|Fb|5MSJ6/[3CC[;:{ۺz[wA GuO {{D~A' + "QMnҳSEԙZsdU蘅ʨREjUܝLinA},o&R$gҰt)I ˒ec*wh=cT;k=4  7'yz֓+Qzr擋}w_f ;Z6;i9z+^}ztʃsW^[%$D^\݇Oo?쇳\ |cX/|rɅ/\rtwܕGN;qc皵-ֵ^U^u'g.?:}.]zA}iY cv =WY%Պ>Giku.D;ti?{Y?\_T> Ïl}RkLl}2bj _ㄭ3ۣӣ!SߨEnkťpmJ.\#쵖~}?'8 +~ScJf *3m:t]M#TY*Eh",kD +r8L(Vbjz5֥ ) O}xXyo^&8eR';_+f&FɼF(^7Cc(ONqʩ﮾L;j6%w<:uљ5O5̙g!N9Et9Eĝzs17/>~0lz8b~8bAai\ei#O `PJ%~Ol}6fӧ/9.c' gkACCg#7x4jV²:U~}{ (97yo!2k`zn.cUd <3ޱC\)9 z^V]ż&ϓ<|.?x?j Wв\b돿1)w~զ[]_=@l<-84Ey"xjPêI`HA +z4d}f/qZ mcpNuL9my7Z <x2srgh\mdݹgY-6zEoi`yoY*4 + +ut2@ʑQL)ۍL5] 3_+w_T|ϞwwϦ]{(?hvXKߘ]n@yOːŠZt)e;u%?gmXl S5ɳƽ~>ӝ~ý~! isdjVpn ][;pS~o{<ü*%Z +B)V+Bca˫yoN֟U繫Êq$Ah4/6$MmOlyjƌDc΄s^U\%Ϝ?|1 Q(O0W0A{ xzU YsE7L>!}ONfSpd,\M\vo9q[`EZU|*V[.Q0reA#"H|ĩ˱D`; !ڞI@Dl{8d<{QӧC?Npnޛ4;`~dq#!qŠJ)ˀqkߘ(3WohtZoO+<337~4hj1\utfC9OUbGVH/\{:9mvەa~ߠkj`,_Ar8(Ug!y٫DNd)ՋLj}*AНgYQo8H|-@x7=I䙕9 7,pdsZn=ՔT_n'l=PuGU]}Da3[}[OLI8x')GUWȩ#S:&Yw$ķO?{_.;ԏ&5i5 uZ^/K\O" X ռ7D㋌eOW$ev,?w8qlϷXNޙ:mo"f O 3' #aHke>ĂHDpȴPzY5'߀/yjm<B>D &Rs* +RèQ+[ߕ vG7P^p{&罁g9ʓߠVq +P| e $uďY7PM/ +|U'AD%3ٖ]G¾\UkO.u==ӧ~s/>G:^zӻ}{ӈ4B|{ꗚ"OF'u,wwӧU7pCG}c1ugGvόo9^RVX:,֬ RE!d> +z"*2z9nbŒ:5k7bt1"Yx"񇼸W=L򡗾9MWzQĿy̕md +Hv!ǡ?"O'ēD:}&Wn= _x*"a039<^},(x {l+__CyBeh#"a&ӂDl1ۜ0oLa=|bvKS7o᙭.m`%Z] <*}LWUcj5?:/VnSe>#RGU ug=[My4O\dr~&eѹΟ{Kg{fSSAtz +,rmxzv3a`W)7؟!Wh ++}v, S3sf{@QŠS',ۋ@Cg3C-?{S&yK>\Oi9ź P^dkW<ɡB{h6/y9yutMH!R!ӧ;uۆHOK]/5HsoOx~!Tafdǟ_Qo#FClX \}LF'zYs%'Ms%KQ HeȘ92HJS3@QZ-!15 ;x] s{ջ7o.e(Q}B-{ē\0G+quґ+7 "y=]tbSOgڍzX /J2: 9B0Xh8,uLX/y7ReOrbR&sx ~(W!<}|+vYd\ƹCW{x||^g -IqgCW݄x"|zF`O+L̵3F\>c!4 4@ᬎSWG.SY#<9դ!)CRFCG()AIɣYmc_\6˶=x'+Cy'}o;Sӫ|u>*'\҅YJUx I#äDD0'W\Ьyx+W]>ub[ Q#v`P _05CS%Ӟ/x"3L{'Kȣ7y?}} iwNM?furSFԹ@gvr|nwLd)u*n +>oF`!V@&^Q-On2!R'Y(g<<ԯGaNTӤj?>uUwO:WG>vֽc +UBWMXx߿!֎#'<?=>>xnwSxg0Dg-]NL~b]~_yLFҶ<6J VŖ[XȒ-q~Ї'w}f[O{ oJS'z재ן=]{D`@/֚Uf[iEj:R??Gaѹcy͚=çgOyTŏŠ7ZΠF?|w积ٻ[4Lx񢀧ͤ' vwΰ-d j AӭkWw^;qs N#N99GsN{N9װʹGomǵ{H]kY9ʒ-Jd 0darH(B9O`r }[wN7xW\jZ3M;gݓ^0K3i(1Lgx3Rb@c+^ }Lm/CCׁVLp Lqd׸B#0`E5)٭19Q'y߮ +s~VԴuڃo|_ }0@0Hs߆Ǝ.ƽϯ^wܥgΝ=wgϞ?}gϜ>sԙg.x^)>X~@ B7O8R0X)=z޳9غqYohǝ5; + _ eG텮O;[&:Gdt-*8ՃQC/TdSf ɩR O13V TlДR24=tW jʫwO=j?K+qwoL;PF'^Sie߭ q 'C܇,}ww# +Z_=j]5UwfR D.j7&rAS.))VTkcWyoy-v _8axmk՟x!#Ps Pi*P +HdJ(gĪKDJ})PJ,4{BXefDjDm+@"PnGēf%CI>_X6-_̅㥽"ҩʁ!?nv2 ÉSYcGzݳ2ehkF[sCOe<=5=1cgsn4aj- +Uw. +j돝lNhUWJKj\5#ijr0 xRZ2Tk^^G +fE&Opb++J;L+F(Re@ +ìKzbX9!U43*ôzNc/cJg?L9*/Ibİ#vq۰уIby+Ѯv52UP1@b}bן ָv&XM1U=~)%BJ JH7%~W9iDP,7l#5*5|rkx&,baHxR׈x+w,%1@)zX, m5[a u\^ Sqe1UxL_^rך_<<ew&+;|m@^yvdٖK%ݖh+"d{1R.f=;mV a1߻3af&XKV/ 7O + $)l^@wwa6Xoq!B^~O?Xzx(?# W[Ԇ L7x t[Suqc|JXg,,̗-]}-b?z+h +V(]iYҪxe"ؿҪpmeɚk + ڝVi[j15333is 9'#a… -,>퉙86?xIsafIVs2~dckX i +UV􊫒X$#*R!Y4'B<* ʓS-*b (Pzk>\ >`Vr0)>z^5UsSUQY**K+ J3)IgbJ'C@ήȆ"'|x㦟q?=KP)x+P$a&f&(O  &+Ȋ20ODUAϞ* W韫_% + mem%uB/G KV(|2*^zܳ@VPXIRRkAR{W3 +5~ %o ~Gfڹ__P\TZQRVQ\R +gM@`OPIiQqiQI χrGxϼ|F j'L,l"Lxs9E>Jg)I u dyҢ'F=mW Y}.R`)p'=q$}AE-.:C~%PP<4Wn \+#%='JKO/iWgs]K**kkjoo9Yw N$ˏV99C""-ZKmNk}2徹 +]dPEd7r\qM^%f5 GsuҞ޾1Y9g6#K)=.vO +\Eѥ2'opxszp:"CdDEB=]L8\G7ю5#Sac0 cLؔrR/H&3.f@eu]GkCDkj4AGZ[C#iQ_)xs2EVk2/Zt?.]%(B!ERщZxozڠ]WC[|MW͓ +@exn +\v^xkohzFB4׉YbL =Wdx7haCÏ#soζ6?`!at8[ 49~>yߣǭ=jYosNDs82eX VxaGP׺ڞ07~4?UT .T$d'4K"97j!3@e7g5M]W|o9%K+bbp[3ٕ nwu o WT)05H + "GPk<5(CM}]+U~E>[X- ߜ7]Go6PjIC3Ёy*p8|(1BGTgRK15zuJ6AS\ϿZ5}F^|X7+qtҶ@x86S+;C~ŷx Wڛ=6g,[m8, ner҂%1qf?/wf>zocJ'y9S xIyW-˗@1+` ,hm{)[sf/N _$ < <,śBmț,!U) c'yj:3O+e?uGc^c0jGG-7ŜBIh HiEp,*)!R~EĨokkwOP[LmHU?&~SWhuKR͖aWE%h۪W5S'PSL(LWZ{6}Lx/КYn{sD3?3*tM eP6J@N>,yHO*y=/Y_|=X@>d%C0M' +H=Rl,O9y"ӷ0'۵YmP7O_ؖ^p [_m@SPd< <'эuw@l ɾ@-Pv/ݳ<34Rho߽QhS}EdS~x0tϑ=:q/?>wp`/a1::gMy`1+@Z, -Đ'Yv$I'.*`1O6?s['w]QO~G|[}=zẙXM{U9xLKNvtJ[uWs:ۇy 5PyǢH S4Ά]#F@Ϩrӗ,,`>ac-uGm9j𳿾Ěw,q莆nfjs@+) ,aaZpb)!_yJO4Ǭ6йÜ0=y!Fg[/]H OxŐ(L֏ KH+cLV`wP֕iz3S΅BS;6ai葃.X)ɗHي@ܛ*fүWQ~j 5 cw,vW:9iZ@GPy[V͎GW+Aus%GRlKG +lĸkYw`N8:5=MQ=XxܲX̚(ܲxsg?xa +IAN#G55 G̸U$(x%{O?x+_ Oi̧UDG`{&chc!RKLE +"wߣSHo,'] l[sf,Njmei+oˈUS墈r%XD>șO`md'rg!<1E|"OhhAGZvSeXu぀QЮ!ttV"<+nIB!4~Hԟ"L绐6=̟0]\3Pc,Ϧ1~$:Ծۚu)wEԅ%{6-ܞÊ4J5Frn i+_>7 (C5G][{E̶кa)F߸zgH*tI\Ci~Cw +y8TiNhX%j%ʠb_ϧdʿt<֕~s~nvtx)) M99"t["!rj_0s/c;gXJG\j놆" .& 5Ǯ`Ty} BuzВ6$X{^sK s'XH1A$㜆,acYO<"X3 DV +aQXo~ +/ +]ǜb.q|DG%F`9ən yh}㽖!{0D^ :mIgw׮H/,nH[H]M-}Rf l)#kjU9猕aQovm格 D^}#(RߣdJcN|rD4IHj!zE`, W+2~A@"ތLψF ?Q]Û'l +TSwq=K >$99>e-,P7͹_9sHO5OkA}<( P}JT!ӗؙ!TG(xȞkEg`;Dv:%oHʒHvL9' +|%@>w`$ʜG:;eHe~{=<ؐFL؄#1g1z6)=Zu;NчA߿S>뛥fK?+οVyE_ i`>"ExN9fyEIUz0+f($ ޖ>FYߢV&|vpW力-} YCoy>GxAx3B9D3Q6$z?]4{ܓxnI\ w(P"P 29oBۻ.Uqe$0CǯM)&hJ +S'rӏϥ]l:ژOe۠0bڄ"1`}3PWڄ%|%~Swc.[Sޭ2~ Bi<<;`lvEa@84Ъ@Hn|?cO! +$je7$yB+_&h]I\@ H„t%XAR0BY\}ZwEVC d[,&XO2SWύ9Ca$d b0K Jx(di ~UD~Άw-<R06q)=l2 Dz/Вw-mYXw" kϠ`"_fZ:&c _z(Eqx`)q؇1E3|r%gݯGXi*Z*˥rTLx͵˚JwŞI^- P< jl@n Ȟ H[1W *<,(*黝08E)/s:iE32OuܽvW_z|KW\r ]tV{c;:sԃ57l Jj,t`R 'dX0kƂ6myfixqF,8Mӕ&kH~`-{t)`LAP\͕πs\ 4ٓ~vd$ m w@@ 9 S2({ޯqZ0W!TBo$u{hӡC +Lf6\=ni~"9weX)+ff6,od^̽w#'֘_Tyũ+c'r2k'mnγuE#kU} u/]CW=s9?J~֕œKٗ992*z}vqZrA4#^Q K1bH)fI *c`/>b~ep|ż9rs.P(Yr3gr䥟˸Wr펁!1PwrpDڙj~F +ƴc:{2od]m8|7ozMchglġ) eԗM"wytx{dnn~܋Mrݾ#9X@%-j,M:T#pjXJtlh +HP7%бȆPb(dZɦ(eS B48H;͕C͕êb)XXZX;f`pN3X"l %zB缂*<ĊɵgtGrLf6D8N% "n1L0a&x`udVяZ4.PMQvD6m #ގVQa˷~Ne1htXbL12ߓj;9(:*¥Աg'|?x$&0U/V~XS2·*Te*ki"Q]mKTUm<@m_\ZQQS_SpG醺cNNCCoYymAA8ytlGio$0)BXLϗyRWoh67o-$Oj"݌@tѤPiU3w|'rL\T =WKqfirzKH)nK+j$Ro488:W֠)yg^_ 5N?7'4F%Gc + Mrt+Y06N#PV2#u#)9]wuFfh%Q5'1كƧ4P,K7Ҏ0tФzhR58sMqrs5߮t cȉG4>|pڝ-=v=xiwӮP4ox6hFp5pm/zʕwn7wyuA;;> +stream +xڄgt[ך%($%'[rDe3s9gRT$G/Ꙟ鞮Y˲Lȑ% ݽzs/(g:s.g+d)H|`ѳRIA"Dv@v&_z:OrA]C![|ȕɗ_(_TΖgtѳ¬\^v$LuPy6_r:Ot2Wt"Gt" (+=| l E嚂 +/r3cR $='>Q' N[cg9sBl;}SBia6T32^x[8G.^ scgN<14虿;y؁ْ‚2ŅՉ3LfuֹZȅb\)s-$8-8NN h}_+OrW*)V8[7<]Δ:U驒>&X1>SvtKѩO~UْΕM=f0j剢Nj?^zdэ,yE@wHvM?.zd' ?8]|LSZF+ ?9Qxt+0xppDO>Yѩ' 'R1[jϰ_'[W +YSc:}=U6|wrzp|Xڛw%d yOBًn(uEORѽȻ KO02.Zv;~p>~jcWY׶o1IGTygLѵ^C3ȀcMYFqKPT&MO>#DoK+~'omQakX!IkDF~/$-aI >$h [怨/h +Z|θapoM?O<FR#i /h 1 +cqijO +~Q7#p7ϱkrjֻn^=̽ިQC['k<6]{KE1A[Fm1l-Q~5yMF?e9<,OXq)'tR~_5M^^N g}u6OSgm!esRoS8>ddfvTcqkUۺ;:\cdkm^꩷aԛ,jqeX=bgDҺLzmxiC"e[lmplxYoT n$:&C@@ ShJtMa_78a`X7lgyuC蓷ET ‡ =eQ=ޤ'.0DjA#duzNX͵T]~Uo՛YTL#[$i!j6ިR{No6N?|kۂ_a2^U_5Nn4ؖc}Uޟl|塚otywcn4e6\1]1_yb&0]zl1Nn& Fb vujhM>1+[RS zT?#֏=6?8;m-&Tn$/& I5)ҙ׎*"pߏgۥڡu1-@;Hcoikl`;#$j Æ~|KqZOU__~49K+@*:ÊN/lй1qጙquVŏxN#h=~ϖ=EWBщNTt#.G#iN*ƅ!Y_4X#U1Gk^fûr?4Eo~{8ߍ韛|etlwW/?q[0;n#?|T&j 6\},nNj⭷o>\7wB?ĠM^@GwNۙ$wMUu` @Dfz~"l zb׾O[M8LB׿2l}3IHH5O1"$^a#fͫ ˝?8RDzӏv?6?v'UwRսZ' ߺi$-Eo +5% qYQy{DVe-qӪ,xAeO25yl[‰(S@9oӖ~c˵fĂkh<^}l ;;mL'-[uؚn8+{@hLJ GN8>6}k+;77yz0czbj P* H,? Ȼ|F?8)wxQ5c ˻–MǕǕH#[at8M5R!Z7 mc wd^ͣC/MliHBMm`Xu"z9Ԡ "OL=ɚ :<6ŵH| +Ox$,yl:D7nhz=iJ6}*$@5hIbʎ#DꑴeA[s06$uڎOi/yʬOX/oŠS'+O׿^j}'kOp1`OwpLnY&7Iؚ~8z\O`r LmטΈtDrm bzj.=1_"TR$D>96cƑaxM?}AyP;~`b_C[~d|c8Yn\Mh" 6")I5@LQAYm\d4lThM~2 ci dХ- +۴Xjp]KImH!Bn-mw[V<[%#僈2VytT1DZ2$} ŐM +-VTܤD"ɚ+^ScUw՝AeOꑶ +ԋueMb`'0'M޸q2YizXфW\r)4ܰ^ خ`cJ.I,Sɤe"a_C L^q{Hb yQ0mA1O=`Զǖ! ̆i4a!C"'$mݼ&K& "v$Th`:V !;$8(I@0!~0ΐ%PqqnC`$JH4} hq;`m}*!~ kސ7+;6FGF!>pPm]Uv%A u&%؂X@쐲7BYSw$MWHTwp^bE+UJ풺0qި'*'MrOޛ4O?6_~Jq CXHٱ<]Aqʶuز\0O%,qe|8 {A ƁY˹TwDc q*LR܈hP'Јz!$~cit45D@6RFF, y)Z+UZB# mxCiMp\^sL 2 .Wx nt0RS"iIYK$yB\b&M#qؚu &"y$lU&_bW qZlAPBCCW!](n0}Ikm/ k5Кe$fZF"; n,eZӒ,G Cby\;9PQ9a+_JYSD7†07MAT1h󈜫,BpJ$]ܳ2]ODeeR YC.Yҗ0_z +iJ/!P&~mqmFӻ-76o7^K:&h QYG.լ[|{`ȑ,#W1#99{|{Ɛݴe4a܀^ZwL;/'q>@%eL:B ]█n`R-BP _8y,a'i&H8CQDMLYt޺@`[C ư1SܨLVK +j$/AQe8nY( E aU߸Z/۔Yr70c Jt'eM5"N2pQx`"@41 -DW +beguUkfy3E)b4ŐZ! Ow5--FQb 1M=6Nm.mS@dB^٦rm 7ol5ߠFӵuu:^1+Vx>s I!b֓r+cA.#5lLnX/mئ7WW+=d4Q8ɘ#sz %uEC8{Q\+`4=#wb9uaH c'mS TA6f)icsA/!<{$ʼ%8C 7IΒ"JbJROHAa]Y h ;&7˲Tȟ-1!H瑾!lK@E?kCjl:z= †ԃ$McN?_.XyP?eɠ aLI+Ѓ!Z;Fr` -tkV˭MZ:$lSqؚn0lB(=p7 GeH{uCJ(o )SD7@kp^;tCaIr|μZY*-.>4bٲ\ е% `9 ++Ѥu"iJ:0$n VRt-nUkX,Uj%% \+*K3$ $=HKqS<6qcYΗpUh湺i{i Ro!wDd, VׁEG@v#Y6,La^R#$3[l%!g tEܢCI*a!ز]W77ol6ߢpcaQC:Qewsxje2樯30q nDQ[4ODn ZdHJOuhsրȲ1/[K`s뗊y_dW-g?z^C+)SYO0{Q$0M&q"n_3c@ Hpc0IF}acBR$_6Hg>A5+HBt8QXPL79=j~YWǸc<rP03[YB_{G.h>j/],E4}, B $L)FzABUoYxϱKe¯˕s2P1㵷\DTg? j{B9L8h{|(r*;6"UУ޴PgX`01K`:9*8U ) xdmaUGD1ԝh~j;%Đ:M_(BZlvV71ézYB ϳ[ R|L3J.0dO#'Ҟa|uČ# HR? ibڡKlYkpЍް;$;u+j c#P\ Ւˌ]FCp]C5MDVTAT/Hf7DR]l + =-+,|㪠/o?=[^Lr] Y+UsQOTBSvM 5HTH" 3-!yvD -̫P^cb7+)=Z +;zܺ rՓUg#IbWe8ȈmAy_BȆ>%+fVȚIL7|@ 4W~J=1#YW:_e#*TA}V1g#'lΘn$ZY6a^TzbJݘ LYenR [AndVr5c^JHe* +C(-㰯*:#.dm!Y{868!&KN&j +ȍyUrg&ufiE؄!wJ{=X;23 ﳭ^YkX6{\9"x(A +e^5.Wu ˰fyv_t.}"VW-MOX[Al@EuQ#1)/8\<2RZLY#ܨs: <ޝ/akdbj m_PxF$tx ^Q10<"߾UX:慎EoXڹ*l!r}5I#*s|Q+Ijuҥٗki{2dYEm@Xȶ# #c>PJh :μ*n z0q`Hy|E3c:~_(3- +}&d +XAD {}lVP 7867˲ZkZ!wW jÒ89`He V!oK8$ VfENh :d:W[+V RnJ+5Hc=4X:ǿ[wT>[M3 2 2nf9mkE_xErl"1(W*U896.^~vna]&aHmvEM|cZ⚁Eycgg٦YiccM3xYohfUr  +r2{lӒW]~y7g+.C˲_2?P$]"5H F/ A#4] eY|4@ִ  C2! +*!!^0dָ4[3^>$  +Ƕ +qCR[/")( AN}/L5O30Dʱc>`V)m.m\l+1FX!0d ) { r ^ʟϿS6"l4%L&дXoX/.+Usʙr#(Qf@Z +C1!Ș:͐_)\1d q/-+fBI 3@䂰k^.6:R[̱H +%-rJy3d!R$'ggI2@n&xXfwB=P@O!W$-!MOB)U. _C)k C_h6g2=X%!5z`<>R$@ 29u_!>cSB9Glļ6.cG Yo-h'xIol c BRyA a2ĝR}n,s,LQQͣj PT*f ! hH% -m +] 9ZU4; jDr+&<#h<xB k!QKD6mR)W(́!$0S @Cj af͵rm+xZ,\Sa :c;!gö{9?:B!!|%W|nJ|X8MaIE%<KL9tئZ5k:bm%ϏpzetLn4D/xx~TT-xmU%(Uf C+LK+ab,ס_;Z3"&v@J"bRzzf7Fۛ_\&`!q٨Pф`BPY.ՋUH4K՚rEL^s + C2acI\jSʽ[U?1435{J嘁.WHt,T(f*sԠ <Σ5{wF~Z Z,#@n2{?LC]$'k0;&7D +P]к+eR +2DZ$wJ +%Kd $i鿭BT\gg>nt}%OJbrD|U [^(S-(]Ŋ"9TXF`btPP 'gs)W?W:*n#xKJH9a-ѿbTP,[@Q@c/aKhgE3B.pΊV*P/8&~G0sYwɼb"BL^ +gx0G90-an&co#\b +wJhQ&}P,wQ%Bw?{[/  +aA4s5{~ ꃴt*t;xBn~䴉@P+weƏ釳Լڏ#>(S̀ʚ+W+gqK8px#LŀA QxYL67gH$ fƫY/4ߞ}#:AlvTBGDP,_,%{E.%yfg?-VۜjͿt$*~^"T%P"DtXx.z -~N//Ƚ[ȾSSs'l֯XqωiEhYZF#*[[f,ΰR2eKwJ"g; +8s~Ky_籞W9x=]};s%5k嵿7rGi{8iD|k3妕;yA(K)B e +,kITv-3='f˲dy%*[nE-ՉUVyde?{_-Y'rԧ uŵS33_lQECa|l4IT);}L&XYTmXi;}_˯s{0@wܞ}x&_q" A@r K9 +g ɀ蟌":Ko.Pg_V˭֧e{魷OeL ^HKdf/{}hVXϊD}SrZ~dQUL2231 +>H- _`w(fNJRg23Qţ22Rd R)O۷c1 _t"eMdfr:i=(vG3}w=LgQ{} }f20i{GNů~JNWv9_XLX̗X fUzko晢7qʿqⱬ©ㅗ +/eOeY' +&H`q<{U8UxDt$/9gY橧 ;ȴ1d.:f*-vAci -䂑'l=bqvͯ/zTZ]o[c9"gP4`FҦ/i5uf&RIH!򛼲o'[*ղZM6Xꮐ!cCGa|c%qa="Z皴%$8u7❐t+tä3ht5'mYZS@!g=6eX5s>գlpbb'tv5|۹ǧa\takvsMJ\LꐶzO_yFlK^aUt'Xvwx)Q˖KUc#xݓUEP> K;-pQ_wĵcɶ'RԻ GwRS!h%4w'Y{||gH?n0vLm +&0hõozowڒWt'ڢ[d,N\SvQQD`H֊ 4Cf #6 zK"< EgBwP5H( d,)I3 F"rñ*~UWXb7uFq$ a;=k{ṃ.*>`؇PimvzDO?RW[5&٦UoNv@mbeIBk(MnuDj-HBƀOE%gi{R֩t\I:B+OEIp ݟvntT +<$ݢޤ~; +)ڃVqDxw}M!6PvE|ZoA?ݤKe*{u +t;UH~LExH[b\eի L3_xm 济l^9' Cbz+62 v.EWZ&LfXNJ~M>QosLeGPl8¡78,2*kws[߿nۚ=A!'9E %&3 m&$8$K旘xqk55 Topr6ۮ7Nzָ%91D" e" +agXYWj!¡W!.sB?o;r [/myO:~q*=G JCK=ORMX/#eRVϊn?@R8rL#l{HZM X=@*IIUT#]dԗLkG)cSwF1SVӰ5ڼ"GLK`5 &p=Ȗid;IzNZT֩wT)'a`DbW%%n&E0q7{Z0 lX +);JP$"YeIBa2Ai")."KU!TmR>B* ljYS2E=;4T~rI˪V'EDoK`aeC R|w*đ:Ce4JRueWN qUKbÏA|E}Cl; uoŸ])3:cE m~e+ydR:yօr*>U݊'ǻKtDH.Ciբj!5LPތQ/0?*ܫP>[ R.pʑ:a_)-TMJ\tQōo J+ $cн7NP8vWsfTtF/Jf΀gCA +17a_#L@:KN<_-L.!oIJ+;0q(;Sܠ:U^O(>W7@uuONÇKktKB`Z= +^J1/q2.]Ǻ3;5uGLMNQB%TABeGѺ*m$ XK*Գ"ϘiC.Uw(sI:%qDgYyz)n(!S-~nyˊiI@,?Y!`Hb%9n1ːhlY-IӃ.ƥCO"$y} jQO}AMW0ᩐ/sl52yC$"&,Tġo=wf/m8!/=~]_Swb^V +<˴}^% :#EG|/@ 7`Msѕ|CD@ԝ!u'! $*[4!5 ::0#R(xȁvʁPtC nt)T]@:@#&<;<6=۸t_A`[嶕3As̙)*X$-==ݶl+2ȉ`)9u[s}@n^*)E|g:T$p4eVCLCF)!_!P S[F_ = sF9JSI]g\݆&$vU9>ASebk9P>iwj E炙CHςM6IXe +`|f7q8D8Y5O +p9!ztHXֺ`MM|dE7PYwbP7L$X.ێ.RV̚Қ!BWΈ2Պ 4SYR~BY,O /LHZ 8Dѕ!-"1G !萆9&饊ՌC =+{AI߽`7waKS`)EBCRy!A`Q1*2uݽ .*d&ےBA!(_6bCnpF镦g,6>p +Zh""j tDE2SE 3;U"u Ԫv(M1LGtIJrɥgA(RP- +ygJgܳsFE4}TKZ73֍?,2 P4'\̮12*%A5*2 ʆTqQ̝z[C @X1{h0?k;:BcͣiO0 +i +Hf#I!|s!Eҹ7tx7gÑHUTkN^#pvtTii$_+w?i'Y \McFS{@ܰ<}̍37Ϭ6Yi:,"S`AjO NA8c< XG ;a=$n_?XSH;qX(֤1QgIkD{=?C*I|>{N xUS. R2YN,R88Y.vMCʳEZ_2?.Tq:9C\CIG]DUb znvt~lbHJcKV.[m3'M" MZscT2Zs^=1XY1$V![-/ hŦ ! qSy8!oTkb6Әxl QPڜ3H&Fé% !=3~m5rqg_$Ce"YrG +AYQ9JbIv]2@JX:"Gm +hj_,s"n%'IU9f |'GVlGǗ,#S)u{_0rrH]BGtKP p=[%ƆJ!`ru |mWB&g UXᕑvX)!\ӤmA6GLBycz4<-9 Z}WR +MnT q:xd}J5"4eۃ;X_ӢWm]:7"+&XJc͚MvBXuZ!0I9dySʶii#8Vʄa 9P@$0* NB{cuU +O1CxWC$Cʤ.E-_;Yq977 C1oFAMBoz -2k +hwFj84uHhcLp +$JVP`Y(}:x +%&qE g2pjbX?<l64LpTgh[[/o7C$-3 1tB ّ!;!qr Ҋy&`}J֔u% Lm2됖"jLè΍PX'2j +>n#gG6X c,d"t,R#,KV ?I=o#q>t113k5JzpևqiqaE{ LoagD [^4!6ȉ 8`]&)`Wǹ!|i{'ti)LD׼#4, (g=iRb KBWĥQ=lO|T8\Z&!۶?ĩơʟz.8D8v4Cl)ܰB ^\&ZXЁxM'#I8K! G(fCh_B4['0MAtǠ]N 0:_:%k4LB+ 8b+yOJ>V:3eEN rg24bygUIYTq"!S[Z+ +Xcj[9<_AB*Mg.{bv22)mƳ@IBx3D! XC +[ bۄ;!c2G83u'fP&tݓ(<'6lbGT` s7C"_!.0Iy;8 Hc`ʟْ6E"8V4BjER%|By0SWOgM=2hI5PJ}|&I˼)ɵl[.5c)֏2BY;&hYJxss|T#t{竕^c +O@Y]x7'=T6#L25CPљpIU{jMGLtm1(9-qyd}o >@(-^-`]Thd3 mOm`NlyI} >(&B‹m 2Xt$x9@#ZRp([{Q  y.4]IMפ;}Hm &uۅ` &Tq\EN +mu=j:dZvΑ+L$L.J P4e$t8"\+”9%%!%‘P]' pKhk uEDm-lţțcV3 (M:/F6L- +D0X̹^!c!^& f:U4O[S*4")yBQDQycTBycǒg +~,Y$*p..Wyʷiv!)9J9dY>OOT1YәVwU TuTmS +RB9q>Zb myq42Oσq/~ ncT)CףlK-ge-19ָb:!b:AbQtT#7VCvQP ec\EiEs-4&HsBE"mB)FaL}qH ОÇ؃ p,"e!RVPJhO’>#, @`huZZ4-CƋ׋8d'i$tU/q tb{PI!3(mH mAg|L4:jU4NqbCK¡Cv00әd# )ږ]{͒9uOL!@~) ؑ5R?&atx$ϒ_@H9`|&8:D)]AgLE]1$'IĵDۃ`B }vQHB%8dZ8Q6*1A|Θ>QN؉9C"'kڠ!>@!v h"Au( fGSł _@@DPT#;o x0d _s0K׸yioC +YWˤYp+QV97DPjZB9 0fZx + S-]W40D"wRB\envH ˤcl#w" KR곂QC'2RHЈw4 K1$ YRq#"=2`ID9!+,DWDHVf=ƠD@:E U{Đ:dkVv$! o odpC҇:0t=tmLBbȴ¼$= BYAųPf?FsA DŽ`Aע4"oQ4O ey WJ# \ 8L}D/~Y#|Ao;^|4oԩ=tȉU{kڣZ1JќUJre`x+C~!0sz +Eќh (6N(Q|[ 3 ޓ'K \r?sYCϢ1*dx-qH.q^蜩X:t>">BIyG{-GIg] jed;ٹGųOA S&A@z"6'3&!>1';LsybE!"bP@ +!y@;5ST1E!Aŏ!0ZgDd2 qH Sj.JM%;` 5x` } + qNc4!}*vĎIu1rNR,)MIbpdFA@oR"VtL)|CTa85pk\Dz~(;gP=`92CۡǠ{-\ $ ^c )=U([Kkrfx0@#kl4P29y<Ġ!Ls).'/w~㬲wBfB+t +!&+sL.||S7@E"ǔؙ:$ςJI1Q-|!.Z'}17?c&~{B8TIJƈ |taRY|kҤ~Ӛ` k +*Đaۦ]2p %8&,l{0`Fcf" <1%2r-p ~\^يgƸ+^q#e"[q }ʦ*6Lp1 46DH0 ӄBAHT1D0ĕbZ[=(Wz uFn۠-"Z:d pH6\B4Vߤ*5"HvBD<^$~Hٯj^ܭw=Gn"plZk(hdvjT^NSV(|Dr__@2X)KPGݥD%"?R"mX^%Zq!GRW]+dxʥrяGq#Dž[H0ZĽVQ;u/d]]+_y TUJGArXxrp[&AB,hw~ί ߮4oCA6] txV;KٺiȰ.d0vdo¶FO*RJw`\B$EG +_RsJ{+/oۮ'®\ . VCB:J*ZFB̓Խ!|exţD% >*RZՒj޽q%mXoj?/Q(R#U!;(\QZ6)|aC!FJÔJ_=>΅bϕM1\Q%`7^׼jD^ 䣵j0J:\).'(G ACrwJJ^>~{o?n~U/w.VUKkpjuT)^&*\EVxLpw{{vq^;Il1cZdZ?Ssk +9T=M/Dͧ=UBH){%D#- +ABoS  +܅;*Ɵ JEW7seNτ\~H&XU"/z"ƭC}Yx"?Ǿ^,6NxCe/g붝iƨriH!g;\)x#|uHpJ3*p폈RN^-Wzbb_/`rpP\T1wR1BP !C +?a\g6\6~u݂O6)+XW X +rp +8d_ĸvq]y!P7[44vrc +[{S4o66(Dڴ2)G |Z^ErsUi,#CJrrݚo=[ʃOv'yPͼ-h/Z^-nxwߔ%t- ^|~4mu?S|"y[hw/2Z +YҾZw.IZ]s#,K`>bL$V,bJb@b[DO.+KJk?,躨}Aي56G4YU<5#ul Zd&E G2/j봜y~#B~?>x h@`5LrA?F]xCՅ~, %%NڒZ O!.)iBUt:&Im 53O}D`GhI +l总,&Ƥ9hNBG\r&ȅIxqJ!x}rox 9W7a),0¡fU-[bhckSKR+B|"k[%nM^"ej6UUe*^YDDBn[ +0kXZBy(n)nJm[[߄:pYJq&5]sBLvBƠ-%k ' T7' JJ:~~ŕƾ8/UV_סչ^yK'_?o]D?\~6#_\v_ y9"RS'׺_ϖ3 BվHn_t,kpgje^JUaT)>IX#{\9%Ty,Cz|g["m{^϶w`QkVЂeA2I3'o +!&hw=7$h]{C qз=:O}K?SVDdQ NL-]5Mf yz iNן\5{^s +wo2 gE"˔ VC$̔>!qHb]Х|ǠO:ѭXkPxְƿ~g?w^:{6|<0u_xdY|9鏭ͬ^;~"myxW+r&b@ܫ#RH#&V#(ABYbi U\48}?GoU 7fVqGgۧ 99 [M˱9U %ow\8]sS_[6eM`0m YLٕUbT)'jhI]o +~ mq)%mii8:mV(~Ee9L=dyr.tmSʶiBhd7ssCb)m/q,<3źq.3ư@R}!Xx}tk 8C֤m`c6M$}߂OZ-CvbZeE|H-̚do>4Mfut|+Gov@n,c ЛLSOJoܷ2kXRV4@aXVñ0jxml*a + w:SIe{L#Җ qXdG9v,v ݋--ϵ!)G)2-$,%6As"$YGuSykm4ťwrHgժTVHX#X5nfk [p 6X2^0zn\l˚'ڰ9!\ϓr|3:v< 8$:}; +AiB!ԇ$&43 >ާN{Y#6X F8[߾s³N{fq͝mR1B^2 h:80"&Yss mGZ>iKhFdlS@a9f;9lC3S*x1mNA +:HgY{d|8G݇nE{d:2'!u*:d-)=ugRRL[ԐaAz;d7E`p!;o<<CXX#`;=隫%R+\a *_2D2hEC3'JQ:UkyR]q!T~5X{㔡#}2qkD; +.5}2!n o7|777|L0p|kBP%s3h JDK|5mǬcF>nQSƔƨS [Ln8BL8Ƙ +AdXuȲse3/b#LAC hp UKT8ZX; i-ږ{w~!ޢx_Po :I:kwd+e3s7e֯%SҦxB۹9@*jVG(MB S ;o!L'j}R+!Q\}Y,/PEnQDvegūc"|k큞3C{ zV{n\x2-.*Yx +P%+j>LȕSIM{\5D]!LEa)E"H9eeI6cC6V$m,4QeSDRY}[iF:m~^ښ_mٶkEw2#^L޺@rw7((V~> `ˑ%Ę# `SøJ8Q #P$v/4,-C+w{CkC=+ACyGw !3e1=I ⑉7V(RF]fyd]gZ9̰4mqyS\d C2=rݾ2 X0ʷ$Ih^j4+-f%m{J۞v(!p@hU .M:)ԿCg^fB:"o[Zt7 ن%c ,ցE19#^6#̤(_j^CĐ\zC(j)kXdQ7}:d,dLb[/btJz5mvĐ?בmhr!Rl[<~9Y&Iq/kֿ}NfpHOL2 +-KeFIe}j-)ݓ17kn1 6" +!NFxIrqg [pl!ϼ ͋K3C8WĤ S!UdriwSYF>#o^ΥAI[u竈C G(ta<*ÏDGW,ǖǖ ,5\fy|~tؓ$xP<$tFWrٍg!3r+F-^EzYmu˖#-8͂o#TƤJ +1$ɹFm82"&:oA=F!Ǡo#` o!$![:őy~M&x)h;k<ѴaZA޴waB fhCPC^/\T u?ŧC>Q&j!/R0FLBeY17-Gl2Sz٥Ӌ'ImKa6F0SVJ8J!&Q8db3H%H ϕ Ac ` @Dr$m腌X'#5tJb\ .ݢr7?]O&ny&n'Qǚ+ +1~>Ϳ0xVy `~q-7]^?߾[B@ +$hBg3%EBx*43 +E(U1 Y}o >rRu+qc;u**Ggtu@s6tAA +H+%Ab1zWdLxyL:*о{!\fgٵ{5Y6!!uD"I Ld{ޒ6)ZB)d{~ !Cf!t @'™[6 H@I"P LA(5$ d:kԞrXUuU/}>2Ewx+ +>Xx=|u/_ENewKY)pHhkY1XeVSJ}F B5&oA55$9lL0Rļ^f+)JCty#5DٍD)]'3ir+R$A:a,'+yf?K]*5kA{!;t-Im ˖ Jq?T\P T4OdGLR~)W]u^Y!dKvG`$iO9dԷ`音dpp`ջS Ih=XIF.!XR!uc͗ZF#ϯ^xb%eU(8dkpȻw)!N!%} +}~Dd ,`,!Ⴚka=!I!L]D1EL W[=u %-ˆ&xr )p +H !W%TA.*)ĐAZ]2=cJ94tu$mꖄQ=Q0X0j"[k VJJxa\&|[U@ !"<֎ Zj-iMh`x(Ȏ@dq,Bt2p ꡺JE\\S׵pTΖ܇J[tg>CGh2RD(㎶;IRք)!tNq0vQpy(_+:Mz=fj^sJ g{Z׍Fr40&|{Cv $XJ+r!t 8$!\5p؃Ԃހgs!WV=V@WF!LC±CR1x*CmvlOTmx[׶%4qUS\O!ZCLYCkF\ +OU91 l +?|uRC  ߠ +{zV.%;;6oa4j!^LCRJDG/P6?$Yȏ2lxE4^yAD@Hգ(>JrBdDAx +n!*?%o@51J\sH06 %{# b{ hBSR0SƋmGE K*(V(e@{<SNA +@.`{7!v| q?P/>F !?afAFG1 p]fY&*"ApCj~z×cy?:v.Px,!-d"O&CᚼNrM>4(!  buj%lݵHr A3Y *%KEYauAURbl8cts#_`憴rJ1 +☂P "BW_l8%Rnv}L<¸D7=OHsJ1NVa dbm)!@w5ZuHx h8+A8ՀCHg|[B)0U@QnoK$W6[(P)|/|!,CD-(8d(d@0jM,*C릫5q)3 >5E!@ pH&b_ ucpsz[G;\n*4Efc*Y)]:V, GY:C`YxԄ~/F2Aak73;%B,79b^&V]DtPWI̔Rld # !PH4s"d[##C<o&μ5ɗM ^#1m@2C!,ZZ$ qcŦif 0pՈASgP4:{t~B+^\\W@t|5z7[x1B2l2!͌oIȪ[b)pTJNjx,֝©D4q ~J;Ug,:(A if<l9m +inrY!5ʠeNeHOkCa) 1)· [ P H$+6De&2j, %ЄAFmOJ;Q$bLBpZPC9!.Zo5MXcoW!s2\Ur]BN~nRPw F|¬^?ބ@1+2Fepu> 'ZWˮߗnr]aJ!t0Kg)وCA"єd] [ ` :mC*Ck.\tH6 mK2.V3^f*Fjl`LZ5Rx`"LmU@d;Te)W-?ؕl6G`99;RƇ9 _W) `%V3lRpPEB7T HqW.xl.8)8F:R)JB>^!w˼eR_+ArP_bOpHT}.jşԨFs]xc򷟍n WACA%b}o ~ + M/o@:K;/ \ĺR#T& GkS!,]'Fp%-V*.PhD0R*rr9WKX_' Ua썜wr趋£:ZUZlJ>R e|\2X** +Q%/ kmB֕Bز^\i/QޥNFs~M=b杝{-܎!kR() Auެj +KJxlLJU*AI\ F(מ^{PvŅ9wx뺦yj/<$T)H_ԛB]hCفOxT0T§_CB>;_XߥoTUz>~+|s8<^ -z~yWΧ_yg_x;[σޜzi۩ϧy2ooWK?+)_*EWWA+ˠRr %%Jܯ_>/~boO3%-yw߿nW.3NۺzyJ&h{ﶮ,͗H*ؒ,\DRbF9H Id9\e^Yg{*%L`@d ++uLy vU7k}`ݿR_qY +@bR1Wbb^0I I/J%}D}H!cgE?߻Sѷ\ﳊKpsW&l/\֍=+{QW. BQX932?C ][_Cg73_gPկS+_A\X| Z>Z>|\&mrLO+,n<Ȭ158,(*9]b3LĮ)rq\‹T0ayId[aCs.<7B +5ǬFG׹[cgg . ?ϋK `}?kZXx]TBG?ܼw|O?lm~s絶խ?nkk7ao?>÷k_=>/u1 _{Kvx"+2bˋz>^tAs۠ WߢShn =ZXV:T&k{]XG{\CGk@Ĕpw x^s Iԩo֪S}!f[_x]Orxϥa +]s_v+M&u*8~H>O<[ؚ_xO-MÝJ$%ljʣLwO +*W U ^D+X%xwe?Յʆ*$d. +%{<]n>]\Kk ur@ɦ]nԴSg/5` ++W<?\PX\qج}}HB CS/Tl(Kv!B]x K2VB\̸+$ĂP.apŻ(= +.;~ZJBGs۟]3ڢ x]u]u?x9|Ηx hwŅg3g;Epu K vQAID^$ޤ@;l I+Kkc=A8f0ؙ.J˸Sܧ^;vĹcuCU9vl;ce?qgNk;u!Tz_\ovi;y6 +?ۑ=l ( DAeH*;y4|s#Ŭ}O>Y}tgOWwZBDNSr/>ߺ@i'^*A{3 OEDر-e[aTF_mog[23?S3m'Nx>^ӑ2AIOxۏn= =Lt棧N:N?cD^~&-e69&(.سwϳǞn=t=UTzzʹЛ4vkږԄ!0g(p&k])-(-S뒳k|}V5 EuEߒVJZuaq^x!H߲ ҵLKAUsZȃKʦ%](km:V@4o -j)e2^4N`i->RQ@VSM25/)KPᑁ5_4giؾ1/ 2(2:V7e՘F5Q՘TRJ_FRp\yu@Jנ7ܝPz@*߂ڟ4ڇN>"J(D˼ RwRh4UPxp!%:dj\?.`.}%t&/|.DۖMmK*]S,.l\C<`n_&.g,Gӆs+NzU)6xQ Ÿ#YCdd.ѱ6Iή1l33yi]kJJkۺ㎷s*g[n<ҷRy)bƾU`VJkM !Jh0VYsv? h߁cZ)ft_҇Uvbd`;-YFߣb ^ P7ZwlFBK Q}tݽilYT4ΫIU 5CSږ4 +mҡ +TZ:DS,/RAMspZ¯}cpRQvL]i}uC퀹LgpGS–EQ\yJD8ctjJ$ˁk!jH-|YmpM1;iQӁWoh[gB\h^%:_c,ȷȖb|425OLRK\V7 dc3[}`UdN" YbJ`9b܂29YwF1Mp\SZomMSGRsBHI֋) a۱1>jox1.ŤA?\7Z:?*"T$L{o<6. ϭ\a43ynkQ굃u:*Nl +Wݵf}|ӄEEyҿk:WX: `G"˨4kZe4 ƴʟRr\c^_P3rquQz)1}ҷqҶh4EWt)$kl%IAj/#gY'͊jVv=u\+q]7ʓ6EҶ5cxN70 /J~F )A9`d9~fdµ s'> tR숹nl)+i'-m+ l1\GEUDb +gAភdY)(~#&w\ dx *;"g׷΄6 -U}pQOEjhAl=[ƍ`R8|2E6%I0S-,*1Oۻ=77X&i|ۮWZkwפqmO`΍]HsۊmH%qC~uIxJ>iz|HKt5]y_#o \[M*S{ލHA," />_\噷uUΟez;廾u)7[ cW:X,~ىfB4;hR{⻾)$X7m[z+[&[l-g}n:,]Nj <`xϤqZ3:~$uͮu1eQuA* +;7Cꐵ`U-)MP$M ƤI +OYpYV#O;!qxolAekd=75Ɨ~<8D쿾ܢ` +K涌1Էk/`x{Oٔ:pڲ躾{k$.^y`BB'- YMCsG56"kASbcz'^@qusk˄|E6Ʋe!Yh| ]$&xi\;'-q#6 pb5mRks~7s̑uHEN[(-9KHv(2`K7)M*=I2&Yز#|rlMypRok +zgqy\~N(Kڒj'<ٽ T ®Gݏݏ !Gr@1ZEX碵R!Ibk_q~.Ѵ,B~7NR؉ +9/H4CL-Ywػc#ióY9:>)b,hJt/5& (B>JxhN|I7`7$KvlS2G]p^ƥiŬK4SvZGAڂԗ sT:8C a-Zмe{'Ը4Y!eUAs#!w2 @aDNfS5N)}\0:FD\Z ol+Ɩ4J +{8zӰXB1G +iᓥ\ £/F 8r X!DJv/F&=PIsticfVycؖьicV }Ҫ]k]w+C@xAoOI1}6It?c.hFՍY Ɛ bP66s|,ݎHw)FŮ "־mޔ'D hKbL~#+l%-)k4a.X"svV靬Ӎ*OO H_'3ab=5.p% Syshbr8dcSB*|!Kz\țb0(G D%il7` SˌiFJuNWkz~^XwA4f&f!ɀC0k e3|u*;cmf2kiUa" J?GM03Z혦iNW$ad K|f|ҁ0wZHM8\WRb[ip=) +s4]V2{CH ٢BF #N=՞&>Śg:1|'@He@*9D҈,X-6o$Xk^=̳+?#pȔ%q*-SI)X-1h%F3GB5 U5Њڒ)N <,Ű1.6 2b=i¤Ώ2uLi1!aھL90+K.GucPEeY/6,6W ;MD_Zwu0cEFǒԙuveTUg1ﲬg?fJ l9gtUm.o!`!0&ZA5=)2o+SBG놕62!PHbˬm,CTE\"<.o+7!  Wy9R Õk\UrMJ :ėD88F$Li(H+Peϵ%ĉtVӬ=ͷd|Ppva.Cx-}'I& 2:TœWVWW HGqJk}e@1 (yYsy}hW@V-6(b\XwlŨ7,Q7>4֩UJptCÇ,V1qH!wyYX5/Pn2K4]˄hBjm@aokǒ-2j`J훔;DžN~:)qk,"KSnRC&MYċq2+rqi~+ԺPb$4R* B+!vT! +H7aZcuҁux-{/ lyJ"8u%I?:8 u%!RtEprDcegxcӽr%MaMBPZ[!1 uoŎ82bǜ"aD,u@hAy X³`L 3\Я(n7h$X@AA{U܂eYr f+Pod`[[v#6N*=R:5 ֪WKo|Y?!pSТ%!'*D4PcԶLȏ0dCv]%X2=dȏBoQC-i-Ys8BQ<ۈP)=!r/u8Sf8s0Iu2.NLV+W8!'br]Ix:CEwC@}%]Ji\~%C&DTrzCP=`<BbVz:D 8j07ϨSJ5!sL,5j݋[u~}t!:['MY]sB\AH"c%2ikqsL0;+UIn} e1u$p 4]'=(ŋ`~eqeE¯{Ӎ)ՙf(U!dVJ3R r#-d]ǝ2?dlfTAc'5g1\47Ԋ-@Nj~y qNAowQ[oiCRW8JV=8nl[|BGfӞtt0g5q'&wM +!ywt d!I!%kj&kɑ"v>#<5nhC1&eqsBBT[~ĐCP5f!ș$e/X" \kc0Jc(j8&jEeg9_^J!ByZ;IS^(?HP`q0AҾk޵gZQx:!,QYB2jDB& #p.a8Sٮ`I.A&N"%-  +8uzbu\!& >[" +CQ,Y۷![e#)/Gq;&u9i}N;xYv"Nǐ)V`8#X8iYLщ\k1?Ne\l'H \=ϻU! qHR÷LF2CKt}+a:g",0"v:N+W1!] *^:/!1S>Q@ ):i^6gFpk5,V;Oo8w t`ᡂI'&vB97 Q7%ZeEok*^#q( ) f,L~gYeՆc -aitAMʽ1E ;KqY{žzp "s㕨Zµ` et0##| xa#Ld "sL@6Yjx`C!H2G\ל2URle )H(Ɩ!F9>HqL(4"M(3"dĐE/_.  +,y&DR`B~lMSL4 L뉴MjCJQ!aHdPzgE)ZQ5|ՏY]CCR0N@ڦ.IԍyAjqB4k&UY1mbcA?_Pͣ.< "tyfztfM,]nHꁂRӵTH$QsB +,Ҩ$qHDmB77CVҬbdg!2==<E\#T}d㌐Iew D~}@/"ˠ43 p G:C ]p6ғsxq 0-N3x){7+N4hMŐY!Ҟlv^ʀ3Rb9C~!C ,c`f\rO ^޾рC~Da9S.:JjpJ@dgJeB,Sx):y*=r(uXKWlF mC9 # 2}qj1In&&1m;c2̜Vx/+o$s ZMoJP|!w >?[ + :M̻!/Q"@ Bc"uOJ06Ms`)oXA"4I + (SM j^!E9[.{Cv!DeՄd`hL"&)gZ;tN 9EdW"^ "*2rjCF'2NaE)a:C@d`ē=oN]q( w8CXK.qH~(b+aio6 0¡@3P3/v:bSC`T@ 9i W? ruHMHLdH4&Y{iЏCѾbxPMM18]`pH f+W,>39{^^+RLEKF +BnCBez=Z# sL$J}Zbm08fY Ar\n\v'CeBz ;l1ۈơ X'mpf>KjL!5ATL JWM2QpGDQiDh`3qM)Kd)2. +h'%UwckZ!W9@AVA#8&4M,[CѕyMcJ`83!! ,6ěжU1d^S)p(Bs)IhNU-HRE:`fy(wX +"XyW7“R5 BJ.$4941 VD!%aAD 2U\ݯ qU?***9X8fJ-_`B26ʳs̓(g+8(q=0M';8=5 +]ucTC_6@qe(T(9jga_708I A)a[rTIUoa.#&Nz$3p  >~.%1J?58<3Mp;l\hcTl畒b{H:([Aa|UT|[S\,5ʓk7 uZDvZ;^M' S :dzJ5V|Jr?>`JJ6*:(iPh8ه@Q$*`fF mA{Y5xI1P#|^߹( +y]2 {KEfNz F\d? [E!?JIQPfN3R\S]]Ҡ*9ʅ߬Uއc'uTըVUoJ %(RYUC5!_)魐V zV7Ek),޽T·}gu/dw4 ^xR )z{UUe.R}W ?_8M(\x3>-Z'7|\XfuҶLyMBn:-WYSCԪqV3"`*/pY}9/O?=oyZfxUIi}ip7"}z\"]ӳi[9ԶCNS.Ln|aE:tın mir + &t|>Eɽ bB!BH/;!D:ݽ:ZmOFM:mЫL_ƆX􄆧N6_["HP@BzͽzmJN}S] R2QުQܬUii}S;_Z6XqCGW +XZwh{=uSƭթH`QD^B8s T% lP\Mז;^\4;~Q(^0etEQ6u^}SV5y͒wj*W/_d_0O_T?ϯrNm?lu:ZEf(p_ /˴s/Ԉ\Ļ +]vU4t*s— '2ZѠꔛ^Vh_+4w8|l>"(UAzFx2 tyYI6[^V^S]ETb]TFJNJƑuȌ/IU\X|eWDzj*^%TdZTy-(¨ +߹Pm >+B֮'>S>_>'VR+ p;poW-MՄ/ɶ.0o2:_ j=_ +|Kt/IVT:ػJ׳z^XjCy=%z&z:B6@CD.Tw +ƺ̋I$$+/9 p+V7vdpŅ%l֮"(ыX,|ͦO +'E8VGb*aFJxڃ*!ͦTQ!#.PDaqbVɞ"vqI!U ;f dnſYs*a.OH>$ *)_SXd݅EŻs_dW+UF!bP\X*,Fמݸ8)**̉=,f1BP ++2`?_Y5E{=Y}Pc=/(iw9J_}=M-{ڗQ3j,{WvqpMIO>qdS^&tO!ʍ&4=OXpimI'V=(=(=:b)wAG:)`'q#?oT[@sGN4> YFvnwu tY9JO2煟!7C8gKO4:>z^iv*!ҍ^:l%Sғ~lGOֱ +vuƃ'\XSGNk03tNIT4{d4Y" bPKV5O) +ߢʃ(SdB'K/(A y;D1 oFJkdBV2GdckI7!u=uTN"k-c( +0TZߜNC0MJd@ 9AU J%W?#*qzX׺깲e.+)u#MIV"_v ﰪ;ƄTeԱ~6vu!]J+ +EEGNٵ+օysV ҥ؁}d:B;,˾)iik&ҝV[WXf>|¬$|/}kZY&!Awz}&gA_O98\P &M%iY5Eq|Iy\8'[X&}9f䧙 ImNI{m[Lfy=z3BCo`.ZOM x3(=lE~ب%Gk` +DsYjybӸo #\0G7ąN >'0+J;Ԡ%ik5:_7η͋ oǪSBj<ݏ\ ?mW7/>TxJ_P6R#HS*M qD?f čKK< !Td.9x02 +?JC2 [%p9G%H2A +j H BӜ{? i"m%Zsy}SLJPYJ\eIE4 `d',a:\#&IxO)֘ʺ̾ k!FiaA +?0YŽ +B~fBOQ"^Hmb&0v}u铇ㄫkmVd4!:|Z "e + C6ql?316!0Lq96C~y}IiUi* +_r\}H: 4҇A Cx-ѵ 歝Im=I})u/i/=j{__1c5Cx@P˺hIOڅ ɂ|K.A@eE'eYSۂ.dkѽ _L_؊M/ھkɂhc lSz@~FӔq_5T:p.sJ䘵_Y#iZ\h}5% ,j%]3sYۼ +dqJ;$2(d*߂7e&cJQ9?c@`r\y$Ygjjz?'8Q׼i嘜tTp"#l} ?MI]c"81n1x>!*$8(K +xIԜ6U%៮Dc ;H+t@ƈV߂mѴ1dst!˰:am+;;Շuizm#m؋MAmB)FIZؒ/ĭmI(x=ʴRW$b xk}][9fhچG5>)!k$|fS1c 'UX{ qW&DkD-c0˴}{- fĐ4) j?|ț#ۤy^ڳO`w]} N=IWףrt=D@pEXBkeu@jn $ rǨ2!.46p7t`^Ч -?olW6i#9`KdȵSvӇmJXXB҇f(ŧ$sxAay~08ğt\]&GΫ` KtAmML5%S):Bq\; I?8ٹ) g1<׾vw?&=`uv.aAKw[L=P!=eGǚЂ7Xs(&Gf]#`1* r`CMoR£h?c+[è1gj]oXrtb8f-+2D]3GF0mSJۄL6 +9*0*=1a9\Ӹm]WaEeyRH[:c1,H"ۤ;$X Dq, ޓ6NCͩm+!R_ܱ`PflLȦdm˓Qy0AڣCVa݅J@- ]-NǤ)"־G.(.B/C@y: .D޲S'QqDj9QXoAtc^] ‡\G*|;1/W h%"ėX1D1qAu%p߁ (TsJ8pO3hQIGQ*&FM{dzL &kEkI;Vl7m.ChN21c;]-"oMhG8$5xA1<߃vB#s$mc~FhPѡc$̄T 7 P+"(n7F(4Tb ["Y=Y= >} +QB> !dQLYe1} 9R}p^7# ZvPh9 2qlwxi-T= `"'118tO胸3$/C)MJ=c +Hg6x~*ԡ! Z80.uҟEfX٘6G p-3zow:-ֆ=輱v~D枔@Ş}$U{j{G.7l teȖ5G(<*ajQzC"Ǩ:L#v[3Pr!؄\Fin@Y%Z$!LJXzgVX?AQ6Rփi2ZZ1!a^!IC0aidZu?0u:oV.ɷLHՑmv Q\iNQ{ 4dgg\Q6ntC !]sRa-=i*pjc0A.f'!f!twlĦ%#AA0 ] 9T\Ѵam;vR{@DW]fZݠ1 8ejA 7aޮQ`,8#=a%59K+C5^ZA$[c+e',8shD j#S/@Z(l|h Ɛcɝ5>aPmj'r1To +3ftDLm"(!Myz`ހb +oT#Պ ?>`}qHL)bRݥ'!H@MY3!) 6-VpfO WH[%rt])8xI{N;wEMj͈{ b÷F>9xTt V1Dfzi">g W \wJi5'e{[ӖHM\ĈeU\S-2Z:db%}+e! CgFUchز̠rWSe޴)4 [ {`$(! *-EƠ߆F`9ZɃ{^YJmsR`Ԃ9cw6Ra}𥔁âB, +UQC A&mձ/""|]lhw7\WQdz "ֿU~EHZ3D!C t)BKEgWډh|VbUb"&RU*p-iJ4zB pҎ}Fbsj_\lQ -#2#TV:D暥>8^zUw@'9SHA@\F|C H!`Y.B9/D8@2-)kL\Be=a@ipL萦DjQaps¾uJʑi)< +Q6ڱptǕO/Oqt(:Zr_>DXےƖkBۤN{ACqC(Q앹!V¡͕aR{X"KȒ=ue\iWg &IXS|eY<,5C  CY=D1!K !>lZ[ъh +}hn)9 "'3}Bj7_`vQrK`7"< +QHnk(NҺh glj9F,a.p5\C18]}0%O/ CCP"Gpfş;{;u7\+'^{,&m .qMr CUAL?Dj ܋ƫrOBdGIhy%Xĉ N +ڃ=6,#s*i?VĆeZsJC\s<+_1kDm4F/:ۉ=:RNiF93Mbݻ,CC!X&襰E=LS ֥FzY"ь"U[aC5+Ҿ6Y՝!0ۅ/}gsلbGpM!(Ԥi uAF~f Beq R+~b(ac^ĦowR`i0ԨWJzAe6< <. q>l-ۗK:=2A]3\+,Iho (V7FשC$!ԆHbnEWXP/уGudigGpf:54OkJ>ʇsM[#Qx/Լn!^-îC!¹%(bs8 vd0b +ט63j^9/NsG:g4C0+d܄q-m 6 K+pZۈdQu2K^9;{= &QA47ax¾:]]P﹆$QC -#`JhT)zyA;ΡCh/]r%Dݶ-۲#\t#?*Bo_gĕ{$o@ڬVR򾅰HBtzKt:9o3=LIM^dLo*Br{\ ^U-~SBiۥzptTq-˺`3 "$.=TQˠ:Z +-1ll*\m!e1fFOK.5`A&pDo&.lB&РBcDU[q9n%N2I8jFq?){[-r +0PW7Y)Xɋ;k%by_;5;c6ajGw*WA;3r86<*yHؠԯ|": Ekm.Lضm^.#< +V1tP;M:!{!-[$Y W"5תC0Q|3vB"pָW$&nEhΕ\IpjK0GMv! >Yv="HCcz+ 9 +5a%tTY/£ |b*Yj&YC"C!H(~^5a{C=b!NHٳGza /Z+@rV4rWu$-v/QaXvaSޕ"[!tx40m&/}8NB' D'Z|- MBxTeG"\I@m&w5W nTR0qBxS>\؄д +f[ax7a4_ÁFz bbT?v9wk`WC[ OqHHh,7,_ yp~rbE*Na h-4 ]J=)ċ9 4$d! +@w7mbRGE22;0!l 6 m5r4F:d-?¢C6afS5zWwZB8i]KrGӜ?Ýb"M Y!zW?m1 +FSgr:9XAZH'|mx.-\H`ADW{E Bg!w(.$.CA |,0,QemҸӋ8vC(,wo)=+;e%mR5bE::N]7eN/eDa$*Qa6:/=BS rתy? ek ] "D'8f4N)F܉yJ:!7`ܹEAyGDiTvpH* /z +_Jd r_6 D{ɦ<8$оj(@0G=4awQ0ːӁ*"A! +!< +e,@М+5ħ NtbҘӣ:o\' 806xTЍSs w.zo@ Y j8&< >CQuzdžd2+әԱ.wnB] :V Q 0Hm0`+B2JNXoP zubMYy@G DgmP?}Ej_"uB9oɋ=(xfM9 u݋.K*δn\#%=0 k4.#nDǎ<㐤P/';(Q*<ChTA3tlJA݈h tbY]C}o`[ @ +u2RQ<8\'ޠ#o)ҺJ,{qhY!U>6q3D0ز _QZ_sC9b?$,[7AD+1_M2wkwMQŚ32ss}sԬaƝt's !92T #YoX^Be 븁Zgi{\CƇYwƦTotlzf>G!&\RD< 1OHux]FGGq␒ʣ qM^{!@%Q0 #7- +{=qClrY.((wjV!G yWwQjbaZMЊJ";LC["U:n2*/+K2Ό8ESBäI%f8N^K4DA@|, +B3RCߩ݁9Et<-w9>:\d gpdhfT8 noRU萦%&2Csv[m;H9ui!US {QhyRQB yig᳄5 VT CM@<w5އX߆G 9RyEU@T>"ӇԱ Y!tg} Xu|CILݓ0 bA`1EAk i&JC̾y!K { Ő8-EL$CSy +N&fm͋ļ ijk=DRJjg-g eh9Mˣ<„Fp"r9MƈC%?Fg|Ldfg˶/a82ka! l^1~4ǧj{$-2XAFQX;#)%09ᐚZ){m/w=@tz! +z)exN@{ 1ħpʎu"ܡY-Vv7¼/`s_DfpuL=X;h VEM $#0:DPr|l^l^=|9c C Ҕ/glҤܾR,3r gѡ4%R: *2`LVI,5Ic0ikLd^>ȉm_2y0HQ FGcӂSDUEg =ku,&? GxT uH-L57-]KF~D+9G #'W H ZFxTr%;Jm&tp3mS)VZsN_ <(a:M8T$G#_%FqU\G[Ir30f({S0t.~FBBxsCAhSv*8"fЌSq'] Y/0BST2kg-: |r;̌qx1AvIh [村uߖ<q P_уb Lz[4}[[\\y6hG +#_y]`R)Y3fiZGYi kZ2~VjgSjm*1#)v#a: ]cotaXE5RǍ*B&p? + D L./;4oL˕@oeW`F4,_#{YY[;4< # +*vzΠ%Nۿ׌7 77tu֫丣: >WQy<-WK4VʏUb***QőP9J~N;/P%W!ʣ"UGB5{<*?<&W W+Qٗ +]Q6$g]u$X^^_kGʣcQxDTu#|x\dPyH{Oُ*$B]S̛UU;,,/n yJ + +ֽ*p驞yrԼm| 5c>xqV Ӻ ,y@DJhYVXdm !j6L[w4EUGFaU.w*JG{(=)(NQ.芮ppYJ75Ň 47]d +6Gi4(Ğ+qr!Ȋ( 3gң=!1Kpρ\y!EyP|hL<,S:l,GЪ;&&,̍]Ux\ɟy3OБjk(`8~!II'KO;T"_ +(qOJ 3O)z૛ώ/<&bQ̼-ۤ;z- ڂzBI]kULu]Ʒsr&s+ &HmӖTun_;6u N.,zƟ'~_xsG (u<1h[փVHSC!{RQU_ۆ sLr}\{ u?ݏuu :6@2nQ!Ϫ^ 2@}_۪?zԭ]1y'5-o񄋭s K +x-\PTtRȜJ|RNP*;ó\ +4I_u^}Qc(Zn^e:ΣbPx2q @?tf +yᾷAO1XbTàN]Su쁜"gp"&RZkDMǬ1NHp,Z/|Kr<شJIyL(rHE7'Y6ͷ17kd,Q8F BroBB^a|_u> +endobj +315 0 obj +<< +/S /GoTo +/D (cite.Kaye) +>> +endobj +316 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F17 452 0 R +/F42 459 0 R +/F24 457 0 R +/F27 458 0 R +/F22 466 0 R +>> +endobj +317 0 obj +<< +/S /GoTo +/D (cite.Kaye) +>> +endobj +318 0 obj +<< +/S /GoTo +/D (cite.scott2011minesweeper) +>> +endobj +319 0 obj +<< +/S /GoTo +/D (cite.scott2011minesweeper) +>> +endobj +320 0 obj +<< +/S /GoTo +/D (cite.scott2011minesweeper) +>> +endobj +321 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F25 467 0 R +/F29 468 0 R +/F42 459 0 R +/F17 452 0 R +/F22 466 0 R +/F23 469 0 R +/F52 470 0 R +>> +endobj +322 0 obj +<< +/S /GoTo +/D (cite.cellularA) +>> +endobj +323 0 obj +<< +/S /GoTo +/D (section.33) +>> +endobj +324 0 obj +<< +/S /GoTo +/D (cite.pedersen2004complexity) +>> +endobj +325 0 obj +<< +/S /GoTo +/D (Hfootnote.20) +>> +endobj +326 0 obj +<< +/S /GoTo +/D (section.34) +>> +endobj +327 0 obj +<< +/S /GoTo +/D (cite.lourdes) +>> +endobj +328 0 obj +<< +/F15 455 0 R +/F39 456 0 R +>> +endobj +329 0 obj +<< +/S /GoTo +/D (cite.pedersen2004complexity) +>> +endobj +330 0 obj +<< +/S /GoTo +/D (chapter.114) +>> +endobj +331 0 obj +<< +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +endobj +332 0 obj +<< +/S /GoTo +/D (cite.monte_carlo_tree_search) +>> +endobj +333 0 obj +<< +/S /GoTo +/D (cite.sebag2012combining) +>> +endobj +334 0 obj +<< +/F17 452 0 R +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F27 458 0 R +>> +endobj +335 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F22 466 0 R +/F27 458 0 R +/F25 467 0 R +/F28 471 0 R +>> +endobj +336 0 obj +<< +/S /GoTo +/D (equation.23) +>> +endobj +337 0 obj +<< +/S /GoTo +/D (equation.23) +>> +endobj +338 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F22 466 0 R +/F30 472 0 R +/F25 467 0 R +/F27 458 0 R +>> +endobj +339 0 obj +<< +/S /GoTo +/D (equation.25) +>> +endobj +340 0 obj +<< +/S /GoTo +/D (equation.25) +>> +endobj +341 0 obj +<< +/S /GoTo +/D (cite.pedersen2004complexity) +>> +endobj +342 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F22 466 0 R +/F25 467 0 R +/F30 472 0 R +/F27 458 0 R +/F17 452 0 R +>> +endobj +343 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +344 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +345 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F17 452 0 R +>> +endobj +346 0 obj +<< +/Length 43350 +/Type /XObject +/Subtype /Image +/Width 124 +/Height 163 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 473 0 R +/Filter /FlateDecode +>> +stream +xڬtmI0Ž7Tl. N B@B\e[.n˲{/&!>#C >}khg>3sp+VN)Vʆkcc3*d;b=6AF0 /f:vAf[XfkXV(Mi40?|74 jy>XD61ڨ1_ʕVNvV66v cԚf^F?W+̂m7he 2[Y ^Mme'0 JT#1LC  FElI]C%nAb{R=':֛c[;F#8]L.~z/NMm5b+$5Fa`2$k鱆&/ԃRL,s lΊ#o\}K~Dq~?G8kbht2lBa{lѐauһ⦵sp1pm~Aj)5hƾ]u 9+kai*<[[mK0JipnrR;)mVVJI=7Jjf& ʹƐh%;#$Nw v "K-(К`!$Nr''Nje%0љ̤FV43&jlcH L4Vr` +Ũw'W9Kk87c."}4oaƋ~1~|cT~khuPH0ZY Ffɵ&F|3Jf.{~|:>>}%[.qlƍXDg^EmysZ 9Q|5#ʈ7[q&j\#[--^1FR&8\(T%ZSD)]!zgJk@=w1^G9\-FO5bzjl34F QST`T Ÿ' Сh-^z7RSPCP '?27F\fYݪJX|N9"s?n3\3|%4$RF +ԆDhB#B"5>\O&k +c"E6.Zf̕9̦^oz=)LE +" RAM WT0ȫc*jr|9rJD5{Pٿt0t]dNcP/,RP Ô$$j )Hఆ "PD r$e=D:FB5ɐsk#Tڵm*x|%[8z\)АHu(xxL#51"Hv]RqޫkkWn=VUKga+x~,v ܛ[\ÐsiM̃Ô&uA"M@bG!5aXFBuR:^)ʾGT4,X r{aZAHe̚ =?~[<#U?|W>~G_ޛs_4m/}q΃? +;:8q pbiEA~I0G$R1K~=Z +Zɗ<OYӁMA0CPo Am1HQ{RdNDS`\pgancƒt +(T}4lO/^.U[yJ_Rܞۍ$Y̷Yv] dVV~l?WaʽR7CEyҤAB'U#[H  YJ*#^cmrjHmfs/~9wyF{h֏]-c0jh^4'MNyYtPލZ"qIBv!oڱ6;J^;v+?9XY[0\0R0*m7u=0SQG@tem.後VMhd7?9Lc};T_mxʝ{v}raO'/~vAn]Ǭ}bF-j'\,x&%%J/ZCÔ0A*/z'U +~A8ES 3$WjWr="ҡ%!G͉f6[ݶ`mNۮΥ;ou/ܷu|a2XsB++.wڽmLJ+<غm3 `oJ9up~{l f ,lW8\sv{{]դ%nm [mں^28W2?/'?g:_/.浕J1|(MA(4 |Ql0g `s;U<'l]g4ee}K'eڂ_-1?rIhܔ.v22Bx-E +lI+Ǜ-YV)C"[ edm_uMMWƓ7u 4'l91,s={*7\O.?֏ ~B}.Y-YvO⥙POOQj_.6GL~&˃4 [w^E^,Yt[H~7?MWǫ;wtѹnVnZɱ2o,'+π`7o?ayiMaò魐@nd3(o;i1Mm=%K-/ X +D0`30)0cj0?F@3]Isg(cVpsbL`4eM$%NL\W5 +zǧs:=7E+h 0ZM~,]]#,|%y6TAtR>Z5hc^;!֠tbu5j<+ξgCҪ]m ߞ5og@SsY['7o̦͂;ò;3ޛ O+P[orxUŻreo.gԹ, ewOG>fhfZy|htuL ?`6Ds1Lֈ;{Oͨr!.|g/4szrk4mxV(,Mi|utUtf| ;3!YlqXEX6R)i5vG>c;Rqn #)GUf8~QjxI_0^ C\*,n梬nLHD“QT 6+z# LiN*#+YNPP1v^Y`z1;<{tcvsl)$KajV=D^fffim /%BXɽFz-[++ݑy?ܛgxnШ7zt|\[qR֟-st iOZ>"s)0_^HܴlùKj+eϙt"wK1MϘ9"6Kd2;[=2;/}-TGl]x~@@9IYZNm',1捱c[:V2%@aiz/;Vm swb̯=f-fFZy7w%.q!if8 ~ΝpTaaM@t N6EE EW]>[F[>@~GlRvyJ?F+YBs#G/@~.E%CťRCWLÚ +`G}nvV;kM 9bjUQ١5iy_hUcIJfS"AB/GMuKx73+w$K ^0d6rr Mkk^?ߠ/|7h JI)!Z>JDt}X2oęXLs::w҅R$`e=9Ow2ۘ[8yaE̢r:T5Lx5 }HD#QEp"D)9}iҡ!F_d^R&Ø9Z6gPa/,>~f/?^jˏW ;0P:/RceM!Qp/ZD1g7N3p-e" 3hEz +HdO+>d*Fh/+9X (’M̗)sfb4 +:mRF//4Vص}6Ե}Ǔ3W3B-ZAiF5F6ô8+¤R%s7FFOP9Ґ~1J^sT68 s^ZƼAnaV ,jtp?z8Ӑ"d(DA}J/j#p Iq7y6| -+H& c0Fa5Mן~mХYbJCH4x6PDtWHS1X&J,63A1yL 3}L!d[y_+V4pih.4sPSp}P E7c^w >dRy0||e%%*o$`/wX&3z=NȊXRpc`~ax E\G1F7uDĜsy6}Xq`$ld%R{0WnaF(Y27aNo8|^@B=1L D͔&WsAm؂ WJuAzpgo3՝2?*)!Xi<(4JDAcUwc-co ҥ>l 0d%uܕ\mGeD 搿y2{J|2RD*uHdaZ5(Oelgd%W͔B$wS"sWD!Q;M\ǔT!apMH)AiXR=?099yIͬD4PǵQsJG0Ts_}hmѭ^+7ayY c݉X]~N$)6\EDPƬҟgw >,`@I}RWhq99܃,c̨"J!"YAL~k٤lWw fpɽ->> +S5k:}DaYTd$TE %QBiOΎ?~?5R43[ͨfʃZF\5 90w(Cϙ2sw\쑊y2;a1G,X*w$VEP34q9Gn7TD" 3pSzhm0BlD̙Ϙ{uσK}>/&21B`nD-W(Mg.~XkB[a[w܍T~2smNGb9Ig@I"5=Z~McTPnW8^\b-ݛx>j+X?xoӹ/1 +9Kab\կae>!Q*N&2)}ӾSWGjvV\Quvs׺><ֽf@bAW|^77 sC_f]\C LbUTmzY5kRj$Ue%Wn(rփi:r{ ( U.|M#̇Qj[HajHEˎSG7mD1i*+Qo՝޵՛:sz8~l+vsٶtˇŰݶv*a%;:Tq%ùOuKR? +ǤKp,m=yݷ6:\JIWy39[n6`XeU8KJ [ WU=y+x*%u5LOl:67%omaeE%%wnW- tt r"VkrN&|&l\^l2[_%XW_[[+歫A[[CNhL/4[Y/ג;7qKP+څTEYXIM&_h`D֖PĂ +2]tN:<9柿|`xhf`xvh̽3#33MS.x͉ȺK &'C.A֐D80/7o->)7 gJx+wUk'f`b 56i}gԌʹ`amb!-gt*i! kI:"&(/77od\L2ou^I>wīމ׃JIr7Nf2#XZ[Ld &V "TDA=VyAJ2;މ7}n$]~Qht3gk^I׼o&ݦ$^7]pƘ\6:jlkkojo/޹Gaa&+qb9Gz8yĮp\%lhYȅ }3q1q9s$'%>8.Br^qۻ!C1+E+܄]˝˜ErV =7JvMsrػ3ST|dTRttfTtFdt("J2<j>8-Q9 pJYpޒ`i DgxtܳӘ8*9æ cp=?B XZla-lPm VB `}|Aw"@PZ,8Ḙ_$V6Cca9fȐMšBHYaKCfy +1[VVl6c~cÆ%N,r,TةG7_VbǵN;nuֱp]9n+8x%>G)ܰ--?&/ an%-dJYwq'{tnrOh|'3J1V7b업^U#7_P =!Vj(Wp Ox%%sGMcScSFg[z%={[e}tȱ#>r蹎ZYwG ul4/r"?>V'ewv^3l;hPMXICiuL`mRrOkiZS*t*k#=fr7kUu:dfN3Z{M>|T]YT&= G4b;"VoKꦯWOS)CAV7u2I4🩟)Nd%38-ZK +{ֈ^g؏VjUjpsuf>O5:)5dNgW䛯ȵ˟oon˷+[rrÔy3yV QsGx> a31+D1&j:L=1 ̱SK6Ct@=1} OvNVgJy8^W,S_6Olx זY..yJUI㦂Û'AJ8H4V&ON6;`;B17;}desɾU0 OH#`gzᓪ5\s}hI*Asv>LC ^*BGi&ਞ(hXjѓƘȝ37ն_n|J1Bm+ 0uW&nsd%| +Y[*8^3x,py9\E[.#'W=g.g!e9p~db^0uW23;9jN8dfov0} +4V +~1_GL8AfD>~nhC~[`^3)hLj+7ňp53b9 +Pej헙cus[̞׶KqpzږW07p2ӧ̏NިQ@r@uj'n_V[k +}훙֠b?* 06NR2 \=,_y<0Ǚc+ebq㘱{zJ +3Q9iv0K3 ~&K ߕvpSxih%7k,ܩX'zږuo$}ZV?T!~Ym3M |a ^ʵ +>\C-)4_s.bұJGbG?,E vvX>63N茓ږIX2jW6+㥒d>3 cxf=c^)׏ Hd-]&<211'R%9ˆB`s>,uB>A}f~z+/oF62d4eTf9-+=-'[kƮК,1I(XZ1 p ~5> yzS3̉az.d/i1MߏK [+ _+hF\MNUEW,ϱJ*Pb~r`d|d}B(0FѻqR>.ŀ9bXu(biٲ].٢^*WWːac(0CϑkZ~(J{ʬ,A\:f =kġ9K;L8N9)&/Dr E}U}a;|u'*l4CfB-8sW2j[lgqM-.oZ mm-}|F'F&`" О\7!$<zX;5z{|܊Be\8P^71nyyr0ol5q9H7.i޶[{,;~}O}uHI@Z?`fv ba6]7T^7\V7ecImoɒ`a#;&l/p4b1ར՘xvgXv b`&1p?WKq)2a2msKeCׁA+uyCƼT[ NNmH`q\5VT\߱c>K -园0?H + 2CΩGU*/tQ.z Ȃj'i!?|X*U)Y8a38!yhbvTZ;\V̡Q cs3c>ٔ~"]# [<< g ҍfFe=ֽoHn)W.w[^wjIH5!B + w["w[eIewwHrν{N9'9g}Ϟ^i<[ggsGa*ж۷g5/0|쭯Seء0и1Q~rϰv%cwMJԯa{B] ~mGmaܾ,l'j5ؕ؃~⼅1Qlw*C<D5yuiAFQ\39s o=VYvA#D8NDΙ(8V:fr#z($}qI"H{Zh!W%‰|aTxx=Cܓ|/~zϐ.G.劣^QyOQT(X+gsj=&D!8Dұ|ާnUuL';ͭʩfvfa~/ڦ]ш8Z;\|1Q,H3?! IMs;onE3 *޿C,rUSЂQ.Tl8]&2 0wMeO/3'ƛ `48D/ID6?,OHsH_gd~nh#,ESChF=J5%ϩf zeϿD"a!ևm(轃vUf֕8|}؇gOYyc;H J2b/Sh φxp9.ϛ\VG'4oﵯ,XULcn߬mtʛYvy^ +N14ScvLa,f;d_ Tu| +"L/E5貥W7~JAߺñu/:go%1^C`tǠ]\ds,:C4CaYl;lq#AX/"ݥ!"ɃAw L@Q=AI){/cVh_9Ydd C I㈹bN1 c^På SxPKF%׸rYia]A,;5r53DҭpAAjA+&&w9vL1g IҼb&B?`. 1S cP>P.a6 n`| T :ȁ4AhDX&HS7AepCҖ07=Gd{D[SxǠ.qo|ߙK9 -]$s|sg9W09|8ͪĪԦݑǾx.piv([XJT9s;RA=??0:Tm Js +`cpz]('Z?8N"h>6_w>0`>[\@+mt e&qGA3HG``@`rP2lkv$ x{D°55}0=HO$9v{vk`b^"e9ѵIۺb~NNb&AtF'ؖ]ω>~psAUdܾ COKt;>  h]޸ĻIw%݊Mt;6[sg/@lXjrZL'y;bKK]= I'NA,? +cQoLOLZ"7'hU^^Olnrd N' wz5r'-W*|kF;`|%es +s7N>&dyV {_YA.ZUly;PёO`ϧ>>Us튫oU^:]~޸$+V3XnR}``Nh';OH~̽dβ'5]65w[F P!oD7--cL>6l ] b{D"]C"Ċ-h':0 +NOw j!ӓb1s=G6sE'٭A/,5tsGGWX#7eV3oV7u)>yp*kU4u;_YiWe5JS磻UaNO`|bBc (+\RdGMSy-J893tCHhNԀ-*{N-=9 GƖ^(6%!o{DG{0 qR~ q`vn52_/~|r`}b}s +Eeڕ 捝 nq4llwͦS7/nĂf~8 duLztm=ZFԊFfv$nޟTa$+ 4AADgЈ]YNCE,k1Q(Q +n]º" 9V3vGԈg4#1>湆 lrpose%=hb0ժdת~)cYVOT;? cEn|P KC~=hf$޶Tae4JMfYTSUf }9eG9!usnjW2:g =fckjTs( cgACj- +Oæ&8 `.]߫GEo&63Y{`#]KZf'6ஃnl8v::w׉;#ur v xݷc7kE{zx19p `8#g[Q^_R-}[iݴ׫qRl|m~zF'pk2MD:A853!/NM/Iam)mP Z;!Ӊd A(!L1SLfqa|R! m=rF85+NL͋%Kbܴ^y)S-N*baRa 2PjHM +%s +j +ѐn|@b8(hjV(/M$:M#c1͏=y{Xv0aoll%pDr-Hv V \[!h&k6w‡e-rˣ.b^X*%fI yp|^Ξ ޠ[tKZZR)JżB1/W.HUR"z$$Q-Hh2lßgeg®2CC%^TtQQyљYS(@H4sUsDHyf6вrfgefWgEg0B@1]G_pd*F1>Dx>𕧫^qceY#dܡ%if4d˽!jB))jmv +FQЧ#ʊ(hQ03 +nJp96MMW",Dlm (f@dFۺͦ5C[o+}ͺ(zݺzæhm늭;ʶo k2?yszt JS3+BCsev¢SN9vOx3Nsw$'O\N:zg?_Tr$"bՍo?Q}CCO:EelxeM8yzMḆc%&:ln~}aib z*RH(,CL*4}2$})~At=MW ^I&IB2&s&Cnbfoy'l`5̭ҼV-( 3v~J{e3:-jtj^c00 Ff,Ht3 *R?IZgsKkb͂NCmuzHعArsFgҜV7m sc"I3Ct\zk\yamx/y¸M D zDHhYF!S"NgJ%9Kهن5OJV$-NaL7ԳWp*퀣0W\L5TAc)ܤ|vR63)AI/+%M+$:`٧ V=*U~P`3?f'dY-܋.-b nu N Mts‡]\C#э&6%ڏ^' syEOzu%m 0Æ9~ܐWݾ?@3Y:R> Yp̎gHkyc{Ft#4FqR#+Zڋe2ó0&GY4>32nչ1w5k?zkIQq3c2Cmm΁}I|HnpXD$4]<(L% IdBI$>R"7q?ČzGs9}~ b8N@tz ɼ-%~SҢA{X7.(gԳMh\\*4*"O +g8B^Tg8[\zK +,)QZiqG5>dwvT܎я! _Q.64Svv;*hhnlB3׏p[Ey! QH`'r +:R3ZR)mѯ@tAiXڮ! y Of9с_xP <d}S ɒг!Ya)4J22%#dpSx~Ƀ/t?qJIF?WCWُ*; pzvfI:( wbfDaCֱDX;{(+ޖ=5/KxNoPu aj[llfvv2F?Q+ G%*֑uoDRͮ`PL.ޖ?iiYcP=Jf Ka !=~c)C+ƗBQ) AyX",KNhE-ʘEEh4^`XZz:R܈&scyJs;w| Q>FrF E9W'>(!mXXvoZYW?XXl+C>mOhg9F1̉s:cCρ(Dp8۬?3.(R)sff> _>*8y`>D2O>bMG(v|U#0VVJÐH3$ ] S L&V?Yܲi锶jz~`FQL%Ck{|bS۔Yo+h6MW^YWa%6Touh9SuЏ9Ϭ81@8ZGq㴗-* ~>0/Q+fsw <]U m fussNItf}\<\ed*2WIsdO- ϒgOgò&B3нSFc Bƚ̑ߤ/ȕs)V gK.a~p\?nxwގ5/Ifͷ<]EE9-ǰTm6Rmqv35ԫ%,5(|B'ÛX XlUEM%mlBaϢ}UsS[ =L:#_a@R p6ᙂ`<շ?/̼IsGve},OQsѣiC6#sU9q O?;xbi/+>k~sҴN_~MG)G0#e=G-J+RzJec *Fp~E\`a4E +U5趴v_}jh=iTgg|d>΁1T\ޣK|F5nWH/jw%aʞΚ%7*sZW̟s߰b[, >n +(S+;Sb[R+q#}xV?C$s+IsKjTdqxDD02= Gaװ=fښ̷U`mO3Ynesg}A2)9Z>D2G6h=,QTj +26[oXUҶTPcU3>"oDbiro 7ǰ;ٳn=ഏl\cWI?xre *TOΐ,K5> XL/+QzY:sM2ЈaT.?*w<*{<2 [0|0ן_Q7ܦjr6dM*zJ(Ι8nBưjCh4 +r@#dԝhz8aUאd޷¼g7VH~|S޵uSv"Ɗ&;lwJ +W $BZ8ߎtOp )M,{ƚGƂy">mCq1nF~a)"]Eh#<"pH%ْqtdLDL :;E= ͘K8Lqo5݉Wͩf>iǩf\h!8ٕ=Qw ;sH,G铺Uf*1CefNZ;FzL4]jhs{DCBSUƖ~gDȒF0\}&bhV5j#yHVT>,G`k;'ߨ+CRlgW7Td]._0"I06.١K֟~1)+lP+ ۗG(B&9 %f=U#PϚȞʝ&,ӱSS ESEq]Ç>7~3cO۾w5ەcUd\z7u69Q;;*a|_ot%D[KfiՊ/wD[忯m:2UQJ'uiG!Ыf`|s\7 f冖,Wu_gM +v]ʇYyu-]6Y~a S.0'6Kpfzob <) }&sLQG)%*[E™IP\QDQ}^};bқ1/|Lin}t 'juPs79=\={Y{4CڮAM'yXD'Vsw4k՘ZSk-Grh,08oj1$R+6n:t>O/y YOC[Ԋ#o5rb`HWT$s&kĜ`PɡO,^B'DG%v(7ȜtoKse+:鷘ZxF>wRV i:4" g+1 +|٪.38շOCC Ϣ DLoېEheΜ}+Umܥeo4@tкW9Q%!/*fvpͭPXѫCҧB3ógH&D>2O[ /+OD +"y$pT׉jl͌Lm- oi4by*" BV1嫙̃ -n#A)s(F*=#b' :h LB|b:ڻ5lHF0w22Tk̵(7x{sAbprM} 7”505 gW<\ +4+먁)-j1Blbz' ?ndbK9墩 zsds P<0E.}eD1e @@;< XpX@Y7?7ue[FXRf^yoތB>[k}BF,cV*B-̲m+Z+q2mԏSlho&v&G7GZ1 RN;t7TڥVc&אӳ2YMYYf'101=gmyJƓgصmrhB>_duq,8O(:E N0bh'[V0rF-ĭwCaZ9sJ6QPĢ&hQpgV,'+,Tdی:Ky7ؖ~Ƚ\Ec; AVQ#捈;8je28󃣋_k䅇"f0w04DH;KE/^'G}Q>Xoq% bΐT0V\Xds֙[:Kt|hLt0bݖ xHxhhhXpa|2B[PtyFs8y8x`$<^WWLp^K M,*Nr0ϙi/[NVBͦN 䫩0YV8F{#,@ m깅RA57?]` (m2)0Ā~Cߣ``0C ?C(OЋTxcuB]\jy(;DۗX%m'4: DA +N N +N֑G^>HDL +»]bA#Ka1_?V7tH=ig}tQ̪r{Nݺ1f\l)'j`*RF y80y?g_nf0&]"DIO(ԳOF0{()%e``-'B /R8x4!H h=?b>^B}R)}I i ވ Iŏٴӵν5$o1'CH4t@;9HuJ}]=w6ٺҫeş9O֡8qxJ }UUM1ٖS+4 +mzş)^vʮW_?RqYG}z{M*#I10hR lEk|O"Dj|0ײ'df~%(1u/0 Kݟ80<";{x WDІf$Qt;l'#Nč&ֵansԦ slg_`PhR 7tH/=~}+ma۪hLljY|{5f[-5-n9u<\:)pB {ss#Y+~~L4V^-wt&oeR:֏̮յ#1ٓzTKdL Pf Z:+@R{%sYIz{Up/Qka#n8ӹ۽v[skX}9U̷Z8ZZd2X񧚅Z4V4urqዴRRWU2 Z{]:LbsfU[h(eun]FQAݞm Vxb.ݝQ)um](}ESo]٥ϩ ͬ>Sz'g)RAe7OꓷBʕatW^9|ЍUe*ʮ#_-?rʚ?ZQr'?khbmmʮ.57Y2tpHo3rhmP@j헷ɛ{eͽ^d#j픂 tIշ_i3~l-, Mk^L;2njaDuK~wmœѿ)pk=ײߧe׊A{<7x6h클6HMfNG F6d/ZRMj{M78:KBF,CULLϟDZ휐nLKM +'&RkF`cC U/,MȔbZ:/G=ʀlDboRo4MDcBr@xE%`A,V%zYcۘŎ}~¸_:vX!OPdj'VGKt'D;@nvHvnl]ۮ w:$O1zEcnY\"M7jS~I=35/ܐ#b |^GVT;[\igj JB3'WUeII"؀T%2Q[0Ӈ.2H[ZYR f O %vAW +B͒\(S/ L R2zThfT9~^chCq&>6jfaPJ-K+yGh`Å޺"~))1q@NQ#GŕsO5>5BN(4L秦uSp6N~cSSE0!"_CؘrtL9+Z6oX4|ܤT+Ӻ6;ADZm{bZ$OL&D:.GyQ1+- p\)jJWbc񽳣&fvڛUϭhscY;eڱ/notJ{3duu9䔃fk2/,(+,,/*(.,)>\vi'rMqMw$&W&,)9^\//*,/$UPnÊW %5y'jL1 ,+KN+*@*("UBh"r䭒CN0*bjNaq ZFyQhyQ& FaS&s?ssSsh T4V[J6[i&M7 弹,:_(Po(wu񛖥[l X徱NכѶl,~ͺB+l({yoz㗂W^C^jSU-9[VoZea|Ik赵^|*w4dYծ>4e_39Zǎ=~Ɋ9J<@ +ISdB)ap*RP 0U R&IdʒA)zddxpgflw  I'}~I<$x `;( +PQI%㧂ӄQ(&Z4< %P0X6>>_"O(N%LŊ[8mU:=H3 gԺyzN1pSM ;>xe /$_tD%O&HtahDHh&rEyiJN*B3␌`DZtf<$k:"_S=VTn0[oH&J_dNfMfNCW41\4]vJuć*9B%|z*<_[4R:~]AٲRuh_2ăEP:|~he VHDdDn}я%18T$?d>=]+˩8N@sϤi/~zJ{ِtg3r3r#fd}a A׈׈~,Nw XI="]B{c>¸lEza-N35[g<>a铞a\7b%bC4nn}A#g}>=~$>u^ڇwy|z\lnW'>WUDRLm9؝R16q  p wCC +P:RȾC˧ZYҋ7 Wxh'qlhO#(d~z! X7wXC|L_:_> ʕeN D=TTY#oG.X}PƠoZS&a;~;3& +S k13e M*FӸ\ @2? y,`"Lt4Qǣ,r9|zpcFz&c%E'M,DFC2E~(@C NK.U 塀3^|N)+ LG?p(ffEcWѯסz~ {X×hUsj;󈡄A!y?fV=-ЄfH&]3QX%y$wzgOͭ᥼4?(u, i?i;:3]g}bO1i\&$s:8(4s"LZylwGOL]\Ɵ:7eB<=y< y?V OzLRLL ?Q"qP0qLX*gHQóy';zWs,x`Xq +~ *q)H7afk28zv^{XEُ7 V2׿>|d7a".>b]HvQ'ye'%[=Rkn-Dx!'H͠ot qچu38 OcH,5r̉ +߼32XX]~ܽol{v|åA,F7 Hj1|=Y R6υKAe|SgLg +==/r.=~W7/nywK"#(h@Ҙ \Aɓ) m/?1ڟv웳]r}FkLE׶Cz(IJ2źڬJMISܦMSO.n!0UBd9&z zxp:aIq'8U`*f]|#dڤuV&Rzc_̧ɋoo3㴿bǿ'P\;߼PdB6(RFO-nİɚze|xybm|:B]T5 Nf+E'+Aj#+xB]ZH0$s!yRKqo-32VczZnGCZfUK4ݞ1J$7絜*дw;l3 ۷1z(Oh8lK迒p&N=þ@G'2GY&8!㷙 %qy?6u4gg*.'z?)CW@'o2LJ+iư> Nȑ쉬rY5j,}xƏ{\~ڲX?p|~bT%d{nX(v[68GmLI?qm?|r9-!jhh`*'("zqkr ĞOk@" |(=]T_kݿm4jOTs_oPX0 N.᫢r'-g_oZq m"C k NT|u[ .fA"w;͋ѕc#<<ʺG{D^h &eok%U4-*Fգ%/P?n*l/;m޸'ib +_ +3/@s|q* 'A8esk{wB^-NݼyKFQD1؟?{S LƨPBso=C{d P@ +'0q`{;r˫{|[Jx )y9(Mp|:Dg)DtPDC8IUۍޖW3f3e3$a=}-EDž{\lO0_Oĥo Ca(Om|B`9#³PJOr ey}A]ܻ9#ޡnz.gx?ACi| 1!po[aŏ"*2P[Agzn: +2m/Vi->*1UpP_ ܐ!h%29΅@ +H:J*hMb50&-6\-o7Tě!3׽d[:RQ9r݂gɟpO|0>?0lq>Tq] #MD6/8\ݐ[b PlJ=QZ{)=b{vz_z}j_T:2h)?La2?Sl~T8("bj)z#w3=ib$TٛuY;,6>%F07ݝ;Z"0e Ecr9.0[\1+_1qN60eĭ&W|Kk׿9CFc+՝GqV^j'T0pG*urTůcGóG`"W@Tg7R/7:V0ѣS´c?ʻgF.oMb#g|?1z?L/ťo E b߄#1toH00/GWjߺv[dh+;:ywwn wc9YCBT (F:vihdnCx[N۟wݮ\A5v;A$ #iUå>J?{-EaӢKC2ɜw54֌Fr +Eq"` HxEtmw bG43 =;<"0 +qCGk>}M[Tp8?ff]+b~3zpl0 "F<:0c3[(T_ +hnp^>ZSZ\Ƈߺ'عNnؼ`<(&&;:ݖndp\!5t"Tjh_3+vVmHvD#E-kzհ'ΡY?4î̯CyA\>7:scgLF#-Zh +ΘfN,Y:R/}#~e3 7?%k]L8 +̇l'p iݺ5ԊD`oT{>{)A +!/=@C]>yqc,IhtH((o<^6\}ɇٟ8^VnZDqM\\5',s "{44c{]ú\Z“`T +se =kG={2bK?<_3YVwa|J58_淟Gfe$[a\QpxP1'|$kI8շ~Sy9˟|߳l9A#؎V{.fdj-nj5%^D[SN>Ь`HE#G<$}gDxwz-1UA)8(PACNGf{&Tǵ̼ȼ~u)Ek y- r` !119oB\ah(\QUOi4K٨.?Bq>^._3wJ$HID6} ˝J)jm;!oO xk'4?(<"{}v")DsÅL·E +9мሲʎo1Oz4n,26 Eӭy[R[Zh]0 m$smA;ׯf!1bxdXx7{SL ߬(DK!ONfW3ot  +J R3+39s:KbeOdBRjٴuaZE6B=a_DH@ef:gw3mڙ7@3u8sn{{o}~ C̤A}G񏯟< +\}@v@Di!s;" :;<;Bku="&<'1h`ƍ3T>i禦k8tP%+9t>c (9IQqVl+uZnia#(mEzfJWw\+Ae C 2Q4>ٳgw/7-Sd?z~`[%PWĵnc<;.a5>=0QI$2z80\^7_=y6+ZqÔUQm5w ki\'{'w +b袞Z +k>aߥWBE s PyldNy6sy *$aV׬y*=Όd4}۠Ʈ||7`jnϾ>ҨH}NLٿPb% f7E@ 700bf~PELgg a8`bNQj߿}W*-Z0FKq9 !z:条.|1IF4 w;j;z>p1;ĈHz{jo_? +kY˴}RG߉ v8Ƶq@4'ru[>`s0>|3F}bBZѣ"""*h"*z;{Vߞ~%֒[@:x~.AhȨ ç[v{c==힑;#Z }[+3 HyϞ=bpDSRlt0 S{"k2ڼo1ݿh p5=r9J񊀳A8C>%3\P}ռBMY pr uXarv֏1_>#m0GuMCV.'oGhn}tmeBP88vzwzu²GraϾ~ܯӸ&H^mt)0Fe nRK2,<lou sRZM{uv`=f@=ow`}Tksdn\$JD:4EpmKg6n!}!!!*jP+jԐ7$Xq 9 o޽{q%IH/CԠA71kѱm'ǙC/3Cu5\n7qb7G;WLL%P'VF 򌼾م/~dQ\^?/@n>L GI d 1߼ƣ=$uܩŞƧAzI;j9pPbvշ|o>bddD:xO)xyE,]{-o; +Ak̭=)S'h~)}oK/U*RwO}7ϖ4-8'iRGk` U2w`tc~RnܬS7XkeN7uM_mOW2,( uSdHz9g`b ڻ_l\ ֪+B Uǩy'AB|( ibM{7.GBfu"0IIL)WĔ8aO a>[^yTZHڹN5nbqȁ1B-Y8r$ûjk=7qOB. m +܂AI='Fk{1Lyon`u Cc`[GȾ]NAd ,bCLL)dJ,U o$t8](3i.,-/3˒*HprI m$v"C#%2.25u=ѱq +-H)_HbnC6́|{c-s~]~Yzc.k҄sk jSMr_3L:;^R>"H\U]sJ5ˣGNcǂCR=qrkKa1plQy$b#`k$lL=)Ҡu,"6rul23$|XpHH{J?`nE`ppmg?%9)sRDu$RE3|T9sZ57\垿g'xCc=o4qNfӭ)hzpZ\uk;_&KGޥM/??dQgm|X,BD,RP,DB@ DlSy*gBf.,x^z[M=F3B-ڹ .{4![EVۿ$SJdB/!#K X(Em<dsټɺ33Bs'w̎cl4shunq{p4.?JAql^/u5ɕ$p#x b~̓M:7"|SChM,H!>X_o)Zm'ٹrฃso~2+Tyq%EG/Sq$ + eWɩέ8_wZ9VyugM*uHz[#0Yz&2޺ֳ/65.l;V{W,K37UvY^|sr+1+pv9UWqT͇9U{j&iޢ:6m616iw6=.w8ڸp\{j>qnFkV2щ#W˩6F~ ^Kgxߍ`zKMPj}'x3b( ^'$ +-1_"LI$-(dGD_o1OEAAIT< /F;fy~aJOtshAn=lmv8yEgK# d.,>U Zr´0~7胓>,ֽ~Ϋ` a#xw: ^?+Bii,W0Sf771`Lkqoُ߱//xbiy%Pņ.!doU¯\(t EE̙. _EsWzQ`h/],t *#3]Խ(YTt /O/jVl9 rRՋ`d.Ҫ!4ByYy克.\̃ +~ɅJ0_;*WVqw eA]>6P j_\S@yGҹ08sa]Tx+≤MlICV#VT߈TYǹQV{r׃cBD]ȻvµZZA vwQxGWa7q8"XX:IpIu:z׏}x9#aF`S[}|u-. Ĭ6_XZo}Nnךu › |Xɓ%ys2,𸂰cviͨS(lထ|l˟vqe3C)w'.]mhosŻ}jxU!mwl{y8aJ _k2,24澶g#xG ov bfMZqi݇V&93Ӌ{#K=CaԢk+F+X47 +F M[Mx8W7fO~G0,"c C_g-fgڕm/6~/f,5$4攞/>#=gGiF2?8+ ApF `>KT/31'g[\> +endobj +348 0 obj +<< +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +endobj +349 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F27 458 0 R +/F24 457 0 R +>> +endobj +350 0 obj +<< +/F17 452 0 R +/F15 455 0 R +/F19 454 0 R +/F24 457 0 R +>> +endobj +351 0 obj +<< +/S /GoTo +/D (cite.cellularA) +>> +endobj +352 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F19 454 0 R +/F24 457 0 R +/F27 458 0 R +/F25 467 0 R +/F48 463 0 R +/F22 466 0 R +/F30 472 0 R +>> +endobj +353 0 obj +<< +/Length 30092 +/Type /XObject +/Subtype /Image +/Width 141 +/Height 108 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 474 0 R +/Filter /FlateDecode +>> +stream +xڤTW+&Halό +-=9gDF @9l˒l+G'%rls sνsfnh%ӫ`zVPuI)NpbuJ1!EjCdLxL8tG80OdF1q2Sy.2iY=&2ma]N>#ކ諝^5g3Z+I!LzOOP6Oa-c(e\W.fx:\6N ԫ: '+eT`CB)\P]l<&=iJvN!aE$D_4 +5G'͉J= &`l2@}J{Ha84 L SFn;A׫`A=rn-u7$eڤL-ޛɁ3Σ/C"- D4Ge8@OE1F&$e<0y.;046`$rS9{UC=j8:F=ԣYv(_t̬AOe0q&W?Ot S +`2Z(b\8q:6H̴x`BtFz"Ds(e&jny0{3=1u< ٟQ,xFSϳ<cL/fdZxLgb}(b=Әpv|l|q?{$,,{#MHD!Q{{"1}-e&l.Lg34z?C)C̈vD؇w"LSr +}G?WL ݮ%m zef&5үv%Ph!3 Z=R?]%e4PB؜ޔdFfXb!e+OGi,r:hM.L"ao*c|=i_hX~5Ow!݃5h/l&jx`rؑS>HOM3* g;aMY9cƂݣ'tݬu0=Ia:p oxCG[~:߹]u}У>bD;8La10=an@f,FބM )a5L:Fv9>/<.W7!y:w( YhMම}1) "Knu3yM`&=74| )q69.pք&$#<0$YFjq31+M$!0u2`΅X 萧/9h4-etĐDi7CJv#3:yRcoPDت2;mɄFIy>Xx&.:$:&z02Pn=&LkYq(&Tql詗:03P=S|obBg4`J6`0=O*&T*]L: %0#p'>ByOj}H)M638~$/a=4Va꥞#ah~<$e$NJ7K6Ub|/`526u`C= +'[9:vT!K@.1R1h`AA+dN%AW Zh* 8)ia _?L=M){ +n[j[ 1S-~Ԇdm!-}zGA@7Ud:xP(I ]8>BπD j@0JDO"~/>@*̌q?{+8,DK`zѭ DõilAN^Cv)eKJ69\Wqu>ޱP蓞'z.9T,T +-8!Ɂ;KjmPbYGܱYBJA[ت`<<䔌l h'"Pɷ,V قDJn6Ax "'a?2@(fw&}O CznBa`,g B&BG>铡ۆPH~tBƄ2#S/Hf3}r_+jvmcB7찉+)"{꒻TH +Hq19<%{nI/ yf}l T}r q=(@9N &&[A9IN:AsI:Ž;F?&>H@e)ŵLwɨN7[x.%qj P=riچ$:`#{IçZ8'44D89Dh!" 4pw{ЏY! 4\Bz:df,0j}O(q1m|32 |9ǐ>Dۜ$k'Q9H$Ձ[0]AL;,V' /3egMSs p@l)kq0Nz(dAfA" b fmBǐ/TBD4&7$ +}  +03v3zf3ќ(LW8 CG aH a6Y*̾9I*Q°͆[A`k65ԬD #ɋDAU5d1<ƙᴎ86s r:B93'VgG*4i#xYp'/@q$ R%]7L؜0`MӾ~2c'>Bѿ Ɔ4>K N1|LNGzz[roXD\נZKAڜ`p݈͘2; 3f|#O[]̙ÅOis:g:w>4V[2o^য়!C3g~-|?kG]g>C_ o2ߟ'O2}}|~>8}??NWr sf5o|}'TOC~. 5y_23G8%)/O}mO~H%& qMׯ]q*ҍ v֕z'~2ŁN뗮߹zի7^u tH7n܁\7@7W.9q#3+ЂGO}{µo߾t֥/]qoõ!]p[p~kto\ySajdVbN1QUM('h 9~?6T +"m# +dGysO tcXn v蕙@eF&!NHNabhp*0{[? +H; +' {h-(PN0$51-"sM//iF3:bB?:qN)'|Z*hHG axPgpffh}%S9lWln9s ~!B^e{=UvrH Ƣ!N$ +s *I+jYbyiWڧ ѽrG3bfz>GM*c_ &M + uDib$ݲԯsGụW΂zdLE˶Dn]Ln[ŭs)0; +>ٹDiL@#7#)C + W!;G\ڑw,}ٮE;-q(  ݯԇJ{]txHM CbpplZ[i\Ny/MN ~} |2Zj [QÈ|Z0B>Bo7_*KyO@ϜъGN`u9$e0݆I jzPEVb5;HN})׎}T8wVﻫ~3qvv+UuqhXA zӍ1LrJarTgݿ^|tqg;UϽQ=RٕS?y~ͩ+ͭ[n4Y5-LY'PJjN9LxL~6E/[vVU+DEvl Pe )sH[}OxD3an 0;}Awsݲ r+6{G~ɋiX'[9$̄[%jD͂vW_hRUuU攊$JgMyT02Y?^7jn'`B٘XQF +#r%7P7ʹrFO0A1b {"2[c. @XҵAnx{;gp7'&ň2kn)}>iC)]pxF4kzIBR[&vS4+ɬ. + +{s-X۳ i~mzY+|f __)S㬍wwJI]Hsvqrq&7##w}}Ok^~ޯzOUs^+},,J~:eć1fABĶEqK[$(,5*Ď"ԇOBb5 +&(@|{NQCF E&vh؛/2P1I4Tc  }Jn[G}Q3z M>*cwE^mi/; y`Xn!@!7#xn W荋_oOT}+}yeۖ~ E{ )}к*0=<'&96[vķGWmL^s3G kcdв6d(mbPdZ{y];g^ݿIdkKLJ$54/:#>fdݐG cb~'J^3JMst4 Oa`{. :o_?H)%kZs?>kF yxjR1u@{[r˃5[3{ZC et}{gp=ԁPPޛ1 Ĩ_B:vahO[B mj5^VmX+h FK?%a7AD +k<8ww|[y<5oqbm7{߭F98ԤJ׽>. (>Û뀑DGNK(hZ ;$ԉW̛Y!CJQA"_cFbD@rY~~naiub\R܋r7&羃 + +Gi}kլmiujqJ,8LKⓎA+̿L3iPmPYQŠJ;|^#.5%T7ξ˅3ʽf T;u!:q& 3&\!Fvk +ƶK>+B"aݏuKWN^.Y~ Vb3qѶ#f4 `o=׺l ;[hD~7& ɚ!|4 \ mt"\iX= +:t[ +O,xK{e2x؃ +Hq&&jPh`87Is OuKwiA6N+{b +GMvrE^>9Z77iooظ$ 0AܯWw+.햜 |ߦr`" 7DXC6(C 7!osvJ@t'SzpUcI3·FƣMhm ?+̈T=Rqψ.~),!m:kQ+ހ7hӼ=쳠1-FU7gIJf^KTtEQSDOom>3׷&CK^)h<&l\`MXT}%ܒN_JA|ת r<1u7a^iL!aˌiYfr.LۻVzȔ on^rm<0N)Y +|تڪ/Qf~Vr*z[;UCJVW:%PHjK'PJj&p CZF82/nm-]nq:!v$"rLɁH '0^=C;Ѻ$Ckn?SImW{=%#x{1L47$l#V Rۀ[ɯo0U}򳺙oV,^5/9Qy[1&0Gkg(&s]i]G{}>!|9}_a"& |SRR0 +U\۵xn31&0`.LƥH`mRF$,-4ۢݴSjgIMWz=y`p8L4`W@~$ۑ{=V]tcS?e>3}>\Zё?o;4#;9Leg}ߞtkf1ztnO߂>z)qGԥw/}i, mEٜs"9ٺ$1L&b0ӄ̍sظT3i7#J evr\k;WiF&bɈto .U,L*-۸Gb=H)LcH?dl9GxЯ`=)&p#&r?6A_4"w.wc10ێxLٹ blB}wwM Zs)?QAiy\7B34o6Μ1!un@ϝ{&; 9`Ce-zn2+7"u. +:N44aF 1#f"}uCc:yn50 +B[x rhLF{oip^KT!taoƏgfۥ ׾HZyF7xLMBɩF>LO räz뙘<*{" +SH%w-'2+Wzme Zzx =ԍ19]Bf+`ꒌ5 +n:OcJߞ+7)`O~y9;rWmcKI/Lmh>hmErlw#ajgWYFpZVM[V4kGfܜyhm+}y'T?&n)ONM3⌁OtbP';ie Stlb=ɽь=4h&; rچ31M84`bYUϿ[/ɬ-~yv K7-9zr3JM,!|3rMMO 9nM oU*zD ++,:YϿS^]Y/.yiv ]u#7!LIi6KGk}Rt/,u]p\KHb[\NsK׶oh{Rc$ +z +z8B1=,{XRw3Zt?,ePlvsKi)kuVn^7dCpԅI|Cz-MyڟJkUfw^V,Ae+'M+U7}M=|QL=1ed!]/v%^K3ri^3KgÏޯWxQ=wz`Nӟw_9 cB)<n˞K܃chbkPBs` +.^b>NbJ``ccQ? }T߾8v{`£{۾,zcwͺ=O}x !73P88l=R9}]~PPxR޻~zM`~y//!j#l_TK/ |M: HX1bi^'Wް~pZ-{yh=hZx>hSg5İ-C:b';ŪK!+ 備^ӑs fxS2 {O-kb`}dm#?!9UcCMp%n#sƪyqqH\W`|OQlg@D-N\Թ7{;-{>Q :GndM3>Mj%{eh1L cqɁ%[?u[nScб&*A;~?N]Ԅvu"^ܺx#/q͋'n\r? t@/;%DB)+oZ>j<{x%IN'չe8qx7z8~ :haEZ'xOM#Zbh bpb:{p%ooǿq׺?l]kF,ͽTw!&- Ydž .(EAyt|3_k\Ԝ=yQs@9\"8v; 6S#&|G ; +!7pc- g!&*gz4OɎH#('Yj1V HC24C5d:s~©I:326O|EGtP sv8a܇,Gsh-vŮ8\;6mzVw?#<&Ai l5PB⯓>bՀ̴ GVcyr@7N34=Jmb̊ Ah L - ' +mͣ1vq :Fti65u,ȚZzSDrKV0e! ',ns_0a<8IA;P 0}.26Gl6ٟPa&!E6&<*4A&d?aHKNZOA=RӈH.h +:HFPCܽ8,Y՚b]2F#k4e]0]Vi{dh/(U҂'p zn6=Ko`F$[J=kt[!2 EZajOU''%tzTmJUZZd\ckҌn#/2*]W2?<^+SEou n.~S"REJT$ϥ* +IMJՄTJ!Z.FVɭ?-N!W;]-%FK׏'.)sLJĤ*HլJOt)y羽 n0U#*-Y%Јc2A.A )Ȳ$hŠqB/ +Y3! -x? +Ƿ. + + Z80WR(/qI`-0^\вKF̝읷>- Y$"88vI`6%詐 +] +[tyC/3??嵙s.X,pq%*)4`ɸf@K-9nj%џY>O}~/<}-Y:dIŠŋK,> z{Hg@NYrf Sn΂sozgzwwxww@ 8.hp|_{7ĘxOo1J~;wz;'g/V-]Nf6 T:sd52ٜi(P&55k5DuTl N@mţ{ aȳ7"LC"j:2ȨATz[T^uyfyzsjmZKsjS*c*S|5ZOrԟ9ɡm ;MѕPJ,n5_CI*-KjSvustNsL& +e4EV I5d[C?߾\cf2F4D@u,$c*r<Ey(]aԁ+uQrMd:LYiL\C?WJ*9&eDfkL uD&DQ,G*4YjɸQb(./S//SE((‹a+K4 :jg|zТ,iV"^aXV /Tk"Kt 8XFйTݵ]ѮGߋ{dh/~\Y{r +͕<\)|+S,ɹhrq&}vM$vǓj5-jsZSjcj@6l#^/k[eI2YWnZsJZG)M9u{w7n֭ފ7s 55pU*CdnJsjKZ⨷WX +vڢMqͩm:K:S:3\*\\m:uk1bWcW"Ŭ4GW*eer]dFTZ1{˯G0oc"K tf{:.ŁV#-T+9Uc*LFweRrDpbMp"Zⴷp jvUQKN#/"R>B]aXaF "A0L|={JۢMm4e4M8(ma-8 fZjK>{Z2coc+m@7Xgl)40_QѶ{?IToFur1@œY"Wc#+c7WT)# /;1Lc +JmS6PzHa)5Dz-Vh!J5uRVMYT[RMkt+qU +yX}`" ;'( y ~7S >lsttɣǴ>_s/_,?_/S|o +C1iizȬ&ML&&s# Ȳ7s^̥&pm*e׃ sj!ZFWɖ//x)|:Xj-ZOzYm8NG]w[oI]gN6&&R'Tb"E\їoxL`h~@X$i-HY&q\[Kpq9[ɜ-DfKf>5ME\)ok)v%/,0[]ܠ?o%Q|L@LtrIÀ 0%3Ĭd4 _eRF>/ERrLz#fnqL#Nt&u:Cj>y.\$MZ-8'~?-%RQ@Q}) 0<#¥$p+qN0ZKzCz]:]j6y|vyraxI<&+^ \N|/M\C&RDr5jpr%'5 `adA Y`[~VEVi*sAي5y'_{"輼_/$߽&&w`"}ՙ1Uf0]N[eST:ep%w`h<;b2ʳ[ͦ&˨KJه).L؜$id>JmDJkAM @ h*#"^V# 6sN `LX[V"_")ELytg\#,ZKf= C$zCf>u-`RI$sxkA9:Ǒʤ +wkP= B5X (L9j<e. 'B!d1`;x٣,i(KCD#q`A*R{koǬ5bV67K3+k( +%?[ ZsGJdonllmoLX -TKh"!tiDd@8?L;AcF#وgos7CͦMlH5*mptn"`pD ޴,@Vk,^ Rkh~HZ} +'8 ʨdm4AX0f762j PŔrsDŽ)0oZ̨3}/@a%W#B" yȃVjtR#>>Ē%ֻC7}ʢdn2;Z Sț8LLI#بkR$lHol+pKAߋa>a1Zz`mM&MYMZcJm8T8)d=/T0I.УJ )HITV#'Ժ9-xV,o%Rsv1ސRЄ( 5f 0Oa˯/0Ӳbm:U38 @E^ecY()@z6o) uPLjJUKsE]6q߅a +S$V[׬\P(#ǔ(NT_.$Qf=t٥ެςTg_,ӄ+>Pn^a,4Nk 2 o$7bM?-(jʋ;<&%1R 24A!LӸ+i[Ct.H\8JRMaʌpdQ4CG5YMTF<ɔҤKܨH$Աǖ7^t2QNV]a9IJCSw LoBBA/A +ʭ&"PQAePr¹)ɐQOY_.W-_ ɑ.JωKD@`XΛSÊ h.c:O*:,12gC5iF8gi֫W+cdˋe,Oc{? 띟$ZzyӫYM&4GWiJXeNZmI^cI^;*(uјYg8y&=3ievz:^OV )!, [w4>S (;'ݩ+n{CܢZb5ԨUJܻYnX49д5BVG^&VgT>V5LAp4g8?(a@"xZ5h%tx0=L7 +nlI[)FDo Q =rc(!U|5lQ)+6-n Z\06]-a*.b]hqP>%-e#EhZ=RGI•_ݜ7wc5=IqogHvMF?Uv'&xk4)!qdxtAXB},?zsݻGYѠcvtDŽ=ڠpkT9yF>vGR %IsϚ(F 7"TCi=)FDsE^.E;hR'ߣ 2spDK41D=֎ CLN(bbt&i c?Nʍ*C~Ê}X 9IhII5ehB)ER=P%4Cqp~67u+tRA' {ߒqϚMݐ͡% ]0]@vtpA(Mk'uGݽ:)n jbBk̶N+v1E'׈Xq/мεf(烶ꑄr(.8 Cd&?57XpUƟB4ɜYlM\ZKB15Ҳ|([@Z1R'H\=S GQ=*AB9j 44gq"OVi + xNG4#2 ޏ)-K+TFaOIY_ycʁ?/k୳oXYZu'}iD*ebnZ~oZegIeN{xʩaF8~$w_+)ulp@cky!4ˢR`>@5,d}IHz!@IZC"kP܃ R9mc4y4.ER#x11T 4>C^%mMELTCbKZғ["KTaL axNwǿp)k[s@S¿O8 "6HдrkIRR$@lC7- +Zǯw/Ii: ~H}ɳMw*]M“5}tI7A^ZB +( ,AkBn +@*E7i춨'jB76]%q7OMϰƤt > +|suhs}/!rf0"48 .FsP!T!üZ`$:i"a`j$KCg{Vnvcf7nAlԹA"4jѮs +cYvyڣDtpMPZ.h䎩zlꈈl`MX{]4g 4AȀoSƛ&i p/?j3[!hF?}2z Vؚb@t4A3L>+ BI mL>VZ6fxb IC#xԞNWx:6D8v3"MTI@cI ]j$307TfpӍNH5):>gONeYf4$kMMd"4`5FqT A1K;Z=cڃ6~y$>9wh kV9ՠųvՁIs3M!=ZƛiP9fkh& G!ֶڃ_[p} +%R-re_OSQɊ&]T˚ 1>=t7<7Mz4dA +W,$wʜ2o94 HM;U NE7iUpQtNIoqԎo_W_?鰇atbdo@ +NhjHȚ{ ."Z)sc6FbJl G}'&D.|xW:J\xhFқWߧ bӲ65* ¹M(zx˹ߙx2sG-MW -InRH +/ICP*?EhdM 4}p]x]kr^ DSDC=ԏW)JGrv$ltN2 wR ^rK\zK}Wk?|'oσ[֨Q%g ܠ{2A⯕{@z|)Mw7._yD^믽񫟼5{5&pz){u&'z%Z^WkjdP)vV"tܕbR-@s8P;5>VI' +KW<ìk{SռJ!|gjZZ6[%ݨ +(:x<'\xaOnnv0ʽTοF^G誦ZǼo\dMsnTgj$jl`})ԡ3:xyN\oF_к~GKHJO[A:͝ YIܫ7zo;.rą'ڃ'`|}ߜyW~|G|oʁraIɷ6iIť5t5}ztV: LZ<}@4])ݸ%TN(L2>NVw +߂}HRa1Dol&}u_ͺV-ݨOՊj7jՂ*dz9z0m9Z9kb?~O02~_xg3;?wz+*Zircuŋo6WJB]UOV?=P~> Ff,G,L{L1>` nmmoL"!_WG3ztv\e|O϶zӜ߲ôȰ=F߻ k}Gִ|\x[bzUk%PT{U2n9;iΝt fwc'mf'uzej;tJ7J[&7&vq3 be'H,ԫ;)3]T:v:YJ|iAl#Mlnt]'Osb#Ѳ'bU Tµqi'Ov$O Ol'Om#OC]{]u]{DWwk:߫nXs+#_^Ef!zgc֓1s`GbYJdC>%z@'j9`eWw[>jZï,Ț@lZIW^lvOZGV1Yu4̃j5BKVOUSd4M7i_^JKOPĿ]Itkli)f:4M;EܠSAVN6)c\#@RL4'H :w.6|JfzxӍd 'maxD)ӀIMT\ǘեեT;0S.N}f'crZ%̣+s`9=m9ЂP&9WXǟ桿xgFdImFҲ/#gdvV@_R K{a 7͵%n4B"=슧etg'q5+&H9)q W旐۲YQoFhM )5)3o>6_(,yh&)=b<}x3'N,i5-愀,Re|Kx6$7)n7Kh^@ApQLBKJv# 3jZ_fPEV[XlK:z7  k@FdMK;%WtE]60y/]DAE%?Eja"1 /ܵR3_OНt I;c' +r5@7'NI,GU%]>_ho,%'"t nS#7oj"%idX) +!0IPn6 GoQޤMr-"uwKP0%!YyJfOHmQqO0KEnStQ~wTsppmHʡмrxwPpu?rFwxf?]t~r5ҍ.@AECsy|b{"쟓@%D~aJ†;q:VUtƗ"cU#M<1#d}@g^ĺ)Am6'͉ I.t@*&u󚱜z)U2.'_*,zt)Ф9P +qbZxlN= +t n#a"\Ԍ/jhbRt rrI Iy\fC #}cMl,,@ +"l2|HԕX ۏ +} ioLl -a9HV-^0Ma`Z2h "vWBaygDfnH{a%=*r^vIw ֯V +(zbĚ;9 0[؍۲U& +nk,MFPmmQg#KE+; > +94h)> Єoqk됝"/*FPKk -*\41U"tZ"քiB?iZ ~:FE[@,GMnJma%pBU^-.zhBt$^x2`>PeDд {W,lJfK +'$]~n;!!^+,xPdaw[;yvH>֌cM9QY^g+\/v`aWJO#D$Z̻1AF惀wFukTU9H5T-I }Qpȼs"f{PX͕륨~0[%qRU64dQ R^9?PÂ94ʨR4b vGF桘|le$|[iKǹB\mO)ʁj0v:s}iT~Fh}:9sزr);Pm.a8uG䶰Tbl +gUN"pzHj4], `Pe!UYP%Ě~)?4iguXl82N#)6:i3gQdӔzyȂlx^>zS$82+V8ZsC908UdXЎ&T 毖&/[#+5S#vc5(Fe+.MkckCpx!Bϐ8j, O2V42Fcڑz0*A;z&*kbQ>Y_7lI5I ad {2¥=QZnK)J{Rݟ &Cq`L=SB>f3ՠr0U/ +_ ԟGgV`G")t$=&qwJԝ- Tlplt!a!i4* {>ɞ`/[sm&(n)!iHJ?F E\؊jUpgn:L4fi0LQ Ndl#ԁ)pw +;V@J3&uCI0?EE]AS'.gݨW25Id@EFX2`J ;)ҒB֓cHMa +ԫ75@~4F9Ji0nTAo,GH$;2 +TCS8˹T-/CBkD@l~.K jPzQO3!THin4B$ؚqF:= &=jŀh*Л#bs؝8[FJcAH4"/ OxIG~dl&Ȱh"kBntBGILSJ G[N/o;=GQ$R֞X"?Y뫖s!dғ`)dauن1&iFsZB}(|kĎ5dD y? \s@ǚ%]tYyN:C'?O:u ^N=юf3C)E~FFKջ{g&{3 !3Bׄ}zX=TQ !:'w5)Gtw}/zd*;_T&&MrN~gP_lMJI5.m_[ Q8GHj#e@6(=,$qJ\`XQs.> +stream +xڜuT\ٶNǵq]֮AdVFSwjwL1^ [vŴwGi<ot#SKMdjj ]qӘ5gk2`Ɵ8~!{Gƻ־a?;H2}@odҡsjCp8/dK{NA+ ÷]/RKR"ڵ-f cţx+TΨ~+aTCzFԿۜGwdϞ@0100|9w8HS9c8(%xמ|׶ND_ 2_sِ`ޥ#2pp_8%a/UK^'ѵk[,V F ё>⏖}?ƛ.O0Ça=rxM:d:x׾tx>s8fhhޭ-5/ C CL-,}Vn8p"%1pڝL!\QSkeXk@V缣bV-07l&Nq͒L9̜tHxx^0sԡH>zaFkXCa+]} +C(PTY'wYXij Ds>4{4@?x|ji +/5ڊl}Tys`hb>p `!65a]Pt(IX~cьlet1 +볱U 9jcB4wC_qp8@ MGZN4[GXm(p菖/9@gYh`(-JуG7 Bg >N6 <+t,L9 SEGse?Y@S L޵u͒h٪OjNuuA/I;+7ei9][bl)Bc/Jh{e(å +Nm=,UW~o{ wX]h`+K8uW oo9C!LS}TO| ?g]C8aY9pbz˸C|}e̯Mvi{Wƙ11,MEۉo:9{\yWR/].,zxnK+$Gs1,o:T)P_J|$;5*a!rn'[Za*fdžY3${.J"Xh8>$t;̝tf!A簋(П=%]9pJڡ)k/P|j;M@}L+(ȡbb\Xn9!] N.{ PEoes!/߅sX5vJjΡ@}{x(!G{rz8lniWiu1ʯXpX!LCqp:XZ66uG'`7P>*Sd+! 4:~?l{\Gso96o=wEC_YT/iyeю9ls *x]V歨I>$7 !8 Tཫj7J%ovޝSkSѽ,7ԋ_ EÊ)̇Ҳ]C̓VD0\o2'tyӗ%3\CXo +tO4z̞`sX(nfyul<` +z)G=]?:#/WAo5j:;V1ebrmhN:F簶1F ΍&5_`:?pqiVR!HԠbGCN>"hJR!G<;5ٹ|!6m5-^HQ`kpru[,wR{)1`)8@CQeY||e aaE{IKO4Zn&|] ' |{c ]9DSҔl#nێ:uk=.m]: KН.|hztݷQ^֢Ͳ+iqĀဘ!ﯵu=5j86Wa_+|WA:tqcbL!Wj|bFKٿ>!U<_D^$GyOi|x9y|ͷ\a6#/#_Ȅ3k[jޕV%Uw%U-5M_RR95e-%յ%Oh}W湷?eqSyEsiU{iUGIUGqe;Fۛ +ݛʦ7U_RRX\P\5 5۫K+kIg\׼*m@}i,*|B÷]_e8ןf+ξBBNP411cPj  +[O'YZ }sۧf6}i[Ne[Ŵ/^"nO3XkjdA@2666#݈?w_4Ʋx%K-[㎝;w޽sמڽwמ؋߽޵޹cm;voڶoӖf;&NĊx.p!&OIGߊ!k(:c f|EK.]q˶{vob=;?Aw_um9461344MqJ*PJT؛ +MG2KJ@,)4 wP_bծMv1_ߧ2D~%pCU#t<@qNw.p~s=t3w<ǵ8r! ( - v,!oŵFp">̘{מհ؀D=H5I>H{@9R5=nN{NEg Υ޾SP9bH"5<@F0%@U֗c4(C)ĚЮYmcşGEg,o3]&pK$niKbK"Ts9Ep2,tM.E.'O9ឌ:'I_\hRqŚԌ۷ H, =B}QcQpT[Yr 8Q~gmE/?wh`hQXݢa!c +Xq& @c4:n# v Uu "ڇ{ۨ}Dv2=-]Ē`sǑ\z$gFޔ^^^WrqqM#ɑfKCe!Y૲Li`?]wYuEqY&rJVfS`FԊkӳ{O! | B2tRP9Ý#У᪎w!B!ętN!rmDZ (S<>iQbTLYa<IJԴzŊƓ^5O)R~;v#WMd…%ZЩ6uH8fW3WmyMYMU emm-MX&*<s&sY"+*tW +3mtC( fڒ3|_n6ҬlśK,-ߘWUmxUGQ[<`5k8q$^X<"_{_}Wink#n)#op۪U-%"*_uSyCL #{ZE3]tѧ fQe3,MfY<}zk32S2S +ܿ_;!C]JVEϗ|k3ظoSjU͌YfaP^5d"!:?cSm>^C8:-ɓx-8,`O ǘj :*@}KA27d7E9,Ui@,=+ a<5YT|ٟ n6ZVmS`NR&F_/w8LBBaǡ  jl]_m,~;<"#mԆ;e{v{Jn5fo̘Y~S_2Ej>qy)!٪ ;fہ_K꾛]M0ziakMe>ze'Wg:E#Z~NL~{ZGkK,`9Z>kv]/SޑR@ŧGXNٲ2rh%*& [rB[J̤Ӆ" w!@Fe +}R8Ή,ȑ(<oq-^oh9eMff8lh)H2MXʊ1g$Uy5jƵ3KMatu$!qjyb޶kONQjb Y BabZbu7A ^dEIEeJíD2RدAFiѪ[Ȣob +d 0P@q"$(@y.7u|v,~8ϓٕ5w:wP]+qh&(11.E=2A21NUo]wKG:'n)]J04կ藤ʊ[MVN-KMM*L^vyfeV9Wx[5 %OoxM _lxV0,Oy +< +[ے;{Ӆh=k,)qIbEQ6:SXsAljٯ)Ȳf6561mjmfߘosxы|[a)COj:o}G*s{7 l܊3`+7~a7Y&C%jX^ju#҄Aפay@#&N[XpX -apWw[jah (C{qq q#w\gbMW\}68骰Cϼ^Eo.~U|} +2SY`̢a>x/u=|ъ99,sj_u1$x{O~2Åc˗[MY:!IE?uXBrO]HBPGaGI" ^*Iy!t;N"({\!%*1gz+amʾZXO)(*(xg15N95>z֍9l7)CC㴴7 :S%mIUŪ(n=R٪&FFV]+j(":ap Xl>6&nKgK®saJȓî"rEukl~@&2z}2r9N{'sBi?Qlt ַ7*#-ɧkXZ[?>ӿ7>yݔxݗ~-qOWiE4U8TLYidRjbQllL"”(VP9jا#m(6pI% && & g @UAX $% 2;yvs"y,pJ`yٶ}佮A3=OY pX3@!JSSe* _uxލ>mȼ kbC]lOWTW~ҕB@ѐ7T )Gs@'QIDXʐ͎o/>TلЬ#Y~tD@ +TTd[_2 +̙g +,il@ .~"u*Mʳ {ۅq$4uЧ+Wg\UpSC:]z]t2c98|e_2>tZAާ%ʮ>>W>RɏtpʃK_PabZgAp~+g7;[(;@4# +&cbQelɷ`Vgd\oN( [1]GŋQI Q9C)Z>ezŇI|I#)Ή $,X93O2qhOLsJL⸞㹜x\KdO<&ׇ$ a>hӵ 216(5,#WʦMg}04t}崫Z@ eQxb֪y *fk3ӗʌ,L^͘Q2oIu5j+%q:HnkHJ*$c|ؚ5[wD<7h+6h!q,}< Azن0 `A$6 pM(H ?8<:ɕۅŭp MZ&==f~z(^්]{+,]E3ci/^0lQ)qJd-q zh@IQ 4e}^nk͊U.__n}_czAUY{뀰$kFwdEh:30UbG^jۚgG7؜@:L=:r$z8r χϛ +EAkx mhvm۝w|e3y6MFF5M}q/MCSv(Ҙ!Bu6V^SƪkjliHԒy^|_#%װC]-q?E*H\%"U?.Mia&24DBWS&DʉM6l=&P[\x$u nρ>| '>K&w]K;v\|!+ٷ +շ9l0[>R !CL rhD5DUTTT?HQ Pp=| :XB3Pk?4 jBIZ`BP)ZR*ըZ=[DjL 3Ï+p<~ I4ݍ͕ՅՙՅݍݕͅo·J69R6:R7;6 )Mδ=Ԁt_?\z&&>LqރB;=Ri&z4:|POȴcR(DőGQ| y7nCP)i$XBB ||GEQR: jX|ݾNnq)-o Ii?p*;++q551DUQ@5ETDGV:]&VuꝮKy=DqbivPE1T#Ĩ:Zx<+ T,R-=F!8($"2*ꖺ޺澚ޚ>4wS ԴtUtV7wT5wƶږ?{ȲF FccFSCS/ {##3c3#3:dɲФ3S]T~U)o;vַԵ"^vxrtޤC w-_e9s̙-gbJsď)fwb3LrZL͡k\m3XXc9c?N;G&OwVbrSc-1ĉO1 ؎/;|2ӗ=^!!q7:a8LcY˜Va k)hְ5[Ew>!eH( +hh6gp>kьv-ܸé6Ca<u0:a€w0md~ +ð +[21K`m0H'#f|b ,Zjͺ mX~ÆI6~ˎ':BǏ6&{OG2Iy:X8z]-/&&%^,^(Ҟ/0bbB}[$+|oh;N`J +qwT wTwI5gF==[I*T>PTJ*j}@xOpOyO~]tm|L ( +L)O")De'WX&pO_ƝaKͲ ,&cs8pm8N:l CV(讉hs{"Wek M6:~N?δcfل¸|}&c93m6~ XsVAL k ;}/ygϡZ~H9.5dX!1*TBʉ5tBb"B.\9xq]>)Eү%!GMaKdgo6l}ɴRFtj&wO6CRcXxMt] < 7T7 0"0Wz]~]#{ ^@'5R$'C 5 +UGhi0WUYle`2>{>"4Oa#8L"xN8Eq^/YC9$3U7ɮ4 o!bh}^Sj?-?_wx|&l5$0FX.* UyJ,90 zx}IIxW2gnzjpxȗz(w9D)&k*1v=~p@azG +CDY,^pOx#[݆_O)xҡ埕 OKDrbhʮ.F/-ULz )6e+͹Ulwn8<@gC^V +r*Ka5%w +&@/zvI +ïsE>0w8sn044`_}h$;̖̈́c-!i]<" ##rQIdWh6/.Ӌ9p8̐>!'DҠ$?]{u "A_u ; AN#T +fuyp"E:MJO-!Ac3Ѓd>tr\WZbi3fsu_[12\!!*w dJ0R! &āFMqT[܀ ΩK,CH0y'y ~JwxRs@V4E`(E7Γޔ&KoIQ0^CN]dya&6 G,X_KjFs?Z4rQUG[w՝̡N/?s@ͩ a}KgFX@ڕ_DJ$17/D-!<8t;rg 8ߝ B ցCˇB`P,Ua OU(wB\q q,\뢰,~pyt;<=bHGF^Ep~-q}KO?USf65XKlĤbˎc  Ӷha#"Fcrpْqt$::sC'. eb)L$Yk>z؟ y12U=őS4s€˨v.4B#@xi7*yM# `EuHsMd&lN u! + 8ԫ%oHп "EՁqo.3gN|Js ظ|֬dd7lɺ_9\bh8m3w|HGC~iBeI@) fò|D/, tT+Jϳ]'FN]Npl}w; B=gZڳw}Hg0 qAb,~X6 J\fpqܓ'hǣ(Nr Xx :9Ҧ?8mxuͽ}d Vo3/Sd,}gOr=ʺ[^Pu*drx%=0mˉ҃ģ#>~eQ" "_^nH:7 +'2+ MfycAǣ##i $L+nNCklRCMVr>!3%A`4! +- +/.Ӡ .\+46,!-M=Fv#;FP]X.qç(;{v9 HajZڦ䐢z +I"{X/;iUѠZA6-:%9C +Sppv@*?{supMAT؆m)# ly[nCH:7SYor*s*K@9'4Osa8삉p[<nwԽf칫`uCyӧkHseҵƄj;% s؛[oIi*s}F ,$>&,,,~rXc?q`ҡMyb>8gЊ[ >9 }Yy^9v"z<|! +87瞧m.];Ot??;4$=}:i::%@kt2c0|r {>-r8Ox9.OOH*9G#,\G\=;Hp]u:j@rz{Aw<ѿn¤UV1^Ľ>NQt8!Xh?OvfȉcT{D>OY&rw>u9ҹñsՠ߹hauCwQmׅZ٦f3pc_7V!vF_vHʉ(#9D419r<#zo6A#V؏XR #_q8U[J̻Uk6>۰MlJݣ-uMFRӒ∄'kѰ_ ~|ӱ\>z2Rm8At >*D=j +>*!iNw©'X>R 䔝SqdmEu~w^> X#'cFPE:qG؇SJPGAH !فhnB'ca":?KڵxacֽˍdKc_,-^t2c2suXXb >8b/6:4Gv&:+z)j)E""Ǣǣ_x8S,)zqNȵAa>9\o] }nP?x8 \&6l&ji#4\1,Xhc4%6B8a:eWpۛj12} 9 %.'WfL>`4c]~׾c}$@}6lG5t{:3 󟼇~#:?Kۑݱsc*۾ Vj+)(m{Ziks*,UZb + լY/Y M6Uӯ'uO^O :;k`G>=;]q qɡ-NVA8n>1m0o!pkx9ɻjD p<$0/w t!n?9q`~`cfMk~q_+fdZb˽Ò>!*zCҎzboVcEW]TzE]ԙ+wZqhfñ!.ǯ(wGJ]Ν\~r9{'޽=_;qt^;ֲJ3BL̷Vݰhˎm\:w=wУo[O.ukɮ}{yޓ{5u}UYffluZ⺖ +H +0l*p"'I> ⠗$9O/S|F; HqX@^gO\0І)Y;vk; otv;+HV,,Ɗɒr|h7vpԱ~`zm[}p`3Z z㞾7qH?/1G<o_pL_:c_0 {s{LbԱ]uzY|"[*]znIJ{y~teh6K/MTeX2@WWߛ+ۖq; k;.eumYw-`Mhi8e]h[o2CXVǷ?^mеnll4кH[`^9(Bs>nEX8W%jپ*=\ۿȆԵq0D]q^?ro<a3aȼ#[o pFEjl8,TRML$50K`~A)9C _C( XŅWx x"Ѻ/~K F`,pl ˵\w##;ҀFP(J@vReJunқMwbܚ!kpkP>zlK15gı30 +c4ʜJKFi%֬Ɩ@ u΂ ER4KfoXU`Wm=Twp# ;uGș'z5}? + nLMu1h3}4r`q"JG X"^eQ~=(NߤKo!U\L~VĄʘHk OlO^%%Ķ/FE8(}F@o))u`NZ25+ȇ9sr$"Sxj_Yh% 1T5kf?ENц#v7D IDE6@RmWt=ٞ/3~ 7!"0y(y9aIhq9pHEbMbh]!RUZj-bB.GDȞ!:o)Lā8=yH9S@̱; қWH t>T4&bƫHjl=^w$Nĩh W̝neZl˓ky)M˷d;PLB- +;-L0Ə# +ոH(C"-&P"[ +T!acuI}-!MK>-7\=6d’SZsJ[Ni+yT# RԸZwI)jޚ_NlS{93`Mt-Ov/~ z}H^( 9%wAxE$9 k"$uS1u~'R(SLv(b*C\JPj#"jtI #ȁ$82i%#f=p掑ɫ\]OQ-1_1k@`(r=sĚH劷;qf,{R@z  E0|Z 0?a%tE& uщ GOex ox!Ḋ!GkA>:cW1ޒ95 +endstream +endobj +355 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F17 452 0 R +/F48 463 0 R +>> +endobj +356 0 obj +<< +/S /GoTo +/D (section.28) +>> +endobj +357 0 obj +<< +/S /GoTo +/D (cite.cellularA) +>> +endobj +358 0 obj +<< +/S /GoTo +/D (cite.pedersen2004complexity) +>> +endobj +359 0 obj +<< +/S /GoTo +/D (AFN_AMN) +>> +endobj +360 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F19 454 0 R +/F27 458 0 R +/F42 459 0 R +/F25 467 0 R +>> +endobj +361 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F17 452 0 R +/F27 458 0 R +/F42 459 0 R +>> +endobj +362 0 obj +<< +/Length 416337 +/Type /XObject +/Subtype /Image +/Width 523 +/Height 528 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 476 0 R +/Filter /FlateDecode +>> +stream +xxgqK$@H$ti.qU{޻dޥU͖lw^$;;ZK{y]fF+;3%2g̙U׍MPq3+#o9s#'2p kL"Kd)=Pe +o _LہoD`yd(y2!qI2g̙po4=$vkݦ*{?+,3%"}nltsv7GPp#)$ixbmpbmn񕞱e\%\׍х964:8CnjllhowݪUq}Դ֛UeyW4+k ~PTۧTXӫTPݳ+gv|KaMOAM7WT׫T\߇+iW*mءip桭*ZA%aut57qcqCLCmswo>~8( ζ >4H l*}iW l88bh48AR6 D-@@|]uW a[ F|8z Vqh |A g#@lmށX8j F('L끨!ܬد.(mvA: [Ӏg:]]QPvA雨fthߐٯX; G/V ؿ.;@H Wj]9Fl:ʄh"۫WnA{ǗzF, Q6V/+h3g bQG9th^oⰣ~ {fQ#am bg 9JÎ@Zx,p@h24Bسr ; "边(hֱ-[} +pF8ҿe8Guvw@L}-Z@|I[:z#>[qԚ[Pz f@Wq1Ez+뿦@ЈbwL4쨃2;;xv\ 3@]aA 8=P+SVe# qj[hQVC-7;[ĿOIpVztVzwvbǔa:`8q91{@~Co}x݁v꡾ULbk =tF(1W e?P<x@4vjqIĎFxfk0}_b:l uPa8z<7}h :|]@]ߵ+]qp/CqP;"{:4m f B#aBوbag RC(waeKG9+5pd4`G~Pk Ğ9x?!R 6–-v\Bqz3Q?/]P?PR߿rփq@vQa3;f |hsҶ{f>p&;ӛgVf@[!`*-iXc),{%@iO (\܎@(=,WruJQj{ F,Fa`mg >o oA_ECQy޿b| n%:0ЈL@mF@ 81o5bt30RbWE KK5@̣cU&ƞ;]w;o7tޮ@®bQEY@ cA Q#v*B/D>Pv( omJ:Ьl: &x#L 9lfA)K*{v9H]f,旙pz9˜ZckȂ;(xVs_a.jZ\e#Ddf5>B{82zF] +EH,^H^OY2wf4 +MDEsEpXZ„bQY& Y0}(p$:@8&P +&ʟ +8ҭ%n|[`n39( mx:4E MQ&Z=+cˠ&ycc,Ŷ֡ya`e`owL7tOwMwNuNvLԶߩiCnWު"ܪ$WWeM`Taa~x!PX<5 +߅0\0CIniWq-#R:CmCt027kƵ#2u@aOIbPZڇ:Gf:gf:G;ni:UQAp>ZQg)Se +uH)>IJ])Ds̮6T<͚B_XclHm;-!%]67qqVhY=#X> +yZn ʰg <7G/P b*\y"wyҁ`&B9ȁk;h%5w"oZ;ʝB8S+$XfO %ygya^`Z# +`6f3iqhbu핁R8X 7zn,t.t!h: +SI;{'&A睆ʏB㟕4ݬnQ2ZoK-ݷ;w7;m[=>71TL>3>zL N,,ve`M 0{bjw{VU獚=c=]7ACߝƾ;o7i깍N<L4Bzp#Hc +MS̓S-aGզ[`/ex>2121::q7涛u:6Ѓ,N{Kss8lܼ$MfuǦHݶiFg(7f3O@>EaIH@EAm+UW<ƺMd0WWw ܹJXWƜ!fH-X3k쉃4/P^L|4Y݂ȞFf<5kr>5sb̸^#[T5ul26䛳itfmd8 h'We0p{ ^쿅>ہ?ݣs]s#3 d$vq'Z`C`X ;O9^9^1ja_F ~Xu0Riď7U4 7 58_>Ɣq=ٟ_w5*1%C]*>HYHyV5XZ;\Z;r2d`h9hۆPR3P\wޢCT>cy4#]3mS˴7Sٟ^ҙ^Tblkcumsu]K =ku]+:VWw٤muUJCZs;]V_k'(]mfmu t fchmh} mۣ9ԵCR`z83g57|F[o37&?}7F/~j/Nn黃 B*cj6BYhˮϮ*4|ܧ^M㖿xR> $L>D:z&`\9~ijy?ՋD*?OܛKXݎ?t:QaK, ^ +ZM3ޫVN{-^g9>9x賴 lz֛}xz?_^ zN{y/\'/U/ߝN{O?%{c c;E݋$܍hۈ蔇wۥm69F";Qvid8M.H]DvH#;$v6iX$U n6۾XOi=~,>kskdamPPFHܷߞRU?fKbM+m#gS6\;.cʱie\xJv<4., +gñNXde +,m2N`Ʊi,ooUQyLF+WVBdi0n2g-I`X$2-XV[X'aĴLd E<<b馱4`K3PuLX]2-篻sl2c` +oVhIĘ].fVk;odWfuXB SUUoNߧFyn4a@ԉ$~ZWԻ^$hDv2oKܣKRS>yנJ׹@ߵ%x^yT a{J|~uU_ԷV[#HՒ|6U@S% +WĽ\Q)IBd)C#ƍvWȳLY&( LQ&,xKqb +WȻL]&X].*%Rģq/Ne<*[5߷Iw7sh5ICO÷4e[fr/ѣLZR(s)\íkЭP^$(c]Anq- {a 8@9_'p;lX,RW$nJ5w>T9~sݙF\ +_̵H`'sx9|\1O/rBAQpQϹκQ1nM+sWig)')GIGgΫgs+N9Ɯ'[=ig6+,}b=~Ukd|QP1?Xj˗-Ҹ]׶t *A轳2#Bڏ^9Àw8e@)q F||B02..SSM}!"o%%oE/Oyh@vw^utB:tT_!w +}GoLV$dzR/b/{z>%3g`igR>3J3^T^Ӟ +g6rr|Jԅ3SȄ ]ۛKD6Lmc_}#UGͫdB] +|'iݡ_kNO3i5wi7)i&DFQn8Kh)0̀g5[&yhE1/_jj~WmFp,ǴnJL\]ϱLP*-[,x|< +pA[7gF\L3s Ҹ\dn'R&YtA"i:4c1Zr 8l,6>3q&+c0cFRY)^ +Ka#h8:l6*h^8o5La%3Lءט~s}O΀:xھL-?e+$6lL(]=r%|%|%r5A]Q +4=O>Eo #k܈g]W:uZ9vɉE^%_ $Z'Fi<+INuFܩV//]Yj4)W|ɗ.y%/e/ +@] 0es's'ss䳮s.k緀眉g`za)36s .nK Ь@ Gʏ_;7AzybU_ZK*E!ā/RFHӷ) "%f 7Aȼ@̳I(so@n%sV]2rc|MܦRnU&q,t _['TNbYKROzt?eDFlOȫNQ+Fgi'BwhK$n5bZR%v*pb +S9V*/mD6)y˂ B9LrYm˸ѭ@K9BS0 ٵL֋<<2s\\!tgjS9r\&²"/|b +$vERM:_b'lY̲&Ylif 288Mdͱ(5ȃ-~u2 +KةHP(A$ (IB]\\ :o+Z VB,y,o3IhZajft~\؆_;gVi׷v&a8i^u6=*E"|M&n03:[ѯOvJ =bC(}=sxsn}8x7C +Co{$MbfW xF)ΣS;!ʎTCGĮUbJ1 Neb-Gb!q2^yџMhԵiĪې8t/Η_fݼ+ l{ְ]U|j{ؽFV-U\`ՕbgTrK8KbcȱHcf:vƮy&9\ڂmlc˷[dͳ晀oI*(gOAD{>w>PSU}R~<ݫk#ҍl + /znP#wl"k[ev Voɷs4<1KgLS٦)1d$@,<Rq\Bh+oUUUrh%\4pv,4Q!jET_1g4KeS2gƳHcRd.@KBPfF,8!Ћy [+ '] %kDrlV1>W_8?)c jьٮE׽vLq8a4g&!a &i38f0XbXz1LhnC7AA:0 jAq%z9prLӬSٶ]Ùc~W ;.R%ù@ыur|E20IыE2A40Ql(N$S'μkatPPv0ZE+H'B=gW.xSiî@P'V({  +1ī?t|bطiݾ[Fz/jWQ:enq`ĿCбعq7cÿ]i*'`9hmRU@Pdb w9."粻2RczJ9/OzЭ#pݰ.9U:9Ur 6z7V!n:lx5{7|Z$6^rLɳi<"ލgģN^MFj5"jkm +EV0 +vn8V>**'1iw)E\D%<i/f~!yHVuzI<`VU#s rC-4) ]TTw(d\YsxY\_7KAd,`•лQ0v֗9d B +JEXdx %ǩL1^ PRTXs(T;P/ֹLli$k R01{/kXf08y"ث@W +sF2uVWdc[+ $A"]V`[p &;0no[es-,Q +0c3Lx_~[K iޕLl^X k2Цu2 <,E6*upY|,}\$m "26Og0ysdh LxN Y;w.n~=߽~:O;Q±JtC'ŵK2:S!ċa2̰̀FX@ `v3S*qSdea](ڥ#i#UR60yc*~W>T-x,Y +۫XӼq/!eD6N'0YF j4bQ`fXL^4]/ +n$M7FF5ZAld]d?<?NtR c.yZyt˽ bM8bEGgF2`JeӜ>dBQ +dtWHYGiaTvY' B:Ak~T /e/E.+WrW vZb'⁀Dث^nSR#MK]"mn̠,G CGz@'b=2!^Ke2ZervYP4H)40@ +"uS c݆C$IcJ cǟz_ܫQ=BuRrqp,ud#n/r% uI Nӆww LgP [dp a:g@@J$Eץ9bj=c=ȐhnIк(grދ[j Buy@<f.{Bf4nUbwPU\+2"uβX殛eJS٢&~ ҅\Xrd;L}w# "ȱsBX)qsHq@k.;T ؤ.mÀjtI0A`*5lٿZu+g-Me0KxaMNtBL <`ۊ! PF .xv0)ば*`7*eN7Me%sz1<8[1.w~Lۏ7! u_;ȴWZ$둄 Zk _<\يU.8؊@i.ly`c@uI2(G֋BiQ,|MlKozL߅@ cxp-y!k1tk$0؉e1HS<}/X#5 D< M֍ kE4ChT0}6 R{|cs⸗}Dk0RV/ {lئIt$&6lpk{FF`b GQՃWz2vQ2Wo} @F.3/Q28^EB +_ 6*eMG^D`A, S S?Jb)ҀBoD(BсyI{EIbcpZ[/@L@ ϕH\*$2JYH$_6,θ!O0/ ȃ{6׃ +6ܹEzHzp#El D$iSQq{EybA|)_YOxVU.}8 htK)X؏ !|> _º+km +k@gR|[>R( ܢS([zWo[]$oŏ bO*Ǿ1BNKSy<!q\,{=ʈ5AٰY keu2z$F&5bw*kȭRV!p+@6s,@\f<$a*7?$Dq&$a-Vy/*;VJ!b`eP; ([=%e8 P#x\ }^S/S1Gת +,̰GTd^R2cAgF$Eb"#dxXG66nvvt+o˷pMLsSX ,tς-|` {(]1O^7aq/r!d&gZ6yngAs f_ԷY>'ib{€\%p໔ q~T~ +3gS +~2nw-52Zq\,Kد^ jy7B䞍jܻ^Ӏ4/ShJXT +[9L"h\w(rͲ:T8_վK_r싅UbjoKR.T:8׈kE5j L%R%⨗:&rE[l]J."E `gaI*U;E(7`}{=Lo8w9KI2ԱXT,q*;qN(Ώ"N[\؃|=jTi(z-z%aʹmyTw*űRَ\\"Bl \<u-(_h/.V=J)c͵Zgr< 4DQ"E7|՟rїaFi|m{"W'Q(Џ`v^ DZҸ,\}k5FЊMHRQ {Պ<WD:Y' +EUT/@Hd,TC)EU#:.h:(çI vi~ T-D`*EX#BS!϶nMA*7`\8p̥RX+9UI\j$b:~RFtz5BV)rA` x#\Kp*:\P̵ʥW.] +vqM/FǟxOjT[ep:쳾4eױ;Tf"{j.@:H]`Z!QvLSfbQ/=*Ͻ_ɤι$_HNBB{dY]23ՙѨ.Yْ )$N `$M/{f2{F9s]lx~iM8BFdc}0 0n+|Fר -VK6SZ''L9#LdpT>J`pO>3"uI g ؅_!LTe,@L(N1ِ'4i*U5Dz)MA5PgÏGAPY}b \UM43) A>ݒfIlg;<5z N%LWXq:0EA__lD c|>$s2ݓ=Dfw1=92Cb=v MFKBbKn7N+;΂ӱnY/),&z4RK5RzZ]\Dl2!S +?Dz+ۙxp)X2BTG-Sk  PBWq4ue8D\>BWĔKQ+K {S>v_uOXF>z_ z&nvE_>' &?Z>n4Y ⋮K+=,Jj W݅қ[?*",XrWZ>b|%TE7h jĴ-U2Spt*}E C;9挻NUX:.ܪl|aES +@Pt+ ^@|Y, +5ˡX9pVYlCq+sĕ>btSMfل#j7lg~o[A;WhnԑsVw΅yssgG`F lԗkM3/8 y3=G0e2|5 vQ]$P"C\auf~]<@9-Rqμ9.ɤ K簘{#ld=)oزk$ hx 3A0.+D:@@FZs|}s[ YG!E9*>!a;v;=ͷ@x ! a*bk*VR[}^sj7:N%S f+9Ԛ+ގwA:аO>YOh:.+nz@0$Ypx BH_I': Һ-]fA' j`RI z}D?KHI7X>YBev3!2n|uTXnn [|nM&\Àgu`j \7$Ŧ H/+BV Zm8JmB{L'PE/{Y@K6:(W=̕ Aae`@7ZD:4򘒛)؅H +SRAX%QUb˕%5@'Aƣr}t3 k9@g'`;QC:;]k1홤bcɄ+k ʞtNsL9sX@“8d`a%6~* ĝ6[l|4ۘ'/ @DREq:v`0hQ{0,cQ+6%!]^ D05f TF<=.#4kWՂꫛގs'bj@n@_OhS;.;s{^0lC΂ؖǔ0tjpKAɣv#$kckaE1a_*Vůp ?aQL:͎c9hD-5 H@_ w= ^@x~n"i\h6p4a*MT>Xf8](]V^ݻ?ޏ IfKC"1Nl ugV5N%=i1xm @p)S)\ &VXIVU*cʔŪ +թl!z{rHʫ||~#/Vn p*h ]KTgb ƸC\1QRȸxLst#0UQ&{$'^ڗ%ΓD@@,ktJ@|r_d@d! 6<) D=_N s/y$?,FJo VA巐 e7nB wuK\We%E{Ѣp&8{jU48OP98oO+g??LkwfMJSoϥN颓ݲ,be| +n6Xre$t.yG&`fli<7e> Q!\M:\jSsGA/zjo .ل 퇥fF89!ș:8/8s\YGk ?g;D>˱b8̠;@9ILZă~H,ϧ3Ŵ/K{;I*ƚIƝqw*gajޔ+oʹ)j#Ob#aJ#L0-?fC} <*"r"  >cF cL6"+MBUb_y"|7<ß`LQk) zN;y=6^/Z0ĤAF+멃t.ZCj +%kE#B^:J- 1YmKGs1Un=-͖H0aKX# *vR'+kEѵϋ&<\ +uՊWn e8_CU_]]Ge;K 6Ŝ-={*Szڿ. ʦ~ {f])rκ 9ʌ'άsnCy)C:tغ +V.Ҏ r*pNhhή) Ƕsb1W09N^_޽^7{@H'#Rc,u͹f3:yĴGy|yFz>#cf r1ڀB )-y" gĘ]4fBLH& ]9 9^@a kbZ{lM'@#K0E~ 7L^c0: fnٵ ,'s;y +t[V&赥zO L[\XGRwIuXw0hF*R:"Z+bL)қ'}}xpIr51̭ 06`m[b0:}MkTk%a[L8A۬%We +/ʔӖvrEzNMEj}j>RCJ[SBJl&hFK_[CI.%5 >^\!R'שj+R}h6 Gy`[܃ܕ«Ea Qx/݂Arf&@97ӂĀf!jX o_FUWbJV" +T2%"맗>xtײ@ H kN`3Sբ˫݊+mCčK (ò@ܥPeWeW ]q_a᪸ꬸX1#l !OXk8YIL>zfAD.Tn+$t:λdA!ÂY@(.;88bl]k*Xd78 Ud:*3ŴdVچS[wamWO,<.OmtޞH6l=|*FsƩZ8lbUE2Fd@1F)][V!>XE:Z%C5ʙrN: Xy + ُ,2dy8bo8?]m k FA.uA#@$cn[xŃxИ9h $TfIkJ2- j_rP_cI)}6|(e&:G,. F R{i(cx +q+bҺ&$좄]Ncj]o.^:,7USaJ.G||8Yd@LV@@<$2!=K54[5/a/Wacq+f~+<_ +2ZAz>0 1v~WNLVO*[%=$_X52}J9 QO%ԛ)f\BB]=}JDۖ-:$ zAiinSJU&Tj 9ywv$@$\;||-RKhis'{R+t "o15T\%_gzjM^(xVnx$C%aM Z0_I5juBQT MlKԧOğoKv1y!2#bf"y ?R̸Kf\S g![#wegU*[_:KJ.c VL]q]r]vW\qW^;n\눌:sƖ>Nr8*S6^?o|"s+wlUqRN,giH&Ղ/ Y0Ns/ f% +0Uku%/=0eY=%2S <˶8R{~ + "@~7[r 8yZc<`se =(N;P c)v P3 SSZ+cB!V?)]ڟNޝӅ+/uP?;ԐB/D8ʜToƋ͉˦ ,FQ&75QRפ5(Yop ՚2]H?A';$\;~>>@@ޏt_RH>DWRQX(Kl5jwFGe?Wh%j)v.FX-QE+Ew$}K_ O/ܵc1}oiJ@ `Y2-dRl9ƀ(.ZsD%?Tt] ",!h(E4}xX~BMW-WMgMG-'榳?kɜri~P +tJ [||ƃ7rƴrd=5D+![\Ej?t`mv +ͻ"9y%'rRV,؋l ux"0e{񪈀""k(-;[6~ǿٽ-a!s.ptl]tAg4@3|e.ϬS`Ƿdߠqxa?mN[e3ւYk᜵4"8Qs. 6! 2 \sD-u'qC 0pfN:$, PX:ccv/ry$?e1s4jɟs-Yb[!eڣٺ#A;R +$4#a54- ph-y@9pClcSBnB<4#tΨ%gԜsDDaߘ֣Oi74uG$*DB!d7?o֚})n@NdKitvb8 !p3ׅ.nTjeNC@z(q9DIgu:3FcxLy *]Roy[k?Qlbڸ3Y}{<R؟?WpL6BjڎNCz>dH0a _>ޝ$ťM BVsD-nDQXHlqizRw`!դ~M>/IU:ހthXzԬ5i9*mT6X:&7ӝ wC W_yq'8%/ZپP>[mƉ*_k/)v  qUEP ֹZLPP6NP)QU9KS?':oep_vA>?tl|^<-sT2V*v^|^r틒k5)/=,V\4ӥ V^+۪njn9j[NԇLEt,sp>u+vܸq`7ZSqa/&tb˨t7_iA ^pҳ, M~,⠜⢳ VP5*S~ +(^/Xs&!k|#~A睵~iS b^Kr%pR<(VɁ5o^ +_ly@M%pȞFDʾ^B4m+axȖ9YL09wܔ3ń9k,3 +:IƈIP_I3'\|=>6@ @Uʓ +5.%cM +0`lۍ`#ߧr'v VG\JXck%6һݖn(3>>ǘe 8Wv'۝%\yC_ꃘER} +fܫ‹Gh`;W IN!"ۖMX7締рIХ#V|mW[ Kw~=^p2|ݧ_ڸ?k׀x7^2Bĺ=K18͢a}db+nAz^VЬ7yMJ^$H/Y>qwoҧ#>6]g 7c-BXA>XDb8Aݡ 8Y ؤLóO +;T\w.`l r4 lgw|XyaElΥfn',s_7} 8+z<ʟ'@`ͻe `V^|H?yFMr^t_r8ʯ:;Q75$UuQy t(Yt+f]yS,]&R|D9{7~n_ JFA|J6װ$=eeAjwV6jdp^`^0o+\HE[9Ჽ⒣lQ:(u*%SQFco5R'<ͧkx8x^L,@+AL6xfa:wҖh8hh(*D:`M~&MسFm~8Zb!y}ꃙf:xW?"twM1dC*kƀ״bUbO, DѴx@gg霳<4:&$71g0-:qPT!D{4[Gܓ6%o|c'ĻoR>|._aHh`RmĻӻcG}Di=47u 4D,a3EKvY8Z]XO<3iiWU/6穧 :"e5yA`Af2ߴG)%1z>߈=`N*~~ Xg.Յ4'wݙ&$.AЦK}2@6S@A.X_h@@xHvi"aJ#px-X41!th7dt 3I4V+l剌R|[]pѲK>^ݽ 6(߫ǐcpUԚPO' Nנ5MˆF5^v*t1%02 sO}~g_?} 3o>i'""V\dt3eV\p]B_ƭJWWˮ=}J Xva'?98doDL[Ӱhl- .sD5|(WlΟ2% ^9KQN(c)g3g +<\'/,%ҳspG"e.T\Cnj ^Uy%W;o!!/X(z >X@H'AŖRKT-cNj@ pΊ"Ev^+@s{ɢ p "KGSvޙ7锌6*Xa:&5ӺLODZn\OK @;r& b% ;/uw p[ cȂ(^Vy/ތ{حTi7OcU#u|!h z@:R_.քɔAY|#B?y16Xc ~vSџWAZf܊ՂyPHGW\ڽ(OZ#+ +tg?;>r4]C3p?>ܴW\-uLgNZO䘎s'LIݿxUo>]g)gPx%MgGDEHG pUJ%p577u7\uם5UWeE5.8ajE8du[[LT`%}_Bv~M__āqV8:"5G4p dҞt={Ӟ982tlɂ"8[e[p ֲKLEdъ#v9[ބ-,n1Cib)/650{ +: O2T2jvܝco>%bk I.'_R@A+.XHjOa+~̱p,JSp1W?ML_}ܶ͡ dbMP)-ǫ25)2h*)4H~tY:$- |ȟ䎙s,9gaFׅkpFX\ uzWz'WUfϽA=p15|\WkZAˋw]dR9~Eu1i O܏(;b3j1e[/͜ލr3/"F^ sԇE=1KW^C}_9Vd@d%(dk `(^H\uGl™G8n 1 aJ >ND?e +ͩ\1ʁ]IF 8W;||6|^yyo[ uӗTubL&Ki4HB NuPX4k@q8ͷ) 2)Wz'>8#}/[|}Q {xˁ2MT "WJM oVȇ9?{AhSnY@*,qL` 2y.Vl^%6S?_p6lA:Zn습pњ?cL؄#v^bhVYgQGp3'x[ϼptfY'jMs,ު X:`Iz$nDoWU5777HKm698![3GƖx{#R^1sQ)Qˍ|ǿ>5 @D>#xxܚ a|iIZK%#:3<G0JvCTa.8'v8gYø$Q1*}Px0۸+͸Wd?y\iI&fÌp\;%`Ł]Š٤ ; {L+ъ blI7rKjB8o0FVCrӱ|z'G[@%B(>w||;6LZ)vHXfLl`ﵤoe! < A&s!hY$ ҁX@CI'T(?>4p׋хkhw&iv$k" Y~1 |- Z\/xDD'x::I3Q0rFL@8)=Ѐ8DWJ5Aʀ\Lt-[┧ 4yӿW3i ԑz8xw$P޺,p=0߆{@vSj) D}+.l[S, \9`G½"~u79s_Gī/m2 tp#YÚ_ h`@Nz^Af"]UApF"ʔ%0_rXC{{l~vBx/,g Mdz[g8. yo~b B}lyۧG?s޳wgEvޅ5 ++">֍tXKJkh߮+*:+9iM&ggvDeS00QcogƿLp u 6 8aY '=H;k:x+.V,:,A@l5KKZy^}Q欸(]AX. ^ D!:u{c2Du(׸;t@b +'85&u  eD8H* @&ҁ$Ek/۪.YblΛ؋1vI햸fSd>\Pd<"3w{rZtOvtڰg[ {Y5 &Hz*f"MрsDqL׈_HnzGn+5⩧۵9պSƄlX / ޽VsFp _|n[x'<' 5 +mh&@>*4ᅺ}?٘j @Pp[AH!#ꌴ. ɌPSY%s.Nd"O0rZ K! jjWȕ-P&:wn3or/Є Ke'>*L3b-N)FS",{m;wR;t6p*Qebiާ|2{p`iq?@5{;V?SA "P'Wu#4cgKxSgt5k9:Ct2pta) qCZ}]}Us( j|_yQzV`!Z2agOGۃ+'JCbPC2`K?)<..&gP9uj:;>74Rk't-:/zTr @ʯYjjJ/8gly0*p&v3$RUT` u\a:cؕnڟI@|ǿ>5.e q[֤={+Bt!vg!RE[Qx)'s :]o -3+LM|4crɤ 1mISؗC@X 9,=l(܄ ^o’s"wuR+nԉkaS9C}iI +\y7~n9^ +ь[Fch tIiК9dCֈ9gԜtakyc4%Ѡ)הEکVÊ5DW"*KRfozG-N5^}@81SM@2}t5i& 4 =o,`$ b4;Ѝ+@F#oR.@B4dJ?pj_3AA1:*g8oy&ݞ+E@$6:#8`M(SiFVVG=&em˗R 5ru8nSbe?oyG16^K /t?5ئ&##-{o%gZ U crb6R] +HWv'Dw{쌹Ago~;6xY, D/C=S*DT6RiK_܀$(NǩC0D::]J6BP-QE_ +~(y ~/Lp`goodso'[@> <)lW?.@@t]0hD{5757\7]HMP /vy=#V?d9n{T#v>G}xs@|N1{TpmlXp-@4$t@U\uTG%ܰʘW4fw&pgJ:|Tnܟ߁:'@lqׄل=^|%ӳkH\p(fA8]4oZxd+XL$3HFqqxN%/|Ing c&?`.q׸]`Hl>\aI@Xg,D*:ؽt l2ôMóU~*b}a?}q۱$`6*Dz źdcl>:O|!V;BxWBF?CV=t~ܛ9h 8Sֈ/"mKt( i,JQpo0mҲh/{ꭱT!2'~? j䩎KuQU>T&t`>39-ƤF] ԇ,T^jGjs(V}H3_98^H! rKTzSR3 *ZWnх^FHY f}r#Ά`]:**D\<.\]ޞx}]?у5@D DtepAktlɍ8ڐ &^lo$m)TĖl +UL*0w_r0;vSuPѫw4WF wsVrTEUh*PFV<֥9N-DtLDĩ%Wj ŪB%rpҩNDK~i%u{K'~Gnؕ/W g\]VĪ|1@*, O::9BCQu F ǝivno SGi#vn5~z| ϸ#òOb=B.ΟV0GXNA`~iTMJ E.X5y.sS}"⳶!N2t9] JET1' -= ^g~-h= j^]DY.LtXۘ탂ݛ1o[X 05@N%3YL0ކ&r:33TB`I`Z,Rlq+Ǹ&ka 1.xD) +y{9|&=,=B-齘rq &Ug +Rf{x*8oK4ĔF~f<," LL17da H0OHFhvC ",va,82dxzcT>RYhT!H;,yzKzsJPb/9 xa ӳ44!q0{ۖTdB ( ++^lMm`$G* a%` /GTQJU᪶*=nrP2Rr7?ՃfaTf{ RZqi6 G%2 !;=@(i8y-zRƢCl6L^ A sLi\:!Zٗ-w vb"}i :B[ig4 @~sxąfLs5$^W.UE +T!Re`J@2`MZytt5>RdܟߑAʹ }? wq>B@L;+Td? +`t(ZX-Z]m4H%=-|sB6c&1kƨm%sǘ/%- \;+2Gh O ; bMƸV*ݒI'ZM Ӎ[R5- Rag;a/+ =\1MxES +EL w, ܄Gj1 Ƹf*i0J8Ct.φ=C.ZYC֠M IXC"0C45 SCxmނN#iE:7XpLQC@ԛk #;TDދ¢dDw7D~'_uL>w^ 8enR5Xa(mJ2 +:68㊹xs6DÊ +uķB5؇J}XBu m1#ZMd|fLa26|>iIIT^tP毜[FV +Oܛ`kw VIgx=f_LSY2M}[ V^i@F\RT^AU +/T.`q/Y\ + rW>"'?ySA|Oqg_g>)TXZ~:A+V;xWvUIz%UpS*T !Bi~wO=)|-@݀48uū'{ŋp/@dr&ɘU4[t}.{B#Ӗ`2~&a9Rh:1Obb~pyf]?5JD)IrYbE4n]HyW H1i+^$5Nb`ev Dݸ3NtY#Ը_!0NLL/^xM1@8q ВHƭٓs\QsdČ,Izk I\ +aѰ%c,VKL3`y nfq:oܟgښb!L XEoNB8k &̬DC+8cr Vi,T p8/օ飪Ak +f_#IAzss~X賞TTJɍ\8wP@ wH`&ǐ ҧuR; Ր|e,JQ?] .ԧd t.៣:_m^W)'MܙرVc;A4,`Sl͒lɲ\Rl'3iNLb[ dgwę;ݵ qQOѸ d\;Wfy׿\#Yhi/]@tq[3z1]#Kq=he~Ѓ?sT:m+z=NMovQ-N/,mH6rk .tr_5ė_0n78wbx p@vk@C@@=`bDMxǽqrԋ0xĽn4ds2-ilܢhMVkQ,Y?_fOW񻟿ʏـ!iF]>{.o*ƜN&^{? +}w>{v5Q$ ΃ᚁ@|{Mԁ2疗>9I?LRew$ی?A茕5ǫl)ɤ7+sWm/}w.--=o{@;}jz^Kt]Ov^GgٮKIˋsۺSiձb9XJSTt;sۚ d2S‚6×v_O>ȣ_Pٻ/ "A\x调 +躖BSPF٩֗R͗MsI톓z|J0-ٖ%ebɤb)jVلb%b*D @2~eapb)4-!Cl:e=Kԯ$G`c DB2/Kɺ9=#Fʛeh6, Z_sn-㽩[n=f~0I$x ||r.om>Sq\Lp32 ' iŨj %I&€@ o0"m9gbҩ07Dl +V` t~"oGyI6ws 6zh]~4$ocbUvR,#qd'DCAjHnXk#saLU¼0'Fb9a0/lFOS E>feo܋Ԙx+kܢp YdZnFa8t/[g-#Rev!|. *&qt'| %1۽6$ +B8[vɝG.ߙsRMN'VO :nV٭JB9QNgG5󟮆w=06ճjڣ('h=>tZ]o)f6-^^G@ؼ$Ξ'Zbl`8Wx'h>8yXtBnɆbҟ}>՘~I5UxG6+^Q;-vyְ^ߨo vm^f,o rطuo~x$o=M4xL=OPOC?d?)~w5;C?~NT}NuimKimTRur';S KR3$e QEK,Vs'N#1rrn{`@=Hwz޸ӃwB3H_Ct\Kk4\I7_F;M瓆3il BB4.URxZm*k.k6,$羋kW(]X,`3 mIqmmt~˩svZ.'/&/&-s dB{"],!_JCp*%L +QdB` jlHoXfh!DD +\lJsw1@C~MFWCyCYTK/L: &bܑ(g7 +>-$Kq\J]@)!a "=~%y7 ۼ(%iS1 +gy6eF7' SXFhSh*|(׮`꥘j% K&C 0{ o0$f"ҩ '@0ʴBU4pDcub}Dmnou1JBODž["vհ.5KAPBX9uSAx<V:`#am[su\lus,W ++/xHp; NrW<$bŌ at~|F.GSz 3A|rfe <~ txV4Â1-2_{6ϑõUUpٝr)PܮjU vSM\2Fi\OxdcQA2+zxCuѭ^A}?OY$e Yk+O|$s_3OӚ8Օ/Us:|4,{l4P7$y$CH!b .Ȇu.IKnA'>lA6 ɰEd: +빼ۇXP:  @#@ +џD)TR}j??$7?{7 E5V|CQ|Ƴb4Iv ~N;M/.m.uSIűl5&]&E w&f^IΤS R_+ocqñؖĞ?YSK˟ h:˖M6|NnE+|mW(^ޤ 4ɯZZ^J6_Fs/Sg IJB/`pDQjp~t!9q"5ъhES1Tb6&@T(}`g\حZec "uCẑPpP: >a?xH"H3\pz. \9-Nf3I5;!4lTתpՠTx~V/\:ȼr_7TCxO{"<~'}^EG[n\I@E+PmDj=ot,o;8hNoNd 2&Y0BR0#]Ji[%Zg!&&+:孱"3Vޜqۏ?PO_p*MJHﶾ|ݶ'g/{bZŴ_, P0]@\ПKNhXc\\0q¢H{K;cњD.҅KB#Y_}"_,8{7&=H/[27q3 tHY4:П7[}6Hjʂbt>! +M=Meٔܶj%UKōHK)mYtn2tF +NDG@1XXLw,y>Pe<Sc٘d:*脹ap5:!Kf)QD/ljG#~`!@^-#@41\q%٘a%,-FHx4 Pгʹ|m)@xÀ?9OAuyxCLLgCTW˽9"oZ4_ED.n"n=tGd[@2̡٘t~ :^1G L*gA!\X9 ɦXP4 yꛇrQwP"puS1|L<ܥ̓=4 4mbs3~z,ij^@D9WMT؋+JǼucLX T]~fhpQ$]M.f_<DŽElA&$ާVY!#_pJ y ucAhP2>8?p-tݢ%s{\n7j0P1jqͮZF$4:u*fnbqW ln@cޮb + Vo;_V3}7( ^܊;2v;Ptv;nAhA3;(F;[Uz`FE0dtp0i<|y? oRf^7ĥ)ϗw-_*#h/Mc/&ёN>iËۍlkNmןQVO׭DKIbB-% )t1=lc8#&+;e-X)^֜4K~1pY_{PE{PL'4'; ۦPxZ5a86Pl +J)xZ-%GⅤp.!M_8g*,DHY.}l}3^т! vO샠ʏ6zg#t٣QR\NKG!/X:qI4YP,@a8,!PM@(w%Xt<i +^ģW0 }\ >BnS|/ +Cl6f"69atȚ` @jr Dټ K=U°1~gv}hIus{ܜvr;ݬv7fzhMBhp\Fgk% F]Z@uuk?m-'Vx9rG;797$avz'[m?E(:W+L.fO4 H~hp3(MWe@hrz 3@l~J +hPڂ`mM(QxDȗ;rŮFC}k[|f_Gl8}5f?\.tG&0v̍/ ~tl,Pךlbu:3r b!N>/|v\W9sFt&Wu]tG8Րc7J6N4NJiO:F:=9֜N ' d))YLImoa, It=>l}AY`?m8{~!?Z*6 4b7NEfg 랉 ?ʀsH Si$TT4GyQg-C1c `7J:^Xa. V}:u<ʺ /7?{M5 j+x$( @AX(#hH8M!(#a3 az.!-LE +،p {O'GS`: 2 @y =9B7Ͷ^^ BfaTټhp7͈ Yw?p b77/p =AfW (H-ARKF[er,f_:gamXm?"9p\`?^x$k7IMnt2dV.|n/y/hGzOM@ `hW(mn`lHjL?{ez"Xk<ȽqDF;6;.y_.:PPhﷸh. %]8+Ԏ + hTVVdvaNn "/ _|yɭ2?ިߠT#ZY <bMdɰ +@h.lVTH. 2*Sl* 6n| YY^ϒ>l@ίo?ؓg(ejzbɄre[ i4 x6xv[wf48ҜJOmHu2:VOV3tHE Ib_H &xqt3 y;&68vxhrԓ,@XG RK\Ažq/r1X|Jv 8Zݕr%+IŤhJ4hH)7FSܩ$g*řLcw*LizOK[ʼnf‘#a FDSqBBg1\~4lF,Ȏb҅d>*fc*hLDQX9c$#00a Hb3 S,І!ggNs-6o8"{&, Eus1>Rf0hО 1 w:f  @Ԟ0+ēQv<)P+Pˀt"Fm iV7$ +hp4hE4#P7G qB vԎ}@!?'rR$5ćQYݬVoV劍rDr%hTV\wTm#& 使q+ bo;qpAv 4i8=>?IdTʓ)ʼnXR[IJEx1.^JӢŤx ₹mHϥ7D:sҟJ#Fqdf2y.s0^DZ6] ;i V+CH1xf+8`|Hp&!DHi3eODsZ^`"EJV͑mH=Dmө;XysO%G6zx +Z GsAAu&htLr'8(O1x3FD@.(w-/~po$Yc6têP.$L@A>1ctLF6!#TT}:yP1A5f EC/D P{|` ;~pj1VYE?AyJ`CL2CL4[GhF$h 1D !"h? J ?*Azvh]~zW|U´ ::ʹvyG9E@wDyrEnñ^ݝ]E h@4A@0 eN! zRo݇{}ۏv+ѸܤV/bj ~Y}5[Q ;O'6_U w䊜8lfu `. N†(}DYSNG| 20lތ=trZ~* R麩<[s*]yL ‰B'q@{4+b<cXVE'5O&U)(|?zWt+GyA|ɽf}￲cv*D5;kElsڝiDkqR; $eh1؉ \ @{8]PL>G(Mb#W_B=4sط +;A:,NTw6hJ(ܨVn3CbTo h6A5ڭ,v H f+(;}$=ZͽAwqw+@د=t`PHݘ)R?A| +DJ=x:e8f +vN'cIh4b LDJqxV!O%էS3)tF ڳI͙m?/|l}yTD{P+V*0˚1 岾DuAX/}0.AG'S)ͩdZ}eKX4r2@IrJQRTKO%4Ǔ h]%/ߵ\n8L=6.ІSdd} '*dr S-ԫIJB4DpAd}w _@KJq-IVu)RJ+QJDW,@dD:9YMGĎh%T,hYL  a J~؇(31LFQdlWSQp=@7&svx^0rRbG?qP!PA"u)f_DzգJ1|  AMAP;+A8n #A*@â1P>O\A3g3 rQ.GÆ(%T64bG18}>vÅq^?NЮ:OAphSΡ3[!`}@ x,&Yb!h ` ]400;m  Vǃ>͟;`Y]>f]AF'.F0dB62+_GEj+=qAH CeY6*CI ,-@ !&7\3K @_XYFlGGkn\x(*r$z>2SVfd~Ҹ;ڄD1o`62tlO 5q9zWFF']4 +Xcqףݴ&a6{96?BDPûuq_/Rx_> T!D[ە}Iv%IBJԜH4]P~4(W0R WRciT'-' |,& 4Isz[sSϦOTvԧ?ў;6]J.$% JO-Vb Be֘XBb;_x$kWOW!(R\ +jBy,<,r\r4*= vl,r uGSuh +l9-[﨎CUx!C\ p(@Ɠ`="(X1|!X h{uo7nM닕Ywjn!*_)IwL!p*" +4!0L! rtanqnipRIRdRu iѤb?1L!KL *~n3b*5-h)14(;=)p\o 0ODx2( 'SgA ҹx&.Sx֒r x4t@̗|K\ 2)c/xP`/@#Aw-~l!*ڒ w00x\4b‘p 2sxL:I hFq{P6>9ϓ.6Z"rlu2;\/^tx|.輇9$>F̳Ah #uY=avoya(pzH}p3"CMSq]bA+[`5 g8]fŕ+Z/QoB +Mou13S&*ꤶ8Rh0 VpEf0>Z1L[bwXAVwawaF{buAc~=^a!>2!&T@|gʏ1mi[U qj٢867z3 ^k"B~nMEirnE2dbR&/Y}fŇw;h X 8L[>IU$q^hk3XWxG=Qn| +Z]EZhA^`'j)hgA 4tPM5y&/ ->| +So7n<\_ѻoO={Cj?i'R6'%$(iW0O!{D1!.If)3q/$sI|Z-^.GY1M`$c9`Li;Z/7Jc9ִ]YYkU{ەeǸ1l\%%^k-r&Bq8g"O0Q  &<O&PI7͟Χ T9DCH!6 ݋SbHm{ʂD>ZhB7Z/}\SsҞi Zn S["0wm10ĸcap15D#}8AJP܏D!m8I1Ҭ4g`ƨ%Hн'J `6 T7zkYbFXicG#0o837CҺ7H RN$JWҍ7i!F?X}QZW&#Qڣņv&6L@* +PxNr韞.xd7eIXmD&!?һL4n/MHVzȭ>J[b QB Hr[Sô+Qj[d -AbSD@ĦhC9u}~i4_ylo#{eXsDjR9IFՉ'F{a ۂc4"d>OkћjHdZ)5DmA?Kh + FPaPucR/W!{yPFkX>4kϣOU\B)o*W7jTM"uww{ktHpmj@z'$sd jR-W*ԾJMRԄRXzY,l Maiyz W7>(}HP&6kdbQ Z{UfjRYUUW׻T*Ry_]]V{oW U rT,;T.QB@8rd36715:G'(XiI|/`JAMjzz,WrZ6Lvrt\ Y<JfuZָ+U2X-^"KF>g#yr{/[2n}6 ~>z{ gĞ={==+kN2;(F8hgJ0A7LY`;`&#)P: a6\>c$E(G{1BV݉:$3UݑjOTڰ6%Pq׻V'KמQZwav8!X 6/NƘ X3L$qX1 F(m= ڮ(خ!) j6%HXM{-RU+[ph* +s̀EiUծ_/ӓo|Ws-J5I{s(#k8B +D:FE"խ"EjlȶqrW )Z˛@ +K‚7LRc1P jG~m~rYH% %j;”(;p6$!\aBK»5P!}x5Ll4- +SL,m eHYcD.ֆ4"ޗ_>!Os>$W{8+ _v!浺U(C(DQK, )h2Gl,&__mLHF+ +4SPe4zwq=\}U"@+-Re<h~|Ponh/|j_MV}aZ <Ո^G һ{+:oYT)ոK4.4J*Ӻ+tO]tʝ 4܅rX;_*; +,@G~h@^$( noX7sXrطrXlGٔ` ga8p7AN:6iT-H5b[' X)VaWHx)^fJ }8h/z՚5DC{*|[~;og_櫵$̱2!2(Q!̿+R%v 4@jkn +W̡ +ÝSi " +C+7pqCP/P4lnvvj*,v! ?Jl#Ɇն9VmV[cUheS.7p*3Kqen@Ic!P jmP.P|UJyW,,6G}=\񞬿wʳ97(V QJ[ j o[Bp%XCM*S +~P·x u*GҞ9| tD:,sJ'kJ?m~_.Yuŕ YB5Ă]LmJ҇RқtwH=Bk564vDj6-1 EM++h8#&_c1ݮRM4qgܯȴz.]l^W?-TosThW7` ":,H9RaCeF|%zoIR)yJ]z{ifnUًpi +59$' SvO6M졲G͗t\0f}}kWUmoo +:JB|5JnDRp<${aVa&@ 2 +8>k囇$7^nz\m'⦑=}bϣů:kmcn)P(Pqww7w7B !F<Irߵ>@K{W>#ɜ>g>J{efEV_yͶCOi3?\`߹[6 U'DQjmOktjv4NwBtR8yJM:O*b(t;rJ| @q':@Twe󿺙We?# SwLktecwU8y;E{%{%eG~فqفyٞyɞqю%; - J +V 3.xy8kA9f6wl5V ۭgB"*WJ)hk)S=#4%Ǒ/%Ke+ƩW+VKKVV 2,-IbÎ$fN>gN>kF9kF}S2 jBP96zRIj'TUƎ8220r?P -sDq0 ?xXn"?tD~e+\kVz!TT޿WWdÏ{χ_2R1H} ˁCH;,Ld1hQ l[h%xaY!C2KhZdw_n+U{P٘?!▰ȪO +^]OtcV;2t9)\ò=ezt/n!RJ$;HtG0U;?&2{Hw{Z.ܶ׏Θ5f7qTIJ/c JǕơI ev1|Z©òÇKAj> ;zPq搤 c+{?ݷbgՇ^ "CGd##GFM2們C0pPf!ɡCG$1HF Teu<=aU["}עT/T;"{ʾGRCR}HQ8p/7]A?Qb Am)B(/*xV !12eAOTf=J[rV <|zdQ?y;sR6ILK +Z'?$=G"E(hEЕFQdt)(AY?E"N8I'IҋBה!$sIjiY/[S|_p͟0M8viȊW< 5ZjB2}@D+s-5g9gAmiF9 +#kCy:2JҺjjϘEmzOGTВZy/wEܰ'yld!fjE6 !sjHDVihYDZjߔߤZfФa>b1~"1)M} |^ GHQZQ/xV7p.m-ebԽ /==xMW)y|Fս_F[4e9{tlZp=  zھZ>SZS|I{w'԰?D9%=ƕ'0&1&e]_JJcjw|Fq=E==xJ *W"Li9͂\2N sh{wfzܘQܐ^TV &FWb/1ui˧ڴة.WT"j6RogaD5/m"e,i,awSﺮu=ヲ]/^U]~|c}oJ*hY97v5)[6nE*i+ױ ӱB/k~_4D8a-[77t沶2W0m߫:|C{Y状^r&^*8/]@CPCwSh[.u}5|AM]:~״|h\|sIU+AoY|Ĕ)=|+޷e W7]a-k|ܘ^\VTVXoBDP׭Yv}qwߴ}-?߲mnܾk6Xعf.`k6섖O>ɧ|ez`+ƖO>@n~eݧ[}m-b h\uXq7 ob-[_*V}/?t lm-mܶnnܵnεY'(H|[׮gRH`˚ؖ@OA߼v浟m^ٖwlشc?Hk7~y->۶nöa?Yh/^l]n_|5ps'X 0mn_v굻Vvb7qjxvٸgg.3%ZXo =AWz=UBB"B!_PXPPHPHH`%+Z1* +FYlZE/#, ," UB {V' %$(flomQpCw .(("xW nw=П(,(GH _#(z-c"X}`'>y_P 4$ڿ JHh7~sa͇TPrHy!͇P +J,lݠ,2[~Pʟ +ltˏjJ;~|?|{۶aߵMhȃ)Wد_|g[+nC([^ ٴʛmٯmv?*A|[/)m (nޫMm+ l߼OPm'[@C5Oi^7YBK~+K0j\sN/^qw} 7lnްa۞k6׬\=Mu[ \EX\[umY 6ݗm ްnj<-#B"~~S&X^hwue˄K΋pWW ],1Zv_!tN2"{^ K# 8OL@agEY3b&:._4hhzA -E.^2lޠa^0j[7l3l59'_,qtlҶWۤ2jZ.*nOEEt>yZgɳWтs:.k³I)d]*>΃> nTSKKKlmA1P&cGXƳT\L7BM +DqZQlL|;׼tȟ BDPx>f ֩auD60F.hGkBHNnQZK- irgTaQY&V4*2JLE]ɇL6ƒ-3龕 '_S:*>4Eo½9 +2ZYEYsIc {=w|.d-gVuBF_w7~ ATvd6-5o^jwYLB"'q蔳Z14GQfiD15hmakEq(z8[= Z$T[ݼCXJL"3T躡L,Y2չ]O#'{PHO~AAaAAA" #48?BXpH8A!A>^^NN. + +~?N:cie{ 0_)H ]tÏ;*Hx'_DA~#p{A@|C8;|Qr;;[(١7+YBS|೗VdA +8KcYf ,\*2zs1,,hZiI3x4DZ)r'}7DžE>͍FTדT6H(fK7Od@6M  GL86y0`1C7[`!CӎDSu)vB+A hQCjj!:A/i@yWf1釓#Hz)Ftx~,]!M'cFЊKPF3ujE Fj5B +u5E5DV )dUf S>C-DӍx1qy_8jժv?V1xꡳd4@'VcAqv[>THADD @B@=gkގA F/+!?ljmQl9H oݒ AG )- A :bie( =<G҇ꤼw bwxyߋeAV A3j\^г_O2re/~^ټ{)iʹbg9@!k˵ VY,,e&@:§sITE2@d{?}UQueeЭVi 4u:U:2E,pӊ9Hf1OB@`f,Ӹ cz3>Т;>^8K$m[^ҽh)kL>OBx'mgq̀GS `2,CQ40aA1 eYL*7G?ܼMb~$5g3 ''Y\yte4nn0aDz,bY(I"hfDF @(P$M/JӹOAhS5ht`z(q W7O,}o }k +wjhvnЕ+Agϝwtv  C}B||^GA}+H??08A:u +?Nz->$ W,)A ?e!H_WBA>| JAB+)km|6D0 0;T%Vu ͼfx{t{tgdwdgtEnyK\NuLFmLJ>bn!U+~W +xiOd.>ql!I[r)`9xN ?\ʱpޱ8p9]-z.S]6kͱdrl284$( Hf'% O ⠰{j}`#i +éRӣ_j)biCbfrv9Q\ u,U&-3Q;v*mƆ),X#eȴ*n 6D14YޝAԏmsy?G5Aӯk~~seڤ,S)LTu6kƳN]kµJF'Y&q IB"'MHfD6>gYaBs{;23L +J{o~> P)onmojn02  +^FEMiEWp{pS{}[_]k_s+_SnӌlRە]Y^V[ab[G(,K|Z. Χeu]껪zBmx[AWSP(~jXC,GW 4U5V6U,Q v4+×ڹƦ>+}=n{g]HP?)| rmn܋hZ]deCPhGk'w}Ş㦻O㿾&fNLH)mxR&='5O뻪[z:[[< ȏ>Ǎ v׷+ʆ^f>?ug=Ok{rK[Bcʽxݯ\i UWQrvUiUEz~C/%+lꁏ}w7nڢM /J-/\)ntlzD8ЃnN5W$e=J40C>K&lf@>d!UQ?5?I]F4~q+a;r + +_9\sON00.w*a`8"xN/}W}IdE,[C<˘_'e 430c"kȵ@`E<<d +GS #z4wxk=< + +AOЖL"IF{64W֛^4$)2N-P^)=Mb,DxN="?Xm}N-\muou:DàCIitSa[416CqXvAs[,5IfM&qJ8+Q:umcO+z*zJ&Wx[Npo1w0wmշi57L+j{>H~'C`Oj"ȴI*4S@@`'U5ZfI"s ^,?Fh}㴞Ԏbmgݙ%m*KJKܛ];\Zm k j-*[~$xozgxAMdϻի[fȌ)kp=2btaRlmPγLp_]myߛOǯj$VchwiA-7}."c3J˛;z4s=sͽĮ eD$EAXLqj>1#u ;Ab {@oƒ'yYm)EAEEwJ=]M]L5puRժNU9s ] ]PߢTM뚫m$ MSI G ߃άƥ%$e_LwNu N4V$&dŧW;}u29_1o 3wl9>jE}3cs1שx޹xyEpk0G8!GC>pc;qs]& iYO&q \ x y%ԋa%]x! 1 ZaK`KbC. `0Is@X2v"`AO7BBXe*2AH(fq,Wzw +Չ`?B +l!k6i̲L` $`4U*&jaY"g1 IL$PѡNS+u˥g/* mb |F0C*uZ*旐_,g1 D:&v Dw؁tY + (Dpv DI}h~YmkAЖhmhi[{$H+߳t>O4`V}mvvo-7RCʶ2_χh-C j0l > :g 2{D/r*o3OF#FtW)?S.R,TuMJUj.WJX[ !2 ۇHI* V%J/-Ah6w䗎DB]aIr ĉTye)Hq vDSx,~zǨ/樓$$/1A6LoAZD7&ޔxW'#:mkvǻVmڢ/`.K_d{_֡mGCҲKA}[RU|A 5D|CCAbctG>!w;L rJ%rJKo?T{UrUKrU* A+;"tj :I) Ho "D[|DxD0ܜjQXU\([w#A야l{`ipE?FX^)gWw̻="\K \Rs Q@(XLqG8C <" Ig@g3g=`Ʋr-2w~}RP _^?cPi~3iD0萀xr9 =Yp)D.C‚}!o1[|H el)i 3a@B4qS+)&l`~4\\O^y-8rm29֙\ "`ɳ+>lEdpĢ LcFT0F U#E5ܳ_L@HJ {(Kӊź[*F?{q΅g Ⴧ2mAHbc(&4hGj : @e".~F-SqCFUMZ+</])vx)*Qz1.JHi4XV ~G K4' AsA :ARuTd?f/yV<-QN Y#ހwAZ2X[?'AK@b|AT=O W/ww/v}Px6S}#v~{0|AqC`@b2R Pk;Ͷa UFJF%Jn?;NviS5g$ϋ\,S_U]ڶdι$tk;gkQ bhr#=݃C3#c Uqi5q)FN ?+qɢ5wɂa G#ncoقӗwtG"๕λ=w/??ac!]KRs)w)Geϥ]?fxdŲdl3|GXpE3x0<0/E;Ob:dy\yy,.CMւmفy@efbd,fK\X),d.nnK1 RQ%9M|Q@uΝADr:At;I,:nFuȤg2mѬ>Oe8Te*:ZɎ56^Jfz L#E,!4jI6$"b݂x@o1Zr5mnvS"`0i,j'l3p&F FmXCGVU]}̒ ckX*Oyh:'_{N\Y駢@Y*Qg'%H_|DZ&1@n>RO&%4W)Ag$!r~Rm9&=^C/+08o:ᖾBAum!vwWo3a,V"; v~M6 n3ıHd;ݫsK{ZY6 RX1CoѵB $ޙGCz-bQ̳3RO vI$IT^ dU:E_CݛvUwt` :2K@|; AdXD4:H=g-ɹuY\{/Y4澼WR3D3|Ĵ +x %/JQj{قyg;ϸw<~d1x<^w+r\ +K>%va;f30bgLBwX澹;CϾ&_a,XƛA.! % ^#;r,xXұ`ޱ V*wQ1xk q!pf92HLTM*aD4x0?;Mݟ&IRdz>Yhx\2vHҹ4e.o}-̀DC`+ |<Da@bI5$ ay '@|A?y)~6#݆pݗk|گ e~ٚZi.GonUl7d.j;bw?mB}h ?1 P`oءw>@,t콬RsBt 3gkDe柖z"&ӫ7+WK6[M萉HA|ƨvIgH W.YA K!XWī%U,k0A,Kj+ b}JAP_ wb 5,x\jove[v`WFhWcn'[l#2ڣjNP"[-^8akkuPmCAP\àʲ`$3~<8fV='d+TJQbQٜg.J>zͪkR5 +Zv5Ymk#tb@t;j:fjgUA$T`k{֒[(arm{ ByKO JTY_~ .܊\J^. + ½lޣفZK-< 2H`0]Y.lUvtC]&qSL-P,oq1}ky_ɣ._nÿDhvC5bj[1J.}Z>vh@>]_28g6@|R7ԋ^骓ug/IV]zvNdiʳđThV +b>@h:L_foR$A6\ 5qNU ؁нb}7ToE2aK&9Dy\jkz|n!;gV頬m@\];] LnݽM6;L-wj&5a2 1At%A"D&AR;쩞u qR'jN7\"U~^sRū$AīW(U;ܩzܾ535Pnjnik=2ԣ3=#Ď6DLZmLr:!$>M.9re%ul$ l,>~ bd%8M4AdaQMqQ (].LD9ʳL7OGr%=YS;W y.Y\;DPL y/AyvUrb/ +Ru[]_:X>Z>RPy۝@`8e;B6H{eŖ65- 蛠??L"ݴ"AxtKl}[ii-RzYVTNTZLrR:JD3J"-  ^ +ҀĦeAonA`v-ۡs҇q~NMJudN+25o)[.UsA`͜1AXdۂX@Is?ヸ,RU\8'9Qa~A!I}o +X_{n߆`vݽHvĝ~Qym(3s+A&Sh) 3^+ۢݠ[e.SBLxYɪ%(+T9{-8fjڠS6[>S>UQTޑQܐ_ͷ32S=3C}Sm%5Iy1iqFYLBݾ`%{^ʓ(IAb.vy­rGcP=hޣx޽Vq-`3\P3]. l <$nKƓ.JsN-dk *2xn e +>C>`ϳ_<p,`(@r"WDpcͱll&&1pȤۦѭŲBRn[Nwo3WlgTh\eru؁eŰΤ[gѐ#rXh^ q@dyM5 %TU22BHbzlu_-!޳)nX |pM"CiaZ NdšY(ItpDOC.>&8*y tx B)7r%;@;Ʒ=Ia7eV5?$P;Fi#g- + ݽX`6]{1]wsW^M[c?Aj#c71c zƩ| |^P[Q1֮ƻzv䴕T z;8B϶c:3 ِ>b2K^peqfPS AK['p 8f謔;4{vV5nA٘#@6֙L,&hأp߲kM,zj젒ƴIcؤmM$S,)8i,C/?+4sÎh4SBXD:)8wF?s@v +"Hf҇46wAS2N8*>bM#i? ^ V}ctg ˫Lu#}rBj{';`` ޜY\Dm IoN/-j}:H.,sS)2gg*oi[8$4~k4{(.1 ]ïW0r.mW iW[1҃ږAgvè{"iS]Q/w ޣ' nO9`aPF!wLv4t; ӟ +t-}ЙOdw>(OKk(h/=[0]mZSvY3daDKjۖ|OeLEtedu+b_D0<3252"G{EyߠlԔn5쳛n%%E +t{ I* X(݂S23 {=3 {0p$:{`ICwqMOiu[*ރhV ~1a f ֆY@D@<o85y3>K)^ȹh022RƴNZQʈF]QB8jO$b!j]o }IX(}0PTb*iš%y(L$MU=ˉȢ ++ UrG"q(EFHHSNyWMu%;_ǧf 1U]|ǔ +VW+j.0Q)A'BR,ˣ,RB 8~Βe(Wۼ$*@*K I¤ +\zJWv+]=ˀ w‡`»L].)IEk1WaqcLMy:N_V["=ٕt/8Լ't.9-]%yQ=N/}ck 㸇WEWK +{.=xebphT4r| iha-{ڶiְKGDՀ , z Fg*: `[`щkSv#ۋi(B;D@"9V=pM_b@73+bKw*, +ܖiez8-{· +^GE G .  _1tF~}~ޑ+¡kDz~Azuw >:X!sxwDͻzҧz +[3W;WطfƧzƷq@'vzN~aAU)@>kQADZ,2VTWɼ"&WfD ȸqQ %K_5:ʕFvj/"#Pı(ԫ+W8*FxUd}^*(RA >Q_¯R_Wʁk!WflDJJړcHh薤#`RT:բJ:tGVvQGn\[NK9l,]2쏞:;|7bq=)o/P[6*ۻuOa F  Y@ܟh3L/Fn3@,qm6  ԾA#Ie{{"ٳka&Uwū/?;|F ^CtLW iz'K9{) Z®Ks* fp !ˆA&E +-{~0G@~[2ǗGСsP9(j MXЃJwm(o.=[\͏~֥'v&8N?+9%a-peS#Zg[IbH-Ә"xFf=p[ זpf*dҹD٩D E+ P5[>yg9!'>e +P J9` _%~2Rֵa-R3X]H  5O:\ fY:ee-g #wj8.FcY^u"'volC +p> SKRЁ];Xmmv6xL퓀U<d}ts(ӫ} H r*@5bpXijvOuI}*@ob[(yi#X) R+VBZ6Nq{4F Q|&=rA#$ tfdIxVu6Ӳ5K~|&ݾ G]ďw&G*< nLG]M @ t'A] A8t$A@D6bQu|os( O]8W 6 +㬲x ?A fӁL.L7NkP+}Ih@ӸD_("\L+{m‹Et"Q#9ssFP)!ޟ"C@4,(:}d_6T#8 =ǕI#e҈6 Ƀk~URC"53SBaUb0p*D@)9qYuTgr/02 + +.JT- V,?RKk[d> ROw_{WtPi.  KZa]h}Km_PXe} +B￈)`у70@$b@L3kч,ADG#|ٕR +UsDxWe%hŚ%l(׀xO9PdW8xqp1>$9;f/ H@Ybz@\A@D`wKVxb@|UJtץ \j@+:pQ2Bg 17.y|@ɥ@0M @?Nmֽ bkO^ZŽa1}p}`kH8t䍷֘[$78ţ @t̙ +Gn>ln**>[v-]!S +IzX HgLx:w:&l%EMgfbĞ?8L6%"tq#Υ +\ac0Q:DUy:MԀ~嬲Ѓp"ȼV@щ).;I +*&dDd*3=;?; fex"H dASry̭Ή$-P?S H/Pw2NXT9;4qQ&Y i <CLr"]< 5?E֩CLs + +?rSʛjgqB:)|*8JO̯JP hPCjkd(RQ띖讷Ï{ËkV~y@AdUKo0w(, n! KNxY@= 憘CvqƤ)D֯bĂ"}XgIU5UتČQ\/Zi?W7)pN/a'y`9P3: <#Ԁ iat鸳MNnNN'SM$GqpݴQC|T?!#ּ7UNϡJ*_Ċ)aI53IX:1BaMSyT2dɸӓg@SSOq*V 6ݗJEv +f%`I묦{|fʗL>S\=%]iM:$EH"t* ,n"OÁ +8³T.8LcL]A{e\lk/>Ijb2 >NAj~7O#J(xa8c +Ws!yh-r#EœJRk.ٟDD 2iǎDOJ )9Yi- .NԴu &wu9.Ygd/~Iޜcgn_,X:9L]nC Rà&s5na g'x&/Kd`$W2s@,]PIUAqux)n<@t\TB>eTe/-+VbbjNBLq MZ@KKTQ(qtq,g^kc_$햽盆 2*:F;G$< D*@`Հ !n 1ĕ[ԥVR0 iKP[.Mty: }Hoq)_H;C7 ۋ]^NWw\;^7c-ӋVao* ҃L uR::sj* pa*mPTrdJ(|tJT٩SS'gMTM[HMR=vW[> oI + (YH ^՜o+\ +ٌe2e+*\|apkA@̻_^ pN;^7I/^osd==_S\5}YT@ꫪ$5;9NO> ]zO=<'Ggi1 W"NWg+_s01g֢tP"橀ԧ]d@DĦ,[U$Dq 2E4t5Ks' z.ڇkkq/|ƍ˿ =x{?[HR5 uu,_$Ib}8dqEibT < 00>(<;O|$Y {oĥNG07>سչ7f:8B'ΛUgN`1pTIU1ނuMq[DxaXTSD`iOb-,dYeYEEiei%8G͘Qx`$]dx3L%zђyHv-jgԹ *>p4&+1PKmHE ed2IӌnVD8pX|^[B/ɤ'J=N{҂,Uh Nj& h\ko Ag9Π$,LBU( jx:Th<4 ej՘w.yonl3DbaO(7 CYGoZIX_ir]#} \e| ]4*@PF/{{GURٓF:\iKgS zb.QqbdA45 qF`$4=hwwT\VUJ󠠭OA1׵Rx @u. +EAPdHJzp%Ap!A=g48/novym'k~a~bU Ò!Id7iUBg/$ݙyPJ齛׽ cO`|XºV! +| , + LT&$Jo79*BG7>|1f&.QI6F +022qRU +d' +׀hH'J:W$S$ŻzIEHܿ7ER\2 7 f36aE7~BA5BR;i-1T?]XZJ*Fc,EѤ @@.\L eq90kA'RF1?j)6$;DXB%YiǑ|z~FAРx:Ex Q[>&1b0@jfwc{0jG.}m4 r82 DA,e#w9]q;`!Zq.G.8P.8Dq@PMU1R2[86!iQpwxoD6WHTI#uao1{㎥nϿt@gw]Y@IDM[Oץ 4 @D<+abVA;L bo4tKEP_"t 'ge" d Ͻ֤̕#_l+$ZHZ-[Ϫ5Uz|pA2%!>-E@LHc+W8$9^JCV +5*o~Se|}wJ[O|/r~/Hhũ#q+8@ekt6Kt*wErLϝA,:<ðC*:LhS"}f< @Ƈ[x@ s'=' {7tx::jA47@L j:܄3M&AʤӘlV4p~2ϣ2R||`&m~6wE;o؝RR*p?>P# X '}:|BW5LौR% +gg; ZQ&.ބZcQ wYe1i,60yOi"+(d@ ^$ t \T#ӨmB\x=p͜^>WjH& #D$;}&69Lluu-lCd˝ R 4t@PArR$@ra[IeB ˠT7ٺ3 T{|qWzo:Ͽ,,m.^ wKUjha<&T ,5( !nĈkX %xȀC\{S K0o5h;ܯ<^+OZl|8^g5>dU_u­am1,n1((Ʀ}qTdEmi#]t#O?3 C +A, ƤY9eo.oZ7>0\;V?m+E@LzTMc!g>&:z h=Mtf:ߦb9 6֎褳qVt@cY!w-;v҃YYmSVvԫHr0 بmQ 15OSaƿ/ %&BTD4Td$!"Nie\f@R|q+ +>mrfO(3%$.5@0dԀlṠ 7e0?{Ոn$th0X%b20ٌus ڗ 6 -e{fg6>XCs_{[:s.TKͳ VgqT_f+!Jx p ΠRidyho^p[*I= MۂJZm*i0;9'ZfwF K:,]d@g㿋=5rDe zD+o9 Xx^_lT( ^׉sK%-Mi?=~ot͓yaxA4Ps gʍaIETnq"zĜD3KNm@L Tz h6w7\ PjS %t?q1,fwucskIXiÒ=_ٝClevq cwP>(|"]ݗ/]Oߤ!}(_C@آ( +mi䲐ׅˢ% ŧ\Dt籦!q@ AU6 Is Th>6[1>t^sH9C `{d@pp;Zf3^9X?H&~$th2:f脳I`IsӤTi*e*VaݫRs*Q8k]Q( :j_uuVaW^ Tb4ie o*4 BNm:%t+B{ӽDtC9qDdHMc=f'Inq}! 4I`T %Uyk2g@)CA$1 dfpE炏ݷ Y&Τ3$!OxWv$6ɔE3_[_{O r8p:s)2CBQ$JJMpLxLH&~W|p^ĸNy=+:8$'mu} + ^۱ȘY@ܑ<:Pgon=geG,_'X^lݒ:%3ળCfODW_y!d( #e#ꀒ:٤$.S5 V p_~/MSԿS,/w S㒨sD5,zKt_\u Hx=\α4TqJsl2 ܯ>Y_Zr[w.+7?L wUa:?, h+/iq1z_W龫r9xY|LX:};9w> 6 4)i?h@_@^Ǻ]" V_4&F6褪!:+BU"ƝVah:,<=:1Rx\Jqp, +I}>T?!+*֋q˗@@|Dw6}i}t!1O&ykɬ kYa'&#S͓8\^O8^XE+0EZ tse rAd-7gvP;=o&iG@8V.jUR@-<9> dy7BW..yI] <)Vt ~1KtV;L;Gb0S:b5tx9 Y@I=he\17J_Dh߽.\ +rI@t5ty ^߭\1{,Y0J68pU+O}^l2+5ïl M0mp!@0< uuW._>ɣǡ0Psi{ںp @Z481 x\s}< o[\Y\6AxAy@0c8D. lTx3ikjU!$I2X |@p3oˌ#Oà{\,w(P"yB/laqax0yE6MW7i]1|| a9-p@U>/Sրs#p<_+q5 +p|8kU ˕Zg6YpE:TϑSBDEzHv|,^"xQ2uTS"gGv鬜\;@B.k̯OԳXV(uɗ +KfAY-RELq7@|.8W⃉@xV +|[ep7L@q +1UJAUdA,K>#eL*.ŋʼn'J_ x@ + "THJ1|g4hс\A`چr6}kq @\~UǎYu/5Z;n_˯!=nObHaA~, AKsx镗\>tu@jЁD҅@q,6>kK=5N0 Oǀaeq 8.]Zqهۊwvϭi8ycn/]Ԍ%//_WQ!YZXv=~ѝU'cg.>:|##5'+{@tT +\YA19 <4wG9 + q'&n%"t߬bQ2(=lS(p[\pDf/=,ls +%±@i$B@lraz.iU>+^1,MRSPV\PGkH7A bY1λRqTZ*s*JmrXL29fK]t_"?;{ +{clv.]s+<Desw ?4@Vτ)%{)1e L7NG4D6֨~R+k o 'Q(uWx#z iP+nȽ+SJA.Ζ[eMZgN( +80eBi(d0]o=XÌ;ʮ˻|*Zi#)L?v+㰡 btACp,taAJ,*ހj.»̹ɜKebUkHc-RM08R$1އs]0 @2/r'J~fR7O*С?\$@.xJ^,s=:糂<1ͤ- I,6Ob,R,8!6vHuo|(>/6\g:K{uͷ4;}rFamXmZ7T (jO$1M¯zGa c|:E#7~k@q[yWq`{9I#}>kC[f)AVrTm%dOO%,  ȫ\Qʸcs!˦S)DIxo HbO'3VYH=E[\E_ZrYĉL*Vw%K_]3&_gARvR#rb~s\-@-R|oK݊#K">I$)pha Lh*4JbR"@6׉M^DB2bTYX37dZ}{/Z~G~ol܆ {H92 f> +e1WQN?rA ڀ ZSm A^4PB(7wBˇ׬Fuo l !Cf(GTbPl(xu~$kDtn3>;" ;,]㨳Iw˲x;ronxA]ckeAQ;fThxrtoh{a>/SҢJ8Pk睤_СSAxFO_ 8@ܟ֊|X5]J冃k81emrpBu;}8Lpt0< 1w~5{L]%{ssLpD˓!2%iq{cӋϓ Ku}S5z1?$V4uI|9q-}  cA,DtЖI9. b/Vi։87A0~v. Ȱ>%? !&CbZ_čQX7i[>4\󟈆iD~4J +<>"l+^Ξ2r2ɓS]92K T9e6Vٜe@?]b*5KL +8J97lox;.'96O9QSk80%270D`~ fd9P$w*Ĺy`Teٲp<%MY8qeDdqE3SeF6hB@H$5Vt/VqGd.8g(#X|XTȋPCeh3)4EQ ͤeЖhq(\*   +m9{!;籯.>wk0 Uə|uy~wϿ1ˣε"y#̯BSTϪ^b!Of+ɑ̒a+]?Uk"Md&,Q /RQ:cXnlC@lr|iK}-?e6~`:&7OxXj gƞb};m͕ER69u6mX3I2z_$2H(1B)RǼ)Btnߺ}#fsˉ/lc&fz&vW1c"}bW@"eg#[JU*04U +!D<6Mc((Q TbBz@. 8YctQķNHM@@ Y C%ΡC5MnDzUnK`s_jğ"*+ϵۥ41:nv,F@ @h.x?5Դ\|V@A4,<@X]V>lVW(4T5~\m뵧/qx:t! ģ88FrNdT4TX㎡Ϋǝ] t ܖrYNop]y2Ԝp½n-4 2h@61/10lD "`V{X=ɶ[Y bnSDo:D@TkBW9\ЏQ&2R2G`~HpE8c>_aUאHG:&+Le)i +k,ߛdzױii# +8@[of+j3@a6m%ʀJp{_~0 60́? +x/ -ʒȐO fM43c­iQxMno_؈r\t`CIuCH7q:  d3dJ,yePH8E&Oǀ@Fa8JF$KɃi4ׂ/m>?0oq艽< t_]{OئQ^pN1h$ Zd!$$DD1/$Q5)5 $2HLqeti`F/ wlwX6C鐭HLlq(95PzɮAv} *$o6Ywj /]è1G:F\5%L 2\>Nq~VpqhFʆ07-?a3BªDoW ftkTz7W/ͥ8Wbū{c<  f5kh^Sne_s[ ?Ut|#׿umVmesו};zOR$5 XrGbtb".sm1 i>0 j@Z3+7 +vShhu&H=Gx Γ# vr<,[:;Ł`hH%$) +{{Y$Q 6=D<=M(bO@ ;7Nc&½J]!^E1AeEd1٬] O,&Plk-'3ODI t/8Vf쉘0ZK]̸Od%_L| Enr!P9B[e;U:e*E*?6O͓!v_"cb(Z? 配'| wG_Zb_6cfQ?S)|jkGۼMNJDfx@Xzd-E4E bl zA'_N??4ۤqvro۶ Xsdvd衚<wlyFHS}=W&pY^t@^T1IBQMAZtP]Οo/qPSP- !~: tT0",15"l齑U_ej?~s_^][6q~fO݋Oj189aX C*@գ6R+΄ggp [\ʘ 1ކsTtx&@o`߿r*bw1Ygs'?_"<ǎG&;-^f1ɪ<ݥ|ɣxrwdpwd2v+blAM&[f-F^T2C42DfocO1썓Dz@(ɞqB ֭hƽ<akWbWBdOHaYH&:DOad_c.aba"iJ/BAQz!]A?< @8V:(h8O Ԁx_ Tʭ610!?yC<8Xiԯ#EF"u&Z@@@g>c;4Fl9ds +si!۶x + 4t_2d^At`zǥku\? x߬pߌp x ˌOOKȊI*+hi?wIzIuuLR *6Q}-Z3Nevmaa ZZtܳpY2ҹoh1F^s3j[Gb*S׊+xLU[2D:Y1E< (MX X#s lm]2U֠+]Ή>^PϔPP00x;9 EE.?q F`ѩs!B@]ϣĄjtxF@p@,lvVuzlQ~|iNSe p>bRCL/# z1`{{Obvg%ɎG.ѨxojYG3-{5jR٢\B֩nPq @cۍ %bA?^53Dy>;xs $28wL4_/%?"КԼs{,{ 2i֢c]#ǺbѶ12ha@<6^ ^=/TPMx(C–k1雂6-hdUY? ^ZN[v/no'ΪSw>VM_{{wEWP $#RY0"wwXm7Jkz +: +*+Yȓ&];L;~gN烎ȯ,i|_DoD% 8a:fR?R3@fIgXpeUaMl2@AE:@&HfYd,XLҬE2Y^ ŽdbW|;$1a'uUIjϒ)p{jO8&[n~M` qp A4#2@ +8ɴ:mDsQqQ\?b-&~JI,t a HЋ أ%jƮTnaN&~?gvAbr8̞y9p^=CmEbbS ?'^wJ@F%6|-o{m,撦ޒ "5F4!aA|{ Q;m|b ܂l؜ [pܜo.Po)776(7)wC*ñgÎg'bJP!V1 "}JmxIJ؎<|g!WD~E΃{s𦛊}Ӎ׀^Pf+|2O +AD+CⓁ" L+ +CT񡨓Ce>j}ax&X(03ǵ-|giFLΝən$b"hμ(ӅaǥqӜsΕ|D`x ixp|5T1Gғqo56;%G폜|+ /3'Jm7֨;["o +-oS5k57jmS"A5bL9EAtԳ["oo5awwȻn.ѧrǾw~iyo+{EǞݭjUV7>ZA02Q`lVܪjKYʢ9˂8ssF΋4żw懛͎̍,BS. 7_F0gwAusNs̴I?]͏rͯ(An'/Ԇn #;^~6l~]9{g6Ux)ֈۛy}Bq7,ǂ' ie \/Y:i#n}? +,QqAA]G"ʌMA@LN:_)W +9a5V4Ѣ(< ;:=sCa'-y`m&_~A6 ئ"]APD*AAWLBLW$Vo+ ;R,1+Awѐ<߂}2ǵ>DևTQ0<Ŕcxhg:Bngj{ Y֠1|[G޴)c`AqGz{ 蹦my-F`dp~L~Lpދ9ax]q&d".5]n(|qB+gAwQ0%aGrD~Β Kϳͺpk{ϻM}A8 "U_8e6|xw|Yi)tS;Ƕl{A|Qi7Afӻ 8+{3^c>$|҇W/e  E'`? b +O눖oN6MK2ihEG8aP٫737tcGCWNC.6..PWa_ чц~ńE|<W#${=%WU}=Ґ[ivKG|,y悸 ` L. 7_3͙YY\. 6FQ&b,0]2qYL?.*B1Dc#Aރ&fAA4wB1 > 7܃_p]kJK'VOـU`xd#T=AAn@1:D$;->ą m4 \lHXdAy Q٦y DO#d BԴHG#Wqis깬?.g8fpD4\΂a\%!fFB41;nwqeDZz6u ykZUB\Ib#I^j*JҶ V#Lfѡc[nxUY>fߣg[-ɧPnO{8zT@I7FC4q ^_F"'A#0ۇA\b23vΡ%Q^퇩_Əd^Bl-B86 -BؒF H|'-| QΦ"ͶCe5[Kh"،#(o \#wIQ;%;hFS_pX5ܶKZ&>/ mc0$lhQ?;)P훇y稼1=C2OM{eQ@ГK +4f^$ Bz]Ӱ +8X%L:jܛUq蚼Obs +z[P9G): '+C)c^q}мx%<'P,fs)$=#L{:FQ,ns)Vb![},Pel{bS Vpͧͳ݀2]9fc&D!J$+ٯܔPW@{5epc[=UJ{ɸXvM!!dx^{5>>{5il[품9'@oLKzCʑ' ֯ߘWRRq ȵ; ږ~ +: h`dS/Y!VY|=kzVufVmŧ6^O#;Nb8Tm +xY)&eUS hS7+`V3{3mUcպ6=j"Ns5̃7h?'gף}yn?nw?mU*`K!Jbf),3FaRTT +PelM?*w$_cK.uH=VJg!N!Q1YGa{-E,s-ِ ^/^']/[X1VtVG+b%@S<>^!^>smoR-}t(d=!k vzk4{Z~f#{H>O z 3p6YuVh$ |7o{\ R|u7qԅX]Yz)B&-5:*<U7|ITF,uu;eI:⏵[dZdOXuOŗĨ#'!pxPU)0 +`iUֶ)k_ %ǞoΣ{5 o#$-ݫmk==QaAqIYK'UK#' ?j|;34Ƙ7M༳`fȚ qwtlLS'uTs&m:; Zok!F.N!A在rޭڐ\pU81J(m&Ry(TZ4ggU@+P]ʫ5'#>X3ϛg(0"4"0;;a&|j,3?;'ttyZTt{ޣn4uj;z]NULR>dԩBjZNF[!饐/Qs#uŒ\7ݵwxnQc^m^m^c9>V5V>uVzTrsz񝪾NCCI7P -bPSzJ11ضcgFZ3黄T+#^@]`=ݺ⇮Ez3"-ܠY;gAjduxm^׌ +ZJj1& E05 #T1ij5]ʧmjRsG #LyFNgu (\cQgq TrV@ue!y!ܹlu/1ouʹK?>k?kQT7 DM tPnrL}7χU")R:dS +j;՝rC^.p \pSϭ7P1y{T۹U[QIzZoznUnUkAܿ MggugEA}Թx zA`%;')GYbQOwߔd76?a]t5Oe9C|?6E{f^9lG=S疡uݯqGoKOקujTbItM:'.I(IS6Ze{OJ \Yrg-Y&neƨo*q"LI HG'^z# rȹ#;$j$)I[[ᐨtHP9&` j +UOm> |&9%'7Q8(ST)zNjD  ^aSmcXbvrX`~bl!A`Q*0#K`g Vq;%ש Sm{y?N_$2XSb]Dj]<c,]6Zd=8&ʀ&Rh @h.65,CE ̯o 9-;| 컻VFdO4I|^s/ؽ+ǁ=K@z҉ۗN޾ }?\>z{W/<}C}GUkQЭnz@qC){3&&ӦN hj4/dp3%u]UKk~R7X"n49g$'?˧ݯ⫛;p^\݈.Eu'~<* O_*H 0H5/a%LW2H_7h@/~)"@?A516uFpKIi=t,r\ #2/ٔd,RWB{tBw*15 +l _}bO BF =sZB?tv khWz +B V Rd5P&1BfaF@;to4#&{/5A-TӈZBSP"'O`VZ+UkR_+z%XD#n[ ݃@%5:h~+D?ge{KU=JA%-R?COBMOV U"e ):AU{ uP |lv}`,X{?> +Yځ~NPwݽd +Dy ^^b213FjڰS*o^llH 7ēuq8E1xYZ`CkK9ң81`>]8"iKP<ҒGXpHh9Ur\su6쇟3kiH +:X'SOGcvQJ<]$G"Mc&G(-C!*P*Tm!2[\XXYڽ7~.yڷ;{t>m&Te +Au(f ŭC5 SXr0uq%6DHVJWW)P([ _JRkW$/ +8rti4{3 |(;|gu f +H@#Xt*Dhk5JyFebUQzz((ZJ2S@Gp̧N+Iu͏Ռuy8ShWQ8J0ŒHbF4djF!59@ +QPZz%hX8/36o xT B|j1 Ѩ(ZRa̡8N R#ao@NRP/+.'T)#^ G(L$(9A*&j\j KTDeH ,jbp<0rPf%QAYaZ4,@B+>{ZcW_1E_>2P_?kwthbbNPQ Q<%(0tH9\fL>*#XH4P GT"N_*3_7 I}G9g.vм2}%_T)>,}Ï`a媐2@i T\ *QR*A(Tʝ +|%,C3_#O#O#O#O#O/ *G!O y\8֕ʺI8Aa%xH1xPPU ߅R|?O3O=W6m@tktK&bkl[ؚؒ)ߜ!ۜ!ْ)ْ%ޖ :%r+eQ(Hpt#eAr2=n+" +t2N +5Qk1m`Y03q$ WoWuUBFJ1͠FBe{cER2@JIAD +PoD,eH,PfXɈUa %(i>=136~^@a h,@Ht\ @R 7mRr @JSb9=` (%Ab4!#м ^u + ;O_3SZ햹siS~Ig zWmlI7w 'y̍wt׈# + +琊 GLPK,zD@uKCJ#J}mO( {UD7[N +sj[IG]C+\Bʝ;n*(uU4_S_WWɿѿ(CN%Ρ%-1E{;dh8kI>(,|4 m!4t)D@` m;|#bRhL)R"fS18B0軨nNjP-asqPxT|ԙ>WnUַ:_(5bfP Jh+v|!|@ DE##ﲀ`8_ ͇TRzPp(6j}l)\w\yC1tJ)RbOU ~FFoW^z2aYA€P+TbB:dU3s&14| >gvyKF>Θl朥,Xadռ3,Xl΂s?dޢO.^1Ïg\ބwM!8u+?zƂ?X,d΢s-p歜5w̹+g,+@˦^:>X>W3f9K,,y?ъڷs6g AW:W̜bvo>LfX,X<͸~˧Y,cYf.>gKg,\j`+~rq`x1>aO̬r%{E٫b{$ %ƻG}TKܰg '4XɀD' {ȧφó'N`ƦWy k^!3Hw#+7\Bu U/`/c]|?7`z 7 +QBec'DUh6t<}ܪB"[~Oѽ 5켋29( t (XH@Fx#KD n!+RBI_{PEyI8bjn:i/]|R'nv|=: +HGt+:c@9rD8dG6WtzxP'%E]gkR6`i_y_(k&:ɮ~ S蕷=X:z/0%o7":dRMt9=ywWK;Dm}VŏOշ~M~m7k)kjjΙs~q߅嚘q 38&7xp_b5N015㘢sQifƝ1{cf5"fHDA&]# [49Ý8 ;^jƝ`5 |}Fc4K]xDŽc2N= .׌ e +Ef1Oq7lL%KV,[r|/>_ekhcdm7nv6!m\,]VqYuO̸_ϭVq\mߌVcp9Zq+ut^p]A3ys/H'+upjN=X:+a lvnٰr\q1eEΙOH贴B%ic8F(6ca:,~%՝ i` "6|j_,[)/ϲٟ|D:HkkGkǑda +sDXpBzW t8u#^zϿ.WĈM +7޴3V8OG?XsJ/ 'cj+[ :܏==O}a?;q9|8cO}'z_9޳^{Z^X1=,V F?"ec+<ϼ^sVY2oHA2O,<pcqeq p5eL8ez.X5לe1ϝ`153#Jsh ԫ2C + l MM'^ԘbD,i]* gj–$לJ JDިH԰"QIG?I{;7~P} . *4ڄ6؄֏ˍ6!/i m"UvV::z^Ux=|&:::*YXXVՖU|e`Ӛ]pFg0mڌifN:݉A1IϘ>cY gZ̷=b_3fϱ`=3{}֬y3g`'p͹w fpBٝ[AK#̞xge1a`Isy>9 @,qsYm14%9ۼI% "M#-1TFj5,؟ٿOq~ {3gy͟3gYsϜ7}3M< e3Ӊ;Μp{wڑӝ=gALV'Ac1]yAx kΙ]'[s/R%/{.rEʷC,zӾү 2tҌ Cpe/X~\^߼H"雟/ /-]) +#E_3gU;bpxI])IIKyX) \JahQFI0PCF!x紑gg~I<rTwE诇b ŝ; ŝǞŝşş5pm$%3xv..>և҅ǜiݸw7ltq(]ߌ8Fgsƍ^˗䚘MzZ̼99,6WksXs ^Ǹdf)L_;%/.)7.1g:P;SP^Ԝ + .7D¹B "dOؓmm=^&8,!qO֞}9=g插[yCsEΫ +P9dEDg;z@)߫B3eEW3s\h)CQ!77DONˉM̊d8m15ΔO?K@Pl}yY99@fN!+7w]"g惌;okDS'wJϵA 3COvY˼7gʸ9yEr,|}s8P̛`i<2nqwOO{v߿(|њ{>͇?333y_>2Spoy{o5OW__C>ȿ} >~ >kF"^a8p4ksR.듿զ\Ѥ_=׬;?]']}i8}7:\Jb@r5,sahoS %_J>?tN>K$\$w_.h];)%)9uOiRRRRSSҀ_n$%-CjڞXH'%%&%$~9tz~Y}WCc`G({(M_, ê`AC D=~]1p^{\Q+uE~!JYzDVQA h6m^! _TTsqǍ[B9 O}?w;uu6vEHd{oЁFbAc@wV`KPo-]ꆞ{Ooi|..15h6ąx G (U])t +c.~ڿ]ga/c]uCA/)P@~Wnava!#eC~e, ʵοLvvhn/(뢾bbQ%U5 g)wuN[K =BžK;١\w;1%ZXtʴhp A:@+D_Dr; ̎f{ ȥB|O/k>xmoK *Ŷ[ +<Gnͧ2jviwA6; +~,;fzG#BQh,n|[.5B?|K69 )͒m˗*C*5w ݒ܂¢¢E"#EEEu +ác/<[f |aQЬu"L'UaL3f`hC +WѺW`tB +z|`-|QbzzXkE#' 0S-yC+4RbHA)ːaAR%SR7@o`rF$dCQ@Hd g¤ɳ7um@/ŸNFWC GXa|͐*/(HDB+'9E+5Rj4|bEbj2ߟ4sww+[drP:Zz/L'uB2kY429ap8AT/N0rP@EuKn~e_BJ  i:$BbPz^Bhj)@3i@3R_]8$44-TQ=dcޓ䴃Eh~eW[t5pfXUxCEy*U/ղeڝФ+YGm{QVRhb)ֳh"Y495 [@A 8T}7N%EME H9{8Á`-, dR +ҷge>O'G˹w{f=24d`).pY?^ۛ~UuD/ߒUy竼򔞹*W.杇FG)`Y퓫7f#| fd%*J r;\ca\U)buHx~ר*+.8TvHiY);|U*e`'G-+..)-UC]"]U4e!47ppXEFj_>cSbdvh1HI9} b"j@#P ut } YslJ/j(x=߾9:b畋8 wFaD~FvF;̈́_iBNi E mtИi)2rg)WJ*5'STyM񣟣 +gff}Eؓ ^~:JagSd 28@13%c G2~rzg9gSbarGvZo:m.To+vi5G4;+xmoWth:ҿL> B%+p {8WFvbFSW#sn=H T@``:^m "*vRYx#%*;<ⷀm[` 8TR^|HAAyff=Ý5{NBrjKrj1QA˨>(^#Da! m0QȻdx+d0bOF)p$^?u ѱgӃx[d)$M  у^`_a,hA }3Sh) i;iFJսrF p{?1L2m`MSz Âv. 9.AbB $GUuU!vn@ #olpXD PhIn޶y3bFjĠA 0߀zmHoo{N>S蕑_GL8&Mr}\(Vj o JZ [խX-fQn.us;i(EV/C}[տ ppY4ۡx"N Gc}{{?eJN62˷++CWD&&[me@wI."J./qǞ9;}f(..."njO1a_1EwɻhgpL-uZt?&_rDvJyŞo%C tqk]y=pApQwA{^{R}sC_EFN]i-.+ĀڰcУ`mʙ +}qmqN丣~PFC3^?\N gѧ4'KNbNcNO'tQu-("66&8ʄe +PvR%!FWʉ-ꝇ5ÇP,*;XTz]n.8[((,/@WA@~QRrhnn#c2b~J3$"lQwq@T-]X)BgCLiЭ|ڎ~ov_K(ėjwӦM hR1z9R[떐bKRĸЅ XNS2@Im|jHvR$ѭڶ^ VOD!IMSL hh +zHN, 5^a9 ++d-}Dsk8sSs/&{ɖiVw 6 +$ +! +b9y;v5*(tqI2z l G F?~`YmjCt ӍGC'It2=xsO5Hs_,9i1y>ϛџ3D>E dX6TTK?vq]A-!)96%9qĊ%ߗuzw%%j:6@` ;;0`C~48}{3sf0 /!%oo C|_!nF {.OEa9\1z?wc?$U:Jm1ġƍXO,+uc1dS.tx()pHwD#r l[xmkX5$Cr޺ * 5c,uKYfsNәyƿ'F@lQ9vHt.qDe~'t&`ۑEc \g!mmg1[[NNYN O3Oמ0!'Δ^צKsENs/I OsnWniswwݝok]IWSXyzz}h=Ӈ_u]ݤooljj_a,?yoc^a_9 `hB2H,ā1kQZxQݣyՏ?}z0X =^{FD2{u86?ыdx_}m}FE7GY?ZI!,? p>]@t ,U+UF@E}H5 +nbu\BR:u7vxzbKÞ16k}"lһ`؇܁,h +KCD&*c}e,b5Mz:aLXa@xbV* Σ$lAmoB;L{u۵Ƈv,<`;@̞tyCs,L##җuB +%V9D.R\v/iavr/YknR;M;-۬54j'a"'W!J ZwƗ +n:T2kSZPҾ'~PM͔橦23Uh*{ECSR˝qeNuWbW[c|fGe +ySoL/W^ޛł;10~9{h>Tg?,2ZKu+֘R =?AMl]JM +[),FAl\kD# 7n>m:͇\q "2 @de7ܶ}ObB!4RDKM$kȱbgx ~-<׺#[ fD1䜸+ >4x°yq$<aT'ҌL +Pݷj'4?0raV~Esf=;7vI ѴiZ֜^G|7?gA@zu@? Oy۸Q @̋Vy:2)@'x[Wi4r~FH;»wOg}!nOW|M+C{W^ D>v#|9#O^q *.ŏiֶnM2I'I{d~1Cr5zK$?\MV}qa!S~#Lr#=IN ]KX'Ù4@W8?hg{toɈ! Ek3}S?U{lb՚V8{lgT4%`dFgĢL׈s1.n#Mf>K{Ӧ5۵f(dqg79ت݌'Ҿ۬5F-4ZsψY1$d´aq*:@G'}1k֫oÐ2.6 W'?ncnǟ2Zt.LijZv +_㌯v"+U84UE_/wė9a䄨Kmq%bl1Y`ّg Cyǖq#l/Y?xm⮪@ +"2Y[H.Xm;zYFӿetZ82V&@xEᅝ&F>8TGL-ǀ9Ž,&$C|fjI{qs3;2ĭ9ugg\>[$Fͷ!@J$& !`\!"O>([h6R*X)+Q.#ao?dž5o9c +>ex/^@9}6d!&xEIq\qy~:㑶3 |`hZ,0DÐ@)/BK@I ,@֚!o .uWZz-=#x@cr4F$zܫҦA3`0KlyVӀP6Rߣ#^ +]LڑəWRcs'l[0dwձ+Sɗ/=Oi\pR,kv)UĪ΄JgBSՄR/d5l8asI Ww? 潽;|ǮgO8V21BE1ZYkKs$8/*qLmMi]t-w*] FX8/;e"<1*Ww\e0O4=ditD\l8DdEbbRaKXf)F!1Ŏ"l.q`x)i.:g-JZkD#p+"[/;2lY&cQêݦ-/ ӢO?:xcǫ>^w,A{O7ǧ7(y$/ Fa)Bu@qY \]XqkKqr8q_@. ׋4up'ucnő^x@ + ^< G*OvmDV)#܂o@:`7Ba3M D3ѡIkh(@4;7uDŽVU-ʚRmM:XJi姩W]}z) cJJnHr3f*z* q$TmRAU,XG_sp|ja_߬~pDgږb֝`" Du.4VE +3┦iBDY5Τj'5bupA!J #0o`7I15tMnC[/ 7aMXxx\Fv K~~5 F4z[o ;Qw"ht%?W_}g!SLSU\kl=ʑSF5jSiמ] 0))LdHP;Jv&?SiTX˄b!SlS Kw+|[Y? ?x;&ϙ\lUMy q8xt/NU:cq4)TP$K@eP D|N#WbS⊭"klmG<t̴<bi.ڸj?zN9"D |kD-+jUJH*CA^q- D" +.?6Wrl>" `w`m8` H0o=,7$ ~=[> d^7_|݅e5ŧ߫5ࢁ i1.s'K1b l4Z2@zO凜/?g c_`A$lۆ!oCc/{ GXw𡃖uQ mŁ>ؐa u_ѥ7!Y N$ :1R>ᗓ25vF\@-&Lٖoo {<D MpD#)Ӂhw z0פ h9|@֦@L򚈩cgƶ~/͐F +0蠿שH&n N*[}]pfŗ.n/4iF<Wd &wNe6KlBWkJ}x4eTAS4wę\HlJ[B@#aَMǬKSɖRq+ +W!nE:J.KaИVe# ]1L}gSJ#&ST#s. =H4@Qc+4"(p<>5,þu!qI"fƗ%c +Q91)!1@,bPرZ)ǔ[2.Ę-$ƭOE^`#2,agN[skY>ѽ #@|@ġqЧ6֥]o[reP57?] 777@ %ü+|4> ֗b(\@<:8髍!oD!?o(wnjP_~H.77cG1= r.^:$2 R%ú&m\/n ) t%:F ;HY c/4X ՁqF.d^csg[< Z;4I: t0{J˳7&=vh6.]cA*IL@%K(].7w`1l`EcB(}ҳi)&,e60} yZ)׋/\xYo o _&1OKs$=UGb vP`MhM xu T0:²AĀdNSdݺ/_I@85EOEqUG|xwq!te\w:$R&.J"¦R1͊+iTE\LFfam[Έ ++Ռ뿋 .=:;R " "50JpmCԁ$oͳƠ\t_٨,&%"vֲx_:ִ0ꥁpO.C fnQQzw8|bw͡3q >Z ԢރSL:1"qQD/>dZNuWtU8WrY>R|[Jsug8{33V!cϒ;xbqX>EtCg8*fxr!!@ zƧ<4.@u@4]3Kt:/m +44q&އm) J<@CyMS D )av @t]3PG^KK7 +!tX ԷW) FB*gd\4Ag{M=.'N.8p&q-m٥bEj7]\K%ٿN2~m=M .! {R3y.8]i%!ڞTC2tQLKEY cOD|uKZ/~+ӷ?C vQy.2S-ځDKF@,*g ~cb"VR UFpB&:.[Ι6.N07IoϢ+a zUDzs*{.\3ү>ojZݟ~>`S !6ԁbz44:@`m^9ِS]^_wsg!Wsk@޸<QzH;𐋃Z }PPt&> {Vr:=%S<'9K1ӯA ͼ '%Z:3_Y/h葂pBb psNI*AY.܋@fфVAA:x,h9 N$5n| D[oӺÙuĥK{f $ѕd8quؕ*H%Wj 0P/֨b.4xr?m"ηnJ-_~~OQA<[}9G8Yj.uĔ9br<@v&02M! ()Ch(#ޥb<4e$||1*`rlfs~I/3Xm^m^_#:&mBsI>jUŸt֦BEPEU@8 ec LxuY[ vɯE?GLHq10.>Z =M:1l}U7~ᣀ{]e K7Wwqӧq@L \F% F6sg>ևl y%W1]2{Cg :_ĸO?{(i_=h6I&4k-\KXw]C V":i%u@:z:`` 7ڴf7rű`Yr!U /Y5y`r ɥaą. |$@|PAO:CՀ4P naBY;w:vL4zQ[.8pFbjtraD3Q,¹8&M >;1ʮrizABɵ$5SI4\&W保RcOiRkUJQUGsM)ou)o?^y,Rߊq&~i]{4ĖC@θ +59<GR\W*eL+I6Hr5 J .: f63=dZ|?9x1byktD6ηx*ra{T/U#r% HC_hq19lx&8ݞɯO>| ֑q#aE &qkߘzOx T K[awat9L@vҐ6y1Hȓy֠V +cw5_S^uP7!uu/Kn ,J K +:q;OqMi3K2M iaнO:(-n(&yП% :tm3" LÓ$7n (0=B }!W $w ݆!/ ڠCufz(mAx31@ě~aHl*}*ƚj;=( C+m$>ͮ=bY"v؉q6´: @(""` .T⽀h`ZO O"5rq}x판2@:  ѳ0< O\@SL3M/6C O@zӓzV$c/i=((\%iҫq78Yơ#r1-}(H ?X&y,?6W:na'fc#.y k9 Y M7Fn:{#N2<߬YsM-zuc>K, S Һ `<Si>T>`(zxr)q ĸ:i.`d{AyV 7/Ar\jꥵt\Y>'O/d',[Yw(Xڎ˷/*{1Q @F&g7zAHĞT\"|,Wq$@S .䢀@q94ݢ/g\^oYeZۑaɵEX#sA{t#I4GGȹAĽIyV#@ZPqP)`".Ms" +"<|l2$N.XESıW Oցq+J"}O֕|/"9@س4!h#0 ĘA@̒ - k9`%.RRxCh" ^>^L1NW^@f2L + H7Wm(lp0t :qNu\SZڸ.jn;:܆;m;; Q(s,qI❵A12e gjİod @|`{ԖT@|,7 LC]@`PK殴HBDj):KˎW컯^snݶu^%Np\)]֝q̷ļygÿ?}!©D8 +S$8잁Ǣ.NI'W'9_T xEkB-\eK$5ҪԋVx¸B.<|[{]4Yq3R^6/4 ( nzAt(czxȮHÒAL(KR4+O*<>:~xԼbxɅQux\PЀe$#H: YRQ>R(9 G^h/!*i'@xƹ/FhQ.%0(bi$@ ?f@aw]miz%JIF*d'6M--ʚ% Y.O%YkYFXS)mI7ͅc6gVgL~1(<ia=,YF "rF|er!Ȫ.ŸJS*$!\H+H^bL#|Y{t8ݧaF[Ƅ"+i:P *]/7o2q}x M +ʀ=x|PA?Z;^W`8DipAZ*[}fց#\;:xVy~7}xKذ3848f}h~`nI#:XH'zp[>=cV`mRVNu:t>phsAI>}k +VEVc:LBw]uVĽ6}ǀyx3s7e\<R;5bݕWՐ|w27I֘b\!5-.d x͵bUDnP,wþmu;~{͙~ٹn*f*r*+n;l8ƭo:42Sjo))$vQe!> + :k{ +D^'[y%D+W'4\@:+M.qA'F@$^ Z:a!.X0#:3qr'@g1N*Ir 0\@_=KZmym媵-]z 'Ȣ ]w ][_ +:(d 2,ÆGf³,ꈨ\+]bPL%IF}D([ebRL\H* +.M*cK">6/qNZ62J7,I6|//ت(@\68&+PPOxW\{3>Ԝ 3 ϛ~64Α;x(;ÛހeXlU}i𖐶nHM{̒AGN_ }ah,C /'&5]^@$$_ܹ?^>P:8<0,x`ǥ}-g1W۸6L^': +{q{\a4:B ᅹ$j w[h$/7*{ѵ`r2N%Ȱܮ/# +ģ ȱ MΞZ@ +.R<ƈ=4gZ F -i i$u, $7&oNl<.1N~&( ++lrbh{X{k:?|㝥nk/ )IbdMUfS[q5Dwrw(pZf%n}uqM(WD{ܦ*ֳl1˺ũ*vva,u!!ofx':ǙPO,RV²il@˱-w)zĚXnM^1Zq'Js)J<[GaYslICzx3_bZc^1Ož(=ֳu><̡ 6EJ +qX;")U)B*40"F]癭g +%뿍7|4L?ÐqV +)p=qv{fAӌ<0q~~ߟ7jǭx ((A @D/B0>/xv03d89u5pw=s}ܼ}5`Rzk{g}ܟ[DVPAUхLC:(Y!u&ƻ݆{"sSo'LL0 )2~)بLAΠ)DFfww' 9{ k¸Q +kP[ od7xH ^U $YB h&nNlE nLʜx/]LWꚽ fbDG+,Y]dO,XJd p2_]n.FtŁKjTYm{;pE&. iuBJ /yYby>$in4[|~G7_#b⽍rEj\ht B#)I@$dTaMVYwV[kmXwU iJ./c lv{ ~?jXO,m '?nt75 lRPQS*B\.TDYJ.JB*Äg2!g-Owz~XgOBo| fp;Ik>X@ܯ6CC=<*V30lm0GfV>z}@O[i@:m@X /xg27[B+A#@ Y~?zmO׮j V+{Ԭ}ݏgnrL1|Plję\0=] ':nޓ9?A Z;ua$<JyJ'RG>ew2:1F g+ +O +JƧ]u0ȁ't$;@껂x8a9u6~.(HFݱ+E.Z$ +/xg--qHbHh4THqB;;h`{վE5ޫ]ibr:bX=SvN>Ů;ln~~m8qּNs?Wm'@8S(LM kN5br-7J2Gb=–3K CZmg jښ{YRN]\yvv)6e})oԦE1OBul\23 OtKaF "|PER;%x\w K1\&$pB66v8l>i WƑn ]Ϡ¥AAOtx1A) 9}6z3-Rk! +Dwņ w뷅n7~r6RAXR-_%cOtHdΝu%=Wp+={.wZSܙ\TJC!$Cv^z^|cʼnO#Mlc>6q֬WvcQ@,TnbaJ]$ Yi̞:8˝IJ\wpVSLi4U}kbtmͧL eAuqa&oݧѓKvY6g"sDR>Xg@ɺC<աTVp))T؝/" dCβOG-u-x"J5΂ͺO.he{d})/ 4>u @ ,"o9bb{F u ӯ/s:u[qO>$D c \[ď^[B=agzZ>om|qiv/ 6MD]@/qP:&k@v6tO{t @$ 9o\G.b od궤ذdw ڥܕ^ Y={^Z@jR.1" S2:xT-w C2r@ Ծשu[pnV)9ozvu#:Y@9eJ MJ :#@\:Pc5RH(ԥBl],弰5Cܚ)KI`MDbYʅUejo76Fe?;>Sg N%dсt !F +[J%YHOEB)|d~A~10ǀ .$dgy3а00fyIH=8uo7qӗnv=}-%:pl0ثb wګZ|17>F@ Fn~Iw / @{i[?DYRCQyV G@H{|aF (%_]o :)c΅@' MO-m"G\{/+5ԑPjOɕ rUe\\ [E9|X&:l9c FO Aǹ;_G&8&sqSL /XM1)4\|1.jfP8\`Cv 6\v˪&"9[߼4Qb~俬 O^DN4 .HtFfB14tH}85O 5*dh9"y@AL0«Ku?`pWt yרd ݍ|VdK?}`tk8@2 u/@O{cQFqSwK$3aA ;C9?`a{>o&WI=奃BD'[A$ @or&SLx5QfI +@@}Jezč1g}0>W[ +k$ hzFkouV@*ud kxlaR>8ڍ-mA+*`V +i^$lO[6`NsP>l5TO¡0 9άY?!*_d XzykÒuU]6i҆I(4e\|)ߋ-d\6<75-k9|BHC >0~M@g" Qia>!ȰFf Q9bL.VR +*׵ybL˚6*`b٘\&*Ȱl=l:i :OeY߲j]ҍeuMOvyĉSG?ttGb&8wp݁ꀡ@̼QqcTTW m }q@ xTA` x0⺫u+kDqS'b"E ̙U[&- @{17Rsq'~;?ڮ.J,/E X"seJva%ѲHC"GJ~M"y'41Jy|x!{xq~Q~n1.贰5Sv>0w_3X> goc1ێ+s*W?o e/?7τf7]x?] +7+ |)yuWI26Æ5-3kN|QfYX'O?6=giIqan.Ӗ|d%d9VU5.GZB!&ry(r,\dB[BΘńLV5eXf\fZ21o p "9N2mZ P!P 3K57}\׍I15% @z^0YwѼy?KzhO8`"**\&])^q]w304Fb>C#n74h ZScxN?Ʀ͡m]}z>OJț|ݵ,ozB4c'[b#͓sI_nCpS{{b5'XO -0xd#ztpexwM +pסw8spӆExb >Iuw +w= +ݶ44tO#ۖCycou:( _={_/Yqcďl;q2Z!5zViPᭃ$|p2XAh@,cfѤbcʇ{z@nϭYrTiӤ]̷)G|X7%U9i_=2\7R>DP1EbTm97VVgCI!$Ӷt6-R?2~0Լ(]T~ė;/ ˴8⊉+DUdUM M/ +UG*EY|x&zv|(=-+-+XdOOq~4ٴ(qXA,M|c\nzJ`ɲBb`|,b@ !DШ,6* ;2-smg-@æcGP5dTd<,ոriAFm[4u yIsf Dd^~}.]ҖwIB=ML\  'p<7)y4zW C L|\Z]hQnV8y됲'~8ʭojYDB@XZsl6eWbWǮ؃禃NaYSTG-db|IJ"2 +eO(/}8asHg +u6޶+F<$-E49<|'Ln9nvI& +u-kXcZ˴4ʹ$մbifIa!$YP݇[~iƗeI1֓ [k)Fd +s\96,&2a,;3;2sxaiDQ@^׸2ݸ,UO/N-I֭L7AtnA{ɿ{/p)d :<t{Z`f :Zz`PAxAnc N1cqtnC^S^`$+: a7bgWfV`+("OS-gX >1~nXb > WDdY?xWRìc5"ˆm#.0g@ؐl0Ҟcg0lj(K[d X1C`^߼r/vaw䶞cO>9<{Ģh즣bk9,rzrҲ"'[OfBN1[OZ6lD @Zi Z +#O1 &Q@87^, u WQaBS{H#O <Ob}pSD/1lj2{j$ы]>; Je1s澾rƖn»9g7v4i@Is^_nC3񽣖>stP82u|MšW[owQ nkqwOvc;>kI}&$@v:;;;3^vOi 왉'r)A $ O]U?b2|u)7Fl;@՘H41T|u%1!5VG_dH/k/#/ΩBO U'YqA}?8اqˣ3!8J6qZC[' uQ2 +7 +b +֕qt{nd1)k.$M9u9UY6 ~i3tYv ;L1֫!rϣr5u΢3#PZoSXF-C+B(Gn2Hl U)'a(t ^µP!d *^ҁGC<=t"3y;i6U mi ļ V>OG8taˬYCЫ ?A0FBBUP Tn,h>A/։)miEC`L~x 92ϨU6\՘Z@1 ' Rn )CIdNdb2mDDL PH9A BDǫJYuƣ^ӊDO.:$f"AT׷p\Up2S7CH%eTNl}!B\"Q5s! b: ANVTC&0V٪DOE3r\#7b2RI|8A(_9sQ'= (AI YGBQl6#a5׆!u̠Sp<*ȳUVBF? EqV)Y6sӪB X3*C*kmjҳ +>Gµa8WډYE H^WyA + k4rcNCNe:$Ӑ>\lq(%1>(R{>v͡]lKA٧a.8 ΎD<8!A QS.0&#QG5%}>q߃Kv# ~h>3vϡܲILySS\٤^ȰBa*@[2@h6)8ЀF#*T Z*A)o;w~⮔!+ĔKJs ~xй+ł0c UuP&0hhE"A>r#T?&tCF 4zȀ̜bhj^ Y;գ'cyAxzT5n!ƎQ=cxi5pOC|c! qLkYUD]NxAǎWL2(An}u@%\1 . u޹W{ ]NVY;p{䠉-W2wGvkêP^rc1<ʆ8YnXW!^co5ajCOCQP| *Tp2uϺծS枇gv^ )]͉e,}2_ @bαIU6qXlGp +<jo PGQT=ǘ4GUY R@ s&퐆9e*@CgA+WMI.Ii.Ng>~}@x ^8:{㖄w#Ejp"3t1 <{Ŷd<{K }%Z/,' Li:''L"ʟu?tktJjhg< ̝G҉HmiA_3/-;0ϋ& + ohiv^eM bSLXjx5L|yA̜_73j h!Y8;F;| 6y + cOEmB< x?g&Ʀ%/%g + z ØXS1Z1m#/OHwO]{ |+&^&R0GޭG4t -nS5' +}G93y[ RsH3!U 4AP +>>/5!Bup!"* +yv?@3K9c=_ +#WN3\n "7l(AŜA AACw Fpk0w;*}оz`=1yk.6@dh,)OS8g}ёg낎JqJ 1 [sF@A HM 8؎<3EWݲLkpث^^nے{$H#&TXsxLzW=_*D7~^}UR0".D|Ү% BL/AzAO&Yjcϔ B#[7 |YAb*l=bwr).QfjhɢdDs0R k*HG/;uɝ77sA Z{֭hw Zz +"&P }9pʢh +5agTgUgg4a5PjCIUIXGmOYߣ|ف)h zQ^h&\ V\s \zpȔ)1Fv^"[%1+VO^ᐌ=E>\1 潟$g>vSzb9{6;g`i`C1M锎/8e(Rt0PqF9{15aUo+&Ĥq0U:@27~qbidjC@&* `1.zw^{'5J?I%'HMA1!AX̙ >1G xA<@H/QUtXZ9**;2[woݦ>o 6Ĭ7gF5suqϗ^Vuc1S3;UmTe;Y1i%~^޾Uu9A֑ +ءx&&OxΙ&5 +ŒWyU`Ÿ 7*3B?~f֪3QøvMRI͞8u 3]j8BKwIݴŘq8;"/zqީEw~J&Z!kV:)nSՅۥn?+ݨْL:g1 Ϊ#iς,FxB'XAPa#G8D9Lyа 8:D`/o+4^6{ HTImMM28jU^zC`}Y#6( qV Ň؋S{65 _VL [niO; } F3@ϗrIðsV/}k!& + 8B;v*׆KWJWL Ao>5=I@"6Y?xK9ɥl *5< lRFM.eGg蓃POaԠ;$Y +$h C3W9s%4 Ep8~3 We sA>ZA:mq~q]G^D9"FTU'5IG94QrR'!!Bq?-1 uLAߪPvnXApMb  @Anf *BOş;)  sUZ`E'l0MMb%8*8GT'ܙIYA;5c P(RT7=YÎ}~A!aQ@ <)0 W/OjB A߃s%^iXX}N+&*Ln'wޭؑ7>C +_@K9J,[&,Q36`l A9{..`YP{ʫ`a&0ORn-Z0iG qSK +:; Akmuεrks&Z`s:X\ޱtcV-NnEO +ЍuP 5 Ĕ$F:Da"=j@?QAT6H Vio/[Ԣ Qբ`09pc;R..5kE:| BY6=: 8bA%bV!Sg7䇊mxQޠx2z,Շv@ jvS+ Pğٔy:n4n{y'ᴋp#R>_7$[?wϣX|-uc]s\X:j^Fkvp!~>eSl>K4MIXFP+ɯ°1Xq#27:#/]Woٍ W.{>Y@{c8h(S.Yًc)V0L5qd3ht1rL2h -uQyv;HQt1 /R[%"C+_*VFL:. ɶHc%M暩@:ܲp )MGn*C;V8P}*eb rHw3N{Y4K5C嚮r:vQ0v)] +/㛢dVUo|_ .Tǿ=|}?AچIM'[ݞsY\NU@.e\ޱdCVǪ-NU[ݫmi[fIB nI@zA1 +ҹf rC5 +z[GPqG :. +=G>t(NZݝ bvPhxMK Cls/"U3͢NzT}AԷ# ԶFx;Mֆux 1@RR0&-ECVږM3No=fzVhAO I1Jhކ2E+/yJ[RҪ(nQ5ʶ>_IIȇ02m Su=׶2\<YV+QʌP5@QB^$+FfeWP2+O=brr~RQ-"AB܋~U4czՍ*ghLPV8euzeq=V :=EPUrRY 78x#}ayQ)1bᇮkBbncnJnYHIH! 0nyKE8>Fel26fn%Di]!`JmM&$bKl6QcMbmbe\×uc"O>7앹UD\n#^NǰH(M@2)K&9ta/f[iMlSpf$rk"a#qX-޵MvÒܖo6*7(6`c1Ćb}.R.\`ъ#kWGMnNXFq +dmbsMاⶻIm m :߲ bF8bk<5ܞHn'a(U|]8DƄ `tm2H_O<?b:sGگc8&Ԡ2݋;[:Z9Tw^XȢWwr^Zq ?vUQ¨: zD)RJlٜv&%7tTT-}fuP5 +T ֨T?}_vN(H?:.HҼPىUv (1O'C%lPجYoV5H /YFiCe?| Bu+J,c:F~L46TXѯ++Qqj)D?HY$b (zϜ5k_Y}RHH7h\77tm6>Dl|8i4ʛCFdE3O{Q:ٿ3fy(kCVogiȥׂڸy#,a&6 DyFy9?GyuԠۂ/7ɊeeMDy~i崌VCyx9)>D H}FZ  p1`cPkפMWbǁzLա)eOVЉ $T*3n.\>_"AT?(ojAcqfܬcdI]j)mA;f2NYS6gvi^PmٞnMaw1[-I$ +HW(~$fs")ڰ\Ēb*,#HPlMrUxV&9{*dw?jk߳_8flmIlbhuL¢a 6vHwے)Drsi'ob 6qS@p1ebm ׆h)VKVJVʄ6%uOnl!Io6D˷)$ +ؖ@BeMhQu*RbHx Ѳ !Y&^"Z,Z,^,PlAU+D+[Z&c9ۣ>4RkȓzH{or\ѩf#V5cTέʽvS*uu.V<.UwuY0ءm`{URrH Md3TI=gRRCgN1G6 P/h:/c;G? +nS Ρ9'WuU]XuЭj4w0IpMʞLPجYoV5H)d[lPpi܈9h,q&FC??umAvOuV eUm3[BR +$9 3gz5JH5h$Fn(5݈.nNj4҈Ky{ ͊1([m6i[{f&0731c&DUPG :}! kڰVeMHuu@hCVpsnB4+J&yIIQP4+Ѳ (F5vE ءY^DUSuXk> c(U'Ajc0m[/Q!5cUʪ6eeD@*s1")EVFiO Jc^RT/)'JkjEc;+aV\ b wO^{xnս׼ Z.Xi* i ?v,C_ZU]]o.ķ"&mvi}:cvi^fkHSj.9ؔdדHlJ +ɳ1Dʈ%Ua!¯#7n?!;:6>nꂏlWݏ.SZ~ 2ZurUrS!JD)-xM Ɓk[Z״Z&"ZiS <|*e4mŃ5v';4tX=E^^3./Wi$f (mKq~l)CdMFlh$:{H\de N R>CV*nSTڹ%4j|!7R,i7pK :Da^^U+:>)-C4.ߞ=Д~;U+~iDKd"-]afn>/CKO3ɏiwZ2e+"|$;ޜlN`7dzqԆ8vbyph*"XkÉաׁ+¤GԻҝ)/L6}۾ப[Aؚp2Nǐ8P룩uQU$eI@nU$GZZFbk#kÕkzp[PX%!`b /q`UK_XF)Ғuv{D_K?C~Mtm2TaBuU8a[6T "9B/WIWW+?[pe~/vJǏ{'kZ#}2W#eZPQ $ Z +~_+rATWh$R ꩔(1yo[wAPr_ꓫdB@@6 "UH%Vu.E +t+W"JfIȡԽSzsvHhtC [ATQB+0EA0z$L:Mධca ܅D*z^Pz@BJ l,ԓ: 2ÐIJH(Z1#"Gh.nFȎ^y: ~k'zr@5 aŘZLj̦Ϙf)2>-=b 's2Q~JODO/jRBڋ殅]VQB/; N&GgH3;tDG?Ѯڀ>i`@ @Zzn ?6w!=P!&T mxG7-{Iᯒ=u+[5KALj6o3TATdn*>ٰCn&6DC7/ QQ&s)%. +^ ,hXֆk0e*ZJZ'R5pٿ.v0f>c>}O`sjTI"TiA.XN ++QJ=^ɥA4i @%*#d+d+CQe&L&gܥϨl8hj5R`5kek8c: < O"Y (L-#]-G@(G _eoO' oO: ՍfV!TCHVK2Z5h Z%8YSjR㔆 G GctzS?U0Ð*-R i"ͦΝ8fgjMS7B~U:REjPT +Tt8Bk +F%Qj936*].%u + 0>c@31:/ 0EC~XdՄZCiJg4xTJRPQ9]J42RpvHh$vɵ̦L9sW`qEH  +;M*ܰB܀ gLbc8A-d +nB#ે=P2{J7f;<,W\jJT2rH(GLR 0RA@+Gbc() H%'4(BjHN蔤a]L S[;RhV2)#P Wcna]8$JG +F*( e +Fdk)MFd9ئj+\ bב wO A<,mA/H͝G&Ĕw?)UG{GwȾ?(COGX!ݯه}~KԪ.8`MB#O+ߑ+Sx+| +ÊsʃسU#^=}_@SuӦiT!m ݑO}*$z >L+| |B'ʕzʼrJ;WVxf=d2 ,3 +{=].uOgH<3%>BixaBdiofC?ivg"q|N#׃R+MqKW ^18;xS['WyTyC~>mf =8sr]K'V,0L1$=D:Hi HHFh0Xgn +A) S=ƧL5Lh!-3!4RvG]dff1{␈G*OIfI8qrtaDZ%Qbj@T/1\` +HԘF%6uhT7Z7'u="JLhhO +#[Grǁˇp5w|8JZiLP˔cQ$5:u\&uD8aIsjA:k{:AB#纫j-+@%*qVA*āN `$ +FdQ1`*)"@jUjV0Ju[ul39zxO)ԏ̀<Qh D)ŠPG T"DJtZ"#E0RȤ\BL*RR0nӖ5)ͦssq@IZ %U*PW1^*BX)`M`H IJ%DL9$2@Fk!'9"pf^mi={ueޡI/z;wkp毕. ,,xmoۇvNl[A7Rox$_wKi'p{`}.m%; "/hems6gyl#Fs>Wـbwv|m{Qs|uk7]n~]X5ԫ_qb.9D]#/E ?k `z&l,sl 9-!m!rf{3QgN%ȼ}g^>W"^ Nx%ceKmFD[Λbm$Є[L?spt g oOB )= ePB i"چ*uaQ outy |8|0 @DPbo !Dd+pǁPt/A'$r@It2խڇ嚘f̘kcuIG/M(8 UKUOh %zHD?)'D`>Spa}D W;.yPF1\+xSբ_I}b3nvvIe/GEČh}zzA/mGB[WGфpZ8)-V"O3K47MqQ2F]!i+E,556_[e_,xw>r_>[O%~_/~E˾ZTς_.X_OL-_b1[ɼwad> Ǣ?YWҿ__k0Ыgl-lK?tGxO>_/Px"/b/lOG#1aޒ{{zp-E~O~ҏX&K{.tѲOɒ,\|`͛t縷~:b_,wdAfd8|GuRZ(&H @t#. H >h@ ,lTt+2 ڢ=ӦΞ 8"ǍU-Ҧn{1~.ADt="BKn8J(DO n1CԫU GMf19ޡ?ޫhԷ]}^Wh tly cM@` ܕvC )(by AWG:|o;^Tӊ UAPv.A:PzfG’:ϣW,ʮ>.sH~^G$WԵ+{O4; +MC5l=o~_\Z5Pۤh} Jc.!ԲKw +eЭӣۅ/`2Py~q{ {TAHʴSߘfk<+4uBb]Be' :X{GVhxcޒEGnm(ۄv!At +Ȟ>b +խ؃R=/#Kھ/~*@M]&^ +:iu[ś ,,,_1ƔabT sW M670jnl9s2s͸ӧQ 29o+oAS!* boM33GML0e$SL2 wdi9$Ys3ڧ'evmSO54Vk,?/;z8a<\wG18!MpvqquuEKkw?~m_&km6N.ή(#.'`0sлG)prrv]\]|l|lݲ=/+ ںow8壏{F̩' ug rvvq`mcmz~ӦO6Z۸msk2=;gpwrL08:y8wpvrpne~|WMoa| }pqp{bx!na| ol3 ?6{G&k[|? +iӦ/^lն[]oуs+{2DQ9"cˡ+ptr8Dv[M[|6n . +1Dq Nkˆ!ĭ70ڬo~G>9ow>ܶ?vl3e￐s߷=Xylv">M>ﯿ+f;Xvއ}u|}m{.>V9˶yz{[83akSf/{f/6ٶlo3͓ ޷޶˶/^mmsn6{Kwl1aF׎Nh 0wٖ-G셌x;(N@9W,_0{ sJ`)ӧ #T0fp1: +rIH|'d [Tt +pqp pJt3Qn+x,˩036>l*e"y񿗉%bn1eZOj!W 6A6z* '&&H7SQE)Ƨs(fe8-(Z s}nsK~f/fܝEOk\D MHdM GL&ooVWXU22|]p낪UZVXgx9ʬ-@U`%^6hM@r`ePzjbcқfnŖl>G +5A%kCJ(]_֏÷d5EZ?,k{}2}--[Sf[ޯfޕEW)^]ڻdW*;~d{M #spoqG^+/ʖ([]iSf} gz{֛os[x!pc \``$L npSA[2άoOfٰ]S9cD^p;o=@x.3s_{o3o޲ -\.=r,?ܟ |dߝ] AqWP&%jҏn\0t4+|6RnL̅ w+Orc${nc=C[iFLk`M=7 né׆S\uUxMxM¹2'3Yڻf 5 M4tQ̱6.Èk}Uzeˀvuш`866&HH8?yH]/' 2)y=ٹ zy"  {% N ڧOT_Z6wP(ſ"~)*oku{S}ݽh3.~*&Ƞ]BQ}[YaI݇m~;y溸Aie[]SO[@gk@7իM;09@\zхt m¾@uKoqu?k N07vnQyKeCws@wNAGO)a@?ޱ/S%hmlyRuQ6EEy1z>,klvP=&qr8c#-K)>pxX?O}g]6aKn#@;F܋vpt"z'v?38WKk|PWĽ0B< ,l::}K ?͆<;e|~Tǵ'uA +a h@c#Qf * ^gӁGL9:`ѿ.W$_?ja>+JO eG/!D=@؏ɝr!aM$GS~`w?廏|;ʣwg. rK$ +k,IՁ |vG.#r <7+`- }a# oݼrHjG6#ܑMxEzf{Nnik` 8Ee4Ȭ삼Onl%#z+\ꏥ8MRXV|҄qsTSNwQUG;Fd>8L{!=P#G^4<1#SxH7tG@i<)r̡),%8$|M;X]pc_?:m+K3:h;.%*r"~ȻuֽUFu w`P$+z&ْ,v{ϙM33gZ5kϮOx?{ʕlodwv625hrFa +ʊc RK>xu ͮT\BDicS!APo~_DT/yo>X"T!bPPBѿP˯@|xY>Ds9E9;m˂%a?"{{<-:/f0gRHFo_VjIMD%"x9t"/?#e,;adKK܁E +Bz^`<:Ts~`o>>`C>] 49[ xF"vxe@3 =dM' ƙ1npLpd8fMӺGcܑ = +IAi` +?ihx+SD?v`줇#q^Q8L6>c-`klO)$58I L&M.;nB2zGM=(j¯ME5, +gW{kh{h?ٰWק5֚Oo-eRxr2?.7I Kq5JKL<.V.Vb*Y"+,pYeRV*Vj -[BZ =~9oWCB3ݿx{)Ro|Z%[|P%񛴛ߦ]6Q\RT%V'RD^"C-,!Bsp9@ +7噃/剁\1#g~eчdƼ.^$,`62}pm@<9#UKIXgy_e*B `0>W!ybH/Mrxl/#wm\ƺe,"{9>:zc>x?`,RSsbƉܞ^mzb%j4âfY}/f#z9|A{y;AÏQ3 =C0rhV&+2K7?qǮ=zڬgRQCӦIpJ!p)ۆW ͣ:a}P%hi:M]A +W, OsFqbFʮQ⋺Z?[=3*v &zF@ܱ?ﶾWßRtwEְ*Kҭ.>)9n,%֛@Ku Wi@ ]e!R>^TZ+-Q +Td9xT"-4Χ,g?eԾ Fx߉(o.}e (b~s=}9wf7Q +$\t5BrkdUfPd("JExceB ͡| |8/|8|(1̢|r-kް\p̼_9w(B, ŰB ^d(DXEC$PHR %Gp4(Q" !yB%GL˜eqxs}giKkrr +2s z1W}2qzE pwڵ׾ZbO f/N//97-^Sy`JfNx˼A ϶ 8<1WYg ^ rp4Zȟ#@[3@q@JëU^ 8/9et7iӲ,o-1.1 %pJ9)xP 7"&?2+ (IA*}]~=FW1/3vF9JԲYv"}B3ȅ=$G*y-y2<˃fx` ~a*@"ss uz]=#:{#j.mܸqm}x";2c2b+N Gt`С!L(tKAܯLAL =aqJ.P⌖U ?nm]ZQ @"z`8'I` }cLcc + DBB!~#{olqވdj Iδ@qSlNA+yZ>SVDȈ{G݃ @\u~op'RorR}S_{KF)d_oXNկ+8EV R\-Sm 2TJQb@!oR|7^u{ѥ\MKDѣYb)7n'?R-Ԛ#Js$b]'N Qd*DQj/c |p+>×5\̇.y D g>|m#NNSm*"J$ v +Zֈ%x GLXMOjBXE -bY|Pd!#|.h-k"/++rvhaΙ;mwgtVOEC[y}kau춤O m?ޑr1kH7N”^f#/-D&qpl$Xup` $uqlGfk1>YttX _|y/WIeb$, + "+?0$dDh!IL!#DA\@6]0z8a># kbd[b>3[T=]2]2zb_H=o/s{O6O}ثͻړ4 ֦xEhiJoWoS^F#V0uB!X+8=\85_҂}C&֪m HdA)hĔ t!b$hV +#\'2>Ĩzg@t;1<E@: +X4 m@0kB "0`V2E 5=xy+;gt O YC6@@8:I.@*tPj맻yܧe.^F@L-b"UEA@PDv@~96hPb%Mx٫>-LCcDzp,SLsswՇEUBs|Oˡ3ŀ">5_>:w.o%4~(q iP^Ȇ (B,Ê"<  Δ2nrA'k_qs /}ݘ2uK`epStϖNQ珎\_Dךj-uK1uKbWS-@,C) +KT9L,EEOB +<*(A|4u~D%q )PL25x~훤+Kb˘撉Kd5lI ^AP)#& & wxn3+!>SALd_̀_lЮ?xgw5hۼloٲuW򩖛kg<)K.M$ &]耀AFBLw7? h ~o u!ǔB"9^A N9|e"Ojoc;1݄!W9:pj@' t5tpZhP9k 9#X@вlt`d:(Y7A\#| u Uox"À #}5@d3&au^1JClC@@`h`ءɮ~CS gzJ= *Y J6[ċrֲe9'4ZӮ[o=JMG WQ4׾%6>Jj\NzAK V"x"3šPGxf8 e|dRB=ϲ蠓?}_=x'TS{Okgg!Wkj"RDTrHd"2g" ("Eh(Q D>2YLeiTӮT,{x"sjO;l{{_m٣M=;֖<$hygl5. +im~pF\ )pPaU@:r"Ltl1L+p]㴜bRB\˖VR;Y5͓#Iݩ39Ja (:I(LqO5쀐;au:0FfUc eo~mS #y~+VVuτ7bB; RЁbE mPVHW@4v + V4u˟לPcItyUsŪ&d:`t@.,%?J*$ɤV"xBr +&URLAT9Zb +20:N6N@mSW܉.[=OgJck:  @ãGX +B`tEwGlR^Ѡ#1 ElD>2qqW*呺ftcv cpUd,+$M"a%RX%DQr]1lDYJ-%RTUbFKbD^<6$2f L'Vim@ L1 ̰wڌi;ʞ?jyuG-ojټ_nmУu㮀pĄ@2,g'@@WžY+AG (6B?L8ayP栃d@CV2I.tP+f1C~; lr0.Nx86No&\Z7&]:C0B1cʀP耩Y}v@8耀1tpbBME>S=J>ha%F {hPaXnw]ٖ_[xc` fWWbos|%޺+4c*iBo 5I,)AV#VATb='Zf̱pP-.J;Sm)Trq~s2 %&՘w$ag μv)ve +G^ˮx%pHMD2R*D R> +DŽ2Y)v{"i⚾wg腝njAYf\Ub,:XˬAF 3,$('OJ%],FBLSeEqz[,Q©yi`fJh}w=Zow_֎|=M{ڒN4ݼ=fK" ,(_O@Qbq5@8;aWkAY + ltV1sxb@̡j@8: ޘ!:Q}_@ +:`sBêth0#@ (?l0)vfc1:D?:atl}G +0d(4ak' ´ >٪1,ٓK5hТB=v ,?`~?@ܑ΁N=cW*ixXz 6O ֲ-Q2u2Fldo‡F+ȜtMJ@Ը,vi5uZjUR8R1t$D: <~^>"HTJۓLw&^^y]([C!ԅW"ƅpc* +!.c<:$d1/xO [@%qtP%lMRPb1 Yh`|&,͡/SCib>2nxb@DJ_k˜~yt{@6AAm_F~ǝ^վyGfַ=ZxS7oN&*]+q{vDBEGuuJ ~U:=0Lj`!.Xxb@b{W=9'G)Ė3v(|Eʱۇ)E7Ĝ{l#D;8Ubzz ͽ2 (fܓt*qJU3KtKt@u1zRV nw? ly,@+@)OoYX>M4~H$EU,+xD‡V ͉פf V +` +fP"y\@"HS+jjĄj!R)‹-yD:BH/Wގ,*ĭhVS( +QC@`SԦck1wةP5$RlPB ҁ%)DD>kǚޏY3kx;laQc`Y^d /&fDRD9H V3 DUt`" +h\*(:M>4l [j@Hv@Ӯ;y9s*k0zϭ?DiZ<ݶywMo&S2 ֥׉~> E}0h+9%YR}vju~/ 1[P*CSJ0ŗ~ikn~ _!mӘHa JT[dRHVnX T4eTP"Zb+9P"6*l3f3ޏDE " +5QJt>RI +@!S^Ld!MODg1YQÇw"33@adA?s#%]_|~wvTψqdFᤌݾ[ ?|kWWI'@áW Oh5Yi]“AvzS3\2|7Dp27vz# +%#CrJ$?4r{G@N?pi#'^ 1<92K` ԅi6n3M󤀐WAg܋J8hAX:$a7Gԣk1Q2 eCuEK;(t.AGn=CH@PO +)!{+ ~G"e`'$+UIrKJj@а(>lXJM2%ҶF+֤zA$[ z)^fa>s keo_m!5QŢҼ=~/ָ!T[oD,x~K|0ZVE;H2 ⫅j^-DLYd7dq2??ָvNvg)(K*FZ %`DDEiI*36&ʔJ4 %( b!P*D@1\L1sXFgBˬ9zQQsk/thx^_j@8΍:­OzwwMox&x bS#>Jw?> XcÇ){?SC]D`h(taچipnl6%XePn Fq 52CZm%eJ#i%BGWI.=! A΢CT7i8Q6:, V9]v@Ip½Ƈ7J< &P ;(#a-@8Z(yAD!BF^ +#Vv@S蠿ۅ t7u?t}l/9‰/;e@ܗnAWAi"q2i"y{_iMrGIoQG%5~tDY r;+tC]&^YJ_JnX;&-G-FU1^" B->9ӆO'$#߻mu;Œ̾G"C:Tۇa)#j"*^ dрD! k$'@ȋr\tPx2-]Ǩ)U@rlFIVS*Dg<1XFQt)b!/K2. \T :i3zvhE&{-v8[I Ý.NԽNh@>_|rr3ƻ@iox~ ֤ꥭII0 qXo@$e>N=X]/TCaMjIl&/4,jMfMn>zC:z]NDǕ>) ~@x@TZw$ɀ`Jj bP2 2d/32DU [#WK XI)\K5\l9Qd1;>Z0vͶ8pN]l,D%sd6`:PLER\9(D@ #xM9)gʙ|˅R \`4n̽6^v9_գ9ZFA>hdN$ E=n@xwmq΀.ͩǺ'xp]+bNe\;Fqv|Aв bMIHY& Duߥt.5:8x<p@cG0B;",(#7 pP.(x D@`pO =SSְ\ Yİ 5nt$u s5|L-x3 p)w }q灶^m֚,siWbe᪥1%lXFHm o^r&Es_G@ L*@o"~1̑ƧwҮ$Ef"#EȻt4vKyW&zd.%v@ۡ;{Fm'E_ʯ :|RuAջe boZ D ^5D5ji[2q"}Q!QUb4i j7lR|B"FMxhMfIa9vK:vKLɧZ>'c=R>NdJG~ǖb@4̻13\X%*dV ܆ yqslW'IRR\'R# z6QiؘR&,?Im~v)N(-D"!|@("(!AmDݦ()@^!D!KB>Kd5LBPcK>(>>f8f"DWډ.(!tP>mP‰Up1<# VҁbGi +>5yi %p@9l&#dFmrw.9.AMz٫J#w +u BN< +gyL/%dTM"mK + x\.W#d|n&!H&%c'Db%ޏ6|ƖRjm3 -1ݧbJDNSȌ # K|%P/&֋RvU<ڈJm@X\jJ> fg7m׿ +AmqwtGMʾVl%ex}vtEaJ(JDT]CЄ +QS.h*J>O4>_.@_=R Fο0NA@߻ 0D%BAfI :zlu@pҜ$ZJ6VQ\+ȵ[v% :U:19!&$"b`S +u@ГKd7͑]fT l pn[Z p p +g~\171 O9bu:ȳ+ޡa+4Cs@l¬5Z~4qGŪ{A71tpJqV2 B@VCww躇MDv@M#QPso쀈&W/mMf>J.ѕ[+'PK{%Gr1ZY2X\ްݰi9vJf|G[R Z ! ܮ㘘";W# ~k" n1DNhHh斤z3.*6ҮJGQ:)FTI1BX>w9pHù~Kc%Db `+L>tUjBF4wFРR*АT%U@TJb8cAY3t${oͽ{, A.Q.Ag: w5RL'o`IZ'HVꮀuF& $`ɥ?NVP藗?+✇]_A@WĜIg}> 0NPdW)RW:ĺJD?ؼ* ~i@hm\'4*gcy岭b :L{L$'gĴ 'O5?> 6'lEs|tZ5: `: ~g=c;5th;6@tkD1ĭ_w` I;7uq_p)&dD!uYbYd+C֭dLАzz5p +!3[fxHaMmD4hಾR18?nO?ӿfx?*d~O/k%ƸRh*DVAQ;E6 E%NW,)3Cy"k q8z_NQ?п[p \u;L| Kag"5I%bt)ƕ")5BR5@c%D\Sk2&cF-!s} +zl "1apV4w]Dzl%VWsssߴoq脉. (`H) N9'UAޛmn$aA^A`i*#x?0}~DVrp dИ YL7ҁ&<yeF _vSJaInI +w10=|>pٙ|D+nT⥏^=x?آ4sNrGY.E#I;8$ɌPPcZsRH%~՜~UJǜ$$&ֈq8B!8Eܧ!esJUbRtᓫM(bK8hXCg kwh?Mнvk_\9D_s&"fd)TBxσD V}P,geu bk i&$$5gY#؜L9.~Vp]=&vďl@ipޭ + vR1Z({KkD Ò4Ve] +zHG< q>|t*7Ыi ^cwՀ`2Y@#"2:`~ %7M9,YA +:(/x{whoZ1` ':A296N,0Uʀ8W/o=u;-=+3e<^o[|D9!tJ1T rAN(ͫVp:4SX2nYNܲ|33c @hѮՖT{\qov + yl؄dj!M̳XJ8{eކH:NN̒lj+ԥʆ ; (W@$ g7v ´4bhJޛR)t*EgUj7Mߏ^7JfӞex70ȒP)! ;O2yfASrD| .*H9A: ՋGu|b5_ǖ@\6 x4:ݞ8^$^;}3`@[D@\rŰ|!1HT P*S-$U ՀTr5XbJ"\᳸ ;>]x?b7|^98'Nr5i_nRy#l:_J)Dӵ;U7ȸ@y:=6@ɕnn?ٴ + "-sx>!:@# ΂#zq¨=K*'qw?a#gVphJ2ڣ R2.:qav^G.;3Mj\CLo% ΂<_{׀1ˀ5x[̎UEMsA{}F{faCmD$G:w<}Z;"Mn^킉& wV2ծ N`=+q)(@t3b$LKA5orIGV.hX [@ (~_> @ggwn3 "_ݯvUCh)quD׽}_6 o-l;b JBDtPNXlá>pt+ +..ƵK^aZ ;c:x`0MLY$f77ܫO.o"in/⏯ /B,I E-k"M>6!E !UĒI +q&ؕZ}A"ZHv5@]}# + H7N(F'vu,X *wwScNW?ynw VEvʌ咽qvΙd\dp{?۸q e@t`/nvVC+ryƧرa&4B>WDAyUU585\am; h靺9\E{a ?y=v@|z~qY>oꌯ}o*|JX^Jc2 @CtA*r|XˬO&d^]i4h+>AƠ˦}EUϖ%; <2l\p M;"ڬ1:H+b]uBJ\#&V)墊|pE4R^g}'ۓDk Ӿ~- B蚀d:Ȁ2g˸rNSJ$!|2!,ɦ.@g(@Ȉ=iOc[B{Ͻ58@v?-RI d$֝]_w 3(%> 6n EZ@ *ӡs]q$ք=#o6 ij.bWGjurgU:gVa}x N +M^2 (D/ηH;~@0Zai%9yK<;BLƍO>- + D k|\ҪdPգ͠! F)rcSm+Bۊ^Vlz"@ e@m[e| NHݟ ϫ_nO_xy+=*@ +q5:3.pE^ +W-8Cp4, z j1\*‹0v]]b~9¡Kt(`^ 0\2)# xճUD;1ZKx%#ҳd AO8X+ʫ3 4kxM5PbU!4 b.1N=O6 [|gK;q^͑y; hҧ+D+JA\BkqlL ULGи5pw:|:aڗ{T3B jq[nKf׼mή lE F[č/GnˆaV{Hqw{zӦcFAZűy/M='\:誀l u ׂO}2 u@1m"gcpҁ,r +q|w 9O`=Z58 GAzi}:@`J@g7?_!had7Z ·v92+6&gr*@鍛  ,Stא_b֢a> nccln E- :FQpA.^oI11@p27n1bkءpE%՛4XRWJbr%ԉ5Bnj"ֳ\ /2ټsߓ|Oo @h_ 0_g@D*@A "Y$T%4ո;EɆ%M *mѥld1φdAY)Ӿ 8tmޑ?jЅ>gae}ڷ淥| bX^=9"]KXT)c: +7昂2MM>gN  SuRu{dP^Զ8=D^?0Nq93Bf緻a5@lY # + pAGa #΀'xnp0FUZM s2 F I2h&% H)u3m + ,#\߄UàƕP,= x; 1<7g^=vP= + ؼ +I .gmp< EY l}JdƁ9H}| :l׀E$dBTʀTe W=R-ݓ-]SGjuy6@x˻_튭XT1~hw+6c ufVB:4dewsJ"z! +x\4\]!DBh^׃ D@l/mų%_Ewct;3l1{b+e"b+3qDBB%@U\|W4D%lX!7M0/6g(ԾԞcM,suڑd|?RVn_]\R~pL1HA7#".wL . +H`..3z2z3I3:bؙu  'hu?la":)|nwM+У +ǓKBm"ϯ~9GRL5{iC˝$Fv*^H()<*g6Cؤ7/Ro"(ݰw+9MI:(5 ;A] m_۾B5H/.{9lJع[O &qh4땲x֤$cJ.3@&xשghmǭw(n]:n58=4x⋪o)bx5@ŗ=툭 U>L+C +|?F ݑex_6~ʁ,Rw$ޏ19Ag)cAy$*6Rt )ābY*a" Elp>CeQ>iԾ ]ihQ3>|9x2mט 7@W/ݫkw$ ݞ (D# DIa\h g" +H(?!9mҁ)?1x2?#I#Iڙ0ɀؗn$ZVk@~D[;z[7(s!y/7RJp[\ *޺Gq.EJJrwM"0<sAw +s4jz@HU].X-J:k]mlQmҕ|=~9δ;}jk)h͵h 詛:(2$'\]у"k%g4"45avѰ8kDl9ߔD""> ?Jy'^a33'D֭mto(Uפn0f˯Q_WP R5 !*xK_b/r繈3$#:N)]c;罓 +ˆȎkn8>[%l1K^D"!ċċz ..6<"& +I*{ + h gL$~h1FCnj p}vRA vʕaA~rq ̂ȫFRb A@j,PaQ7 +j/ ?19ۊ@&Uj 4/0 O7Vmh*Ft8N_APB(2  8}l AaDn9mx ;P| +^0\#0 TFALF 1 h~4 4k_JA3 jAкfDpA 0xw8([ 8Nj8/_HL(~r Jj,5ۼֻ {E(x0{5Qhs%!w1F 6"{L64vG~)߽`s龍t!] ؇D })]!-\PlΦ7%=G gcbhOC\)6$~ ?IKN8IE8#9NGP:pZnK9M픪rP BjD5P˗ʗȖ\Bh@jhv2e/B&B?[-AXKAl3 O@ӟcߴc"=Rc la/> jѢI9(MuFͣއ 9MHАk"Tthg$h/5éhcJ"P6:A +vKA4R]Z#2g cQ [PDP4u 4~j̢q ݩSgxx Z |m"oj @ E5xQ n)r5U1#ʒ!JgɛqA/nKJPCOYM/ i%킋7 +ãr,|IVzs ΀MYHo|AWqu!D_@!:s-<^pAuNqF#9ԈkCip@vg.C^~wO|f be$nĿC?s .ؗ~+G)v jM]Y-uVu{P*۱Ǡb)J\&t?rJ$? !#<؇6@qoNyPY$.@Nds!9? U"m@bޥ3NCj!c's e;"A(*Mi؁, 6sOjn$} +Zߦ`>7A40f4G,3otDdlu6^ѡLZl|HxWAh| Duփ j;j) (XE)AqaP.Zx͛!~e `;e>h ƨ1QO@a {xz`4oA4ɡk#GXXM2j C d,A{1g?Rjc AYtV +7xA,5b4*9Z@P!9qrbqaLa'ŨRM!w볗5x@ ;5W+W S汓]+ʀ뺍\Vى˂1p0 + xsJԛԾH>D Ȁ8&"SԐ*R @ *`gSPUPw. jpN l * +K&嘎mIf)Q g7Z\X6v Az=>M? +@m +E.g{ĽvH=t$\2PsJqL$)7&8<#0 P ԯ[cyy^U1a1ڢc|qa%^sOMljk_9Bİ9rތ +ͦQMkTGo,IDlU]k)Ʋ`4-QbP(4 0A6 +5 0 jA!յ `kicaM)`> +huzj0GhP؂*)3 + t(e0V`Uбx _t bԩ=A4 +jEXap(#Gý +j1Ą~BR ƳۏK?3 Q\= v|Sa/J:tzmS/ s2Y~TpM{R`i} l5b:_ yn7*&0lYfUL$sKd>۔R!tba L~a/ ˃LA%}>Q34*8R Hc۴s&rLoS`Ǟaݳhԋ)BmX&ې&sш6= + |FAl'v; ϝv}斃fYK&9NsT1E%Y99] ?9`#+DPUk/˺tZr^yb!}IM΢+wQGZe3N/9s?HIlhAwP1dmM̸4}" P#1da͚Ge JMُ-44l4AXOfA+&[ +B_̥mszҲڧ6x4>~Ee5*Jhd9`&!SjQoequ{Sy*T$ }oz!41>)QJDmB-m_DIMˊ; n +$Q?X~ D54v%Y@90AZ?ԋk d v`2>w/*2kO^|sBǀ ^e`w |,}}/ؗD odĜS3 *CsZN:lfH5 /V5a^sk#@ّmRrdC1H=mڌв*DMV:`p[2HE/N؋ +1Di^ƩƸx0|^# ;ޛYBIprDq\#G!"ViACB2h5W+Tc/\yA| ID[ + ׊ w_wz~|$b%A8eA%PԄӀ|>q +\a6/>hjjr\4B\#PW M&\?e +.{ nֳ>bPS4rSC0hE刃l~a:$}޻`{4緗`8a;:|3,xmU JLT䷇CM{(]P|n Ax r0T|rmh ^ൃى'10j>iAMq h()ldo-n]hxY޽p{oo}߳>>} +6z,]187mfW} +ż8z$Lr I H)M 5*C[B_ĐFǼ[ RZ Q̖0e-hiiR~8o%ac ȁ"q bp`SFLC1tġ#gAx*I^c x )}5dC퐇|[ Gg>$̓060w[*:{PXjs_ +bqwG8|YDYW@U(*|Qï:{+A8$^ӥ;C "tʀ B0"$15@s|Po ۀ $GB!&.>>>>AtB/> ; #S}u!GimԦ$!X)*&5_ bΣ*RIHls + y~4L)t7J~o7dg7԰ v8=Z}:ڀZZAM!m!}A]mK9@=nXoP61ǠmMDULij.w7ηM0晣{4޻5R. 5>{{u|8h]_[VV)TQh_OH1 2Zqk=,uw:h453\u ?i3U4QHT44CW6WK-4%۠Qƴ89õ\L&ADDU753h] / WU6k*+obYaZ!ǩ+ej^[Q^؀R-Ҡh&L6mV`0/ I[45| UMl0 tE=B1BQZP-m QR f뱂:4QH4vQ=t +Rsk  +˪ loo _t,6/7w 8418aU_T_Ckv[&JUgZYټ7u[^QfP׎~K tYUZKώDztgxHQ +^# +F/(/*/P-k#;UɠqiPXKOO_~QT~\ta/W;yYm$3^ ace3sO;Qu-<|}j]$9g.)} uCb=rYK锍;e! xS&0[i` ݚ8f2NYs璭qѺdiәͩdjc"@oLb6&uq +2. nXUovLxϖXYMrߒX͞ )rPlkfnY{6e1.[-I;[$1qL6'u1غc1hrm&_#Q +w/+^:Vڻ&{ebSrKlc9Y咢vM]S9I혠MqX|c x7qxbk%"Uk•jDFj +R!߄T}:v'>Cԡe(;4rcZ$v$ + zV;xT:uX^JƥJ|+}# +)`Q +)'W+e3` /!%?Ι;?)-M ͽh*:D; D +%P4  <ƲeIi3QB4C>iz94}*ڐm3f#"UC/4]mƼ(?g,"gfO]@@؁-** ,G7 FQUب.AljAhZ砵bf@V{yA A-HML hH ,g[2͹ #j2cH 2X݄cy ثzDc' B44}ay(C}'] |Ȱa Buy)~B ~ęо`:jjU^ _ 8VFtX5-⊵T^/ + y>b^%6k S ++TP*W 0 b +JE^%_NVj(A(Y=}Y8ą_O_{vk <Ȼ|{H#)(,lVxI9KA,x; >[SMSam<.ߒA8e.96pΆ4ښAnIǁiĦrC>Q\0<o 8C>P;DѤFpNZX)V\m/kAiw}jʼ]#UFߔݺ6Ů%%7R 49Ө-)Ħ$|czczc"Zgm,&%kb}|eN$Di\!RU؅YҴ4%1?+ݔո&L)X-9lmoWnIPoMTvsrcbCX-_XZnBp@(}D8Z>wgyhmHmpmpmpe=m;-}M[Is1]>yܑ~}Yأ$]\mWɾ(ھ?'o{:A+fGվUe+]+TyE?[J -Pv+[6]MM#E8}n@RܹRkjo6>4R5Vl%RƠy*-%e$Z(W@yu` ^BC^gZ:Y95*/k.++4M^^[bQ漥GV3)Ua"ʍ0@B\*iB1hi%xE;ȁ~߹瀵j +-Q:D3|R(kn[!lDI#n6]anKZR8FMi-W^K52b*ZikiOUV AlbkZfhˁ&Qpc%u<JZF "TժWhV@?RA2VUR%x} ѣ08wjy,,S:'d$ب -WujDUA22Wz U*,,j 4+k WA;+*^XxA{p5%ʎŠW ~);Cl¯^i|Yz۞ IJ0ϐNB9ei2ܖ4vs*)ݘL#/$Fpul]jmjMru4AWGU"a]KEK-K" R*|c"&ZOr$_yG͚HRjybM|}rczs +%ߜoJ6&a:kb(\`u| %[[!a/A,}qPw߉bKwك4S5KûDmSlWmsū6)*(*2{}I*DϪaY%Ziڹ݈]KZ ƿE: G6%/۴Ȍ솕7aUlU=Wu +BOsϢFа'GuR@aH! 2]Y QS@1XaL :8d0 +JqlWruLk+y2}OE6?kkf f +~x%:;D9ZpG V@רDwD OR^\(eUde5JTi ס8*浂NP5 +AG`Fԅ&Tj@|Z_0+)'*[e1]~wO$.>>~|Qsq7i &Mo.E!ԧEyY%rt&Rkbqxn}Y>YScձ0b0>bBQl"1(5G x>*A(6XTܹ*Z[z?^W8qϷ,{{K#5j٦C߇(%X.+Ci>b"Tp >La/DiBJW~π[]r˺~_(ڜ][HE=+Ž p=D;1kDԳBԽPkTK˃@m6v˃0p0H6X(EɾlDz*,+g|(]!rREmXAΞtZOiufz`q2P0~\O >gT?NS3WnҫMLe=aҌDa%\Gz$ F`h1tC:55 S3@GfJF߃CqƐ}j¤iJKkdpQmZõ(N6Qd>U 1CZPEhUPz +M!ޯ"0`N6}ik\OE=&arjS1J +dx`SP(,  4ō;ruP3hhF 4]jmS'% '7? +JqZ bYDt4*RNA&8x@ ~_)ԬSbz [5Tz(\>`R>t漅HR^z|7~)y֓k?]}ʃgZk@h,`@0O$dFP(F\?tIkJ?sUͺаtkw8*6 ~ X7iXM?1>aLЃ J'ޒZC֣HkJ4^*+tqVVX5J ,pb9/W!} 9 4>5H Ldt_lAtji{xNr},ci "W!y` +Kp3k1N@"c _+=m/o6j3OYOx]܂VM!i1!z +Q+IgYBAh5JtRϪ5PLmr (4s?Detc}*!CJ!ُjN J^+z9:R'WjG"Avd +BVgрp bNF?,j3F?u2- Jn SzUZGQhrnr"Wi*-\CGfXKRLB_.ߟtW.C] I7TzpӸn9Ջ=,Dfn8tnRQ@N*^myC߳B}ZUkSgnqҚv[fC)~2 .$;Ѷbx:w1]@7|vM\K٭[z4 +;[yPxO\ƣϫo=.W]W +@ZPގQbčg P}0g}/?ʯ^׶m'o+>jCX]҅_,x_,}/}G[?V}+ʿ}clvѧ_M2u)-p-tŢ/>/}>O쓯~t>7dqg >_lXb#}q.篾oCc +>c'Xߗ~"\s1^% FaB Fϖ-/V K3]XA9_zz/8q@,O+ F>XqD$"!<")<2!<2><">,pv ŋ%p,/79:D&0Z$J%0I(,&TᕼdIVNz/'?2$4V, a1"qH*A=xc!Q"8A,ko/(;+i +G~ٿ9:xzGxDNj 0.Qo@<QT(rHˇQl8n`(\ ]%/"LpH]:og~:uכ<+_]WX +‚|$KxAx)[0caG~05 >a֢38 >*識,A,rhpWp9_7y;7eg~~·5 [0spU32Ȫ7aoqB&bBy ]f֢chq~Ƃ󬚾Ăpz͛>:,X5 =t9 V^hw` lxN`56VtV㝊 +R6VXOxj@F#3XCa$>be V Eoq"x&Br,wޱlc3AAxs#Zz[?VV(0φ@xL@@a2 +k$ALBm܇pF^Q wޱ½CaMFA +YF{/ +>)޳b 9gd5w-/Y;ޅ 'XMq]8'?γ돊Xpay|Y2R)D1ęy,yB9oK[˲`e>Om}~yy~]S^`cH x?Y+޿?V}fկWM6o|wObK,zRϧK<]d/K=Ycxpx%}󷈟qk[~u}ۯn?ԩӀߟ6}挙g,3fϞ5ǂQ^<-2 uߜYΜ9oyN66ߝ2egϜ=GxY3-g|2MO͚9,>Lp\`9sgΚ7}&b̹SLENgL&D8칦3l!RFGf7D 3{<`3M1oN +;;rY f͙?kΜѿaώ';9 3Qg·)Cb +~Y gY8kЯx,Q7x+glÞ?i3?;eU֓&Of3̟i:sPcDA΅|3̙̹ '>߮>.Gx ȿ +eik^ J;u &ַ|m ͉O/D^藜8}z @Sss{/ME#ǜ0tӆS@_䩾S}NB$':W9}9[yZM2-="-iLa}YN|B~&25HϏ""NڨH#Cᩈcd VrvXhkE +?1c^5zQma& rPzBЃ +:Ċ v$4#>ȉ,9o?ֈ"h +a6ʼni)%IIJK5:)/H'&%&EƦ#RB’E3ެŋ"%IѱI|0))III< 15`)XF(g|kRRRR#bRB%I^PhKVA`7NVZ@8"104/070v6_;7OQPX(*9*!-6 >N1B SY6%oK%$'o2!MAGۭhg[&%&%nj6I $rɱ a!~޾Q+ Dɇ=<~ QqyEW~ʻ/.>x> ~MP\^wUΙ>oϬ{ekvkǽv\_;;5}#.nğ9w̾gnqu-Cm]m}큝?ϑgQ>rIsغԷ|TurmL:@77ndȹ:@lF 0DYD Ӂ}iW)W tqlҵ;s3f7{qMtEpYtQtHE]%]e}C=qِ>i )CЧ\'%紉 繘t:{IadJFjZ=~A +tihjl"ۻhiڤo@*mi6ִH:/[~}ӯ՞>+ɳf. +Y^A]ieKmӉkiC4iSt4ۤc G& R>¶gQqPbnGO^U54׷v4շ7-1_}0Gkø4"jZjZꥅeͿ{?'ڼs:z_UԴ6յ55hm&S!GR7S\V]\R^g~P,̚8rsoI{訲sWt=lwn{fپ M 圳DY"( H*RT + +\SAvz3}NJwPmNIokJvʺJ3Tp;QSU{F67BPI4CϺw_)im{;**۾@w߰T)1pTA +OiX=T*W0z=CJ5nR*{Kq~_۵Φ N RU]_"NA\yMZEo7_[$~_#=+v10EsLyQ2Gr0/` BV`zA="8eaPt;1y%UNEWRUb_|t^;l*dBقNS$p,FyLi:^w_$X4tJr" :8IS)ySD!\gkn-g?I;I?fԌ#NP1T "8z1*s \H`ba'W@YCL%uڟjyΕWKd +:O cEPp Avm^fI hOӶQmpz7?gqY^(Fuf_K'99\WIB;!6;dxɏA-T H{#wwk3G4*`?[/qqM+p6 u̪a#)z\\г-9A {3@#,u9.b~v7$LqYLs:F3“Al}9k)x>7@ +b9ft@M}ڵK@ai端7oU+5۟t],DH{^( O¢jo}4<׿N,cBN!|NXqwGP`8;QAy"h|%<1p7ؓJ>L|y"ؙm"ۼ;Ӳ/ +gLv5ԅ_;4q_K\w s:Ly9l˜6{x!rI#>BTЧϥ3F2s – @OZl0s3&~ +3m20mΘ_XQY1I,]ٔS=}Pļ>ڏlNƙF0FfHO[ ޝ)#?Z Mܬ 賛!) ?2usÓw.;;GtĬ K ?6TSfVL #3R:0pn˘71B;ᙠ) 7a4lWܑc5? jnIˏQ_Yݕ5m폻'[e GeC Y~)- ':_Ĝ'CΓlx^·rAlP!{a=XHP<? 8K;Ci$u<{ :a ?g >ߙ$Od_߾η~uT[sJZcNB69p8K!Oi34: ?/ޗGG}OQ>'IY wG-{ftt!WtCY‹ȵި>r;sX}Ivul٣'V\˞#%`=ПaO8A{wI8iܛfˠ2k5 +_>MZ'-I3?aB a73gF EP&n32ǎ2,?:zЉNuޑ䧙Y/毇4}ҳ+ԓfȼL[l:T0!f Moր{U,4 J;N4Mp)v6:g'Y_OVɇ{Q}a=iCޙ2%?f^ A-2E' F=ktixԘ0[gWWC:%4? Hh~ϱ btŚSvx~V=,aޗV9F51N 2ãFGPFzb&^B#ZБu}?C35t90*԰IJ7L(d"cbxP +BP׏j5I:iZPhy}xutJA@j9iB>,\ +orAbVJE1nv'.9kF--1J*FHT*?0#z +4ܙsO"ҋjo4k +DHmO yҥi>Vy1(Q(_~{[?Nju|ͫ"kthKi{sٗNo]Hnp$jlqՀ=XcuSSeEH-"+>(JѡrlP1g֐@ +*#Oc_w~=A*UH5<Z'4-dl~ZHƔQeLT)\2kt-ר2 kd5ʅlHa&or >ӁyTi=ox^ -8|R#_ϖ /bγ\EαAggg@hC>נh3{R-%Yj*>ˡ3`]ʇAT@1Va=yoCm?ɡ˯^q-Vߋ#_Lkk|-֞T7$>Smlq +k P|\%r.)KX *b# E7L9~t$u7)k9*˾*ǯ%e!WF\tSVvŀlѥ(LdQGs@x",QV[Qg0 OUbNQ,' 5W1UTVT֔U>Aù1<+cLmzLj~~dn^;AhfijʦT`ܫŊO IpC"upC^0FegͶd,~sP3>EY_)9%sVu9Sj4 +>6rc|̢ЙG9ə1YX'Wi nD;& 11#g*taX^a,04rd:?(fr-95Ǎ9jiuoA(- 3@EEjo BǫuJ*X$FlF( Q 0jnPRܠvN=eFEH۴?S(>LCuVgьAt\AGcr Be 20|F<\y"ptTe@cێs y|w}$2#IVMZM80!0|F+EUD SyE$,''SЫGiʫ.OC"Kn6mJr"augN]HK[n}C:ӚS_Ak5GQ_gcW|=R[.,)-"E@r-ɖhMj&[<T:+gC-!ELTSQ/7/xP^^+w`BVIWV[rPo/:{ , +1!D9ajh"t"%7n]7voҝђƑkG]:uy9Cn[:/ 414F@:K2Y?);_u_},oAA]zVw٣NJwt z.kمNğB2ZS++q[s8?5^{>|Ցq`OAvXt:d1@hue ;@au9:>0zgʙ2*|Oi:qWu| #ʚ{el96Ko?}'|[_g^'6 v  "'c@u_ !`*>@4QĔ@?LR!DÁDyۚsvSH%Iˎ»)~wvʫtD5SECUe1@-]*A+,c2D0ŴHj[D~ ϧBӦc\KifmATW:aEvy fPk vJ_ >Lx8|+YmYinyܡD$鑳w;BwDG;&8ʑAS' 6#Zbջ "+[52NrF4>w ;"g bAL~Sase dcR(+y, ApYDtlHmDA vK!2,E\ p`A +#Р.X#{$7{~pHtpQ8ϸ F4B= Sog{{kwMm==eQg'$IgXL~t8 ё :j +tƂLSy `APNA%F r"U==k{|=E+=-Wz% s5YSl_lHJ߱vS*vP==&)83eb E% %R,vwH'gDG3k xǝ 5]i"i,h+Wgq#}c{!,#> o  +Đyh A啭 eM_|u` I# .u*@DA5 ⭏~"̋{y_حW9W/˴XH_d^0E` +' (HAAG$[ɠ $:(#C LgB,XbAܶWyLH1\o?8us? +[Hk&5ْI MF{b#ɑԸ1eOW 381 P' G *l\9SJEᅖBKp%0oMhKmvf;~u!yUs|l MT[cptBA8DvZ~=c776?N V;l||lYS+ &{rBry;R^ά0]it$7ځ$D-RC"P5߲gOgCd<{FKthžΕQ_L 8[>@7ϙ䌵.GAr|i|bL,nPBjE`#Pڅ|lo&n 4Lq*|b׸ :A~5^ @k O ]1Z%\mL**c84yhnqK6s3^qo H;s)](]CaK"S X(3hl9u&&c8*]:ڳճcޮ-{7항{`&/)4r۾8 h{#A(tRGl %-3@#sNhӇ#ӕȰ^{7\ȭ~}1G pri M##+? H/UpVG(h"J1-*a777_N%^e}*%\^/,#ZER[lD-%UQUdt;Ky]"7=ֽ_ +X88ey_[On.lJ )d8RS^>͝fGZ=m[R'` +2*/"N^l˚6S G- UtHMXcy/a.hV%,NTY*DmtL ]LEsgwH{#A*ϔW:1%P@怞~/{X7Kչgm{zwxK‡cD3HK(c#5 o&뜙OLZ!1aA欺9۸3vN+&ODkpN`A [nMb RRSh +Ƃp.F`]i%u/.;扂XL%It!TY`Ap 4nVg +&|"[6ݻѯqd {IiG.ޒ5Jw^1o +B kWLĉ-лi_g뽻7x}'.`Wﶽ=ȝѲ3}VAAٍ-=C~$ µ@Z^}Md`rȾM68鳼;|^0j:XB̌Sn 9s?ɧ%5{o.@r]YwyE4IruGKTsULB%WN ,ad rw:Eꚃ=M{ϳe(AS%>s4_wWǡ*bA%TT1Y0C3ɼ%qfmAT o."4+FtGh o6xl]׵gyݹco==;BsN~:4|vXj\H19 @}\c p! b>L-ðQ.žW1_jVhK 0 Gh) ۖ +Q8pd7;K hW 䲁:J&Dic`DA4t{>l|g~=?}{uokg7zwnڹgWW,Pv ܺb7^(i3ox#A,:BNF +{g(m!C-޽}z6llߣ|:6x?{zHZ24d^)j)vRO.iB1\Lmy֣/otkb#7Fv8{wGHv„NId,Bf4v:A$=;G`AT:_ya7I$KmRJ*,N3_fP;3&*_f׺> vg6'O1e:GBMC7 M b!|M4IʆałpR%ײI5H5PEƕ[@D9(Ee[⚂ؕ3),SjK*[t-VHO;I4wMq5|V圛(D ]L Κ(7oO%cۂvSջwO&΍OͫgWvϞ_IEHsNun.!4VZol9J;8眰A8(ҝ=AtBXHSܴ J>%>8geKxA\J3p hy$* !{ѳA<2䕍5zOᆳ>M>]qo B /6qx\9Ԡr6ɵbSD|`R;1`; h?54L쉐)տG٧{Ӎ>?Zٳ٫{g/L/ =sJ;v-](c +"%e*sdqbo{#FJ6vlyޭ_%ѽOKZ2 Bf%rA|OUVGͷ7\k#` #/ +p > 33mip8v{,=- 0v!pX"E;pRLD)x"ܖJ3Gn_{|qeԚ/ 漏1 V+5- #Š&[Z;41'tR x$聩Ծ#Ď57)L]5;ŔڢAYB#NH(eK%V/Pm*ZU%NAH )! ?k 9c}#A%1|3368^47wop`4<= >Ҕ=AI`;X͒ATazSAIr go4uTfgç +euIk[|5`ozޒ<7ן{3Ŵ(?`~1G惆n$r|AUL0F6uHf[4Q/90<0vO~RP{Vˏo>çQ?m{\{ +ދE?~LuS)ē$!"+ޑѸ;ݞN?9IÓ ivpl[zhebྙKobS6(OwSِ?dǺ !ߕfܔ9AVhmG+ZE;,lXKNRF41`dz`,V;`X SkDb%*fC1~Is[ 2G *DL-@ΨGRc/Ąe' _NǗSn'"|M[cf7DM^%΍rsvAEWU\Q}xqy>t/Be_={v5'D㲃KvOJq&~ >tv fi*jJP^&Wke+$L#,js.Ap+ᾜ]CPFA B2lA);C>Z\+R2;ƞCjz9ݽ?Ju?}ӻ;Lr栻At !Ata|Nt* +kdՓ xC9ZG{k/˯x~*P]IuoD}{a?n׷?VzKâfr2}(!2w x-\}գ~idIjKɯ/F`r ~g + + ""zaݭƛWD6:.== 9:T)ncAI⚇X?wDf=܎ &TϧCi@MphBE9u>*ej3ѫbԐu}ёsё}g4D$Ղ Rf)mi*6(O>ǺoW[_HY2ݼ%{SvfOlp$5A25 .h^Hix6Z mS|R +"Okz& 9H&6<;=yjK~MA$l{YţJGtUEUr1xA=ƑPe j3\;hO7x!K40lb%XA'8c 9eAk\3fDOlԽFee% TICz@vB65Id\kR֯sNDn-սKů )w;iga i(7>k3 ٚ&a9\ p7Bߋ‡I q:i$1:AЫ-G ٛ7Z*旖؁[CJ;kdAD +7A)5odNj Bm Fq8/zpŏ۷oo,"$` %3u@58{3J RErlB3O%⚞]{7ٶ?{J1_4LCl@Bo7"Z5 M =x?%(}*K{dq]OXJK)ٶ_,Br|e| 0v,M120,fqݽJ[ov7\yQY%T^.Xʢ b SpgZ#^ ֗ BW^f\ +ZŠV!V_ d\@f3[9ld_2[ j +6=:=uf{)μO~ iӉ-fSKx4-Ύ#<|r=& +X bȧ7M, 4 hzDp:45qrKk1 {;TpJ op"ܼ`ET[t0ZT&V1I4a.4|L>!QL ,!< buRbp: B% ?ޒX(D"̜`)Tf@M+F1A93W1}( ` bZ{ +%V̒;@U\)&~IQ +!`;+{z)oihx B!qtzN(X R kn; ]haqg-p+퀺;'AOT4ZAOùyB0$ +Yl|S4.*LO`%be䣴OOGwF˶C7cAxRA.1ds_$?i} +r @Sx?@tLY }tZ%J!?JG!#Q +7dZR! @)NA?=ۗ +b\* +98b 4 +·[oXBG !;Pxʏ8W}*s{DQ$4oWb#7c!A %l M: #j5`Ps nbB\?$04nikw bji{Rsݧr@Є:7\A'f%wiU?PoڿL#7%YO ɸPj q^ yq44, u&8>Kv@3 eHk2[V.jfp^$Wѱlyˌͱ3[ k bvCdx!Gshq ީͣ51e*^9a"K5Tr[T)T +H('bKQMLFLl~>$d#nj"uѤs.xǪS=ޑ-Ĉ{TŠM T̐%83gGef娵$@.8TyjpkՄuX B!㱺`vpR2b+NC? :ۗiԦD :f G$6*asPJB9,.ԀQ5D MhN$[Cv3dM)f)\Δٍѳ^'1sSa\lX4#0a֓kPS`A@Y+*&ZJ;>ė1Ŗs&ݩ3ۢ& v Ah:'y\[\)$ҼA~ P2g F9f 2 bA7 AMpgl1圂``APaA( &Lk=Պp| \4v!QNA O b@4QhE[Bּe&A+ +Ap4Ả$ +brX G)N : aU5H>Ak(evp;F,NDK^]V4^ vv T>@@gqy b .` G vlAQDOXoOl +"znwz*ͺ Pjv/:)ŗ hZeHB^@@ԐTIT\ SDE'- sSfMm +c䟂Q:d7(u֩ bU;KtDA(0=EnȄǏ>8#J;A0/гr)oF^V+"+ӲZ@(  غu$511<൬Kn+ZvV3n!r +WH A˔fn c3JG)K{ok-E/% MQz23HbRBNAh|[WP ?^bo,L)| X=aNrxVt 5 7; @ = ,A$*~ܑb>=xoxsA\D "A\yQQP UL ̦W'@8*ڒRka{&HAH(s.9]v8r՞{~`;zU%Y3[DpJ5)cBS'I#/[6DmI0%P~w;DmW1y*Fc^IN" Fkf5Ś}sъ⅋lE&"}jeZ،&.Ma+ظ6<rʼqOa;83lZ{Sz*"JR\)ūv70qeL|PF'SITJ%JA48Dphvo΄ѓtoA i*֭coS\aAeX{Afx\8`yK\ٛUO9 U+i.CPQ\ b`s7AL.~Q()ע!jX5pp7tUXVD2Kcua ),gp! Fj}JsڙHZE`(̏bk ~q.ߑxtH jC{oi/Ā]E7]{SAłt#QA, +?ݩ  jK$ZAl@JN;$sj-՞)pAn 5`sڏ^8Gh20nOi@y +T:}ؼ;ۼ=Ͱ9vn}ܦ8c|1__(􋝿,ܚVJ5oܛKDsWpwRMvbM!dQRф*q"{pj2F&o.dI#z]is[!Ɖc׬boq*b#وQ1IB t,oW +?XF%S)Tj%VE -D\ ]h ?c9m +:i +8j=87}rWԶ~}7 +^ԽU1ב L1|p;t oru}XD/^/ԯ"W +"1)[~c$a;V*t W6 b-Tg +w-j]D>f! p"@6 N|1o/awVJw"KRΩnG]\8Wr=q$7,{s +ª'mӴrLXr&mG@WD,)W|]5VAhxYzQ AY*A 9!_a7GU=kP~ϵ{e^X +˄DA H^^]>A ZO WZ@ = +dn. H~ءww@PYV +" ^W;DCw(;]|?IRMĖI +:1iHmq_ +^@оVq[[^tv-u۱Ǯr.j2zQ":p{԰'EikqcܟB>1)-?Ax|ǖ5ܮTqDDZUa5 ֔Zk2%Cf>EƂPqn!3:*& 3āS}G ^9fw$m<|f> &Ad! Rt"v~Y.fbgUJDBd2VEW1itrPf+6ΛMA' G}sf=3v%M숙1!tO_FXjtF#hD@;\xW8oAxx|Ï~#q #`ֲ*26K7#;S7ΐA^i +/juACBr)(t  :aAha c3jiR !vp^l)aPm ΀{! I=8jXҙPZno=Ѭ)#kKJ-E\ [*@C#lVADyA$ 8Ƨ8IA~//.I ]3A h ^p҇%K3q]٢4N8I>IsĉY U*leK23؎Q%KR1nޅ_xs]U977ص#KKU֜ &c>A\~ D+O!1A&Ͽz6^ѕ2WWAt +o]#/B\ d#9RI\up?[m&rWxb ֬!Nf P!؋M 5 s}ـ+`ȗtŎ&1}.pvAF^k71M P0.3sfvu-Xp=rT+&y +247 T\{;&6q`t0wxVs̚őW8E|`-{se5A !Av)pX:b1h +,̨8A,#E wя:MA+F蘣{ϛ8 hl`-1 F%$~; ^-A7rWasqwıõ>жiASTkDй +j:?s*KyA\{}0 "<(gh^@%8fMZÅY򯣭ʙQF%$6 بJ\C ps_XdgƼ+lE6L1*APaՄOn lYuoaOޯDp)3)iS !#1,"a,sl9c6p֘ )x,CH.jRUCM/!',0;CN-Q bvwD`GgL@ *<ּ ʑ , zf"Ie U2TEڥ$/鏥kP7> za֒6^%G׮y7KN1"AI-x /,☸i +@qIOڧ;j$'3'킸Tz n,qe B[%.x{Ȏ~_lD9 P/rL7؁_jE|k-Q5?\3g]Fs`؜pC1DPŸg?ð;^5R3^t +>mN;;oDDb-BE; A\u⪭ອSkSKg-hE +o +}pAƤf6YGא`:*" ߟ"VoZU>$|28Ā&'L)'4iL@:#|8d.‚2N3'Trt; +UUt;BKq@XNSS쌒o o m * ^m`LiZ.7; +Bj/ëbE5(iWAزr*=ּ~Ert63?L-h# kIo:[y|Y:=ecHQ08L ax)ٜ lcjLHas֑ ?MZ\5'l~3W) bx%ATqݺcFq$ G@GW1b@%Z(jbL"A0 ίY^wpE +(GkL0=ç+^/wAn0;}S5!"hScGC|.CDGm$5ء1.Mhv[OyA\E1  <ʻCM:;ug /Cg/lE_ۊ@7ö-_Y~a;d_1g\DGObQZhD|36P9wkkvQ!_GkCz]"NhfϺd˾QW,E77E7+LeU8r+Fc| #"&AQGj20;ߗ!t8w.vkG LRlL=aN=H;iJA8ɦf3h9ݟSO)'&*8@5\PAVT q..EŘO!'OD d !~ۯ]Ù(I421T_|$ib!=2{0<<pq*<%5] ,[foe dYZFk\-~Yi-Xzۤف| !A%KV#LBRZS~|aWà)w.Ap}37f\/*#σ KJr? /.XQ.iNޠBJ`,j/?Ƿ` fuPrn:Ǝ mA RV zu-ZDʂ+č[Oo UxnGW{zFKWA "f(:D`1}8ACs7?[(A|aa-Z+sW¯LE_ /L4n!1l=fjZ2(&`cD6q-q [B{-_Q6K9:%p -d6;rXrbШUS5SucoT |Nl'gj#TH8Qq(U7I+ +y t4^XXwLR#lL9R0;0`S&&N$v +%ROȔdR3H#cZP!R/.O:4B"r<ayx,'K _g}gqh z^${9.3A9# P1 eJ[-i{EcchysOAM2 '@ b6۸_84i̧9ؕڗr&״̒H~^$#|n4J1cVjDz~/Wh}QWs|Q*T9#kbcP78^vaZ~vX9σ +MRs(Cs,I~8 A 8≄v AGü &{POam@pgRqnj{?p +9)& 6DCZ $xrA}vㅂ݂qM'.=߮hWPg^Dhvޒ{͖wU[+pq\r_X +Q``̻Ƚn5d]6_@sO6 aLX Y5 ÙTÞxHÎxC\{s͚߾О} +,%-"n *;zpWL9W¤\^yAUD)NH##ɰ#\TFr2ԎdxHPHW"PI lr#(jJLJ3h+rGf<ȸ$S"a2& W+(Ї Q;U'F=REϙ8 hs2j"3ᥖa3Eu/)nsa?̙d{ ϠU))(.g:٬:j9~pA +[&ѺDo4/>Dgj)+a([IYǚ{wRRFg)cQCxźl|[NfRiEFg%vX\rBH](kѓrAT7C#qԃ#7rdıw"eN9gV:d?k9crVa>xֽ+ LuZ !/cЖ YԑSZVnzб I겆ޛA ;`OxAh&!|dO1Ac<{ӵk"AEOۦIzܴ| u8/ʽ!;M{bVA쀚ηWУkѶWvh>M2s.]SL 4]. hexE< RA@Ȼya S@3-h@~) _EښwSW ͻa\:51uB5:A l9&4pmb ^WSUtH%#ChE|91(XD@aeؑ= n?֬Y>[ ~)*ٟ O2//fp~-3.\ư*|~N;GeRPg&HE7@@U冠CP1T KA$/q1NngfGfsvK*|,M>fJi24R=1H9 &Jn{߀uDt y0t(T f}2 + +ADX9\JQmm CVqęwn.5;X[g + i#wCϤ0JtdmeA0$Xυes +eVcse7<|Z/J\IcTCF Q0#A(9AyAԣuo)%5sxl6 }2Riǒ7d1|}(dn/T$!Tm.n^V1eS$ o}uoDH&Iǘa8A@Ì@B%Rp=7BʂH]. :a |GyAZt^[ bgQ#' ( {5A~; Az$mCrK֙.]Wpnӵo>.q˖K_>ʂx 8bþvMk@]1Dg FB&ޘqΖwm!Ƴ{}̒uŜuB#Upͼ̦_d.0ؔli&DG#5 .eTP dxlI8iA tb[#u1Au$>ڝ~k @>H/xA)\wxY0mn>.A #rUA9Om͔+ '(A $f{B[JVr\X JB :v\w?_/*'1 ,;C+F5B5TPQz &}J:gxbZ*F nTj 5Um aRLTl@X:|25T p8E坮AӑGhbgtK`O $ h6-;0yOrsmh +f]w J'ge^Ѡ=q|fi}3;8-vA/ˁ 2xA0NAШNr;Lv`OF8 +rA0+ ͘I 4ucҦ Y2Qb|A -Y*qn_!A!ҷ'?nD;/[ ق +YlZX$4#,g)gI͉L 'P8 wϽ)/&F3DUтR, + AexQ?K9g`Rt;4;54[b5 ~` h'4O1Yov&4 +3{i >ⅈZ2?}s1lg7W i072隝ъ--!OʍU7>]qJL$#@%^!"0q^\ڰ +]Xe@{!`CP! WBOI @t +uN08F*M#dL==o'5Eİ;{hGs.Y ~*ʅE9ޘitѸdr/nDz|OjpavD+ xuAhwưHRS?F މ&]]q]tYl R@= ہq0!O&BA<AoO\{.[̋o/ +&"F4e0ȏ:FFxA4:c9g#LH\I *2& *5J(}@8,%oؗ(VoQGRě{n2}]ùڐJ* +%:<ª,ѓ%5 bHa TL(d|r9O6敥;VʈX1cH%"dŶHe`.RJ p@! 67]H&TRDEBE : pPPp +?LSraBJ ɊsBg6 +f?n@g.n؏0kv$x/W$#7QPBAHjp%Q̝1>3ݯ9qpv'g=87}c|gܒ󎸣-nUG[1[I PB 7Jc^;ϕDZ"߁ cQh^ 'JzI$O?O~?h?U!2|!y!Ga, Α ]"YEWL +blQ:'+  3ZtO=<^y@]Ü Іq{T=wwsG9znquA|㰫vӋي5i;%)j ^w +G+ӃQ{ Et7f]4ze ^yqUGF"`]O!{G+]'2; )A)TJ1%<`֯ꙤIg Ģ " 6Ǩ/N7 +gO3YA ]}\|  =YB+ ^ o /ϡ,; ]M\p E +.cMGr+DlH$tUAHmٝ(u}+" :H# + _jguiZ4Wpp(Y898ӅWё4ܴ=bİs 5K@9n9}wW(gĊgc;OϒyTHCR8̲.%]p۬rApȾQrhQgIJ ~o%&Fj,30mہua-z);8/& %8')yEYDJ1@v bGxDTO(7 epA=J79A,Vg[* z1N8\DPPHgאf4ql؇y;p2n]XyXnP!A%/_uĵ:@"-燇C+ "n 2/ ]Iz\Ch :^ ;ID=^GdXVKkP.DŔ?/| 0\>I>| +ARQi{.ZmPCܖhL?dv%fiE=D!C&Y"aBF jr,O;]{#A'_WQ59>$q10" 3夑#nA8rfim9%6DG- -.OrI(jpx)A0K;mޛD//n';ZA I8k8 wKMXSUujoDGǡ cAP| V /+[N;D9)&Nk_{m]hh$F-eA A2K+ +рJ-fD}Mh&?@=E)To b=J+w؋JtKHYIV , +BA\DNA#3.ReYd+W,S$9: gp/GZN7X["P~=r.SLA$IVsݔXo/X}Ӳ`_ldͤ@h\L*L %ΟRhd^;ħ7%yUC0pD`PzIO;mCnu?WZ9dih@AuoznL#OhGwZft(+F; b:?(H +1:rkdqS{Knϭs Zg!'ڣ;)IW'ljhlll:~X{^EKDjo䐨#z Q_$2i^UKES[yӓ:*:]88b ezu-sExer F&Wгr1t-ҁ NA,D+Ы ¥b%{G)>ŤنQ <+t+ 6PrnzV,YAjj5 AX'N.ē>7kZ6<*mx\^ZQߖW(2 |wk=p!'wf?(=qѶ҆ړ׾xԥ{vY4.eU_z!@q9hhMsKG?*k)k-z";;^7y8? /*=Aq=E5Eu5'گ~%yԩjw$ k RM2=c~׃[Gc6=.{X\qY-ǂX.GEg+}XXqaꦶ˟oWpA9$U+ znDc[){qq#}$$5D~ +)'"k) bUI4D 8!"zZ\Gs-:U aulPK2ᵬ 'A_k4"Ad`t;$c_< + +"Q W"$XH!  ( A +j` 8ŘBJbb\\NE!oDTY>Dr+'Aؓ tH=nJZ*0 +%tZ\eCIkPA50}=\ r*SÆ` ]Q2 4Iچlc Wm'Cz3[+WXaȶM{ީns +"hx|¤<* Y^,qfn + +AwR- +bEs.Zz(԰LTWA8Jy.(&Ȩ^WA)ڄw=#Gv8;zn6 ^ɏBo;ָ(zՀ '+]!q?y?:qp}oc'>mBP\ً[4+3od!G5Mmdh bqshℊ@Vxp}ܥ>s;4GG#y> Fzt@{6R7 52G\#=K~tX˝dz Bŝr1I +A<(\{돎 +ƒ@'s=IluàEtQ3!GpQAT#D(DLh WEUƐjchI\g?jlD5G7 zhM81h iAG6xr)&$洳gng`*trB2LTi 4h +gP`5b8T RRTFQrZ\΄!%Z +OJ6) ." {c5"CʏbJVl Ux5AH=@(^Qgq9p^! ,<,.$UTL| "B\JCKI$ծHf'AsI7WĹNA2hǟD:k1#ݦM-݊v}(x//]®n/!3WpQ!uNAu谾yâ W<<> *a}9F(7p P wxQ ف+C¨!ѸWOY S< &!PI%uFP@5䈹8P%4j!>QԤ̨IZ=Ah(AV٫3HCC/]=puTmxz 9F1$ke B:,w~!DP>-ȣs),7$HL'L6 n U"|(Tzio|K̾9$o/C헩!2u~Z4WRiLtӁW;M瓮e ~ 2 L7"W;EjLP Q]rK7?GO bLc,yt<2m6v++:C$E{08,A +x]O;/>e4=tMݨP/J̲s`y=m-XsN~LI,+`|nUSih<4ii`~8tƫqgY {:ǨQgՔR00~dkI9/?'L655?DgU&UXq\H`#D03t{x: 1bRNI.1Br;8b`-j6!7NqoL$B=W7@v `|+9(8Aq{ %^!}ЭU?h@oy}16G+0 >^} {@O# 'T,D3V&[z4 ҿzTpzMu +MzƷW6i5c_֧Џΐ cRagoxy可(hRbQg5@tO^5R5uk$Zx'+j[>m1`{ukD3Oڃ)!hX*;Z+ +t;#;5C[EMsIqj}ΔmañCCIjbž8WSUQF(jO +5RomŊmb&Rlʷ6MmuWpdžUSL篞:}b BjC̚3GZ>!@AJx 4|^E3EuO=SD$L3VG[1Q삢YiAIr_vAp@]ip +7t7q؁#\1tKto:yjJNkH3峖T@ Aq)=c:ME-L(`3fg ;.guB>0@9;HCxǰ}f ?OH5aDQhuoD Y| ;(\K^ڶ_8'x`wP߾Ё'M>:OAKBcBԤXk~ h:FqUޑ-݁ ?$ǭe +lȐcOAPHm~A Z߼: AKGi` +؇s#q7 ه2 *oh >-}DkWѧ:0׿~hLnù;͗^;]׿kA|"KvAzo|y_wK$I$Á4gC7 / ,p&q8eؾ4loC'7}p۝ǣ5)M?NHo">|oF ] ?:X87V{0 }l@`P8#ý +DbwrGg{j[4tOOԻb;@]QM-abŦP&OB?bCb%s%U´c{eH[} =qrx;펕QRToTmP.m{tkf̦i$( 2UvOo];H|lT㼖o>fkkQ)3%7'ڰLt}-}/ldd5r777dHYvlDVJi/KL +$su< QkDMX -Cg#ÞX`e@.AÂf#{B,mh:r5:=ڡ1RAkӥ_޿ }#ėw: IxY{A| x*W^!8x޽џ+ړ$R5^tP?Ep0{˴<{R5@;E+;Y/U 쁗I]]ͮD@=N)FqGbU>&~};1gnF^SԻ+JлKOHLVLVub|B'^+V1bGmgglWtgtȀmma-ُC> Bȿpf7MΝ 3{bfBkcp1ҽ12`wlglG|å٭agOo&3-tf+hbpCA燂[xsC^Y菉vS~;&gFaqHrfPاc<~~洢| 5g5gGNINjț|l064MAN MS#1I`3rK^X’iaEKu)[Jw$s+L A#? n/L8?ix:J~g啵7x+1)M22(Yrx G Mn5@RI{5k ƨ@&? CƑfV ,T5"A@=87.iĨ)ap +GL^NcGkO՞՝64iV-2WՄlhSҲƙsuث|:w k{4CD90OΒj̄l5<аN 41950A$dcDTCtͻgIkN4T7T5VHLe,OJ+NΕ5Nhm8?qne׀"g%$в[k~o c:Xa1 qC騝QC曟' U7iUCSfgTؙ8nLY#GL\ITs㗿yЭ|2o:4 >}oatkX=cQ֫~2p a$=~ҸDݻ5QDlAݘK]E>mLJNN$dbObw+ۙ_nW ;55pEdGDk>#lÈͱ +R:OJ~w>t[tDD#ϴKHFҝ]Q+ bW4쌂r;dG$c0Vma9Uʣ"gJ! 8O>e\͸mXӣ)2zrv쎰ҝ29#\~xlm ݌-;<-R`p?>(xd_:Y}ճ.9iTLi`#`֚85N;QZ)a0J,cV2Ӭ̪P[cӿ ̿rrK_Y;o||j`Vf4̔85ct41ML0T@L#3SR?fyJLʩI);-5KfΤtBiyNJ \ UQjgGL:Q +0!8 c)s(7 0ˌ2zj5ΚrZkS6LC.T4yyeݺ"cz&AZ6I6 ԔDP2ML )[dg㙡Fgf(>{ G/26'izvkh a15A}7CcAZfaFCM( 2|RFO vsԊQ'30d+9qU~İ#^QG0HQF>>/o|Ppn`nCtC# Ά@ن@9QC? `vkĬo:[xuaF^lVb0YpT˒0.gtpw1h+Уr@^b *͉У_p//~ m[RӋ׮o%+D2<Jr@K0c 0f;"ڂDZtcF!j* *!iZgJͯ^6)7,y7QHB0PFWpʌSVa`j -¢'\MD༾[Gj}o Yrr2>*4w t%ɹ !IH$C$Hxx qs%|3dŲS#SGY\p =3Yy53y8O`b}Fhaf XQ[ @硳%(˿H;`|6OlZ&1E0`'uFe{{ƚ1ƈZȵJ4- I-,NpNX,N'v h00%؅g&hi.<JH3 &R$ok+oZIf=ocleFŮQS`is& 7Lax ZIS!zW-X͠'aTX{b.hT`QVh$pKiBh¤%E֎Pp=6EA!jg)LC#a<$,crS瀱Z߮?h8s" ~G};|F,L| Auwc* ɿ-)0#AAYec@O?O_[pO> 퇀~ +HH/}[_f6N^ok_Y/[6l>r7 N| # +~ +ͺ-JIC`-oq7}coZ[/{ԕ6zcC*523dR&3$LݸWI%Z{ظ @*%}I(ƽjn;{>,owΣsg#2NEd%y0"({&(–_ubg3KeUI.*$qQNt:.|bo=Ԧ'?o~MϿOuϾ{uOyh;˓~?skI~m?O`/ox=~fݟlx .X~M??nz/[/{uOeSϯHϾg`gOx7xv6?yy k6sݣǟ_6?<Ͼ83^~̛|=-$"?oϯUsYu箽/^EGTNP;1S"*BcWho\jBXJuLEb׸&upFbJoԛZq}tf<,^o:ur8gR&N`\M+vf&l*4ߊ|"ǡU$2'z/~i"\tER +W/{ɄkLWި*,Y6aMzy1#yN̂ьu +_)ĔcJmz'~I|6EK|co +w @=JAC(8Ho󐢃nsnyOZAޗ{ rނ`,AƃPc8`3w`|sG&wrFF +ee=b_*ç?qҽϺ?AX4w|ѶKRPG_7}_xuG/'q1c>Zc}8"8* +8Rd '_Sp^ du"5꓿Fz3׸iACK_r/EZKp/~1 ^?#K'^ +?*Ka'O}v_rk"5\腈rͧ^|rՖB +y縷w_K!G_ +ygUQ`Cz{7 +!z-^r+GG =ӫCNr|uA>^Ë-^d%KnbٿK-[eKyXG/}tђ勖XQBٵ`>tѢ\d18ƥKo GQΟ.^p"p}1DGC~νĒe$\Õ 4K%`L*[~SJn-[ ѥB ؚ\nM2ok׭ߔHO9\>& p$B}+\^6p1.᰸\&%qJ"<~dժ2SRy,:5LJcxl + r .9frZVKA vxO/G$ӓi[!>D_ p+l]pldS34:;Ga <*2*9A{,.|#N[| :;熅2Xt5b_/v[A ع{nd~+Zh9(;kǿV^tlwfwfʎ^/Qq?VfʏM;]ztw!wAWA7U*pyUp&p:%^;>dxW Ɉc['TrJwu%\`Yp}gW~AH:(vs8{ ^W`LA/'>=' +xxܝv~;ȆmS)݃An̞DN;ێ9;p]f٘F +es_PRXTZU[CA1 ˇF%HoeH,#CaqPHΑ/ӟ\M2XwiiB參=x#HfŌ ˆ܊xpX<0$}|/%dC;DE_]C_W_,  0002B2(߽3C#}#=p}F$/ Ǘ>-=w!ȰpZvޫ={z}a 꽅Aqho\k~8E׿)?+|A wy,Rݤ ZM +" Rļz9Uz3(>:ig3 Lht@bX.H"F-s`'^gXӷHҠ&_kKT[jsR.hdDG Ͻ 'BZc7 4;|Br^i&I + Z{V;؀j/iUV?@ҪnTS*ɸTfkW6k9Q/vOF%H-7RJLbL+$YJGJ#ґ\iWؒʭI%r3 XjN*1}$ňbH+4P J; zG~{SsSs۞}mʼnq]Lu{ꙶxz!Wn+3Ėbʌ1XPk| =`/cJ1"ctB)cD"LyF^Id(J[R.ٜh#'ǟ{!xGe 3t®'ry\CB<|< !2#B}v½B-f Oʼn%RSVhs0* @)P UMX6"\B}%2BC@.DX$4[GOF@$^Bj3G=VG< PFdKk=Ckrd$hp z;ـi@oN`nhh*Rs@͛7uvKZhl?leFg6V67:F 6:u'}G h#) utfNZ1h@3gN/CX\Km~ȃhn4 bA79} ,g̸?Ǽ}3G&zZ1ќbMm-I,:XgX3FʹZ JR-@=iQ/&e9‚c)5G#MEfJ-ęQJ6'[XǞx[Wi_dnw,&ejj>i%€V* J$ҖPa3ƗsMFCLc)1hUd,Їkӫ1B-ϔZb5nH/6ßY|2LXiH@?jJHt %DMH/͢Cb m Dk" 0j O +UL U(N#HK+UVk +r{v8tr2'k8'q=1 +1sL: \퐩as7\2[FbDLY5_'?,n+SXR9(0X?l){RqsLC(h\e+h`|v?RݷPC$Z<5oj7ا@ +LœY&XGHmbcTnU9;2ɪiYlE[%”0$!- @ʔJm P˷ d[d!mHnNnJlLݐ,Zِ8$LJWDdJc8%y*,h~Kz Ɯ\dP%%"ӥ8)$"]69M ېQxI. Ss HoJ݌D'oLP`@7H:C)ԱTyD֜,;w_z=bVN8}lϩs] }tV ط2.JOh39=\;<#rvؙm#` :\p2Z"n;2v 6KHkS[mI5֤jKb5N!e)V3Ox_+|c=4Rn4vn"ՖdhF=Gd:7u dXSjmVeUJH@%5ҫL*c|^'Z9]Y-KJ H4{;FB$UYJsbccʌT?J)F_+i`W+Sǔus?0G xoBO(tN9֋LK48ej7 Tn5SN!t ቻ1'PTSeCcĝPCr92o6Lz-%SXZ;/xK8ޡ31m$C +2ShrC$HSJrZ9 c^ 64n YI˼ Ǡ62ikJ]cP_n A2XaE|4+\򏒌S HF`Xf'~Oj"",70j`ݘ~hB+ј&sΡH +%b#@LFxLX>Dbd4w"3#k,5m ŭC!jQ3eLIh,PVG-Xg~eK<ڔ +&ċd<5GMFrƁ( ia#L!B2i@HxsPtP ɜY`O_<P!JҬd=:ij!1 {WuGԑA9di,j["0yJ+낂eq8}Cfc{& X*Ljppc\HXb _='1Wc>/I `_z%9RdZ*tum<$p!IH + tG;G#Ā TÀ:<%S\{Fb|iJӤifp,3NɟH=yj[R.>WU'iJN&$G/ V%Sq-"6{Oƣc\EGΕqealiK% c+?nuTP}.~WZ@N2(7XX<|SnΩsg[uU\6l@bUJ?1qSq8D,EE[ŒEY0!\Gs߽wώb l=sAx*ꭔsOszӑ_?_ϭ +%`L ;~Mc~^7}oˉ5 aﰳ۳ZAt,L)[]"~|[^}n):b595XEGr9y.ksk v\:dpp;8\Vɫll+ђ͒[5IZէmsuۜJkrQy⧶s?J $˄dٞ_Ad5Y-nfOF=$˽/Ӝ=U~2uɓvuL1jAt!FӽU38$ZV`ϯegxR+L3z6'c=ڿ | D+Ó}` : L x#p`?H{]8b'qp6Vdl47RkuSz]+O~%{J5YD5'{t"x\]nN7a`Ă;PCp`ܐ_)ga4!HjLުW+Lus'èsRʭnpmN7~-gQK"Ad9ٙ A[YNf q@M8iG vpF8ƴZCj>2 +}bZ2A)+s {R׾лP׀ dJbPf^tkR~qQvo{tnhuzn8=/#oec;B=Z VtȓQL(@圿^|Uubf_Ȍp/R4og&^PᅋmS^G[ fQgJߪCPK U9 EfjjO8Ssx A8mV@dحxp$:}p0} bdyH\ fHէT+uJ-D$T({BӻƑ PڠIy_r䄴}@QE~[Mj`8Q M{]tAoe[o9KTue 5T5J,P)ITܡx4+>OK+ A F&v-z$T'#$)l-DmA@hd =//Nwz{#?PRO9OKuF%zPbn*3Pjcv [6$㜂ɐ&(HuvNȬ%B=@-4b ac~re;U4E!A$p˓Es%lPxh(CT8F1EkCrF"TmF$.{2rzWf- l%S9zjL'M6A:B== +##AH٣̡TqH|nA\|G>}30] />q3?>qЗM?ky/o&]zzj Wfo:;u)>~=4Au tΡ\48!!5!psg&vgjj5f6RkLRPrD(;o=W(_q; +N'W٣Lg-g=QtSpxZtۍ҇=ӂ3pwfnb { + '5഑٭6V (ܦϬצn+\7^f5ĕ3-Vn;d7}茬M*lw)|qFjF0fɬ7eAOѦVkRj4j-XWݣ p5v$ӻҜJ)`8>3r9,kK|&JzZf`;4;;P|-P7!Pu@fÂ{L.P\bAjv@M%wĭvqp' rSku߃ \|v@ӳKr o+b6a#v%P{H;qP ؐzpeyLT&r )(mm oޒ؝+v^A\Lر' {GqBmi}ȖLyPX%+D+S +t"D +;`u~@(i9SIh"Aϖe|Iw$9FI)Լϟ[C}fMK(SYaZġ8-OTO-1<0!S@C˃ॎMp +;`d Ha2$h4g8= Mڐ<ӄ;N}޹|@ +ħ]$`@WIAq2AruLӠX+0jrp +G9L {luiё#3yG H0N">\}N>B%ٻlv+j32ZBsLQz≧-\D+mD~K0BQow qC=ܝPڻA }MyދZ.W6tyG;p&L5tmڴz)&W?5 J(0nkiufV3ς>w|0[L7{i܅ judy3je5Z 63v$ZuZ6@-F +…"o˒o\BXY.v;&#aaa!i6P6z7кRow*>yfPcA9ltX`8[oR7I|- +Z1RdȘXvS$hD?<-5WCK "g"R$dˀli O5%yxmH@s⃂&Td؊76#c J - 9x[H5vH,013`$X~s_#8R@ǓpG9CAD}-q\IW?E=-"]Bێ.iMzX#3L罃q5} ;}v>hC! <dMJ[T%ٷ6I]W7/Ov)v%23*+K,vY|Fp׀[[1pk(1W7a0kG@v;@-@9:(cAQdxl^I!@;i8RGQ|gAtsbk\˅+Q۽ ۽v%IfTv?k!s W,WASWw ^Y,MRP!MI,2RKR g4&|5T"4y\ebdb@4![=` mJx#a 'NO(A ZC2}SZt:u"=e I|cb!1&H^/ U4F8h g$=g B럳w&qt |A AuG6 f(Eg#M`A9Gxa݊p̜V#IϬdlեTPnwQa<[yԭ֬&P bp #,q< A}"$vkwdj41z="FRO4C&3$ķ̞ަmzB6']ٜta k(Jw4+WpvR 4PEK ij Pv}}8 $^"l*AqϨsg7\j]Ҿ@>؁4[#`GZoP]AFv8/12b<[=a]!IW7'}1vSE%D%vј=Ut&;\42d4a4UD_[Ga5x! 6%x^bHThہDR6)_NShܱU$$XH$g( Ax/q=Rrd `%{ lo3Jl Y?[p9)6&&gn}mC`پt @;@iPY [s.3iEsҷYi%-<&FӜ^7h@fTǂG{)'wώ lV“ P;;& v٘UojWPKs0W:@s7 5qh1nDӂjMH rMYM1T+19ꍌsO

i19o{Cbhk cGq xH<3 +@a91&1QrAz86l ۔&P#c-5pI!!|!V} +d{< ˦Z{'M"ޖ%\EG; !/Wf 'u+J pY㠘Ux5zYֻЕwO^k}N%Z&I۽1Z< p߀82h:`; UWGxJ fKزo\A+yd( A\-GJIX$3e:Dt_s8I_L0!K)mJ +\Gd D5P5u.  z܁*RD*,)> +㊣bĖqiAtކO;Aǐ ~@8%ROŸMؔT[<9g{Ž8DvI! Pw"-g%g9%v@DPkzVjn;̩yɷ=􉰗f6lz2Aڽs8;4Zi-.iCvLȎioNH@~;h˜; N)Qg tٚ9b +(ʜABcY3‚@l_; lxj6[ #n6u֔ZcNNnd A @9hxȞw}*K=(MRC &lwmutnJrgq[l'pfa13[3 Pvx稒\IMv@.Y;("`ؒo;G Rͽ TMqHP`~b#WQw& 4&C ) +w`SCB5eyucg +w(,Dt7&vűkO|:A .{qx ^1;>YSQhjhBC[bEp&i4_!IU> &sǓrǒrIy8BJˑPҸlY$g44cx]1 /{D*Ha_ Y@O +[U +UHa-+1GGhԁq/GS8; c~ٰ|R3 f3wng@ A@Kii!WoDkVV ppvy+І8`g۳ZliLrsJݜ{O:o4  +z#OWghIpCX9N{G3=q<4Zv ;m]U*ڃ]0jכj4ql}kSz[V jhvd82's;WrJamPġ u=f3n1Bjym&N!YkIE*:W)YǸ ;g!,'j% :(Fmݣ]/1@&)oN{BhB!kD/ܲd(oDmH +A5Hjר)Vz'#gO HAgqccם1l1Z SӁ +]o- + +ZoA5wiqo`2D\E!'/:4vA^t K u{KRO7Ee2`o‚0^7ԯg4(wˑ]>A X&8P,9_xh.A,a;R)z=<(|Yb.Dl<3%}xeb2a6$D'i5x?x5 G q=R 4f Ałc#CRrڀHYAp8c_dZ_C%=_EW&LLN `;F/'I)BY _ "v0,k;_ox9kCh{ +24#BFpoM#tD !pvx:<CHlaߞap۬ *}tz[Ɇ "Ot'PbZ;lcKP3Ă[4i $G:;H^;nY سwːjԐADoV9ƘP(72U8ڹ11UϨsZ'ՙF.p!g:-';izV+mڬ/M]F. i4 -63јYcb Bui;̃ +~ܪ(i Z8VA$7yl ˋ ˠZgibŊrl` !ktY"HjK߁,~IH/ |j>N!luuo/YnDmм%}>Ak cM10GQ 3ťP5^7y@2Y{ F3{fN6IۦIflْe1˒$3 3gm 401[e1 Oy%YƙF߱\7=8Ld/w +#(i]Wπwt:hY"=^17HL).#Qz"7 ,F,n4Lf !b:Q6]4&d~q >@|q構@aհ +HpJ,:ĝQ434c:(PysTu0zk^'o7=N`r 5d^VҚQᨸ{o.g|W(!Uȴ@]Q*-T^YMQc@/hP{ ;CW^!wA=ܒ* LrC^b0FgPz.@Hs8AKKˁ*Лk>u꺧IqGGzmk3dy}@\@< QYcHtrsL^^Kxw,؋9I +_yOyUmR@08)놣B71aK*kGµw) Ȱ>E/z-MOԈ+[ +,/[ZZAJL7ޏbbB.aHpl&.5Cݤ_;L@? jv)  k]IA{b H&:P" 0Ǐ9 6a#,nH-$%4#) F{'2)\ݾ|.`r]_m( &Ͷ 08d^TIR8h*d'7NV1@[gŬz$n0 F=ь`NTaDb4]2ߓ۷vzSr#>Fjxq@ڬ:™Vf9_u>*X)43Wu ڷޙ}'\NF\ӻsM65 ςP +U\ (G<&GN%YaI+s_Tvm~LR@QBe.7O+)]AFPh t}7_Ou3Q +QBLC* țs^17IfeԵ1@Hc,e((/:PCe)GCE2r2W] \U> o57 E'<6J1$驀aY FQWD+YgV1ErsAlALE@J8@7b,np,Ł ƖF ?bN%ybZA|u.ŕ-Wڇ!"j^EEG`hp)lСqd VЁ٭@Dp^ne: +#c( Ɓ?bAMޡsF.lE`,VWIYhif$h4]4d+YM"9ID&acMN#$D%Klx'J (`4%M&IQdRuJϮbȆS}rz x5@ w>F@G@6l:&E99 +ŗ j|wD TD +yq;Bwߝox4ۀDC;\Ȉuo%-@riuٳJ-I2KjW~uD.b%>b"}X'< +f*櫈%@Cx57OõwBu(L! J\ V_ [t-8ds-JSĜ #V )QE@AP%").3D"`$i~5ϣOP]yx*/{+.S^a'P*)2~>Ab|@LD2:,u/V/V1},jɸ6c] +w$hLhir@hDVMS`D7k0/o%!&{A+1@|7һdGabC k%4KVv z=O7, hX)T ?E1ߟM= @% :tT[izZ;Ah@B6pB!jf*!Bpb(:pTzfD~hd(E;ߕӷ=OY4PXz X 4sWxCu=[85vQ$iA@ c_@iQ< R_Px +zvflv@uYdRt1&>#o|U>!J`,]%;(y݅ڻOj,̫ޝ{񽅦?o`MfoϪojn+8<畜pڜGʖ^lIXmg\m7~b}Q|>[hD+:<A6&_s1KMϨ!# V_1:ܞ3[7\7T7Xw'˾3 `WYirc<š}9v4!5B<@JK.HllTISɑ!*cNLDU_UD_OxE]&[A9˜^bHOuUаFPK3"~^ u _QSˡ G0 2j%Mpa QC4pvLSMiKd’fb:,ߨS]\CӮq?+ K,R샳 "I]l((ڬ6p(j2 ^ fGiDfwgv Yqףr ?L%+Q= 5V1i.kh7c(Y AFh,K|r-4:" &K +_8@ό}nspK4҇tz + S(5T9B.D[p)@]W*˴a Dx\ZŔiCUXagb1@Pb8Q@C<<0h7?}Y 9 Vlh ( :J8u*&2pqvl]  !YrA]:7ZɂR"TdWʋ䂰5č(l6U~;~ft>zxb8S:.&s5X}{{glK(gظkK1HL* p:s kT(Qр+AYPkbq.̆40h7`_;ͭbUN2݌G2CX~%\fs$=+):Q{g.BSh|g|+8`R[ڻAխ СOq+;ssMVږSe(Uqήxl!``݃SA\`/J`Q}s +hR UW aJ5*ppmT>oT7|o"N;%aMfFVi,5*Ib^q@* (u9P&lU:E?EDvvvɎ9E6άWsJf23n~`x3ş=3FPTǚOE@,KLM1iDgK6ކyQCkl !?A&tD |<ĩy F|6cbPG&i,;g'vi,xG;-78D1"4 <@S*MH~jTDcXdH(5>XawX Һ&&ULdT^ "ί "tFJ(!$-FBЁ,(*F2;)Ў6HixE }Y`@,>#+qhÆҏ 9pG0=4R^\ ޑbtE(ֵF0qԦ@(D31,90tm:WØwwX,Y#{ȱ 6~cs?@@ yB WSt$/K +v^c.O_L~&@# ѿ b㻣CYI)aE:` k%Ƙ@QA0CaQ6_2FS @蒹ڄ=ޝ9[Ӻٗ*c(~گQa`>fV]McX\@4 L LFbs MbJ*4<(!K2!J$1w;wtlIx=km@<@aǒ$ݠi ;(wp–lQym3")QyDޞX D47׈uJ!@M_uŕ@ .wjU3m=<~E~*C@lN}X])@$+ ?|.I(i.6!Dyk*8`pC7jDdTqf:@f;ޚ[aJWd3 =kGor,1@ )N"HShr?5+XZ~[r֍ai@8XvF9ĐVONMdNN?UCq9_G5&VGCl>\7lދ/rx|73̍1p䰡XkthCbuAC1)]>X3(@)@l@@L# "uJ񡤸L4 ukKQ1SGdAvwjW↍܋aƀRe%3b9 .~R9"7I+6X!&;7@ʖzRSg:[ fQ֬nKX[I*T +xvgH|8S2(ْzF_.k񫥀IderCaBhR[mm"!(PpC fS"[tx"C%5ot:u@<q(@K ++Ar=o}8s@Ț_+9콂N@0Bt Wn+ƑYjKQZD\^Yv w1s'A" `+>d,"B|ʬ꬚Bp-EH@:) +W|St#őN^b:mnA) :h'KfVfM!}tFMy@,D5쫼+?->F4wIFn`8NPa-Ԙ*NLNl/YcЍ=tSXOO/Ӧ#c;(f㦈OYuw :Mټ%`3i{x@!2;tâV۱GSO_zLVc +#97~{s/ z$<1VQW }etb;b"Wi`Vc]kC@EAz Hs4m7$DMx/&ƁGiK@bfQ9Eclhhf7/dA_ A~ Ui&t,%& +( k QJXk橦 x&ED\pt"p{;:e=M_9"r/M/'6 8{]מ?UyũWg+am`ZV">l:lUVX}'T}3PyLWO#V7 =tz@h1S bq *J{^[|[|́K٪+sW竱Z GvW^U]&*h 7q!})4q=B:l&; '8崸0Nbzszo}@6 8;…ب%" $ep蒧⢧쬻NQCx_hcZ@zkve6z123qGm:X5E4#6l~W1e5 Mϭυx4ĝZVa y;}p@3e-oŏ;s/{kqA12朁ykK7~g/Iq  }VCPO>j=ݵ + UӄDDrTVNJ@R5X g+ ptF}d7eDTGA|Ʋ#Frcܢ4~uZ_/OW (@L"K>(aUE8ZOI^U).9CAE,`h C4)FF<^:ckד2V_D ^( SaD [P}"@:ܚR kQpTwշW%}|>)/,-G|ԇ883Jm +k¼Wd" nHJAy,3~~ Hp"F}nůk>֐Hg\NA`7ڙBؙ@jQ@HyOD. j@i? 2*Afhj)p1r삫삳 РA@`JR05l'" ƷH>:k-@Jܸ9*1$B$3vԦMܼ$I=曝wLYO;':Q'iߨ"NwtcF: O6FpϹBvO@^T@g'̡H'MP#C>lb-@NSкcZli· e5)s]{#4 Šd1`Yf!<٧SjaU-Ҍ҉qR4!N ҅ÙbثO)rd)ܡ=;h۳vޛ_`w)5DH\_PnSSM(: N5 W3 O abY6(Wrد.ԥ +ْ\xd,3'w[.֔>^# ˹&ൂ}7UW6VUobQ\MUkKTs䯺꫼-)4Xy+?푞nvv Nf2._LUd^}&>dc(~ݬ/ yՖR #;*=mpe꬟Pe,*H;]T9u6\yw1yE'qKx`Y*k~ Qkc5:B@[-œ,7 +MkVXZUtȧ8  ΅@p_|?]q + CRvNdmcT+ZvV^cUrˍ +S^Wjt +kJKȰW0=`j'{]ě(@@DD0Mif#$"p}kb|Yw'_] 8a÷^zG)7դw?.#/@:f"e0b=G@xܴ=RY9B󓖅A}丟+~bpe<'R XAi=T#̹ i÷7 S8yKOx"'y:^(5]ZW|LԮu<:jD^LjFw2o8_ *)4 lST?qrSeS|%P^,><7@zghw^ܞm[S;~C%+?O߸qwE@L$pN ‚4s,j3SedWͰ  B%>=Y(4qS4OMT.]8-'wzf?ޚq{7r 6lD:;*@(OpUOᕟ|ʎ;A`'\JN=f[mV؍6CښWe-7K +cl]]78bshfĎu;o@{"eq#?|@,&a9Gp;@$}?jj9L}2a /=|bF8¿ |K㾝> +_ۼy8 ޥG.z zZUVv  +@`s1 +㦐n3 =#eY y@T_ǟX`%0Q,TGpj#zJ_XHU(ي[Ӱ;VP6DrVh i.KbkSZ$X+Oۖӽ5cK{8D!5] +3D]idU + fv1y!1f(<|Qzh~hr4U:!۟Od9G66'[2%}km~w^G}} h + + *ޜW_g-^Ppť0l.Jd?u2*]*a+~%'`,?喝HyG-r: e0[:%. .RƔ(.Ph8PJhERMۚ)׀cDDo/:^ +[Ҕ+d?l#.D.x):J){E>zͬw3j]jg +tpÕVmϮ06,BpMb// +63(%7x@6Yi]Fk~Lbx޶Zym6~:9;^Pg/P;j']Ur*- += +B\`U(@䔛3{{3;8kV1e'33jvnl4Yqo0Nj{+ZXoeZgUּ +CvLV1Ș]b.1e(3Q@xl)A@mog?We\b9R#M'{V)ńlΘ1@ BAP*<Dhp:di,ΥA$*VM> mOmDf81ݑ#~^5ZG4ʴ3!]Q;~ ڼL٧qm13tHaOא'n~89'4:?k@ :* 7&Z +B,%L4sJ$dTd* Y&Dztf^mx8(@`m^& nݾZ@H78H(L`J)Q@@ 26<-޹1ch`) Wx@_ "Kz<# ƽVڋ³Hı2Eo0·0j۵ ]C8: q~:|cU@`{HJRkbkփ,jO4-›-R e9Sh uJ|)pD?KO1+ 48|GJ:OIq372ܕיb\(CD, e_SHLh҅}RC t;=` +RxZ*Ĕ#O"-I_:Ẁ~Î;xxw߭#qz% ^@<–s~!\nkbV'W6.sщkU;{d3(՘](2ci@dSJ $l4@/dA# B5q tȫVZr-D9L%3Ff]|4lN< 5ʧRSJCǿ ^ccА[n)3."(F@d*`Ҋ2V Ŧ!bbstKضgF&Mq^-XCOuDޚL9( &rQ@\:4w-QCh`jIg2z$8i h,ˆ k!茵BCq( yRo YDѤȂ߁Ÿ8: T{8'hpEN/]{{8fDCYbJL..4DBIDS%@P*oрhLI's@p_+*@('Rx1@N?AD +"]Xjv ƅ4R<,Qh:%t @?ч7} +BIR/")xxp_ݗp}մ 8i@aΨ5-hx FViqqANnv0]b6 +]Z=&|$Seɮ4,Cs%gG5TeHabR}b}j)_ee5؉Yτv z deuvށVN]ar38rcP5dPpM +wDz~?w2]ϯ!& Q\,(4G`UXr9eHrŚ%a }r*tG|&GNjީs=>Deh7d pȨ?ۏuL6?thCH~ixQ+`7<@Y`u [UgwƯTĚ8q&O(d̏utXQ:*I!I/nDrGf Wנ+x每}PPW[_w U]74AP>i~x| + e=x eFd,D)!XH@Do谿P B.YUT2X{xDT`RMp2o0A@2[6QPfdWi=m9[VwgӅ|1]ؿ5Z!,F2BG*tWTm":>-`eI%3 +]9mj#ޖg`}@ĝ_"IaFnPPvšY(w[=$DTUR$nb7S%g!8&Wa,pBk\ڼ| W.ˏf% ;Mi; 5Ԋ^Fx@K-s^ S$nb[ +P E_(@(;:[;Y .Rdg֑9Na_PqJkxj)SiL3&L`%S ~D>ht@U5F#_(P(F oHA$aob'A/'.>}'.~sם _77E>??࿊y{/N\x/" H*9#&E VBAJtHp4C4!ϔL5M8 +JeI'z&B[tvDz$Al=.MͶ DwR&\Ȓ R阃HGE9 +T`eT<(y ? G!Y x*Wv@X>l?(';/9,5ͤ(Jް8pQk PM,(CA˜ F7 4E•f7 +]Wrd5sR>!ijYA(AKghzFa%10 @`ʫ2U+M*3RPcej%N9)T +k V]fչj%xkZgڜ4% +gvs'w0Ƿ揯^NBCFDwC {Sil)nO 6]6G+E)w%l SQ@Y7<ƒ'VnRb ' b:G@FRe"" CX\{+cĒ݁^Ӂ"|kVƍEj@/DtR=D@Co@9Op_w+ەdsuOQ]\6)>?E\x =N DCL#3U &QDYð q)ϒLH'9ܢ>K:)k|K %3_O~nFn=&bI-ޜ4bФSx}Dp!A +>(€_YLDu*K2!%ϕO+Ȩ~o$uRSq=JOVbw;.SL "cœ_m$o T؀*s%ABI|5 +@WcCawac5 |MW*Oˬ1| VP8nm׺Kl+~镭7}з</9Rʦ'Rӹ3tM3  ʩ0T[iƷ*lI*FӪyՎ]夫\ @.Pμ*;(,5F [KMiRsg4l_{X_rz?k2]0IS+&FQerK跜b!H+5J͹%& Z%ܚ_ ž_̯r*V2+(F`N9V&fs;YS +~?prm@t?z285?05709Վc!ЗC?T /h .`weG'-Gux;Gaf7a ڂG`^]׶q7^|u MЂ 1 ՍtAv, jF#+D@G  |!_ϐ'S"$:ctpQvRDꙇ2OOFa-0k4! A}CP/h@ 8%nIC\G[V]~sL^XMYgp;v&(K@jak9KW1x>_g_x/O uk3uםck8ӏ~~~>>[I|7=/;u5]UDV_"? L20NE B:xDpoΒsgrj#V[Ȯe[2P"^ڳ왥kzeQ%R+(̑S.wg8Ӕ"k ")2[Ԗ(&ܙ-]i|Wn7_IւvEpb~d`:h +fjϭTX3JLiT2),iE"s,)@4-CiP9IbJ,kؘ 9wf{f{b ^Z_Pb>d:w2 ܱr"[ 0唘ra/6g)t>M:&Ml&MjHS%L7ߗd4%UnI#g qǟ˝˚͜RkfVڀxD1n#i<|=ߞHhRX},M&) lMP+,JaG>2̓BDR۩D:ڵ.cߋB: 6/HD$t:B!>[0fz _ ]*{>Znq3|Q~KaSciOLRxHJbj +5E05}{{A>TA4={ }L}̡=ڝy;h}QmmY=[3^OO/2:yӿ}~ӭ}y-[Sf?@<_лٛPGꑨ꣞===]}hw~nfC [WC۞ ^f[v*'zյ+{wJ)~_?ӯR >x/_nv;'`Δ;)ƌ23 Hk-}3 iŖd5Ț$$ )&xI.&~1A MNTnڒ~o-_ };o>iz@Ȝ!$ LZ1̔QnN/3SK)JC2쥉,$u[=|؄fv]ݬ]᝜J+]]ϟ/HNʧtLҐ*IMIIPda @{A|rwzSaof/W=5L;Ac; v0uY][!xwsi]~ҕ`:i" +O}ϻgygq2M&K֤qt؛ݗ ;ܐ {; ǍA[`7yƍ/bmCvd@1f@uA͔?}|vI#P0;ߞ;9r= 'Ij 1='-RvAg&C>8y$T#J`F4S4ȃr3&<哝dGއi^MkGҭjfn7 VS3l@mӾiw6 zjdmǫmYY__e*+W9l'+-,ηt7܊E_xku{n}wsO5}{ֽrM΍f4}aOݭvsl~XݸucF6hPѵvϭ/~٫.NON_h50* fͽiHo['/ܹ-DO*C6Qö1#vtK#-*`gpgpG L  v쀅Aۃiж@W=|>Xú%[ +'Fv̛3OٳJ`eSt:бZQ6spvvE#l"m"G##"a6 hjP&@ GMT˷ixF|y_ n\մj :yh^u^_w + چmÆlB!]ܝA`{ W,ޗ,`/h`\/+^_x0l49ųwGwVz^XClOsԑ6ui:aC4tKԛWٛY6Y6U*gMFl$|8wV:Tp|+P\z5jWun )9>}%[RӺ9|9.Ҁ nuaCm\C3m1)S4&Tg*n̔H:Tʎ^MthCLmƕXfN!-%͝ +CAuGCǣZ8At$-UP&ӨZ KܩZ)3-].us-kck::]l tjr +:y7($_A<` Qڎ>O M{[E͏ҮBnz/^9\I-LR1(䦖SJ +9U}'gm~)%i@ve/G-a?npmӸ Ʒ6.MpNO61q744t㍎O`zuv `~C++v]|ןWpO<' VNs[~B [v3x˞G[tn1եqs 'Ė= v7ltlаx»hxipg6Vﺹr祏w}'.U_|CAeg.5t+vna}HƧ,罷uMRn];`{ hV(CB%|dGp'vv 2FE #Fw; Yvy6'zYy~޷q4(Q!*ǿ|y~elA+Tܷ\[?% JW@NmHCP3% ՟|2+%8[}g`' +j^ 뼺mcel'(k_?;jf>}_l`~m~ܯ3ϰ{+mρ/~~^l]mއXukflmݩSw5GJq:Ԁ4ePD +u0Pߐ!]0A|`oD +Wg3-{ɇ3{#*S16$9"͠rD $M}#C/6 >#zyd!ak^'!u?O;%äHJ*0= 74"=A36,r_Ozxw!^14=pAܔn`Ur} B1!P +=$ 2$,kPE±}Ú>^C|A>a/AL؃) =F\\/ԈlI쯿Omqxp|q#(c7iMLpLk. XG~Z;‡kk:. nCyWuQ3ê87z/:WnF6; 6?h݃ vޛdݽv[m{XC\kw5wlqmW?rVNMQW yԆ ftאD .7Aݚ>l瘨/$IFS% /`1HBHbɀ/|[|E!4"#~MF}D l==G6ylm!YtӊKc?~9澷n/"QoZz1ݸBq(4) lrrbT@ϑD +hcZ4f@I)>U535\!6`Rz[/vҏ+uNjשpRK!0JL0(0t+3i^ H4zM!NvT)1H`;*Sz"#$&磧XX- +jLN(:0B1E tR H&QStL\FFW| WTQvv-R#J +Ql74wJ!jTSrTӊQhPTIT+)HF SR5)-%Trs6.16k%-㶕W=^ed-+ͫaje߄޲im n:-l6V6MmXY?ոjW#1xu +v_HBՉe7>[|Μw~Ny.Q-+lW4n0b`e۸j;FxieӸLлnDV|bvzʝ v򉷶?\>ڲcwpHA/;ܥs?{>9fXauBv)Q{)TW&]e.dd=rx8F-v;H^F+G#@ؑ!]i!19%tM(~$*lHO֙q1ByHsL&^/uK8cPFw@c`"(].R0E>Jh?6b6|&|fG>l6dl (K"8pD-^ra־zmj&8[8+-oj>l6dƷD؈mذm(jtz uvs6qL +4hqxŕ3Nړ'Ϟ^n쯔9Jq1-9%  a@M / CL$ejݘZ7?0Sb)t3@vx֫ Hwٲħ>l((kǞOuc:8E!Hr Fqh(ŴN5h^D*Ah(Q515aQhMAmig_kwZxb-ҏOtcn"HbGqÌh4zfKhrP¢1 &UQvLiqc(׃n"`/FX J' V7Qi@ +HBV g`6Ra\=SGw|)uH7C8}]d*`R/hbB19Zk܋pQBð|zy=ޛp-ku{oGry[{nN}={QW"suooѿy^w;_Snd{pHFϐ?9_tb7K-}cro,7V}oy%ws}/#ȫ.W]8!\®_"3F\\Džy+Gu_S>Xx5nrvx~`;ɷoy}uoԯOkį.a:'g'/0pewЕW`Ƹ3o˻. q+bpO 9&>X<G֝:y5\=SiOqjL+GQ@"N(C +Y5E +dR/VCj݄JGpjX>5ah@a $w;@1>U(5jոJ9T)rLfI R@%RDJb@BA +PB )tb^0UMQRXMcQs,^dgOK4v+blQ 1VÓe^QubN$ Ŕ`&F9!8Lb)RJ$P)BEhsr  +m2`#苣`BR0;#BbD8k`hRB G׀l$Γ(s~i:w41AG3iO]>c+U~fUܰ?[5V#|엯@|^h0*_W}jƭ{6}n/qEq'|/;~a5_^PuW! +Ŷ +`;{4]1ſL-hj&ZU.v^af[~2 hlmi³rd=|Y s/L`;Sl?Z_W^nFǵWo5Ȣ⊊ck.p/o<|fhdy6,Ԏa9, d@ U<)撏ZFoU2oEpUѫPJZo"0-oDr14xC5!Xh1>$! K\s߬vo4*j޼y[;a hL ҡb|C[;4\S3pyj}\3By|EpT\sG+~ً'?| #.A8I M\{bŜs޲ Ss 3g\f擘OB fSπ\3wߞk>-ysQ s 9,,晿5|"9op栿hBggF13CqΙ3bN9|:>X_8&/?g-^ ;sߚk>oɹo! + I>]VUWZuQYWbJEm0_ZQS܄2#3\V ԖU(/?Ӛ)ݶm\KvZ;OK:_STZ_V@ 5@qE$E5WLQR(>PR^]Zr&'*K+N +N$LJ9km;oޜn޲+n_fZFeFrH +BєVx!"JtFo/.=6#%+֕a9×**?q(@i[]0 9)iU3,-9UZz^fx+)NJʓ.A..-.+)-ANjJN DghAdFAV _5 ]޺-~w5 XVxwLk^`jIJ ^t⥫ޗ+,୹~YƅYj{.5X.Yp%¥wW"pբwg5 _xKY.YA.Xʄ4+K^fl_l5YL3 +r itAitumshu37m̘ρmAcan6l908-hfO> x a?9!Ćfo0Οk1#&#芋)'F79 $:j3PHv*zsca9Zy"& {x Si< Q#[^A[t7mٴi/`ʢ Zುdr_VW.~~0ҕ+7;`$phi_oGo7FǕ`޲5vvn^A> @&f`2 0հVA{:\Gl ? b +1A!7c{8 / 0 +ʯA7L>vٴ+Z呉?5Ӥ :ZDR>Nΐ|RoH=9Jz وaN^NTG!j2фjáSst~Fsi]0aE }ٱCud1*.(1ݾcj`@-A$V3Ui 1 ;EՄVjɨJ2v,_g;AIOFW"+Ș +Eh 2J8 GɄ#D]h/ w]B +G6KG1D <9JAL:Dw^O\65x'ӿXKk <"0A9xp.GSaxH"8!fɅȁ fa,M@?S坩σbMZ1d*֚ϝ#Ǎ73պC~l<"ei146 &h`&0q#YV#24!D8,H{gjr,69J<4 iN'=7MckY8+CaY'hCJ_ Is{Cᙪ`eiI'~-¢S͝}Sn\Citcb|Fлԋ+h'ӠuF_@\oy"# {Ao1t T"^E욠P&L["$F@MťeG+TW:ZYupNVGpvWQlHyEUqqe^~YNN7߰PrjQqd + +lULGK* !E57& +A4KquBsuAqC U{W9W9%*i`Fg)Qr@zw=u99%=-:kDҔ@1N+G:DK&Rq4Y`@hяDX>2;ݏ7yR|`:+M'V;y JxtSS쉓M;N+vCM#ZDI"%vbp@d!qSz'iSSO3i/d7~JxOQ?:}I96q`puMb0h ѡۮ5S TM>U*~g#8z GkOCڱaTSƀnB6qDtE +S oZP +CoXFr!`J1 { 3ȰW Jtsߘ +<5.%b#Jb ȅ˼nm;Hj_Ն?TgJTVVI)&jN^ /'﹦oE}52ts:~^ ͒G>q;U[w;ANںk++kJJWx{[;7nNIˠ/ Lk +B&Q~邨ĥAd|X_ULULor~"PgJtu@'U擩|r^٘G=ӵ8#^b{kLP1*T4uKUL5YrH霤ʝ(&*|jX)PfH‹9UaI>x>pv-O=,$< +=S%>W E, cKVx$22CRz|j+TL#u;t;u5QO CI\b% +$_7C71 Ib'dƌdtaHL88%"$GJݝ r: cGcbDFʽ^2$I@%ǎסO_G*ÈЏ( +\eBJļœPD\^`_dp!Rip /<<@b5tPp6fj2t 밚OS)|SeiR4[5U,ߛ-HT!q%OI H   Ts~nnz-O7dH|C/ose1nO%ăi !!{ ( 1"Atx"Q9\~_!Ov%N) \+g8R5"%EѴ|4% x((h96N2( F}=]Pw `hlHtIPx\A(7d3VEDu `䘊BBM?Ґ&H8ba=}w"<.:xҡ( HvUw/m0ɚ2'am}NoD.Pb2@j(.EXqs^yͻ?_s.ߘ `zGS.Dtf::BSh`FV+GS.@F"kXX!hJE?[曉NAk,abuR.P盅b1Ǩ~/?*ςv}Ն +2bHy хL a\ +i_CTڐ,@U> + H+䞩JYKxa~J"ܳ7K9< +&Bb=BsRA2^HbeS~>۝S T +sRB!˚@%An!,(6CĐT''FUԘDw ~ϩ3y#LA@0)_DEt;B#~O@]<%; :8F:9Յƿ:9nT+uiyffK,KH$A 5$ni,'Qlj`CCѡ \Z bZ428B>hc0D;=z]ؤ_ACcԉdVN\4]Xd;OCꔸ~HiF-zNLA HrAuKK)kli_7x'*:֗w{d 7PW`bgJAt1F6^zWDvT:XLF֘ϵ\8 (G}L"0lok;lNiCN{Wv{+슺#ܜlv_o1g5-hq|M5-Ac҃7)[{U|lDAJ1ݰ?r yzzZ|?FXB "X {gMQ<=W3U +C;B X2)R2HX1ZD!(C UP" K!GHy(rf I'[Yo%{O>, ++.hA M6E( *DMCir9tc 9uP*0[ʔҤbg#IꝮ]O8 iPCbSB5.绋3SoHpv'p}c"Y YeWqCm5 <J`CuRSSn3Z)3T KQICjxQ(q@s(Qڻ%4= D +0MX5u{pLJ*QRs/Y@WǕ0)ItMұ@G1v@dLQ\ :MfGLbq F)IJ !AFw (GpA7dac@uQx?;_{U01zqoFo6؎FA8i/M|`[ "9A b%n,O4v1 ;@]Wsy^'$-` +q=hnu[eƱB47*P[ .A4 ~u  9d1!jS_8}N/mLLdxF&gЂP?agqDZ4ԠN G B/(w'D=r%A1wL;5a d9Cgy;9fǑ`&z4Mcq MH:Ɩr*G ԡ|D;M雭N9J>7͈bP>(tO樣*I2}vAPd4 +]x9HA +\^ L"|TXZHЀ 20G)aeH}3^ɨs>V:zP홮 -V;'>O=xP?jA\C{a AZݺ4H?v` ;ޗijP4+:U=} jozQL#SXtIlw#CYN#ckȄ:H@cq5c@ ZC|0_KSc!Z\w= ʱRUxΧɳ٣Ż?7{v[9;iAtH>F ;Lb}`ڗFf&h4m} Rd v5|bF;12 9҂ #2;x}DGsf%ÿm6kV8ZmO/t:Czھ=4nu A/B&H'. GE^sNݳӿ~;|ۭ}Zm7j"my.m݆?sM#[V=f+LA +đc/QЩ4j L6C>SAD31M #QEAh1K\i?wۯ= /%PQ(bkb} H(e@v`$v&j պc8"*[E@: +O K:Ap%b뭈"b_/!qNRaR"Bդ @ +GtOa +頧a0W^ng]UEcEBUh>BR{RV:ɶ2 +GލB"3a#SeLd>c+##|uh>R aACԐu85 < AҾͿuON.{N['w}X449{x?Qi@uꠎA8DǠczAL6ibi&Lj&/^Ap7#܁z M(Oj0TAAXdD0b3S_W;hm鞾X^\=־ͯuo:nkw9NiP3M qYՍN/kD0PG) U86R],UɃ w2-N8* :Ӈ- "/vGKv + R]T!b4vFA5^;I4CnO4.Fb% X^+T+eY + }ec@C? JrZD`fPah5@8@$pPC8C6`{fQN)4:0@'C•u 8d-umVS?0YKϠBF$zBݩ3]oxXP69<~%Aqʓ~3AF]G}!7H_oc?e a6\TίNX8vrc앾*kreaeS$3.N+;~FB`V9`E1sh08fO1fpf@nIY̊ ǎO:=t#Lb9+6@ӡ_l~BbD M >f(Wpxwn"X bjly$X*cePc݀Xc +H.ť%WX 6*:: +Z10f2'V"O[xƜV~7n< s]#d&w"r34p7.uA*$슟ܬDCЁ^0\6sN)Hz{L`Mg+)BJi)#uyXǕӞL4Jлn:X͠1ɘdig7t'tZS1}T`V@\bAh׀ÂfeZuY7wF +힅ƖԼറC<ɁQܾL$Lյ}HtpK.n|.qN.ĵ~K>V|+Kiߚ@Qsxii%'b d1>Gz=bg9@tX4c'zÃI~]^ ɏۆm2ȸutFٜD{oӍ7|=pP1>k`DHZLH ɷ@$:w_OP6Z0C/Ĉtpù+H){j%?>rF~e,|vkn"</MFgMIF?=̓ +;_ߟq#534Gc2USLXP9u@|C/| )Cy 95qt88ȑC!jwD CzK.bJ|-$Z!wȿB8d\J-iyWgEG;bjh6Vj4sJ__{c/A"D=JW( 426,NOx`X$HV: FwᨮoT=|zӟb  +Dͮ`?ׄivBxn +9#%C༧ 1w݇ Kx7PegeG%ҋ0&V{)SR&\y8O}(_nN)oܽmv1W0[@[ߓ "@@`IiU&1.~p wHaGx.u,Ak B́,GgGrU3eq ++[:@ +>i/2Z,k٧W٭Kk39&;nL469y֔٨OU.Ș?@|=0  +!*q  뙯 +&CQ1upb 3y\Dumܢl +fW>sa} "86 fqH[Ȅml}!(&gm&c)c9%9Ju K>HIq(]\be%0>0 eV&j#B +r-vjÛa +dׁNwMFtYi r48f^ZKXK!7Ϣ9AJ ئU %@#@Dq8$ K:_0@j1z"}Ħ^Cb |J[o(sD|BЈLWQ`۠6  ~  2sԺaD D#ݠ8>gS @@ ߟ'_ _YbƯ57NSLs"ml=q ϓi L%($S` /R5 EK+ŗbcG2n7+8₇iŘ{}" fo >C=:OS9גfVRo۵յu +.McMv[Bh/.97mB:,1&7㤼 =ۃ @MN\y=yس7Vа7I)u838Ff쮴l= %ZWIx6Ҭ/ϗm.ٱ +@)|.8ئu|ČtC N7wx᷂n;}i۶gSZƨDfV: +DH=<=/ Ê7G )`O`IĨwD?$!Bu=m< #bؼ +;hcǶAi4n! #HjO~q{rGx "F e6My̯jÙ=߿7@]G` hO] nHY):.|$*:l3.zV V<8tەOOղ+@5Ķ^z)%Y$!wpϝDOң{l@|@ ' I0@H8͢1l6E{_|1fƛV\ssK˽307w:gm=H` 2r@hƫw H%̽#^aPlAa { ۞@ 0ظ4pu:</ܠFCbX`Hjo?u>]77>-'k_ t}#j"܏#t3KM0w8)PrSz hXZyS'7]WWeRgI[b1B,P>>{ͷ xbzNYM5o1I ߘ`  +Nfzf7 䂣s*}d&([Oqy2N~[a}bqf?;>{Ad ԡ^܅/:ւּSq}1]l:`Pqw3-gt{ Z7{1 5ؓ0G2|GyjKNJ~Jw^; +&97h*=J񥕒+WV kRqSyP .pU^G w(j/d/:o/oLG #C|i9?]$@(+'9bCJ̧̰ PbtY " ಳ첋QísA5͚l8aJǗi"`@|_-P@43O2cԂlN4c+@;m':`$Ad Va茹B6K^%ɜut%TPP⇩sK}"7vG3[dQՁQ*N $ lֹ@zJ)u^ n|>GY>z-i.`go1XY6f W dS36xYlsbYط+Mt`B<W@dbE"Y3/#-MX+Ē9̂}xhsٜ7Pi +&@L)f@LD +qXjfXU]g_|q1Xt{Oϐi{]׷bӛ@O +~Pl:w܃x77Aa]YOh0'ЬUl W^DDCϰ2 Y oFjVMOţnR+G @tu rUQUx@zyϯ!k)JL5KedZ2NSqUڨRMH@y C^,M)]/QnL?wӴC_FNt ߎ蜳CB 0k%)@NkNVOcy1FW,R+(?MPOSm đMr~Ȧs˺ Iurt0v +%,}ju(^,e/\؟24aS8qxA\bSL+ļ?4oTꍍ; 70*\ O޺=_zf2 Btٍ@ϳ b:I+L8† 7<{ 2ĄW(x0bW_{3_qt~+D__۶?XBߌsšjJOE7D%wewUw5wu܏cߚRe[Ek9Ӝsڔ 31LU ++R9̽iwU38ǿF ~Fx"ܘv[Oviه[ ~AP`Hxue4qpruQDwbS^.N:TjJTa#9|)o*7?ŤٗtX\o8e5A@@a(A; VxV +CA1Qjm1O :^6ZX)Q,g/Z0}o'=Wnpl],pgcmĽ@zjiYݶmϽ5XT8a{NZyPXk8a5ع@yiXAa) t"h3ONe%]QMB:\W*PqK[|?u~_ܞ蹽 OͻlSھ{ϺCA_0[ 6kFݤehdba]C 5}w6 wtr_ث ][m 5Ix8g)9Qp{Pͧ6&"2R}o-a{n@*:׌crDs6ǧuBmk "wbln:pǮA}_Lz ^ɴ/dvl<52na> ://6nԁax_d4>VR{BxNNZ0k`wܫ[Q1+owg"2v?낎uiz5xك u xGx;ތߓ0,\@Nl.ZK^ /x..C W1ʯk\տI,>G^ 8`L5&יR-*CXPL{=qʷS ^ ~㷑Ч4; b .䉄Rt֊%|͠q]fmO3OZ}B&&JXmH6VCʃY/KXx+jao@Sqk ۸;` v38`i nFY' xm!ZtT.Ėk|"Z +ΖQs7qɔ ܋7S[2A/،_صjf5}uA^+e䦡ErT_=h RwA'с9ꝓ9Ӳ^_uLr03@Ⱥ H9J}Pi)n u +30ȗ^~1 On0p$! 9NIv >QU6A|F@#X $>1`7!bw( cu#V<1ksBwd& &Do:'9Df.:p0x0P .~}/^x~z f3^c=qwn~ M`u A7}q~S [>o\׿_ ,'l.A#07<\eWH\v +bҎVMqk4 IkJ5. %)v*&+U19ospg:B"진],$̅]梳_/vk=e0g4A$jj#q"sw;@$xh"@: +ݤF# y䶙NC͔bi Z}J>]bJ &TbK4oqqoEξ75.߸#Zvn}>T̀}:DSI_DY_ܵ b +΅t~wqn xv휾z2=2;_XJ/b;В7oxI| &lGq߉If<~)ȘZ3l1x ~˻xɖQ\? tc[8 A\@Їs88vBo0y@ )m#t7Tu Ͽ2$ }Ȅml!kag̪<o3᫃_`ğ9|KƓf_|3~o".1uJc {^ ;`wy +)&oab^KO7ᩁn@nb|zZT')}:8 %pz7>[4Fs_ (۷;1\uh,2) `@Fې$Rb ¸I +  hYB8H G? 7@ L)t|,@3Z4CȄZ91nq + +@Ԑn|#AAG +SGWN:1ttyήϭ_-G.pa)Y$ VXQ2^`i9ܜyʔvܘRT+1DT@VOWKRSJQFd]@l+܋΂3P#2Lk8Yw +rv;A60 c=q̓\\mŔiJՑ%RMl.ڔ\c "$OaTb᭨= fyEjSf%넅ʚdkv@sfk6džF6`>: 4"QHj IuP^ /Ĉ,VŖiq#R%ϼ72- >rK7L,9}r4 fGqƟ[fKL_ c x|l]h[+hܾ]^?V8 KLkz ؂Aoo!q+is}cE% vc=`r`[*q&^Ҕ  ]_6t:(5knZ\љ<'N?W1٬VydB +3 b@{ DRMFB6$ d(|5=1!3#w\ݶ1mqmk3rt:2e.qD Yl!9Ȁ{,[`< 1/^A2,lnuef%o N{#8\"q4 ti֡UzUR(?vҽ37!"(4-ɟA I7g_yot:]"a6(fvOakBx]*F],F1*k$Êe)qwR5+?oWx'!!8cjfv† Nꐋ5Vd$69mV#٘a"4x :cr!!>LQ/ˆ,Ĕ뒎)0&'7aM|rjJ)?a>i9em5k)x)nC u :\SJ%UꀭBEHrH<@Vct0R]_F4N$;fB uK k`O+~0cnvp~qwj+ 럖IE l+Mv +/wzXMʺXg[WNЊ&$nnpð=AĪ4pjxݳRW_’EFS9!f|40$P4+Dܧeg`gry=1aaZ\`>y3vc9 sJI Gb'[5Ax=i&@N7~9!iQï{ .Ӄ@t^_ڙ@̘k:2dVє; &-$ 6l;& +(90ȋK â ~SKnm#M"oyex3 /9A2x&nHO{PGBV:mZB \j ڬX{7ܼ5;~T@ڱ+qD4I*>juqU&OAJaJDpćsrS3_H$휸\o6,YKZ%*;D[ /օ#qGV,>D oaz.se6k+=#NA%~% j&׆2d075x F!ƐP? +,Z!PoH^Dj)~ o-2W'XZcO`%8ƌCF!-O(xuTR\MƗkb˱0\G0"Ul9RN|;f⭈b60\ -if سa @ 45[AYYbW)~AYTR E%[p@7ثB] сa  &Rcǯ + +K&BsAbZ6ζu ||@X)bs뀘Uh0gD  e05-CY%)&&<@N+qblUp K$yxҲnD{ :ØA<F,Mp1u<\~ߌ?5LapF##@|ГR篶DBso@{?v Nڜ̚yA&W!ga|k/ |'11ī7)1!{B$ E(E|)= -|xnbw,.1%@lj矱 Q%z^65:@RI $,d0y :F]q} }q=5S)uZ}R>_-A6PF<|>)7k%TTyK{I[[Af(B)L0K9ޔVg CÆW괬 *uQuB:LS.VEU/\9KG*@SK^؛07f𙷢߾}bu~q'WDnYPZ=, 5ucunؠ-7[\Ǡ@8`ZXD cmN邹a-9%xLpt%u`mO٫+OY V׊K;([gfc;̘Gi)k ,tG.ywyiezSSzA'2%&mtiYb .14s.^ w /6q + ϿH &v$L.FpO躀Aux* t[ctO /7(|/1o' cud)?79`eg]xq-HgfjV`4ƔJ5 zB]HJ4KQ:̽`2DʕTSOF{1ԥ=I{b1Vܦ'HCӖ+*tjCj!ڐ| jj+q*2 +*u|*\S"vA /0CًЖ\c 8W'D6Ǩ|ڹlN)ǁ1@ FO BKL A U +c1c]': o/w`NdۛAX@lC ǧHx e +2z]  +ezbS M @S $ 7r e c @Zgկ2;1B Lg{G-^ ]erX ,KՆxdkSĴexIX9H ݻ@=F&`66¹ + H/&@LY&tll9`CYè7@\0) |@|և@\ Q v>zo|N]p"mb1\r dʅהZ|m6N XS}B5M ƨ2cd!\-kCh>8_^I8fƋ쉵x[1=Ica, ~?%ܟscL:dn %$@k IӐm\6BSGJB]x6@,P)A&X>#wz{q;GrĹ11I-T&85ĖbK(Saqʘryl Y}s{d;t#zdFV/s*履f'A6=]9Z]7=@h[@o i+ ٧ i毃!.UmuD~ļՍ@"vl.:E2 7}wl +D@lgHg.ֆ-y!6ss +ƪ.#+lMS` E~.Y,1K/fvs \DG5 +/-sdtXE p0(3AZy745y~iOQ &#0B#9UZm @U7lstu@Ybjz ĎGXs[͇-(cfMWZ9s2N}B㫌@>}x1@p^Ê ! "T oƱ%wRߎ_cbO |-FsV`һs#J ! ̛pQ3\]*Fk#Z!_ Gy#y*4-GjyuF[BDgPK1BytFP ]SFt"t9TUJUxH)@NA؂rr ^0cP|P\mI1Gje @D!t\ :8Ȳ bdS oNxAZmxxL9qnjNnq?Z(<Ǻ! F IX}@|ǎW±98 +z4[:pAj{$s@tn,̽ybɴɉ@L/S L[~@xAfgՁ\)bpILZ䓀O@¬ b헆@m 44gMg^<08f9( r :<=^7Eo=b xY@d -UD*h1>rm { tqU8Ga!LQ jCtaL0@@Z Γ) Ad@W^ Ml6Zz'aŰ"$^@D P)E^,D5au@MDP0  Aؔo%6?}@}V{^}iˇTP 9>ڐT?=:GXPITb܆-"m -ІhaË,ov&כ&5.1mW^ ֝vܒbq_⡬!eI\iB7@*7y!‹ԌdH"8?271庴{ ;|fzO S"(a|Xbtrf(t(GÅ$a +80:Y:_!X&`lׁ2g,5z |A|>aOmp&~{HuPy@=!KE y~@k 🿐Pr{P/6 [#xؕᭃ]8Z31dq=Xۻ c@ VY {y+yy ZsQ~m@Sx5`l{O5q g #$[<{4wzo?X㍞?CZy}" _do/c۞D-2 +)zcȡ a.} ]4㛱SgKR0v7pOݳ9pR hBllb_Dgqh, ,}OPdƆAƒ *]l諻sLܙ?@~@&mv'5vsmKAdǶ\,U;,PG{kL4޳d*&Q:D0peD@#P^ (Б#L +"B\g7[]Kx,廩[~ܚ +)'-RD tƆu! +ב4h@m‹ 19_aN&dO5fwdty?mĦGM(c1$[55P^ /T E9сنFtȠ#%O@1Ls G Grx)~bwS-1!6D/g4v4tto9yDeCwFPTXH-̱ @Ǝ {;{/=?'/wI.1{:zߔW֌O-]k Fv:cZكMjl˯%f*8ctƾO( I?zY[zz0q; ăa-|Ouv׵ݯkWz~FQ?|sCR|dIdW0T\s~McM=5-=^@ā6 g^|999 <{4Չ$AHoƛt׶ܫi[C}c+`═ CS1YLayݝ[U7uW5ݯn_G~WF,1'֙j!0oOuܫiW|nMuW a !L/zTZ{XU?T}>~7N1)^Ƿ7o\cz1%d:QN3CZ]R>ƘRqG qUJ&w a MH+h %0{W %5>vn~+!})Ą@ A9* 2(~w C6$|t}dAR}m7i /A:bO@v3v8G8j5UcGMU|G +JY2Ct!Sa4AT㏙1k̉H$Yy cG9]$Z4쭁{Kҗ[F&**S9VEjЂbbNZ$@:DCY +D,4&5+0+̉UVZRgl+o'/-\=ِ셨(\bR 1<qEぼ}ɋ3V+3V +@,UBֈ +q?H3-i,֓]8ϲF"KQ2SL9Sf*S_E0V=}~'I;^XŞ"4ꫯ׳~o;/ђf8t8e1ΜcKo_5 g?꫿.<&Y0,kSnج +C2ЮԓrA'It&p۱qc4 =w9 VL5hzf/#'W0"7<Բml&!pHvh"3|!bcXF [ +^m`ꕘbHfY"\+⥗xiY")=`OaI/{C{C`{H'MZV엯 l_,[J\ +ɚ]$S*4O ӄ䨎e.\RRTTPP`W%::̇?`LiKySRww᭘=. $@ + B;ްi1Fo7S!@!qOェkf\Hrr[kK3.!YhښY^h[?j$^:P읕:5}Vt~rA +E9"𡜛`s522 sQfhB,B6%G>>A\8y艳?+; ӽ451ao)4:G4bu0:t:`߈uV5B!Cp?˽ZH!|&Ķ,k]R AgW䒔֤mraS݀i=l2IJC:QuP!ѱqכ HZN0g5׶wVƀ%D5Y_oAT:zUך:lKk!N7}o6] 8{_0@&3%n{U7M1/Ñ蝥B Opa*㢕yy99Z9YYP!438300ɰIJ5&''zh?WO}'4A09Č2s/~X61#Rܘ_7#I97I +Y (9*`njvff.41#E LOLOLT-z5 Yx8Ŕ8%|ĩ&*'oGcc?IQSfkLKR͌W&e*e)#2UsҕRe^R*m:DŴ" @Ǜ4ViL)Ѳɑ)S[&Gݟtӟ=AN=r' Vۢdf%j5=JY ZI9o]͏oۧ'?pn&9Lc+,$ʊw`nٱ8W_XM +m%:W;H{ru7Q/ sW>xa!e=O.>Bgm;ZJ :=N ,| #䮮oۨnX\Y=lݪu"K^C]^ն j`l=ƅpl.nrj L"Y;=(7({-QJtnbyh(4lNɭG=F<\о> '̍mY,k(?[Gr4qV+drVg#~FIJxPdrni3:Vj5-VKckn! +pAzv=~;btzF^]N=I5.4k;DA;p<ןee2eATT_֖%Ϣ/Wݮ\]*]ULy[`d֚fk}3d1q]vȱ39ՔMN ea1Y'rԊ@M;k2|u֝ e e D%+r*DljܲWxBG:ҐZdm6X_2n >]!SԈ&CC5H#xf_oݺ+Un(o(/Ȑ?j`+6ʕŒUcgW=7?>?B!1Pv_ 2DAܨ=A ƻ˧ǴኸI΄ث MVNUNC1vnf^v^s3s5s4ZRte]IQ$@1+^1=^I\GqM.Xiʭv_ttc? xşӶdWb%z?ZQlZ$4 +X9wM]eVrfh0&*B3Ӂ8x)"NL}a >l܅{W^)M,o(峘qɬD))LC%bь8O3#=4N+ӎngBckG F~Aؽ"nfF<>>:wܭAjdHP#jFBTHEdJ`d% +%jLrJL:' kcQkesIDc;~Н* )cR)3kiQ?v-) +!BAD; 'eT~qjEJ]a Q`.p+Y "pV*`VHNk(&yT/ R@; 0! ^PJ$&!8H~PF6U$KeB .Sh{ 1&#sUC`kh*Ś$bы܎$>zZ-m" p3I1ϩ3ЀAGƥ>XpH+5 󨘤~4ڡ&.ФWTi]bNs8X88N d6"$;T8kɺ8%5еLK~~!KG}=jcX'@'K4|;:HӣBiHb`8dvӃEE^'IPdY'M@zHz(ȼ0ͯZu/*5a*uˡ{e'JOm>f\v,<_ nhKE]GYS %Aeқ٧0 0daV + +X)U۽ZOv.kIy\+Y4fuج|A,&lbLF6#k0=>zFJ &`Ԛ]Ftɴȩ>霄OgǏ0cĈQB׷A-7iΊ$4f´>z| E( Oac? ;!|GТz#@kMP 9pLeG[e +o},ca &|uFFkz$O}Ŕ:tzzKn0Cmiɀ?B(ոJM<R;^}Qi* bKkĵ&T6sW67H`@ЈFGg]aͦTP6@lVJ8*BrER= ;ݾ?hW*@(F ]c( )y1ӁCzʽUuDNit,8WoBTrSpJ@"E*w+!]*2@-h+ +C"H=|m*Eq49@xypaF-\(j bT3BjLrJN!ErHfkYۥ@,Ir;LAȕRPi +U _8XQwi pݤDE=@~#~7Aԟwc?C `!~BR EaFr@^+e} #EC 6PC2?Wӥtޕ)W?h( HdZzvVvnu{?{3p̅kUUVWϾsv9Μ +qq;sܵsWz9sJ_9/Ƨ9ssW*~yWO^ߵƶ]/Y 6|"KʎwЕS9S͙׫}Ud\<{*\| \՟3<^WWWS}^rCǾޱZَ˖ ]udg*/q\rSYNN|ו=]y:O}m6\+z .(m߃ QyAem}:dTЈF~4r\Шq!ǍqB +y;rG=h+C :xTA#> +4rxX{h ̫EǾT@ n0CB 16x؁bP$ } NJ߆ӿnn0wy=^#FnЈ ^7B?gY3m~Ȼ8~gă \pae nȎCsƗ"z5f/=0hj HXYz{@RnhFh8 jD18Z)ψ|iS+Dz5Thq: p aКZ}~/lmD# 6C iE=KO׶_A431s^8 G6I;ߛQެ` NM}٧?}Y>y}đYG>fG}/vf{ss''>>a s}< Ç?^buxC86>g?0b:njC<8^(PS^Σ7Lߛ~ǡ!M;4.ГM;Lxoڞ]lh0"(8hXpaÞeXq{!!%6:hؘᣃR Q/+v +#,3/ݱr[\`aea 26":*< 'Vc"= DSƉ\=oay慍?ͿdEKGĆÖpKs,:XH >0/}""K5g1JcO_6~¢ʼn"AatdXdTXzKXdLx$K̳""|)h(1svXe8 ҅CwM[:o^BNdXtTXtDX/'&O?/!":""ń#@TcDxTEK" jR2jk _._{͓?enD̜_޽m/w=yX[t?   hkmy +jj_c(c@pQ|qNٟNaʒWVJNI{G>p_sMj _y'|j͗(8ѵb7Oَ)edJ9JNg`3w8، Ny!9К~l#m9ZBAx6,u'K9Qſ37N<%"/4g$ vd ;˱R"H.KR!J/ӷ2RlÓ}T%nu [^%`鴝DA biϪlz3_ı%;K0/$(b П-xVDXL܃#ȑ +@FKF#dv)Hw +Oc {V8|lcpus}fHËX ^ ح+v; vFB䔵Cnj[M6I6u] 'E0E½·gC2$zq2z+Um;+ +AIN^O5BIbq]}i7хS^fqб.' [vة)-_sWȐbcaРIwlFN`E6@pkL,I^چqhxј Q,GG$}~sI"6r;=g'HqA@;Hس'ً?E0vWP6a}CF/Yw-AA$tfڊ3v 'z!|pv /V)\**5?|hӖCVꊲC~ q\9x1xwgɷ[.^X2W{7U%+0]ڶVuc@ZlՎe!aacx* b%.]e[ևϕ%yyE+Lƥy|tXfsNɴ7/ bS86X;ZeZZdi)W +v ; +/Eظz--s(Oc^mZm\ue_i]l4'Vd4ExD~ +\l/ s4 WCx#M/9^ekekdiffdg(+JòkMXޞDn087o.'wHo u`l5A+0>:7E]/rOp B;1O2 +Qi_gsI A~nz: 6zAmRMz|`P$u4TEe\K%W)!!B"8A +!u hbO=b;a{14Iue&]Z;#Vj70l記0*w =I9 =X3w>?˟cNë́KkcDJ#ͦ!Nx%,"Yivtۈ'N zK-PI` ̂@^QwAН&h[K j 꾺%Sߡ  ?xs "ooE|s+z""e5f!v9~=~=n-v5?ف(r1̓n(X"79LsFk_ILa ֢>#V:6bI%֬J{fq.ӝv ƨB3W# 8 +\s#g~*) }4&Rn74g.l9&ϑK(SK,޼|,.J^Ϗy^G{VyYJiː0͒\+K3U9Վu"@":]y Yd=[owm.`eјj.@mb2J [mnp.csr_ +J;ٍp00PlhBk,LB{PPIPH04J0z^ ԻUzB? ?D +:C ?^YIj >d 4՘ +0J0 +=C$ 3 +ݳr-@!tBK+ QץX#٩?JȐc2jo&'Wmrnѥ28t9JeZJ4h>5IOv[&:Yށťǡ10|Ę5F;m#D١Tp";XB%\zqx$^`\0TX"$J84Vap,EDU"_K}`T48`؞OMJG)VbGD݂iDrB#:DmΉlQ{o:}h }u k]ܷk*c7ÙݙKN  RqXRL,G _bACZoB㐢;`@%kbcI"c×{{ؘ7N ?N%mt$J{ȜL>*)t$lжO,u8P D+ [$ `3UJ + :6] +]ǎݕANIϬoiAB T EEѢ}!QEQdhAA8W(wZ+r +؋iB["YL6á]NV A`%HgkBFMV)* f5nkh& ֪642ȉA:uh} ^l> B\ ȩ3+Jw.2ԙ8ֱ?J7yd^*kߕs'x@ h `}0;iYP!fa er[L%UnlچTACF|JԝԪlvyB3 rUk$*k/MyfFdv2htvBl[-nKj9O)# c%GBb{VksVs[l 9P'`bMM{ ++mݱ'y;i_qP.iۘL̗ J)#KI%DR X%~Df@cZb6! +/0-[oXƱ Ν&V=*C P:.[$Oi7Q{u;o6%;.~v8K"5~fҝPo(+4 5Uf +,@@Onp n-ѻ%:XW6@ɴ*"e"u2EnoS[e&pY.ȳ;j5D2%v9nU )j5|^R弥"Wejn;ClZ$ +&<-T6ɦI3XTQ#ss[DRt]֤:H@ {-,k; o"&;!sn|Qn`DXѢ3an{T Cf Z4e e C9 *5pƶ+Y!h& ޞvAԗ(oh'ID# +bPc$|@䱓 Xd+-QG}*q1"gPA),qCJhhGݿs#꟥DQjo7(r͈\dU\qh 7O[AVωed^r ׶8>{?={A:k?:ʪpeWsl}}A/Wa~/d&8N"} K) k/J)**mo}2Z%S"ڍ`3vq[xao?'1Y{=L^yLhq'e@!|>;G;S9RS)8UW+%x"/e~u~/g}t" ]ȤRA"ƤmmgRd28*_C{o[{IŎb[r%i%lWp<ϝ>sVg=yd M#$r4Y66~}`biSҜM¬mhS^U”tiE21fk=$eKqTYAªY .%­08k`zV!չ$ZD`aZd(UAo7(P׽02j,A{L6fKA~FY&_( yqY.iKwtTpjJD*A*,ǛeD37cBJ4\H~@w&DhcwC7JFef4cAu^D=).͡Q*wᮤDJ 26-p@ N !CEpRJ;pڨ!!#RS$c#ഢW%URPnp +Pp΅)J ͥ|& rAykzp!UfF Fk&o`0؄f;AZ *obe7\V_cX3b' GHyƍ-Q҇VR]dkf̂QZ#~k}3;Gr\q?c9VاwWV+ݙ;\dbqz'C?=NB`AttV=f{ ܉glʜe2kc[NxZ7ߙ =%#ރAlsn&+Q^o׮D>H"=}.drdf2wшc r"OLHnO+cI[ ֤j؛^FmpmMq|_T׊T:Nd:7`_Q\.w +"~sr8RKl%"Sl!z.v.6W8U`bhGz܁px'ŵoWU(ܱқE%7 6HIU(KF6o+h [}a;pSrhP:/XlAlZ&kqݭ1wY fzPY|A@b|D) d|85d$4Gi +UaoVf֝qzP$!@wzFwu4 VsW 79$#xRB !4qabN⸁Fm{ߛkFV ]ʣ2A@C_^.1q#z0;=2 B@'Dxz #PHIi`%WG R (!U2%!n+1H}DJlD"_C݇6^Hq S֚ 2 ">FPVN+_+!քA'!8wp6 z%w<=9,"pԷ:rLk&83:9]v#g5 wY<qA[Yq̓V@|0]z%/Zsܝw=Ȯ8r*ln> h "y8AW b~t<"{5gZ=̖Tnbd/ ++_h| V8RLGnK+N*so8ّWAgc3al,Cg]T$2(Gl'ӷ|͖VfK-'mMS&omEDaw-g+^sG'r!A;)a~0e\\S'b);DJ9y1IQN dZ`W1=-۫)ۧPHlkZӶ(^8?IMz<(O;p-vY‷@;tskdġF1諾>Gwp #ŁFm׵ؑAXg+ ېATA|)xx>3oꏣ/iů{ "|j샕tIOV:|#W\q\{^X)?YuąY##pS6 kVv:[tD0 +&<NAC+<"g/څepflCNfIb,0FmR7^y㝩 Aqkћ5G'=Nt>OAwepgwea^PÁnj\Cfb'؎+c#c-ܒVjI)5' + /_@,^nq>f \iN2}Yx.IqlCo#ѳ$S$e(J+saJl/nƮӄ._m !PÕ%)u ķ,JKh/ύ,%,QRR񇻊aʴȽpCKC|&Zd-cDK ( OÜA0 )tzAiS@LJAx߰y= ]OsAx=)w{L`nh [JV}><&+@|D/n"| oCȬktI0ڃN_d}ѿKŲ"_0@|$@"7/TqE}wNW2=Үr Pz5XfŻe׶$/(RqmP σ Dt 4 @AxW>YW$mVuw?} ^ :m<^:qd>yHpq wM9 쀑#R:1]!DgPځ+mHܒVCb-d+hmT+U2SRp) ~<6BA? _҉Y Ia_ +rh+jd-h45rj +}h Fv +uw)ŷg.=V0s`Dx‰c'T9ө3y󅊕omuήHw o+Wa* DoD>DJ :| +^wg//_\f a<Dt/| '4싩]Ax9'D}@8"!LR ȅM6ar:"&AC4JUn~/ =})~"_+/}ҁp09CAb@D?Ձ^yu`u.:DQ!kd9fp] +@(v |p'$ienV9RϺ`eAŕMŕm6ʁm +Dpm ^+Y*1TkĈhD-. ^?DW"VW9kbt㑸/ޒv*IesR ӏ{OK]!>2P?B5f!yOXVwe#e3@8s JInkoJHPe*蕐Cv@aSܾ)"%iAIB6b[$[蒫䒣F5sΙ qvw >eG tv&%]ppzM(=R>?w,wtSE'(:JȟL͝N˞I˟)T.6wMQ f}~iRׂӸÏuE-͎a5$ ݔUՁ< eAr@Xo[ R|L-fn!LnfG ^ |&#V?WxU!ޙeH 6@c2<^Dע/ԁ+Ft&i! Mxg]Ӌ L@^@Wu5]@]K;ۅd^5|K>>D=n#jQ@G hi/.MtbK~`uKqĸ0 n.Piװ9v<+B?o_ pe8vTfIi BXҪc`Kye&eUE\40'1hl "\JtPʺbrXJse'ٟ~9喤_WXL5OXEIo-=->D"}edKRD2#4[.5SR1f7AnyH{Xx'i A%-q@pdF,g2$/|[!i/E-N%<8o=gn0eTNh=&: Fe>M1/^Hf$㹒 Hjx|yys)si%Eͽoix4PS)Z+`Og`RK:,L@ kV,²B vҺ&C}?gvoȃ1CI(֑:P 8vxU  ܡgx "A4h"V\&P s +,Y86k#TWVe}971t/ \S+)LsV4Sny$Rxakx:CS.>b9Npp@` Hѽk޿ݞ?15CY#6N-%3Ħ-L MA~u)^E[u$.lvgNʌ@Q7?q,\?)5Yld`;H=[R $/$ @etRt]~Y' kw; AF6s;3'Ć#](ė M<Ѿ>w"@H6HLheAu@4"Y rÉ +6CbQtw)/>}edKUhT¹SfNOW7Mq@msS? t_vls tgalvL + xXg)RQ lo ؝%|UY9HZ;Q:LCxI }4-OsZۡ;`7A(&dfvH0\35+tҧB1fԤɖ\S5nݏ ҆_ú?*} ~vP\rWp NA8S'd+FGbw_"ysǃ~;_܊>71a} pK}KW wn%Z&M +8/EeXHW"^oiǭv;|RQ,(<yK)7Em>eqO")a[V4 €nC_uzdJQ=H 0 !ܡcKډʹA\;R2g:H[j^0J. +/۲ieڷw}O>+Rl:JxW~c_7]_\/5WTP2wdx۹S fr˗/NsW!(ơ8AJZ&@7 n2DbD,C X< +uA@8}#{at`7%JsÎĜw=>*J\aw\zHw&/1t`^y=v]S Y {A-E +!" D.z2{$ؼ axMb~'񱁠:ΥV[Eks@ [!Ha0E\tҸr Ui`9}!e yA'T<%3Sz]Jav:Ui7F6  D?P'+{)msZ=\u2rۓW/}O2«B~V1Q @t]ΐ;,ݤ@H6/t`2Ctwz@ARv.%:%]j hݛSJ D2%q{HF& q CDhKe2 mu:$ve I f/j7ڲϚ'7>&tX7m;7;I w֛g +ʖ fOM'W,] vTˁI Ù^B sI0;_̼3:NȀP( x ;DtXXtObV{;bb tw}i8:.z~?*w@ДA7Y,U/!mqsL1@&~$fhBZgwysҹ,1m5vygphv +Vjt%8FႹO>WzGCf~}38]L6} FOaXfKqi, p(L8hŰߛޛ l+nx-qxC~'P@ ń@dn- 7UR @!@AOClj1z0@**L"Vw%GzL¨vVO~qh%[=%7%~iwH, +Xɶ@"NB$M/):N MYۣp\K^1zdHbE UfB*i ]ơU"8^v3 !QZih#_[<7ц )kw@ۜ2 Qdkd5ʵ'׏j?O,;|tu=%"!O7}:_T4W@{QX&8Kֲ|@6bKge/Q#8 y@tEj<tr_pM.g}X-(x\)Q@zab26qĪ>l`L2rA=Lb,4"lBpKjM&[hO K:Ģֿ V=G!&y7>a0:m~_OqkpAuo K>6 +)I53gXdģдU>~<{[OZK.|',T\=ƒr-&~i_r tZi9؏.k, @ lY1psP(~'Ps-Pu_U$Μ֔j1eϭ'8gJ+MGƔz" ġn(Iz&#(=vVlbq40݉郲 x )Vy{=nyKr[>M\9.^}[Ʒ7~*"# E؉\OԊ@;7ex "(&WfDe[9[Tt:+;. L rϙ2)EkgwGe9̼FCЖQ +9\#`7CQ0onbÌ@xBm ^8ye]@uScC 3\E#Ӂmv +E҇JHab,w6g BVuxUa 'ˑwu:C`M|9^a>0;S\dǞ^5Ў f<艇A|kxJU#i>ʼ&ޗol;ʤs̝#S9'b i[bL A+0WxW,. +}}HeS;X 9@MۇHu/˻nQE=`$*hNJ5oo1 H"hE&'zb B{J!ld%Y{[L>IO{A@r( pĐA\p6XS{@ט5m;UwV7@,Xԅִ=_άի + I#1oXdV \[5u` .k}a鯵nbRc^0Bv̻AE2sc Sɳ\f b@M&>mΜuÒ2-n_s=_QQ䇗sDXpV#fk'.,Әgۖ%9S )i֟]B3Grܾ`WK#A~rji$ ־ﯽySx',_p0A(688Vt)vQ˖ぬs wGBnݸaz"1_*z^YQ﫺 dQ3,8xBb@*kQSPry2AO@p@6j9%$ F6z^':|N? qJ{ܥ=' ۮDE9urIpB#58Gٙr}dsh ugB:o7 nkaX~ +, @L=p=6kŽ .4oBCbմj^3bps`PšF:L#x Mբy80;@L-p@<0@{+*)@]}qdg ebA,bgl,boe2MT63@l pzW.Dڨ4x 1IP(#d_x%R9XWͮ-g`bdRa&44bcFŬ3@N sX$@[l[|];Dn#@4ZpF1CY'fa54ᄸ4!  ΐ}U=֚Bvw~{@qt@&M eS ^AhH:>,M:4`p5;w5}'Fjއ<|dfW9{jx*owiL!" @o=_Fy7/N h({n^AT  nQtUoNНklB@ܲIǴ#BK$ʀ0 <4#{^yR RupH(6wIYeNTNyP8@@p:R{\ zh-B F]H x#H+S vl.Qh0@CVqe_J$} wEb-!s!& Ps {o<> + D):G#$XvS@.O>@0h 8 Q1awaݩu6"4:F:@R1k_ځ &hey*{a-8<?'M@)hq{q{rk|oD L@ءÍgo|=闓~d೻ķ% ,| HM) nqǖw;2DM~G+Ɋ W~?X~z@\]w|W}eV*?Ȭ&UO o-6kVg?qbQr),kߖvD=ff Q,_]AEw'P(pXTaNQ텗6ucWn7㭒GQi)h.p@w ^]{ :~hҰD>YOUt{=^/ЀVN#nq6ڳk)eS2ͱ7rx :,i7!Hn"bg|b5Ȣ/X@eòB&xԁK +Kn:0t@ |^ + , D{ܾ'@8*S%.l0}6RL6%x@:`{c >*gW֌J:%]XryUi(X%`翿+qOa B4uaM~@h|Ϟˆس临PSQb0i +>= f!>݋WcS+cƲ>=!2@7 > aIЄ r{vk~bZv1?čHsƧ_M\+}T,k|`2,ˆ@oʻpĪHk{JfuB? :\^-|׼eeG)ʇ7:Kjtx&H/5n}4PJ۶s,\G p}\{ii#is}VTV/>ŒU% 7 si b  ,Dk5v1Q &F͵Cn<|Y/NC, uN>E%"̬n . XYWbz5g;D SM9}wKHsW$_pq.PFy'򳆘:0@ o74 \B ~4(7b1{>>م/㾸> HS ϸEd^{>4;0HQ6*G&H\e A:(TQSVzS~գsɺ]vW^a˨7V 'EsoE- /grMI<9 )$Yv +r\(*W5kkꊻ +K{ܲTl/`=kʨÛyLXs`PkRF +5+Ly=ֈ򎀼!kڽ/5S>AHyZa\4[ɔoKV)B(8)^;Zr8o̕CkܰIw=;EEVy6v{W Jx)( ںOBXmYCH8[8kXcL7H+s@hUZn %n!&C}{Jd +܂7" ίzk$k ;0ECd})sYT"V̹ r>NW3/ua*C8۩g$ h :q"@8fWz{6ق[0N_X3b) H+G4H$48nd.q{cbqkvsbCzBع bѴ/{<a8 @ԻJ.M' DZrF1@֫JS +`z( WenEK(iu^r]g6XRI +qHlEKtG kErl@x`9 ɺ7 +DP4˺T~jjB C倫Uއo栃柷43j )D{xܵv9?{]gGzHc:/FSn[R@J..k/[9gYƴJ}b#^~xp9Wf>?vpv0t0?p̌/o ns`! +M}OWt~ƌ@h`#َyn*a|1)Ah9& ď9^?:x^с$谄z9n.0 X@|g~$)<-PlÄ[^x3j $eFcϹ6AL91cl0:7-= D53l!ozJ%'>r&G~pq:D@t`157)r?xs 8 VxOٖS&/mAƬwG|b1dybjćQ@(s@| k̍Am}q3G=!:ge佁d @ p_]{̶~).w˻]vgq:䜳g[R +)Dw8O{(SF>]"喤5ŔXm)hnK;:5DS9s2گ Y/~,F_\o倻_Ε]N;lx37WuecÅo䬽v0Gw_n9*j#>VIG+۹ctz@$58Kᐷd6Iɒ֘]oȪ1W Io*Y{p7@ܛUAHŭ=6 +d3bݸiS S u(ЁXiBT}+,( "RX{-- +ąN|~Ye7a.nr*yhZh ;Iݕ:,O5C( 9AG ! ZZg1bphL!XI +Ö?u2FyA^eg<Q epAٳ 3Pۯ >exe?="QIvoyCq3;pƒ]YkJ4J6 W_M[=9 +Dv[8( nfG7bR9pZ@jΩ7f2 Uƴ +CRwJ9ZfkK,H |oDu!Н /w n6vB=t /v, .?kL>x.!k:M8lSAz8 xOlD \.vAβͫlh!0MaܼFu[ ߜع09,Dq@\ݷЖݏ7kyH:퍱F)vrqw +#!R@m?xYsI=]\ϳ[RV,XtcꁿfvًEԓ?)rޠ zՋ  ̿n7 ~~st@50dqk|A+;?Fϱ]r7'@L^ױX@(MG&>p@s+Cid%:0 CH|W^ t-&'$g!}pwsfۓ%rҴ oF@G K1`Aߍ{4Di[I'9J.9.8ٲ@`ɪf۲풍7 ^Zy_ͩ2 +/xJ}K~qK@r9 mh Bt@(nT8%5KlEs3&ԡJ:dT R K// +'| <@h 17u׷b7vch6Vm=?Yc%u"8(8 ;~#g_V N=%2+l,"W-b,o"VR vD@?~?N{m1'x ګ;@X>O?âbJ?pxnǣZ)X1 o4, Pbo:P wVЄ}fɋEjrl1?) ;ZHGQ@;s@}ӷ?&ej֩1  O#@~̓at-_-zӯT,I GP 뜅p bttgj,$\@P>-(z%ju]8dAdu5!5; @-ֿ}5uP>M~@$T=a ,Dr+!SuҀwN7-iu.9zkFh9cmgZck/yʞ@,#>%/K[}VvVbt #d'd4%iu[b^tVpΚ`ɩG+iJcf9ƒVa:-_}#gP7bQû .ľye;( Tn:pcHI1 bnX~AWn1EsYr@tϽ,H%ZTn+/}{1{dNiz WY |$Ҳ%wpcZnU{vҠr {Qܾ{ X[f;t2rO0kqA`ى>PEA( V;c;c;;Gg }[xPxQ4JKj>:mw%EE$mh :b7PA#ğMgv~h;dQ mu1O[A@|6MAHqq?xYQ@$!8Z@ B<0W+ɶR;@̍?$j4_OwO0m~l_C ~ +@iͿ}ဈN +39d9(wVpTE?3LI3gthd.k lͦ枸{W/ivuSh^bDec"R/PѪv0)0C k +b!]`fagyCۧe`9lw7 X#*=kg:tp_qĦͷ= N.}2t,z^s1HߑJ\ac|{8m>f7O=\vvČ㷸ߌcxڊ37 чH؈ 1bg0!CQ@o)fowG51SB 'ޏ~Ic2cjS|)wr:"XFL r46x >˻=N-pݢVgQ^pY,5J*Qg=@d787 +6^8==K,q[90.IG@~e_Sn*"{$5vr/+C9lgͬ5TI2cJ1/1O @H[;F92}9WIˣip[{ p&j/9$-b QtRh)8gk0ԙj!wg&5e5IM-7 "tXfCi3&-9Oww\݁Ӂk.fwCVv n1@1@<3-/\hYӘ|0{DZx䴯p3>Ir4]9K4HG"v3F5pY8^kn9-whپx GZxB>!$Y a#x@0J:CI oqoz Ypm JKggW}^ՇfbG]I~cDMu 2B *EA8th@3h J;6sH;ܲb4}8@X0QQa xs8?){" +oMHD!nR mo f(>bf;-:Hr,9(=#;t 9mkpso҃'/E;)^9s3f\xC튴N #F;+nG^ t.pkq#,BlQ: ܁!#| LQL2ٽ}ߏ|v\6<ˌ٘AT *ZX$qU|IAQ ⲭ䲽A~ Ͼ^t@ʐ.f6X2-ij4$O*L?[x-q G@o"dI*ka#^ +v\/ lMx^aU"FFKy g9U)Ɯ^mJ̐DeS `" Y@a;@9x(cW2{q`QXp59! U)$ [3ΙgA3D> `ȩ7dj 5*}j.L$7@I*0dJөݛ́Tˉ /Z(7wȁ݀?-/"nڴzX^??wZGGfҜR, 隱M0r+ c@nax&X&fv_b@ v!)+:B\D6pۈ=;a)vT {$=<:% +)\҅?v_F{u SR&sw!k blYӶu؁:DJ< PH@|+©5oI/nQ4077φna}ط;"@ְWM,-5%U +]򔴸[EͰc:dͻ`/Z ^.sd+{F- @CBtBRd>f +ġ@|ٟ"ŗ=.wxD_fk\p7."Xr%ל{ M 3:3 XN I#^?)8ХWû//5~0g`+/oŤ?/= VC~3zc$9F=QOԧ IJm"52mDsR @h NVOIS yggUfD^@|ѯonOGMN'r̲ԦM'H /b !K~IQr#~_N 8NWb۳Rqߧ@/j'D 7_]21"Ĭ' 4s]FI);4popRR= gr5٩Cvup#{>p7)NAL8'sӍkW>@ITD lm.i)A@{FwԂ +Va wlz[)6i +YH,3_%H!*6Ka4cV7_rs3}`bf?Z>[Đ^WfҘ]oo$gm99,;"< 3 K9kY[Y{V=#Ξ^kK%WZH`H(5&!╦r>^HE 2_N4Hz)N%tW]f }մ +]B ӞNI''.^qB,8̬jK /% ;mucݛj @u+N ȕm@!@?9ye wyw@t`&󀠥j!^!"ayyº'9β>^wXE"e# 1kl\A 'V7!(A`ȆkohzrW]@;ip}7pi{| ] +oG1Zt!e;";M~F1r0M`)b-&Wk FSYYy#v[ UV~@:,lYl53n(q!la0hi#/dןsL .F,<!QK8!սV^q sS9?yU/0gd[3lu5 ֤ +B& Q|ɛ`;-3"3^JY5{#a"rS|vBq(wh-L K+.5tXZa5Dd Cff1jLR0e0$*15 NA#0t^&\-ɬ[ ^M})i݁8V~(chbr#.BZDZ ௄bc*Ҡ%mt88%ѝN'ESbqdggI +D_UcVo}{"\%ĹW>@Qyrzb@Uγ@H1;":p},S 9 <[gx+݁ջk/r8:E4u`A1saC W'&~|ȅj̝ddFdL8Q>yWfdE4֘:DcqxI"whx]U,|-Q;K| n3Y)CDns+I@c%bg +d_}s;Q2Q[n?._{[MlKf9ޜ^gA~yBij d @M0Ç4p\ jH_})e,MMB?z p/[O4rV&)7au%DzFkE=@Wn&a ͱS*Sa 3WSgoL?\pZIվ\ˬ$ɥLЃ 3)2Mr\d7 Sx)@qR!A\lh&h%=x3{U]'R 1*V `Ox=b= qť'wb\n^!#]`gXZZ53pJT=-8^aM撃06WfX"Lg?++TSr&koP/:Td \$=8I$&aG >ط/駟.,O9|A7<\p9Fg#B~o#!'y{ XR 23slN]p@y:V Jb(J +a/ _* "&n(׉h  /3d q5djEג]ob-`Ê9B2ԙj\0T0'W*L@(?Db!!j t;#E: 1[LϼRf~R Q:j&Ȭ5A D"ҐR:`% SK7X7BY5&_v#^jbH{Nj52. RD@AH.&! D&AqZYD:IqB+Y;Z|\\;,8ʬċofU@ "H:ZuzkdƉH{{f7sL*4 lリ;aqg|g pHf g6-.k ~ G0="ËX@"5;88iuxL۸?e`eGHH!rށwꁧY"5;(&_O@Dq@ĕ7E8 Noi᭛`Ʋ|@/ԚRk<:$W2AY +X@5̉fR@,Rܒ֐-\j=Z=UAJU쒷9NI箽-m]F!k +\0H)hg.qH.Hn+AqZMPD9Qi"5/r%@^V`8Q}-s VoV%f (۠@P#K+|:h w m3SH2[@מk  NvV + kA13sra㟿{~;:޹yn׵{w$5钹 +~-ɐIjFW;v`ە{|4o_/ܟE{fVя_hh@< txL'.@rW5)t dN  +ez'UnY9;jĴ# bvڱg~D6>1)n;pu +f1ӂ܁p,{Dߕ3C9ۇ:9nư h b!*L"jXɇY y@@9wEfp"ZloU"Zg+R{@|O ?O%cPvY `E5㐺 c: 4pbF5_4Dz֬Si5Zgv'i )eK oo"5HěyJeV kUҘCj>^S+)2cr)>[𙞆K0VX*m R+pFV^Ё(.8x0}~"I̥#ˠOJ>R#p*~$" dYHkD"AO +]R4$)8P,Q <JƷrWd_Myl n̬EAqnZ$wJǗM(L)K)O.O*JW'OHg# + +G'$NʟH*+>]ru,g\_Ժ@ԝSz8 TB&UQǘ)0b& {b3yB5S# 1t}Ɖk>C}!F{Pbbԛ 9ݜC Ĭ1"Mܼp b` =FgڲWQ n#8mFF0@6plAXFKT>\LO˾¶N @F HӇLh:bVeI@R̜UVȕ2jgV+֙YȨڲjm`"/.8xQ@i_X*oZil"F Zjbiyfq3 uȍ@:!C}h̕dBm+ϲFCyVH0h5=#x34J?+ >uC 7ecLwg..m  zXeL|DSS1 J±BB+tI0^eL\aL1mN\1UcZSj% +)CZ,i9q9ieص0V+tхL4$ʌ &ЄW,e)<.,[& +ҁyKWtS7ШP-Y/,f~Ld9 hUlV+ *50$4BeڅyڹY))i?(D,_\ I,'+.W&/WKʕ b@KK>T%R͒2DB9ҋH2@* uh~PM@:GIJ siK9S/~0Jp4}`R-d1Iy͋zs91hGY5H :dv&g$ew/ DRlXu A[(Ϻ;`K߰q3O$ŝ(m̯,f/H zvF  ZD( |:.шbK +'z1Gpn߉8lYe{jwH@AsDL;ю@,A؈Oߒx\l+]3P:c7ta RAL~ +DAaIK; +DqYn&f1I-0%si@GxM'^ݎU[aS ѯ@ ڍ#"kj☼O7m8ciehTK->j8Su 486'9FMNɨmcJqfFQ:d 2lf F`p3f +4H >,P uuW@l D'Hh #~^4%"Ka24eLjQ,8%YKXGWETƖjbK%ژbMtjaja*H])VC2ݢrârcLaAv~:*_+PAQ\yD<"]3;M1#?%陲 ³/@W~>m*r^d`A89Ee8˴bB2)(+>‚%jS)룋t 5sUQ9Y2/,LUIL陖qJ}VNgH +*%ˢs% .̕-ȑAȕ-̕y +D>ȷbA|~4*K27S!L$@&HNM[iRG]-.=u˓gݎ6o:Mr=l9& ŰX|[IjWwc]}"R8~1=3+'4wp-vr`6d豶yla=,!҅wYRi. +Z>j#M:3M<3?=qj])jJ/S'iGe-Q9'R͕/-( KUѥ%ϊPU gEBKEd 9襹pUd*2K9'枕&*a V<3?+;+azd:Z0'E0?M&'Y/]X [P ,_2?W/6]9+Qgmm=6t=ذq{AnVP9~#upABkPVv&D ogA+a<5=hi]ڂP-]xlzkDv>VRO\leKb[ +]-M60vk+Ѝ-),s3܄:&877vq:Ɠ7cP4X_/ '/klIh.鍷 $= r^֐C,!jAoj-dk75{hM8F틣;!;ۀ4#ٲ"F2Pp6t -|@Dwf2PЄ>h>l cCPn`ASs:̴Mk%OT,|nť8V]vHѵ״K Jvfb2VɡJ֨jT흸Lm7(Kw@[g"қ :Q[|h̓MRʕ+V$^X")ǔ+cU1eRP9˼Byd"2Oɠ`UA#r呬RFdfK9YiiS[?ͼqΩiWU" V\{ͩ^_<}/ JKtEKdxJhZ 2G0/_YxAta1E +%Qy@xn42|,rY0h(#p1˜4T@% 1+?=kZJӴds~Aiרvވ*qRϧl\<\=@dNvIG^@`N +ov23kݳLꞑę6%_?vjE-GstN|}΃.Wh}skVM+6KWl/()(e)` e[e%E$ee|wEnkv>ŧ;n>% {A p㍛wa.XkuS%w^ Ci.J^C|<k,,m@ mmz64Z(bRNnicȀj,jGai0y:M(`l0524YZuDmQӬA!RՍWհ(eO]brIД:s E;!5=Q. +_f42vk;5Cu]]ɔԞ6|zäy%gݥU7^gj`PKo&J+?'XvbgtdiwDFOT^`~pAhAx$=Ks3,΋HGۨt~DL]xi)#!2O4-MO-LKNOQhZ`Z"4$Tii K(’O㹟sA|'Im +$G?9{8Vڅ +aH`&><]au 1zg&d5fJ>mp^ͭ{5^;9fX6h e4Hf.;Couv6Coq1CǠ8 ˈAhoi%X(Nγq3jcrٲUQJ41- ;X^P/ TEB`kvhMgљ\z[oq07s|4c}#slZ+Uض'q&5LwPL0NزV0Ggka1j`gQi@*@*5F`vmxLLBe&r4gܸY:LGfYI=,5#4&Jm$@1 zJDh5c'oM@ NaZk!&+: +4%Au4o'tBBgtfk$5Bm Tz|8PC*IP@e,j+B= +U:R'5֦9Hk͸hQDZמ+@r &wFJ\PlYO=ncqkUruL.T>\_//@GO"E^*||yT<*W1/Wer&_XtyǾˏ_rBz|[1ҔUՇۿ?JmV'TȣU +̉`F#gPxA*|0ssdw"3#`%ySbsoɝ?*r>dI sliDz)HF S d"0c/u|vbfN랝57HXE_uz1;w܅bǎ~賻hW pQ^}rW %egAhf9Ӯ'{?}=:t>~Bz}]Bg-~'jͦna'?v=6OO(W/wm#pt/lh e]b\tO 9;y_MTPT]mƭN7sy}CD}E0r P 藨5pȤ?)Ow/v.)Zu;׬;F ޣ k8Nk{hmln&)7It6rc +P.  iHB%a9l*õa ެoJ4FN@gF:IN([ڌؙ@%:K0`Ilu. 8ˍ+(r:vJ޶b`@HxKRoR'V6IM96څzr'VZm|i,k & +fl ͨmI6)J:+IֵP; b=~KDžK ^ykK ?,XWpޓ͇y۹E[ +6unhYג]"ֶfmZӜ9}USʑXV6hNBESJEc/+ֶmn\vۉݧvZ]+O lф[ɥw +Vׯ틞5{Z˶4nl[ߜ!su]ƪڌtVQ6aYʀuҲ2hP@Y]rY=KM+?tnmNv{s+j|rgCцܪ5iթR+, ,{ariMrIS,kX`[Z>.6&ڷ}IJQZ壜5J6>״w1hF~ߟ W<1|Bڞ|l%1F}0.5YzM^c4y &02.9=n1[{MD^"\.`Hmn זUl_!P ځݤP Eo%5FG6:t +&Nz4$skT`7޸s84VgSRv0b߲s~ȓa\)lA7ZCsh;,ZxA5S v^LGc$MN%tJC5FG`05:l6,6>TDpx%Tp]K+`WTZ4fC|#I)v{ H +8vKuVgo~w" xw_{?OSߟᬔYeϋ)XX2c^ԹyS"r?fe!fz0#N`D gO@L` LǬOΌʉ.[[S^ + +3ߍ~瓤w?MpzꌹsΌʟ35"kʜOfe|<3|8ԴOYS?P~HT s?;=2{gs FLM>'gΚ2;YLb[*T }J|2)Ȓ>|o +ޔw%˧Nxf9seG.,x4#8rWNwU`6 m"7 3v-7}iL𗎎ohZSc&ap4yrOCG߽A!'lۿs[: <1ҹ:arր1`()%RX(zT J_ReLVo4صfJmryp``Ȅ /eTܸت +GN 8gPpL9{' +R r +C2[_ <PZ*JM1ͩ'J%dM3][Yq&\ЬdJVUZRKkȬb@"`E ̢aDbX2"&,Yd2Tjp:S-RK߯#l[^y:8hرp#QcF O+=aRE"5EbQ(Hh +-,Y bRL,$6.WJ-Z%^_IZscҾ?S}>q*WڔJTeXjJБ"#_h ==  6-` +bJ,qHT[X$֮su_o[Oz. `7Nca&7}0a~!~a~cCE!c # p0 @C߈ FA8.+80 y+}f@ݳ  n +  Ȋի׬۰a^ڟytM[7zavo mXGܼ)nܺn[6/5.~uWMKʂZvؕoN9knެu[[7oxpaӃ7{ 7^ [57~xt?\㥚=z!i骠x_N+ 7juMiѮ߸ ~Pc>OOwo7nhyxtF ч))kC'-Xw_~uS/^d͵ ^pE޹|Ε˷roOs+WF*ⷫWo_zkW_zKW^r{MAacL;7a_>rٳ\~UdoK p"2%hswt\|%FoຮW{Jk^W|ٳ^fpAaacg͊ٺԡ׎v,ڵG=˷凋^~˅` xgW}WZsJ˕Wܿ|÷w=;o ˌ@I Ɇ ;$7Bƾ>cV7BǼ:5yAՐ1а7j6Ǽ> +nؿ + ͐1^;cby=t8^ c¸WCǽ608 t׸G`gWƽʠa L9WB^! g 5l Jhkc`.d cOksZOk?#A?~e +e(`JaԸyJB rPOR0,2<& ,dZc&8; p1A`dPwTv#, }F"=_Ag +w|o`'u|A01?N1~=#C̰m_`oq`0B8"3~@!r?p̃!39e{N7Qޟ{/ދ<~"0s>ޜ9>l#|~zyC7"uݹG>8Qz?b^ 9!{ N 36($0(((<  3|7_1/t#21z&4< ;LJ +f 5L1cLJ}ƄGÍd'd$ıQAF <>4 a`!!C&;1,<}7BCB_DX"y WB$VXLLp冸Jlr<_RnJ-=kfq2R]a]n/ŗZ:e3,C2h\?@K.6^n\]jQsRO9o~l\\lܢE qhq"oaq̢E[4{qoѬ1Q,NK1hX;@8(fbخ cˆDo 3f,W`R\L⧉ظgNL좘ء`"k$SY<ȘYΚ7#Ǿ{Ӧϟ5qŋccEGD# A 1{y1ECAƼ@\pQTTg,>7z|o0L}_~{ڴ$DK^06zal`獎S_;@c)4I+uo<ӿʯ\+N8Wp¹+ړaUkگ],kNr9X=NW} +Wˎ%G_x*V}Y{ʋ1 t_Ms?2[J_zԳ^jQ +#G=+yV1'PמK~(g83k6T۸uۮo6wt5w47-CJ]/@g'bWGjQʩo޹zF 9((0l23O[w46v4v5v44{6hG0mϧŴ775u4tݾ|:wﻳ22=!!竓^0ilnkhjmDAhB7 Mʧa Zؚgx=뷻͗<̝SogeU(_}5V7667 - ggi94447454Զ=nK_N|u+7w%1,L<|ܹ~z>ƚVhہ(6 P7e6=:5 ujn̏w<۱ 74',l\T⃇Μ9{凿𰾡>z0Kk]=8ghmm}uu uM5խ6t7v%;@F#^ {;ifjucۆsO~WK&wڀt.{n{?.,^.n` wQ,;]Iy; g;E*{E/ /4NZmj7<[If [Fn'w`9 ۆ͚ClrX663Z7 +w7hw͗<[[M썖 h l6y[hʀ@9X0 {ۙ#ޜޔΘްt&m1o;}u_9ȗߜ:-)r< !Cp"l^ ]%aw^ޫ1E +kzT'+Xo{cMv +&nz Gp3['餜Ppaёf]0mP8=GmeNiI_ͭvShH3}h9 i;pvi38FN ^rx.h'N9pBUGdjhQ޹'(+FܸYQHIfsb #(H_ael@ pHq|6 c$Z?(\Im^劝ƍtiޕ[UmM$mQf0E$ XBPXH3P!74a 8&9}M/k#ǎxqƥKZZ|ی8|-Q{j7vq0[܌J</Xm&͈zi Avp]WQ g +DNu0\ߺooS+KV* ͋̋-YaK*J"-Y>aaZTPf[cAL!D] bKt*(>w=6j+W4aS ^,,}f1Z7~ $aDA0a"1!. |>Gmɓ?V;~r츿%$ftZFb +Lq`e!hn`|wmq5"azdӏ++4/$+T:ovZ4>[S'hj'q"3IZ&Ý>i6q6q&q)QT&%eT'TTTK*T˕)KJ4)eƌX*cZcVlP; +"زTTM^K^M$V5CI`X P倂R\\F)-R+Q/*V)ce+'kLi}wYH0p/. ZP&2v(8UABP:;Bog*ťy:7M9t@YcH&;8<:4Q}: sMN t(t^\i\P0[da80oQ;]W{0,Ox"Ǫ5{^*[Cha'fbD5&R\*=2O hZl2MVd v4v)a(K5 PyQQaؘvکлfs^\Sƽ'N+,kOX032M$*R$ĀeB$A( rb("5S@:f +shqMn /e=kY@xKerB砰`j;\XE66D 첰1_KI|J JZ+6TYr.k?Iəw6jL4F?[=`!|ejTi+l"M'IH>``.K29(cXx()`CP_L2.98/|?w +A `Zqԍ`}JʛH f&?*9`[uon{: :pk kkpx5u9se kKo5=?x+Sﲯғ Xe\mIle-؃nj b-,6adl`Xo[֙L@:Bn(iU5zn%!]iH]iN]mjS7Gy[pX}Kp;`XgLB@!2eT!S5T>u>e!yq(!RrvThPuR.ҔRiLbܥm7\r 7sJ5npI.o@?C(,\SGK 0PV/o޾K$'OOe4cC"Q3ൊ 0hiz͗o^NfGȘ RGۺBDq$G8 +vK +pRB4o!"5.T瀧@{$VGLvÆc`b/- )B5~µ{懲SPщ٧%J`b0|Fl`y# 8 :# +$u@V&sƀ%»@c`}BБQ> Y-mfʎ9Hxb +xPP](W';x rȜ=,p*ۺm݆nYW^(WdApiF ޔL^_t+W.2c%{'{?63V}_y +R*k+}½{>0vQyܝd"{;4fNjJlJbJڌm#e/Xko jĚݎ U欃dWU<젫s98NDvvrtty;yYm-g y[m[al&s6,З tе u䍣-5MMeGk?W/Ybقn%@>*o&9}M F,` BΘVeH'%%Uy\xgcL\wK yЬ˦@X2܄ D؎E7>3;j-C#zdWl3b:db#(GAv(S )azři6w>/C+Qx=ʎю5s^j6(J#O!! ĕ«# DW '83 dNO[[Qώȭ97}dG~x]YU]zSzS|UÁ؋" +ϡ@3~N! v|m'r@&X67792gWޜ4ո w ktS7`Y۱3v]uQ~CD~,** 8A2wvy;|D x*"o;" 8S1YPF$ۋ(F詝øw%%e]]<=kpɵ0y!r\G7HND#'Q] ɘ@zp_R<_~m,oq5 7~BnAAK'h3hH gaQ.WLvvԁI=` JrEY6Fkil-\sԪ2ٌC@ džjiʄÔ* EwgmhL%u*TsH&0_*p+A,.sSeX0"l +-[w;W|_nZ~Ⱦmy{G=;זTY +%]%a9Ј}Ctd }N!wEg3267b;mNZsVʛSǿ;5=u݅\em[{?{.׆S,;,g=*dg1H E{ ёW0?y vX[s777ja0@lfm즪y?]?ړKr?B2}mr@oA2H#r6[l2go4eӧӦTiRVS*3gΝFV )^omOI]9pv߷i5Z*˷(7K ܂G3ymݠ8Z ɋ `&sm6?&E2TI0E`&A0`A/E +{Ge˚O7N1)MuZ(0dߺuĉ\Pv$LOԴTETLEH CB ؘlB ibB{Gb^ 83!24j;ŀsXAqN;zbC(ĸ%Ō@P("(Xef p@07`3P2t5 +D76S:-p_Ni1v 'ǂ@s,DijV Xu Lsͥui8;Alg-ؒ(iwH(&$"gs@"`@N$Y$[ql9ؒIhtBX%{ϼ[U] 9߃fEO}ý>3 ^Y/,׋Ơ6O[DI yȚ%H+b.o0b{9cq&3|/}cމY6OX;7o,_u v.m*<dk/n~ˎw/SҦj0&APA@!UTLe_PU=DPmVggQ9V{~ety){ؓߓk\C}>tͭ旚 q76d=QY/d1Vl{hcA\y'@:(33&[aot(Wr' ]8gwo#RLa"`J5vt%lU SyQ~]rQtZtZx|=^y q,S[ekeۙ.sz>l&l.d1|9]vʒQaȨX̔W_4m3}]':b^ڍ9St+A"x+yS>PHV9偈%!`VI}ho(lvlB)@/./#ȹuML3*\)/F-Y'Tq)Hbzrr:[nfl Ī69 : +Lt_k0Bs rO:0qz "oMoq@v"\_1Iax+/?=pw Ƴ!ŸDb 432ÌN=`4D@/3):<- ĩ|Yi4WbMonz?{jM-{|bpB=@cC:D5QMDu> F1Bw2vS*;(hr7{jdϏ^ijx6]*kgy`ͅH=<[~Eͥ-%)ma$҅I v6 9DgXRt³dl6䜻윣5Ζ߸cD [,ltI꾠v0\wiҖrV e>+*CB_ ,IZ0B%-ʳӮf{IZ|ܒY?VcH D4lV5ؾKd,Y-Y).NO/d돖/*ŜeiZYu @$ЀE~,eS2rҦ9ת&CLiIc`,J"vVհӫJp~-lxSC* {d0cfA"8+(Wwu\㚭 KYPځ9fv@\"a$S"YZSk2A͂/+aeߔXGF  Xo@,ɳqiji~D { g#>Gua +@,AZBQN/bbOaPifx:0<Ny9 "MOo?߂i '+jd2jP`bFeMpA}K/TT+[՗^؂@ch?>@Խ3l=UD3Nf78_ 7Oh_Z7v?ϔlåFƑv* ?QEI(#O6FQR +WX y Vwd].oq8ZkiͫUr-~Y#b%0U(@`7ʻ$b|D(I>I⌫Qv^l Ut+AXo7òC҅UUUsG%G&WNeVK+$kOo1 Cl^ >faM6DtXa ^ P+!2x , :,P_ˬ#:i@V B pl'bH^j!:X@0V&,tA!D:`$bsfY5]X! %00^~Z[7 +I 0; (uWDjiG :Rt`wajH9bbo1B;X2ŅP\"}S@x H~P#JTox;@ U͹=ؤ&,1 9C[I; X7ԃM˛olռq +F5`qyKB 1-hDX{> {YUoU#z^w1Pt -훻@(zhn5zV]TkoXJ\d*„>X#;l\]˯;v-A \MLFڛu2Udr)).ɻbA}(0wbDhK|"98hW LĴ3s@-ҦhִI'cפ ʗ3+$KtقIJ{_n獱:"_g p%#-}X aW: ;>MAT "Ԉ2bkm! !&ҁܠM]F%.^__zmYIkp1!/礿Y`! HZ 6wIW;o$nY](MJ&3+掔-/T,W.u҆ e@Q@VF#"D0;M!}fG㹃X#G7Ѱaj"G 8 c_z|< h"M԰7E>PpYa-+pmbhiz8 @ADX'nV:T +xWbftƟDl@T:@02$Z~ }"qF 9OٯRb2:̜>[E܁o=,qI:̐`5 :G 4ܞޙ MzƦdįSx E7aݮ+ p` [=M (:x ͅx4@֠hZNQU=>eO*y]G +X4j4l OngCnCx{&* @"5# +~% ^kM@K֗."՗ qHp!Ut8U$jB/{.1缅 +u{~H2=G+"]aEbSGHٻ!t e-%$v60o FpxISv{]G(9Ϋ2Z#eWJ Z;"oʋ;hHl}u0v? IꬣYz +q4Ce}%;>c[bh12#}ˠv1<+ا7 ڵl9$%GW/(|az%1\L-<@}x ho:>j%S[2Di 4}]UBΐGZ €"2L-1/ VںPt+Ont\X}a90,t1L^G}c38w8 6%@D 6;踶+BG"sLH- ~Gڤ}6Dמwd$TH +˯.{g{w^/Yl.Y8,=,>Z y0# BA5jś#ơY',#_o:*ǤU󙕺 +]d81-: _#KIrmc k}%U Dl; b" "" `\du+m`E@F BMpEtFwz bzXXB5&I@PpЀ)FF}̊1oAD@>K'GNbn%~foA>}ZB,qB<4#&Gݑߔ!*"aFax8VoNxÄ=$@ @|zťuDAí1/ps{{sg=2?EVz +׉ D [@@GּS^EwLܘ?.n/m% +={Z:D:\D&ZH"hk0Avku= s5X)ͯ)ͪ^gI'O%s|*b +dٍ$CX mz$B7f]x UOM_{ϦH"H##rHj8 5ܲtYq%{P +I(u2R+U4"N <ĉY{PP `J.܊vHrqTV]t&ߘ,s aZ]E*]1 :TH+y tk܁d SKCdb)Lj8" BD +Wߎ0@$m&m"nRn5 +D@p[C!,Xt*c,ߝ䀘 ,BNas"_ǿ@ `%1Z#Dk0 >4R$j+/w&ixs\"6s}):<,+aUah+q[w)y +D@u @0xr`j)0wZ BODM{s{ @0VWĬOgiix @h#ut5-٧b7c Dl(/l( / - Q7)"% 4 kCB!@u^%sB@8Jj>~/+񙼋9@엚@Hz"Rgr{,݋PbNAt+7榁:uԦ?xU}~ $]^y✳vxHMfO +U~A =!"ꮨ3*4DpRG@Pt0N6/۫:]6G9{i[ Kf`"@5M&AVc<!&}qD +Dxb14@,ud+D b8[(,CLVnY;J^b ۾QȌ`^[ၨ/\ލ +d YttX  ߕX@&!8cf0Lt sȔwR@Ib + : iK:}ku`xXbQx 1 4ܞƅ @,Q)#Y̋phvC7; >;Nk<a῔սAxMc-A  ^d2\uZ}K\ @uOx ]wQ/1zq v=PxIW^S bCӿ{pA1> +8/M +mqQ :K㗃/4/!~X+Z=l8tPeU8Kk~'{\V*ıF=!%^zS (Qw&P +Rb +bUXiĀo4[qUdҘ^2Xb:*70f:+NְHm@2 w =$oYyUW@Pս^u[݃q+v NrM2R샠@^slTa{2[Ėf~lIOaLz;F"ś<{DZxMo2 XwP<<;ls+ !qiţHƼ~cn5߭p4āX3+poI_mHR\= g\K&9J;-68uC4rG&Cs.8:ˎL3”h MN`- %CÆ켔?RbZ @l!nP6>G-3A:D%{BO@YVGO\C> xB@# Ӂ >*lbf +{蚕nuwd~=~!aA`nv #^>7x0lzyoc"oF=Ó>oYL7Q6>6La7\aP0XOfqs4T4ָ Aqvs.,|b;?OHV?:;+vc &:|Հo < +sIq [dg4_bpAc"B WBC0/C/u4Z3Tת,6uKx{מgsʻ@%mQe&mOWn[\Ҁa,ڧ"^`Hj/+&8長xNrJ,%J! @O<XW)ATvB.Fͪ{ y4}.u (6GGA5xrb` 4$`qD!Bѥ%`@] c3&, @LKwz#s7"ȡFr\6J:@lCJp#:G*˦378<1Kl$@#zx㦐+hЉYyIG' Ffx &!pƱ09}qx𰾹y6L y0a7,%'/#>Ua|686$:` ϐ ^86<ŗsϦ7euE=JnY7@CX~+Ba{?LJ!:x0D5Iwv?rn6 &cZH 0Ram,Ͱƒbn>oo 9!Y +,yu ˱_:'?U8܌MꮘNrFp@Рe%M8*pz0Z{!Rw1 :4\6B\ 7>P+˘P'i5+M*ͯ)>\Og?wM&5, (|o:5IAglEdkMO@7:k,GeeWL"QDda`芢d4;@At +!XMe},VАF#iur_W/Z_n| :lh-e 7Zu W_JhHM p߁,m$G"e/s4б%ZYJ*=z<'Lo@BGāN KWf wkp";ĝ'5$ގ!&o&@u #_EKoӀ5V|Iܙ<0 +$Toȳq:y k½%%e<>CH-qaJ!>>>7-^Q:Apcq{579n&j<bRxH"Z7@nYW o7IM)z4 +' СR0DÕH둦P2_5W~ƓȨȬ{ç9'@(c]-!kţz"4x(nqtB"êPw~ܬyO8jCU}%k/W}kD9M0"WnZCYGPNjz!3#_AUtm3F[vBly_+qch@O&5bH,Z"TySObYCq HMĮGo`@.4Сָ.q0ɭ +lLS5 +K MāC:UBJ죭եd {?Łn_b I:$V]T4+KTRKzƕv"D &:

NJL6<$!'ggי56õWHjD:E[ḵӇD bRD2,^Ezl`[ h@1@^ B.O8 zga ~-Q3BQވ[@DСbtix=F #oh3;}g=EMzJyd]n+Tw qqQ8%!IWHt9Bh틨K DCP`bRRr2KťA_ iOv䜻Ζ1VVR2@j{ys@l UYxf +@2z6`*XUwPCRl57C>wj&OiWQ=v=Ce<$]=Prkgݸ;Fѓ6p !Fh*K@VԯDdai@@,`V SLOC8㐪C0Qxj0/c!{R D#Q"e7!XS>I.Z gd4aTxtZtH@#w\ճ@\>HdY6>1$ &$MSi>:q+~G3 m2ǧw҉i )\o:zm_Vr@nxn s@"@)؃ @h;|x[ ~,5=D"z'-tUmdNz`1ߢD Ѯ.nn ok%mp`#&69tOp ?D2"/lnw&ܷa恘[e /H?@CQb̯2dx3tF|04o29͎P^:xno ^D\bv?hG"r}8\r +96@(;B ƷbaU=B'=Oঘ&',ex5B .@?_PPݥPPÕ&?xhx=x +S9/5Py[lq',jj"Iz'~LUY,+UA UAH"d8Dw:pa/8[mR KW_׿Pv ^.קkm'me`DKYb]:e%,$2pthsᮇf{ [A-֒6U_-_~`qf̓;6 \,c|0oИ3rGb`n +h\ C2[ =CoXFX5[#"j=Fc^Fox\:ě›xL4}# , asmmߵv /&_.ۇE7 oC>KV`Ktܦ@Lx8  b]]v}ǿ @-8j@ 2acՈ̂y&9 l ߦ1&]\@iR;CWO!@|0/ ~9(gsb DFw[b?̽n<_p[sUmA<ء' vp?/KA6"1S3k= ledoZ3C +˫R2㋅ƗU,?!{؏sJ;DNKLg0d7݀*EmDl%n3LHغKDzЯj΃nyS@"S&$%bn 3&%nJo=|r|bkCUbkzKlɝCI:L[Mm Q @RC_  |w7'էba' +Ut{>Ju"Hͅp 6yŖzDPaq+vOY5JNu A*㾒 {LgyĿr8q운)u3i;׌D44}!NՃTz0>UyXrKڜg6x3/j6 yʰ\hBc+=@HZXii.t9{8P0}PunDǯXJ"5%"N.Y犏Lc 5`0C!1 uo{?'BX(BYi; H:@ 1SN-b#JDXi.1{rwAqUwx(Wz]zSr_PY_U^.?b)W3 pDPM1e=u RSt6l `` P^YGºF ,`+e/.?\8V;|$¯!;5=^MW=z=^&>y*U#z㖼z3qܚWo=+Yz)gswCoH̓AQ!t(av-@oWbJvD4Az';v};L yh0iYxmt1wu`x'y  ;됪v rF@xv L}VS@mq^tއ c @x8 ~H{Idم@xnC.2d' +zwO<5kdG?=mc\0k;6]D Y&l.Y2 -ցnK@8 ダ>6zu @==$ lji_I@dGE # +}Y8# :~@&.r35&3 kUifXHwCķ Kk=?{t~Y`aq֐C@xބtk/Fbsg & 5@A|F ~̊-dorB@wڲ{b/G L=@ly{+&lOO]oµDFsORҷGݷFa^C \x押D倘\ ~!I'?OnNxvƵaջΫwx F8 1AP 9 >1 h@ ${C ,Bǯ%tMo@Pt26?P~]rYd/h;yqFYެ5r"i<]꾰DIt".i%2Qr]ZU(Py!|4'n/*κ/W {~zn"^{Q2k+/--X|3+ JGOc @MyOSux՝U[颡^-kӼZ\g=e.8՘ j4sef#f/>xZLB0āf@da{H߁]|D@3K5:y3-m 9D^3QU@XpuT C>=A_ +Gۄ °_Nb'/ @G &Yy v?tυ@[ +|,$&8&!7@LxDí8i(~Hڷ  VL841+z3ųjVQkK@`!q 'MATL@!1-Q1 )7%YHӲn1y}u6zm;w l + ꞷ}t@tR 5L5q{e T=jxpwX :ǭRbUF@;cJ ~Y_<-;.>6-ޖ^*=-m63U՗TzҔ-y{OsscWe|(]e_e̬U/VS BHЁ`Rv?J OEEGAڽUs8RUrQSkΩ1ZQ`YA=Cn9Pt񥂅ry@|m_rj2s L" Mth[XEGQuNeC9dmNiS:KgYIeW4LZƘS @8@ZqKs{K v.1}8 fMW\‚!pk3 }dFfV9 ʷA`zz9AN9'KQ҃DK2<)GOii\3B{/ VHpBs\@\XNyC\ ə~JشoN@Lzl yI&@C?dnL~!b7:B7sq#ت^,dH wW?zz<=F79<} ]T" +fNo %w,O$@3t"x i:.^bD¸yy`15z{i|yR|Hbc#A*q7Ѳvw~G}rbba^&l?wTG59$67Jj|"uݤۈİ@\$@8B09*;11D n:ҾͿ::L6I+xÚ/= D[u?Nuɕ=^EVfY_<-#'ymj!ryD3 2TW+MV^)ZڛrɜYw]i_TsٟK;SvҐ]m8wvcVEϣsJ@+3?Xr}!'7k9%'!S֚aB&76J2ek/| ;N1U/[@ |- > +2 'F۱&mBZ<7 y[vK[svYDiG)G x<{~=nv 42T5zBsXW-?7g<1w> 0D+ߌ̮ERSk&@ 䟮 +{D#$ Bs ]p"F?%{xA ֊%<7+'Lir[ %c q퀈_%I,d;@tu=Q¢1yX<J +ʁԑ4$Ip + +oCoQn~ub/{wT*xXfO81K7r@\ W ;Șa/qx>=$=wu7.ex7suWpӹ=?A\fU;-vx R 2rS_7n?wZ{H=[qS~S.>*:oԭgVm&> +Dұr˅/_*472Sq dv Z+19Ȏ+kyONѡq +Ao$dwC93βfp{"dZɖWg21;9#d~ow"C?PW?5Bڊ!&WgU<Y{Y[ikEV`- f򏟯!xn !zuK̺3Nq@2;/K 5R7;}0>`aq3H̎!q*,~5_ ޻жPkHqXnέKZYeWHMwd>inI; Í߷WYWiwI褳 hS kzV%KkԘk @+K%/,0zVX+ƐЅ28TqpBTM3f{I:xڔ2B+ }^Wxܕ!/][ /<~ C ߩmZX0p@L%^):+1t_ na`~b@޽[ @@L/"bvaXn r4 +@8<@.qEStb10҄ݤ!۔Mjws@M›o u/HJFR3Ab)@@ w>]U$x #DދyA@(CM^k$m/moT6.Y:a~^vY,>鄔hp79j[f"K35UB/ JMxoY @3TWUU5]e")>a(9 /6\OʚeeIwON|T3Ut%z{iYѝ!Rhϟ ;VĤ@rT-kU,GI;@Z/lǀ h7ZJ$,KaΒ_cɫ'OeJWȍe#2j<$C*qzҜғ N5L3Y+w>#F¢h?s>]={~v{ @CҐ; `]wv1lX'@D #-ĹU5Z6Et+S 8r1z ,$`b&eS[4@LSlvZ L-$wij8^"3D`[&bF @Y<smw & R(ua5J&])Mʻ" }!"3u!5*nQ6~…%&rl|dž]ܒ3>uD%zAR g$bAЁ҇;wu\C Dp {m!kKky:ܛnFQXW_z]v ~4좰4 a/9(w58zGNX `2 -Kkj .d+'W* {_ʟ,1@|Oe>YU+KMJ'\MN4j$ 4`.jP8jrMа4dkKҜLR 3ẘ{t~l³y;.T;$~/;1gy|uzsaI:s~-`јǥd*GFa)[ rϜz܏3୷?̼!H8DŹRHL2?]5zr7c3Őa=e҃@mh$m ag ٽ;55sk$Z@,E wl[$ Pjg03>:6e΂mó,@L@D\Kq S 4:H+a\ #5IHmF7L.܃vE`( v}oc:/ cYЌ7Q7n:7E%Qeg ;=>$ hlE@| +-I x>禤3 .sꬅMM[xN@?o+h7 :;D؁tJqTiИ$`J+=b+1q@d~Zy#$%jNC`oyyd6F^d.i?.a=[YC+,GuX~Z{y⌿t}Q{>w晬gvޤ|rł*#NCɭ3֚rj9k9ZjC^ DjSDiR2rDqHb$axRX +tU8c!_  ;lR} $ D83ʍYY^K8ycW׿ēgζ/Z=o `jy_߃8̠|;C|I.`@@|A7g#fs@0 'URj8 h +}{iii?B@(f6 oR^3<;ct #S·xH ^X؂1r.\$/@<x^0,v_:@ Zw)qڮG֣#@ߗyЌkh+z<tp?R :17:ztug?g1uz; RhxOdy/ ~!1\|H]#Ɠ 8}އњ߰w +[o˩т# a1]e;<6*l^(1wE e?'D9,Zqoʥ !K8rj,4r!j!k/h!YjZP2+AFV 95ֲSӾs @īs/MZt;c5ȩ6h 4k$ = Ƙ2f)1pHu8X4CV¿FVS )?>Ï HY)Yb#ŰXI#܌otZD 8}mī9[KV1I8@ x >ZJFR}vQ fuL8DD¬WB!%}ܜ=\s(eF1]r$_Z<:`y)1Z0wG}R>E0D&#:0q{B8UfNlS#`)&L!n#[z|xdG9'QwyJ   Їt O@ޒv=CWGZ;  d&SjjlT : i=DFUԚ \֠-Xrʛr ` DeW=$1\rH#F5uxԮfnn9QP 4k`AIeIW I"#2VoƼ:{@Yу=qr備+ +Cny1"1Al!KiD02Qh8*];"YC d$5Z@*qH&@VP<.>$o_w\ < _ҊɟOΔզQro7^&K 9yV'ddǟk@ ~ +I{t⒙ mĶWxgDHa.}%˲\y_ ̬߭0(-1ŁՁ`$EW8 dr? 2 4p@TTFt6DN3#:?d !'@ܔ ++i%@C3$ nJ#u$*PP:D;f)vLg逨I0 +]G2?; 3P|zt@hC6O&Ax@ ,ncmj>ԈҵDᑨι9?x1gZDiiE?ިLmtR1 +%֨ M.N8 ^݂葎.MN2ZqⅢ%4" 6!=QtVΒv<,D:F'tl9`rI8(< E\ŇE0bRv]n=H۾=jr"# +FܜD@Ԡ3ڦm(=l/MgxFX +A$E^+Lܲpl£l[A[Y0~̷ycUnqj|et}j{Ȃ&t=(ڏJ ;S +wAkXˈq04; ^˔ۘDŽcxZ x޲b4D _$]ZA[\ZR#.TKtUK +[jD[j9v~`c [Iv͘lTUfDdKϽ{2>U@.h}Q"/pgHxcH@}/PB'D`ŨMş1^@$JĬYu;ѩT@DaSO Q8S~3эr|HDee)rBt@%^DtA~4 CL5t q_OtO,)ND# 0Enp%(3 :5^:n2~H@̩kqCA\~$ j?}μr;:yńo>8k  +De[DahS`ŇGuփŇ1u숫 c#7`-ޟ8Ԃº`"`~'蠳?v]0qa$}ĒRb['FTjzcpZ t(`Ȥ .`)e-e+-[XY7>`-.e[@ɡ^ƴrjIټ4& ( cY>UTX'}Z 6W6WK'&\-Z*Rl|f«Jq~< zı7"}'H@3 e /..dx@@#Yt` +re> j " x|y: D@pRGkOɜ16@fty#0rս:;P:4: ohAc;SLYqF$ėm$DgČg~[h ogεW4C?AGHX`PAm}}4tsnAA +{!)Pd-:re?#\E{YǶ־raIbQ|~zabKx b˂Mw]hW)ו6i1PֽTBW]n|emlPʋ"Y|+>Ԁ5X;~ճϾie}yevqt|->rt]|yh6uT0u*ͰAٱ.eS~@0M M;,wB*=)w[6lD l@(3LPo@(m/(Q9/۽.\>{.Z1!uCZZņkBib( *EJEQVZzxJ% +,=lK(LQ؛M6 +/yrz:!O=hDʈl<8@zPaixT秧զ+v+QK:}?㠰mtS9ᯏA *jl!ނt!  K]ZX؏p:"rdž\kYI,@digv2Jg;ʐCa"'y%4HG_J4A(!:n)!tE*2لO8tDG +ezx1llF +is55GnkkL@~F@B@T,(lܶkEe|vew +8q*Pq_u&PlhöquUU&zqUi6âbقRKe7~ۗϘ1k 는 m.e;xu 5:Zӆh\_c|jUZa=jMкX7Y_520ЯХu+˵+iW*nRW8a@//*XX"m5@6֛^KjvmfMЬԮҭүԭԮHk kk jk<++4+˷)m2Rh)J^*)_Ä|O5IP1!hԱ>/5M U M*Y~8fB|\%*oT*+j<B [@$q"\7ə6c)U+}͗"h>҅R3ǟ~DKnH!z"e{"e~b (AG0"Z|}79ss@c Խ~=چ:%guJ<9xBB1ArT,>N"Ly7_3}֜9;vD +4-ƕ{ Wl>2.n}E!v٩-d̃p٦~EXh|ɜyfW2y" *dTPw[b lA 8 =h<ॡ>x +%X4ib$xILezzD@f*fs#aۇJʶјlW0 Ej/[ATß1/Ȅq`y39^(MIvMO,0ۏ hHx!ilH2PЂy4]y7&fNKݯn')`V@>ے[Im?}{^>ԇ뫌k@~]~Æ v7 kxmXbYUe]YeY^a^Vn\ͰL?JnqvIjIlQ)}QW*,&9f/^ɝ;W6w[+vזWkWUjh_ӽZVlJU@u_]bnyn6r+л K閔j`HXrQd-y^r1}w."bT 4kG:#JQ,Ӭ(%Ѯ*b"咭[ e +e $ 6mdJKJ>kg]n\OJ=j=},_2KkyUU͕ +J*jkUuCn)0E^6Q;B[k͙ow +;4dquQ:!Vńʐ@|2K}蚜?~}~5C|/SfΙdI@/ YД6zԚ~Un>sE*wx"beT6dbSR %*(g.FaxXQx΢T^j~sU1 +9 +?;9srOhKʴ~>P7ʒYRt9Se4"wG u+i(^ގp'- t( ]z CCĊŕ&bX0|99OʛSYʰ0uBggsGuv7jV!88$v h|D%)uHDB Nbf,BN8-牧fmoP?,<e((ҸG$8Ab9vtÑALщqG̃.sҘ68d!K7k>E'W_slE!oQCLs%]?^lޫ{+JܦZYZS^[YWXW_W[[[ZR +iG ^rmeeڥe%jʅ%%~XPsq=U{wrsyy7˾:;W5pWT)oR֢֨XSY]^UZYZYZQZ]\lP--ʌee*ûVrIbq,%iEy—X.sw/4.gN_ne,-\(UL\BB`dv%LYMr +Jˋ Ee2xKltɒBbP  ob;/7jĝ]?wSz(r1!7DdmH A*|$w낺ںC1*TVa<+?*ۧ8&a܀-rq8Evɇ7~# +޷LbU@NS~‡;@}NȣC`o ], p1.YCg,~+81w2OC|z<7g}n#\v.&UE*ԟ6#C-{C1Fa W3NOq!91yA6?x|R<PH_(~6I<`a<̖Y +/Sː]="7 ]4!ѥY Eq4Nc%P Lu䢰T2>xPcd̲QFMNfS:FlHۢX G/\mcǧ.ϵ]/3.+V~{Yl7l!_JdelMbmb]j NWWFz/ԁP1nWkSVglS奲Ţ꺏5Fw͙-*(еVUJdYdUtvTuUWz]ʶjfj]C]-X5ۤ$KūJ05`M,(/QuZ]Duﮦ[ҲhW ++DkkJ$kKJenC`d] ),ȲL4C&XV_Z_Z[R%%E\x+oap~m^7v//TM|*ĩ3b)2FTV +]X ɵL$H!N+@ ܗ-5=1'Rb"K,KA&h'6;Ls/OZ7vԦRk2 ! U?jTaE0O I%>E/\Tc #1'~3D2?6ڀ\H+VȵG *˗H;xb/OK||T~PRIP)Gc;5-♆B7p߉< J& Tj@|S2/u$qD.i6<_W2EX\g$ ſ;yqzӳg=[S+yA/QjPU6'q4s(m&peqX|#KF%ORfW "snL>3o3u\|SDNŕr\x'?%J,]6w2ya,T#xN4~./$DtF7~w +[6њ +! dԯ_([R@ݸWHzqC˲j /*.*ց%%%ƥ%Ĵظ؀Ϡ]T!8)G'8?b(T/T+PXSt^xC7N$?{os~NΌg/XgO<hv}+8lX]V[ jlU*.*n:Rp.rj)lQ,(//ϗaln>"}%_|7 ^‡Ӷ|NT8!paQMU Ջ +R`|fՂ|%|BY鯞$8|+S^42f˛_o^>ovua'>I}K\C W(X ø#%%މ}=<1fvВ=y` +[}q}栓}=B&},aW c?N$}\7qaܣ +csE8`:*> 9=Cp{<? +ވ2;s=9gγb Tp/aC0t7DhZl Q`uEa`vFF 01lqF91'ww퉹ЗB!|x2w:jAT37a3:?Ή[` +>1J0#jDzD fG[۰ÕtzvoBb)-ѿŒܧg塺9o顣_+4oeX[k^]mZUe\UiDCtC%´bqv_Y1ʊ[tKxIXZMۍ+PH>i|tiKњW@!שׂ0j/'|rPVJߵ|nY9CRmݲmZ:AHO\Z(b"tI$^.1-)&XE?:;a{Ǔ?헯zffi1PȲ-LYbղG,+V.+R,-#[Q?$,"YUXTjЗwNMXHh>\tʵ2<6< C 9L YCP06B)C)C83ć‰H~dAda$)4f֖;w?mZ3f .T@d(EHr( 8,p W 49Jt -2>-]΁@2>8NfI&ݑ|3ٳKX>"&@5u;x]JޑԽ%=&9&>*>T!|_qW~m?ll?`x@퇄;;)Ϛ䟜r\7/,ɝ WmvSŝ- }\w7>~WW}W0l?8{v>vNnnn)++ۋ0{.{XE{X%{ G|SOO&{k0}~Kpwì9ʭ΁d`A}ҽ=cbt\NZZrhd7u׻ԣ_^ެx .7d`$ yCЂv\$Ibˇ%Xta"Ȕ -g>., +LJbPr0>X]~δܹf׻B ꨘ/y|D ѢE˷;ٝt 9q]H$Dg'Av6Peδf^vKh|"zq71O;]P(U fPQ| /+Pj vkӟx<&Wָj4*^b_/`R_ YXks t쮀4:2]Ɖ7|5=Y~}v]pћ6{6Xfsl~o0zNGx(GjG MQ"#hvjBfYsJJ_c&ĩ7BJU>:Ojtֺ =Pqh<4QZG^Xw>d4=6dT +=|N~hA*/-5Wi$+DL(Oo>{:ZSiӌ>J=GvڍmؐUjXBʕ~ +-xFgs7l(mj!Q=k( e3W7zc û"};Mh:M˝9m=Ĵ'rӧO}*7w9ssrsrrMdڔ_N'srʝrsr??#'rʙԴ'gL{ +`f(PO¿J8yby9933rf̘[G+]t& +iT!"@B@LPȂ1S#S}lga"M߯KhT.%o4]76*n=bw.^qdJK#$>9ė +I$)5I}71oH!(%P%dDt-g/Nn{kf=[PP7.1;:d>%"I\z9}Kqθz@72 š*d*#{zy]֛&ޏN̼7{s˗)w +{{}$Y&aw{lnVwsn&Lazy>ewq{8m3Tg>e_rҝ;YIE^(p۪k<#8]NVFw2R +ߤẻ9mm3g8?|͌'~sV+MHnzz}$Ig/^/0;wYww`Ⱥ:Yw;YK(IQKT{N{].[-F?NSoo^ßmmuULm}^ńA6S md[h?\|ǎ/jܧg=3s3yy02{fެgNmSz:o3Gd5'#/oٲy%؉!s<\QwuGS҈uoTIO$4M0ՠXhvC>#뀨q4mS~1@,m* _aEM5kެv͎w*vYhծ#5;xn_vYIY֔*I=BR1*ޜZZ4V^TL`{lyFkLq߆1rȿ}t{ͱe7n9Aӏׅ$eOA2HvG]]Sw(6|N]%7^>OnL9szvr<Nt3 +if3i0،KMa8sry:+u=Vy3V΅V6nS6цfm\lg9)7n-0fIm=?{c20CS;bE2`:b+2mmBmk\ʻr]t\ \oO6~SU)E\>5Q,*\4^~ xWRN#/Ӹc]FNsf.2T%Is"#20~!b E&ҷgox~ +HnR4|Ev@d_ڧoE0B@\!"''Z垅橫QX8B`SӭlbNc+9;…g&5 zjs78*7k nB.\#h"\+Da⩼Tx;cXR)I;:. +Xp̀8&ئ^40T*]WЁ>Mw = /;-.MP SQߡ,@(Uɽׯӕ~*P Kbi€ u.G|c\`JIሄȒYbd@dDcP C9,s 8@r,}A6'`5s27Ay0)QUذƧ6Ul@ ҙTb kR03p$q%GB+'5؀9ؒ:ˠ<IdlrJ[LamI(l cPLk\6%&Da + GDƈ`  rA >R{* +CeaR7MQ8#`U`{6kYBŶt"Nb4uƻtEB-ܠ=KYmHִ>տʉ\QL:yz׻-ڛ}[PwˮwɮuI[D$Y}t( 6,}VH$ djѵHk}.m=IS<+!n\'%ңhê4KQtT fxn0a]i`!{= tl|[N:EnGz%.DyH2/Y=TBSz^PSd]Hca13F( b "DV@"GRLl@L``@ ]r7R1*yUɩ Iyϻ5Y8ٜk@P'B$UD +X|3p`Fd̏;@(l2J$.w$V:@/ho|R֘Қ:5 re/05]a*,٧&$Df!8Bd +qN > 8*`+3,)'` !u%Nt_줉*S0t"pv2!l$˱tI/JA zA@W}~t ~ E k@{ik1Z^HU9_j-=Ju;WdW:I.v 査? ns&M~-Am;KwW:$͝]k݊jtGң@~ IZdP6>s; ׺͝ޕ6nj:k:rS~hah㜾;sSprJ'M"oM377uЁraǰuedۻ8ngG zEO"$,P^]+ e +!&ф9Z>"|CT` +M1)D؜Xp֤Ėm@b8A sȜI wsP *]C{H&xKEx'!'qk-dHK llPHr@EpƁڙP;IٔKqhhdׂyq=&CA\cMIH9:P"%;QaFDžAfAb f"c@>:$ Z?_#^Uy;p)s]/rt퀌_EZ38^uS 鄀:X:(>9BdqQ7Hjq %[Q7fDkTjh_ZS|…;B37X?0xs+T2ewWh_uVvyt2$=Is:QN0U Bu8h I-%-)m#>}*o(7zNT'=4h~t{:;q]#ޏw>8q>=ޯ._p~E$4=rKv[:*ZAR@߆o +B CmUt/t6䝀\hDL'#8u/[:_r#8ݭΏ|vESs7E:)ƻTsGډNgۻntc+t $,(b/UI|4? :s-2,VٚGjA|}\`H I!)2iH̃ @ ev0$)kD9r +{X']C ~Цd~8 mr&Ab馢u߇,0Pc)lX &ņEㄌPOE_M=9йʙP8wBId3ac3"+ D&' 3b1a1n@LN饻ۂ6LB'wǎu/[~qm?r||_4kGjyx;x3_6B5vKwDWA)o]] &Z# +endstream +endobj +363 0 obj +<< +/S /GoTo +/D (AFN_AMN) +>> +endobj +364 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F19 454 0 R +/F24 457 0 R +/F42 459 0 R +/F27 458 0 R +>> +endobj +365 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F24 457 0 R +/F17 452 0 R +>> +endobj +366 0 obj +<< +/S /GoTo +/D (cite.pedersen2004complexity) +>> +endobj +367 0 obj +<< +/S /GoTo +/D (table.caption.100) +>> +endobj +368 0 obj +<< +/S /GoTo +/D (table.caption.101) +>> +endobj +369 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F27 458 0 R +>> +endobj +370 0 obj +<< +/Length 5473 +/Type /XObject +/Subtype /Image +/Width 560 +/Height 420 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter /FlateDecode +/DecodeParms 477 0 R +>> +stream +xrPʾ?H8LZՕp,cii{4 !$BH A @ @ !tivҖ}^cp۷X,ny5

r\z.9m %@:k%{vaO} +=lH?.| VwXݿd[wa-h׊m]lʉuØ@*%ڶ=VoF{󕿚l_e($_`t๦¿>rZ:ϖ{V鞷{.{ik<]ϛ-i~ !ewIal(Xy2ykY.?YS>w UQ]ۙ>1X]tĴv/Fϥ:b e㩿r.޽t{ף1-/3^b1\~]hOַy(Vc k[^L7ٜͯgY'? .Z wv2/)Mf^|9oaiJ`ݖޙܻI V ϭŶլpyWnsovn%nh*=;^ٯ:I6{w6ZH}m>`W +tvj-_¿>Wwf_Ӧ߸--_Hۿ3V^Jg_殃s*Zn薸}w5B m֖.`G!,ϳs5R HNuA.Y, "vىH"/t 뫕X Y -ˆ*TH[lp(J Yja#fז?2,y5_sL[i)DR] o564m*@p<إ{IH-]UFαR}>'M0LHOD weww_G ^E H%ܵO/_K+TSQpFTͩ7?P>gh%vb"Ɛǖ , O*\H fӶ\͒b4-^WGh.A4]#iG냇|R964/wN er촆maֿꃳHھu+!I0ʎŽz>~{{|] N6>)Kn¹1̞Y)-`EяhAaB:ga7|kNw K8/`j!%6j!;\^pT #T d'!Ҍ! +OW)Q:[窂;2 HJ] :$ ]vCj؍f+ř +#fzǫ͞刺. ]!#? G 5G+׾Ѫw\Hĵ!oךUowgIH;{/IPZoe7TnR PM_x?rR|ːK({ھ~*OBV>S>ni!q-%W>|%^`oP^^;G~@z#ǬX2@\D#K&$F&WC@fٽwDKk $IxĭL$BHm+ڶ_5mL $QGHFF Q3ʡ7ZHfRXXf-;[Kx^;'$&@nU<_E0l uS\wˆ)]v:ꕍеk@l bϨ~x[H%@}!s-@+ߛR14ުߚ!9'cKQ.HzƐim 4 cUsY h0[CQhuٍn 2xv9YF^, 0?2Z2w}@":$KC"tNoa^tTC 赃7(Hƪ l&cl'TO!$64ngٍ6Y1VL{oF%_}WȺf*vJ }q*iXckkr I8iû`c0^"ǴKb:lx'5?/g 4.Oi'%cGQٍ$掱Ba"T/Gku7\NI;!(H}IdC.;D c,!X:j#vPR-$k(K@rsq}!1$MOOz$iM~$d'HҪP;f5&M@9;ןc=K|>}z$R|>(2RH HLj"/4Bs!eIMFMv"^;H*jߣ4r vP cHTHDAFe7So*@:eoa>[#k6끱8@o?1/2D:9_#twaJ@v'5Ud2c$ruHdvZt?tah'j,6xfdQv7L@^fi!K.ѼFfx?TYvp +)2*5ˮCQUܐq?$BHTKrH5@@]D%A Q9M"B :" +bH U @W$/% @w1/{6¬]BHZuv9$ I8r\B@d9:}Uĵ)e +\Y,NdnЈ'd +|I!B@2ͅ6|rtٍj#nv#If!onj6_l49i +c .7;Yx@ {i$A( =q$RۉB A4MUJ>M#1kѝ'~2I# n&cox@EIp'}>}ۨ }&{s4M|~m!$C# "A wIpc!`) $p.VÊtqv#K'JGF9|C#K#kd&Ю|(`\.Y =2 ·biI 9h@hT+jnvhTq3ʙHeAE $8KP%`v#`$ݒ@ H $8H\IJa qHpL$BHpF\B d'  $uW$Ip@ WH\L&1 'E$K A)vIHw;T``L4MπO81$(M ut)[tF4hIs,M i}x4-c=yܴ4MiV A$f-tA )$:Sx]v99{gO^ާoTg?Atc]#@Ǵm_dipH4$HZL 4t$x|F3tUn5O6Y=nF8HT`4vzS]vROHuiK̂v/۴z +.,]yt 6~p6>%PQx3]v A @ @ tb_gv5{ho4ٯqx%)2{%TC AYfTL FXZyhYKav0J>Rs?$X3\mC,]Zh!R}#ir_@|ZHۙ;T3@$ {n(Du~0fKsg)vW#̨uB}t-]մ##%qNC e@ gO +h.;BH A @ @ !$B?Q< +endstream +endobj +371 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +>> +endobj +372 0 obj +<< +/Length 5927 +/Type /XObject +/Subtype /Image +/Width 560 +/Height 420 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Filter /FlateDecode +/DecodeParms 478 0 R +>> +stream +xdyWuܯ1j׮n>`ҿ^r/wHA P@EHA P@EHЄG \ezcn }ZG_V=>--|sMm+5z_=@`%{7C!=Q◳)=ywN;{F]=w~C,RKakۗ6mE7K;<ο}uHD Ar},GV`4;+Ozb:Ǡ&53_<}8mvK3'k:qA;X}l8|ϓ3;_0BfAc {\å).ͅϑaڰђa,~7g,-ؿa7ybێ_q@C19JvAڹi6EPaV.a:-@hJv!F T/Lt@҉颣Wg t:K@1^@*zh+Lnj#o OQzaFH@ L+VI eՇ,\+P@EHA P쀚}Wݲxoz\ +kY(:}:~z}(cJ +@쀊~gF Ps l覷y]cuJvǼI+u杇M `%6vni:!:T3ԷM/ ?bʢj$bLzv%¨ +y5v$N߁{6xfo\׵=PG҃disAZa{p(@ "THN9E@DQy Ed35Zz廢gOXG~@*5۱_.bfF[ڼ MRծٽ%XD _%O+F_/eKh) ۼ -V.:Oh)^I@ +Kkf{H ,4UȝZ!{`^w-Ykcm[d(ٽooH6 uIOHEI@;LT:ه4L9I@ je,yWZeIXkh昀*dX_ßM'ns8$F̡l-F搮pV'~Z@ޝf܅dy2~2dz +iF ?Dd7T}+lHy-f:d>zW>뇿3unlۮR@L d MG9~[|Q2Т/Vl޳;%߳-M,}o+~yR&d^}O?E,.0N?T 7<6os;n@[ +i9%GpƔ> C*H*Y扦kҷaS!XQs?UH/\N3:8uPhG(\K'IE`IJd_0K %RT XR:EL)?*-UVPK]ukS$My? + J@v;P K.b~C% MəTlۀebׇPzY%7< r{J +oXXXE2B mm\uELX<-۲ϻFmWN&Ys+EP x@*HLK,.λٿUr_5x]dRוʼn3PR]'u[Xu3 $b75ȲEY >exZ[Mڿb H:4zNOp_[.F]g5=ibaPmԉ%h35s.ktjA{K&˾gRUvFrM)ًk\uߗ H "\%1>/nz麰/{NDlKŒBҍt:B^躙W\e]m|b fjFIoM&^4)R vmzV^U9[\)Nh;һ[THR ,pt"вo>V^=@ s/ ektLP0%NDϲ_=da[z@c4nδk@^5wL6Δ#d()<+%̝w\ rI}v'j$'Jyxg3$iٺ@:CxCw@޺l vV9dNKH^(*a7!8Q%qԿl=)inxd -315b?NVٱu ֥$bhJL0+*΁ҍ$ $GZM f,&+A)>!@*=Ę $2(D;0Tzdz OL|dV5YrQ&fS#$nni3QĝiԽPKI2@q;7Mx, 5_Bon JLH} t\/fix &LT٩&E rd@"y},s+h@"QH,Q+dl4/2Dq|6;&kF Q"7BKl`T%sUF,o7"bhRa~zb):t $iR0wv[b,$6]/p uNߪXg( 2-_ýRSS2$ +v讔f)֫/_1l"RNb3D@2bXlSbdmYX-Lx1l^]@jRoaSjCLUN5 3UR$2}sR-rں:;xUOM/xP+@?xP+@1C <h^^ 6(5HM/ {Y&ᔌ@c0L8=J f8bzX=;6Jv]'V.:5+ +&pb@X8M1 Y?0$2o'j7ӹH&>o&mOjd8HhH&N5w(턓g+YJ.&Tw8 $(dbI A') '(4J~$J2qHoI& TF  Y4HO R+@:T0&HkS2 `/ %θ` U{w/p0޷ɤ7BАO>u? AN疟di[^ agZk0@y`u(@ "$ (@ "$ (@ "$ (@ "$ (B@]vU . ]泛 '{P04M#PH%aO8;!4;`*|+!1@ a[@R+I쒝E հr"!0r*֨;NnrunrYe]í@DQFcvىMs7w9Z,!R$:v@":Mqr +KvR5 &HR5 dG:P@t x*n*\/Ɔ}Hd@EHA P@Ep.;n3"ލ_*X:%VIu;{kL[;5L"Nw޴wh_JvݓnTN H~-?Y7=Jk=A~KX'ʝW92:t/={jvV(q=3:ߟjb;,uam)?֟۝=M[c?/5oemnޕ[z{^,Htf oYɤs $rz3T>zg;OOײ7Ѻ=m_aH ͨsޭ.&ݒ{@PɎ=,j ܇=͜| sv}aĝ5Vo7.{6qԤѳ_&n쇚+hvϾC{+`ISUd/QJvA <_Ἕ?(EHA P@EHA P@E?H +endstream +endobj +373 0 obj +<< +/S /GoTo +/D (section.28) +>> +endobj +374 0 obj +<< +/S /GoTo +/D (figure.caption.102) +>> +endobj +375 0 obj +<< +/S /GoTo +/D (figure.caption.103) +>> +endobj +376 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F17 452 0 R +/F24 457 0 R +/F19 454 0 R +>> +endobj +377 0 obj +<< +/S /GoTo +/D (table.caption.104) +>> +endobj +378 0 obj +<< +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +endobj +379 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +380 0 obj +<< +/S /GoTo +/D (table.caption.107) +>> +endobj +381 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F17 452 0 R +/F19 454 0 R +>> +endobj +382 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +383 0 obj +<< +/S /GoTo +/D (table.caption.110) +>> +endobj +384 0 obj +<< +/S /GoTo +/D (table.caption.111) +>> +endobj +385 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +386 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F17 452 0 R +>> +endobj +387 0 obj +<< +/S /GoTo +/D (figure.caption.113) +>> +endobj +388 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +>> +endobj +389 0 obj +<< +/Length 39380 +/Type /XObject +/Subtype /Image +/Width 202 +/Height 107 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 479 0 R +/Filter /FlateDecode +>> +stream +xڔ{[ǵM`89iz%;.ꍔHI,7ۉsj$՛%[dNU;7t7*I;9~÷fQ^߬"kbZ5 Qfz8&b)j%m.hldLis:A˪[QfF7$JU *l& +h#,~']4b.AѶI&$h=׬㚴\c+ʩ5S4u-\-D3W`U+tҩl{-^{/;:Jar1;8$]; -F 4xK +k)!xW]Hi)*%[p*^<6lr L=Ë )Q,IJݞː۸γWƴ`.Ec0@FvL.vќ0BNHFDdBQuH"g H52 4DteC vZbxqWutn][! t5quo[EW(DWo"= tAcV6Acf#l`1ZT-.E]RRt|:?R(T~1)׭xaL5u*WC:CM[f U ?.5dM̶h5 z1( *6}P9+.ߵ^t;hLx +ը^2FQ;Af~e}5ХkBZ.81P3\!FV̥ftFFW91QqɛcVPG#T*e+BÓU<YF A)cm0ӌLׇt:xTCB\JôbƏM( +C"1n?KNb]BdBZ + j]Z.*%UGUX ]P,ZaA"UR5JWH8+tZ":.)+MT5ƬBEVOWlm;iF%6 DkWMtM#UӀЂtHF#( +g]scⓓ7xaşhJ +kZY F}1+Zfe"6] tVո61tf!l]-+\$+# +dtj]0I]y/H!BW-ХbH-#4Dpk5 Xq)`|LU4 tz.X ]03"]lh5B!z<.4Մ.TUFUgBt[mAVvZd*l% +ӥ +P:Nf+Dd!qpFTl=pdcVx8-N!VFf ^w]k9-c\^ktYf=e .3].]hu2-2^Q-c›zȨtf*(B3I úK!DpvVf>&8]New'8𹋑lAҽk‹&.8QA;kT.xNNW!+&aEmE1n/ +#6!V]#V ZCFV$Qvt,9y xhvppZ4zŸ:97EڤԻ}QT42PY?#H&ݘaJ1ý 5`R3#RrnBO@Rs2 /6n^+]uKn2$Yt%p +kL;1,tuR(GM%k"&$S?~51]ND URBkVgh#xT:>#hf :ƭ~ +tWǛF:_!A_#/N"c. `f:"HZջ팷 4h!EGBV0]$HG8DMr}.K܈ q,]…',zy, e.R,,)aח JƸ )$\.A&"Z-ukH*K@tU`hˊ2#|لt't=OAI)&wc6ա91BqE mU3;@txfF'tQEe sA-~Z89Ǡ)#.z$.]VlI&*\NL*)@W-D\1Pbqh?1ؾ`T1[ב)a WZ6Ic hG9 tZ{}Hѵzz 3mpD_VtõKR@36}7oq߾lN48 +u5(师Jxq2uNu3gv#.\uSQfLWD11>Bh ޼;U]6|dwN^j1sX /r=]p/wV.YvJFAъzW،#.䪨qt}?]!p>O dk$۝Kpk z n\.xk ZH]v$VJr%LPіIR!+TeUyK9`qfIǣj]cXU9UU=5.e2ٖ-ۭ6%DEt9*3,k"z>i;8a< +|.҅7ntLLX>B׆ڬ<t56{_$cs,]D'ѥn>k&x7B͸qrߘhU(! kDU`@()е|Mmк(q?=ʵ<̱c^+Xe(<7n݋V4i# +#ЪPkd>*nťukI7ы1h#DB +5WpMf kԇKq\\| ;*X'=̜Y l.H +‹ye5yyy֧kͻޑ\(@ݏs-Sy%JPx()'.իכ-0]^P]_YYAA  lO̸b:'tEWs32xcygEoأ_ט#e_˦jr=t]D@Ө]?SWT:x U !C*DEH6`|G22[`,.j?A/N W*'& +z{xHTF ê#LW~ @.cև?~F銼,YrֱP=XIW Fʟ] _Hvrz>kK_f76ۧIڭݴ#Uݔϐ:+|/U‰V hk@:{ _hDw{'c66leܰm_TQ[lU<=m޿m>QK>q)[`or5:ju #Qv@ԨJ{uZ^ Ѡsay dettB]+]AQB=}n۸=iwБݨ =>i[V'\h(#XTm+Uzw.#_|ug|'sզktm򚝒Co͚4Il}:YC'`t՚ V#@i 4=V5:Bz1;D$ !፭u2.bhwȁV&ѢZt!9ky:$$X [Ot5u0v0$TP 2P8/Q8V=$M Q>&#e|?tl[g(kcg7=k>xz8coyOZ#7 &ߨvwzyU o]b~vm4+uqNNA=~?=9 t yVZ@0zogi[Jƪ5?qi #ZMmgun&Ršx/#Xf{}Nc薎z?O90\kV1V 0PҼBz0ȻPDw1vKdCLٴ`=n>@38Xf!V$P9'@EtE%SpbA|Ɇv^)}~x'!h?J(©oy?(2<$5#zH%Sx85 .A;/HʏD/giIOР !|*>+ڜDH=!gPy? EqPE! +8! "nH KtNtvmlkK2q'BB ^)==\O/'Hfb] Kq[?OJٴw~m{,Vi"}EFC/ +W@`-f,Ym׮\U@Vh-VE@KGDOHB }/ѿY1kT_*]< #ڝfH,?/ZG +Zpp,IyZԲXyU]]Nb-T?%'B&yn@qRMP$jC鯠`J%BNnX-nK{OpO}ÁV< >3jZ;#63"+83$Em1 EFWYܬΞ-߳.XzRkyTvVEVFΫ(R+b23p^FeQ΁?9sb+ܹx1YYuYOd=,zQY! cQ4Y,|U]]q ܌4g;^PVPq +Ǩ1+GG5):&6:F?ehyLtL4~EL41?!!PJ訄ytL zh?ơ_IxSw$dH& Y +ØȿzLtBtԯQFqAo~[dqQѱƤ=>&'rx 1ѯ#hyb@H:j 6ؘAIAփ@5tRH΋ dznԢ 2`ɲ1dɲ}l_sS.\-]`Kߏ?be˖/[KZyOse1o ,[.t_eK?*d\d X<(-h?M-7~`ŋWl˂.d'e˗X%QRޛ2e#ޢŨh)$l +Y`\V,_Zߟ:-h=HjC`ْBI-Y}PAwm2ZbhM_~-Zޒ, e@.]t 2͍ wR /Aaq2prCya# ;Q.`w}-Wqqn//FB.`r%Ҵi-3Cp,,ZtJ #|ٲ^v559NZ #'%ЋK4+Qb + h? Xt촲єOK} /_nqtiJD1n~}Dg8xd);,q`̨ N?c}fh=١HRCrGFX`xXYq `8<tϜΑロXQBVqv 2nxc()?& vF{G5-KVr3H " #xV C;a=|ɣ1 +_ 뮍wϞ{<)Hݘж vﴊٰٲupmL^C'>!hGh56NεѶn?(‚S x?\^{Ϗ<.S¹ЙS7ɋ(B(]3e1׍[dɛ-.X}v˅cD1҆A!,J 3םk[0e|6g6uIN) ]r:q@OK6=V]+V5;``G_ed@MV1tުNU-DSK\ƞ1wY0v . {6G%cڢJo/o2(5Ϫ_=|U]SU54tAm1* i~+3.n[y{S8=G^-# +UVMA75  jۘ>sIwS>LaOEOT $GBu{!H+JWE=ӨB(D$pT/2ޡYq%nXG +7Wyg+y&Q +*VY\^^j=`vq96NU WںǢf{w>9}9B o^5rWX7;`޸0V}v}9sኅ9tZ5HDtCIpIUuoQt0t(~fL +ţReKiE H&en>]0]0BTНzV^pŧfPёI m23]շ%Zm032ʇ +t]SigO BD/:# !5S@|701]=#BWBxgknn[gnrBƬ"c:u |̌ +$ZekE:'F+D'O,-\ƌ虩Q D?摌ZVxZCeFtp;^K A73sujQ+#d ]dor:fE7zn]]O+zƱQoswxzja]d+D]0섚̿PR&L<#-K 8tUkTtUpU{ 18}tk.tUdB+d4dm>N/83ӓ +'l ]< u#BDP t/n&'ب5l]1.&J!y1ҋۈ +}Q)SbEυ-iFD, ]O."QCfjO,b>==\-ĸ5͌N\LP%& 0vK-m R^$5O+k99mjZܴyY!BZ0]h#t 'Bկ[=Gn]5F$5IMF"DV^, ZAF=WYo4Sz;+*x.óvä +!VA ᥲ7yDwnDEzVDB#܆I*s@JQttq4Et5L@W$D4HC/blbY1"I6W f?2i7=Ac\Ct ctuKxxZ!4&iB:/~Y\ۅT2l)}W?ˇ|S1&Y'!rkZ~"r%5r] uD$M ~b?ސ%U_2fhR3U 1tmt!_YM;eeFx^*`gK礡lU3GOږ'h.wX=Sp2ʏLʐxzx{m$ǥՀ.bĠ5Ld A]1ž1E\ÿ6sM3Qe1/G[.z!M$N!ɐŨJ+3k{9{oN;='U6`c@D7"D,3LI;Ƹԏp4){9eZT: ӕ2V6)i.C2*6ZUC[2JC-HZJA.WNh* ]^7\PX#/*"dE˹yi7_\w='e9UQgWNHL[HFх Uևe/ڶ3g'MW B> #w2b!TV]lv{j0EjZAe*ǎ!Bt}D2tB #e-%E U/޹?@S|윴sa|6v; Ine4 r_PUBCVa<ٹwaJD^"$R13JmNjkW{56]?=/ +%0,ъ["*_v9ыNd. ̌{ЬV8u Z4owe}{:ԘGd.]}ck2K ,Va•U :.ó\1bY8]N:U +º+.%8q)&aڐ^m3[:}3=c ]KzU yNb tA1]"emćL!׾-^@*T!{n3J@t1u r!"ZaſP]̻`FzIadxLf]Nv૩vM5U.f}Q3 n–歇={>gxC{{8TfBmWj6h4xi7w@=B{}ԹTM\I>E4qp^-BO*ggae vAqLaoN5>ԫoBWEο}3L=5xxyW6e8)eЉZmO (c2]]tq&S6q1 qX F%3Td&Du2뻷OnQٔQ3G?ZIw^& v\ʡ#zZKDKUXٚ5YwyB Z9rCj-(kqhtݸP9K$tE\dS/+ss7fN;otz$]A~Cݧr9 tDuqYmDW+.KKF|c5.d`뎘Ղj:Cꓳo~V|NjtS?p@~b-:tkFty%taV7w".$&&gBtL]<)o?y? ~ƮrMțt]&~]~KV"*%"ybٹDuеsYUkvBa[Rֶgy,~nzAny@؉4DfDWNs\mNu;` +6W5!_E}4o#rf{F:DWc<.E3>]m>|jʖ?:I;߲vBm=jvWYdxxn/xaڈ-hGV;?.bZwoNZCyGb?<ȤiǣfCeD/9rcBr.1D׆ 6b}RDQÔ+Gf-؞SزOۏ);2 ]—&j(,t a$%ZLBKc?jp\-$?T0GZӎq<џOμ IXJABתv` +CTۿ/x<; t1S3$Jiw/g?A_`[휕UVsim*q4vNZԘlH.2 .~s{}H|S6ֆUYov*a^͆];&f\אcþԳe*]TJ;@\y.\]Ƽ0ɹ18E̔CQSӢ/HK.{hGS54~}Z3U7v2Z~v:mHg˖g8l~]e+ #_: +BP2 +b)'G)#$#xQlɳǼ}aUcLk]e7u%MEtJH.c/WJnSax>&[[<*C?]C;v9-x}hPV}ɉ7Of|nqʉ(覈Ci1 4--f9d\mCl~+?> ♑G~[h23Vۮرa)iq.cΉC^J+,@W2mN}c6e_ʾT#Q3Rc{XԴSQ`-:w8awϽ3#AXI6Z, 7E_ 7-MIrl!vVJR|Sa1kAg9yzk$Z %)I|[}3b'c GQFsD2Jw(aEg] }4DtY/ʻr:af4I*BP]w@k(`lZjk/6:g93449,(^qOs^-R&2J=q4zNj##FOtV[p):"d@EKwc>dۀwH}7& Mlqnw]MT˘m㾎J*0R:+UVU2z<Q>9;EQ F׸eߜ~4zn: (3 +63-j1~iǻ@j2.0ZδVm}׃=_nUCgu#.5 +om 7PtF*o6_)z;˿}{w.ufQҙVGI}xgm8xٙE+QRoajR7@{!Ooꠅ  ygThmn*?;s=_%=Կ'o_YkBނ8٤5k6mCvHH'(Xo;.^{/d$ūY[]|fRM7J\YD>8+-W@F+W%ZN4kCZSbVŸ[t84:Uj t):9 ڽ_6`M]5@cQ,JLFԀMtY"S($~% PK{7)۶Sn0 d Fącjլui + +e5p:#o0o4 y|jz8}7b!l+D;66hB M7IzӐ^Z(0ci/'?MNmB^%`9ChP@Â3S<`J'zmF'ߴ>W0 TW' |BPgH^ti6h11h2]~K`lY*!k;QOm7U0A-hD' r݃w6A-!c#+.X-!{h38rE$`_ ;VB"Ff7R`=p |W2 +f'q.J^!8&=P +!?y~u{.V`q{}C~`=^wKIK8!AtZ"h y!9m@Xd}()7< +9!a<@38<fזZ>ߐophpp`(/O0ܾH!pHAI"=Ae804!6Ɲח,[ehwr'?0s_ 9`X,'8QQZUo]?鷈0hwyNX=fx~F: +=$xd='#(dHf`q(fF );L ?8hsI6j"T!hLSywcEob)c$_ʃek+ۻ,r$6KbFŒ6INj>G_K'VVwZi'qvb;7G7."Bp!j,˃l9-L%+_Twv[xA)6I%pwX,*+.j,.V5dd6~YkŸ{?w(.nPXYyeAy^*ꈨ*ĊဟVK% Eg9oݳrlL¢E\-yX]PR_\WT[X2yUFڭX[V,)inrgnM^{qbh=ԀՅ&z<$ kPUTSZ*+і>;p;>n֝֒%5ՐT^aU^au~ašWC*E5E/((-,QjKŐQ~w?4]rJ5%5І@L~}^8^ Ƃo,o,)x'jI{FuقD$$ږĈ+纷J( +9 )ɲunm[۲-[rvjYbQEYr֛5o^=;R[o(V}s­ +O=sG"=B?)<[PXr=t +-8zic8XK +âO{h +s@t "=2s0osU~Ч=^pъR2y*2N'@3 )8r}sQQ%VTagYy3à~JiɡXß>@DŇhUO0x'X{=Z.jM_' +='k*~cL=^sO~4jx'>[1"0eq_/"g*@mDϏ -7u:׸л&phq-?~jx *DMdsq+fL5;QtSe(33:(z\{* ~ud5C&4+Yfy}𘳒Ft%Z~}L2Ԩ1Gt~Q ?ZwB瞶_-h-ޖ}';fgt|H=3zqLO)4WjhB%EgF%jbINŽܳG=^sTw7}=s׳ #7\N.oPѷTǥ{BǼgJuwm]|@ xir]zM+|'9EGqTȫ][.=CŇ=^BFm4 (>1ikو^йQ6\PÆ qħ.{{DڧB +.|{۳#(\KC_䇚Ň+fL};M}_}A Q _ !A.=B/=‡JOs?tTbmZ x=*\.Zn5Tq<F%l\l_;- ݼhgõ:~=uXfrdQGFjPc5X4xB+B&@s6/~'l걯'>ςbצse8c@ McD5vgDȅR÷rr 1XhXhY5HzaVs9F0*Bɋa1%1x68:\tNɠ][.>T/WSm|屧yk3H ({:~<${>>E,U6ޔaƒ@5yyGՙęˏufkQ]UjAd=TEk9c-wMIkrV"ݓfi\m?)0 +/âuD'V + [&UoooԬ̙8mR]6yS7'\xO7fg q>lXV_OI:v_gaUb>7)Q5HsiZIoۺIgf)MdU&iސ+՗`4XI?i +$_E}q7n3*z@6 +Bn^ٯ9r`fC[})6ĹȪ=d뉛 \%bX2`\E50&)j镤ٔ\:q6pVeN9|xZRV +Gf,`Vf%pfo̧̤gODY+&eAnڐC;R3zWBL ˸rfX0 +?i˛d0Jq3F)fW6"2>\\w4\Ӗ7ͫ|dY5W*% gˊyceHDPހ5B1S`Vh]ps0.7!rdf}MyEk~ ++ПegxѸhL7, sֆIKh75yϚ J{io^]ӥJ q7𴬻"U.jZqňP0c NXC1}`si}>g) pA\8k~wSR߼auݲB}jw1ppqMˮq٘r=[p\Dy֤bwH׷5\z,v츚]k\ߺlrkEXs5ΦGxѸkkHYb{y޴$s z^|h򧜑zg~p=s9dȦF4粧yݜNh7c'EךC'x?o ąZw}ndmzڷmH Z"ߔt5Ac1c*v+D.L`[^D-w6;nfyse">i)p)K &v,9_7|G` R GȞe 0"x3:mKmad%={1f?&/9Eze#koXOkư0d VL&$MIGcZ m&bm8US\z {pˆTS7#cᤃ{f_ݺ"D=|=^ ?/{|6׺Dh[b-B"q$ROk&MncL];&yk\B~Х宻B6 ׌V1lfu-k7-:wŧ:ɯa~#!k5sТ5\| "";f_Q) e݂OQc2+&HqPZRJϝK6oJ,ved,*wL\ؘ*6ِ ĕp5-0eFHvpqR6A""r.}r},vQ$r0*|5nΘaTSRh|WxLy[ò~A$w߻eyW=Awa Fr_dغ.`< p9P^XM!;ܭ'L$:ሕbVzNݛ@`ӺnH86~.yHhiaQʎ/vi.̰uw[S9CFycG {6Iw] +b +VAl]RBKg\I⟲cs=|Q>dőb uG"I]; ۄ-cClV6Z5iI0uB]̾)\M1S<\iB|fpƨ +Xp<+-Xlg\+bۢضiIg])'ԥFrǐCƘH=/ +q[FjB)Im+Zr4LmCi)tJT* s[Rd/@dJf2V +20*h:B3ZaJ'Nojj9NmXAYg!MԎ9P"jT&)Ϩ)q#wp̪ WěԚZBK'u9ӨIʤMs;nY.dյW`Xeud V%%+<L07HvA]@Sf7eHQiF0ձ&fE5Xj14Q̊%~x#`D0箌]ܾtK_&Pl3uPCBK+,P ۪ԵY%pyl#[B\39m`Ԧ*\tYuiycX+Mq1RcbwImRԞDb|x៪v 597iY* |Դ6wrw 66u$Hm)-)AqWSq1wlzV.Od11qShw_$"Gjn^sx2#uao)2nݙBn$Hܶ!Z"iaR*8柩v9r^:ϙQgՕeɜ<֥urPC؞fdD){ ZA]4cG)ls7  zȍ4Qۛ==Ig8f Lpcծ1!FS=to5 2yUZ*-RWԾQ:gk^1(f_k4GO9.{mfCUV],|(|Krǂܙ;H*\jA +_h?k!Er$-O iN O;bHLy՞DF5749G.Xބ0?Td5g+.]Y`*&Pn_P:KON9)oI CN!OZ̾V:̺?RfK/:vͪԡoi]@h b=\໔l""B ݫJ_Y '@FU< /-(?SDGn|˔VWY9Yf]u)EogEZ`]y2^2)f*(>Ȼ+D&`PT C`rǚұZv/SY*LjQ4{V9\A])J/^eH7uqk;V@^w N}fe1&m7@THY=.Rٟ|FDhe +I*-jZvQE +q-:ITu7uD>DMk۳d+GFL7s歁Y0Y}Џ&gCԨ$y$]鋀E6 K,E\\WttcaY#MnSW\B͈eB*9{6;팋QDarەkg WaϰO@ӊw7-kh)ȍw{)reKT?;Q˖|=2f ߸:@rUjרM.S^L]%E6=LjMcӋctaKSxuDCDZ] 8In}l5ͮl)U]ծەgtW!}W].Ȫe WP(Z9!"jZnUZ\do|hv c_(5R7F_ᵬ'{%dY}˽PM +G Vr5TI+~6_@]VNJGlo*</?2EM&9o2TWZnݪrXb2~"C~mP1;߽A{B5(w}BQo˪W؇L]5uBB&uEy :6͏QvVo^t?N?~B42+1QD*-4R,UWHkl ekUf1.:Zt#.7&A]~]jF]$-Sڱ) ++m ƅJ!)%y,f Ts qZw'ԅ:ΦỶH]iUhzaMn_UT.*߮% Q_ۃ$c[`*pA ?VQAQR]r)bkIrqG0jϪ0NR-wkK/]L]BnE%<24Q[ӂ4""jTfn[m5#u$Sנ^v9Wh\ +vH5*X +!5к5O? ub+ZIQ ‡t.@WlwȼkۂDT,7Ak\CZ_bы BNu]db"#]: 5MqWh5+Әw | DUv8ɬb{Եi^[פUBr{M#}wBA)fGɺͼ.D8ݑKU$h2wꖐNXr囒\(nYir!+-']b6֬A{t14$FKg˱AH]zBSE#AΒ;.w$`3&$;m92:0!aF#%~dea{L]6cfa|HXazaa{XAhNC]%+W]L]ǞyȩzA|wjsRi8 8?m)uBE{ x] +@*jc:% +m ֛&yH?1'}S?0$.\-N4 cxL\tUf\9CIx +Pq}@+.3^$Fi 7"q9g…{)>iXU-w!MKF%Zj1z8tQWdG|Iuu oj].e&yuW(Ix:7VaG1K[PZ?|WrΙީ`ilmWOcUGFNC.h^i.UeeҨ-5\r*T"vƉ:=ˏge 1V GLpw"S9#rA&4dBcB_F v3ժc,|ӊ՟!2Zj u呺آ'U  PA2&PdDvUZLW8Nպ'atUI7jZ5NUƻ: +ϊ g7. ;!&DeKp9XG],ȸ.ocLu)T}H:iJ+Mj)8g߼f'D]8ҜDpEW㔺z"44 +8mf3_zqYGWIȴPDBR 5.D5*ѾN[AfcVS”NIsZYu5-{Z7LH ^J]XjVYJXnq$ b+2M&lxQB>c\t#ޫ"] ړg 7],ʴ "A-EŴ z)J,Y -T9A4uE!'}CXE*\W` ĭ5P#2Ѝ%td~17z2E猿'gоCՙ]0K 2K\4We,3\=UwvSkqj99~R}8u\z*A14Q ~"ѵ=苃L9 Ru].ԕˬcBU Ĵ?1om"`k9HOU@6Hu2c3U0Q7p`XaAyK#Rl_;p`Y#g֙nFGQ* W*iT93]5ur妫1d 8҉yLwW]c08Te]i܆K%[Li+gMOB" iõ2|Cz}Бg_qfߜԿ]cGUJr`6xH2Ӡ +yNG ڛ~u܄SAN g쿬c)ScQC̨a`y8\49= ho?/8'yCE5]_xU+h`cFY`Q'`~W/on4-ohN8~1]ӓ柟4t|(q,3PwE#(1^RRt7'uo%@->gy]^ۧoY + Zfp\)jftƫt4]9û/%`z=#Ϛ ^ ZK_f(VXFdZi_i4Pi0ARsPߪ[~s7>獿$[UXUخk|t3qKPsFV Yo`oϯx?xX_%~nN~A9ܬĖ Tp쯰YnZnePjo_bh+5^^'~/8T4 ,wL7ͷ*,؏qZW_X3uWW=(86noZf/1 n1 5Vq0 z u^\w5㒁ېC_@l +-/oYiSS~ 8^w}R)M$<*Ni''z\k3krk9*M#Bg׹Yih0}~ OOn~FQԾsޝj?}QA8mcr+ÈzͰnnH3 X +u7_ Ozک+^g n;g e"f3Xf{uMs_΋]=Vz5u5p59$5!a@~``02>T=EC_/ w Y,_h +?[[o/H~Sv-U~*""YCٟvM_Mow]sT{虒h]R63S~ˡBz&*,,abhi J Wr9GF#n6+QdUz"$i`Loo87b0Ӱ ?s{L]S<0z_v K_|tzP~n&UEEx,bzHn|=oh4; )ߴuw\_9ȲXᘓ4rjhrP؏d8G%f́cE;Ȉi@ 8`^N^nN < hCta9p A2SUhE9;DWzJ+ \R m] wP~|x 's5s +Ypٚ$|ZXXBC:x?|'S'gCx0𩂂O}g?}Ч/,8sё>y@>|\dz4>}h+O,P/<|:'s7cGΰ?(;0O'.T Fi G?xCDO<|`'(MC%O93*kI $ٟ53YSFzigAaP0j\ H +P;OYӸ'?Q])3g ܍j1{ŞHq +uW;A4^TSzU"sJsFύ +ГZxqNE\iiK _|4>jP=ۦ~xKs,*>!W9WPa -/PGprQCI4) {J}ï~|iasBcնG;rVCu :/?jz齦5Ҁ#\h^oK#.UR?/VlnBs޼y7!{/=n]~K50ऱ"P{9\޾>>QgJۄe.o75೸.=Pa4.<{=li)[?0Ҷg-MsGtqS`0H; _h8MYV?(p 2c6\z~DgKנN2zJK3k|!Y +st#G'>8JmlOˢvڞq,5۬ dٴv5;a^~Y{k<H9?c{ZUjc>Y,斬sc% א!=ky"ضn\5s5L jjR%X cŒJ9K/ )'lT0:T}7vߥ5.äz2Z0VzM%kR˥J4t7d$_@lkj=ծ Ca:t])oȢnU޻h 5]zj92#EZlzyG^ҞܕKSV$nQI2z3Z9z9x'OpVo {[4q{(5.ۃ) 5LX jkOoa"kDiV>&%!23ɟmihmf)*)Zqޤݛtv_'6T[2zt MeLM Ҝ@,UҼ) uΖ37OY2rX.j)EtHa 1 oQiR//z8pջd`%gx `_T: 3%ٻh.0PI"Hxe[›y6ߺd &\»"JRAI^b¤5!oM> +ugְlܰ5id(߲5/qEWd YB C0./:|?p?@J>O"७|PrO`]VYۺaa468ØEfۨ,eg%{`oI.m4aCko[ywUn| +t䨋fJ؉hΖ%>->g.g +$M _*fXñ5V(eRt@3V]UgxѸh\7l E1aDȲŅ'FoLxs,>a#s.zfsމj-1k#MLЂ&Ґ46$1b4Gk=KJ#3 xwq%ʇnBǶp2CEk ΦUkni/4̚AJ!ȭ?N/%}KU_f =w=3!$ZV7cflk*Qgc'ܖ`2Lmm?>#zڶm72]2ϒYIݪeӼ5#|$c;qc&bیm$O=pqU.Ei-KԦ)I-as@B\uKMz|m Ii=/{=>36hHϟ|汋Ȃ+g쾄й5|+w_A1N]z`oX^h~w?Yghloinn&[|%[ca]=}_Ζ gOk8F{jG1{=%2OLʼnz.LlR'4柷$CMEZ)~=q__ kT;Ѱi^hM=~m&s\r>bnޞ;{z#m dϺn2it eOKʁȨ9ZwV =_&{}[SCNXs\ײBѸ}~wRUb&|^ ~OD?3+1g3sˠƃ 8zƗ?Tz4|Ҵ!lPҴAiYj~S[#" +?_CM~q)kj+l&u9B)HӓpeZ$-zTNi^řڇZ =d95]Auo" ԵLQλr=y˓ vjw$1ÏjM>Д^\r5GTuHqOX Bۤ!U $̴NZ(IM ?4kf}G.7-S5Sgm󎌍u"ɴm랶w+ԅ8g 'C1Bl)'sȵ ~QObA|{BH?%G{%>tJ.̘RݶÉiRo(0uEH]z.#/e m6PTI}`mt; #RNr(ԥuO}3Nc,MS߽Lfq^R#ڜ<6sOiCyU%woǍpKmЧ6JK uLc };;vXcXL8krFv椳i sziF 47U+=62.; +pϐݭNq$ԝq0*7<7Y^L`mTSO~O=BZ4Զy.IGk12a|o@ZamZ7j۫.j22+.:T Kb4&2 qyҡwrnrVjP<+BwZ]rY@=rp_3\໹9ǖ{nO$[꣎zx0))1s2LQ ɶT&BK]8UCV;\=CJ[fݒrF :L{R ϿQbQ{8&]]=⒵_bOYH6 iv(Zg=RwJ̣U] +:*R{JO"1{p5jTƭr5ENp&=M-EϳYk+/5 +fMȻj\czi&=|R9`ΞPx#-FwڣU}0<ݦo jׄVrBu +=܏jQ[OvckWZ{Z\R?]fiˈ-IO1n N: w軹 + .3&(;OӮtTmSuȰо!Z/&<YR<=+j4gi]iHVjCNpsbgq.8;PqeuԬoYԦOi_@(VjרI(c* ̓WAMvHTlvPզKdD]t$u :Ȉe X9tm;條-@AEk7A]s Iv뚜êh~,ȻTߥLgKU]w$Ne ǦFN"XHR50[&\okKuI]eQf6%HpO#L#k|ukK`ڗHN{s +AK#.w+|}Ճ}4NP +,XRam.@⦑ιC?h-an*XwYwQ>DW8nV&&u>v7b央%Ȟ4+e_R[q+jz 5uL$ƍEFSP|2;Ե@z224~ܤϔڭ7# 2]倌kIXl~ԘxG힧 o[%`eܞ>HkJ׊׻Y2]mtø L]ekpѓ"w)V{ڡwӽ2YNjfzSׂ7S +.UE:K,PQw> +endobj +391 0 obj +<< +/S /GoTo +/D (cite.russell2010artificial) +>> +endobj +392 0 obj +<< +/S /GoTo +/D (AFN_AMN) +>> +endobj +393 0 obj +<< +/S /GoTo +/D (AFN_AMN) +>> +endobj +394 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +>> +endobj +395 0 obj +<< +/Length 38863 +/Type /XObject +/Subtype /Image +/Width 119 +/Height 190 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 480 0 R +/Filter /FlateDecode +>> +stream +xڔtgIJlKǞ`+ZDQb&9gJ(QTNrbRL%Fn4}{߄vg@gO&vl0 ͘Bʊ(2FSd1`6:=Ϟpw H̢'pfB‘Y27O\3F%2 z3Ȋ?&\mdV6#}^g3==k" e síc0I1'tMYG1+,h}l5H"No1븖J<č*`/8`Z|\م- M` j;!CZE?vFgxR0+831XF fRQ̆}=2ev&DXKCitF4qf}~dt4f6cJI +{2~*zЎU@׷j_6W-m", DFdHiBm6MnBc /Jf + Kany&}EjYMDcA"9Aˍ};s>L8nS 3nBcA`;m^포$u|cu╾ݢ7?iI>8r^Jitv-]xڌ ȈHzㄢݐ jyU`hi9*s]Jk҉wH8f˻]b f8ॖ$a.1&E-VhpV ~u\W~1PYewB)14Y +~&k \k2e 'dBᕣCQH?ݟFJR<%}X%u{ 2D .Ɓ1 3OP$əZBƎ8;H7-R b! Yda&a $1Yn( +ཪ>+%:-]%}~ Rx_7N#}HP:)Lԁ#HvaH1 .v +V'aҍMYZCb8Px:a]C-PkfB̸yPs2|7iH/S˼cEYH""-]'F~E ~ 8/׽kFVۺLW $xypRGP 30V#HR:)7w`H /y'Ěmb4vi֍|W>DDڧ2CD +{ !1ȋށFD0>8pnqLQ!Ida`b+SN$4Z*?}iux$}KԠzѠܼW4r +2cO'r}M>ўcSg[oNTũ̒WJ_`MmX#Aka ]R!# NiihLCNK*ĀeM' O.a0:-?ݱXo 'RվxEP"l[$d#A56 -"ȓaP`IK]ѩ(\( =d (͏_hK={8Px+zgw@/NNV8-+ڱ&p]x[VC}l̺? g_yF(&?z~7xy}deO( + Ђ5[m@+]YB.HYD9ae;] KO_S&(d1Rn!WmZM.Ad8e^Y>1l?8Ni)ǺNTA­ΨjV<(V܊7Zwʦ/|(0n aPfܥ@7!%+[ais7:­0CjuzKv1(<"j) +Rbk +KS- G +YVV!Q k V߂6k7 cy !!Ĥ5,Z00S;&cn呆fA~" IȆ:h?<n#L+H13(aJRN4dPB<~wBf¶h06qgZYtN A!cPǠHI*pŪ1JM\vS o3~rr&Zy|wxL0s#d #CJLI 7;fA.y,i"lm9!@No ÈHi5(ONtJBnh7 p0e U׌6-2u GT +o;:1Hb'd$ l&)jM?x9v'f~&d l48#A`f[{ KfZ!'ЈlLyq4֣!(πLv#AfdvBDkY7X;dΝ1{b$敯5?ހ'+$άڙoe0쐍bJ2uJ͎#h/5dj> \!'dŏ$8L JA!߱C"!OA'.5SKYqz7 p\ . vpU%!ϥ c)w,vU.`.3%rjz+'%α;{+B&c^DD ڑi#\?+2tҢbWs@Fr;+.F \"8G21Gc3mi35dCjS!Ϛ12UPX`cqsdIOD &/V;`gKͳ`@v9^4!C?`Cn8Gsqiaȱ}Z]y+yn~o}2C>gD_h,34$iAI[vF à0q9>`i25w͝G/(  T ;fAv0ױCy*+ȝA$@M"9\UdM`]8$hΆ,),iE[ӤuB'߽EJ(RE@JLpg 41][yM +" C$}S x(!F~80d$g!#N5Md2\ ̓9ynS]r'-"$LMH<4_^:efA& V޽(\6)҄8?p1\K+u@nlz>F+A$dy %= ]!SO D4$dܓWg/F'0@wِE -α#N@,9L dRfFAk4͸;uIOòY8iw!NgB Moɔ$!Nॕkf'dm#DqS&&#3zH`-.M"F9 +0vrʚ޳WgAr#1~u"'to"kjlQ"?Uk]}ד;] Qur,4+ԀL%ZS9SSr*$PiŻgFH˞2 {n²gڤݐ%=mTꞳW]g3>{ 9ZHȼ.00Psƪ}`@뙐S9_L1Ebi Af1^Ӈ:2 LKF;f{p|D`~a^٪oU>{E0 rCޱcZA̽<9<"J3kqIVhSz^RLvG),]h!ZUGw|dhl5:PӑBvsZ5#㦱ɒ &3Φ7ZLЙs}]r o&dO}eYO;zZd9,'<5mVݣ qFݻ!/ՄNbSh|7AlqDD' l (uB&3db2tp@B{P6BJh pPa<%\ M×Ձ[XyB6[v48F ;rFQU<7ܦí| + ,NCpS׼ѫyʐ +Q'RTd5foprŻe4ϟu(\<*P?Vʉ~!'Z&HiғEvE%O \pъb L:DHB/flaH(lB3Љ\QǪ18,]N*㜺LtM-IfO90DlBO;gyӆX;Qu茺Z{i{5?c;2/ H3H 0bFB~;Z#Vkn+5(Iu^r 6 [umE(O`aPF C([ʧ Ԗ"Tcihˏq+G14(ybAY&0$r^SC֡aY3`7zz\;[>/E33yptilϞ"<nu/ !a1v{z`kF>SOJj-('4pFvtM>^)T==>1 Cցz]dFD j`2{'7"/¼BB;:[9AZd‚?+w.;w;s>19Μ``W ~> >۶sg[?g?Ԃw+{/g᯶}[:mFg0`7Ю3;?_?S0s3?b2>f0`hݍ4t\plw9Wn3 dY 6qlnPlA +78[tٖO~Ϋv`Ŷ`ٖP`dK3T +-!ԺPz#D9D9T*9#D5X& k^)pɪUkV\q@.Ⰲ&ϋFzn۰7~;6@N0BⰃ6(ZwFhqL'P?j0;dBE)8axH0+jgZ;TO+{f/<@A탡;FvFG1D1DG6D!+q;%÷g#wDE i-4F0:aަΘwk.\zOLk0 PVRH+h2 Y_Q>fX[5}]"Èrz` p+% m$F"/Sh=a85Nr a柍ZU$5J i|п+m``es3@ vv=WTiN\inhغӱ-Lۗ Σ1nnUq37+Ϋ$0t&j ,u&XZ 4#ߕ80Oh-">b@w[bf#!hF )(>8èRTo+LbILL2Cf|WaL2Մz4` G~xd~^}&HWU'G"T ꆥ*(Vڽ@wyz'Xp-ȶX* MDҘ 7c 9?(zQwm1Y1ƆʥPY=꒙E2T54cAMV ?htC y8eNF"oB nK4"CV.56 5|Fj]UUe!(RQ č[&p[D_O<(;z.%s*%d6(y4JNOگ9r%UOK`>!rYwwwzcU~2(o3RN ΢qws]!?NڃgUpZ',d^t[rvf~~퓻'w_=.{]"h+4UCai{_}>DwV56J{lC-ijj,7)MT2 Ŧ6c]ElKgS2G~kQOm{I~vb+^+TDޢ1>pss[⧕ըHlP!>&鞷txr?5/{e#n_/`.Ogl>Uʽg.?4 "taQP,  Ve(ȃHUړkE >k05/!Vʇ{͝R3KC5;C(E@l|?,g$J{;}ÿ`8 -J 3c"waq   i4g+]l9V6./t-\_sy?6G?=Pnr?;DmEuyI\#B;dT +hגu[r./3hK31Y1o9KїfYutaENֳGvCK i; ~ + v5b͕WY)CGd?fpcAq?7I )|d1atAs;U?@}uci<]RA>CGɾ8-|ÿ_}<hl ߮T%SS8D+N,򉖱 H< CF굻qIg~nKe/:J_~}y3:mq}EanQP] ]l"dy [eMkՐtcT/WŨY 2vx!+V-HT\Z &T G];&(O) I޿8{S?'Zҿ_sL3Ng7 w**v2$?$b'Yb&bEߥ1: @Ȋ>}=TҺWvQ7m=ko~׷'h2a,:cs}l|2XQm>ÆЊ)Cd]:E7tnW}{YvSψP;C;bzfpa4S13BI|tgf/62'7on1Ns;g:[$ N IU(ى2V$ sKu]TpbԻ0վX7O~v*A˽nQeǯ~{  [}W J%Ȕ'zshֿ g^̭hj'CQo)QPtޢ'C{%%e(OK*$SvFTߊ7]Ɓщ_L6HR0PyS-ǡc5m*TL+6 w)NdΒi tsv;CY C/"Åy <ޟ&PkvJ^iƥG~9>_LęF; AAy75 O+)a;aUA +ȓ²i]!?ZTuNHKT+" 'l R9l%[^o"C Q&ԥ4!rcPjϮ=R_:+r:E1(\H!DL<ޗYw.-4h_2O~71g?sgbM#792d"ވzvvޡzwg@&'f20;[s1Uq'~G3+N^xqZ'd>#PU?ʱQ"lo9GdAsJQ 0L:]Js!'a.ũ:mT}cV}k;YAu pfa[03\MլD4ԁe1ǥ{3gwp7lm9svw}c#U e#vᤨ|[85>͞\7d)ཤЄ Gm/wַQşPVE7I_y}I&+*1u|\F&0GD5N&L2ԟw~@njGHUi.nL7π +avPP@>]ݙ ?_zꋯ>`2=<6pq!OFn Lmj^dsg@~Zf^$G9jG#<Wu?"8 c6]>2FA~PX1 <X>Y(uVԛOHQADPjm~P;U-3 ' P9,i>M9ib@A.(ϛ'/;Ei3monr/';(Qe$7Y+o_mD&ڼxkBL^hk׭Ͽ_PPX\ S)YlOf|ym1D\\(TJgc8a()Clv8덐Y"a/NU =KO)AoGPYNdNZGh`n޵B;Aq*80N#bE8g)_ս.1x%7o jiȁ*p_ʭ5_{Tmh{?'}9kf3>[\4oRsvaޡBPWHwhwPW zA6?O#Zuĩ"d$e^C턼fͺ!OHNyUSRncq[tm9NwA2:Ι!;,{;tu!7&AUR)C-:9@ \4p>9Q$d@ SBB@m0*:qcV&ni +=C<)+;Rxg?AQW e_1ӿ>Xs䓸k*s*s+++*TV>yZyFIUړѭxLcdAdz* u)I2NC3 +E1ӞтG 2AϡӝI?W>_>j7VKp ?%j}`Ӷ01m9LΊ +K<}9o⵶AEգGOf߭){1Ԟhպf/A&0 +ͣYv cE:w|~rN_tNgGlzQs1&/?\zԷ>>@il 3 Y(FQ.n@Q2z񽙆!Gd%ij$lRNMdJg)0N UϫkyG + Lcy$duw4l k& +D{/f2W7Uh6&S[lW'/SǶ!cO@31ރ +^dj[_}ۗGh_b~sdLog+26\v~\uA h leOapȨ#P(DQn>03 $#WWFc~ rg$ N6Kd{44F u>fg5yϖ^ ޡ3錵6/*(,+*yanĚv}mlu4wΤ-Ou9-m/3mI 11Y~x3/=_׬k"_*0ߎ?yd|2025mf-aڶ] -! {qtK(TKTXwHu+5g9|v03C:Mv??S4(R]UZVK݇15KTfwjڭMiWe֜;sV7R,H7>>:<>{Vwɖ6E'׬݂r2TTeTh };&'6;WT(׎^7Cnxz,/ὔ-H:2 ѫa7*݊laNi(>1MNP5aC-T0F p jR-y,'_7M`CqXI.^ U'N~yVU^-mkX ew5߅Vۤ%?67)eߤR6컔oKW$}X"蛔o˾/_U/گߝ fE9'^AaimCuj21 {BhLw $,_Ma7v,㓰lVr9޾,J[yb +)$ڬ n:7NkmãcC}"+3iN h̃AРuxĄM ˠn7gOOW<,+Ndܓ^mAnzuuj신UV/ *ꠋ:Uߨ)Ϣ㪶l9Dg O^zݍ^Gl>7aA YZHƆoxΜy_M]wa &:ۈvl@}HKK_WUV +~g ▲꒒׷\vu.\? l}>l}l_];U&V>#a 7o4S7c WZ ׀?ZxEKrEΟN-FZ%/^/W/^m-[9&ts`'ȃյ%HD 7<"H]IQ8Orsb[؇Ӵf17o>ړGoH7@9~&."ڈDiHkqVGh&l,ѽpI7jCz~پ7֭[Ջ]z^]]+^u+/_r+/\_KIOE@tsAS"j?uu} ++v)V#wc!?{b=5mG~ڷ/Ytd戸{n ڂjnw+6Pzk3\5\i+L5T, o xG “uaܘ>۲+>`QF(b4Q}=~ݰC=~aԃ LTLC[UN߁յDAA$йޘIll۵+}N*b2ݽ}+^V<~T*J%2JJʞTݹ_rv8:qg/z9OѳgEŰ*(zZT&U5O+kYg:|wGJ̘9` ٩J JN$ ;4Nd'% H4xM ~_'Z#I~ mx}f^VboޡMܝ:Vp`,Iɧ3vPenSD-Z_^9x5͡{Qf(A ~mZw 3,[F8"Z<㷲QQ:)eIZO*VZ%OZ~*y~٢EN}~r+^cP['!2D #UwK|uK_tw`@C)dC:v6(yN KpP"G qjHo:l;6FSO0EolwPPR y_fGYIY'UIE&@d"Lwɉ/i`Wz74p|r^BRiЌNyP;ӨS~lK+M5BǗ~\Ed tCs0sʣ /_R6ij"fno1p@ e+LH<`jXtvZN8' qvRo`?A-Pqh~%\ϴ-RH8&d.3e R) @!7 +D1jgUR +/9 +P)3_RQpi?q%苎2e~1wi_fG[l9OzN#0h')^6pEnl';8M`w#;!;pn^ IEصnZn(7\  pS9=D?F*V?>Ȟʈ=FNvoHAV`̡r@~[qΐAE3d;4"lgB;qdMC GXO|φ*t8[#UG?<.yz_ܸO0cYcqW'?ΊyޠCC5*sF!9B~_۶0 n|VBv,t'~k7ӐC ڮ NEc@88?8 < 2.PqH|! Ɋtk<Õ/8j)-S?qg{{kڽ!v"{8(IũbAq4١3"1ntc 9&6 a(puǾtvλ)˫vEsߕ-_(4}qu9pdC2E dyJ/P%r4=T;QBwTByoaٮ I MCɨ$$',ZO}#8F[-a2r%!vlb38oi +[hY@-Q!0 =5vqBX@Ay{c2${æ@Ϫ, +wF,M7vuW^,ۊt3O^o_ Eb`CkOF5@Ŏ)5V:Crv<vE +791!\|P w<!;=)[8p<ˀӾ~d~շ6@dx?d{vAڲwK w_>N^OBn4sO/t_>PxYG t4#pS.d'{GtAQ+Hq0M , ݮ!kz¶òퟠ 'Eߡ}HB^!=uɣڏ4d=dJx"l +)ȳP^!* !{NRַGrPsFH& +2K*T׶SAUHLJ_ ^#eGߜr_f}=2u] o.lnwOd/C8yC#%Vnha;4;"vF M hpsp'+.$;GV6{Gd:cGBF*,& g87 gĥ@oOc3VӢ/RG]ne0s\pt}zlE:.Oj;ḙ&=x:4t2WЭ;F8x{.&#J|8:c2ip]r3x}$|p.P]?hB{b[k}[B$4;5aë|^=dfL'Ki4MGLV#0!l"+)讞-zd +f==6W7?*jM5-C{[4,y~Z{Il >BB^_!ڛT+ > v0?H䮑={ F$nHN஀4:sdrR##=+X 서E=#vm;2w%[w ϋ2pʈ62>PO@EׁSo\yS{)9)Z6E|>M^aj5#s*07b:VkCFnHp^X"O tKHw[y8witӖ9CިbEv-d +og/מb-s( >E=8`Mԥ9%~`UQ 澟rέiWeG]y\X%K< Cȍ^a*v0+y9}+FP|X-vw!2(ȍ7[kfKÆ6$m$QmFrG)8M !9 ݡ ݩEO֙Ԁs4 =#ת9 =7,GrLe9 zA!ᔣΟ0V ު,K3,9Bԧ쩬Wb5+:Hd P7( K'MX;JgU,$ɋ*I;:XE$eq;vLٖlɲ.KlK$ {A/r&yo^YRrio=_\@ݼ=w}.qR4!?2vA48yiXxbc{Q% ._9XғnۛߖU!$3%}@L !yQw L'IOE4#kzX]_)(g #j!y=+Tu HE=ueo>s#O$ _7)E4ܭh,pq;!`GaSf唙 +M,`o?Xf ֑$K%5@\PEA8-iƫ)=ch q2ܼF*E2,dvCbՌևI}bm~z%3d-1BucO^GFUv|$IDxA Uz;Z}2z/TsLI"g<.˄md?) k]9+=cS'z<7s~wO6BóH25@ y+~NS \b4L0 bSft%rRKF&ٹ;#ID܅.Ռ `8%&|@8AF!mkB"!$_GlH6xpι^Ԓ'ι7NOhƳ`DC6 6ͪwUub3y֡ +~ f{`h\; KvS + a=% OF4 +uvQ]X9Jk|ޱ53/D>Tǒي*h"s:GFoݛ#X4@^Z;.RQAC/lp)c9TLj"œ$XGrsdX-T 9$C2EZNY97oV9@ͭOZ2D yCH F*!/_rx°DS0e9^& $ 1ym(|M8i XQT_X%3&Ga▙Sa>#fO1^zVnE%yME5L{y$83XFg6=tC$<`fK h:a#3:߿$3Dfa~ڷ(S2Kf8\h>EϔR=]o+^{~USE_i0SjMomMvR$C+20oYR)10%z LQGї6\yWa9zk + LJHsRi̜oڵ MjK򟶞i|C]O%>rfk9Ϟ7[/~zKZ:Bxn횣 /}3Oh-UMibS[eHZXW uymp.Z-GR ^ Yhg|{XI(s`.ւD!ּ1M'ק?>ɵ.=N`\wIM]/|Z™*glE3$+f@264a@|k˿ݍe珟=o/lS=Gw?3 $>z&!}|p}ŐyB>EJR=K[H'b ] i"=,R]n)V́>@Ƣ!X2;L|.bI'Hf*RD:2Q ;aE@.6-FW@r* ',g軋 + \3E Nkt: >w!11Q,ON :0C2'_w< KdO$~j`9'< ?*3[ ly9ՏkFr8[ҥ"$оAul@89k! &2M&b+~ I)ƅu,#ۓJkL pMX#ќU_AQ pˆ!t!* F L|۰B AN7MV[ `N[!_$kJ}XM~sos+\%g0 A!-0zqyɶ 92g`ͷ/%%ocSz/%'>xaTz<[qdГ?:@xr.ywovTζLΌLCw/~BD]xDV^krJ5d)3E̢ތtBWY؛Y;Xl(2hSYS TfOj~kh_3եۨݛߚ,J~uFaOF2'Pu  ҇FtζL`鱡FO ՞:9GQ:3ߴ *a2j8Y=?0t/_4)iXR1129kt ^Ł-r4^Mo2hMg to8ྔ~1RZɯS/~F{!r,O?jjSvtͩU¥Wa1¬>J؝{5ۑ]ؙS,NAv{&-ՑT3]Qd04Z[j~kJ^f +)y{s;(YZDA\{g(,~xd *jr, 'Hg`*)?ҊiE1F+@C-N٩z w>|dKFb@`l9<[v5N_&<6aG+.0-6<&'jԚ9=N-k-}ij: +.^jlJܯvEq +btNHcnމ4֭tfFoIcN +#ZZyyq?V/b^F*V*0t삡V Rpu%r;\^/-|MXZxa mɥjpu9 Xt.þ_[Roi!p{!x{XBC1 VjZ܊/X.t{aeqai).G/Yl S>_P=G뢰lt"`GXCޗq䶦3'}ǟW>N&KÐ?UN04 U{T}}CPpVBӳKS3 (w M`EH`$ H'㓾y LT>~rRW10:uWS3`(86/<:Ķxhbȉi +'K哧?l+J.6 ˯/K/_e γ瘥htĻt><+6< +.>W|p\}b|bWOچvaB\E + <9ګW׮\+W@|9ʕ/x-g"[Wlekה׮/UMNޚ}O7νkkW!<21zu= gZ]m~MuWk_>?tTT)9nӦ8ߜ9.!9.>i=PAVeP !)n -!. Zxhhq(&)1qGz6$l/i# 91qsrrR6X'$ܓ9!1-)9)G;؟";w=({췱PRIn7oˎm۶3e[Cܳ+m߻m;lݳ}=SmOԭض#l{().iK[n7cHۺ#5D_; ͥvwGCIAVV~J=rg{tٹYY99uj ߇gȁ@`v~J?jFhZrKt>oR a\6L0V0SbdaHR;CG" Slg˧h!IB\rh"[EtY:\\6ʯ, sð%(F8r[6<0i}^G<~ <4Q0"E$e,ܥGg?J޴U^!sŁm.%C`s~̤ A@S|*VokWnu5Z}gsVϽŎ `aՀT+5CҺҺ) +:Z 񒚉ꑢªJ.7r*>~ьlN ؂+ȫ*?5SJũ'9>J}AأuY>**1{)Oe> CzrUo(Nqt u?O7;f _6CM؟勯lw\P0r71 ,wrGQ\=VxW'JE ψ ,'o7 ͕ranW;PT*lC8/?u4>0Uآ4#pX^4zNN' H%}AFrP9)G +s 6z1u"9ln$`Fopx +[Q9S ++Kl_~d5J9މYl5v>Ӥ6NŰ'VG}QMT&kkv spQ"g4#fΫ]ӌɊ~I~Ռ`P9F80k|2TĵrƆ'`Cr +0v8l%N!6D%653u] U6a\T»숎CԄJ*qRTgM)?CӢC .$rlV؅UvH;od*HnK|CcwBĖ Ny`4 $}~I*!7ZBU[Sn>1ƛom$11څ)f]WTiךk{ {K*rsϮ[ Ҥ f"y_H쒣sE>%hTNT3"nrQ1yDӼqN8+n"쏊FZER截?hFs4MdhGW6pKurA.R>њ=pCD[o#!LK#1xpo) +"T+SYW. >Q Ϥr@r)&S)|sšqND)FDŇDdGa5<5# a͈q&$ST axM =EX? N+GDhgVRٮ^$9h9k{-m=X~)J ԯl]DR w,5y##cw1]OW?Aw ưaFx FEÐ;q֬b 9E4R2eCQ)D d 3lAR>kYM|#Ut0"Oک^}0}~$DHYHl]w̑< nRiWf׀?FIlң@2S1HyC$?$^bL4EðiHxhz#,Ƒm;ϗXa#D4ϼNbF4/K2L%iHppwCnA)!y[7vpRm԰ ]8ߋvx6޼䫖ݤ0 U:Ov>If)+L\FQ.yFWcX!lGi]\qZvxRvd\~dT~!=<"<4ZT=Ē2 u"O~!>q q6T<\Z?=ET'5aTRaߓX3ݺe,vtXُ"HRPa7V:)yݛ2v{GnMt [FO=oK %ݳqHV{Z{ǦۅS;'ldˍ=pJ ϧQQgvOkBlS=5$ +`YQ7+x˵{ ^đ DEZwtHȘaf)䗨X*'0 sQ%đR~RһV q~.&uɛ2;]l$VHx$?QMlв_;r/edp4":>\ +u:%Qco.;> +J ɔWϒ[󅺜"e +;%rD! , !U`.~irMYob}orP Ix rUNr8-ִwc~I[r&/ ֵi4L7wv +H nB;z֑ B2] +$f9qFF$./q˭L)_i8hC$G + '2mܙa^MԌJ'?k}OtTV{C\2[FQ3W0 |:(6<@66禨¾`*$Em&W?nIQ(A1S$E,dGج!B2\а-kiRSIӬtDNnQ (?Ljr=(gos9)q!90Y:6dž^RGc嘑,|g(=W(6|q?@#yIL +iI  aԈΰo#Bnd' ɉ(nlqQ4{Mdo_~m=81 ڱI>%$$_HvĐm7w!KrЫ$~IT(9SA5Cb/b7)"DH>FÈa@B!auVXRL;@Xӹ{2 +UL[HldXrd*a0Rы&H17.d3DHD 29;FRJ99L% kF\|bpXAqJKAImK*ʴ'0!鑙LN/Kj#" +b +B"9**0\r}ۋ+ib[GJ $0xgwfpDrdmu&&hkv_;įE^P;? +NbݡAtF&;".T9Z5A2%gpC%ԑIi"7,8eZ $#'dM: iNgbz_3(,jC>9"M/em^)lE?f!)y\%E2 dpT W=T\3\JE + lŕ*LU}VbC35C튍|7ax > ν%dyWpֽdT'qGhFCכG$֑L?.0?XN0k8e6+U!u?0Ȑ'斆dGi8KHeBYd̴ Ҙy<щ}ʖrFz3-219]#0lj~ D=OVY:!3퉜?Z[3Z,hPq' ø2W$~J b}n^@~{+ڃ%,)s.O9¾"5ѧ Ad#,b_J @승]O6 ° BX=uT3oWn 9Q")Mt`K{]͝sWzs|1"NyÕozS_5πٮtu>$yqG2l4짷,K(ELD#H;IK)n xz@NS>ȫ`p4.6+ RYEjr5MaHŠJ@21и Qqݡ +1EYOlqQ QLN{FM9{>qmGi}]\VkV^Qi-2 +kuQ}1~:!y^Ñ] ~VO8"#%7Q*;h8O\l"s\ E@Kjfz $ SYؑ +~0Hb,A 6MdY|*BruGĈ,"0oj|8">w܅H,c +iQѪ}`q +qW"U[z$!eķHM|;`@HU£!3Qt(-pt&A]LCTbK1Ȕ 0EUb{:WBoÉd+G/hLgqTQ[Q*"3XaȦkkDO |>L~w†kl}WKY=ӦVɓuϾ~R&T>:r/j0 ^۩PIY?tlވJsI9'Ł--J7PMzg&V={!p-nȡw M9\l`*XXU;X* %5rД5s,4fuiݴߤ34qII<ɖl9bc$]n.{Xj5ڌ"FsTݺycǠS3Pvf۔c0Ӯm'q:]h#c>IJ*TO/cr*nK?ߦ:`ݱUˏ ʏ o԰C~b? ~6FJtCcKK{ z`QKJAkGS؛Sԛ]9Qe{2٪ vO*KNa +awgve즵^z·>uH|).aYy_}Lέݴٜ6P=Rg*Ceq,ve65a-nКzya Z<|hMK&u{>b2E͜3Unc܆0<`HBֈ^Skpnc0ƐݾQB>jOyy5e^Fdp28"4`e2)d*3ї̞L2LA*aڥJ)<5)4n{`+Evn֍G n /X. +,,U +ޅH5>X|{aq5 ^x˦|^Z+ˁU +C ]xh:V,0_zCR`q%b1zwwdje#L*ӌ{TaSSг Uֳ{iw`w~VZp1go,]>~ə}t|՞ roj= Opuֹ03V4L-Oƃcc(A5ɩũx?wi|GII9\a{ZsfWf 4DB(a||b酙Yvv>C~9iMnjҲ<ٕbgEğrEpėY1wObW)մ=c9z+}\|SJ.Hn6j_-V\)}^(|}~A>c +>onkeliV7R5Rߺ +q5ͷ6-=1/4Z6Zj)y[nn]uo4Cs3̷*ؿuKbhh}ex-m}k+oe36HJONJH"(D78–m Pz''&$''nڒiIIa$&%F #!aM/$&$HH؎r丸DT$?`M] Ea6%oJD9ý(gH6oش}ߖmogז{ݺ[Am[<|7A.a/e@&:Ǘ9sv?$w0(^  {'n#rS'oNp--qv% rw0h bDb3vϻ]t\nc^f+ǟxޟ3 Mu.ΖO+OV=8T tvN<*O+NOzdUONzY\frEüN̔ +TwO, NC,|wtZ. 0@‚ga\xBQGh@ρgp&%oFӜ+ ^Zq -CmzC/oK ܾ -O>Ο0ڧE t@/;H]js&lтO*10d,L̹sn9a060<40Y^Cm -dAc`Ǻ1W`|Ĥ-y;[˄sitz1^ + mk!+e25pLF,Cw +Ug8I]6ZR3]X9;,l9el`50dCl%bIRaJ.cl C>*Vy ⴟ# cS1Hcs,B>68O4H> +چB8©/:OFOc>37{p>K޴CQQz\h1F P%CA| &zXUǟc:55cC9[c}c+i!C:$?d  OM=Rq:$>a-ii9T^ v:ɒɒꉢ"LD>Įy㢚 v!sHʆKjGjZ.{, :<&J ,P ~1JT$14PD;N}~ͫzz-Ͻ&PYjhM9i%m!-XJہ/XCCpYad0uc_LcasObMN Zr. O~b[1ī~|'^_ +T "15PPPZ7˯AGDi-*b+AI^Źĸ;H+O ++uuO>⿔=*mt9!] +T#0&H"F[EX#YFɨfDk޾'y,e<'^ĉ' +0,g ~mFզlrQ͈zXކ H>H+ch!E3j ++陋jI 3X(9çm#aHMH^ 1!#[  EUʑüIqø5#ZQTi89_j\NɒfXƑL1|#>Hr[xLv( ac/u@)i2$IIIw}p.%x>V<|x䱎^~4XOLL\J`X3HdQg +KK2Bӑ!C6e_ aEFE~IUa5Đ-4 $H3i^Ln0QEG#E dH +ZC#ØJZ^7ocl&/0u)Z/nPOᬙH2]ZF26ځ,%Qm*4]\3R*jhh#=FDCZprKN1l,|?1nOR/gNagT33먘͌1[|5Q0QGz#'N) 69>܅dH}CN —2OmC5e-p4ӦSui!_`%J+>ɀ-Ù7"pԈpv%(n&T$dQQzSf)2%e%Cla.S>7c8fp0޿W`P~EFarH/q>,E崇5#k򮑜Hw`V187Y΄{wv=/}`9G0򴫝*gl|IclQ)Sx;Rb\G&dXz} -T7]PrĀ*яJʏ*N(NLOL(NNʎOV t&>;Hp@Aj3i?+7HvdF 07rdo"a+O%hHlhKCdQ3l$pQ\~8C4'=2+;6G+?1[~rtIʼnI Q(}NDq ưfDN~d9_#ɡd#ѧTm*8L2$Ewh-LR(xҫǞ& +F74#]Pud";gRdh{YB<'F1#;al9bqY2KȘgr<-Wx.>!~'@g`$3C<Ҥ2%ڑ$Gd-amL^ӇpDtQh%ι)*azpi rPϖ92{QT`Jm酺y û&J@ILiL䦰l IȔ i̞\-w>!!>6*9:ձka4eڸxl +߹Vvj1;X,L /M +Eۻ!ٱЋ)6ixOᑌOaCq`1BaGfrLCP 5X##ҺA鉍 \UsIidfHh"3[_\9”CJWu ; .Hdz-)&Ml&c~Hin{a^;ED&8\K!$I>2OI t0.wdi̞6wD|2=n ZX?7,gk"[I f⒪JG1PRϫj` I?eIQGÚ1O`LIl|B +{OA X!qpMLvm*bNXjD/Ct^!R\-EkM Jő1`8w 9))Y@O Xz +s^H$绑 ,M)\Sf)-[aa1yVE[ncɬT&-U6a)o`+)0 {w~{:Ib}LOnJev痚a~,Dqd V`KKZ  qGe1^ "b]|vuIgG蛜[,ɉI2i30mB@2=Zd}LT9ʇ!cơ}b-fK1<rs2 pWh.&6xXȨfFEJA׮v⦅#6 wbKbo R /1` jLؒIjBAc-hx.$aQ0=ul 6T,ècY~zc߯ksY˻_~6MܭyPd_d8@/jO.eHL) JL`Í/Y<9Ƿ䔚l]6#@iwI)Μ"-Cd\G؈Cd7A}bzaXۉ5R{!iWd7>Ͻ%gݕV }fQM{"2jW:9sEr':DM)-Sj`[dR鰕YiʐX b+aK؉q9E:HN>Vp@4肑 d +[j!VDB2Uj%0ܭqwk<8*8-*gf]3]X}Fb|7[2 +u~Χ)O5ⰜZRn-2m@q)*gxoڧqŇi3grn_HQT4+#b[s09eza]a|D[>o*5f.,1g酆`g]tPV\r=fKE0tzsy6pyG.6IN]QoٕVweruz Ѝvw3Q4Pr/*}:{5R`y &%m*'goOl胀CE[`apdeetx => +^#xZ W^KkrQbd2,缾ؼ^o3Uˠ2CChOV!"G6F3:GoL`ar5_us~G:ݙ\efaOfv2jNtyݝV`in> oT (gȒDwq<뇙̮ Vw&[6L#1u໥ KŕJ0\X .,XXG"W a5"`bph*nٴT(n/o/.^^ZY,,-!\.1-+@`!‡Z^\shw188|Pű0ʦ-ܕ߻+O+;'=z`Oaw~wnW^yGsݏA;vʎ>=_^w>.iӎxYVg\]4ݮ]y'_@EQvoaY8oo;gW榗f&'&'H7Q bS𕙕М KKzIINФ3_ \ZX_X6]wAopaӏ_y2 59ʶҊV~YKXvXvP$HXvPUzF[@!@M%[ʎFͩgFN ތKH'is`Vy]Q-j痷(KhH +@JXz[ץu:[gOReWS豫zTʾ *%w_5^͔F;֌~:vh7%n+/}}gkU z m*@Cppz9bSzXh5cm.n%~sR"dؼ5aPAldKR![> +endobj +397 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F17 452 0 R +/F24 457 0 R +>> +endobj +398 0 obj +<< +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +endobj +399 0 obj +<< +/S /GoTo +/D (AFN_AMN) +>> +endobj +400 0 obj +<< +/S /GoTo +/D (section.28) +>> +endobj +401 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F17 452 0 R +/F24 457 0 R +>> +endobj +402 0 obj +<< +/S /GoTo +/D (subsection.105) +>> +endobj +403 0 obj +<< +/F15 455 0 R +/F39 456 0 R +/F42 459 0 R +/F17 452 0 R +>> +endobj +404 0 obj +<< +/S /GoTo +/D (table.caption.120) +>> +endobj +405 0 obj +<< +/S /GoTo +/D (table.caption.121) +>> +endobj +406 0 obj +<< +/F17 452 0 R +/F15 455 0 R +>> +endobj +407 0 obj +<< +/F17 452 0 R +/F15 455 0 R +/F39 456 0 R +>> +endobj +408 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /WQDHNC+CMBX12 +/FontDescriptor 481 0 R +/FirstChar 12 +/LastChar 121 +/Widths [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 +562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 +312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 +562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 +562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 +531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 +879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 +839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 +581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 +343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 +625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8] +>> +endobj +409 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /VPVECV+CMR12 +/FontDescriptor 482 0 R +/FirstChar 12 +/LastChar 121 +/Widths [544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 +489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 +272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 +489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 +489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 +462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 +734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 +720.6 544 707.2 734 734 1006 734 734 598.4 272 +489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 +299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 +544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] +>> +endobj +410 0 obj +<< +/Type /Pages +/Count 36 +/Parent 483 0 R +/Kids [243 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R] +>> +endobj +411 0 obj +<< +/Type /Page +/Contents 489 0 R +/Resources 490 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +>> +endobj +412 0 obj +<< +/Type /Page +/Contents 491 0 R +/Resources 492 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +/Annots [493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R +503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R +513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R +523 0 R] +>> +endobj +413 0 obj +<< +/Type /Page +/Contents 524 0 R +/Resources 525 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +/Annots [526 0 R 527 0 R] +>> +endobj +414 0 obj +<< +/Type /Page +/Contents 528 0 R +/Resources 529 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +/Annots [530 0 R 531 0 R] +>> +endobj +415 0 obj +<< +/Type /Page +/Contents 532 0 R +/Resources 533 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 243 0 R +/Annots [534 0 R 535 0 R] +>> +endobj +416 0 obj +<< +/Names [(AFN_AMN) 536 0 R (ALC@unique.36) 537 0 R (ALC@unique.37) 538 0 R (ALC@unique.38) 539 0 R (ALC@unique.39) 540 0 R +(ALC@unique.40) 541 0 R] +/Limits [(AFN_AMN) (ALC@unique.40)] +>> +endobj +417 0 obj +<< +/Names [(ALC@unique.41) 542 0 R (ALC@unique.42) 543 0 R (ALC@unique.43) 544 0 R (ALC@unique.44) 545 0 R (ALC@unique.45) 546 0 R +(ALC@unique.46) 547 0 R] +/Limits [(ALC@unique.41) (ALC@unique.46)] +>> +endobj +418 0 obj +<< +/Names [(ALC@unique.47) 548 0 R (ALC@unique.48) 549 0 R (ALC@unique.49) 550 0 R (ALC@unique.50) 551 0 R (ALC@unique.51) 552 0 R +(ALC@unique.52) 553 0 R] +/Limits [(ALC@unique.47) (ALC@unique.52)] +>> +endobj +419 0 obj +<< +/Names [(ALC@unique.53) 554 0 R (ALC@unique.54) 555 0 R (ALC@unique.55) 556 0 R (ALC@unique.56) 557 0 R (ALC@unique.57) 558 0 R +(ALC@unique.58) 559 0 R] +/Limits [(ALC@unique.53) (ALC@unique.58)] +>> +endobj +420 0 obj +<< +/Names [(ALC@unique.59) 560 0 R (ALC@unique.60) 561 0 R (ALC@unique.64) 562 0 R (ALC@unique.65) 563 0 R (ALC@unique.66) 564 0 R +(ALC@unique.67) 565 0 R] +/Limits [(ALC@unique.59) (ALC@unique.67)] +>> +endobj +421 0 obj +<< +/Names [(ALC@unique.68) 566 0 R (ALC@unique.69) 567 0 R (ALC@unique.70) 568 0 R (ALC@unique.71) 569 0 R (ALC@unique.72) 570 0 R +(ALC@unique.73) 571 0 R] +/Limits [(ALC@unique.68) (ALC@unique.73)] +>> +endobj +422 0 obj +<< +/Names [(ALC@unique.74) 572 0 R (ALC@unique.75) 573 0 R (ALC@unique.76) 574 0 R (ALC@unique.77) 575 0 R (ALC@unique.78) 576 0 R +(ALC@unique.79) 577 0 R] +/Limits [(ALC@unique.74) (ALC@unique.79)] +>> +endobj +423 0 obj +<< +/Names [(ALC@unique.80) 578 0 R (ALC@unique.81) 579 0 R (ALC@unique.82) 580 0 R (ALC@unique.83) 581 0 R (ALC@unique.84) 582 0 R +(ALC@unique.85) 583 0 R] +/Limits [(ALC@unique.80) (ALC@unique.85)] +>> +endobj +424 0 obj +<< +/Names [(ALC@unique.86) 584 0 R (ALC@unique.87) 585 0 R (ALC@unique.88) 586 0 R (ALC@unique.89) 587 0 R (ALC@unique.90) 588 0 R +(ALC@unique.91) 589 0 R] +/Limits [(ALC@unique.86) (ALC@unique.91)] +>> +endobj +425 0 obj +<< +/Names [(ALC@unique.92) 590 0 R (ALC@unique.93) 591 0 R (ALC@unique.94) 592 0 R (ALC@unique.95) 593 0 R (ALC@unique.96) 594 0 R +(ALC@unique.97) 595 0 R] +/Limits [(ALC@unique.92) (ALC@unique.97)] +>> +endobj +426 0 obj +<< +/Names [(ALC@unique.98) 596 0 R (Doc-Start) 597 0 R (Hfootnote.20) 598 0 R (chapter*.124) 599 0 R (chapter*.3) 600 0 R +(chapter.114) 601 0 R] +/Limits [(ALC@unique.98) (chapter.114)] +>> +endobj +427 0 obj +<< +/Names [(chapter.122) 602 0 R (chapter.15) 603 0 R (chapter.21) 604 0 R (chapter.31) 605 0 R (chapter.4) 606 0 R +(chapter.5) 607 0 R] +/Limits [(chapter.122) (chapter.5)] +>> +endobj +428 0 obj +<< +/Names [(cite.Kaye) 608 0 R (cite.cellularA) 609 0 R (cite.lourdes) 610 0 R (cite.monte_carlo_tree_search) 611 0 R (cite.pedersen2004complexity) 612 0 R +(cite.russell2010artificial) 613 0 R] +/Limits [(cite.Kaye) (cite.russell2010artificial)] +>> +endobj +429 0 obj +<< +/Names [(cite.scott2011minesweeper) 614 0 R (cite.sebag2012combining) 615 0 R (cite.studholme2000minesweeper) 616 0 R (dummy.1) 617 0 R (dummy.123) 618 0 R +(dummy.2) 619 0 R] +/Limits [(cite.scott2011minesweeper) (dummy.2)] +>> +endobj +430 0 obj +<< +/Names [(equation.13) 620 0 R (equation.23) 621 0 R (equation.24) 622 0 R (equation.25) 623 0 R (equation.26) 624 0 R +(equation.27) 625 0 R] +/Limits [(equation.13) (equation.27)] +>> +endobj +431 0 obj +<< +/Names [(figure.caption.102) 626 0 R (figure.caption.103) 627 0 R (figure.caption.113) 628 0 R (figure.caption.116) 629 0 R (figure.caption.12) 630 0 R +(figure.caption.14) 631 0 R] +/Limits [(figure.caption.102) (figure.caption.14)] +>> +endobj +432 0 obj +<< +/Names [(figure.caption.29) 632 0 R (figure.caption.32) 633 0 R (figure.caption.62) 634 0 R (figure.caption.7) 635 0 R (figure.caption.8) 636 0 R +(page.1) 637 0 R] +/Limits [(figure.caption.29) (page.1)] +>> +endobj +433 0 obj +<< +/Names [(page.10) 638 0 R (page.11) 639 0 R (page.12) 640 0 R (page.13) 641 0 R (page.14) 642 0 R +(page.15) 643 0 R] +/Limits [(page.10) (page.15)] +>> +endobj +434 0 obj +<< +/Names [(page.16) 644 0 R (page.17) 645 0 R (page.18) 646 0 R (page.19) 647 0 R (page.2) 648 0 R +(page.20) 649 0 R] +/Limits [(page.16) (page.20)] +>> +endobj +435 0 obj +<< +/Names [(page.21) 650 0 R (page.22) 651 0 R (page.23) 652 0 R (page.24) 653 0 R (page.25) 654 0 R +(page.26) 655 0 R] +/Limits [(page.21) (page.26)] +>> +endobj +436 0 obj +<< +/Names [(page.27) 656 0 R (page.28) 657 0 R (page.29) 658 0 R (page.3) 659 0 R (page.30) 660 0 R +(page.31) 661 0 R] +/Limits [(page.27) (page.31)] +>> +endobj +437 0 obj +<< +/Names [(page.32) 662 0 R (page.33) 663 0 R (page.34) 664 0 R (page.35) 665 0 R (page.36) 666 0 R +(page.37) 667 0 R] +/Limits [(page.32) (page.37)] +>> +endobj +438 0 obj +<< +/Names [(page.38) 668 0 R (page.39) 669 0 R (page.4) 670 0 R (page.40) 671 0 R (page.5) 672 0 R +(page.6) 673 0 R] +/Limits [(page.38) (page.6)] +>> +endobj +439 0 obj +<< +/Names [(page.7) 674 0 R (page.8) 675 0 R (page.9) 676 0 R (section.112) 677 0 R (section.115) 678 0 R +(section.117) 679 0 R] +/Limits [(page.7) (section.117)] +>> +endobj +440 0 obj +<< +/Names [(section.118) 680 0 R (section.16) 681 0 R (section.19) 682 0 R (section.22) 683 0 R (section.28) 684 0 R +(section.30) 685 0 R] +/Limits [(section.118) (section.30)] +>> +endobj +441 0 obj +<< +/Names [(section.33) 686 0 R (section.34) 687 0 R (section.6) 688 0 R (section.61) 689 0 R (section.9) 690 0 R +(subsection.105) 691 0 R] +/Limits [(section.33) (subsection.105)] +>> +endobj +442 0 obj +<< +/Names [(subsection.108) 692 0 R (subsection.119) 693 0 R (subsection.17) 694 0 R (subsection.18) 695 0 R (subsection.99) 696 0 R +(subsubsection.106) 697 0 R] +/Limits [(subsection.108) (subsubsection.106)] +>> +endobj +443 0 obj +<< +/Names [(subsubsection.109) 698 0 R (table.caption.100) 699 0 R (table.caption.101) 700 0 R (table.caption.104) 701 0 R (table.caption.107) 702 0 R +(table.caption.110) 703 0 R] +/Limits [(subsubsection.109) (table.caption.110)] +>> +endobj +444 0 obj +<< +/Names [(table.caption.111) 704 0 R (table.caption.120) 705 0 R (table.caption.121) 706 0 R (theorem.10) 707 0 R (theorem.11) 708 0 R] +/Limits [(table.caption.111) (theorem.11)] +>> +endobj +445 0 obj +<< +/S /GoTo +/D (dummy.2) +>> +endobj +446 0 obj +<< +/Title +/A 709 0 R +/Parent 7 0 R +/Prev 250 0 R +/Next 710 0 R +>> +endobj +447 0 obj +<< +/S /GoTo +/D (chapter.122) +>> +endobj +448 0 obj +<< +/Title +/A 711 0 R +/Parent 7 0 R +/Prev 712 0 R +/Next 252 0 R +/First 713 0 R +/Last 714 0 R +/Count -3 +>> +endobj +449 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DINPro +/FontDescriptor 715 0 R +/FirstChar 0 +/LastChar 53 +/Widths [562 249 426 668 530 490 421 526 264 673 +447 252 545 501 270 522 522 522 522 611 +294 543 530 332 562 879 545 496 630 447 +562 816 724 255 696 637 297 355 562 522 +683 573 282 656 522 522 522 548 314 263 +588 545 650 653] +/Encoding 716 0 R +>> +endobj +450 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DINPro-Bold +/FontDescriptor 717 0 R +/FirstChar 0 +/LastChar 29 +/Widths [573 232 426 638 325 555 543 455 275 352 +573 876 480 560 534 548 501 628 494 573 +811 759 620 559 571 342 668 591 572 573] +/Encoding 718 0 R +>> +endobj +451 0 obj +<< +/Length 2472 +/N 3 +/Filter /FlateDecode +>> +stream +xgPTY{ MI$$A@wiAQdpFI AFQŀ((N#2"**K٭U[gxsOs[ 1 M:1C H(JN!csϑ>qyvy%.ʱlN2kwr4;- +8=%1{iW-o!o\VkZkL0+tj ++|iA/o3`?( Of+yS/T7orL@ʿr`QWN=t8@W)Xo9Ȁr"dQ(s+*JG*PM5(jFhS :Fї)"hc,1^pL +S9Lc>` X! bl/v;]ƉTq8/+5zpwqӸe^ow+mk'A`F!v* g7D +QhO %O/ߒH$5 )BOj&]%=#}芸ErEjD:EFD^qdU-y+9\A>GKʼnڋ=/:.(F3K+k)6KP(6%rr2EEPTuz:MCiXZGmA"n$ !^#~QOGxz ,}IBNV#OMbDbIRFF#Y(.9*I!('u@K4RZKG:]5y KPcYXVKW6[좜\\Uyy|||UJ!F\K8ÖϨd3e]Sԕڕ*㕙ʑ} * +**9**UqLhêKjjj{պf%]ճ[՟h4544h5qG4iZZZ5Zwam#Pq5!Lu=ttt_oߨ?a@1p331PːeXc`=iiq=4{53bbj3i33U1 35gҘb 3Y&)gбhݠqÔee%ߊafůohn`Fنmd3cik{Ϯn~eCÐ#߱񙓒SSӂseqW9Wk낛~w&jZ<O瓍AI޿}}j|^lnڶe{?;  Tr@h@sRC`Y ?H/hG`LH@HSf͇6OmQߒV[/n#o v. 9+!|156be:zŶa82LedYleh7.uKq^q'V a nÉډ$CI > +endobj +453 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /VPVECV+CMR12 +/FontDescriptor 720 0 R +/FirstChar 12 +/LastChar 121 +/Widths [544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 +489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 +272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 +489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 +489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 +462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 +734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 +720.6 544 707.2 734 734 1006 734 734 598.4 272 +489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 +299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 +544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8] +>> +endobj +454 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /YXMHHU+CMBX10 +/FontDescriptor 721 0 R +/FirstChar 11 +/LastChar 121 +/Widths [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 +575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 +894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 +447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 +575 575 575 575 575 575 575 319.4 319.4 350 +894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 +904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 +863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 +319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 +527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 +575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 +606.9] +>> +endobj +455 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DRKHFF+CMR10 +/FontDescriptor 722 0 R +/FirstChar 11 +/LastChar 126 +/Widths [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 +500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 +777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 +388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 +500 500 500 500 500 500 500 277.8 277.8 277.8 +777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 +784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 +777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 +277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 +444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 +500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 +527.8 444.4 500 1000 500 500] +>> +endobj +456 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /RZPCDH+CMTI10 +/FontDescriptor 723 0 R +/FirstChar 12 +/LastChar 122 +/Widths [562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 +511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 +255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 +511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 +511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 +511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 +743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 +729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 +514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 +306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 +511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 +408.9] +>> +endobj +457 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /XPJKDB+CMMI10 +/FontDescriptor 724 0 R +/FirstChar 58 +/LastChar 121 +/Widths [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 +827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 +803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 +828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 +429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 +298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 +484.7 715.9 571.5 490.3] +>> +endobj +458 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DBCZPB+CMSY10 +/FontDescriptor 725 0 R +/FirstChar 0 +/LastChar 106 +/Widths [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 +777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 +777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 +777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 +1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 +666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 +722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 +718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 +695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 +724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 +444.4 444.4 500 500 388.9 388.9 277.8] +>> +endobj +459 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /ZRYVWR+CMCSC10 +/FontDescriptor 726 0 R +/FirstChar 40 +/LastChar 121 +/Widths [436.1 436.1 552.8 844.4 319.4 377.8 319.4 552.8 552.8 552.8 +552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 +844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 +712.5 851.4 813.9 405.6 566.7 843.1 683.3 988.9 813.9 844.4 +741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 +669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 +624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 +613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 +613.3 613.3] +>> +endobj +460 0 obj +<< +/Length 46 +/Type /XObject +/Subtype /Image +/Width 107 +/Height 105 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x! x2 +endstream +endobj +461 0 obj +<< +/Length 6588 +/Type /XObject +/Subtype /Image +/Width 229 +/Height 162 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +xZyeeu}wy[w^g`fpdPḚ7F\HJ*&B)EXITJ*(DS!˜X, FcKc0 t[oF+V=s@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ýpPJћG@+kNfKyP%-U-E+ +s;7{*}MiseYTmeA_PV8za,(Jf@^0w.8_,2:(yFtt-ۨaMνkD΍ Oz%h?w: ~ +I^ +Ed:`Xn+d+EZ9hdACfWlk7]9}_1zacyh',NR9ZY7dRVK)/73vh-tas.,_*lmcmߎwùYO,[g(wo)2:`}dYnFQ6 +}s.(i51y%Yc~z)J&9C!+#AtbJۛRC4S2KjQj3>Θ6ĕ LFX0N 5 @߸Ko.G0ӯ>o,,\{=܍E +"dvcއlVtI"M7B{, &LaO +N҇v[duUZ#۴*enʑU`&zg64 0>ΞPjgH{\WsY>s.x6=IESfYg,;HDwх_z ™+ڱq'DIMs2+f{hXf[ ԄRҩ!bXViײ4P:]tE5W)F4/YٺZF ]*{{2NƩ%4:7*wz4,:׼GN߇1QT-mEnW)LWGB\6kyHZZ2$l$&1&.:?c1Qp1 t'.ߢ16T!ˎvS4_,&`'F2Ʊ%S!\"I8('J`cli:O'Nt.IAj.;5Y8';*-@7uW6B,]UrYei#eNj=<%;huZ +VU1w1 +)'b, ( +p̯$Ĥ&ɘ=y`ٸ k4 6&hXgHG ]:o/5NSia6׆.4hŖ,6RCUN!M1@KRg. +Wu)Ml?fV^:ddR,*8%ԧ 0BeLSU['P'=F_z_V>z+^ D[t/v7f͢XXf1Q{|Ԩ旵%cgВmұoM[>䦟c\uEs[r\X[3ހ?T ZSJ+8^).~.=5P^z9x8W5WȻތѧ$z~X`-ٍWsz- +7WxMFOu\j&|ˋ_a~h9,iB4"݌Pie(]]zt'`te@5Uಊ:q;IspE⨲ɺMW ĝ3 V)bS*BA$Ft^" CMzJ  +_a~jQL?^l$2"Tzq'3cCX=Aa[Qnp£\ac_4'aRtL5cXHRG.=okXoP bK7CӑnnL9׃(˟lj߇oE򵯠\[qj +ͦؓauS3c>iԤ Ұ<6g9ojꓕ%"Yce/~lv^96LR \ #0˄:{Ky|!y(FPt8 4.4~g]޽{ZCDPs١k5}8 +p]í'yEuTѥ@_#벰zquD[d[F\^o5Z˵ U;l)|k'ɑE4ɦ=F8yfCŮ8}zaoRtY>v$G˯}WXНz';0w#Qnێ,b/c+%6FvǖPYCIe hM + } {U3&no\6i3Vd06t7{u}R3N4Kl9H9`]0c}>rP^vq KŽ`ɗ սgԎI6Ea$Ib' R:dvۢH'CX#>g$N܅+kX3*#0$G20ܓ熚Mi&CRjTj8qjJ찉 o$yY7ӦPs6Nl4ڒ`*u5gi]ZPȋ† iE&2<[t4<)UHo>ڎns]R/BYakJ\pnc(=ƂiG~ y>8<1إq),ͬ.w4ݔXn[7KtWIenBs:4_.ABTv)9 +/dnBccMyQʃ̺p8Hӊ;>+w#jRD.,RnTݩ`JmtAAn"pSEjdY45G!GQT1eu4GxtGu_G!&LtOM!cТc]L/z*nR&1N b9?#ft +GC X]``8":kLql^i%&VoLM 0;#V=8Be )oKc0 `zv7M2T|T"cz +OَgEcׯAiьB?Bcς\pF?*¸pl +fwԿ0Q"Sp.׆c!eH^=.|^J۝oS<6Zd ] +/JNGG]{E;G{8()?cNF)NIN3\T&HOM蜀ފH/tV@: +I0ZC`ڹ֩~[.á/ [##/^լ(ZYO9BO<\#(jڭ1v7aR`ٯqYO1 a?ۘp`ѧI~R{.PāHTɉFi@xݯCشu/vѥ?Q*˪MHEOOrT՝SfhSm?S-boz uحoÇpޥ7bq~'sn )K +| O(IDTaU꽠_G5&" 4E}8gn嘙ZMўƎw/U +ZP3nypj+#~+К y.fET.ŭ~7=0NP@D')mEz`aRy8MxG:TSvy 3p/i~ԤT *[AqRzRo^RM1o'f,W\~^z-:0v{lPɓwil_47C,G:D"37'8iI`]/$ O#Eea!rAr5%!!r:f4SRJZkM%-CJ\_[ : b@\Jm*)ZfwL^ojOKHu,dc9r5>k}+V~.L/<5Gzk=VƲNOzb;i")]%GORJ>M<;1x>2@ OpV'7ްٶ );⧮s7o~9ncBqdzjc|d9TXNu P2<سXy&=]I:BTEuhFF&rbnFO#OL:j%{\\Xl +<gyS{)蒇 2rwqNg'l 6ϫeLdt\Ӎ,Ϻt;(,!)d Yc#:,}Mts9sa:ߣ߭V'>yw\iEfѳ^QT T#>ã,ܲglm$ ey/׏W]2bY̵֔}iLA7@"RQ2}J15i4"E6-Rb <\z *6}X1{'o#m ~%oӱ;EÓNdV7 +gD.#Kb[ˌȅDwŸ7ߺ.@ @ @ @ @ @ @ @  K.͸9u^3_, +@ @ @ @3 +endstream +endobj +462 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /FKUNAL+CMBXTI10 +/FontDescriptor 727 0 R +/FirstChar 105 +/LastChar 117 +/Widths [355.6 355.6 532.2 296.7 944.4 650 591.1 591.1 532.2 501.7 +486.9 385 620.5] +>> +endobj +463 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /ITKPKI+CMSS10 +/FontDescriptor 728 0 R +/FirstChar 11 +/LastChar 118 +/Widths [583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 +500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 +777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 +388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 +500 500 500 500 500 500 500 277.8 277.8 319.4 +777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 +666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 +736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 +288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 +444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 +500 516.7 516.7 341.7 383.3 361.1 516.7 461.1] +>> +endobj +464 0 obj +<< +/Length 3632 +/Type /XObject +/Subtype /Image +/Width 112 +/Height 118 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +xZkfU~sxL3ɈhFTvaTJ LnCQd!BE~$3A.T"R1d&Ofc069|߷ok^Z{۟yn{3eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔEocKfAUukfӹCǿ[`-Il"E!ךp3}zw^5|¹n70*}ٴAS{tΠ,h;ވ{J^3 a5 }5֢k-f34eIVݢ·"2][Ut`t{rqJS cY16ߚ>p\7'c82V hGt0(`g}$NDY6V"Lб"?.2VB<oI 7\I7֡mxB +5,ο}?^yv\{p=xՉ;0ۋY>ɓ79Pao~(>Q|$}F|K2;Q>51:G;azIЖEAjH_ɍD^7ex>(%UaL6cj*kDk+r,fHʃc8۰vuk/ca/C1&(ߟF3)0*B qЋ}ogՍS#kCJprd9_StlX5:(RFgOp>Rw\>q%(r dώX}tD`+kPP]+ߑӕň> VLR +)Ĩ2HY.oVn 5#FS0N/f#1nJHtuӲc1P1 oƆr>=Xv|0 f>xÚ<$IM@KR!ym YTV}nTI|Ї -Yu(͟uKUCiÎDl.X޳Y8g$F~3|s!R]Y! S&JN[er,j=&;H +TZSI9F;4zD!n1( -#sP-!)լC5g +%`cRSƃ?A?Uƴ>)89gugMTNci Cvф_TxqhOh \$TNz.!<> ]w5VIRaY|)GqtR2Bjr#OB}s;͞y'b#zg8q0=} +##oc1z0˻aQL2XE 'Fi +mlԱ ۓ:ӭژV9F]\mE`MjF; GcSt7 jM'9 }sMkky]`Ӏ:тs8;s߽xSGqꖣ8[1{~Gh?_7ބ};܃} ̨AOmܧjcgE2P6˹efNBv 镚b`H@>ȚJcR"M<"9W6*RԤTI}E3BEhS#c.}#X0{V f IX4ʡӋ8Rcf#qiHI)Hz '#cUAԬP~!.xTh08ڀqhKM <1,$TJm]c]jאfFJcWzPa'FcpgZ\aG0 M уУ2&#uNPJ$ snQG0F$ s_7DuaKB( BhCBOg Ktoeؿ ѢLEphZcaBxY9O@ sA5z_&}TjMJo&!AYZž+Ɓ|+X)j,FOÓ Z˘> jCz h`%bIu}ctG2\ V{U<@R2C_gJ𔀼F Q JBrp LeRjl<+`!F حžjBqZ-Bkn5m;x 2*=^_LӉa)6:8G>9 @^|P{ڡv$txIU1Į0۪xحECX3~`$N܅it6D6w8v^x<7h49 -xah]Tf8qj찕脏LiL֋)q\}ԉF;mx\>MYbpvT8ڮ!͵H*<|EHL!]g> v]8BpC⾆mӅ2//N;WgfHٻ7*v6 4!%;'6di)V[7mKS:iCޤk׊Cmg+=4@Ǧ/Nw}E![Eڻ#\.TF}Հ㰰~cy9tg~KYl~4/eEEE1Fy`8B:i;l8}p""C꿜D9-.!e٩k¡lV8,HTř M +O'zL>/g K9֖3Me 6L{w 6Nw}?'~OzqL)L|&[g(H Y]ѥoY^S)vT2%OoC'OgqεґgiѸĘuTNK˄^'z4A+`'9VA Pcx V$̧bSQO[9E-(͌ +bh$ pAlpk0A*ӏ}@W&/;/}(sq'RDM>b +p +4ùg( +:2&jIV{rM"MۜB"gD`NbF%z龗)p:d%2 #>0ik +endstream +endobj +465 0 obj +<< +/Length 19206 +/Type /XObject +/Subtype /Image +/Width 182 +/Height 182 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +xgtTG5,< lc{&EF($(L0`lrP(K rVZ9G={sg|NwEַ?]ku[}] uNc36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c3[طxyaM&wqq- +Zq+턦 = +ss حEck7Lae0LMī;co+{7b +A^Zg )n6 ~7s>m MCgz˻BVFT:6cuDaTMXcMI C1`011SAtTwDݍbUp"5=Z ̫@"֡'N!x vMՍf&:y!rsԳrKaN`=tS[P$0OSySڦ'$CO͒D\<@[Swt~' lEv^3-#b lW Z1&,orFSao#VmJ":(nggy Ύ^Q$rb:5oTfh1iT`'v\$Y;vGw~g+no \Yj|n$Зx!4vS+P U:uJ ()S؊SxwSTG9^h/cGmV{u +'(I`K;_keA8k d-$|Iܛm>;*DlF"JapXZ +*Kg$0\3ˬdRXWyj0} +㨾rpY$'MG`tU2ԡut\츨v c|gDwŸ0ltktWz  A['I`7(=khn3*<~X-|E_)Ƞ[8B ˈNYn';@f +n +k[kaU{U8܎şgѝ;]ŘRNi0ScC5 ,c+3K1u]#pwKѩt]eDE幓mHWeN'0+q<.T/SlvXC%R5:V(d(qEJ])ȬT|$]Ζ/`Υ8[z Tk C"E; fw#Xی@Attv}1эERӭJYަh+d c-b#ݤ$bVce >!S֔a wtwI`nŃ 7 N@$,ӳ+}f3f2[ެS];a=t$0`'m8XF$:)XԮuk¹p=1~X#z{Ht4s4}Io5ʁP-!a{6dc2Uf+0Y|F0څi.ȤdVj&{z:X0_$0 fc}IZu +BᏂ@;énJoҤT!/H$>\o+J=@Y&lwXcHQBqBy +Z$n uS7 c $/ֶʬ0\ur +ڤ$yR2p#N|VX^HG`$N-,:{OB$fbhI(#6ak?fScG*:Xj¿rBWԲ~ +":W' 3 /Bб:LutjR*Э3kR|5/L/$2Ef&&0qIyxԑw]"+ǯ*|>qf03v` n}p69R+ݚܶdiFsp@ c!]Q/tJ_źV ᚏ%%f-<MG=q*1KO^1v$0L uT4&gJ w"&&1 c].5X X ңVoE}X`"?U~EߑLڐoIҚ*:~Gj>}M-U%9i =Z7ye.;.u,ٳy7\2.O`J8̛݉zˬӐ@Ivúe-S @!Nԛ8sK,-/my L vBM.Afh ) ZHעAdB+etiUL81U<>C`U,Qen8z mN;M9\{,0g#{=UcĂBq-|0%Zc$>'NI#V!ytSab:V5vGۦ-97Mg0/tv^]֘3k1zQ >u[K`? 0/i(Q2=1Go^g*88zY|">>q;E|_Ƈ_¬L&bpM2nsYڦN JEi@z Z~- a¢m[Ӗb8uY(47UvihstD +k1x5gZ'S6j[V*lEСFiAʵe !!/^ӗ{k>kaۀ")猁j]a O`$dN.xu9r7W:t`𚳩oo3l73>glr1ŷ"Ne&FG`Mc$Pԉɐ@>*lxЖe--Gb_9@H% mg!{$V젩#SI錁fcȇ[0꛳bL\QJT`=.l2Րf ⻐+3P:]=hkkGcc3N4b+ 8p^;[qs\7%߮**2bCؽ^Neuv1vMvލvX촷!C!tbld(LLKLM&0Q4R·$7KZf|i`UN*˪mfOWv[ %,PL[Y{l٨"<ޖ}L +S/MXuc *p]@XY۠uC)g^d\0/}9%㖗е1C,Ƿ+rK9'\mFjz>bqB4N>gx4N?t +':,\)H5BWӕݙ1٦cy̌ ,0=$QJv}͕r[#.xL+&; Tytxh*o9 6S +|sLQ(18Z;#`J`ec~=Bo +0j"1r +jm12-&b"myEkĐ//N(wBo1QmS $VXv<f|7`N@,׶dv>>K7K 0~i.V3]Hʺ+ 8q:;#pk .+<<p>AzAcP&.3*x-$(|(+ܫ1y$P\N8q$pHznfG?KDr,|NtN xS|L x~2'G1yDD;2BU$_ši{ˈ{-o`%7 +|j-~ i)q i{^'kt<>Σq.gfvZ/Cf4t1CJ ]ǚ&n0u/L-1ym=Vn/Ҡ'3 Lkb̶rX{ }c5XdcOz d’E^XģwdYXw s=rCFX_eͩˮv"Pta_IV.N=T Pշ+GȪnJ>5{q-'P'ȣ wo D:s1Q7jllgTʣNCB :(=mu]U.M7jQ.o@$YK:a|.*k1my!o `Va +ۤUEhł&]h rH"0r}F:JHXbպ(D _(DLX%ױio5kTcv؋ YmGhozhiav&fMDM +MM]Ds=2Uoc ;ew,8/]-|!TzHn sG6h!7{#VcWˈX˥o +|u=r%> +_M?|0.BqOD0]mD]Q)QET9Uj6TTApTh0AiPPفa;a5QDfuwZ;x +UʫTU QJ4q73sM(G?@*mtQ܂77^ѣ11obخq͚ Y(aM[x^6-k˭`&|$)S,ZK6`3<-ks?%ll:b.(ߚt|KW|T d!_`0yxahv`y#>ŝb AuR^#1L >l!/2BP<m2yAF[K l?p,~qne?( }} +;? FNWVI)x!&c$Sx)S3{F| ^p/_fs~|}%}s ?^f?sZO3j0>kn~ Clg?xz~u=}x|j>./w1yk/_1pElG GlVgDhxˇ8I'SCŌZtt+TģGzS{* 7wj}Qh3놦U,1KpTqY.$:;Z}]D8cTH$PY\qKKij&N;ĝٛd +o݁{`.qw<-m^Ą aLqTL:?Ez_쳖Z fIEc7ѣ)xA<?|#u],%$ >r2{ZjPG[776+6kxNeY! o5KG¿$4yj ˻9 V`u @ZL^!Swsp}!HY{> / >@^a#ؾL 4v*3TL˙UH%JT]{qU="v(Ȑ=]s3YgLM ⶾ_Ima?wUE^%xŠ.ycsϝ_FJyv w11(#EfZ6 +=xi%7؅4c/m8"C:HHΑO!xKX:.ƦaBc$^a 8qW2q). W7}7:p!$5(~z2B`F{Z/;^I`jn)N$G!.l8O86!wdZn[otJ%U܄&*E;k/_0 WU<@LPڲn8NpDj"o Ӻ; tMV9jnsƋC62f眆m;kA=pz < qtرc?BBv1M׆)`[N![cw\+6[  lj,:pLB<\|M^ĭ?j{h Ǜ~Gqupف5f_1y()vj[ׄ΍XQ gԔ ;oMG;0:@ +O񜳰ao#{CYk~yHsǎis-Snˬ l=KF,ډu6 +ZԯKZ_@3/ b0,C| o Eobp ]ᢴ LY!yˉ-T1q$$zjj(!kzPX)n9c+Y0i7I lº]@wڈ5;Z6l:<Јc +xv>u%oߟ|wL w%vXDe^Xط`׫znW (֑(adt]2کh$ǟ@$%}!8=M{ D ^xI6q-5wGM+vλ |^ kHb]b"aDMC$P(pᎸOXjZK hKa֎om5TE-Rm^Zh=.ﻅ>? 7}#ŗקPVE*d;UrL»՘hW5LbhAW+%/<@`@8*& -1uDʶC8z)O  _DS$!?9ϳc[Ibvwc.;~FC Pج%@CR2W+O-Ÿ `fNm;ļ~WI\7nuɛE*CK3Y`*Vb2nMB\{?} e]C<Hd3' TÚU a܄ULHRwΥZJ'.V\\)|#e oFg!"0+gQ D z\X S$:RweχI|NMU$6҇z4{,+eʃ>W7cڲ !bd01?#SV#~X163jj3v no持F]6n/2n6'u;n'`uxTLY[KJ#BWRL6iH`Lb&;e}u}VH׉"P@7tqnAHx#ijLz #l +nnIrn' +H`nޢ'-1(D)ӇX753myϖ`sZN`N>&SN+F%MMXK!U +amx 8: O_fS I`;=KprYD6XmSag353m-e^ur` Tc0yk?G2i/>zIڻ"ʯ@\ˬ ~G1}I=xz9\l5x/ GFKWqLv ae #Q%N 3%)oJ{]ߘ+Wq6 +e{1O>A v +ˍ=HK-da_ש])vxu.e!/YIZUk6O?S'چs~OJDHY @Zc cuC\Ӯ#PiJR׌˫0{3]hPj >ib2RKUVaQh)߄}`*ǁ>Hj*TO `Ԉ$GSXV Y,a7XW et%lN);T`eją^ ! J0 W0qWp$6b&1KK/#iD$8 |r !WDwG`\|%$Pn=swoIp|>8v-tJLzmS4%s$׊ R]X'p^|g ,ZH` F.,eKڎUab"VtuX’r, ˅ gq~ f[$I PFՉZRyUb[q+J0²*L\%>zc 8BשSg$&Zܥ4m^ͭAWR!E[(1ieƛH7H8GsuI)@0xW~SprR C'1j ǂ>8!98YSBM"Xȋ9 y]x]vU,14$P!QVZ,tk*nj`Ihgq[鄊}fCkZ^U5w/M$7} s=K`EM5Av_.(3̔*$y9A2nuvSfO1>zT! _)k\ -EyH`{E>F2><Vȸ.ݔB`v? 'i (NG^|AtJ ۈs/LDp߅"q6BA8שTs05٪(]ArmUF~v(n}[I +\H$pUh$VG`ha+9&#aM$5X^-G лHMZU$Nbqq +chZ!&.?,^Dk1^%N'rV*+oW#9%IpiҐί\Kǟ31$3~0$!#5X`۩__,O7{J+ERmda{Gaj7 )>Lu +n O@֬ŇOrY'1ۅ~g@$%TT\wE@vk$p)c ;x% \,&Hm%y|"} yT,Il!Yu=\zLv*L*A,ìM$p +_/) +0N+t* +'Zs存bCqG(V|tSaP% [$hHxe(XěS=sRBNs 4w@ 6mkkL#PgCd2HX 0ᅗ"xNy2d;b*EE 4g_#W!W&1B~LbՂ1tsHU`AL@ YAZ Zxod!}!Ww H4*pe SO`mZL^1P٤9nrX7e4~>ݏhwm@ܶ#2 $q$2frL; EL"&WwI` ?٘jLbqn2@\ +Dvib/' )em +o{mJ41 QLbk* xO Z1v +s6 rKX3n+]fF ;Hf]NK1YbI`$𳙹>9ߐqZ%$P|e2˹?~^r(:.1,7!d\I&'FB~Lx]Ē#q%2*M[jbM=?A`g?ՋERoԑHQJ$jpohv9% q;n?߶niS/2., +5a6{}}PZNd&/ +T{ F+\v1Rrs?ϒ@Z 틁C7SX#nJDH-sBelb^xyeƻHkjf~ILtfN3 |@eNe"Zݶ{?^R6MLCWYzgt]9J? 6)WF,($eG̹NBB]|N*1^*g82+aQ ]8v JG\|*<,(gYD c'K {Jt@ĘG41"|?'__D#٧, G4X/ A’ur1Kvҍn؅лz7+{H.QB\ KU$]2yy#$0GOU>$F[QN\UFrf:9Sb_!wZt&iUX}g#nB\f+ݪDZz2q|$Μ™sRM`܈u'jZTϙ (#̵Yt1,*YWz'0f"b8(M$9{d\r&ucա\.j2WBݽ TܴuPU]&OډybNU9pH@B>yN kEI;;llAXfJ[YFK`LW:pfz]sYP/.TL_W%+pw3UbvBbϸUOP5ho@SS [܋4•|]< X\>%7_{Yf{DZoyKSX6. SGU]ǐb5FCWe{LfIۏ"#)Yʄ;DQڱG`sjM,!PE-p&\+4cHɋ1OtLf!5Kp= 2 ]ޙŦ XᛕvUXfbKFni/!:6gE<ĉ~?qǣGȱ8eK8 ;d9; Lr&-]ՈE%%&;0}~Cɓk78); q*jM=?";B S{{$jjբ Wq.NA7 +m ?O @E!֗V1`m6f@; %yT*OԘ%Z7چ8pxv*fZV&TrMH~E`(5Kxf\K0zYƬ(|׊_ޅ3Ft'4aq|'91s&?[NVu73^X|$V叩 {>LY(kZ&N"9=['"ĔV][f%kw{(I?4ݕtH45C}|yt 7:=tex.[{%z.,9ʴhVph]6Wʈ|+Cw|:*ǯaJwW!x!Qj%=< A;9+Lm@Ҩdh՞_†,0RZ?\": T> J1|ɭQ֣}yш +$^Ę-#(u}E1F%3JӖE'jMe#Ύ! %:JA&+t>@?FĿfcVpw?]a_KQ +rCdݬuqiLr9~-}0wΖ=n=K.[Q*Bw$D싓Q/H)j D9k-0G}"̬C!e0*Z +RAU1i@N$ 6{S(6,B6h`]DQI]P- !Uqfq W*t$Y$"E$ﯲZM[P^ݬM's +I@{^)( +k>}ʉ!$谚~]j ZjɇҟIRx˨DG!L =ec$(derkh4rðucBFkBT(Ȕuz6Z0ſB-\OA&JA*0:Z'*:t":El'۳(՚TT g%Fu45Iﬕ>'s8v) ND 8 ͎u8S쇨D!\C|h9΄-VuQfbU >t(E&ERDeJF?!Ju](ELQ"fR) O:1Eqy%  EŽ+b}P-^ E(3ou h}PHxN8(+ԥhL+遛(牬(5k2u%"~J9ZPQ, S%)J>!ʁܫd_EbJ/H!8fXJ)ODB^W8iK}3EM++(&ӯ-Z1*%qb +b!a\c'p?%QQڡRF'1Q`rTe#gV]CH@A놑eplN=_[W–²f4k"EHrQj!D)lЉrH!Vdܨ44@"ОSJi JѢX։`JDQzKQ_"#gIz)$%~.W)/R*TRH-道DT<T>'r=G(JGGGR6}5e"J1ѣVfi9fA(Ag+ +{ E{E-Y!Ӷqel ԉRՂo:+] p\"v;S7c(#[.OcHĉ]>r+TEp@"j Q[Q(SN?٧+DҖ瓰fFkMiS6l僶E E9f´x\Lġ'$EH'ebvlp"EY%e:E|Z_W=U2] O}b%SizZ ɖwp\R):z]$ZqX?"Jf)J][+WE)^leIo"K}#%X`waZR􁦾MFJ!+mRKQ^E<щ@'vd–=GK([) 4EWIQAҴșU$6(\ê+?!lw7>wd7N])'܉Ԧ%Q\B)#E}i%-bL̪AFіh5U m7>GvK7d +-Uz[QVhEلڦ}ϼ-F̼n1Bj}y(T(ZQEHQk\2]@ʨH"~=/!JaFT1E+l +Q R;y蔾6: J[G*髨1yLe6 D2@h EY-y9$)JoXB1ڙܘi +endstream +endobj +466 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DLCIUG+CMR8 +/FontDescriptor 729 0 R +/FirstChar 43 +/LastChar 61 +/Widths [826.4 295.1 354.2 295.1 531.3 531.3 531.3 531.3 531.3 531.3 +531.3 531.3 531.3 531.3 531.3 295.1 295.1 295.1 826.4] +>> +endobj +467 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /BJOGWQ+CMMI8 +/FontDescriptor 730 0 R +/FirstChar 70 +/LastChar 120 +/Widths [672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 +673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 +720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 +546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 +644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4 762.5 +598.1] +>> +endobj +468 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /JKSUUE+CMSY6 +/FontDescriptor 731 0 R +/FirstChar 48 +/LastChar 48 +/Widths [365.7] +>> +endobj +469 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /WIRDCL+CMR6 +/FontDescriptor 732 0 R +/FirstChar 49 +/LastChar 49 +/Widths [611.1] +>> +endobj +470 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /TWQYNY+CMR9 +/FontDescriptor 733 0 R +/FirstChar 46 +/LastChar 119 +/Widths [285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 +513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 +727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 +642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 +770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 +285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 +314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 +399.7 571 542.4 742.3] +>> +endobj +471 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /TMCDBM+CMSY8 +/FontDescriptor 734 0 R +/FirstChar 0 +/LastChar 0 +/Widths [826.4] +>> +endobj +472 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /UJRKLY+CMEX10 +/FontDescriptor 735 0 R +/FirstChar 0 +/LastChar 92 +/Widths [458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 +472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 +527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 +1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 +805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 +666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 +888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 +833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 +1055.6 944.4 472.2 833.3 833.3 833.3 833.3 833.3 1444.4 1277.8 +555.6 1111.1 1111.1] +>> +endobj +473 0 obj +<< +/Length 62 +/Type /XObject +/Subtype /Image +/Width 124 +/Height 163 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x  o7 SL +endstream +endobj +474 0 obj +<< +/Length 7022 +/Type /XObject +/Subtype /Image +/Width 141 +/Height 108 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +xwTW$Lr$j{AEAz="AĎhI84V^N#zPD]4fYkL߽;ɝYwֳ߳A~jjjjjjjjjjjjjjjjjjj?m|{C'|5cЗYDNA7 9CKt Ǔ`nniӧL{7.^Ee]Lc]كCRdX#!<C 9|1 閃7d2Oh#C^a̼nh:`r0^m|MQWySOY)VTe%r<g!Zr +JwKotEz"' fC`5 +gtӯ^~>C"+j/қ 0apj Vajs\># ƨ0r^ZfWr~8,ڵ)F(Y,<'E7 gqR6R 2;Z=`3雝,}bS h"^r,x&YxO*>JA]%w{ +r Fq% 5,2t֟%N)fOð'ګ ;YЄro>(1g>{l ~fd6? fpQt\ԫ_]#7 `~='p >ώ9 +OaЗ0ɍ\vVvp ²xeI +ޏݎOmQde'ǕCx`h?qH00ǎ{PЁ2RG\LkX-Ka햏΅fO^]c +,_iFMდ#>ac <ܿ +ѭp'EXމڊYsP4za7?pAŗY^[߸ +z( / ^p#ɗH-1nG-7~gv?L):txУiGt cOBFݨ?cS8tVh{<A^z 7W{)DZK4Kd 3 F\- +ly2~Nq9^^Yװ? +ض4e<{p = bh1-g`Cǀ!Yl&&˃MT<{,`#z (>l@>@wn^JpSRz\06s'!pQ3wqjhKOqas<*FM!OY?.5RG)c#j.4l8%g87oi$|#5Ju;'H -ۖ5{ ۼL>alg+?BgSAY<`e9Ë\PKئ `s& .kGshS*|-g\ML ~ xa4.5"FASg5>wo2p_čWJ*sb,BBOσo86s|x?p+W؀m G^1:]H Y⋑xgQ<-Mn$5jg+F{?p]yM%%p ))XA ܀)l2n߁fE Rmǻ,^PDz{w$m.*zʤѳ~2')A3Lq/!~advq75zsiRqt(VaVuܓgxReh`^vj -V6m M<%vzf;JK?l'ಥ/8 Nl~ pX@ɦp" 5XN3t"8kٞ\TߧŠe59sv4rQ9X٘C07^DY4\V&ZhiS +-4VW܄| Yڀ9◟ĝQЎm/&\'HC؀ :EـmdUy&Ì +n)3 -n\\[bc &z!vFqg><) +S5$O>ЁIN9[sP$hq|c8'D1Hdd½ws {w-A*!8/Ur2H4;naΖ>zcnb7[}.fq>%54 +RpCwW_~2LvL}NR8 U$Ʌx0yns 7+'x]1{?Fxv<^RVG5EM˔*$?{Twu*YϬ:$WVyu8->߻nlqB3< %p:D'-&ڥI8Hzz-}g.ob62&S5J%3BB{5"6@]xy9%<֧mMڬf -G5 [GkWiJ? 8{qSտPqe`;>)S `.sJ:Z*v -‚58uuqLȤ =mrdᬨ^vjYE1 )1*/OT5}P[>lx`G>$zF'8nVEg1>MvJTxmd+.sH1:{DI-ZGYū<X \^u9]56:jIt"t8ޮo}ڳ)XZJ5є;;/ Y +7ULmV]NHc% m}.U)myf:ᆴ_(yʩxQ+F<_\甉ZfPܟB=5SkGUȉo_p֎nL Z RGX=gdŸY'0j09AO@Њ1sb$__ђ1xݴ: B98Rۢ5'~~ײ ؛ 8 2X:y̸ΩVXQK*4l#|*V}*؂Oe"Wxa>ճPqLue5RS*{;?%]x w9wϓ{EeڝmKNUK4XS% /lfHɟ+h +B-MŠ_mps6;gIDKk>>nf +^gr0YSFx?΂v>ioJ+Q4}Yw?@yq8<]sPtI?:vuZׁ7>\iorsLXmf?p/_Ajx:N +O^@# +KנM\rlx7 MWཝvp<9FNزGx pgN [ip +Y[(<_KcPg ?k^o@fk ]~KxA-H#F*z\ .7/Ĩ1va-Hkg$ &ZhujKO6Ux(`n|8=e]T6cv놾YHINCػ?i تyǯapJgࢅcssP>tt>xT :`ntBg"-8Ď{тU1w!#d~ ;Brn Nzð +ڞLU 8oĢ xH醡98Fo}Y޼v7 h~׽Z^xF`?uDrymlikUaU M\3i~U򪗐kw[NJ +o-.?_q# l,,>+sw`2gv4oJ=_O>-RCDN]oP ]N^Qa>lc|J +endstream +endobj +475 0 obj +<< +/Length 407 +/Type /XObject +/Subtype /Image +/Width 108 +/Height 100 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x1Oqޝ$#7qp"WL1,$ _.N8r%"_NK~'w}'LXqWz}7o+f-SmBŕ޽e۞-VS[fYADϊfUlqӆjqR.5/]'_Y9SXmlbknZ:]UeY +}=9WryvL۪ʱZi˪M[nQ8Te_%ۉofz\ ܕq5:2f36[s'Z|'/kdf@ -?S~.B_pwk +endstream +endobj +476 0 obj +<< +/Length 560 +/Type /XObject +/Subtype /Image +/Width 523 +/Height 528 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x1 /J$w0E? +endstream +endobj +477 0 obj +<< +/Colors 3 +/Columns 560 +/BitsPerComponent 8 +/Predictor 10 +>> +endobj +478 0 obj +<< +/Colors 3 +/Columns 560 +/BitsPerComponent 8 +/Predictor 10 +>> +endobj +479 0 obj +<< +/Length 7661 +/Type /XObject +/Subtype /Image +/Width 202 +/Height 107 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x{xUU@DA@$@DǑet-s8zJ $Q,(:sOM#Qy.gg[:GSL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SLCDBȣMaGS.tM- Z, +~snq޳g\k&4{ yi떺'S4M=K5.*ϻczᆵ;ys 2.^A=uI z%>﯇hUgH]c9o:1׵ꭓ1Ʊ+&נҫ#(QӵۮJ8q=ݪ ;m;BY?kvyp>,j^q@_׹zsTyBκƑ5~c Ʈc_CεZuqq6^k Y?{j;aJ+v{וvRޓp@@%}IjV5HBS;e^]U~kUW,j"4o*&;$f@]YDPUtB .Xݰσ\|OH@s``3~D !BEX6j74e(+s(Wvpnׯ]0w!u 2t +tP6J[uKmj>©w{u5n84FaV(s]p5*]V.;իvg⃸yB].n(Pz؜Yq~tS=G(u t2إPP mjDChZ^˗zLVQ!rr;Mq$E#"v4 +0ཐ@g9m +^֠ /}Aϝ6^(<X)6m?LMEX7ViNp=Rs5׵g*fZ c!:m27DY9ᄊV21bm6"< tA|sD\g3ѨI;a +VU-N`cFJaw¹S,Vm&ɣ +gܱZiԭ6;>Ϩs^wal;*D .;l<Ģhz9MbU +#E:G}k#XE{EmUuv'[o/A g Bxo{˂W|W +f]\NE_ض/d":&Nv{ vFT>Ӧv u[_Z_/*Cm4U0$\..nHI~#Iy˖윂X(JGWSzVmȢL6zk: vT;(Nm,<-ʦJp}"I}O">~ykΤ$CVjXU)ʤmZXpUNtcfV< +Xv&.M ѳG?1n qo"gAQ#'HM| +x8ԫ3k*9qG( tb +5 $o*~b?!QE ?v_M7+^,jZa; Frba+TQ-nTM#4Wh ίmbժ6bPXv!¡BHPޔB*LO5 v4VmĿ,=B6[hצhժZ+8{}^ zeSk.g+Gh%MBM?{žo,>4\H@ \>;3JBQ%L 44AAaiF'P,h__߸!ˮ2g"a-( 5f'>zIժTJuT jl\s?nQ,au)9TE~ƾYWyq s̟sy#YבXmtƺZߕjϡ +i!*$}Gf69 .}"S!'pˁCd)b)R bПY7} =nm=mQ$o/%H9Sg@p_(<\'`_1iGR:ç[2e б/[fz|diX`Cֆ5XV26l+AHbcj1t9y:m۴EA;}#88q|F}vm5jI%Rbb[밞$oQj`GM'4~)kh߮= + K9_8>¥s$|o?v3r,zlh;/$ mµ/0v_[E +C+!B X&;Q/_=^}ul4 g^҈CK'l;+_~y*l4kɍB9\Mw>>xCnI&^k^ae2֊ )܃VÀ 40&>yS=Ncscr)L[~N`qasGl)-%G1YP)ه3 b̢# z`\&C0}iokRǡ)x 8)})L^zN+]-z9HL[&u.g.Lx>vG H>#fb_± +c!?*"0uI6ށ-;_*e!//(ϱy!|?ڨx/!)*%֓;6<1xf&?y +KgOH')$.夐ĥG1L$!,2V]C o*=l)..8v#~q1Qr'$O.*R&v^F)$9BDRASNRFBw=G@!H|*MXv U1"AgDU%˛o:qmVFR$yu_Κ}^#a-awGd~ +_8 {va}X!6uN: P=I<05>12)х^{d.h3E$0f*"&I  䊎[L{&G!tC3| I/BlQso +<(=Nzԣ$g.?Ը=GBR@=w&ug%+B\@c`@AX}h78Ӈބm'a9g^"lbUصI8 =Vw`ޚtHM~_š`1OW|&,|'F0$0 QSB$*r\MC1Hf^?8H) ZHKPUAXEXzX?> Q| k] (.K>;O-SY@h>xj")$,Ky3!k'm{,EEFEعj9k׋ccǻa^X=o)#ښ;{Gkf/zVAmE{j&֕6oiTBͲ^FJo +1fag S qK%9G8Ts#YM\r9˕_$a*A >=_?aNySRnPa$O.ʻ9E$qԓ,yGYa;Y aa;^z[4G%Zb-;#mwޅ5-ºۚaYj.3}rA3 gH\qeၱ*jU8A8YF&!:6MrJh F#旲?sx=Ǹ'?G% dCXĐ$/u9(zE̬<# 6[f:AomP.H(I 0RGPF=ʖ$u;N2|_H}8Mݎ:.VUaTcq/aEj&[Gl_ B2v"\at> :/ L➨H|=CMPt eRP6!mP! %Mds桁GB{h +b.N"P"2 %I䤡+ۉ>]fm!h`0,}C#Y0 e˼8hR&dclO9Gu 9 +zd?!SK9~!#ry̧qTz|:>U&-: o?{ [3p0":w@9$w톔aCP06`mXk ::> ú-U_aL]6a+s  X?`r62g\<769(v粨EٸD7\xH^|J3e :EoƂQmGoy` +?XmC6{K# J% KWY>Z" yG.ݩK?&C^kL:p,b @e܉}$uU%HcY%bdo[.vO؞G`K6HnHiv6vhIcװk{/0TL{=ƥ]^}s,MCo嵡+Bo^gNPHEx/p{0tcK\u3]^RAcaQoA .O1y;DQk~Nu}í7ϣydrغk2 J[|/}< +)d +i{.{IX[Z<13lX<rԱ|3#g!":] F&'"cY2{x8Eo\sM`Ѓ}z?t!q  u:(Dcp.7ExC$ձKd<45:98{{<4llpeo_o2ח??K8w8 +E7|5^_]I2|ޚL/dLCF`ʼ[XJ}`g,k} +p8}"_/Z +endstream +endobj +480 0 obj +<< +/Length 8221 +/Type /XObject +/Subtype /Image +/Width 119 +/Height 190 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Filter /FlateDecode +>> +stream +x[xU>?3! XV:,=B$bW\E]+{޽w]WA*E d9d&Dϳ?󞯝SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1Ŕ*{G u].,_\*jNz\J&8FO7l^+Mt& gԮ{_?B\zox~c^9Rk}w66sc>3v=p}׊nwXh&+UkP]TXM?۫E3e黎fUc$d>USUܕ_纺f^u<͢&BӫmR:I"l6E`EXE繿??*E! kéw{5n8!V"s]q5*}R.ٝ*qqUWPiiKXk/U19TqB~O*8Q_d|Wq룢u;EnMm&.]$\a0B&3(לGC9ЌݑԜ]i6^ +ȣd@hG7SM_mZ\#f qz +м۠:pυG$@8] +˵d@}޾QbMXVѳwx{a'op:p`ݮx~rNw5eEY,FuvE:wݷ$6m&"f\HH :v,BBuU9auZwpf*fZ 6CtbUe(oډ..֭zS}8P'N:`u-Ѕk <סr٥o-|>MxoԬW䎐79V:mt[r"k,مo 63y"ɳE΢e@;Fی猁ZCvݐZ<׀G/v ۀ*V-|}j^tS]N|;pM.CFSgn=:VChYxvT؈X
cNV`[}r] 3ח1E&R" K;V}Sf=D6^5j + +h +;TZvjߚ]F2ʘRcZ\X8]ܿSl3v(/9 AlT諦]vvڍ&auNb5QX" fѲuaSݛŇ GjjKwrnkvvM nQ[(ʄ/_+/VhYU)m ؘekmgkr)ٲ^pnx D3x~5mIwVF=uM92A=Y`**Q%&w ` +bQkv`=G&mX@ުڢStV1>U,lg؝;N7^V8Nu*̪t6q'XemɶQI":&Q=;@v*\iSmDu#[_7Z_M/*Cm4U1$\..nؐ2; cE|4ѮCvN, +]%ף#FxVS,(Mk6]Ehm 6ux:9ź5/2Xg7 A[+(n~ +XZ9xPhp\GYxZԹMM10l;ɛEݓ&>e۠ER ֎I'@ e+R$^UIۚfS@N%}bRy@%M\`!'7|ECĉĭ-h'#z6M*é^ky}X_\Pyω{=jFakg\uU8a yT-6m1UgaՊ ~PvłUvP%]ePY,g +B3*5E#\ߍb}fH7y5_ZwF, +UT.\V^W;X@8t]XTiYʛ2P Zifwu6as\*оg񱪸D=-ܢֶ_;FB[4x= b\3ٕZJj s&B꺏ؽobo)FC3~rG/_.k פΌ

LlUa޺e+ś o"NI,uhקuJ]ލHOdܿvW5)m,eebƕf{EhhK#BCZ +1rum[l{Zy7 +FG׳u!m'Whu"|VQQ#>.;JVEPd%_`w + ~UNUaTW%y;87ӨITaМyY?huBkJ pX5fo޾EZS s64S4Ԛłe[keqUJ|q8ZQ">%7d&_یdw4e[;iZSNʴZ@k.P 4ϙݿNjn~gU:^bܿFܮY\MHMuZVwsBZw + y쀤Akͨ.~N~Dv980qPQ/Zb)b)/'M_عZkFڶ +iKyG2rOi?~OW)=tDCDq{'-2m.VX->Xo`/>AW4aoքƄXFo+ÆHlHRlqr >\u:u‚8rGQqږ-)C#?Kp[lHH7buI. +57ҩOI 6삮K.(*| >Cb㜛cI|Qt 5fXp<:- }p< žBп-7È_Ty[P +cR1`rgsx&f=VS/=^~Ul2 +N#s"JU8P qo|5y3+qlZ!so}xGx,S]x//U[q=x` Q1H~8R:O%N'0c1;Yˏb3GytÜbe +*%I2rrʐIɚ3#qÄ8 ; Bl%D-%7P{N=$F%I,E;q?ۏcrhΝgV4wvU,Or:@629e+B}&2DZ0a`3)6*Y{=`ekk6v,Xaʮ0zXoz'1hBNV 9e 2J~YecbgE*{%HzÈ`x+qȦ>qS?͕_~$dUfCw ^Y/>nY*Q*ɛE::ڷ6?l_ @v"\at +Z/ L㎈Hy5SMР eRPɐ6!e Cȩ 3x<4BbH{#RK8K0tJ!  e02MjB>'z*1BA ۅWb@^ag0'bC/i19#(}Nb0OUæ31oI-c8,E<)SzH {bOWl:=>U7C]:w3`L>1wx i†m> OV`=u`m|K_aL#6!藼#&1$faL c6=C!0hb&<7!9(a$屨]9]qw# tތaڙޮLj Hyo#9w3lx$d*=Nd0tO ,Cob6&dOD^DC]Pb9~L|D pY6c/?3ƹ;HثJ<Ģ##e}2Vpmy?b%% [vD-,0nތ];a뼇c+ص=xW{:fzo@߉)' $˅a 0yx@a y'{,8ґP}sԡ , )w1Y0Y%.5lݵY+=KCn)>3 +9E,2 >G&0#!==~$, @ƘoNz)6gb|yC\uUFuXT6¢sZ%w08DR"dPa\$=|K_O39C@a00K,x C,=3&"9gѓ: +텞' xa,j8^ u ϻ>FC;1mL^I a҂m8&ۆ1Ab^z 榫I8'%OG۝Gݷ܁߄߾O|Ok.Z"] Sۄ'_V"0A!ML\RD!7*˂by +dɬcXnIJԈYxvX @=.sʲdj&3hdFnAh >8e#&dRR2["Zz38˖H/.l*q)~'~Vg9d+> +endobj +482 0 obj +<< +/Type /FontDescriptor +/FontName /VPVECV+CMR12 +/Flags 4 +/FontBBox [-34 -251 988 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 65 +/XHeight 431 +/CharSet (/A/B/C/D/H/M/S/a/b/c/comma/d/e/f/fi/five/g/h/i/l/m/n/o/one/p/q/r/s/t/two/u/v/y/zero) +/FontFile 737 0 R +>> +endobj +483 0 obj +<< +/Type /Pages +/Count 40 +/Kids [410 0 R 738 0 R] +>> +endobj +484 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [739 0 R 740 0 R 741 0 R 742 0 R 743 0 R 744 0 R] +>> +endobj +485 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R] +>> +endobj +486 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R] +>> +endobj +487 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R] +>> +endobj +488 0 obj +<< +/Type /Pages +/Count 6 +/Parent 410 0 R +/Kids [763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R] +>> +endobj +489 0 obj +<< +/Length 706 +/Filter /FlateDecode +>> +stream +xuUK0 plJ*und *;ߎf ]t54J9Ȫ4CPI|zjcm C@q*N,xّ"Na s/̓6BLfG֋aS:@(dKgzZHMjVo"?$3frҐ @r*X 6~fS lƩfE1ɪV"ggIphM5XGui:15S +eQ_6^L@@i$V=&i.JGJ򐃌xftҌjlvi++$,[%";fK_d,<9x>%jub*ỻʁ3pʞ/ O=ȑ<s.> +/ProcSet [/PDF /Text] +>> +endobj +491 0 obj +<< +/Length 1245 +/Filter /FlateDecode +>> +stream +xYKs6Wp@.){8Uv\nxFeÛi!g.' |n<a;\DaGĻ=)0wYYF `x>i; <&8`/"dX+WuS>m^qBCN8&e~bd$_2j>|Yoa`ۙ!8 +tnlWlMox׀&#/ֲ'B~Smd`J@x(x~`Jї۴g e9)uz~ +@`d^ka1NI-'i- &:RTq?qP-u"蹻|̄gZ1C_Df)ֵlKHFa=+Ww7kwl˛پ Mc=h)jH/'Rv!o*knWF:JQp 3\PLTnTz"RzK'>JutD2yFUt>ڡ;`B޴~ b ć(=-yVZUnW╱B]֗ϯ yNO "^BѨ9p5WmWv\Coڨ0@&3I 4Syq۔qݚǻHٷfV׻X\˴kv- ӌ%Fb'SĠCe{9W;1 +%{5Ac]]uUW>i:_|~a7d6p.{91<,c,B1 +Jv=ᾃuVɒut + ubpYa樌ovX`#xn$[6XcY1p )lmy], *6)E{1hwɠpҩ +[#RіvJ+gJX4~ +Z +Z/A[6CWRv =b_97K(뵩M37E +IW?]JY}^WjΌB3 <)gaWFKP9Cja+nAGDzP;Dr);r"'tHO=Afkk]zq4R- {(=[Ζw/]ٻơr9t3NV +endstream +endobj +492 0 obj +<< +/Font << +/F17 408 0 R +/F19 769 0 R +/F15 770 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +493 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 603.657 156.997 613.225] +/A << +/S /GoTo +/D (dummy.1) +>> +>> +endobj +494 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 567.293 158.028 576.861] +/A << +/S /GoTo +/D (dummy.2) +>> +>> +endobj +495 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 541.838 194.526 551.407] +/A << +/S /GoTo +/D (chapter.4) +>> +>> +endobj +496 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 514.263 190.852 525.952] +/A << +/S /GoTo +/D (chapter.5) +>> +>> +endobj +497 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 499.717 258.178 511.407] +/A << +/S /GoTo +/D (section.6) +>> +>> +endobj +498 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 487.293 230.875 496.861] +/A << +/S /GoTo +/D (section.9) +>> +>> +endobj +499 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 461.838 201.867 471.407] +/A << +/S /GoTo +/D (chapter.15) +>> +>> +endobj +500 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 445.172 269.936 456.861] +/A << +/S /GoTo +/D (section.16) +>> +>> +endobj +501 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 430.626 242.148 442.195] +/A << +/S /GoTo +/D (subsection.17) +>> +>> +endobj +502 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 418.202 228.421 427.77] +/A << +/S /GoTo +/D (subsection.18) +>> +>> +endobj +503 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 401.535 266.027 413.225] +/A << +/S /GoTo +/D (section.19) +>> +>> +endobj +504 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 376.081 276.347 387.77] +/A << +/S /GoTo +/D (chapter.21) +>> +>> +endobj +505 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 363.657 202.512 373.104] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +506 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 346.99 234.648 358.679] +/A << +/S /GoTo +/D (section.28) +>> +>> +endobj +507 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 334.566 257.694 344.134] +/A << +/S /GoTo +/D (section.30) +>> +>> +endobj +508 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 306.99 250.338 318.679] +/A << +/S /GoTo +/D (chapter.31) +>> +>> +endobj +509 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 294.566 245.936 304.134] +/A << +/S /GoTo +/D (section.33) +>> +>> +endobj +510 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 277.899 238.784 289.588] +/A << +/S /GoTo +/D (section.34) +>> +>> +endobj +511 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 263.353 264.39 275.043] +/A << +/S /GoTo +/D (section.61) +>> +>> +endobj +512 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 248.808 405.088 260.497] +/A << +/S /GoTo +/D (subsection.99) +>> +>> +endobj +513 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 234.263 418.921 245.952] +/A << +/S /GoTo +/D (subsection.105) +>> +>> +endobj +514 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [183.368 219.717 333.451 231.407] +/A << +/S /GoTo +/D (subsubsection.106) +>> +>> +endobj +515 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 205.172 320.391 216.861] +/A << +/S /GoTo +/D (subsection.108) +>> +>> +endobj +516 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [183.368 190.626 333.451 202.316] +/A << +/S /GoTo +/D (subsubsection.109) +>> +>> +endobj +517 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 176.081 257.603 187.77] +/A << +/S /GoTo +/D (section.112) +>> +>> +endobj +518 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 152.747 302.271 162.316] +/A << +/S /GoTo +/D (chapter.114) +>> +>> +endobj +519 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 136.081 249.845 147.649] +/A << +/S /GoTo +/D (section.115) +>> +>> +endobj +520 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 120.929 301.784 133.831] +/A << +/S /GoTo +/D (section.117) +>> +>> +endobj +521 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [123.367 106.99 288.845 118.679] +/A << +/S /GoTo +/D (section.118) +>> +>> +endobj +522 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [148.458 92.444 524.91 104.134] +/A << +/S /GoTo +/D (subsection.119) +>> +>> +endobj +523 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 78.895 298.754 90.585] +/A << +/S /GoTo +/D (subsection.119) +>> +>> +endobj +524 0 obj +<< +/Length 222 +/Filter /FlateDecode +>> +stream +xeMo0 >'4m˭E*ڿiɖ Tf `P3%m v a M4ta5[XZa5+#Su)O7;լXj5\d8;xS/ +'9u6 uEU2y|C?zݘSh?ސZX%QG;>SR_ +endstream +endobj +525 0 obj +<< +/Font << +/F39 771 0 R +/F15 770 0 R +/F19 769 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +526 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 749.659 185.369 759.228] +/A << +/S /GoTo +/D (chapter.122) +>> +>> +endobj +527 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 722.083 179.367 733.773] +/A << +/S /GoTo +/D (dummy.123) +>> +>> +endobj +528 0 obj +<< +/Length 1681 +/Filter /FlateDecode +>> +stream +xڍWK6WV]%_6HZ h]JtH*^wm@/"9ftU7~~5p7,,+3srܶyޭ"f\oʪNۤj$xc9q%kXm\[3M 2̖x Fxgk ?){:5 /{$0iZTlVDG )1E<^ΌǙ-ꔜyx^0U87 EpIg#@?IsRH3OLdD-:j:06A1A$8,·aqG_uU,Ό}wCyOG{`â( N?gflؒYݕ%(c̮yIa +2Sb.Qs lxZY!'((AY:='=22znYWL0J# kज़w%~`8t L똄H qsbgB,O~N&2t#ʨ:+Wʙ#D zŃLitHGHY{S= !0'oKRBf M.|ˤ0l; Bg8c W!cMEs(ygy>`G&&/O [4] Y!Z4 Q`ߏ veݓ mPg@ +{j2%#&"bI\ GȇEl3Ťŕ'm%q&;\WVfUí^v׏AY T7wgh=68] 5aImF@wu/,D$@a䨦Itn%* WY fJ`:5O/'Ĥzh0x49aW pS(:ԞSbdF%ϲ6{|T /hWK<`a/3/l&Oc\$nADK ; c/@E[ +kSкljxaގTSJ.PU[)(qhY{^cr̐T$ͧ7ݞ¯{ 8*S2*>G=)ܢ~s`{Z:Rw4襻BDL4@~EEFIjz|96 I@K㤴5Ӈ։Ĉ#/"(KL8pe#Gs/ ȋA}Ie,UV _8&zdH8rMPJHzROf)Q/SaYV'c`Z'$By1μw𧜮e 1aB0Z]gpD DHo5`gg~3qyZm|ȶ5[#{iV +endstream +endobj +529 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +530 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [299.659 76.083 307.106 87.772] +/A << +/S /GoTo +/D (chapter.5) +>> +>> +endobj +531 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [358.591 76.083 366.038 87.772] +/A << +/S /GoTo +/D (chapter.15) +>> +>> +endobj +532 0 obj +<< +/Length 1376 +/Filter /FlateDecode +>> +stream +xڅWKo8W(+%H.[Fmb(%M~ádu^yԚ}!$:g&Eti?>u<.ЎSJdvGf}2/8wowI"FV0r=_L]feZSQWvM?rfIkZ5#zqADq ;3犘|I} Ҷk19BıRܪZ7Pvξ4j|xfj E<-U Pk_+Ӓ, +_>d ~4e]3j2|w,ݙj,F N|H7hzdM?vQ;}S7 ƺD/^Fuq'c&^̈L_9PP9&Z(9L$8I۫e+vvnh1["^h:P64Aoho¡P_~#Ui*O3"znh8/曃'ulTO@.sԭ +_%nr*v-uE!hjc,[΁A1L9qo5G>eΧ`ԯlr.|ٙR0xFHӐ]7>֞fp qިb*?p -=e/S&.DumEOj "1epABhưa cHPaYjGsq?~m5k^㧞LҲЬk'[*$v[_=cJ3gݫnB&Yhx3[@x ݧJ, iQ^} Ƨ-ͬun5װqs#lUR\R$2Lݓ9pk|~aN|’2Tog`8<yb?Y\6v(]NֺAM-~}@'tQ8jluc;մ{à +c}N[l$5g5_ձ>x!C'DV$4W^CWkΤL8Pվnӓ%I&}ӥX1B)Q~ I+Y4֫NHn8^ 9d4O2}ۓyCw&> +/ProcSet [/PDF /Text] +>> +endobj +534 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [164.29 661.262 171.737 672.951] +/A << +/S /GoTo +/D (chapter.21) +>> +>> +endobj +535 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [314.258 493.69 321.705 505.379] +/A << +/S /GoTo +/D (chapter.21) +>> +>> +endobj +536 0 obj +<< +/D [30 0 R /XYZ 321.227 254.416 null] +>> +endobj +537 0 obj +<< +/D [33 0 R /XYZ 108 594.754 null] +>> +endobj +538 0 obj +<< +/D [33 0 R /XYZ 157.742 597.94 null] +>> +endobj +539 0 obj +<< +/D [33 0 R /XYZ 108 568.72 null] +>> +endobj +540 0 obj +<< +/D [33 0 R /XYZ 108 555.171 null] +>> +endobj +541 0 obj +<< +/D [33 0 R /XYZ 306.294 557.292 null] +>> +endobj +542 0 obj +<< +/D [33 0 R /XYZ 108 527.466 null] +>> +endobj +543 0 obj +<< +/D [33 0 R /XYZ 161.651 530.194 null] +>> +endobj +544 0 obj +<< +/D [33 0 R /XYZ 108 502.669 null] +>> +endobj +545 0 obj +<< +/D [33 0 R /XYZ 186.083 503.095 null] +>> +endobj +546 0 obj +<< +/D [33 0 R /XYZ 108 475.997 null] +>> +endobj +547 0 obj +<< +/D [33 0 R /XYZ 108 462.448 null] +>> +endobj +548 0 obj +<< +/D [33 0 R /XYZ 172.56 462.448 null] +>> +endobj +549 0 obj +<< +/D [33 0 R /XYZ 306.463 448.899 null] +>> +endobj +550 0 obj +<< +/D [33 0 R /XYZ 108 419.073 null] +>> +endobj +551 0 obj +<< +/D [33 0 R /XYZ 108 406.13 null] +>> +endobj +552 0 obj +<< +/D [33 0 R /XYZ 108 391.974 null] +>> +endobj +553 0 obj +<< +/D [33 0 R /XYZ 108 381.153 null] +>> +endobj +554 0 obj +<< +/D [33 0 R /XYZ 108 364.876 null] +>> +endobj +555 0 obj +<< +/D [33 0 R /XYZ 108 351.933 null] +>> +endobj +556 0 obj +<< +/D [33 0 R /XYZ 108 337.778 null] +>> +endobj +557 0 obj +<< +/D [33 0 R /XYZ 108 326.956 null] +>> +endobj +558 0 obj +<< +/D [33 0 R /XYZ 108 313.407 null] +>> +endobj +559 0 obj +<< +/D [33 0 R /XYZ 108 297.736 null] +>> +endobj +560 0 obj +<< +/D [33 0 R /XYZ 108 286.308 null] +>> +endobj +561 0 obj +<< +/D [33 0 R /XYZ 108 272.759 null] +>> +endobj +562 0 obj +<< +/D [35 0 R /XYZ 108 744.744 null] +>> +endobj +563 0 obj +<< +/D [35 0 R /XYZ 242.771 747.93 null] +>> +endobj +564 0 obj +<< +/D [35 0 R /XYZ 190.451 734.381 null] +>> +endobj +565 0 obj +<< +/D [35 0 R /XYZ 159.048 720.832 null] +>> +endobj +566 0 obj +<< +/D [35 0 R /XYZ 108 691.612 null] +>> +endobj +567 0 obj +<< +/D [35 0 R /XYZ 108 678.063 null] +>> +endobj +568 0 obj +<< +/D [35 0 R /XYZ 306.294 680.184 null] +>> +endobj +569 0 obj +<< +/D [35 0 R /XYZ 108 650.358 null] +>> +endobj +570 0 obj +<< +/D [35 0 R /XYZ 161.651 653.086 null] +>> +endobj +571 0 obj +<< +/D [35 0 R /XYZ 108 623.866 null] +>> +endobj +572 0 obj +<< +/D [35 0 R /XYZ 219.462 625.987 null] +>> +endobj +573 0 obj +<< +/D [35 0 R /XYZ 186.083 612.438 null] +>> +endobj +574 0 obj +<< +/D [35 0 R /XYZ 108 585.34 null] +>> +endobj +575 0 obj +<< +/D [35 0 R /XYZ 108 571.79 null] +>> +endobj +576 0 obj +<< +/D [35 0 R /XYZ 172.56 571.79 null] +>> +endobj +577 0 obj +<< +/D [35 0 R /XYZ 108 541.965 null] +>> +endobj +578 0 obj +<< +/D [35 0 R /XYZ 108 528.416 null] +>> +endobj +579 0 obj +<< +/D [35 0 R /XYZ 108 517.594 null] +>> +endobj +580 0 obj +<< +/D [35 0 R /XYZ 108 501.317 null] +>> +endobj +581 0 obj +<< +/D [35 0 R /XYZ 108 490.495 null] +>> +endobj +582 0 obj +<< +/D [35 0 R /XYZ 181.894 490.495 null] +>> +endobj +583 0 obj +<< +/D [35 0 R /XYZ 108 461.276 null] +>> +endobj +584 0 obj +<< +/D [35 0 R /XYZ 108 447.12 null] +>> +endobj +585 0 obj +<< +/D [35 0 R /XYZ 108 433.571 null] +>> +endobj +586 0 obj +<< +/D [35 0 R /XYZ 108 420.022 null] +>> +endobj +587 0 obj +<< +/D [35 0 R /XYZ 190.235 422.749 null] +>> +endobj +588 0 obj +<< +/D [35 0 R /XYZ 108 392.924 null] +>> +endobj +589 0 obj +<< +/D [35 0 R /XYZ 108 382.102 null] +>> +endobj +590 0 obj +<< +/D [35 0 R /XYZ 168.416 382.102 null] +>> +endobj +591 0 obj +<< +/D [35 0 R /XYZ 108 352.882 null] +>> +endobj +592 0 obj +<< +/D [35 0 R /XYZ 108 338.727 null] +>> +endobj +593 0 obj +<< +/D [35 0 R /XYZ 330.442 341.454 null] +>> +endobj +594 0 obj +<< +/D [35 0 R /XYZ 108 311.628 null] +>> +endobj +595 0 obj +<< +/D [35 0 R /XYZ 108 300.807 null] +>> +endobj +596 0 obj +<< +/D [35 0 R /XYZ 108 287.257 null] +>> +endobj +597 0 obj +<< +/D [10 0 R /XYZ 108 761.614 null] +>> +endobj +598 0 obj +<< +/D [22 0 R /XYZ 124.588 98.726 null] +>> +endobj +599 0 obj +<< +/D [49 0 R /XYZ 108 761.614 null] +>> +endobj +600 0 obj +<< +/D [12 0 R /XYZ 108 761.614 null] +>> +endobj +601 0 obj +<< +/D [43 0 R /XYZ 108 761.614 null] +>> +endobj +602 0 obj +<< +/D [48 0 R /XYZ 108 761.614 null] +>> +endobj +603 0 obj +<< +/D [20 0 R /XYZ 108 761.614 null] +>> +endobj +604 0 obj +<< +/D [24 0 R /XYZ 108 761.614 null] +>> +endobj +605 0 obj +<< +/D [30 0 R /XYZ 108 761.614 null] +>> +endobj +606 0 obj +<< +/D [14 0 R /XYZ 108 761.614 null] +>> +endobj +607 0 obj +<< +/D [16 0 R /XYZ 108 761.614 null] +>> +endobj +608 0 obj +<< +/D [49 0 R /XYZ 108 611.179 null] +>> +endobj +609 0 obj +<< +/D [49 0 R /XYZ 108 511.951 null] +>> +endobj +610 0 obj +<< +/D [49 0 R /XYZ 108 412.723 null] +>> +endobj +611 0 obj +<< +/D [49 0 R /XYZ 108 313.495 null] +>> +endobj +612 0 obj +<< +/D [49 0 R /XYZ 108 462.337 null] +>> +endobj +613 0 obj +<< +/D [49 0 R /XYZ 108 193.943 null] +>> +endobj +614 0 obj +<< +/D [49 0 R /XYZ 108 561.565 null] +>> +endobj +615 0 obj +<< +/D [49 0 R /XYZ 108 263.881 null] +>> +endobj +616 0 obj +<< +/D [49 0 R /XYZ 108 363.109 null] +>> +endobj +617 0 obj +<< +/D [11 0 R /XYZ 108 761.614 null] +>> +endobj +618 0 obj +<< +/D [48 0 R /XYZ 108 79.742 null] +>> +endobj +619 0 obj +<< +/D [12 0 R /XYZ 108 761.614 null] +>> +endobj +620 0 obj +<< +/D [19 0 R /XYZ 196.392 504.93 null] +>> +endobj +621 0 obj +<< +/D [25 0 R /XYZ 211.834 516.035 null] +>> +endobj +622 0 obj +<< +/D [25 0 R /XYZ 171.838 285.3 null] +>> +endobj +623 0 obj +<< +/D [26 0 R /XYZ 205.572 561.361 null] +>> +endobj +624 0 obj +<< +/D [26 0 R /XYZ 501.489 414.049 null] +>> +endobj +625 0 obj +<< +/D [27 0 R /XYZ 228.535 750.656 null] +>> +endobj +626 0 obj +<< +/D [37 0 R /XYZ 108 475.531 null] +>> +endobj +627 0 obj +<< +/D [38 0 R /XYZ 108 474.163 null] +>> +endobj +628 0 obj +<< +/D [42 0 R /XYZ 108 768.389 null] +>> +endobj +629 0 obj +<< +/D [44 0 R /XYZ 108 453.839 null] +>> +endobj +630 0 obj +<< +/D [19 0 R /XYZ 108 768.389 null] +>> +endobj +631 0 obj +<< +/D [19 0 R /XYZ 108 424.083 null] +>> +endobj +632 0 obj +<< +/D [28 0 R /XYZ 108 435.591 null] +>> +endobj +633 0 obj +<< +/D [31 0 R /XYZ 108 768.389 null] +>> +endobj +634 0 obj +<< +/D [34 0 R /XYZ 108 369.411 null] +>> +endobj +635 0 obj +<< +/D [16 0 R /XYZ 108 313.153 null] +>> +endobj +636 0 obj +<< +/D [17 0 R /XYZ 108 621.411 null] +>> +endobj +637 0 obj +<< +/D [10 0 R /XYZ 35 872.54 null] +>> +endobj +638 0 obj +<< +/D [19 0 R /XYZ -1 872.54 null] +>> +endobj +639 0 obj +<< +/D [20 0 R /XYZ 35 872.54 null] +>> +endobj +640 0 obj +<< +/D [21 0 R /XYZ -1 872.54 null] +>> +endobj +641 0 obj +<< +/D [22 0 R /XYZ 35 872.54 null] +>> +endobj +642 0 obj +<< +/D [23 0 R /XYZ -1 872.54 null] +>> +endobj +643 0 obj +<< +/D [24 0 R /XYZ 35 872.54 null] +>> +endobj +644 0 obj +<< +/D [25 0 R /XYZ -1 872.54 null] +>> +endobj +645 0 obj +<< +/D [26 0 R /XYZ 35 872.54 null] +>> +endobj +646 0 obj +<< +/D [27 0 R /XYZ -1 872.54 null] +>> +endobj +647 0 obj +<< +/D [28 0 R /XYZ 35 872.54 null] +>> +endobj +648 0 obj +<< +/D [11 0 R /XYZ 35 872.54 null] +>> +endobj +649 0 obj +<< +/D [29 0 R /XYZ -1 872.54 null] +>> +endobj +650 0 obj +<< +/D [30 0 R /XYZ 35 872.54 null] +>> +endobj +651 0 obj +<< +/D [31 0 R /XYZ -1 872.54 null] +>> +endobj +652 0 obj +<< +/D [32 0 R /XYZ 35 872.54 null] +>> +endobj +653 0 obj +<< +/D [33 0 R /XYZ -1 872.54 null] +>> +endobj +654 0 obj +<< +/D [34 0 R /XYZ 35 872.54 null] +>> +endobj +655 0 obj +<< +/D [35 0 R /XYZ -1 872.54 null] +>> +endobj +656 0 obj +<< +/D [36 0 R /XYZ 35 872.54 null] +>> +endobj +657 0 obj +<< +/D [37 0 R /XYZ -1 872.54 null] +>> +endobj +658 0 obj +<< +/D [38 0 R /XYZ 35 872.54 null] +>> +endobj +659 0 obj +<< +/D [12 0 R /XYZ -1 872.54 null] +>> +endobj +660 0 obj +<< +/D [39 0 R /XYZ -1 872.54 null] +>> +endobj +661 0 obj +<< +/D [40 0 R /XYZ 35 872.54 null] +>> +endobj +662 0 obj +<< +/D [41 0 R /XYZ -1 872.54 null] +>> +endobj +663 0 obj +<< +/D [42 0 R /XYZ 35 872.54 null] +>> +endobj +664 0 obj +<< +/D [43 0 R /XYZ -1 872.54 null] +>> +endobj +665 0 obj +<< +/D [44 0 R /XYZ 35 872.54 null] +>> +endobj +666 0 obj +<< +/D [45 0 R /XYZ -1 872.54 null] +>> +endobj +667 0 obj +<< +/D [46 0 R /XYZ 35 872.54 null] +>> +endobj +668 0 obj +<< +/D [47 0 R /XYZ -1 872.54 null] +>> +endobj +669 0 obj +<< +/D [48 0 R /XYZ 35 872.54 null] +>> +endobj +670 0 obj +<< +/D [13 0 R /XYZ 35 872.54 null] +>> +endobj +671 0 obj +<< +/D [49 0 R /XYZ -1 872.54 null] +>> +endobj +672 0 obj +<< +/D [14 0 R /XYZ 35 872.54 null] +>> +endobj +673 0 obj +<< +/D [15 0 R /XYZ -1 872.54 null] +>> +endobj +674 0 obj +<< +/D [16 0 R /XYZ 35 872.54 null] +>> +endobj +675 0 obj +<< +/D [17 0 R /XYZ -1 872.54 null] +>> +endobj +676 0 obj +<< +/D [18 0 R /XYZ 35 872.54 null] +>> +endobj +677 0 obj +<< +/D [41 0 R /XYZ 108 469.035 null] +>> +endobj +678 0 obj +<< +/D [43 0 R /XYZ 108 316.545 null] +>> +endobj +679 0 obj +<< +/D [45 0 R /XYZ 108 761.614 null] +>> +endobj +680 0 obj +<< +/D [46 0 R /XYZ 108 571.626 null] +>> +endobj +681 0 obj +<< +/D [20 0 R /XYZ 108 548.912 null] +>> +endobj +682 0 obj +<< +/D [22 0 R /XYZ 108 671.124 null] +>> +endobj +683 0 obj +<< +/D [24 0 R /XYZ 108 423.751 null] +>> +endobj +684 0 obj +<< +/D [27 0 R /XYZ 108 593.031 null] +>> +endobj +685 0 obj +<< +/D [28 0 R /XYZ 108 164.062 null] +>> +endobj +686 0 obj +<< +/D [30 0 R /XYZ 108 215.532 null] +>> +endobj +687 0 obj +<< +/D [32 0 R /XYZ 108 523.876 null] +>> +endobj +688 0 obj +<< +/D [16 0 R /XYZ 108 544.092 null] +>> +endobj +689 0 obj +<< +/D [34 0 R /XYZ 108 652.921 null] +>> +endobj +690 0 obj +<< +/D [17 0 R /XYZ 108 182.025 null] +>> +endobj +691 0 obj +<< +/D [39 0 R /XYZ 108 545.884 null] +>> +endobj +692 0 obj +<< +/D [40 0 R /XYZ 108 446.258 null] +>> +endobj +693 0 obj +<< +/D [47 0 R /XYZ 108 528.713 null] +>> +endobj +694 0 obj +<< +/D [20 0 R /XYZ 108 503.439 null] +>> +endobj +695 0 obj +<< +/D [21 0 R /XYZ 108 761.614 null] +>> +endobj +696 0 obj +<< +/D [36 0 R /XYZ 108 484.402 null] +>> +endobj +697 0 obj +<< +/D [39 0 R /XYZ 108 203.175 null] +>> +endobj +698 0 obj +<< +/D [40 0 R /XYZ 108 290.838 null] +>> +endobj +699 0 obj +<< +/D [37 0 R /XYZ 108 753.21 null] +>> +endobj +700 0 obj +<< +/D [37 0 R /XYZ 108 620.348 null] +>> +endobj +701 0 obj +<< +/D [39 0 R /XYZ 108 768.389 null] +>> +endobj +702 0 obj +<< +/D [40 0 R /XYZ 108 768.389 null] +>> +endobj +703 0 obj +<< +/D [41 0 R /XYZ 108 768.389 null] +>> +endobj +704 0 obj +<< +/D [41 0 R /XYZ 108 649.946 null] +>> +endobj +705 0 obj +<< +/D [47 0 R /XYZ 108 768.389 null] +>> +endobj +706 0 obj +<< +/D [47 0 R /XYZ 108 661.901 null] +>> +endobj +707 0 obj +<< +/D [18 0 R /XYZ 108 676.666 null] +>> +endobj +708 0 obj +<< +/D [18 0 R /XYZ 108 513.196 null] +>> +endobj +709 0 obj +<< +/S /GoTo +/D (chapter.4) +>> +endobj +710 0 obj +<< +/Title +/A 772 0 R +/Parent 7 0 R +/Prev 446 0 R +/Next 773 0 R +/First 774 0 R +/Last 775 0 R +/Count -2 +>> +endobj +711 0 obj +<< +/S /GoTo +/D (chapter.114) +>> +endobj +712 0 obj +<< +/Title +/A 776 0 R +/Parent 7 0 R +/Prev 777 0 R +/Next 448 0 R +/First 778 0 R +/Last 779 0 R +/Count -4 +>> +endobj +713 0 obj +<< +/Title +/A 780 0 R +/Parent 448 0 R +/Next 781 0 R +>> +endobj +714 0 obj +<< +/Title +/A 782 0 R +/Parent 448 0 R +/Prev 781 0 R +/First 783 0 R +/Last 783 0 R +/Count -1 +>> +endobj +715 0 obj +<< +/Type /FontDescriptor +/FontName /DINPro +/FontBBox [-178 -229 1172 1148] +/Flags 33 +/CapHeight 1148 +/Ascent 764 +/Descent -236 +/ItalicAngle 0 +/StemV 0 +/FontFile3 784 0 R +/CIDSet 785 0 R +>> +endobj +716 0 obj +<< +/Type /Encoding +/BaseEncoding /WinAnsiEncoding +/Differences [0 /.notdef /space /hyphen /B /e /c /r /a /comma +/D /v /i /d /J /period /two /zero /one /five +/A /l /g /o /t /h /m /p /s /P +/y /n /M /w /quotesingle /H /C /colon /slash /u +/three /U /L /I /R /four /nine /eight /T /f +/quoteright /S /b /O /numbersign] +>> +endobj +717 0 obj +<< +/Type /FontDescriptor +/FontName /DINPro-Bold +/FontBBox [-208 -234 1174 1195] +/Flags 33 +/CapHeight 1195 +/Ascent 764 +/Descent -236 +/ItalicAngle 0 +/StemV 0 +/FontFile3 786 0 R +/CIDSet 787 0 R +>> +endobj +718 0 obj +<< +/Type /Encoding +/BaseEncoding /WinAnsiEncoding +/Differences [0 /.notdef /space /hyphen /A /l /g /o /r /i +/t /h /m /c /p /a /e /s /P /y +/n /M /w /C /k /T /f /U /S /Y +/u] +>> +endobj +719 0 obj +<< +/Type /FontDescriptor +/FontName /WQDHNC+CMBX12 +/Flags 4 +/FontBBox [-53 -251 1139 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 109 +/XHeight 444 +/CharSet (/A/B/C/D/E/F/G/H/I/M/N/O/P/R/S/V/W/a/b/c/colon/d/e/f/fi/five/four/g/h/i/k/l/m/n/o/one/p/parenleft/parenright/period/question/r/s/seven/six/t/three/two/u/v/w/x/y) +/FontFile 788 0 R +>> +endobj +720 0 obj +<< +/Type /FontDescriptor +/FontName /VPVECV+CMR12 +/Flags 4 +/FontBBox [-34 -251 988 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 65 +/XHeight 431 +/CharSet (/A/B/C/D/H/M/S/a/b/c/comma/d/e/f/fi/five/g/h/i/l/m/n/o/one/p/q/r/s/t/two/u/v/y/zero) +/FontFile 789 0 R +>> +endobj +721 0 obj +<< +/Type /FontDescriptor +/FontName /YXMHHU+CMBX10 +/Flags 4 +/FontBBox [-56 -250 1164 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 114 +/XHeight 444 +/CharSet (/A/B/C/D/F/I/M/N/P/R/S/W/a/b/c/comma/d/e/f/ff/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/y/zero) +/FontFile 790 0 R +>> +endobj +722 0 obj +<< +/Type /FontDescriptor +/FontName /DRKHFF+CMR10 +/Flags 4 +/FontBBox [-40 -250 1009 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/Y/a/acute/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/tilde/two/u/v/w/x/y/z/zero) +/FontFile 791 0 R +>> +endobj +723 0 obj +<< +/Type /FontDescriptor +/FontName /RZPCDH+CMTI10 +/Flags 4 +/FontBBox [-35 -250 1124 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 68 +/XHeight 431 +/CharSet (/A/B/C/H/I/J/L/M/N/O/P/R/S/T/U/W/a/b/c/comma/d/e/f/fi/g/h/hyphen/i/j/k/l/m/n/o/p/period/q/r/s/six/slash/t/u/v/w/y/z) +/FontFile 792 0 R +>> +endobj +724 0 obj +<< +/Type /FontDescriptor +/FontName /XPJKDB+CMMI10 +/Flags 4 +/FontBBox [-32 -250 1048 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 72 +/XHeight 431 +/CharSet (/B/C/F/O/P/Q/S/U/comma/d/e/f/i/k/m/n/o/p/period/q/r/s/t/v/x/y) +/FontFile 793 0 R +>> +endobj +725 0 obj +<< +/Type /FontDescriptor +/FontName /DBCZPB+CMSY10 +/Flags 4 +/FontBBox [-29 -960 1116 775] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 40 +/XHeight 431 +/CharSet (/approxequal/arrowleft/bar/braceleft/braceright/bullet/element/existential/greatermuch/logicaland/minus/multiply/negationslash/openbullet/union) +/FontFile 794 0 R +>> +endobj +726 0 obj +<< +/Type /FontDescriptor +/FontName /ZRYVWR+CMCSC10 +/Flags 4 +/FontBBox [14 -250 1077 750] +/Ascent 514 +/CapHeight 683 +/Descent 0 +/ItalicAngle 0 +/StemV 72 +/XHeight 431 +/CharSet (/A/C/F/I/M/N/R/S/T/U/a/b/c/colon/d/e/f/five/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/six/t/three/two/u/v/w/y) +/FontFile 795 0 R +>> +endobj +727 0 obj +<< +/Type /FontDescriptor +/FontName /FKUNAL+CMBXTI10 +/Flags 4 +/FontBBox [-29 -250 1274 754] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle -14 +/StemV 107 +/XHeight 444 +/CharSet (/i/l/n/o/s/t/u) +/FontFile 796 0 R +>> +endobj +728 0 obj +<< +/Type /FontDescriptor +/FontName /ITKPKI+CMSS10 +/Flags 4 +/FontBBox [-61 -250 999 759] +/Ascent 694 +/CapHeight 694 +/Descent -194 +/ItalicAngle 0 +/StemV 78 +/XHeight 444 +/CharSet (/E/L/M/N/U/a/b/c/d/e/ff/g/h/i/k/l/m/n/o/r/s/t/u/v) +/FontFile 797 0 R +>> +endobj +729 0 obj +<< +/Type /FontDescriptor +/FontName /DLCIUG+CMR8 +/Flags 4 +/FontBBox [-36 -250 1070 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 76 +/XHeight 431 +/CharSet (/equal/one/plus/three/two/zero) +/FontFile 798 0 R +>> +endobj +730 0 obj +<< +/Type /FontDescriptor +/FontName /BJOGWQ+CMMI8 +/Flags 4 +/FontBBox [-24 -250 1110 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 78 +/XHeight 431 +/CharSet (/F/i/k/m/n/t/x) +/FontFile 799 0 R +>> +endobj +731 0 obj +<< +/Type /FontDescriptor +/FontName /JKSUUE+CMSY6 +/Flags 4 +/FontBBox [-4 -948 1329 786] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 52 +/XHeight 431 +/CharSet (/prime) +/FontFile 800 0 R +>> +endobj +732 0 obj +<< +/Type /FontDescriptor +/FontName /WIRDCL+CMR6 +/Flags 4 +/FontBBox [-20 -250 1193 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 83 +/XHeight 431 +/CharSet (/one) +/FontFile 801 0 R +>> +endobj +733 0 obj +<< +/Type /FontDescriptor +/FontName /TWQYNY+CMR9 +/Flags 4 +/FontBBox [-39 -250 1036 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 74 +/XHeight 431 +/CharSet (/a/c/colon/d/e/g/h/l/m/n/o/p/period/r/s/slash/t/u/w) +/FontFile 802 0 R +>> +endobj +734 0 obj +<< +/Type /FontDescriptor +/FontName /TMCDBM+CMSY8 +/Flags 4 +/FontBBox [-30 -955 1185 779] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 46 +/XHeight 431 +/CharSet (/minus) +/FontFile 803 0 R +>> +endobj +735 0 obj +<< +/Type /FontDescriptor +/FontName /UJRKLY+CMEX10 +/Flags 4 +/FontBBox [-24 -2960 1454 772] +/Ascent 40 +/CapHeight 0 +/Descent -600 +/ItalicAngle 0 +/StemV 47 +/XHeight 431 +/CharSet (/braceex/braceleftbt/braceleftmid/bracelefttp/intersectiondisplay/parenleftBig/parenleftbig/parenleftbigg/parenrightBig/parenrightbig/parenrightbigg/productdisplay) +/FontFile 804 0 R +>> +endobj +736 0 obj +<< +/Length1 2193 +/Length2 15490 +/Length3 0 +/Length 16791 +/Filter /FlateDecode +>> +stream +xڌT%z dSζmƮvmLM䚌ɶmlLz;}kjݾn_7~XI^$aoBbf01201Y؀#'99[B ty] 26fV33'?N<1)@ cor'wt4py*j377'a[  tپg4TM,A.Łݝh`d.@MptANn S_ +@[п1,,P7sq:K󻋫) *-PtX_t7p+@{[9PcppL28ۿ݀6@wK$wldliGƿ¼YTd W}bN {2{vvAfvf0uu`TttI]Gfr311qrp@_ <@+svwZ{;@'W?&.cbٿ,=L `7#fTR7*ED=zvf33+7 qہ[wuL"JۙE{!͠P7>T_o" WT2m-m"wX#k:,A%!?Xnۻ: h>&w3Gg}9l@f.+~I;?3sӚ ǞOG Wn~ݻ?ᙸ:7*<@& &!V5!m&g4S齗]#$QW} t'4܃#Nu+B}\ޒl2 +4=0Yp,\OG@&h )Cʅ'Q_:_!\:CU=J/h<8sڅen={H&+k&Kzs.!-4a ΢w/ Ql?;JG'FqLŘ(o QEϩ,ya6̇wV8xR1)XpT%<7S- taa"^@? e]Pqn7å䤤l0)pق84KshZcVc?~tz!*d ? +!~\tTs Y2-MG[tA>EU&g ˃هpVyM7EJ<u%3~VLKNJG,3gj&wE0M]w0`s,V 8R+ be%#nf4XuY ӦW]?בNmmi*0Ri+4!C ^:wȇ)5ޗ"tD{zo-toq:D)mV+:-PZD M,t+}1(ml"ꚃߥ/R_Z~w#U쵧a~yak!qģ; 7*=O/c)]vu.|M= Ija/G9CEwN }H i=00?ģSĻ<&=39 'ȥȤ@ž7?ؕ茊.p^ʕ}nHό&)b/x\#UPCZ&0 g:ӟ.0H׮kT:W%bi@0i#pж4?w6پc-'jW%wWi&;W!55^,(2cŕ?3(8 +~tЎjHV rY#XBB۴b5)t "u\馑gLY`-Y>ɳ;U\ ެ|5A_7+ތ 66P:((ZOHjHكeKh#}P=zijFC4(WCCI̦4 NayhMdsTrr/Sv6!8=εn{ Mj SN/1.xՀglC* 7~)_ކ[)T+;qht'貎FT9}\LܖOu64Mscy 9ZtEjmno#[MӘ ỷ0|"+O^pjx:,KV7l#q}t/DK>wbt_CJVm@eCg#NtĦ$na/j)TRh{u@F8 +¨ 5h( _`kP +2lk +8uh,e\er%Pϻ'B(5D/確S_W9d,َY֫ݰu.OE﫫7#O= baIdIxpim:VuL1Y510e,'qϞbzuhRK_3n$ ÓHwݰtC'먱ewU *(9Hd)I.K}ElMʲ`bm $|zRܛqO GWd9"%џ^߳uLf}OqdYP+7T +suUuv'+WDf(5klY D']6ulJLduy&C5#cѴ U+@Yə]I1 "䃍%ڣNljs֐E\oq27UӜ +'cσe,J)t?9 G/.6|wR L%PC|쇟4B+v*[w@cE:d !f&g2> 2`#`M]^Q-JY&uTcK`ovJ J3OW("+QWdt[dSVH2'PrMe,"㜔2?[ 3*Lclr%ȭZY+hl64 ё1U>%s1rvWDo%Ȉ4탿q3TV[@ʣH 3zcщv#fuS wxp&_r~|_G!xzANv-bĘSv tWgd3OvA=.;/CDx!dWaGEV[ $ ء @c6/:.wLNO;0}j[=LߕB [jp?$}1M3zJ<祿>ƆU%A߲G\lv{9#k@'Ri rz鵙J0p EjkWl'WS ;"% Lo2<v[ĚfIOZM%#=Ex~=}.;خlГpU?$D 9'5C= +DEZ#79DiY#'x%"kМ)Y?9ww~ZBd)H=[tT-#_ 2܅M'#YlNv/"Pc,nE)!0@Y#~I8@Xut\ylGp^<;c[VNnJ7ѤH9W;Gz!o L%$<౦80e=$OSW1|D9(Ӻ$L`h;/i:A_{o6BpOF)t H~;se9^aWwy_F2S3K6 [&;a]P6"9~^9 +P404MZb0~FD hЙ~/w!PS"ǔ;ov#eCxY6dSˊ#&S:$!g?ݭ3/"#?<őH: Bqp/X3H7XGPVC$ jo!TvtIx/a}/Ǡ9&qt6ŽR}F́swX2X4}cXK6m]Tk;(d\~QƢ]]s&AGLۥ˻i}CF|mpe!mj]dz.v.Lw2M( +BjLt"iM:cT()EkڡB*+)aQG Mjx:(qiĂ#{IV>,rf&^^< UH̍E8$_E>=jcF7kvDo5<̶Q.x/ ્gK{ցx]V P6p]A!^œg@2@GOa|JFlG! ̫۶ 0{^%пqǩUDZsJʳN^y)k>Nq'LW +f-u5pDgr?#ox>I6qאp،K߱s$)FHou1v0sH&mRH6fslLQ7}x/KYuқrjMq~x[bU1B~7tsmbf[ԶclG*ZEB⛨ }̧g/쩐(r66XM]H">_U-aGFJ_(U7~ aCy~U3=ByC,&y\Ky)XtQA6:ehCd?+2 o۾4e+Q#fNB`ьV1/ADdZ9_q+hjUC \Zq-"COc|ղ e1mS< p/?vx_Ⅱ:C׷a3 8<WX=ګM Q,ovV vRJpYpg4%DOÀhslErMea 슔IJ8l}%ƵZT֬L_٘1*Pn*ѧ Aiha!9SId+ +iǰ_SGcIbz˗㾀~^ +,`wd p}W'QJOB-t|B9 + >ؕ BmЭ:Ә!*ocr#׮ŃAD> 8n|S1 Y \WGY}(>l~r y` h[> Qgim5AHgϽE](BIFz㼞PD_3!ua^ mTQ@s8 +ѺB MS]=Q@YqdC/T o9@T;zbzv`+?A .v#($R Bƨ],Q7!hg' +"9#*SÍ(yQ/s w2&;{8g?\D:Wka"O6#' K($ 9y7zQ9^SCHC"kNXSP瀕U%Ny"}3s/$M>WH0}$}z1ZTyBD*bdcoO; Ŕ?(nǹ6 /S$/'[kaS ޝMjGY-Bzk4axuty3pL\#<^KR̍V\Yc`{|dٺc!?DD~"Q$LhjaHa~!s[2;D?ĢlɲT'|Zf`RwD)+&+s+B4ܘ928JR(TW)|E\V* iKjʋIL*P8T8}@t3Sc(Ra,5tud{ws&DH!=(PYr6-y(t%Sc_C< +O0p2N@zpф<,=jh!V=]"b 8t(;al Ž72@&t*=@iTyEbFMWчv{ƹ@+[DZ&X 4ӾPݵ<8y\lc@4U}=6H<׽]CR:&0MUqXvU,b=؞e<Fup':Kgc1F:ꙵnJ8N-87W(ƴ*-h7r 3%il+ 4 :pIi.ɪ[Bd|-*.n͠:Ͳc]NLaVDE/vAef:Q;1.qk^䴟I2 &hc +ʵX L|?c'?:91w:iz+x>]ڋcCMO*lp_S{5\ +acpQ>lAl~%doLjnD4^mH +~VgqeSmiiB/mP3U^]+¬EuwoT{a҂!:4n]\% x6E?u"ymyv^k]ʗυѵaT"[:X5jw{Օ|V㵀N;9v:K@*M>lu:7{[MȦaӞf4.\wiDPG(eW?Bprl?=܁zDU4!rr 2qY0As>/\h^H<Kj7LW+f_{p86T0"0?WU]Sl|w0=1O 귓jV:F;7Sᦞ,D*rS=a5|0dlq +`8NˠUb}"!j|Fr%g.%h5^:dgZZ%H-k:1*>199M5p@}jrmCNMyQUNj\/COB* r}|Wqx T*g3J(ؕ {KLqqX;[χz25ZiXõiNOrNbM2; Dm-W-F̱):𕾮}͢*w ^'X?( h)G_ C_Dz⸻F˩S.TaE ҉[&ϰ0>bNy*;o +{eCq$1!ch֚HI86HSO@\=r|q+F_:D&m;Ć +}X!c-%"jP&Yq;}5ܻZS}8^ˑIǭO,OfL 0 +[}ד^ALY mb78M~xFu!נ˞)U}$R>^Yǫ()D2jCmv~A=AWߺ^nOyDM_O߮=aDk-S~%4݀^^NGAOjBbL?Yop%h&ϻ  wrDz}'֯bա?^T+h 4m/.$ )y? w1q"F:oB_78x/):*(h&FxT@ʷR(7v*9➶7@BH/|ڿzf7~^O{'%m$߆ث9 K"3<:G_R'~-GSsF{O;pDO\V'"8v2>]>zƵtEL +-Oa>SR_ ~&G$8;{Մg48~ěe5e( s2'OJЃyU-"c9vhpIY-)R(>KAkY ܠHmB)a|k T#̮sBgOe'<)`Sc&j#4Wѳz+8GUF%7Fv9DС gBH)`5\Ken7J6fb,D0 xmNכ28"<9,W61ƎV}c`å6жm%ɔTM=;[ +>p *5=|`ጣ]8*u-Chl\c߆R28޴!|-n ^0巾dB&'XWF$ѤPIOt\Q,ejXGϞ4IzOvA.УQ[p! Н|w^%܎A3<7'R4?A-juh]F*45HJ%}u.OY8.8v>o8;Y\vw[k,YSN%bVF$X=B;$?J, g2,qM; xWr9C)igW[@i4BX`tPs}moc-i$ +Gaq^̺0fM>6k +lnz&63jpQ2;e%oB"eVG`OWt ~ҙM+*gh JkE5֨vzԾ("fWMy)M?~WQc*xNg[ A8J`&Ds$*b:̓Wӕ:^IRdmݷ&Q5s< ׻ZX ;GiB0:q\$4nw"'ˮƸhF1WiJZN?斫W6K ^͍G 5yے>#Dz`v LEKhKwZ)ҬT)ZŖ~bΔîf\z=J)'tri6D@:n~rfb躛6U㼇0m\n¹|i T|7t%M/]^C$TqYm eI$Xv*4U2 +A!`ú,Iα:I!XXOi"Ln:wW6.jYe-И,&<(P:8| +#g\ wn8Iwnug½G|3+/c5~lud Zu|E +Ri f]ѭ>kϿ"֒d,$RB3P;w,>;{Vw&`øt:eBgM~3ޭqJN#Tr;D&ט(G:UTMɤ-ET@(0ތNfmnM6o.Ga~ 5S!ZqZ?`oT[&R +CWfy/ 8ԣڛH_{U]cSf^8zgN9(|тx5EM=؜e@Y݈u/yE<̙m`Se +mF${ f +enִ;)VGSa:VSlLR7<z͜B\ocZMot?@^fIEXh(K*$fOΦ7Ä>{J6_ZzY33 +9XlSa[CR^Pcpzu\=?"mç]ߣӪ/"c@hGsmoX%B&LN|7NTs?Z1= a:=cd0n5^\|`> &[>@"{hx/'Sc$8nl]1#pq@{ŲH=ԡkj+u%s!_ceK^gB=[,A#܍i~9EʯSaxTӭ1%u^hu&؏R`sYYƸj*S\شҘn/n8Lߥh:c_3Py$Gq~E?ӍX7oT dAõU yUȲaIbJIͿ)=_R~r5t|zP -eGlۀ=g>:"@9b~!ʜN6@B`)nFmQKRG}Fy]DNw ;6aX6cdJq}J7P;ʘIx* W>ܐdp+AG5%v5^уK0م*TxnDŽS}/2 :6a[t "FcX +^RfyMzC@2R'nB;z{2xE3 $%qu/C2LSҠ/K^_܌O!x-2ƌ;Yg$H %Lg6Z Ao +l#sDXӂ1%sd?$^#7<*4ӎĠd;B ZGI. >9.vRִ= 9iA nnsj" (b#.dD߬D+eX ߊf3];LB_5`,}fXvͬ 4Sl )wR(ꢇE{biTWͦQ z{d q۪ILS,,*cI3v +k%'wZM$+R + Ay.qoI)l؉\eT'Yo-z(bz0r)w + h,4=!mJGcM!jk/z1!|0] GNS oƾ-L)C0'\ 4Zx;$<1]dy9W%JGKoM]R;F%hvt|Rg E1%?xktꔧ`ξ%3rmɲŲ&jUY?rkeX 3GWpQ`;MҀHa4r1`!&)Ԇ5l%ῢ.+ 7F_njl6Tuf/ (x~Hxd 7VS~Ȋ" +!% ޗ3rًhz=9W֠'!hMHTzZuw:C}3Pe5Upf?Nfaz+hpB2i]<ی{BD, 0+D1CBEny`VCCë0@&zӓoJp +?:yN".W~ĹfdEYZ.jn񕛙xq%fi/w +T .{]> /7ɻwzJ0Rlz,7djSU=KֈKT>XnaQxğ~N0I7%J%ٍ +)7ysZP}LaS Z YMe*[(<+"8P[3q'3l)7c +Jy)Bp6boo;ou:'&&/=qYB@-b($P3h +L9ܷg#O&[x#.˻\|8(N~~U;[meI;i_Ńxf+5U3aVuh{1b_IzcW/᩟ɤ7!T9r!x^s­zKKW31N/hveЩ!s%I)#d{&:M9ܣd3J@!J#EOÆvĢzڛ6K9c9 +endstream +endobj +737 0 obj +<< +/Length1 1879 +/Length2 11968 +/Length3 0 +/Length 13129 +/Filter /FlateDecode +>> +stream +xڍP-ݚ%q ݝ\ A;3{Uݽ"WQg37J931$̬TT g_fD*- do 0&ihosqظxYY쬬| $]AfEf J t~=?_t6>>?b@0hl }=no +:{W ZAKgg~777fc['f{0# l P:@3o%c[ʘ ?n` `29fؙ +eݟ +0 re.#dg0 +Όc;߁6NƮ c׀?TƯd +98;1;l~Kd]Rvf@;g'$A`k=XYk;{7;93M; PVW?6 3tM-Y~pdm~U`0_?]g ߎFll33hCh'~|0:{l߯鿎?/ßۻ88L\l>^^+翫?OAY;s{ߟ^{M_C_Gg?r?)cmn?-㯀Ivq~ +EݰPm4Wu;,ln#I4S9Z9B6 ;?}3~}8.:Rvf` { ;uÀL65*`nF}\ߦ?7E`X$F<wHſ/Eo3V1XLFuA6 _?7 8~CZ,_|_Ϳ+S +/W^x}ÿ+WWNWs~˿+ku䕗?^@5E.`=?@;qyT Ъ.FȍiBhj_;k +DW )4ҋ+E{#BuҖ0Nmzqi +wpX 15t+dU /J>֝[{@X¾A5 c7IvXdֹk]y΄`_0Ͱ:w2%0Ljl :iKʑDb "qJKEѨ4d_DQ}>x:p]Y"V]˛|L}3T 6fȶ\h3mpves&VA2 uq4d%D,lXټh.">gb6zX҈/^}a)M_PxV)u4:}gAa |(\ڥ5CR6uH!2k3VE/__A[yv` d,"?N] rOuCA,):GtQ +Ѱ:_(I4Efg27u99K="A]Hsw'YK? +A6Y +e}ҷ.5}g&[V pw/ yPrlUivcٹ,n'@0O$ڕ+Q/IkEKfg2tM@E=ih)E~uF)8X<v8i1zFǓL&,Kޜl;v4m.Qvd ;댏G}rّb9t!zp$a}BOQ\78-j9-WXCm%X4L[uXIβ/bckdj!z 4E).WL[`)2ci$?4M&҉BJM21ر.0EATNFY!.?Gtj3ufw;{2V}yq*'LwUGM7P Eby &u1a>@C4XheBo/(+[BxT§zcb*TQN$Nxf!q2K]$q:1  IƼٜXzVK%{647-ZRp,zLngɑOmz Z\N0TmH*zǒP̙K¾f#"48ڧ@hpc}0TOJSzԕXTP5o.A5E›]&DTyI~pX= t µٌ#?!'hn_߸tsJ,DP׸Q9Dh5cFXfq2ft+p6g6zg%\5P9bl|;8_ V\YDk _ނgs2{Q:#1xT5:?\Fx| mŪW ɸ 1$''3?l0ƹI&8X3@n*CR[b롕&&G ?Y+C}.rjPm0*df^F V +n%Jr?kKE + (1wfZNzfOF7LjL3!^|AM$F&ӑ]Yq t[ ]$Jĵ\n57u.巌_H'h5v~X0k%!A܄Qcxd؇uͽ5SCKn0MxѼvH3%3ŤJ aOh^N˫ZreI9abL>לXz"xY[*~3%󔀂DYc5>G3N5$ F\8=\<I3,>xʚˡ2dNK.`;PpJBFfxnBI z `% +wcQe7ZLrͺ_/0EM` RXX2'E$ia- NJ՘R4)6ī=88Kj))&St|ԅ;ldՔ4:&eJJEM\ j *n~ +;7@;@9{bào쨻ePC(=hP!]?*($5Ntg@̇R|n&PmN PKзVMMdWqڄlbo7t.!9Iz%pJ,δ ha_V|IkzVy}r~,FK&Ƨuu@ml[bU "9qYNIw⇎`3q V _PPYRҴMQrB:,&EvDEFy $WfNZ࿑ h>H#Q&,Aܶhl B:<@ G;}$>hURUM ]OcŁ rUz(͸ftj=/"+zA" RXaD=2(CY7]I=LifqJ?]c ;dsZN 퇻u ;wX4T 3ĕD.?fbnX|+bB9V֛7j l_>EW"aT?SՙS(;ƴۘwYa +,m74N6^kcSRO,դG.bãe?gyœK2OG6oW$bm[0> g?Hz}mۦXXq W`xN3^xY|}p)ӫX~ LBҳl^;FRDž ;?[Ԅ] +XF\\H٩c&}PɃHFNDd5džP nZ?š湥~(T}mGNi:>? p.(L`A:kɺQT3t*ud/;|KtRڏVT*U-#h26I +"PiY!{E?aJ{-]n ;I )#L? }Owgho+m:,}g7鰉YkEBnp?_\`}SE*؃;n$"\jhVu~&ҫ +,İLo~I6| ! \g GJɐ_- ձXrS%|v [Į3/c`Ww IhSYm1-nRɷN_R(MSXFf*ip|›$f!YlkojbL!,-%f8ot Z[<ԎOq7vGHwܭ\H-(Ai IjĩyZJ *gGem7>)@E<3B@mx*m ê*/zF^".w=Z^z :@ a(LsGd:$7Tu{޿F6mQ:<= $%=:T7f1wO5VwӆLJ +*Z_. +ZȬH[%/wk^;spiAyh^P5X.XI`omʗ"0bEE0O0iEpF.VQʈ;w̄)5CUnz~呋e\rJKĎDoS*S8B5/urJw+L|O w+uz[$QR5,C}~БϮ$bK +fTcH0yyǴaL|jqYgOl**S:.'89ej?:[ep4,,Pk"{yR<`UʒyL] (vSX>k7,fSGJX /! lࣜ~㸸O@c 'K)ܔs+KڪѨ^"nحl9R0`ZA`2yC$W\R4*{ۛ +o N'1` ɱ{IDe 1&mawuzNW[Ğq>,À2mQ=WxLCxpga0Z[^!]X4;fi~ʰO[9EXsiW8>$ƓX3#qE*x9HGc; bii&-`#^G88(e%u1{5e: 2+s.A[:> itě1o`}~077U +ErjGsD=Zq TLRG,Imf]ys$O// '7BM=_TV߰DPmpWv ;j[Mh< u)(̮u@#b%%^1^%ԥmC=y?EZOhle }91O9WmB100i~{F5hqsxPOeRaʙ\~(PL[$y[Eku$V^'MU!^ +R1wYuaZ;wWd ҏh>&A%Ǝ0Mi̺Rm/4نYT`PF ZNzܿ_-N̹;},=S;fQ/{Ytsa\zRi_$6)8ꨍodI~%ZcLDzF";d#ywxsp~m +*ROi<:nLB~F1jmcWfS~{U[f'~X)$٘b=B)6I9|ujDޓ/7{),RkoQbqB0u)WPs܏ȲBO/1KXp͍O5"-wB-)y-BvgGjCȳ, Ҳy l,{ae?jI1Dr|se)>J/Q!LP7 C\ڶYO>+ YuN:+-Jh366tk:x-b~M ,6Gp_sss~ʛ ++;Fa+ź爧,]sx6;=^USj;Mys<03\eQ6\ n9QYV moTv&`Wt)vn)#Z'͟V#P%\ůS~{%F{5@*gK0BGMcm +DUP'B6; "Z*' e= P1pqIwjD95D>w6ōJd@z` kWyUBf`²NuOvn@b4W}kOBO-kFTBKKغYD :Y8 _¼]ڢX9t'Q|t/2GFlۈBp}7jb*)IXDZIN΋J 9ϳ92\da.d)WXz}wt/63B7bdAⰘ߰-RH# ,ڍ5dOcXVa p!1V^7m\Q7"A^~ǘMc <[ddTtNAt1 +Ƅ''[oſ4Q~^]u9Pi /_"Omϖ8.<Ӕ5F 'gS$Շb;֦@i#eAّ y^Kd'F|\iN5+ﷳfi r0s85ܪx{7ֿ%ep{Nmb#a5,9l#1B)PrPZ* `iYb( Ij (9],~%8<ǃJ̓<4^@hK("Xφi~0!9:6 Nq8;T4# 2knLbk\ rx +%,m zįډI rΧ0#dW= 7!`P@U-݊ +G7J o&]qٕ@|Sc×.-³b< f lxnZիkvԹ< 6qKu\Y/}wB7 ޭueL!r7 UO}cs_۔97_NEvGG|6ڗst*?Ù},vF(Mmuuf{zwbhZQbo| +qo2 bN mbZ+(AbDa% _َ^HhcW) B~]yI[X/.9?!FڊU"\(Kcċ+_Ϩ +aQ볥VRcH6 vS<¨LmC;YVK;,yzLq;{veo4d/X>lν-Pzb^eosȔ}ϸ~aW:8@[t#Dךe+D߰p)X$OCBRdY%m84_ZxI͠_G~17 A׸>oE^*`*d60}%f7Z%{Lqi1ˆǏu=̿J8?5`Ri8zc5%1L9Yĝr,lt?;SW[pkzk*>> 'L AzpS,]WvSpy0+@Qv7X5hqӡA'dfB˯!{M[CQzކeDt0hZo{ zSne/9O}\˱" +Tsɕ̴·3..ώrv_9($"Q5v]ۯ!8wƿ|l" 84#|oW +!Wexd1Lڢf ?<T3oe7H?pHc7QGinwvL\lΗ@#C >J;1n\O8u]x3*g,s3!ZzB}o4]x1 'fb{2Hкj^`B5u£{ ĝݻvExbqp PS#!=`U.7\rI<)6_Z7J蕨ŵe/{Y<'3gH46 ֝î5jkmReO_*{Iha3Hf+t 5|*βdžͻ4==bUd{Fek*/ B.3IPq밁ώIg8=xTXM?>885UmyJѫڍqz֥53g(2@]blB|MFyCI:=da'=(hNns垪 +|-AwD+E2+c EfvHÓi8G63?4+<`}pݫ-M5гc' Q*3S"f)c㮄s{Y;) t)f~pF|5)zg~4„DP!*-s +_Ka#l$@#6جmy*IrǧݛN`oELQ֯FBF/F÷V - !RjشtqfL'gb}2b;BlN[zK"OL([Z+jꄮy|n +C, )#PAuZ hCjuΊz'@C{Đ磣G%~I~^o`$ QOIqp;R@DhdҨQ@yHbX7Z+VwqU p{M҄Gl9]ޛt5d;IR9|?Cź%ϓ}zxW96룁l6>]m!ZOJ-1$0p[[]ttqG~ +؅kGZ> Ać6RV,my׌DF|.0Uu{,GI.r8f >L*ӕ1r5ᾔ| Lr@tec,Au]\!hC&Z +ٲNvlT:g䜕Qf>e͝`YcסKm,*_ք/ISE#c?z>~c-4qCQC, =( s](ww +endstream +endobj +738 0 obj +<< +/Type /Pages +/Count 4 +/Parent 483 0 R +/Kids [805 0 R] +>> +endobj +739 0 obj +<< +/Type /Page +/Contents 806 0 R +/Resources 807 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Group 808 0 R +/Annots [809 0 R] +>> +endobj +740 0 obj +<< +/Type /Page +/Contents 810 0 R +/Resources 811 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Group 808 0 R +>> +endobj +741 0 obj +<< +/Type /Page +/Contents 812 0 R +/Resources 813 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Annots [814 0 R] +>> +endobj +742 0 obj +<< +/Type /Page +/Contents 815 0 R +/Resources 816 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Group 808 0 R +>> +endobj +743 0 obj +<< +/Type /Page +/Contents 817 0 R +/Resources 818 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Annots [819 0 R] +>> +endobj +744 0 obj +<< +/Type /Page +/Contents 820 0 R +/Resources 821 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 484 0 R +/Annots [822 0 R 823 0 R 824 0 R 825 0 R] +>> +endobj +745 0 obj +<< +/Type /Page +/Contents 826 0 R +/Resources 827 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +/Annots [828 0 R 829 0 R 830 0 R 831 0 R 832 0 R 833 0 R] +>> +endobj +746 0 obj +<< +/Type /Page +/Contents 834 0 R +/Resources 835 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +/Annots [836 0 R 837 0 R 838 0 R 839 0 R 840 0 R] +>> +endobj +747 0 obj +<< +/Type /Page +/Contents 841 0 R +/Resources 842 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +>> +endobj +748 0 obj +<< +/Type /Page +/Contents 843 0 R +/Resources 844 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +/Annots [845 0 R 846 0 R] +>> +endobj +749 0 obj +<< +/Type /Page +/Contents 847 0 R +/Resources 848 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +/Annots [849 0 R 850 0 R 851 0 R] +>> +endobj +750 0 obj +<< +/Type /Page +/Contents 852 0 R +/Resources 853 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 485 0 R +/Annots [854 0 R 855 0 R] +>> +endobj +751 0 obj +<< +/Type /Page +/Contents 856 0 R +/Resources 857 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +/Group 808 0 R +/Annots [858 0 R 859 0 R] +>> +endobj +752 0 obj +<< +/Type /Page +/Contents 860 0 R +/Resources 861 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +>> +endobj +753 0 obj +<< +/Type /Page +/Contents 862 0 R +/Resources 863 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +/Annots [864 0 R] +>> +endobj +754 0 obj +<< +/Type /Page +/Contents 865 0 R +/Resources 866 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +/Group 808 0 R +>> +endobj +755 0 obj +<< +/Type /Page +/Contents 867 0 R +/Resources 868 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +/Annots [869 0 R 870 0 R 871 0 R 872 0 R] +>> +endobj +756 0 obj +<< +/Type /Page +/Contents 873 0 R +/Resources 874 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 486 0 R +>> +endobj +757 0 obj +<< +/Type /Page +/Contents 875 0 R +/Resources 876 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +/Group 808 0 R +/Annots [877 0 R] +>> +endobj +758 0 obj +<< +/Type /Page +/Contents 878 0 R +/Resources 879 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +>> +endobj +759 0 obj +<< +/Type /Page +/Contents 880 0 R +/Resources 881 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +/Annots [882 0 R 883 0 R 884 0 R] +>> +endobj +760 0 obj +<< +/Type /Page +/Contents 885 0 R +/Resources 886 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +>> +endobj +761 0 obj +<< +/Type /Page +/Contents 887 0 R +/Resources 888 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +/Annots [889 0 R 890 0 R 891 0 R] +>> +endobj +762 0 obj +<< +/Type /Page +/Contents 892 0 R +/Resources 893 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 487 0 R +/Annots [894 0 R 895 0 R 896 0 R 897 0 R] +>> +endobj +763 0 obj +<< +/Type /Page +/Contents 898 0 R +/Resources 899 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Annots [900 0 R 901 0 R 902 0 R 903 0 R] +>> +endobj +764 0 obj +<< +/Type /Page +/Contents 904 0 R +/Resources 905 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Annots [906 0 R] +>> +endobj +765 0 obj +<< +/Type /Page +/Contents 907 0 R +/Resources 908 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Group 808 0 R +>> +endobj +766 0 obj +<< +/Type /Page +/Contents 909 0 R +/Resources 910 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Annots [911 0 R 912 0 R 913 0 R] +>> +endobj +767 0 obj +<< +/Type /Page +/Contents 914 0 R +/Resources 915 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Group 808 0 R +/Annots [916 0 R] +>> +endobj +768 0 obj +<< +/Type /Page +/Contents 917 0 R +/Resources 918 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 488 0 R +/Annots [919 0 R 920 0 R 921 0 R] +>> +endobj +769 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /YXMHHU+CMBX10 +/FontDescriptor 922 0 R +/FirstChar 11 +/LastChar 121 +/Widths [670.8 638.9 638.9 958.3 958.3 319.4 351.4 575 575 575 +575 575 869.4 511.1 597.2 830.6 894.4 575 1041.7 1169.4 +894.4 319.4 350 602.8 958.3 575 958.3 894.4 319.4 447.2 +447.2 575 894.4 319.4 383.3 319.4 575 575 575 575 +575 575 575 575 575 575 575 319.4 319.4 350 +894.4 543.1 543.1 894.4 869.4 818.1 830.6 881.9 755.5 723.6 +904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 +863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 +319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 +527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 +575 638.9 606.9 473.6 453.6 447.2 638.9 606.9 830.6 606.9 +606.9] +>> +endobj +770 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DRKHFF+CMR10 +/FontDescriptor 923 0 R +/FirstChar 11 +/LastChar 126 +/Widths [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 +500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 +777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 +388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 +500 500 500 500 500 500 500 277.8 277.8 277.8 +777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 +784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 +777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 +277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 +444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 +500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 +527.8 444.4 500 1000 500 500] +>> +endobj +771 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /RZPCDH+CMTI10 +/FontDescriptor 924 0 R +/FirstChar 12 +/LastChar 122 +/Widths [562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 511.1 511.1 +511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 +255.6 306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 +511.1 766.7 306.7 357.8 306.7 511.1 511.1 511.1 511.1 511.1 +511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 306.7 766.7 +511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 +743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 +729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 +514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 +306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 +511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6 +408.9] +>> +endobj +772 0 obj +<< +/S /GoTo +/D (chapter.5) +>> +endobj +773 0 obj +<< +/Title +/A 925 0 R +/Parent 7 0 R +/Prev 710 0 R +/Next 777 0 R +/First 926 0 R +/Last 927 0 R +/Count -2 +>> +endobj +774 0 obj +<< +/Title +/A 928 0 R +/Parent 710 0 R +/Next 775 0 R +>> +endobj +775 0 obj +<< +/Title +/A 929 0 R +/Parent 710 0 R +/Prev 774 0 R +>> +endobj +776 0 obj +<< +/S /GoTo +/D (chapter.31) +>> +endobj +777 0 obj +<< +/Title +/A 930 0 R +/Parent 7 0 R +/Prev 773 0 R +/Next 712 0 R +/First 931 0 R +/Last 932 0 R +/Count -3 +>> +endobj +778 0 obj +<< +/Title +/A 933 0 R +/Parent 712 0 R +/Next 934 0 R +>> +endobj +779 0 obj +<< +/Title +/A 935 0 R +/Parent 712 0 R +/Prev 936 0 R +>> +endobj +780 0 obj +<< +/S /GoTo +/D (section.115) +>> +endobj +781 0 obj +<< +/Title +/A 937 0 R +/Parent 448 0 R +/Prev 713 0 R +/Next 714 0 R +>> +endobj +782 0 obj +<< +/S /GoTo +/D (section.118) +>> +endobj +783 0 obj +<< +/Title +/A 938 0 R +/Parent 714 0 R +>> +endobj +784 0 obj +<< +/Length 3981 +/Subtype /Type1C +/Filter /FlateDecode +>> +stream +xWyXǶ.$NӯqKPQT6qPpdE:%$bb17H\1"(CABTj%1WWMr߿櫩SuN_Q@EB[gz+z_@UD+^E_چl6F⺆{ )jrӦLqsؘzwn톰unXڥV[tcvwg0:l;nP} X4ʍ2P P?RXE4*N5L%UTST(Uj+UEզR7XډBiF>At @mm$ՆДkPY,qƮx=oꤘ +fٲUC-ho=j>;sa]Uc&Ʌ;#{34*sPqWҴ{%%gp;Z8)<_,HbCWqho.ȭ:#Y"`g&r夔1;]nYP50k +'( +͙rLLL/h :sڼ)DyefvTD䐌L)*I4eY2*j +a8Cq=,3E#m[_NFFTcƃu G[_F=45U6s҄Y:> ]QOۭ>Q"V}l2nk>;,};+ȍAfxCW:,c Q2 Ά=lw+=VHMgL[)C_oܺ( ^46 WL;=K:SA{ !:в7TɨQɀ&v{T2P;XBB%WqVtJrzs6X(7NLTt Jsża$abx҇QɲN5NQ+?$s_whw$398$bY<2s6 z[ad +Gq؊#﫸nԃ .z4KU)Hy`B3ejE%$IPC9;b0$%w0ţ^GcИ~Bys d/Q{k᯻SXT`|4`3c16όN)A +È<`7BZ0 C; sx[N(A`1SA AH 7AxI]xBB#v6v ƂWRr BpX= FS\j!&JR9UBշ)U7ڞ w@}K5^Lu1e䛔& 2яaq4Wx%:5'ZGё)R8z?ZN=wD]ya0׊X]{W뙯?(c9܃0lr?>&lV{ok7W7=AQ9J $w9'eQDր$.1Ϝ:FD&l%ʀɢv2awdjE)"wi"}hIXm`Y3SVkT.0ϬښyMfUEFE΢K64=8aqg2PkW?3mF^ۤvPr $(][L_|e WRZsre\n[,s!M-60~sG[ȄmEaŜ6\WNwnuЊqh{t 7S-V 6> MVt\rr(QBnɃ^-JavYS:QWi,?Gv$1tt<6p#rFN49kQ[Xٜٹkky}إNZ$<k$,3ygQO?Õ=ҙٚ8.RbzmׯـG2<ԬYL'-AeDثJ͇vtoJȼ4ggx#^!SE]{2/ |齶]ֶ"zdv"TLr8!6PygZ-_T^|Pprm5t0@oN^zRq$Ö4z2V…y:W9>Mx͡IRms-T9c*(uYa :]cn={VeDZh:uHڵ+>MJ4딑aѻ!p $ŬG8u`. ;3gZ˛MBcWi#[Bh:U}:u˯.<CX-Y5M7z|}:#M§p}qa+GlOeSooboIk˂E4h'GD-տn,ıF +zqf(*˵u{n  O!*IIJ>_0A3WMg[MU9ŋLYBa%Sg>DivdC~qAK[.2o' yRT}+hh"0)(v2@Z$<#&DT +$7siNL–-'4_~[,j;HZ| &g_?BuFB&ןH"졇GPiGɼe°i_ttFxx-ܣA#ޛ܋y/xGK@o?E#릠5hajD2;YO#4KhoHpLqZya\7o2]d@3Ǜ՚Kt}WB]%mdc2.l@Ga'%Aߍo >-5,ԩGۘtOLqYQgG]4߼iZgp ,ZB.y TEr(,De:VpYg1BeꃂLHW/> +stream +x_0P8 +endstream +endobj +786 0 obj +<< +/Length 2593 +/Subtype /Type1C +/Filter /FlateDecode +>> +stream +xVkTGq G8C[EA QADAh0DD ! +"Iܘ(GmNឭG3TWM{oncO@cఈݐֹy M7QAStҏyz,"ԯ9;huw.@0].}ϴMkR6OXfg{f iā {\f{\5E'\fhD1hGvvkBSİㅸw~! f +B*lr:Qh6pKuՍЅ^a;ڦஇb殟fp@O#j!VLJfCnI\@XH.diJ|YD2A'DI+"癩 +,)-;=-3/INXZYuo(i8tD9X[z\>UgLgKϓ1T`!ܳcDRZrA%Y2 ߓf4~~@.ColV)&kboA!o-" A X#PEp;%hEȗsy8h2!Iah$zJQ:nQx"ފJ| F| _w9_ 0Pª=ZC=mNoެ5@q_hd/lO?u) '5 hӋ,+ԂkýsXLQӳq8ţ$,6߹1V2oT.n\ko:QqH1X=\xE$c }b*vdv0$+ P d mՖd[u$Im,?y\_l VX'7)v6CLV/:3J~y +ϴb(7ޏmW++cDtp 'r.M􌖦m={1fLɔ=K2M9'Q ?@djV0@I7O?3m6Ok5𠻦HJs!AB %HEJƜ,pE"VSȋ.%|E "(^Du17(I +%fmEb~׬YU{SNObTLb;||U)մyh,(֪C>-b[1$²]?>ۍSƩ =m,q݃+&4ىl `4 +!*BQElŋWd3ރ|?O+o*A`A n'd +yapW@suw|IrK"Cv7+bPK+4%&V,cVmU0oohݼ]n)u,m ߓcxCZb qƍ}׺JBhEy2ѶqT=%b!RW JC9 &5)YEw`qk2v]?uR=Vzhi.[Zؑ.g8UdiGw^TQо#C;+ҋlʽ;A,z[uz6X^f׶|t(BD_w}S1?R/<dZ/G$?.muo'4()%SڟS]G[߷v۬ܣ:"v|MdESꉔwnY^PRcGGTR&LA& ƀ.( +endstream +endobj +787 0 obj +<< +/Length 20 +/Filter /FlateDecode +>> +stream +x0 +endstream +endobj +788 0 obj +<< +/Length 16791 +/Length1 2193 +/Length2 15490 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڌT%z dSζmƮvmLM䚌ɶmlLz;}kjݾn_7~XI^$aoBbf01201Y؀#'99[B ty] 26fV33'?N<1)@ cor'wt4py*j377'a[  tپg4TM,A.Łݝh`d.@MptANn S_ +@[п1,,P7sq:K󻋫) *-PtX_t7p+@{[9PcppL28ۿ݀6@wK$wldliGƿ¼YTd W}bN {2{vvAfvf0uu`TttI]Gfr311qrp@_ <@+svwZ{;@'W?&.cbٿ,=L `7#fTR7*ED=zvf33+7 qہ[wuL"JۙE{!͠P7>T_o" WT2m-m"wX#k:,A%!?Xnۻ: h>&w3Gg}9l@f.+~I;?3sӚ ǞOG Wn~ݻ?ᙸ:7*<@& &!V5!m&g4S齗]#$QW} t'4܃#Nu+B}\ޒl2 +4=0Yp,\OG@&h )Cʅ'Q_:_!\:CU=J/h<8sڅen={H&+k&Kzs.!-4a ΢w/ Ql?;JG'FqLŘ(o QEϩ,ya6̇wV8xR1)XpT%<7S- taa"^@? e]Pqn7å䤤l0)pق84KshZcVc?~tz!*d ? +!~\tTs Y2-MG[tA>EU&g ˃هpVyM7EJ<u%3~VLKNJG,3gj&wE0M]w0`s,V 8R+ be%#nf4XuY ӦW]?בNmmi*0Ri+4!C ^:wȇ)5ޗ"tD{zo-toq:D)mV+:-PZD M,t+}1(ml"ꚃߥ/R_Z~w#U쵧a~yak!qģ; 7*=O/c)]vu.|M= Ija/G9CEwN }H i=00?ģSĻ<&=39 'ȥȤ@ž7?ؕ茊.p^ʕ}nHό&)b/x\#UPCZ&0 g:ӟ.0H׮kT:W%bi@0i#pж4?w6پc-'jW%wWi&;W!55^,(2cŕ?3(8 +~tЎjHV rY#XBB۴b5)t "u\馑gLY`-Y>ɳ;U\ ެ|5A_7+ތ 66P:((ZOHjHكeKh#}P=zijFC4(WCCI̦4 NayhMdsTrr/Sv6!8=εn{ Mj SN/1.xՀglC* 7~)_ކ[)T+;qht'貎FT9}\LܖOu64Mscy 9ZtEjmno#[MӘ ỷ0|"+O^pjx:,KV7l#q}t/DK>wbt_CJVm@eCg#NtĦ$na/j)TRh{u@F8 +¨ 5h( _`kP +2lk +8uh,e\er%Pϻ'B(5D/確S_W9d,َY֫ݰu.OE﫫7#O= baIdIxpim:VuL1Y510e,'qϞbzuhRK_3n$ ÓHwݰtC'먱ewU *(9Hd)I.K}ElMʲ`bm $|zRܛqO GWd9"%џ^߳uLf}OqdYP+7T +suUuv'+WDf(5klY D']6ulJLduy&C5#cѴ U+@Yə]I1 "䃍%ڣNljs֐E\oq27UӜ +'cσe,J)t?9 G/.6|wR L%PC|쇟4B+v*[w@cE:d !f&g2> 2`#`M]^Q-JY&uTcK`ovJ J3OW("+QWdt[dSVH2'PrMe,"㜔2?[ 3*Lclr%ȭZY+hl64 ё1U>%s1rvWDo%Ȉ4탿q3TV[@ʣH 3zcщv#fuS wxp&_r~|_G!xzANv-bĘSv tWgd3OvA=.;/CDx!dWaGEV[ $ ء @c6/:.wLNO;0}j[=LߕB [jp?$}1M3zJ<祿>ƆU%A߲G\lv{9#k@'Ri rz鵙J0p EjkWl'WS ;"% Lo2<v[ĚfIOZM%#=Ex~=}.;خlГpU?$D 9'5C= +DEZ#79DiY#'x%"kМ)Y?9ww~ZBd)H=[tT-#_ 2܅M'#YlNv/"Pc,nE)!0@Y#~I8@Xut\ylGp^<;c[VNnJ7ѤH9W;Gz!o L%$<౦80e=$OSW1|D9(Ӻ$L`h;/i:A_{o6BpOF)t H~;se9^aWwy_F2S3K6 [&;a]P6"9~^9 +P404MZb0~FD hЙ~/w!PS"ǔ;ov#eCxY6dSˊ#&S:$!g?ݭ3/"#?<őH: Bqp/X3H7XGPVC$ jo!TvtIx/a}/Ǡ9&qt6ŽR}F́swX2X4}cXK6m]Tk;(d\~QƢ]]s&AGLۥ˻i}CF|mpe!mj]dz.v.Lw2M( +BjLt"iM:cT()EkڡB*+)aQG Mjx:(qiĂ#{IV>,rf&^^< UH̍E8$_E>=jcF7kvDo5<̶Q.x/ ્gK{ցx]V P6p]A!^œg@2@GOa|JFlG! ̫۶ 0{^%пqǩUDZsJʳN^y)k>Nq'LW +f-u5pDgr?#ox>I6qאp،K߱s$)FHou1v0sH&mRH6fslLQ7}x/KYuқrjMq~x[bU1B~7tsmbf[ԶclG*ZEB⛨ }̧g/쩐(r66XM]H">_U-aGFJ_(U7~ aCy~U3=ByC,&y\Ky)XtQA6:ehCd?+2 o۾4e+Q#fNB`ьV1/ADdZ9_q+hjUC \Zq-"COc|ղ e1mS< p/?vx_Ⅱ:C׷a3 8<WX=ګM Q,ovV vRJpYpg4%DOÀhslErMea 슔IJ8l}%ƵZT֬L_٘1*Pn*ѧ Aiha!9SId+ +iǰ_SGcIbz˗㾀~^ +,`wd p}W'QJOB-t|B9 + >ؕ BmЭ:Ә!*ocr#׮ŃAD> 8n|S1 Y \WGY}(>l~r y` h[> Qgim5AHgϽE](BIFz㼞PD_3!ua^ mTQ@s8 +ѺB MS]=Q@YqdC/T o9@T;zbzv`+?A .v#($R Bƨ],Q7!hg' +"9#*SÍ(yQ/s w2&;{8g?\D:Wka"O6#' K($ 9y7zQ9^SCHC"kNXSP瀕U%Ny"}3s/$M>WH0}$}z1ZTyBD*bdcoO; Ŕ?(nǹ6 /S$/'[kaS ޝMjGY-Bzk4axuty3pL\#<^KR̍V\Yc`{|dٺc!?DD~"Q$LhjaHa~!s[2;D?ĢlɲT'|Zf`RwD)+&+s+B4ܘ928JR(TW)|E\V* iKjʋIL*P8T8}@t3Sc(Ra,5tud{ws&DH!=(PYr6-y(t%Sc_C< +O0p2N@zpф<,=jh!V=]"b 8t(;al Ž72@&t*=@iTyEbFMWчv{ƹ@+[DZ&X 4ӾPݵ<8y\lc@4U}=6H<׽]CR:&0MUqXvU,b=؞e<Fup':Kgc1F:ꙵnJ8N-87W(ƴ*-h7r 3%il+ 4 :pIi.ɪ[Bd|-*.n͠:Ͳc]NLaVDE/vAef:Q;1.qk^䴟I2 &hc +ʵX L|?c'?:91w:iz+x>]ڋcCMO*lp_S{5\ +acpQ>lAl~%doLjnD4^mH +~VgqeSmiiB/mP3U^]+¬EuwoT{a҂!:4n]\% x6E?u"ymyv^k]ʗυѵaT"[:X5jw{Օ|V㵀N;9v:K@*M>lu:7{[MȦaӞf4.\wiDPG(eW?Bprl?=܁zDU4!rr 2qY0As>/\h^H<Kj7LW+f_{p86T0"0?WU]Sl|w0=1O 귓jV:F;7Sᦞ,D*rS=a5|0dlq +`8NˠUb}"!j|Fr%g.%h5^:dgZZ%H-k:1*>199M5p@}jrmCNMyQUNj\/COB* r}|Wqx T*g3J(ؕ {KLqqX;[χz25ZiXõiNOrNbM2; Dm-W-F̱):𕾮}͢*w ^'X?( h)G_ C_Dz⸻F˩S.TaE ҉[&ϰ0>bNy*;o +{eCq$1!ch֚HI86HSO@\=r|q+F_:D&m;Ć +}X!c-%"jP&Yq;}5ܻZS}8^ˑIǭO,OfL 0 +[}ד^ALY mb78M~xFu!נ˞)U}$R>^Yǫ()D2jCmv~A=AWߺ^nOyDM_O߮=aDk-S~%4݀^^NGAOjBbL?Yop%h&ϻ  wrDz}'֯bա?^T+h 4m/.$ )y? w1q"F:oB_78x/):*(h&FxT@ʷR(7v*9➶7@BH/|ڿzf7~^O{'%m$߆ث9 K"3<:G_R'~-GSsF{O;pDO\V'"8v2>]>zƵtEL +-Oa>SR_ ~&G$8;{Մg48~ěe5e( s2'OJЃyU-"c9vhpIY-)R(>KAkY ܠHmB)a|k T#̮sBgOe'<)`Sc&j#4Wѳz+8GUF%7Fv9DС gBH)`5\Ken7J6fb,D0 xmNכ28"<9,W61ƎV}c`å6жm%ɔTM=;[ +>p *5=|`ጣ]8*u-Chl\c߆R28޴!|-n ^0巾dB&'XWF$ѤPIOt\Q,ejXGϞ4IzOvA.УQ[p! Н|w^%܎A3<7'R4?A-juh]F*45HJ%}u.OY8.8v>o8;Y\vw[k,YSN%bVF$X=B;$?J, g2,qM; xWr9C)igW[@i4BX`tPs}moc-i$ +Gaq^̺0fM>6k +lnz&63jpQ2;e%oB"eVG`OWt ~ҙM+*gh JkE5֨vzԾ("fWMy)M?~WQc*xNg[ A8J`&Ds$*b:̓Wӕ:^IRdmݷ&Q5s< ׻ZX ;GiB0:q\$4nw"'ˮƸhF1WiJZN?斫W6K ^͍G 5yے>#Dz`v LEKhKwZ)ҬT)ZŖ~bΔîf\z=J)'tri6D@:n~rfb躛6U㼇0m\n¹|i T|7t%M/]^C$TqYm eI$Xv*4U2 +A!`ú,Iα:I!XXOi"Ln:wW6.jYe-И,&<(P:8| +#g\ wn8Iwnug½G|3+/c5~lud Zu|E +Ri f]ѭ>kϿ"֒d,$RB3P;w,>;{Vw&`øt:eBgM~3ޭqJN#Tr;D&ט(G:UTMɤ-ET@(0ތNfmnM6o.Ga~ 5S!ZqZ?`oT[&R +CWfy/ 8ԣڛH_{U]cSf^8zgN9(|тx5EM=؜e@Y݈u/yE<̙m`Se +mF${ f +enִ;)VGSa:VSlLR7<z͜B\ocZMot?@^fIEXh(K*$fOΦ7Ä>{J6_ZzY33 +9XlSa[CR^Pcpzu\=?"mç]ߣӪ/"c@hGsmoX%B&LN|7NTs?Z1= a:=cd0n5^\|`> &[>@"{hx/'Sc$8nl]1#pq@{ŲH=ԡkj+u%s!_ceK^gB=[,A#܍i~9EʯSaxTӭ1%u^hu&؏R`sYYƸj*S\شҘn/n8Lߥh:c_3Py$Gq~E?ӍX7oT dAõU yUȲaIbJIͿ)=_R~r5t|zP -eGlۀ=g>:"@9b~!ʜN6@B`)nFmQKRG}Fy]DNw ;6aX6cdJq}J7P;ʘIx* W>ܐdp+AG5%v5^уK0م*TxnDŽS}/2 :6a[t "FcX +^RfyMzC@2R'nB;z{2xE3 $%qu/C2LSҠ/K^_܌O!x-2ƌ;Yg$H %Lg6Z Ao +l#sDXӂ1%sd?$^#7<*4ӎĠd;B ZGI. >9.vRִ= 9iA nnsj" (b#.dD߬D+eX ߊf3];LB_5`,}fXvͬ 4Sl )wR(ꢇE{biTWͦQ z{d q۪ILS,,*cI3v +k%'wZM$+R + Ay.qoI)l؉\eT'Yo-z(bz0r)w + h,4=!mJGcM!jk/z1!|0] GNS oƾ-L)C0'\ 4Zx;$<1]dy9W%JGKoM]R;F%hvt|Rg E1%?xktꔧ`ξ%3rmɲŲ&jUY?rkeX 3GWpQ`;MҀHa4r1`!&)Ԇ5l%ῢ.+ 7F_njl6Tuf/ (x~Hxd 7VS~Ȋ" +!% ޗ3rًhz=9W֠'!hMHTzZuw:C}3Pe5Upf?Nfaz+hpB2i]<ی{BD, 0+D1CBEny`VCCë0@&zӓoJp +?:yN".W~ĹfdEYZ.jn񕛙xq%fi/w +T .{]> /7ɻwzJ0Rlz,7djSU=KֈKT>XnaQxğ~N0I7%J%ٍ +)7ysZP}LaS Z YMe*[(<+"8P[3q'3l)7c +Jy)Bp6boo;ou:'&&/=qYB@-b($P3h +L9ܷg#O&[x#.˻\|8(N~~U;[meI;i_Ńxf+5U3aVuh{1b_IzcW/᩟ɤ7!T9r!x^s­zKKW31N/hveЩ!s%I)#d{&:M9ܣd3J@!J#EOÆvĢzڛ6K9c9 +endstream +endobj +789 0 obj +<< +/Length 13129 +/Length1 1879 +/Length2 11968 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍP-ݚ%q ݝ\ A;3{Uݽ"WQg37J931$̬TT g_fD*- do 0&ihosqظxYY쬬| $]AfEf J t~=?_t6>>?b@0hl }=no +:{W ZAKgg~777fc['f{0# l P:@3o%c[ʘ ?n` `29fؙ +eݟ +0 re.#dg0 +Όc;߁6NƮ c׀?TƯd +98;1;l~Kd]Rvf@;g'$A`k=XYk;{7;93M; PVW?6 3tM-Y~pdm~U`0_?]g ߎFll33hCh'~|0:{l߯鿎?/ßۻ88L\l>^^+翫?OAY;s{ߟ^{M_C_Gg?r?)cmn?-㯀Ivq~ +EݰPm4Wu;,ln#I4S9Z9B6 ;?}3~}8.:Rvf` { ;uÀL65*`nF}\ߦ?7E`X$F<wHſ/Eo3V1XLFuA6 _?7 8~CZ,_|_Ϳ+S +/W^x}ÿ+WWNWs~˿+ku䕗?^@5E.`=?@;qyT Ъ.FȍiBhj_;k +DW )4ҋ+E{#BuҖ0Nmzqi +wpX 15t+dU /J>֝[{@X¾A5 c7IvXdֹk]y΄`_0Ͱ:w2%0Ljl :iKʑDb "qJKEѨ4d_DQ}>x:p]Y"V]˛|L}3T 6fȶ\h3mpves&VA2 uq4d%D,lXټh.">gb6zX҈/^}a)M_PxV)u4:}gAa |(\ڥ5CR6uH!2k3VE/__A[yv` d,"?N] rOuCA,):GtQ +Ѱ:_(I4Efg27u99K="A]Hsw'YK? +A6Y +e}ҷ.5}g&[V pw/ yPrlUivcٹ,n'@0O$ڕ+Q/IkEKfg2tM@E=ih)E~uF)8X<v8i1zFǓL&,Kޜl;v4m.Qvd ;댏G}rّb9t!zp$a}BOQ\78-j9-WXCm%X4L[uXIβ/bckdj!z 4E).WL[`)2ci$?4M&҉BJM21ر.0EATNFY!.?Gtj3ufw;{2V}yq*'LwUGM7P Eby &u1a>@C4XheBo/(+[BxT§zcb*TQN$Nxf!q2K]$q:1  IƼٜXzVK%{647-ZRp,zLngɑOmz Z\N0TmH*zǒP̙K¾f#"48ڧ@hpc}0TOJSzԕXTP5o.A5E›]&DTyI~pX= t µٌ#?!'hn_߸tsJ,DP׸Q9Dh5cFXfq2ft+p6g6zg%\5P9bl|;8_ V\YDk _ނgs2{Q:#1xT5:?\Fx| mŪW ɸ 1$''3?l0ƹI&8X3@n*CR[b롕&&G ?Y+C}.rjPm0*df^F V +n%Jr?kKE + (1wfZNzfOF7LjL3!^|AM$F&ӑ]Yq t[ ]$Jĵ\n57u.巌_H'h5v~X0k%!A܄Qcxd؇uͽ5SCKn0MxѼvH3%3ŤJ aOh^N˫ZreI9abL>לXz"xY[*~3%󔀂DYc5>G3N5$ F\8=\<I3,>xʚˡ2dNK.`;PpJBFfxnBI z `% +wcQe7ZLrͺ_/0EM` RXX2'E$ia- NJ՘R4)6ī=88Kj))&St|ԅ;ldՔ4:&eJJEM\ j *n~ +;7@;@9{bào쨻ePC(=hP!]?*($5Ntg@̇R|n&PmN PKзVMMdWqڄlbo7t.!9Iz%pJ,δ ha_V|IkzVy}r~,FK&Ƨuu@ml[bU "9qYNIw⇎`3q V _PPYRҴMQrB:,&EvDEFy $WfNZ࿑ h>H#Q&,Aܶhl B:<@ G;}$>hURUM ]OcŁ rUz(͸ftj=/"+zA" RXaD=2(CY7]I=LifqJ?]c ;dsZN 퇻u ;wX4T 3ĕD.?fbnX|+bB9V֛7j l_>EW"aT?SՙS(;ƴۘwYa +,m74N6^kcSRO,դG.bãe?gyœK2OG6oW$bm[0> g?Hz}mۦXXq W`xN3^xY|}p)ӫX~ LBҳl^;FRDž ;?[Ԅ] +XF\\H٩c&}PɃHFNDd5džP nZ?š湥~(T}mGNi:>? p.(L`A:kɺQT3t*ud/;|KtRڏVT*U-#h26I +"PiY!{E?aJ{-]n ;I )#L? }Owgho+m:,}g7鰉YkEBnp?_\`}SE*؃;n$"\jhVu~&ҫ +,İLo~I6| ! \g GJɐ_- ձXrS%|v [Į3/c`Ww IhSYm1-nRɷN_R(MSXFf*ip|›$f!YlkojbL!,-%f8ot Z[<ԎOq7vGHwܭ\H-(Ai IjĩyZJ *gGem7>)@E<3B@mx*m ê*/zF^".w=Z^z :@ a(LsGd:$7Tu{޿F6mQ:<= $%=:T7f1wO5VwӆLJ +*Z_. +ZȬH[%/wk^;spiAyh^P5X.XI`omʗ"0bEE0O0iEpF.VQʈ;w̄)5CUnz~呋e\rJKĎDoS*S8B5/urJw+L|O w+uz[$QR5,C}~БϮ$bK +fTcH0yyǴaL|jqYgOl**S:.'89ej?:[ep4,,Pk"{yR<`UʒyL] (vSX>k7,fSGJX /! lࣜ~㸸O@c 'K)ܔs+KڪѨ^"nحl9R0`ZA`2yC$W\R4*{ۛ +o N'1` ɱ{IDe 1&mawuzNW[Ğq>,À2mQ=WxLCxpga0Z[^!]X4;fi~ʰO[9EXsiW8>$ƓX3#qE*x9HGc; bii&-`#^G88(e%u1{5e: 2+s.A[:> itě1o`}~077U +ErjGsD=Zq TLRG,Imf]ys$O// '7BM=_TV߰DPmpWv ;j[Mh< u)(̮u@#b%%^1^%ԥmC=y?EZOhle }91O9WmB100i~{F5hqsxPOeRaʙ\~(PL[$y[Eku$V^'MU!^ +R1wYuaZ;wWd ҏh>&A%Ǝ0Mi̺Rm/4نYT`PF ZNzܿ_-N̹;},=S;fQ/{Ytsa\zRi_$6)8ꨍodI~%ZcLDzF";d#ywxsp~m +*ROi<:nLB~F1jmcWfS~{U[f'~X)$٘b=B)6I9|ujDޓ/7{),RkoQbqB0u)WPs܏ȲBO/1KXp͍O5"-wB-)y-BvgGjCȳ, Ҳy l,{ae?jI1Dr|se)>J/Q!LP7 C\ڶYO>+ YuN:+-Jh366tk:x-b~M ,6Gp_sss~ʛ ++;Fa+ź爧,]sx6;=^USj;Mys<03\eQ6\ n9QYV moTv&`Wt)vn)#Z'͟V#P%\ůS~{%F{5@*gK0BGMcm +DUP'B6; "Z*' e= P1pqIwjD95D>w6ōJd@z` kWyUBf`²NuOvn@b4W}kOBO-kFTBKKغYD :Y8 _¼]ڢX9t'Q|t/2GFlۈBp}7jb*)IXDZIN΋J 9ϳ92\da.d)WXz}wt/63B7bdAⰘ߰-RH# ,ڍ5dOcXVa p!1V^7m\Q7"A^~ǘMc <[ddTtNAt1 +Ƅ''[oſ4Q~^]u9Pi /_"Omϖ8.<Ӕ5F 'gS$Շb;֦@i#eAّ y^Kd'F|\iN5+ﷳfi r0s85ܪx{7ֿ%ep{Nmb#a5,9l#1B)PrPZ* `iYb( Ij (9],~%8<ǃJ̓<4^@hK("Xφi~0!9:6 Nq8;T4# 2knLbk\ rx +%,m zįډI rΧ0#dW= 7!`P@U-݊ +G7J o&]qٕ@|Sc×.-³b< f lxnZիkvԹ< 6qKu\Y/}wB7 ޭueL!r7 UO}cs_۔97_NEvGG|6ڗst*?Ù},vF(Mmuuf{zwbhZQbo| +qo2 bN mbZ+(AbDa% _َ^HhcW) B~]yI[X/.9?!FڊU"\(Kcċ+_Ϩ +aQ볥VRcH6 vS<¨LmC;YVK;,yzLq;{veo4d/X>lν-Pzb^eosȔ}ϸ~aW:8@[t#Dךe+D߰p)X$OCBRdY%m84_ZxI͠_G~17 A׸>oE^*`*d60}%f7Z%{Lqi1ˆǏu=̿J8?5`Ri8zc5%1L9Yĝr,lt?;SW[pkzk*>> 'L AzpS,]WvSpy0+@Qv7X5hqӡA'dfB˯!{M[CQzކeDt0hZo{ zSne/9O}\˱" +Tsɕ̴·3..ώrv_9($"Q5v]ۯ!8wƿ|l" 84#|oW +!Wexd1Lڢf ?<T3oe7H?pHc7QGinwvL\lΗ@#C >J;1n\O8u]x3*g,s3!ZzB}o4]x1 'fb{2Hкj^`B5u£{ ĝݻvExbqp PS#!=`U.7\rI<)6_Z7J蕨ŵe/{Y<'3gH46 ֝î5jkmReO_*{Iha3Hf+t 5|*βdžͻ4==bUd{Fek*/ B.3IPq밁ώIg8=xTXM?>885UmyJѫڍqz֥53g(2@]blB|MFyCI:=da'=(hNns垪 +|-AwD+E2+c EfvHÓi8G63?4+<`}pݫ-M5гc' Q*3S"f)c㮄s{Y;) t)f~pF|5)zg~4„DP!*-s +_Ka#l$@#6جmy*IrǧݛN`oELQ֯FBF/F÷V - !RjشtqfL'gb}2b;BlN[zK"OL([Z+jꄮy|n +C, )#PAuZ hCjuΊz'@C{Đ磣G%~I~^o`$ QOIqp;R@DhdҨQ@yHbX7Z+VwqU p{M҄Gl9]ޛt5d;IR9|?Cź%ϓ}zxW96룁l6>]m!ZOJ-1$0p[[]ttqG~ +؅kGZ> Ać6RV,my׌DF|.0Uu{,GI.r8f >L*ӕ1r5ᾔ| Lr@tec,Au]\!hC&Z +ٲNvlT:g䜕Qf>e͝`YcסKm,*_ք/ISE#c?z>~c-4qCQC, =( s](ww +endstream +endobj +790 0 obj +<< +/Length 18507 +/Length1 2186 +/Length2 17209 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڌp[f^a6:m۶;mc'۶mtb:u5i11eSR@ I +ad002>?7;K]?"ۘ8E{! P7<= %uoE"VVe׷6r<;;}_SU-Չ;nh(bfl$gdh!)|21u40Z~^*gs7_y0GX Kjdlhml>]&0(+ /ѿ+Nb A:"6z>O?"O??@}FQ>q|"?33/bfD7Jg3,T4/da /_i`YٟZ?ongy~dnIGIiBCY#acelGoA^V~2G>i9_Y>?ofhhIy99!#tNp;~?Iia`qpN\࿟>cc7cCE[C@~WI9T +Iՙ߷FzV b*f~ZبTbt"2>C)p,YZų3 E#XFÓ'ՅBҝj`b8% JPDZ*jPE!he3ˇ BFT +<hxUF}vB1[Xa1Ss#"īZk֍Cn@8⭨+lD-`I#toډ)&ZC"}X"u~WDuZHwfa-wM9BX\8m.o>e6 g2sPuݰ~"s +T-pjzP>9{y\n +mZ{ Xn椧7p I_98 at.Z2?{() *(]wuɕ|ZPiR*AاO_NE9DUڋ\,GZhq<*43ejd% ؟fW:yUdda8'rQZv ?3)2R6@ODsŶRl Ͽt7&8+)ܬs43)NBxx ?;d1/]=hU3z\?$ٴR8 __aJ jOU +7+"ݚ?.ݘPJꭎd#|xrMv!V&(VWstUfm1ΐLpV\y1wd 4 QxHëqw*'`YKȂemjS6R&;H%D ^8K 3GG҃?"O(t@{h%jBniPO1%sÀ ~vSIƳQW*6B'DJ`hw>%9R&[qN |4MWz2̜h; (U=F(Kku,D60RE/Mo,Q(YwpnHfUf{*cUl!ⰏJfJ wg#UpFlv54鲚 ?,~1Nr*`ۻkD]3Zt`E-m7Yu]e١x6"X%3^c8KZS@$sZtZ7AدmIt[S3_'-(D =".K¢ws`}\8i{iʖ:k`{y+s[uKu!_:-.o#tL.|O w@yGbE#6%.iM =5 Ȑk8p+ cNyrK-x]ﳫ0AfA@2\)i/ς9*Pn1*|cDqXK\d~Nj4oΑw 1t``W:o[Ʌ|ZJp=io$5=Mpve0{rivA()\V/&v( <6rm9KROH*m4ĘU/BdRǽtiG*s]ORؔI-@., {B'DN/ԐjBݧ}*,\U +sNHMfߔ&2D /,\Ȭ{y.$S5@/ v (ŭe\^6^ M|sD) 4;'>iaCVLgz N +]h;Dnc=,BZDmiVU'Xf)$6; `1YaN~bEXys`L`3Uce9k[Rl0<;4E=7?N K]m-"FVm}߹Z>cR+#ʁpuוeBZ;E^s''/ Mt'6iY6 ǑiFHM3完̛HKAFtB>O%yLod@tv2Ix+\?:S8#1ONQz]ѐ<* +i R,5# +߿{/ZS|֮$P7mg.V AR)<9kEsm{ʲEGV~q ]wۇ6?Yc92ޣ5"};Q̵L3 Z=Oe=8=8Q բ ]lR4 '"UDŽi^KKx ;m*HIo78m^ꕑbhgM_1CLX#o QOq;U)Udc8.R+^Bj7W҈-/a"XgocDVhBO\B0lXk[R"iب` _{d$fLom UPfTI*Z F>xPQ=NuM04ޫ/ʍW'g3 +LlȺhB + TG#Rp#L8b}>d2o~0VIPl_M`lGv8gʐ{6es@/hy8r(LLo]_A+붻mw$.i+WX*eRG/n eXZ{s08Y MM'LvɯB dLp;Nt(S=-Jp\G/M\hBB p <~Ery@{SG57/ +5CD +l%@s5gaWi{T| J2JCkn>Xv^m,W5X$o2FY'i]gb_ h{MXQǗr(|rd͗b m9ljx$s4g@0]I(5@Ćly!JIY E5_/gVPV,uGg<ݣ"LH ;Am?G4"'p;Vt\4@f"SLH-9WHx|i~hKӐ<26iąьy#{d/-~5COӋE3 VgbkM4>(#?{Ag9ȧ6U;QfZ;[*r@u![dgW5Gez21@c y <@p9\4՗f[ts߀=y7 ;܍LV'5`Qĭ725g׸]]ՙ\<);b&N,5)Re.w[vc)mȼ -ApDu8~x[S9VrGJe:@]6kG"1G1.-PEӀ})#}<)*~T\ِ]1K]f 6DڝF.ckmГpr`k㶭)?)D}[ޞUթ$Hw!yNxi~NlɄ#. T`HGJ*#F-:ڲ8"<#xݟDhL5m _ƹA~!J6+L $?l< k10 2l}l◝V +O->i.b#A(D($0+ +{~2 EW2xp~IGy赳pWV)qc5#p%UV}LLZѬ1ji!̩rP9}L-eu{=MU7خ&/? +>TFAuB)Wp}=:ŠqN/#PByu_TG~ d{NFYMT`vLVSfB^D6lEyC3Nq`MuO:3c\J}X8g+dzf"J\T;i[nW6lh`P)d<ոpB6UqE% +vg;^b1>*3^q{RFkܦgs.Hv03>/$ٴQ7>Ҋ_!N,?$qƯ֝*7`nAk8E(U4Kq*2łAqA{8-\݃ta:O^0QkK|$d{g{vR0.T]h[=Μ%[2ZXhO'lԙbd>m+"e;&8zsp1-{ B.N=E,:/g@21I +4crHi(SKz}|*_gPkӅHqQ)"p4l!xGR<ݨm~Na[𝈰&v +&{Eɔ8WZ5;bJ)}i³:gCg D(MmdH6ۃV_6"""fTD:,R-qYIrD,:awV&LGԠW$Fu[w4e@]{e\Hd@-_GYS3–bU~N['r;$v&ě +2׺r3e#-|$GF`Wh؎ +Ár֙TJ0Mŏ1]jMPM.@mi T!̑y vmb8^Wb ȓO̥[{9jۮrah< bm몬\Fy'?"Z2h\ug̺AUZBPV#$v@9eWQ QzcTMTjyvp%G|>[W*{tP0xmOM#D`¶ ;`@hN@I 2|:^q*J2b\ySq6p + +F^}YȑXq9\a=4L 8x, r?'M3Dzu:a\~gA ]# Q9ؕ25\'Aʂd?]%xتRGU\Sis5σ +!`@<+6NQm:m/kެ:C0o$wE/{L"]\q{|}fk `xpȍo1@w^JL_P>cEDv^fclfH_^N/ 5 t =66e +mr:rj,L?Z$"du΁9~8n~9{Edž!`2R'Q%U9yiS +,#+C,%iN_8J JWԪoZGkP/7$ߞxv^_w֚菦_A1~"R anp]t֝A]W ¦1||.ѯ |-I2bU7>у+AM, 6~B,V;: ;t "/zT#*Tu q{ePE2^U2~ہ h8PXsN(/k14To_K^mh4MT׺|?X%o{h=}ιG^=r +nWNN륭 xA<((ώOX͈_:zWPdžzo2^2L?7 +DV] QXl[} =ߚӇ|2!ei4. X= +rX@Vg)(˔he_WWEgkiy=& FxO&jdGJ]Zځ>0BOÇH rJu Q||*3/Jq!^<×7{CF ߬r>w?պm`h-ЗTц>NR#) M8Z\)tJ/T/i=^p9|i#ZcJk(u8Uhђl̀H\g4 =:0|F^y{btz*»JXnOs[ѫv(ijLtyޝqR1O + w_8Wff)`ӔbZX: +[KrqZCj2G chm+\wͧӫu:"H|7PhuN/1 2bcOni%2z>zQc ql¿wa v[lh%^+-}ִNq߻%fY +VDЧxM85Å5f-q#pE:ɐ1ac~ZN Oۗ ni>P +LR2&+HǸ-FU+džb}|=6.Mp~k<>ŊPUhɆ:՚1x +|6]̙a!+1-\{-uYae̞2d?:b Ei\Y$5K=aze U.R Ȋؚ ^/cwCl-*Jq2^bUKUpG$X jvz[29I+mΊA;ˉ OL*+~ݨ3R|Yݾh-^<oT/&j+DbfFǎsJjS=&wKNys7Kۥ~Z``y +{&ܧ梗-1J "唭^׵l>Θdfc}54#1?|vM?`#e>-@*XD/>6<1RxSz\y` LQQLͣ[@D9㐈 +>[4b1X28kx8%1WD-hњxo@}\9$ |N9Cre r #5z"С92Ą9jFm 3{ɪ=IpPZ7Kjc[ߖz]8^CCֶ!iJUroi1'}m8䅹sP 2XXicx;`qD`𥥕9C# 3obVo)>[N,])]jU _ƾ5xz ^k*18*/ 稞lF% uȔm~G`z%.y3^Ww^4Spb``f1P15VTN&ժ9$>%3]4 +>:r̢⛚E roW 5bD xNO¯>ť"k05"_i\> br}ؼȵV絓Tmf[q-Af:X{%;k Mä[d^v4d&(&VwxKf0公oL6B'uw[]=U"T6-g8=O+8Mf]SFҮЗ6A=q2?#2;גU"BVl_93ao*^cg)*kwĔtٻ\O?ns/FZm$3i/9F5)+uO= f$>q:zjCLόpa`9>-9bI.m:.{ Sszl]ҲYw7&B _ŅsvLĞF&嫙Zl$ x)I}8&F ʺdS|6P?πQ`oA ?ÀcDP= ̕Lz :4^B}b(Xh5<$\t؜%~# /|4j_$1{Rޘ[֎b2jA63r1?dEw"ih0#Ok5AˬH'e1iN&a+Hd} #DߥT<MufK\*bp7-gr_UK\tVkȕ#RHŤؼ` t)|;_lV\e:4F#2Y`,9t a<؏Pn#3^)A7G)_@=EQ0{ _s:p9h]ǣ%5O""x~$1B6p"ӆmé  Iƿ5[ 2 {uS>q?(*)Vo`Y FS>iZi[6[eB#H|0ooz͚afE7!&i Ȱi=Tձp[S.Bnׅ8q̻v)dI'Pe9l;U3k'}萻t*9|ޫ^h7$Fe;/ڭ(/W\sw jvn@28z^)'MD^tT./!G!.Y(p!rWR'amA"`\'wt +YU %88K2iq8n_=7S;Nj)Bn/<_`\|#ޟXX/!֘ s . "7ΠzT`PeMf0p*OM3˞ ;fRWd-b.(?hUW??dJ|c'sV]˞2Z 6qh1<"6lG"ϕ*SaJK +n PS."k`L+,kmR~hbL\1s/.c78`%HYoi(G4@F"pz^']^$B-/4iBi ?H}D)W7p*ٰ*L '&x/BY<?X zbRuIfݥ<ϏP;k%bAmi=eƎ:!^ms^ + HzO1K%"k)Rw ;c]:,MR{ƕ)U:h%=sԽT +r:8n'TY AzId;9ffagD<*RZ1ʺu`dϓںIJ,4O~k haڕAI ǂ菐8Y(A&,]O! :=_ + މ~IY0Æu&`{x0{H28z~Cpa а[owĦ'07z$ q,@ӥREmhN9r"F#$c#s!P2.rKX׾+ZfvDݺK#q/4jrw[? +Ig'!6`;jʨFvow>Ky9>۔Lk~ j-6T``PƅUO!N^Fk6=>Z.D+R"juzyv4([ "͍'"&z?lzi_%,/N:pʓWי(zo0i6mqװ*!}Q3(G9\9p.^~pz|`tqJAҜSDyDuӵCn8}R«naŇPSϛ |AU*h&zD?DȮ [^ n9Zyes<j>h] ~x7{>d;zcZlWS>QX!UJcyY?P1-Z +[Ґ +'xtovh*ߥ:@|##ly{ +XϷ𖽶(SVz\\|⛒?Lo$ciNI\,8ۙuvm]TiOs勤 ))sP&<[cc0]J^x×3 maY+ , 0vF&T?|"{, ʬf{~\d>7LA.g]981LVl&"F ]|lRUw#g`qieEvUg Ӿx/ixxYj)6~gbQ-> xc|˭5\֎כAN">(!փgUe Ww6A5.mIJxg"#{d;am.ZvFmC6 SzSsvc}._{ IjSvE Xd`XLv} LΧе6odeSqdCk=)"1G ;?p~t).T@3O:׺ $?KI\+Ԍ +^8S){# 9Bۥ3OWPM>~$ͩӍ]r c +9%>aE abߏB[obٌg醴Q\A7jȖ%Ng`=OqҼ#LCFkR -`O4l7|ļJA_{ (anfl:\_[' -FOM +؎zyڐp3T8;*x1:vcdk)fwr~pN"ZÑm찼7CD R=;?%jlL5dsυY33vE`Í>·D5['˥&l]?Ҏ-ckC/By&Qxj^fDh]ϷVy^&0oV2Gp5r 9/[c!փ;QPZwfh; Wfr/P}ήD{ʦHy<3/OC#!EpwA Gm݅5&/Q5ӚzB2G«I|wZ}H} +Q! <.}'pPyj\eMxLxA\]NIrPxR"R ڴCj_/cզ +q3EPT+(5 +)m.x[~D+Oua#cMja\i>0] /יg9jmYMz v`(#g"k^֖spKhg|b+;wf+`0t]q38]cxva#Lŵn܎)9@ϻD:vGn0d# *_6 vޑX 4-`?gp2Eom%!1E쟼ZVfBKwqtqb0Ϲ0KMbjxn|UD:8DRK)l kQmt1K9PCd6J 0nlv /tvԡQSo|+F& Q8? "ZS13׬uPq6B`0,B՛|ɐkO>bQgŬ4Ϥ|ϩJh}Ϙ/b'o}+;IB=-@-m_qrnd"&mTs@& ه0a-`nb;uh"'-6gcAU ST R}?0$&;τc$NDD'K汸$,7K5,([\_ f +r~5!7xE aw6I$ޅxZjG/dNb!FAjHAZ5ݖSW`.V1-h> +stream +xڌP]Y +c!]{ ,==wޢ +ݫ6$J "f&@ {WFf^ + 3BBb`3$7v;dl,lN^.^ff+33 yVfyF=BjS _"v@g+Sc{%`jt j~KWWG^&&Fc;Fg Az%@tv~ P0]#@o3Z]@'̀Pp@hz`ad?9백Pcttۛ24uq7v7561@BD` *\L]]]l .prdm<}Vf濊0ssdRrrJcY]\A7`gK9/s7? , chHG|fP@Аl6Yvo]Wdfg%hGZ;GO?Njo5(#> YlΠ{SοdV'ꙣ1AC܀.m/+?VtxWԧ߹p^_6@?r- +Tda;,Nartj_VfnW?|ܺAp|Aϫ4Y׿.SкzMLB?v׉{0 LSj~aYtMmVȇ^w7K>mo߷'+w}2LT[/:iJK&dE"ɍIޣ_ҳkHܮ^-,SCz^P EI,)+! -ڹ'4Z+L"I,[kìjK7.9! $A OYg1q."} + +kfJ}K_bN@(Nr}y 3"fma4k= \tV:`g0myiuhx.<~exOT ;KݨeL´7ݚ@i %Oo}/DXur^U7+tm̠z釼p*|I;?/µd{gN'2-Ji&|Q܋X.icb]Zowf(J/TZ#Pd$a)hHX?ϭme桃yGPܦWh~dJ`nbH4Dl 5QwxdM5' +iq +E}ċp"oZY?}VCBY[$3<Ԣq'v_@7?5M}rǶZiHI2q.@bպ!ҸDP93\?6%J33؉*kMu.9z;[8UE X^68P)O|eJ(ZI89V0zݜ 0`hmY*oS/TЕ哄2֣RnL 2Y$&3&ZFYG17}<;'5|T>$1oA*qA[???i̟M\ qhw򰐵6dy^}TW)4k$tŕzo8FC?;,ᕀ2"gz[! u17VXR՟&np^M(֝It3 j0L +/esF}8qRιNClw)jSڲ+8GC4=ؒò>b:9dX5j8m>V2$covG`peG)Y),RLjɌӻ9Wx%罟-AڋX9el]P6˔ݦ޹Ek5PvxO{hc{yf +zbEcKsŚN$rfS5;,L1D0'h;x?x 29鱹ɪPѷ1|v/jw*ĂjS͋.{i @(X#gϡzAYp<]W#}_s#*izSRqgG RtUSI77R#~jj +ŏoh2''3e~PzǚK!B**Ǵ_uʁ^!#R~mW}A덽t)L4GPn$Ԟ~5lCsY_yxC4Mψ^;y]saY$.SټҷM'$i+i: N%^'.$*ǻѕdL4\ÕTɦ@j"Sn7+7E+AsI +8I x_Q*,6{<i3$WP +H&xDwFa)0$>oMW$|&dcS9щuyNe]Mx⼤R|ef0X<!ˀPs5~|U j"k.bI.f*SWEr=lP^| ڊ+5aQHQ*ZB,W|- J܉sq7훯?~ w $\ĜOˆt"KP}jQC^p(yM-zʳF=ԦY6mV뻠rYOg7)#C* i?D\uDMZ?#B}e"|>Oh[gr+{,НD^O]>`\]CҦw ܜ;db$zÐG`0j41co8Y(}4#gԻɤw֊l}8ԟLg>6UBiIԻf}n5L' 4U>-pBn";8$o`v%`T/r!ҫlDaSIZ$RVO߭F+yJa|j[$@F'eXzڻߔ#ԅgIKaʡpS(%!|ylA}]L*[=,5XG2Ϋƪ 7}кV,Z_EԀPE˱ga޼v6'ZeqMe?6.Sj~ؙSj#Z/Gq. 6˸Mp!`Y霊bx}b إ*A>5:MaزFR@<_Qď2YkV8/ʎx4MŗL|oUq nxw\dꭅ0<+BQ3Kc.+;AĕبQ'8/ʉ$k8Fv'YT +XCl2Kál/aځCʻLv +\(_5( ZvXu/_ˠ1$S?=̀KhMRm=!) 8" +r nGDUf Wu~2+iKN@CObkaE s&ORg% +g KY/@vt \Ic\IYL%_ʨ&ИOHxg lK JQL:ۃqeKmkW}2!潘1%)<l2.2dǶydpT<z\e mSKvS|< TY+hCs4Oc[2HWV /SY +q<v^s!\ a\Ȁ.`~h (O} RJl4?aclk NXcN%mQO3;|R|Ђ屢 Qvi#B5 +e78s?S>:/UG$uj.<=+^˼.ŰeCb!F׋4`F?$oEwHNXEn0" m^ +j[l85ZBv2IX lwVR+ A!6*Ǚ7TvhT۽#^O8\X7sb _ k%8 %37-Dveو:`g0).Mg^acINX\_Lh`MRcjGL\$x]ʭ*wu3!-o|[bU@+*1CE=VqEP8L+>ln(jlPrbg4`H4uk5 +\iti%Q7yxoGv,*ޱY,_.lFnxPU'Ęs+KL9^?J!F֎EMu)ysbLgu)gg=\?$0jk'ޙf]>2" +{_EFlA 7I'䙬 (tːKPH$̹g20ήRRuN+#Q㝸Ft>tG֊ GNoBZ eR=Nr@OY\#'%Mp ]K'@Up3>~p- i#ud^X5 :}DIi*7ƣM>RZeU.%mZ7gˈS"2t{_:`ЖnRw9?iF-ȥ eSݞ=H`iHc`VIm0;5A ݂[|Ezx!/wF`ed/ ZkZwF o7~hk!M9G}P&caRߛ(NiD$G};dHBf%`VVG0<ɣ>8U `E6:TtK59+6ID jekVZ(\WF:ҵj 궢lƤDL%U}KRH1s*."Ŧl 7C?d%F5* +xIMVITU1'kx%ӑ$v@CN e}Vp~4;2y<-lZ`dĭZd=#NM%iu5b@#lkE&JT e0$.a{/y+3ّ\ĻۇѝUQQsX62Hj_FR0>ͣbLo㫪A zN f$yʱ_.KCW{/mmp UU-"0aHO\-tؚ}]:;z!8I_M#sN"z!OЗپW:B_N s}ʹ&gvaxړyGPw џ +9i-ľhZs"JV%+B4Vd;yZΈ]73UE єaq7ٹK,rP¢Qd` +bL=e"#eIQ!Lky d}qdFU(_1i:3It+" 6IC5;lp\"DH+#~9aXMQOwPid5F4،=巽 jCSH'x2i$.'RIj +-϶/~LQf݇0'CSul] q))y-hH%q)w3cT͍Y6J_ڟB|;W> hulxU6=|VFrLxtݙe\V Zӏ6阓F $!SJۍoF8IaG@=1ʕ#kfKϧ8JѕDfTs0g<@&v(!=ӭԗ/uCb0ɞ1k\w= +1ݭl9,2!K_{pNU5tF5GXrd'ElD +IJ첆a'^,^5Ť!/(av\JLTeIS@Me&?c|*0 A#KF {aؾ5;nxɵԔGD1o^x_DʒE+4u(˘Pb4& u~9G{iv0oDµ݀KCId`o̥.G%ߜΗ52Iޑlh ÊD>_釣Ey4U_C8wЩŮ0,Fƣ==>&O^p-X܃{a(sKdb/xdVԏo`>VBqCGu}|S;$x>H7ȾL]r60=k]2>“K! )͚ Qt;ۨGskg`JPOU~ 2u'}6 ѥU&15`7X*ozlwԆzLjy2zIf# X٣8e r:uAY/(%sA/rԻ%1Ga#v9ħ>=xy+&Sy}(3i %<άB'0la D'>\$Mէy x?bcZ~QxُRr"3S*˟gˇ~g㟬Q 8] \+ 4ۮ&PX\i1h#`‹eN .gtg_)t8%Honq(ԴkP[0As>+LCzZ8괦`2?K{KF3%[2ˤf>Ai f+Q&|KӭyqA`Fо+Je3rkC*,s 9,1'Q̇~;9.7vLr)?EK eV|_{-HKe!{U1#ߤv4 +A`O=Fc=+9wfP.iciiMgОd*['> A_X$#{" 8߫XV dxX +Ah o +V9 *.^]+7I A90ݸ=C`n]~S,[-׀|XӤ2<lHCw$A[I"_rMm1/Z`9gMXH#䳣sU>)P8G]g#f$ G=pa{C@GZ!gJ4>!lb΂&88j4ƼIVCDpf_DIb +%br)$,tEw(Ş5ȨA7l܎!,[t?\$?rW)oaԲp;7V}8c2Ҁ!Oï⅙$)$.k-W@V!&CM?hXV^]Rh`#cY`b$*6YꤝVZ7U(k D| +[& l~ !D-d+OAscAmUvcM7,EzIΟ$fvE3&ƷO/{L O) $>^eNք\#:O#méqOUWjѴ[t;FCyy  -0.:G_CaO! !^`إݥkrmo(GrNt/7y 7):P&fuVCeS_Jllpߪ,%T^6yqsL%P7 _΢CJ|mEzaDb֧/[$BJe~ qr +2J@Qԥ)2oVu*Pbc;Vd嬗hiaVҌ,k t2;C. _\r=y eD-ޛP3([0a?D4aF(uHN YӎGahLKYHJ?#fˉ~'y4-uEpT* .l?+R~|K/z>OC b+AGWyOsuB`AMOa^hy0#[yޱ.)cVצ:(]/z<>fI0ɍ 1lv:jJhF͊3ޯ [bSGmݼ^?A ುu>) ۾ +KE$Mi"̤vJx7NyQ=y,ч5 Zw<.ݶom& !a-tS#w*yelUڗUpDW& Bȴe ӫ1+-`Md!k$a< \do0Ʃ3dKjWR%:FB͖pT+paIO߬a/-Vi9=~Ke}Z۵FW ͝J֌)C@o 6y18ПÉ7R +v~D ۗDv1! m_(m?c( +M`w\,A )_r6])(1Ggk& _h7o0 â'U)^i3a,мoF:>0_-E.sZqln&KNH"h3RˑFKj8RR.MڌOܥ6 /쫿i}!tRW=B1 +qyA|tm]C$/@fܿtH׉{:rNBT9CIol }T=NU΢KhvtzQOvٖלR|a~l5q]Y.8OWgf?C +Xֶ2@\"\58k}Do=r3 8C0jKcN6Dl! (K_i'j*ف:?Hw_}Wa][ W1`*4J{Boݳ|~.*bGu樑B%b8ϫLzϻq'@~UjC|IuUvV1!LޭwJM8a9Q~{kMBE:Y:BJ(CH 6/Ij˨uXo"+E\CGm,'C=( +q`^,N6v$(z gL$u8Qh7Dz:օ 2|*~ P.h]2r˜0ΪE[y=N?sdDY=p Ni"HrM; I',5g?ԋy ؽ$ϝCtؤT IcO%*\AчI1=Af! )ߐ| 7RnO5 $~zN(>(-O@ę6 5+eH$DDb/ɫꧼ‷s]a` k&?V$x~n vRX#45Mq8e@!v|Pn+Ñ ;mذJ蕟Ie? 8VfS,'EU~PГKRH_s"$)@81빡`$]͚T4BwL,;EE!+/`DG^-ܤp,uuO6ƚH㢭opc8Bd:"3}&KΔRb|,1anڕ*,uGz"@\%KԎrpI|OQ!?N#b{4(4{J4 }/yrBd& E [-ܫ0}P>˻N20+>l3'F IL۲q!x[.J7ep򬉈(qtw=uHS|CŧAX!Ґg`9t~=#93{Ho*- s&.Lxx$+>qg}S KJ-$mb&\#I;FJJɊkzc{D +q01X%UBY/Ɋ=k2 +Ky9j7\.@&CkDQ@j.1b>ⲫ){nȻi,A&&ۥFd^ѲZ~ޜȁؽara@W""[+}! +R{Ar.:y{#(3X&$/8<**B͉rxE󶉓^iqlC&?V4}JӺEǯXصh (k%섡VW .ѣSRloWY➠#Q`0u>s2`Fe_uJ@6uےi{@-:X#>n;<7"3\ #nS9h%v.{AGF^u?# ]zͯ(RTN8 YqƾCK=Ue( OWu0GCCb5E +W +>QޣX?SyYas=̤h+ډ$9aؤdQlKT$>G/͐γ2yMRVZ8MzcƐu=qkryu/VIJTNhkmpSŤts'c0%{nᑺGR}#S!>ϒ2 gRGgI}=;lZM#zi26 ^cA8z5 0=غ>6Wj zHKCB~K#ͦ`C)}a̍##C-Hд;@\vmf}W)zXbP&L,myee@9?,y=%c0`h$NgڕB϶n1I?a ʢDŽǢvri˶ o8dkO*u|F _D?b9.-1 <Ӵ{JLN8 \[0w@G~ l /i>36s06o2 +l |m6!5kqtb!c(諨4tЁ~~}N!_ސD;8h#},K ڑѓ{q$u5اHDCQWϵ֒Mlvm)-?s/}"%jNwFpZ-vsz)Ɯ?si&y;ܘLLOۜ7H]V$*=xQt`|8cEoBӦQh_hj\\aqZiRB$/+^|oUnv}%PMT yKJ!z[z!eN۞}ך-]۪)VJXyW]jH01e8?~Gs\ooYt[Q$W:gݥܯp4/|SS0_!/r[)zu6. E/+im#3dѵ'dCZm X:ˤ9+Lg޺DsE+xrn#~.ml>RDΦ| ePGQ.5s?c݀ѥ2Q«&*GK lN^,F{*X[8M,i-(S[0{; Fhy_*lϗ0ΰ8CO!\Lg\κk>m ɔr^h]n1ԣٛ;7gEH}\*=p$ h7͂O!BjC55 C'cވMjr$I se>ɋ/JŒd4n{CbTEgtVDZN.&Y'd v=#bΔ=mΊǤvG. 3G?j,.&u`r,wcHSf&k4@./JwBփ=[Xm?3XkO\5.[֚2'>u*M\ʛ<85t(އz@hт^jWS!cH g,-n$KHko?8P<>ETۖ@3%tqW47Z/%˿|ʷYnHg1=41(_a3r+])Md/$jR[\PX|7dAm U`y"[M-E2+} hN> oUd2[X*k@}T(uYp:_MDqXbת'iL'y90NKsyA;T\ʫh:wUJ#g÷{b>Itc4UNB6!xgkW.s9Q05C3;άF{VI4R Ke)Z̒Ar6sgvWvؙ=V%E0mnX+\ Σ +񎌢U d_ٲI*FEeZ;0unsohYxiɻO+ezEFe$?A k"r@ǬQQP}FhBH!R(5l$[Ǒf;ol{)C)>N(~J88垆'v+Pc'&ItÁٓcuB Kw^% 1xLInä_?=#V+ܐL{:㯅?bN*)o!4C4 D`i?}klVl7] +7~8PoϹM_[֝nDFj{{hs+]5u5$Ӆ vClV6zahR!Sč+†{E̷h@`73B}P*#)[:xK7V]Ҟ{նPb.j1CzHAJ 67bΟaus}9EmB(6○#`@fUs1]gP!Kj@"Cmh`}m2я 'U8.ԣ| m1NIqupF<y:V!K5bjDe^e S]ͱ IH1xrNIT]wt#*ⶱUY^ azZڞxߥ! g!Bp"7flGT}3ȞIs43m˜o cbP˻u[&rσ #m~~3?Ar M]i Fˇd-lHa v_/x1P{C\K?+Z +-קH3b9[ZT%$]Lvoͭ-~`^ _ȻYjѤ#*bdCVޏhlFO?S(8%FVo2]G"ů: s|f!ogtiF -P9o4l?Bj=AXrkL%:9*(ARG~'t(eMrd(ڶz~%u9X2.2 +)YE,=[ ?Xxjb⼾ +Z[d=/} +SyHs|ԓ=n%fm 5E~<F9\HC#(h'g|ȍeD$b !g ꠸}gx="s㿐$џ-ZmZbn3x|%*]l{e dl7m F m) ?`B2Ev9|YS'7cLDad*!*u wrQqYQ-9E|]~/9 -&8-Uը{*5 `Hdzwi5,=W vP 'Gu{BsIfs]4gD5K}|3.wmA'/q˃@iy>.A@'+HiX#>sR"Zيi-VhSW]0ܚ@BrvUAB%vgĹ:$ R` ae<َ,7]=oشvC C!J[uU+ί! Wb!cꍇCA܍I7F@CBJ5Y,U]< %FaZE{.=TR^Qȝg;EYߺЋXz:l QxYm@9è 4U;W 0mf`zx֜.kv7L2N-?_3)MBʌ*-6]DNPM9~c@kWf&HS}K~^g&-:L&{Ԣ32lGS @`T/%݁m8$Ac}.OZRՊ\7|(bJR㐩~ͺҁG:8 +%T\q7,:M %AVM~J5@i.P uw;0U8F?8Ni(hu.(n*(DMѰH=\]Ǵ?yF7,TyÕcLXPO l4c%{u>E;nt}Oj F G?// 7q;ʅy,SLcɽ [|v))`7iZi0p,5'P AВN1슏W4oC +yA`BtDteZ?ӷl@L Wk+a5v,b^]d|WJ>e8ulIG;!*p>=cD_m+mRFZ=eg;N'G.. +mpEE |E[$Q!z +QӬu*[cvFS>R9>-bO-7UH 5.aH<ΖM fW'ݭ.XhXd/sE̬kxlAnAL2GLZ[drY}=vlƕ]GTGi.O tWs)"lQ@kj JSFhJvj&lF~{d*/$=j߽ RZ3.R-O!\}4XBbIe/k$BuHb>s(6"E㉈gq=#J"UJnA+ũK QS<D X )}7T0-.ϕ-Pw_'ݽiy]Ƀ ĿEb> îG~6(JTIZbgBp,]Y*YMC KF\g" y@O[B9vrs3˙PHEhm?@͢R}TI΁롽Cc(2⾷-&=[+ܤ- + +QCh.gڮWH%Lk(!]$N@vQ4ʥY9yYqsaMgQ01W2?uG*m]%AwQ] R!}:=37Cc.Zf7mu/ATM: ْpi.r9䜏[\PF>IaW䈕Pm_Z\PME߈9f +.=mgr-[kIP53wE;񎠤z5i3 (ҳx >=D[OO{i(#cJag8O>w\lO(E EZ*B9b J 'Jy\޾ ͐yϙjNǛf PDwzNk+Or+U NŎĢ<zݿQMv6GP zɁ7$D-P"iq8S  UZ}].xuض: .By$ \cfxAAkϢ^X1+j52" }QtqD$AY& ™yUy*Ie%S ˁs'}"xIn-=âH4|&p6ԟY#dӲDkzRV}2+WmEˤ#ڱ$(MnQvGU3mEKkv U?<ъZ㳲jlsʡ*Iw#?Sjk=m<.OOQ5W#tTfM#4GEU ~#&7Aze!?kMۦtKrέ$(L0Mb{ 6BfIJ9d9%ة$yPwp#u9E+2Jpgaܟl#[^dwP6O/Ki>1ޮ譖x&66`Auh?ׂ M~Q53~IZX7 tH0-ok̜͚@ԟb2OH) zǁ1 xg 3.@ G+ܴ&ur\R'VXgrCKLQ]QSa1 P3OsVɰsKM;w]wu hR +D`-%V6n )~K!;LVޟ n8*̨/@3o5¦ΫNVڂC#˚~'BI 4b܎g(h3nJ&?H&<':j.` ,~L5N[X i%β1Poa,2hddvܭ]h P0$x^G{!1)S!0p|os>ޭұڻD_Z= 9K(1FI4K[$yBC uӃlnB3J  'aߋfTn`sLZUU7 +mi֣x˷[V&6)PD"L'"vo$ϪuWR/0f 1ö`Y߆R:7LdiZmKZ .C})pڒ)iH3NP{ut"ǟ0$Az+u>īt%Gna>P՗>"Bb6!.+^l2Hs$ڕ@IQ'`br.+РYm]VRޅ&()!8fONg&L+V݀Eڊ8YCF6.8XF 1T즲) 37WU˝⅞h'w3^%AX׎k#ajz'S`]Xi)$7]mAw[韕SeZhx~GAMbBo7(191bi,?nR5Ye<=TG4CImkH H<>=-z{yr1}E,m䬥-]'.sY7D @)j)k.%Sow^ o qE=m +P.35> +stream +xڌPҀNp!Afp[NpwCd{a^{ 5R refgaH(iʱ8Y85#Qk[: XH8[$M] = C3?@hPbȃA.H`G/g[|Йxv9X:MA%SWK 9B ڸ:zxx:@W௖ʦnitBlal x-A.o.n Kg[v"@/c0}8v_M / `H+z2LAڻMMfon +Su\̝.,.@zd+1K,$ W:[/ ڰpsd,$m&B#tpr,6%r[?G# K??$SwK?KH +BMli/~g'7÷ }ŬnJqq'`g}8=tTQdO#  =3(@g ظ>?/.f(+v[O/oJ _S-j\MvD d6\,l\]@Ws.-=d +vy۽-.oWm7l +rp:;z!Mq|vo.V`g.=7U/ѿ=UX%K<V? `C\V?EEQCV?`U/XU[>?OCo=h|:%72Co[v[̷_jdZ +ڷomzc&!5b| o:)-:ۏ?v[.E7Cxo؛-?֊?[^ڽs7gdiii6 i#`ޛBBٕ"pW ̏ZuyQlfgŏke;)pSK߄da{ڢ>q%:Gty #HRu[is +Oj2: +*C,JVlnSBt8D>m`{{p Ftxpy(W{Binc]U{G:3q J, ًh9u١MTh8MDfF ]%"5 9izeg~Ա|PUI0tIΚK+djRո>c8d PȎno4ZUއ&LMyHzD]@~d\:N:zQ{B0g^d2Կ]kHh +\RgzѶ%C@\:7we!컚1{n! 7| TbuJU;n\7md*Z~}HFW]Y5URN3R^:Wex#_ + K&M0!I+wSj)'JX0/wPeHPJ~̝P '\yZ0K3Pguz-/EIOG5yNȠ%HeTh%@X2`Jƣ;4 /;ܥ|m[,HghSYU(Nb9Mӹ$t~}[Kȧ3K +=R͓\sʆMe$5۩Jd&cx +E F1$S E W;*'#;_$ۓ%8SKJ|.4MCVBHIsLm//\@ +DE\L0i1[z>D1"Δ1ǝau7{^ QOnEcV/)`H.qZlv_ZYQe^ ,FX3__獬Cd +flX$VFg,w1r{9&$ (˼JEʪW\!\$C]H柜 4W]}QY6HJ "w<u}w-Hx~҅P"2eQ.L|CF4MCA(zx`@8﷌Ǫlhulou = _ &հr4pJYR,Q>`{׷&źeNk4?Zsc٠}Kr On.8@gj0m.L}dȋWU}IJ\ǦbiPGn){OI_ + ?UlU4\jnC +_<:A]7` Tz&T 2x=|ޓE^]T5?X7Vp{|chTN%~WH;`!"r;W"&aʻK1*Vc4KsɨթGymKs'9d4:!I1KN(4ϿJ~h4Ry&[9kSV7̪`QU"S}C@,w~F,w%v]eZ +cҁAtqcVPeWñ(CjWh-HUji]x se'rj0TK'PQv|x5μtS7`~qйF-;ۇΌ1%lݟ"MQֻg -ӏykԣ-t3ݚ"i,ب0, M@Ӱ/&BxUVHuR2axrnR`i"k9؆wW2z}AT?_/w;xmlI{v,w'սh(wkit[۹;${~Mϙs.A^8ܐ;cIdRSu+ +AdJ+c-pOMPS]#369g Yv h->ӲCb*u~%tĹ[Wʀꪫ@H~4VR8 >3ꀞoaiҌoǽzsH5N{o3~ͼ4 H&Uc>dj + v̉oWFA +Zrޭ%_w\q!hKӤ24fhӲ]sAº\aD4[Z#Nqv fg~Nmƪ림 G?թnpo aD#^gLJ_F_lNiqh5{w3Cpe '00>n *Y7&mUvk߼ S_ vLװpxFek*H>qp7LQt)NwtOzݴ^ڶMn+&ޖy)϶IY + ƏFxD z +y 43P9Lz_xGMwE,f'O.iӡptz$9\;l8?=`J!e56mEM(b,tY?R,lߞJZݑonF%}G:OB_"Nj6hWlMz_/vyglAԓ}HyD]:Ça;qxNŽݹ\04^u6+cg>yuS[Yޠ!/A4:\/>a#1^^!]ለ\Qa1wԤxm;!{wSP#u}>g%44r85t;4Zbѧs TÒ~ (2O,}`,#)59]@+ zF\IؒC.ƞΈ=~a1P&r kHzf fpG9m<ד2MܩCo˅[us!k{Y*~4MLeLVZWWѧI7bnhx|'jf,5E0pV߇FB]1nrDv#J3A!UvV".+C{ +[] +]$T#ߗk5Q{~G S~煴YHM3VZTj^'-*L\5{ꊁ5mX:CP1p|}Oq8f˼Hy&N8AV]Bl\]kxwZ&{F-;`h`B'5=ɡ?2S,FCXV,Pf="נQtB1(w3MWޓfsx.糋3@ٶb+vonCKA)B";K ˀo&`}p/>7UJ|TmeW4aXOTkAbGw͐õP`X-D, +šp1NWEAL^\.ŐYx +H1ntMOK4_߷ a1I]zZ? (Je]']xum;e) ,&zDxf'xI\HFMwW"7 $`$&f*i_t|ٕ7k^vKEЕ}4XJ \= :qTԱ 8*֢zܻɌ3|-ߛFaxE=ET0sJM\n;=UyN`Ȉ˪g*ڙ}q!ا@f6׀}I @v27/$?9킎 Dgx3`s#BdkQ7ۍ8(&fێ$0:?`^rޙZ11ikԴXHg =,s"R8$5+[dGVL*qIv,`ؒ,n8c<쿅O P5!b0G=R>Mqw)8RMZT=mpjoc;԰G /9_0uZ1&O*ޑsZ>KaDŽ;fypJ?gҘ$&ާл㊥HC7Cnb,H @]5K׍|*hӈ lZ"_8U4FMGDoY*EYS?%$([GmqCݙcEE~a: cEVi>Ǫ\NX7Aubή,* 8yJLPٯNө1woіCI9uTc"z=섄>X/zUhi/%%38]{B#|5ur +sV,AZkvzFdXxf.Dһa2B)O.ܦ+l# Q?vBr #,2ւ4 3b=It1]@A)fmD +Vm#7Ps!DktyZnYjwJ!QeB}26Hs*}b FV$b.^|F+^:꽵]) =ݧ%V(sѶ9 +*UŭяyvTxi&j:@e;ѐ@x^?v88Hœ_.G_d~ xy99+evMYtB|NSM.%]~~u?)Gd ]MR(ԀS n-r@ =cxn*^~6!84H>B5(*Pk DƎpZɴv,XEsĝ.q9pF )X2ck I$rR}ό2NS&紝K ?;QJԴ)a˖#`!Mtxc?[V׻7Sƕ ʶ7lLBuJu[kDj8D\]'.*>P-US<ޝcZ/IӰquGQ{M1#[JW=s~Z5PhFeffE/psهe.Me7Bׯӯ4L뉴RRR6ż_̍rl~D~lOOD`9~ԫŕGg\c1>B?XY;= h S_2le3JS!8@:lVJ?8a>#}gr>f,xj>3XOYMy,Bg_umAؙ@;S"i,/,tj?z`vi,1YNJOG!V+{ե2l*-"d;> B>WBfFIwJ7xma&,ILGI]6,2eLhxC¼WjJ3ߌC%ꌕ5גPեyYBDGEGL +鸑aVŗeČN-ǹ{ +&DHD&e90^})euή 'gO^\$_>?Uoh +mC!c`́)B (3Sjc$| Grf񲳙0Ɵ}3[ 2 eYaJLT k'ùs U[fKYs58B:۲0"79qwGŏP +#9S}/c @d+;{50tߔ=r9Hމ}˳F uWPCߚo0acWVDU@_ 3ma' +.IQ0fp ?5޻a +;g`pFh_mW[1"lӉڱk"<7d'pQ%d9RL*Ǎ+IoK9r}xp n XBemF4-Q~iAG>_o^_.06H$ /P,h1e=|%8F戁s +w̌{#ZB)egeGEEʁ^?BS 1 }eTHa046[A##\w/ +[=v\PG(6;+3r/'3^#MfIdfRl+XB R=H.P c5-3"s +e%hR;;ey,yH+?8d*va͐p#̰P^+WE\)hzu6JW擫cM=J|b,)U$Q )N8GwAD4 *1!b M=eM;/ ̧,9X\S~D fkop .C1n ݚ=B.BA#It8W)-4 + TD$ZIK*󸉐B֧8 }Zfkoο(uEvac5[25nzN#@D}!)v$Xfw|/lnNI0|h^KbࣁuZ6yJy<.Zx6TR4w W)/Վܟ*9-~"|"N4[qtbȶ0|L@+ٽI2 *Cm[b lUaC`iJ>Q_v^g{Cc~s,gJ| h)grgN ŋn,s Zl09,?rhڣ! ϊ{R6M65GX%C~2L۞ %NϟNIf?#: [i6O) aa$$׾\BGS [׽BI9ACQ@GʆO_CwE@9BLjH&$5=uZv+/6!]mezThp0r$uwG# G\ic ϰ/Qƍ+/tz>zF^jb(ɔG*I3_)@)@[ؕofٲD:w 8npess݄{ olf%|U!UJjӣs8su z9PlMJ'$؀$iծnE003+~Xo45*[S#zA + +,'0jpOK5ާ;ҐƓ:Hj#GIؽO)xy O^s=ZD|< NȠv]|[s~Mh;:E -͟k6TofmȨ;9^/eYHɐbٶ)‏k.P^3՜D!=w>aBvJG;bbYnzV/e$rY-Ҍ(zwbK|Yev(muBqQ)?[# }Qp^VF$O~E F(+Ys#PIL~Dޘf +"Aoq+ʑ M4̆tᇟ*}=:]5p*~tE@}<#E[/pePDzSSp#^waB29МtKz{@ﶪ}cB:kԶǮh%M'rx9%nxôXxu+=M{i1J3 NArfX tšâ)\6iۧ܊`\i<W(`,UX? *jF_f/`{[cS3 'KAE'1r,K%5nQC&ngѪg"e]V+9+C2BߵE_Mj`Bz6GJ 6_NͧneWxb;zW^ʹ]XЄDR4VnQxѷ,Q ڱbkT&o/Pn&g+׃ÿlCS۝%J7}@(v1<#,϶iQit7mx#rS*WpvGb+gSB'v_vOͳHKSb*$u}Yc$ pڌg R]p/7 Kl*t6ߏՌ?5 +mL*yi-` .j+'zj!ar`$f-erw >73sj0$` kśQJZiE:v =c +SXZ3}.MQOZtwݻiZׂnTG/0:4O~fl#{(+tW՛\Au$ +:o"3P4 ܨob=(]ٖߘ:$VCt?2 +k7;UYGbWj|/,ſh 0CiO@1DPÄ2 UeCABJxCg|@ХK}X,]h{?ė޸(MZB5뛴pe6?y{{MF`A~{xEz?)+vH+neʑ:{'偹$m85Io?I4#:ؗ &+vz׻ 669"5;ZdRe$|ۊ#is[ +Ql_EwQt&8l-Nh.3V1۸c"ُZZ%裱‚]ֵ豗Oί]Vi*&P 8cMIrlPF9XYC^F?JlV?5"_>0$* q:Vv  [%-YzSO:F)xsPEa7{vZhfz#ſߝyjQP $[m `|Be =bk>*zK;.|O9jN(Xqp)Ϛmq1 \adN*aNxߌNrC\ӻ4lRK9 tw Q Ok%c? @NeBUDp1(RvC;_VpwKb7ڤSDbZez6N'f4~F_ftӜ0%%@F!y.JLɣΧ%~z시3FwwtƏj^gR'[DZi{^?ps,4`ڄ֛8(%qh2zR5ѡ8_՞aH}ub<#fR("1QZwXL̘<%oK +f@ KIk͌X]~ 1a¯B6$΂ {eET I_}D ̵L3[`_b_RdJ =EAdv܏x&zk{ΰi4.F$֮U@}54ί!y#,S})fMONZ +VF:$^qxzEi# L:0/Qt."!f氛!%h;ױfV r҅h/QH2Ù/5,nW<_ɉdkV]e0WJ|10фS[W_=꽹 ЮSb7_Ҫ4Q)UmȼA8j4GN3xĿZ /wA*G /KPnn1&g.q*$0ݾceí:^ {&V3B0qV܂'WTpl f5^ac߸>%WZR1)%I"Me}Bɥ~!?K@PAky VF0r:;A + &UrٵrI؃@9))IQGVs3e}p;s|sLwT1Ǝ3Ӂ eg!AqK(cT$јK(-<)#*ޞrwh{BTGĽ)]V7V5F Q_`·z`D <%'`茶~:yߊ|Z^N/vگY02zev(ۼrF gWS/ʨZxQ-O) d}A*iKǜ?js*>xXf{eu|pN"&yՌZ:[' ѠGf낎_|*Q )&1/ Klj~I JS4x]uhj9:okW>|])(OvlN98RYc 5 )f{Aȶw(x`RJ+ &)`~o]hfή:8NuryQbkUL&D{x\-)#^֑gxAڱŠJZĕwkǐ:rO6"ns'ajq_3r7=C[g^!`AQsYvR{NT琼Q3.[2 ͅ?\Hu5Թn#@keAREeeΦfR2dW\xyT>v=)I:.mxl,u:k1<ȤW \6K^XWi<.'>Hւx԰렼?MWQVX{^gr3Vg(즈5lq +j%` 9rP#ZVI– d ?QO!j#/ª^tQᜆAV 0 w(X6ӈ\{ܭ'\HTYVۓ޷P."!5sm{0(;Z2fR-I\'2V&Dē^b3sW(9TakKŦh݈ oZI4xTn#rNG'swT`5!؝NA˺3dv3fdTdZ m{įCr.%Y5R"=^{ ׈_m~.pw s?ܵ$: _mc7.Syz;kq\̂q\K|n'fڮIp:R~nLY̻`F[NqTs1smӖD}Edw9Y֫Y\ [EQckACtg?%S`CYlo V$͖&n4 +<+IL;1E> +stream +xڍP.) +P,P; \(.šhqtw2|gI(HTM  *//`bbe`bbAPڀRh-v<u21 Plq09x9y,LLxb@gKS<@lrDC,-y~PP9pۂ,Mvy dhPXn +020mtK@rp~ PڂjfaBlu:K㳋)*-P4Ӏ/߁,pm!@;7K;s (!uv 6g3hlG@2_98XB 6{dLE ;#,@&p.v#3K;Sm:A,@bG>3_92_92¸3M*ۀ_ /\IB9YKq|._4qrpxk<- +2A]~v]%LB=ƇxtB?g 2܈QMO[-Xc0TX?ت%sc'3'1N>lȫ=,CU֖8-nM%U&.WE@2-,VVtgˤ +W//=s::D(+"^.{eߞ03~3IuwݸtЗ{ٲXNJ H2:C?E1/m_}6)R*=:naEu. =t8K(BKjLus ,=hITaf}Pamkmz͍`=.(aED<&~ޜF=]M0e[/2wn994W$$OO`7"yk~#/~ijHOYH8*FSˣ81eZ>-%p!uqݯG]5Ny+Nf4QEDGnm]J&-NksT$ |ƀJď^!Sfsݜ!j? ٞz'aH3!:^Ӓ{:r09U$P5r͑u<*: 8&}6f(yzn`vrkHeNK+ p6%WJQ +fC=$apmk-@j3SӥH5}MH|xMrr1y6oqޛF,Һy^6Oyzͥ_h?`̱!}<&I >0kn;&n\0<%Lޤ~k n&Im\c]VHlĢZhRY!rS]]ZܛWk؋[ujY߆*.) !HctveVF!>mI' i*x*CyhJa %pCrRMB7w򇹬t4}^ %o28muX@)^9Yd 5pZ_,2rty0 x9pY:.Q5gK<,ZLY[;j*/mK|&|vJ&|*H`wķJ](xu( 7hRB* 5>M^L菤XSfȚpEEN7L+W֌1/L~C_)1>ber!p=Xu U"ztK <;#,XIdP + Y=qjG:sZufbE~bڜwێnMG,уs#_fI%.6=t/9i=}g| T>U(sMߊQqN(Lf !$!uNٌ!S*=_݄PsUNkpRhLJ~ d\؏41QŹ%划pGޅ UgeG|*1֧EJC?4^V)}$ 2Ƙ8|Qc=SZbq2 +OEj豬Z37Ze+lVV ?wLwF#WΈ—GtE@GN+NCАcl.vL;xɶ&c: kmoE% ^*LdVEyd_s`v ] muX0ѩyzT/ v 7|N*wZZVɔd4GN[ҭrPzR/NoQ6(͗e|ٕ= &UA6LTEh6.4=B?1u%1R0koWXˠk*ۖ6L֤<>c^rB?zG$ J-P[W6[pOG_ 9v|bD8S +L ;ܔQ[n@#SYu4gcb 4-~d|F'ZaK}(:0Ю +l`"x4>SQf6+:xY8sf?6$EI/?s|rV1fe|]<ߝo*ӈj($]΢-=QkuX[󨤸 @.zQ|wiXOH.E;pJ7^|v@,UJ'Vec};K\@鑬=koCh!Qy Iy`Qhʖ8u|L*")2ޢJ oշO^i?7>g/<:6 :1%flJw~P)M9[Г42s4S2PgŮO8<E$+}r kzĂLʼ]&nag(r$bh鬫1yuN +B]:2G~c|8m`}Ǹ?Nu~(K+2pQ'tC!;iILF S|E҄-1\/?f{:sD 487=͉];wa[*2z{!Z)iٜtFC5Q$ʏwŠT_̪) cbKRd,IP4sVR~'3DdC1>Z۵G;:@د +&,3-W69gE# DE6pW>O%I/b_LV1 NA~D$zH[_vIPfG 5,$A\w>us][=(P|%V50Lq|Ix.ic]h,dL{6ʫn6XiuOvRwqI\qhe!2F_⴨U\OVc?O2,ZGn?\`3nƕtc;0d&R(˧9pq e \ѡ󡀤Dm0n˦)+$&װkGPOx +1BY2hORzH8^tqSb|># 'yy1eW%'caS/7`Rp<;gq@CcqY[!ħe6ânf"H.}΅ɩ !*\_ Ix~ytn\8%T.k)q8s|Cz~bS" Zҏp)6rJ{;Pk/[m0T5k-C9JdqK0@bkL4n乛XB [1aOj,iu^K 8N !cqj}ڏ )+x|vA;Kp"5nxw[d=˞hx Yoj ܶwS$pE?OsFn>v7I9i1FU&iV 0XI,%5{PR-"W[4/f El.U;<: %WcF!Z~Zp$J;Ae7ThIU&r2ݽҞnrKtdWv7!Pqry >ij}&MIM{]cAwaUē6 .'4d*u?MIUWG>A橸l( |_EK7XC˥ec){q! ]kfd[\T5} iRK-3G@5SUP5ME@©S6EWr]ZMYe#\8LssMKA$6_msj.ŎAje~b)y4Cڒ%yr!Ap/RхXgUxsq?#! RoͨSL-}B97PcPK\ؿ2lxZ'QVeJ;$њc/3/- j}aUinQX؃-NZ<؝r~'*+6SݿbeNj5(_#V &Bf1"!_8;jy2[\``0-k!wZWխNW~0>:[7 'twjAcn ADZR '  }<ʥlLż}CȤbp} GQYփT//,rW՞Qa'~,E󃯢v@.w2q#G ?4ș e|8;cɧ1c:ֹ~B*W$ޥo_vIwnHIF{%oIP{TGv)ѹ+%WKN<(Z=+[Y;=5W5RQ79·mW%Y<YK\ycL*glL1I9R?q{=RPqC74f%J~1ަnΟkΡW'w$,7OJ3g%vPX6;)hqC1*xo u~UIriCysёma^z+|-f7 +js`]ԏmwF":ESl=("k:Qw,:_^Ӿu'gz=fQ0-'f]6ZmP_^PWf󖠙Cӈ:N.Ֆ;|o D t3!4lT7M*¡NܺSXEv429-XySbWm>xǛs^aKI;乩bW: +¬WJR[q)H +FԅdjYtG1ӹaBWC%Y.iZsMrRXILKC\gl6_[>J sKpj.yc=D\I9Y;P~;wQ8{xG}ߍ`?U%6a$)ף"2t-FЦdm˜RNZAXw!'.JV(Q_[HF@KQ0\bPgt75+p:IjaeoU9.NT Z $#Q=hOEbKg*Gu]沈 3 -3jCN.$3rer,fJkB8៳İn)L'cA{wS7ev]1Po)hҵP?zF 7C-mGTrc* Q!Z)(lˁ\20G0RhyDZxH# +WdOvp$>kK N**f)kR)^3f5$ČAXo݆RC3wu,R50z/D pS%?!~,腜k^4zk"ѓVXY =~|J>PH4α/;e/(%/$!==.b([U]m54FL`e0TtcP5bMQ#3d )U15n^ιD[`p0ڹ{Y_dE%DicKp8-<~ RЇ쓒~' \{:HhŌy!v*ֿWjZtSCE8 #%( ȹ@x[{!X "U@8 ML<>?7G|2Œ>M+hnUbTUdjЅc X=Y9s&MЉ޸9EE==8x S|ǚ&;"y-I-&xa7 GBg)zRolKB4H1a}U9`by}#(./.ݨ(Ceܗ]^C]2HTb<3}V8R[yw#{`xBI7;b)}QI{C/nrqƓ)K |O$٨nB9/z7E&ғQ8sv:(IP+ =zڧ&'\0t_ Ò2~Y~ALxgld+?oJM'YֲKծ41Ľ +Vmq\lHCK9ɚĬ +%ln`~q >EQHŸ[AoƬ~9lfބNVFgr)bE6n{w)[T0J$;ҧ(|\Bbui#tG@R 7( +أR#ywVG iȝ,X3 )fQ-bΈb(OE+s?A յXOZӪ)lsf@)00iݕ||: \\tfK'ӑ'U4Ux]' ?=ݓQ 4KFO(QY?(rGaz9#xy?qKd0^4fnA,ѫJN|R'VO@"}5"zcχmŻ\t;M VGϥ^Rc%`6fm4Sj,8cܷ1W\GI~P}+ݶ+4ˆO5tբYDB Ce>>oA:/GtCցQdOY$w2q K3 Sѽ]7/ӷ䢬"X]jb3MY.z_9'd~?8m)oxɏS@( + mMU&pw4Gl\ XJO-=R%Sټ[3%0TX YM*lOdwSKnU eŏ:V>{> t(8A("kX+|5߰c/bHTV4=M l8]x HD#u5ǟ8hC9H B!'W'0:'6{3׹\pփB LùH]OgɆb:@q%ݠ7me/[xwS_g,}uˇ }KjhywE'Np+qQ # 6*t*~)@ep%i6'ۭ(go.o.'0(g\{6l8tI|=U|Buv7D['EY\W-9!='[I;[ئD׍<'(4<ֳswxPWN"-+hq HOh2%R7 +0ks49vWԉb3RRM~Dpc,fT&ӟ'=!liO@+=N%ւD o-}& tG{vhr(Kc.q`Ֆ$%jy_E[h3z$us!n>prU7=h݋p~`!0OS^cd K4Z k >e_vr&#cDf'[G8x5;ǔK +ؿ2ݍYSL<`E1cl 8]PIč|Ͼt8ޞF\CJmE$5[} Ɍ4̿:9ԭs]Vx#VauAyiX7_Dgg·g%2BD/)$,`Z%8%ra%73&2ʹiXE< Jw.l(JUPMxK3?F"aIdش3YZEZ1+%}ߧ=>A90עNlQFUpKaigʶ*|5:Q;2[uEh+|} +1Bi1n@Eß:dl0- v*=RB8$θ&qFc,T,W\&ly,?Ed1/ZSZ6c"?;~y lDx %k^mZ~Eb(F:C#u}S)/"T ?4I=.iʇ|ޕb8T*bX7qڵ[B 4ݯ_Hgk] AN/z󧔸Gq3< 'XEvU +*=u/X/hѾŦypA~|󗇉q^Nl[5ī +1%" WZL褙Z_8(yhce4?\lQT#,=\ъCj+hYIW曋il6OsF]oފw7)n޺: C|~F|@oO@"kmTu[^cس6ݛ?ǩ{q92qx̱PKVHKGikщ._z^ x ; zuU5G7btxV륞gJ%︲$ AߘԬ&īƣ"9a=\cZ]gN(mhhI|+~c@(;ngJ +endstream +endobj +794 0 obj +<< +/Length 9053 +/Length1 1708 +/Length2 7932 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍP-Lqh(R;AC$8nBqJq-RHq--Nyo2vkdBO.eC0vn.a!7^cݠxȸ-apLwT/An^700K/G0@x2o7;{_&kfp3 P-AmL00''3f'tP2@'5Lz6i5 mnxu +@Y6;ݟѿ9[Z[C],`;PWy`_ (oa;޺%@^J` g'? u+ 62gg ?Y75ܽ9l keE݅STaa>.!~~>nU@sul4@/}&7791wss 0sJiHIo4 #`pss 7a'"2f+Az 5y~iW#yw距\0lB>V8;תψsv\^@ Z 0Puucn[Oֿʁ!6F`f W|Ϫ ` sB05iÛ7yyปrs8,YYZ' +լqƒ?rl +.pN_/N/\9_W_0<O<p\w-x,hꇂ,d[ ?p5fX{jkr֘ kPжj)rOϨ+Q }|07*hY +6$e~,W^&]9AKiy05#.; nL =j 0Q٘1Y6Lwf]tHh (I#Jv!2[ g(!rn!^3SN_:IrOe8S4I9/ |2e E KHK? +?$7ة=V9^^:0_ֹ"iNgNA8 QP:T %*_c^m\Yf%r󘦊Q Mh(!8?c8Pa@ >n6q;$ J0hMlR⻘c(A:͙sr5>t(I +͏l!da +INb8QXpX` G?qkkv_%Xq)u[1=OphKݖ6 :]ʓ 0'(}ig3|0@.9fvݨ?"v-/ņ #!"PEc<_̷~(]~KftƳ'Ɨ"׃\̶]~JqÄx*U|Db cY7̂9m1A_ +^5G(]P|#h|1c}T,/CwNuORΚ{[-ϗKNÛ + gF + 4TxyZWAS}1&I2v}`]]QSjeɥgO!dHYQ?!jsϵ:.ga\C)[VphO.9 ̭o>:iYez-1q +JΰO|P6/AJ!ih\bt%__umw{S 9=Ƌ#jPLv![$;s im #AKVI]?vHKcnE}y=Nv 㻞Nr'x8q 1_8Uݒ` }<[>m<]@|X4ݪ195un;󇢼G#1wuh\zwg9c5e0Bo5L!!aNj Ev{Ж̌r!Jp3sL}QTs245_rjC֗ yT)r qӵ HI{sD{0[E`VLXhy R cRX[fJ߁m,Te,>n +(f$I ?$Z׸3c%9; +ܾKc4MJ;ȺO+R)-]0PGͨ]1NtT2L# X_l[܁%JY4ށ6v0r>GO¡?tKϯH['+6Ay`3}ԵdNf44pck#!:2K}(%Jt~W*} /V 6WVճOzA*FHA`YI;a2*7vL@P ߳tBH\L8=<x$[H+c4ϠE+!'}ʞvb]rX9f#_v^Q A9 B(&?g>ޤ(G(V+pvPQN!.WxOBgYC:EeޠyYTqBgrI..U,5KnS6`BI$[*[mY,T(m?%1X&9R~`"dS̲d܍`t:"E|p1nF-'3aQetɎCq0TfnK7~iPBl'tw]5/o'bg4zPYB%Tq,v.Rll]b~<|x23OӪ)p8v8K[ +`Z9+ш'do.'/" 5iAGR%;Tzg/鎄 +Z0_J*_zT^Mu=-Cݵvhzh„$NfP(޸'~g,YgץCyh~㑔Rc3SkH*liQ srnyFi 2I.,nnQcPrNV܀s*xHrD@;'}Zpډx&E*G2mV_ mvR2`&V h.|0L[7Ǣf0Q$2ZK"଒24 ._vPMW?.XcW6ft r1@,lrXP!Wi=>@EĂ~Uأv+0e+!8 N޼W+(ŵnxYՖ+' {6o|z^y-dqlٓr.|蜜LU"Y6T~AO<>"݅Y&Ys33 +jQ +d Ad)N4Cr/Lg.jɚQ^cF;W@G(L 'D3)sYK~j3* /%4mT9\ e3- +w3na_ԕ)b5Պ=%<#k#k͌k[N;C1@ϢHCS+"cv%eͥ]<ngux*cŒ\|zcNW\3r]XU.˵߃jRfyW QZ穣Hmk},_Uzp֊IWS 9yJP>{B ֦8p7+V |=C 'H0ɗN).IyOoB%q/$_#AApWQ{t"JɝvNvjZG:!8iu9ķPX*kNrMULCwC /LWiF"=:3e7y]*TUe&GbXI2x|m:jڧ8O>H6C˸x<&l1x`?5QjkY&y`|EXQs*H䲾-ɘw)F Z~e? MeNesOz8fK>lYyH[uJ<+d h0䷄%a) ں؎<2E+ăo + Cj(rpEuKjU 69l^'Ɏ&`6Br5Gj61}'1-9#H~#,! }ejvqO q!8ɤɔx- /!uZ=K~3ڷqw&"m^{".iY{!\xo1IAq"؟]PhC+150;Y +:itQ'· +]щiȸ?`c95/% Uv` !3&d-Vk='zC\|NJa}b ;Q3hkH1WT^om=b}#q0g {mv}#xl$M՗Cb_=6^Yʅ5C={ǣ丢ixƇi6&\jlD\hl832{Ak{C%.I˥J2iw2HկU|Ҟ{jBF4+{G1e|R6 +Kud~"8}O<~_Q1޷E5= "F*9.WzGb BgMڌKF!?BEޟ\=mofާ0d6ǷTjvx}CC?O\mӾM;Wʶ:iP1Cލrq+uR}$* d753Ӿ쥧 gtZZXNK!Lb]0?i)9eYKvvT s$y". P1Q{uvI$ƶS%0?eza=PxLwgY|;rS2-N~,>?[9OS* nϏO1$ɬt&RZN̑\2rԫq`lZzpM>k6Z(1ΉI8k;\zf\7oPuWlTS}X!gVp!Ma͉/]5j-#%4^?X|S6,vMA3v|C|@LsŒZ!,tj׃z&VzJDQfo&1 +7ˁ7В݉Lgի/ũ&tT mԄ9jrQlųD =ڭ~W[_H}lU+3VxɿN_ֽ[ 2PNh 7="1y8g뫹4SO2۞d#,,lcɏ[2Bb;~~~gsh#81-'%'ٷ__1\÷&eTQ[tψRGdH'#IcG2xusZ"b>x0iXms/2|m3S'X Ԝ柋߭e<y晰d acy;2U)>T2] z~󶙗m>c+?6/:0U;'g4P|Lymu- L_\D5D'|lPrLu_gv>\wg4:FE5߽LEj-$UEm#\N;h#sf2f#-iz:Spt={ FdQ=čJll`VVBt,~ +q]n>h}?ucR)4gpl -243kO4$T mƘoWl=%OpfNMJm!G=R1Ӹ)T.ʈEYLOslKj,^l͡ v("] .\N(֌|ق.^Us4syYTyz֘`^)X&F'n> +stream +xڍP +#www N= ]Cpww'h.3gfUVWug۔j ){;FV&>8+ RRlio/q']&tyTȺX\||,,6;$n&R=4&V^^n? 'K@b}hٛX\<'3;֙\nbP9@?Hrc[X:Gfot6& ;wW;S==@<@dc0pyOg`fi(I3x0vmn@KR*;ſ:8Y:839[A0}3ٹ8Q=_k;{w;£DL]5,]A%2z#38Yx9X GĂ?Yz;;މ|-@?@7o"xVV dniOw1?},=z, +`xc)3hjZ11{7+ ~8w*-_?ڙ_A7L4> 'E}oIR66ec}]]D}M?k2tڏ.E3R SeKL=Htgb~8T@=tlM$LMXI6N. >}kcwzO[FCso oswd (`ZIb|N`D]p¦j(>uKT%Rܲ]5%؄';.-C{׸;1aɊidrqը[#Ckh}D_d)B\$%8`5򐟳~{Kc2/c475i%SO A)#b3L`!^XU6(%!eG,t<1n+"LyJ?n!yisЀ`7-k/b!Zg(ʒ H@{s"< a,,:Ɔ$L}/(_nr6{4DM/֐i"@$<*୦n{|1J[1Uj]wճ݅dY}N 9~RL4[ib&6-T4%M0KLX5Y~Z ~u$͝MM} 8_6|ۊV'%kDY,mi+/ ,aNAP&TWJg=͋\1CDv&sRNTkAvŁ#ҭ͍KqD ޮ3C I{u`y[DEi ږ^5k=V3;,/5O_ ׮5I^A!1:C?qwnTȤӜ(Y8țsM `/5[rs^[}'y{MhnigmiQc6qL_c0ͻ3f`*8!9JX㮲)$dfagW<?.eUd2 eqHP7J^omHkS.Klr!}Asjܺ`joXZ--Yt.#-#ǟφsmF C>'wUn`oͰ  BMbb\Uj>C($~$hKzt #0z"ojIdWLRĔ dNG_w;Ulx^0Կ8b$yՋe< e;[ƍ8=n +$jPQ?FHl3_ؗGbKg" nK  wOݸ!!P߼UZz iH&Pqbf|.'ph _j gHGCrzBRw pCx񞢹VϷa]b3J3m#:.9r5֜hzw"3ZB*PX5 +%0M)>=N%R-eu RH2qA?Y!80_u yPd:fN,-z%K°"$e:ب*:8=pl2{׊Ez;qH?3=\Y.{!C[5Ig>~^k[IۂxSQE UEr R:.U gc=mvn҅reJFDCP,hT*&obqI]Ddz`(ګ -J,)E?.ε|>|13ҐQYK4gSWĨ ȟ :&Da~T48t^hi%Ms75p%"k)7X0Uzsty(ѾKx5T}t4|d28eZnڈxI?.rs-┻3_`[34{>pJuk  W}w"V ]}2º C|:d +VWiVtJLf'˵>%Ț3 e>$6hihT&n!x_& Qx{+b=fj!PgF1 Gâ\CwG2k#jm8OE`稡3E4<|U WJߏ*_: +5ĀHX[1D{]ܝ=?NŤOi@' %dd}u$G}`@=4QA̭X*K4iu/,l⃠APp0&gĕNum{:0H#oF2a!5S2|۞xY^*Nf"H-r?ah!5|7VA1E0ST9~r>h_û&DࠫY`0W&7Rb>qhDjWLI8OHrZ*lO-9 mV7&3ܒ6|OIr su {Ub4O5bb)#pnfL귷L~:~ČSIHkc~ AFPA+bSu[}3L@ c[WQXc1o E]~]S|ٸS:l݃ eZƫEϷO43[y|D"sz\]ll2̗Mzh\U)@e?:n*}iwx`uhƘ.p +?&<6Of-_<J4O1qU$+칾? & k}T7 R;bOE|  vg $_V <̓/DN&u3~|?Mek53(GsW`ye jО/3۟yG0z"UJ[OcWA$uC +Cg:S-mhʱ"0>1Ǟ3X&Ne)D)yD{5fċa}W7ձ˟a,mn.a9gPxjS,pXjv&5nz-eU.aJ(/+nα$R:[I[ІN".im@SNEh:HoBϧiV9 >M*P'3ҙ\E JL7U7gr93>: =SSm`ےtw@ ;9-uGC#*Jh\7%,&֟u?r?bXiHgt?`B{QO7؝*r!bA3{$5)]N"\Sfz+hIRo)[Q}]gBG3cZI %#ܹhjv1ZBmfqIn+Z7!&rGm5TXQs Mu~8Uӱ#YClD4f71TJf%NgP v˾ 'EG4iDLƚ~NP*^uw֠1(`px?g;@3dr{kC'sQnU\PZMe=p =nYm7h~7K-v!3BobBlDȦR hvkYf5k"㶶xtaU{$1))Wo7H"a\-I3-$MXUD$d Q#ys$J/~yɭ9L~kF2r\IqXJ~Eף;GZ_hCeұXځiF>uZA=.}E\Σ :RQ~{rPឯ]},͹0ΤVp? Nd;4nB4r"K5$H-i_nsӄڬj&|,S0)Ť^dQml۵nzR_RoD}.J94/@faPz0t\xHs6]xYtܐve&cءؑǼN3OE**7ۡDhsǬ +E` VD`z$\(w>(/vZߦfD4)|ds`@>FSikvV N)E92SbYe8#ǩIЇ[.. 4Z z. tu]mI$X%yһp/BYni/}ƾ|D(7ji8? z`"vmI @Qit;!K +|IeNw\jzrzPmt&ҫ5#\s=Xf6f\A@>`~!K^Aym5Rwo҃(Ιض2)c@?hWeS:c]0@P¨hcGaH~{>OG{;Jhku~7 /3鯇6, ֱf}SlA%M=// c+PY%e]sdlP0Ӂ^1}hecG^\㕱4HNYt #fH=V$\yu@ y!0=97M獀o-c׵'er<ݥNJ]R7nB:A<O@iV~ً;#θ'̒m+ʥ_Cx~&RfU_/2+gWi^W4%bfM +/jc}/ ƕfKҙqv>7Yr*F}b oVbӆ="/S3uu9+FS~~zP:0 {*g^A/0 4@ 1 fO0P= 6MrTðFڳM<5)|A+U<=$y ]sԱ \No + %FEd8p6:h=75ٮ:Pж_Squx@Y*T=f^ѡ7PKX: JZ"ъthRxpCf r~hx[mөN*bYXПtaBsIzM90uLn7Υ3Su\jIKC}Ԭa_{8ID,Ne'Q &fClEl4&*}l eaxBYRN1F}y0GQذLj5 5B$7rZ7md=^wȒX۹Fe5e(f Cm ]5g|CWEa완I6c.?]"qiپUY ^(\3,T_&cݮUpHsm /AneqoBcڼ*1:*r Jk< :+"4/_%7VskjUh,"1즴ӏk)ϵfm b#[pcҁP(鈩/rf=#J#j3ł%&6>wqrvdO 1%Ѡ~mA~ޯF|NZ3v_TeHO}ߏ|e܀\K,Oݖd SEJڒ.g+/;vUd#uPA@ +9N_uɚ}zILzV4`L Stf%]]U2'A*)bQ)?QS'% "8L,<#Dx;Vev:mhi)Y:b&-ȼK.(.7'  +=ۉzZRtX,.^-C|,i𚩘Xu MdHyf@ExDKr$MҲM ̊uk,Ұx\;6X'_]}9fPa< CIH7 +,fdg˸Z}N%m>/{n|Ch3^`yRQ"٨,vDؤ9\s> wy1Ep#s3~˘W&j e_V+^%g²`*jwiJ#B+0[c7n_-l%4%St+4sj< S;8 /#:D_V8gA̰9uiˬxnuBL`xVk7BoYd\ ;`Tr/sOM4 b3y0O[~\#A|3AePhwY"Տ N?%.γ8 w?PuyxMU:\mzlC (M) +^ o.jDȤ>\6+ĆPe'ک.dJӲ +Io8a24p,ƽ.a.Bu9'Kv>|&YjfksP$^g_/S%0m_wxQ3)GH٬۷zP^aCÃhj.Ynt$`v9ԗ<1/5WXDWZq!.ubHs6U Kjs`}YfjsoY#+v#VDi dlpDžǿ]],ɳ>/2S7X{c|.hAeӹRbњGk5s©Sge4inWJCx' s)C&ۻBaKg +zlP^SW5ѠCfƶg6\عM!Lb۳|bHs/eTᜯ`V))F#?P kEu{V}kjٖ@>}.|svr'2<#vcSVCu WlK΂M2;9<}AXPrH`w#F.' Gn[68ڤh_#+9-ϱ”T? ,~5/s e'jr)/vWDBRiYUdŢ;1uAZ]zR[Q u #uNRdO3+2ƻn^q6:C}e}xu9$A my"Jg+5B@}7~ҡ1y˒뎄/VGӉ.4M3&y)@\c#?җx.%67ű&Uٚ*K2E@0^zi]PiUC#j am8@oNm_ۋ!dۆa"`6jK>An$&JGm6FFunTKO.;Mu*MNVi:/`i*fB;4gl+dš5L肸%6۶o=CnƘLލMb$ +߁oq3~Vnҏy{5%NgU;4tQϨ$Z8|!yە ^a:Ӑ> Nu>E'6>J{P52@}0Ǥ@a̢F,X%"ۃ=\lu;0,'Mp,Ho}}AZAUp֖ǟfk_ Ki7?BL|XPI;>P[jSVgl&rh㔍,a#1"v0Z0dU)طrx؊viޏUr$~#U-8S`<3.ߚΊbJf,x ]2q}}쇻J n P?+/ĆPW'{[}Z}zxN'|agpMK>/K/)j0U`F?V{<%TMb>eZ.?T ze)jo4}<8/A'lqյ0:rA}ZvU 1d]b=8s-)܏R@=RsZҀ ޡ4;CfSL3=*9Q*m ix"xxt :jB;0q۟|UK] ΚlG1@&RϷ܍WIGz$|+M=&If؉vs{.KLmyrb|މ7ӛGa=bi'myLmZfAf$}GޣW?NUهc~ª'o=}>N"'CM@[W©l89o J}nHg IvQ(TJp"ʒq]()M5:vkC1k2+nӌ 9A \u?ksGmmX_ͺcg#kt>gMyVKQׂ '!D3ѐTfUUMWPlU6gc!iIF.}e?~ӱ`TX|d\40]W1,*/\T,^ izGO^txğY]K9z݇?n|+ꣃ82 978݅2CG:K韣ܶK&uI' ࡒp +T1&Hbn2SSfS/Pr:Lܘ j,>} 'eJՆx_8Qx+ĈކJ>պF3F2QX1${rH.{/PՄ_4v6`[F?Ku7_2|js +}hAiBǰtZ*45n_h:%Md&nM5]ɖat+W_aV. (L~XA1vzl GRbɪ=SH2ɜn~uOÏLʾrD% d`u1[ 7ӥ?;Kӎ:d&"9xCi u05ҮhB(bE5jlF:_) +j&ݻ<[C*Y%$sBJƨymƘmH-*{ђ`'bY3;i[e #i?s5 }|sƾOyk;j."8 +vc)SO ckM;Rڔ!@l93TU"K15ii[! * |c) ֋} M琓1nبcen}ۃ(S8:+whl)"XV>ą@sZxw7ǃ8^]sQީ8. PjI+> +stream +xڍwuT- ˆ 9C7Ҍ4H2 CHtJ(%!)HwR +?ޚf>}ν޽?k } + +F"@A@顢@@@$ DaCáT9(!/ + +Acr4A1)Aq)_@$J + qHԅC 䉂٣1+JJn(<`!m}Y#aPFpأNR Se'pzP( jEy +``sECPP&YC.&W Wh;A5< HqvCnX[#:A0 AB.HL? C0ߛ + ]Q0' ŒA lOBh_S֘Hw?- ac! +USI3amkO'4 `B1?.7(rz߈XP`Fv0?1i1F(L#BAO p/a7ˊH7PH +EEwVsE$9? +ZHlX@T%m-/a ! Oap?1e1.yxG?̭oM xEa;PP$ Gy@mt`hk?u`VP % ?51o̥.A1*k/+ + (ēL$ +x[~ƴ0 }H~ %B +^b~Bq?;vE0-. o(jM<=rj8/S`r!:~yzњ +ۦn)KTBՎt>)Rtӕ V|>CT/v]4]64M-6vt_jzOGӶܫ)9+BqD)2ABB'Q!D\atIX~m~!ѕB>lr +iڎlV- !(Z +e4WiC?ˀNBVe'T,'!hIm+jAMiG$aeF.@M75{+*' +/x(I|2zO.b㖴|1+;VۇC-vvXH<S|5 } hNCo9}ltg?_I4u^}pR C賜xubpꉈw'_7hM ٪|\%{7!b#.5W^ijٶ2 +zV"ws x,@͂sIՎi@N3R{)_h`<7'o܀_ + UTذ]i|3Q|T;^wc%>r {'^6TAT*7DS]O}8ʼn 4}{pQ)oUvmKqSg_`3DFZ#%d>5*]G:T`٧3ʃj(Y ~_$>ʅr%.w;V!4@S3r2ɢ_bh].S2kOi:T"6=BVَս~Yƛoޫ'zWʖǷ4NCceКRMGS1ߍx Z#xoD?[[5x ?xcݫf2^24/oХP_:,r)x󾸟>B4;I>d;+*AN赱ܡ z;ԡnFyWϮZ')]_#q7zxA4< 33~Pt똾v dB, } H}j;-s>zH{i3^>5*ѯeD9Kjy#U˂>.TW*9 ΨE6Slۏ"ΎXQ!: n.`^%TMoOrJ8|s~-ń v@vvFj=lK486bX{wN)<ȨW늍J4EkhsFʠ}ye1۩LUe8z5>R||qN 0$]ip?d+uɂ4!08a[MJ[|~]e>Ǫ!pdoi#^2G:UxwMoh:t#'q\7&/ G :+ȍI"҄g{6Fs3%bg%gYd|t^,AAn`FIB*`F DB4;)RWeKINMK㍛ fj;pTc%%d n*`{ f9T/?('7`q%}vT/Eqp>DO0%w4s>t:[>2lح_ܫgɟ)fx;ZC+FumCGiFbBTbRXMp)wBQ Z :$.[٨}_ rp^ޕ=kmR)p@P݌n7ZZ,i26.KikGж +Iwoݻ"`hJ!04q(#.~=>ౄL-Od<5tga^qGb2kh]uumG3&UxT,{,z*^v3K05wdu^sN[IֹO|EZΛҸჽ[JN}fU9^Nffb 2d@bˉuYxZzl?6>ߨ/kŧX3toXjoc޽oi8܈wyYs̻1:w[Rܔ2J9Xo23#Ȩv:0m 4]~:GrdJwN({;:tiWXBWK='-bs +.mhN)PEONhF*_<4#Q~=+;j) ej*/i/hy[sb3#{5 +vOj`0p盆2 *r"zCr([Lw͋g(l U'P4LaVNMAbl^UP @%2tM "ak=X`F>a2Xj_M}PxЫWnX6]`lq-Ǎ}35[^4і#'T0x\KyHU^C>nx=p\jQ +7=u8Cƕ##N'}E/G[1+KbLkiA +C#w;r^)yۃnsꔫ߳8P凐I8"o=v#'yTznmFh>uA6kzᨆzO (~;ZjiL);6~"<Cy}Lb/N}p j6R-6rrhEf2VLܸL:^vbn=a,{j +wU;(v)CכVln`z(J/I5Zv"(A̟@a +>u>l/6g:=(۹Ж2UU_GSnDZ| +ʵ^JvT5l)YuX`{L?hXqT_WZmj㢥N_e/g4-Ը fVM^ǒ{_+|nR1o?"i-,\2:eHI+m+o/D?o%ԭ$f̫NN<8Rz]_'-Ka1<[GسF<ه0E_ <MUqxfr4)J 1?<H1f凑tX4NO< +RsN*v4/[0#99tZw_WorPaoh%*ѹbX oE#aZyҲd⭕pXarNB˼do- ڇwmr\ATo{BO| 8[CC!<+8PŜmUVzƮwB$UJwXv霿@dMl!x珘JWujjtBOyFd iJo={un5s/bMkܨqgk .Xx1&jIy:o(l;M+8Él{U]J2Kq.QGw>޴zA3(}7+>ݐ'ӃCeKrax^Bې z  r"-<.Ef Y{sJ]ӡ8DJLk/37UND< 5> +ߐpq7і=6423~xӛK,K|m1ҵt0"P~pZb'tM#ܽFSUm%V>1ԎW<~n}RIMf|aڝaN1>U/uWljGrɉ;Z}Sz_Xr]Dyʹ*oISz2B:T&` +io*$"KdPtq&ڞ%-D9G)/ZXq]^,(T}:N$<$3"qSkFjcԧXtl{K(UaW2FF G(|(Y\xBb]{WyV7{EAݮ"DЇH!Ն}_=nNa\7,>`7_M=Kޱ")[/5[?!*jrSF$f#Ɣ FLx}vza3nצY#K~v?b޺x]ځ;gcK 8!rJ5Osڸ_4VG6uN),}ly2A4w!:,? |C$'9G⬃<{W֎ԒTc샕<$ݼw#ERN'8ylEfQngٞeG%nNDËQr$2'N7p`&a5gveIIsFf`_ ekM@?ifeU9.e8MF4wnԒzs38EBMU4oGĠ2, F5N/@nܤ<4YUrMru !{;퍪qKsO]WɌ{6FB]Q^ T~:3_vVhM3tW,s{Xr;7$yubMnDQixROVvZ%o' kӹl`{2eUZExtbfLl+KkӀ"[%T\|Uއ CY"IOg)#֖2PSsm=ؗe~<6iL+oeGqFz늇аn NiJ 'Hw 2- %ĖݽF&,'Nr!; D3#pC< +mX=^ /%Y^y~ɬ/:⻙ШVEry.cf㛗#+~idMBC=q vuCiAtڛ^{)~7L \]K~(<2jGxĬYOhgݯyA&b)韞+x|f9oDW΂3IW[KCm#%6AiAx6"OܫyʸgUQsT_6j|6R{cE;ߛHs;pY<M{~Ӂ1xǍOyrVD,Bwo.Մ6|N7T :MEt瓅oNU}K(7ח֩ѥ趈NƓyIfF.F;?n)@bU)jξdrݰtNjβ~W"6l?(@['&x%dyzVQKy-_jw=Q2B[p{F;3>v!^5MuM e![T(wTd27K=|Β6D+$tXښm_,7؅'?RB5RCuγt)=URɊ}6}/{w%)Kki59˝iRMt@ى,@1#w&vfXI ,WJ \eV% X,dN\T$4:=;oEcwMX_'EAd+ߌ +endstream +endobj +797 0 obj +<< +/Length 9649 +/Length1 1730 +/Length2 8572 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍP .LwK#t ] ,tHI !tI YٙY:*5M6 +HH)kjr@ 7;ȅFGvw-G!NBYHݡ2isw2 p q . PoC@lPf(@@nhtRgW;4ߏFK& ? G+ ln rf4whB, w`uwwb7wtcڈ1 dEb;@Bbe +@`K + +fh+TAN+i +9Nv+gsKK` vTeݽYNV  PsOss(ÿY8r +m>i+wkrYѰpvxـ@ P @ޖh8PrC9:CP 5f z}Wqr P1O +`'ϓ1tì N>1by-E5Ey(x|8l\@ W04oH[@y'k@O`j͠3y/oEnV$Ot=ܡ gepq`7Y7J ni=hxH q=*Rbx殮>h@q|9WjcNw J` qE5S>A//p(* ^?Hji/ZZ,A8rX9!Y[pyAh  + Ap BC~DAh" KAh^ 4?pu8&2A o% R8Ԯ&Z̋mkie=*^/ם~6V 9夋UP\YČQWVr\;L߆)[E +Bj3Ɵ{Nmf`Ȑ;ͽS]m@(ơJ!si?֧]soj%=.w#CraTŞ*g$r}!!HRht佖*K>4yos lOzӐtLB* e`v"Ϸդ Q0kZZF5{^IG`⥮"|BBMX_N[ol +)TaԈc{ +ԫʐ/8Rֺ;_dB{ 񙰼n p C9ύ5bn4dDw;e/}<9[-n_"M4ɺ|eMX]?xƋW6a@zV إ6% g{CjN5}@3?ԈEUJHODT3= ҮgnG5؀/s=ߝiXءUxwX鼞Dw>Hb3c  sza48X'}n\RT:RBX 1%+E<;ۦI)}S˴=b̒Y]-)uhonL6L"yXgf>'ܛ 6v]Z>+C* u'峻x6az֐v +uGx4&syP;Qɜ/by~]Y K%~~tIND!̥.͇_gkM .\m718T E82y'37lڢP%WO|8 q=v ݷ1Z&s]fߚoI{I$1#~wa"|P+Bv)hsELw*%x?w+/c{Tc/vK7ԔN%҆o`ω"K p:% bmZzQɘbZqZUG$:!Y4kpNGWoF1}(a5 qИOEl0\|#6(F] +qF8#>m(ֱ2v)k.]:z|`3^<> 0  w(\J ﬦ?1>pA L\dK [ćxSuGVэ"9P2l2 MχKo$#xlX:'gG=ȀeO7yN4-dH &ɟLKGT/yRzQz?petIVWBWȼG/Lkn '38Ӫ.SބŜŖO/KLiϰN;D('ɾK"A6wUτw'ܰXAۡWhKSJ߇Ҝ>2)9ċO e5He}=y[,F[}+LRm<Ѩ $Fex{$?8!6f}+O%qUy~mɼ"zۦWq.\+?Ś?#xhqEכ^gZDZ/̯ V zuƻPDcR`n"[EH.n׶,]m0(>$,u (}7k,k`z[_cdXr-4Ӽ :BnT_ͬOAQ~D/Y`ߟBe,. }zuC{ _zM^^>0D<\ me@DX[ +,{5~Sc55"R&K&hX%J W`.7Ǵ~Xp(e^]9!sZf!Q^L}k!4=e¯r}9Ft]0U%1FوB`)V}dgXzKtw-2Tf"ƶ-+H[u؅>GވWC4qm_sWC^>ЮWfl-dOWOLQin%IGK`u&_u~35ŭa8;NLt$'ƒWqgLga}ggH' 0BIl΄Pg:qAm[ 4@) @*Z* m[E(~zne{CAm`P@r߱%!8vMjvkvc=̄}G/Tq!HjwܡљuW/*˝ +o;h`wtZRfAݜvt1u(n:+ŧP9pAHB\ b0%I"}GYMG\w9|5*l]ӸFJ'KҀv J8"H)M=Kye2$gD8mwid鶕܂o;Џ`5$Y;tS*ؗˏӚ #5MR 2ĚgK8rVL4j7p!aT,`>s<VgH o=[łֲ΍Ь[ }<(?5dg|( &iP&d\LĽѽNx:a,fFcd= GW*;TNṟο‘zG4pou'+ +I0![,Ց3^p+>2̹ԉHq6Ʃ.Rq:o:7̙˱/&]YOލC&QD 2SX:FXVmjx{v_q~t:{OEZ%/[? +%8=%JuƑ(+jٮJٝ>mqe$\F|e ʫw!MnGJV#ꑢIxhw,ߪ=Ag<[\i`H[}_kzn6(#&)X|@03kYɦ64C8NeR~>@6CrQiza)\ MܰX]De GKmr>K}tB][|P@Y\?[\BMy}b@ɕSfoWH^cLqdM,#v3M7~DžSԙ#3\oiI"MLk*N"ɥ:/e +[Մg՝f/骶IǛEeobY61:A\'Ja;o[Rt"BsO()I1>֯A +Vg2p̕~DAG +W^?JM桃 0o{QelDюD (_0$罒E42<@sdQļAף a,!jND9.efSz)V&mt +8^dwlo,: K +x"Oc ީe&^+ Q+ aAD2+=/iL$|+Ļ} ؓsEWȎF]%P1r tyA?eAJƀ/e"2VW9ɱ1ƍbB9,qRM IEK%Af,&d{S=AC6TfID7[Ȍ҄v_lUWS6$~^֪ЕRWG2\n3}{X\]+4/]Lnv-LsTP~ +ac'vPj^|C.IMAIAXM0+z[hm\cdM-Fݱ>T"49,lZ1 \'l [M"$*#x +ި?v+)6.k6Gƒn2p7=oy<@c8qstX|ZfƹiMx2I,u_|"#;vl"c4 rHO!nc JhyB7TL62t$2W5`rFRJ4ʃ!eөZWHml{8){뷅 w<`5-8gcTt]$Hؖ5QG@fe7a%+%=')[U؁mU95CN/̚RG7OnaMW9QvZnu,¬v,ҚMHKuiSi *>DCfߏ؂3})C6ZNR{y!T{ N0=EjI"nO]Bag'8xꑈ8\#/ۗu應3ͺV^E/U*04_~O_dj*&G*mY:C%Nlvx1344SFX +O-10☃$D^3QLh>W3Zhp!!j,ݮvGPYM#Ǭv8N*I]Vs<$:D"AZoh)Am%wty*CNV2-c}}$ SUjvmm›@遍H5o~ (8lVO(z!lh~I7M{6(cw@׷:ۛq +΀>OU vM^.p"x.ެZPw(-{cCHE\m&ΔƤ +`l_˟ ^ӠղD}ڜ9\殐0v=$spj`#w.2*Ad=JKْۗ\usҟL4<%O/L_T5o~=~(^.e HJМ ÖOy*%jXm D"\"L*-Wּ8z⊞UtN7K ޘO&ڝR5;$i vTg˰8T3L\ lymo'OqإKS Bu6NJ`OEWNՊw<U_ɁC%"wisE,W~찏{7KN$eg^)16l]z)j=MK$HhDv<}3llض6]ktp> d InsO0`YV3,g[sޞ/XJ]]c2:㳯*`Nuuȉ`@@6C1B.rbv6JD'N~ZWeaoq2j$G\Px:n)W3IK4ZfQR1P̦̃TM<Q>/IPxFdHX,]{% ȳJ{.T k)xa6E!LA @PjGE8P~Dս@گSY/+K0}9ǻ]iU.*ZvnJ+;]8M펥>~|arVx^^(u(j䝅ݸ䫃t}l`>BDg1LIP[2*T$pJ7sG 1#MHОÜ _ za7CJ1!| +ڕN"0ru@ ң2TS 1۫ؾ;)..K' +'k&S/JOƫևB2=>YEa`^&!xa~ymP8]!>4t5NƦ\n@CT9V1(s?G%)$MMPj碋:'IJ)9_^ F-Npx?ՏSRA>Ea]h+Vi堈2Ui躱|a3GzKi51LB86OQ"> 770OAN27$>w?Lp_"< rA]֌6`ँjEM +11d%N1|edv +&A.uۑyp܎3 b15`r-\p!";޷~ +lj"b Q}4t-@p !K V¢QZKm@q';8/,mr`Y9a}I5={YmPĉ><ll,-W65?΁_QqhFڳe +jg sw֕ 7E~oWpa#{BNUn*M~+Ǽyw4 DĬ ԽAр^fy7?.s­@Ou{#]?0Zf;`dz=J?XSr3%*+2l|z{>mnM|a=/g?jρͤt_\sUcUl!2ffnpĹy#3~f,,;CgC/ݹ֒hI24rD$NU>w|@a8kQ8>ƽ)܁6G3ZwEԬg#хsaJޒbyjgS\Q țM) 'Xӧ |Slf"kM]v+lN (>p5.xr%Ŕ֖̐[HS2\Ee1`3:zyJʬQoO=Jx@jJ$YG OjD‡?m,['v2?* /*RŊ犼~L i[xJs}#>X&zbeZn-A6 +U´t5ʇmyѩi<vΏ¦`,! ] +ȋ{`(mnXWD0Vʍ$)>+%%)J1T"(D>#w9#X @1$KtN׍En.? {bXSk)F҈uّ{ז>~>0ϝ0оIZW %*qtzq5JE6ıtm킔7#_i0~8Ӥ_TZbZ + f+^<Q&om#~֪2zTCN}V>unM`2`E#(ieNU! fy|j< +qyg1% ^C9.C͟ O˥4g6x^ך+ZqTS>gHq}l'aSNLt׎>'=YOFV( +~K !@դyR +endstream +endobj +798 0 obj +<< +/Length 7625 +/Length1 1465 +/Length2 6640 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍTTݷI.A@$f`NA AC@@7ޚ~s>qϾgƤk'g)àH> $@AK_ (_PP@ ،Apov8h7-@QI @HPP/G\hhaPM;8"ѧprbr. 8 +вF:\'ZC0[0HWI~k? F:AdEmM `Fp @ (ځ5M+?_ֶ0WkC@eM~'` h A` we9=5ߟp+C~1}JP; DO ٢oKw[0k{0;)遆@Hr~YU13zE7~PjᅟVDnaߦH53|4A}!ϕ(hdT"`uG"X&f; @bK 4xf9KfSw I^(vz0TS65a˜tG.@5K.갻k &5v УyC.[Z+0 .FfY-]yrV8E06 JHfƠɜ"8{ȬF2 F"sGzalv4ƶ=u*seEIR΄D56M"}pynҔ틹PxkΦքuJqVoZ-46XeYlTKbsj?]P:OphJVRn7%g`W=b^ ^> OneOovyO.7\32t=oGN_FL.j-:(N J̈́; `OG.X,Y=D-H]!P 굫^.Ĺ 30J83y>=\cIfW9'p W͉(= e";Xk )ٽ +-/޷?j^ú5D=!L^{I睿8W-I4!z@M(Mv1`s,2RfD"Rn twKk0H+6%VS5*bwIpW"LJR3> +N1{rXFv>ʘ!{Xn[Amwgh[aKR5ɱqd򱂒z9KsG.ZW#aQufR}VQxDQ!R Yŏkߓ!2]|dyNW$޵_M.~bήډFi˸i>a 2. Ŗ$05[5kg&\o0^fE.鐳v|X%xhkl) +Q/>A>YwC=ǴqEԛ0ň="أz7 {Ј{fٕuJn|l$ K铻1nz:'v1_LRv>\ˮwy7PFpWmZ=ҫ + Rf/b/tFA'Jӊr;gۻ$tvӮ| W "ɘ[<S^p +r08n2w +]F1O0U3Wޫif, y="=Gzϝ6UObȦxqAȊt!/ۼ>WX$JB(6(v}ib8P\9Y`$GU>Q3xzn.сv^Gߡ' Y"ku1 {& +'W_:\".l5ɽǁb48$F?S":">Htg߼_l X5|mʈxV[ک DphU_!;2iH]e ?JN87HTFS ަOr7ˁ.7*_ TZU*ڮx2~Y,zO.m4zX:&7Fx_;U0i2CubGLsԸH5#yna©-{~ 8_(=l4.n5G^XY>>63{bSR*"t\H\;L2Neۘƒ~l,C9 dG)NF>&*l +N\x 3ד߆3EA_gg%ƓxA|~>/6SoO~i1~jrئ~cr/c$1ym.gPمdҡX^:FvDye;lmR P1V"tPq򻝹ᅵ`J݅u2 Fiۜ7r}.{)*E"̯f9,3Gjrګ{G Z޿YˑRSk=>Vh0.y3=SrPWWf!v$V}_ZSϳc,_xS L,{~$\]WX|r)y˝Sy1 ˴ش5{ms>O_N7щZGݥ޲G^3+SLj㑖Т&;?;y$r|-ʰX 7'fuRW_NO)㔂mP8hԄ/MIr.aQ֨uLx:}"[DR=]j .|=>!ۄ0#nGk)ؤo4eEBP~K/G9A)IYaE4|F>Y(郋W&=4zgacgm1k}o;5hZoq8P\'J+JpUgaӟ"QP9ES][Iam*ZHyxzk5Jy 'gA9{b>SЧ$A>UF1l[ +hxOI-H=w R75w;xfzL3u\&!Ivŏ["%]I_gzEVa^SѲ)-hS^LE!>,4*4o\Jxɛr}žɓpnV>~ Klځ>6gЩwybzR*;-YIGu՝7AOqXS1O˻kH Vr(%߅.ΟK:|(kf~&M2Rê+tu٬"(A<O~ AGRC/ Jvc[[8e3V<((m̤ +he +.rz_>eLʥmdATs̮G,n':qnN C|շ*)eZC8nǞ'S6,>X5*v_쩼o5}p: Ji,z.3Uov-QBdMkU[SA%W첃HSi;qGom<=sAqʝ.΁gOys >ޱ%,b/ xVΓnM t&x=D)3^sq.^V3bо/\YOv/E.9/c]ӟTDq1~ 2Lxs= ~+<L~Daۗ~`ӚC/5ٌX&EJdxW=r3 +xLB4 dL{7hQ΢=%FH73үZҕ2稯bN*7%S'ӫl?muln[QwaNHv9>1Fi{zA5lmX *(.tT#,f`hp|D华эAqDIGr4˾qaK ͵,dR:8@zӆ`saYJx?Kcse9~@ZjE2\(ΧoSt= +of&}0(XdaLMc,q qK q5{t Za\M <SlZn-}k1&k峪_,?ՠˉ`2E&Iג8p8 &z0fJHtG6FCpϯ mъ6zsМt^`JnT4oUH&pa-+Ga&˄IN{=Q/g,z%e&ZMD )UrQ=W+nޢXŨ'Kc@Kf6e!SkQ2W]Y ZY%brQmBpYKw]I#e'c( ?҉C7(j|6{O=vشRsnJZlaoR4B3'|Ro9{@ԕ]dٝ3|.)S-7ۛrh#=BՄʂbM?ȱ!ūC|b&GX<Ǘ%It]ioaX_ZF;"9J4NqWO>o"bp'^)0?&ܶ +"6`F˩qxD;uQ༩8*Σ͠P|dh+Z6j;HSsW:9ԣvp̅ur`i_i|iY5=MU3oT8܆Z.ĔʛQ|_ɆM1>g8Pz˴SK5}ZZ?(*[5T1% =V-"TJIaz@_&ljaRGn= ~I +endstream +endobj +799 0 obj +<< +/Length 8638 +/Length1 1497 +/Length2 7631 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍT6 RJ9 -!93t4ҍtt + +H+!H|s[3kk׽tmV0 dՕ ?ć̬rme6#puAQw69(.Nx8(XH@" +D䠞6u +C2"\}Qwk `fED]`P8@h u"`(*&nBzyy@]<w; v.C=a6߄P_xpzȿ[38;XȻ  p9@WY +Wy.wB?Pkk+:8 +j<(o +uF"Pg]C +!\QHoݲ<a{ ;Nwͭ 4-XNI>]fg= )^,T4;shD Z mB~P死$~3bToM%Z\& V +¬{DP%?;T8#o1.F|EA'|"3^D+[iX<9҂^/k[Epwn_qf{=\ZƱ%MDBnje-biϼxxݸ1ArlX_"TE}egf+^*ՈI +{8uZMHID)׆j] qP("xA ~ӺMJḣ܉FF` ҢS]AfF oGkYB? v]ZaVΒkhT[ su„E*^~R;Vxh6bBm`rѬ'prcqlo`9 W9۸[,u<hJӪؑav#!D +r,](r&Xe+_,-"&4Ns[4@m2 j;͆|R 9#~0:84hv㵕T. ɲxcl5#l~@AN"sDM8G̷ٚD߼ A*/~4ŶXo[n:='"k:=$ALyQ~N{>!knT*B\6V }y 6S<Lɀw;YQ0q^$@wv =,CK٢IdwzQĐp..O端۞tV3i:Pk޼2Gɕ1}<[ k1ֆg>jGZG B{^F=4XŜTT6D_VܲM"U^}f偭)qh&!挟~r[bv( @ +baDK:ߩڽ +S!xopn{IO)3\(Oo~;s+42||afT!y/y͈%*4QJ[5n&xE|`4-"!$S7p^e744/BQ;맇d3 +5rϜԞ_v8U_e[|ɩg"bJS&aﱳP0u8=&m}bZ.q:]e5Iur͋r1yme@0zOlR }X +#u2 y4/4WJ ̼s=֐C*Wcz7bb,ĦWIl8|t٢]ĨM7v`|!-',GyMn<}TZo~,s"UjM): P30}|KD@t{X=IoJ?&8Y$Dv-D'OFֈZ.W&k Jӡs3>j.ݡAgA}ΊkF CgǍy<]~Tf)jp'ˈɘ=姦 ӬIwop2\N)?UYm {6}8O^ҊTy'ֈL%7drd#{WjEQag ~ut)o'.)gޝ˼asݔF? f G89v 88\z=-6ݽ!rդnTH5D(+7uΝถɗ=ñYOѓ@3,rK_+ޗt.@#,QVvp=9d+ۣўE2f&JYZ\WU)8;2UƋ;lW[|(w[&¤裻1Gm +WyTu#02 =֪e9)2̖' my!DT ȄӟWC[i@q̙L]O\9bLo< "+zUJ(}Ӡ%jGfw\6hLLe0|E3\E#A[m?#OBUΙTNZѯN<zYق xg2Mc݆FFHz:#بM1jE4*:"70VmVl[5S g^YRX1Olĕ4,?9}y)oJP*7|螁i~f@@Q wa3XY&6F_+۵@NvʩĕO 6Oo/>O|iO kN qzHS뻩Gנ/`˧ +Z%Cj&oUVr1:zRy}oݸgcHʓi\Q0ņ 4teIE/)nO/ӯ6'<b\fuCWSi̍|ώsk/.c#E,rAghױ)ucWV sǙ;B=8SanR}q,_dyYšT (:?#gm3;azE2P*ػ@A3cبlq5d0Uj 7r2`Jh_X%1Ij6I"7+z!'Z Pȫt9_ +cR[&38RTg(繕<1 Lx޽~.h  1W7ƾh_ҩϯ_jߏEXxL;hZkU,,Y uN 󵣉wðӹ=Gj7B1\MYSNRHeSKKi@ +iJ_ѿXYZ +|g65{#iڠ+@M!p" #Wʢgԩ ne&P ^_qߣ. +E15ll/SYs VW;w3iÐ__ +l}%V,?wIؽyb91TYà ۈpsGhW.9,',Q)ƟxÜq0G~  NǛIT`۔lW)E }ŊQlƑi[2gO{r*q$稜*|g;5 aO b=> CFcH?TU;vNx,A6MP41c!rJmbqe +R=9W<|0)mFZw/Zuf_q{=DXQr& 4=zO&a]w`oV!x AHKI+XL59=-T) A|1?<Amw= +V1z[3ܗ넆x<DyJw1eF݁}S(H/}hq/e:jW #1.M"$?TS +j55aF<: LOI驳gӉ߳ +2"]vCi-&BmȓD0YeFi5`xK+QX%^F)2MfA }ZEµ-A&$<;IM2*,Lss2ձzwLe8զT#b[\>peВZQ/1g@8#D>n]#Ŭ +[iւӲni=7/BHLLĶQ8uP;[znb"Z=$,u1'^7\xQO5ZOQ{g {=svvlu czxp>$I(p /vqjug\$)>(2P|V箪+]x4a.ȄG>DC\ޮ)1%w4 `([IxiJOiϪ&JWHwʜ9 L4-yʘ„O9_^_qɔ *֜ l~pj0b0>XvlL'uaL^#-FKB.HĴ6bWRV+@qu~n7>Bsl75fjMz!pd#uwC 4* +^y% <0-- ?:4qj$EܲڔH\quxUҽ׈6>Q֭S{ؽ~_̕&#8^:x=J&}&>|7q6 a9fwJiZtai~A`e!8r;Hc*t̾T7͵vЕtlQZO_}(,jƩT!k8 Qtخ4xXSHUG4"z3Cdtr 7Wikq!\R<]gFVDwH>q|3l$fkydR\Uo6\?)PVDNڬ]^!I/\wlPS^:zSm{Y $~k+ 9|+y o0wiq/wrW F>SVn9?F%㽨y,@HICŢ:/ch_s:B"g(TڡJTA)wfMaWn>:^!!*bVcDWxXq~33!x>BOz%6@[k!ɓĪ9t^Ѽ3z(%7^A1˻5=! 6o?ЊrikH"bY»&Yɭ86וSjܷU#|~ۑ>\JI;A؝&Ưyv)btgx/S5>I͊pa0 }cpٱ!Jva7Q I7`J +G-M QD #s`* +rB@޷d?(A<'6Y-H& !a~>wZa)8 RDIhCEXL5 ȶOLM)^f`x߰'LmDJJ#Ux6d$ow=xt<=\ڎ$pXJJlJ'PsZo$4M~w`AT,so0&%9hF-F<f ۷}OqSOƠS|U&_RZ!dB{]u?]~JpqTZ툸&/YX(HXHӜHZGq Xև G tFfOjw' gHbe ;s׫ʠ =}i6^6KdF3mL +BZG> ͢bBtʶ\#ʇy-Itt^ɼ7ŎFxcLø;yWx8O{qUxUd_ +endstream +endobj +800 0 obj +<< +/Length 6880 +/Length1 1393 +/Length2 5926 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍvT-ҫ4Ԑ{E!$"$:JҋtPRW +JSH)s}oFH\k/"cPàq"` Hkl) ā / +Lkp"1hPvG@q +b-XKɂ@1Ho ]D@R*c\}ܑN80XFFJw9@pG h.@' .c *+*@-a0B`8a H 0qBbč18/; a4_၆#cM+ l` ?] 0(W(v8 ]}5 ' ῀P,_"]xCj(_0w+ "]~Qʪh2BqX_SA#`csh﯅ wE*jFy 4UC8$#))!@0'_M|\_a<?W+Ot@(PO߉(` H4?aß5ݑk^{`?Owc.>߯))a~" i\dRҒw@ OCM *r0x)#(_o.W{Cj..GB+w. C#=PAPD;.$đX57npA, _Wo:3_UE0_HP +^cbw)[Q ×w_׊;OWk;wobf _r\%d/:fyش?oά8J;"?:ko"?K0䠵&d>}*%Z j% @Rp9mі\7p6tqWܭ=L4MߞF#㎔ZbX|N-~])Yŕ3ʔU%S*?Of-B'7ްPȈKy +׷W(' f,0Fyeз'\0+wܶ&KcD2U|?-t=H%릻ؤk͜ӣGI|=«;IȵVl.o6ͺ8,ez=FlTL_lyPCjQi +X})եNoﵙ''_7M9\.S8="ͺmQxbg]V]|f!K1 7$>&*s~{Sz[ gm^`%cq)4ǛTυeG)S$5QiEIIveG> V>gOp%eKFE߿^ +5e1d1-5*3Ae[@ZxWkM4}RdL✵*el+].ݕg FyVDUf=m#9|չ@-[ɮ޼BA`޻z)#\?H6YMBSJ4}׼O%]~Bx.88RU2}L^:XGic})FK<@$ / ' ֶN X^F1pPj1Y-_kLh1B,e3zGrK?]y,Ӝ٣f[‚۪ۘ NÝlfCO{TܰSV@No6\RzXWìu~P9K%L `q2!X~6OR[gzߡe+L*4oo^=|˭\jQ~(eW+8;lBדok?BadwչF)Zu eS(-p (5y2lĥV+n^ +n`Z(DY%ߚv pL8MwN竴{E :Nd^\|p%cz9ac} [M- 3nqLt1pװ*ɥbJ$%~fuM&ϛzNvR]RO k=U4+ӠC +i7v$ѥׁ: ᇽfl6 rjQq-Ʌ;~gobY/}SgDT 7uWwdL Njh-9.Aވ, ndXJ4IQMQ ׇ_j5I-puJVo]Rh1%Jv4//PDOeWs]_C#,unӯʸ@Cpu ] iX?eܥeɥl~oZM^D,P8^@{Ee7ߕ9`ŁU:VǜKƳ%6'NoMlA*m)j6OuAJ%cXRV(ʜ}!L$R' +gk&d7RpuE^yD*׈zB?Fxoƚq)5 /MxY[8l~w g69*uܾ0(" lUsw>] Ṗ.GqDױ'U}6`bF΍!w3k܃bR#-k^ȣR<™{B,3_M i/OfVF :5_^fEw2d$EDa* 3?VpΚYiC8`);r<]hه9 lfS 3| Jb~50o䟯cTY}0쨑sdZ|׶[O9ť"tu1J\wYfz5%!rt t xJFTQWl^Xy[dsN^f;8KXTĸ0Tb&oO\=PI5 +t&X%s3o +S-(!^xnC| ?q ͨP][EeT-Jd]$ztN9u9[}Ͼ+Wjlڗ#a| .p4/:aej?!VXL»|eCU=6,"<#$n=)4M)_/=Jζ &L cFiwyˀgv665caAC unG MϵG# Houq w`Ug#zHcBH/)`UlP ssvV90qᮏLb6˃`9#g sqFBVjqĐr7*n.{OAIϜkp^R1蕮`y&v3-S%;Aܡ)AþN([ˋ#ywnvS^I?Wz1B[ +Ow-(|Tly}1u5h&w%j:iLjWh-ɬVӬFf==7 cև.?t3JKoPOH-%ĉ(#6i.I(bӺ岀a֐HOIT-O 承Y<+;wtbpuBse"}1/inl'&5/҆Xjy|S:;sk~%DXnKke JS ;h? DX\`?*_fxIǚ\S&Fw+hoC\C -- ѹs:C_P)/RL(w5'h +x}rZnĈ֕R,snJ䑙K׍ Q{:ĥ` zL\DfV8_7}_dVoTF|͗ݞkzJݲLٟ7:ʨY)u\ٓ/U`#mĮܵx):[vט#t=H"qo5."fUr%^[X`Ҭw"7p_[&LB+?fO]K&MAӢ ttVh8,]GKJ{и]G2/2ƪY2WQ_|Jig[TB2M~],+7\~ 2KR ntˆJ&;w[Yn,J +.~qL@uϓ 1{ңw|\09s6±'x%MGKĜٿdU#[i{NG62ߑ& ^݈^/3M L^6Q`:= I:[m3s8L̠߰TkZGVфR)ƣ]`*/j0IJd^@AHJj­ !QbOP!QSYRu9>voDmB'V~QEo$؀9?& +W6DgËi,o45@%r-U&oS}vnh|fc5r_F9+{GZ5.>y$iۨ~>!*c浛YA+>}-Ueδw<;7l$wmq +Lc=x{{=~E9pQJv) ?X+0xVm@+qRf/r芃fuXFy!̦q/tu_^Tq aˮa>$)$sBmonCW(NY*!=!`.Gx;E\BF+ f21z4ؒ[]Pf\CX i [#.drpS +Ӫ+f?)_HyLetM0]ZSNW·mJXbxҒk[Xu8𚇷rcN ҕ͑/Tqy=sq-!̯隿{z@`fDלy6qxcfֶQŤʡvx* j| U($].isV[E\7]њnJ7V7~chd8d +r/\J 7ˎk(= Ѝ)6QvwQO2p"cn$3yFUw;6-WOƥҬ %| e7SnwlO ++:ȌlNU8#~g^?.I>V {3v9[Q|:#~"DmS~>"7gUÓpv]&F};=}Llt滕Ɏt TBϮ穸sϚAZ|Ȱ@2=@5B=m(s Îjr<{`2C^=S]Wj'kIqB:V&LTQAmR +dt,hvjI="Gɼ;L[-=8烓{8&TBI +endstream +endobj +801 0 obj +<< +/Length 6881 +/Length1 1379 +/Length2 5945 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍWT컧S@QaF0 ƀnAB@B 4P@Ns=;g{ߧ{s06VqB:40X$P30@" hGR-a(o8!j(C83$Rr`i9 eD!p'@ySՐXee~T<`(8@Ю0\F(`ahB)ўr~~~"o$E_GLa0/ . L0w{!6C: ('pCao rtF0l ,;ܟ޿!P(.g; `/Ơ/C7!8߅C*&ߟ輡('[ 0&k Ԑ0ڛW}p :VXH?Dgg8'OQ NDH@ iY @]E7z~+ĸ<gXh,(+}Np(s#(Ü&c6 Я';w?濇+jc/*UU$ ,I`8@ww6?uHp s]` I_Qg=>|C cXm40'juf \n"[9P? p1Av {JqV)5Pӯ@P(7xM- Qs(__BPe=x\ֿ73H|ȶZ~˃ce3W>Ԥi5የ*i}};<`~#?MG_RL3vm<ws@07]` q!ݱ[-w'MVj(G,mJǁ9̜$hd04GǮ ]& Rm%X/%LWywpX3$eCcfQBzVR9E7Go!t=QX NJ#ƻ+# Jhy-xey}7FfiW ? )mZqX{-8}}e$~ dF*v'H>u2Ś샖ThzJZku;-FnZjZGYI2.OLH]] 4K/h&z$^d.{GX1{hW\5w~oͽvW59,=EkM4Dnǭۧa=[]<W*~eqy>/2{6Sr_6GJf )zu3` +V"af~qnmYLgIBѫi{k}:}́k a$yy!!y^i1$xm4\zBSJ2 27ْ[Һ1лL FVne twS m+`'*& NL3>oh9+ +)Min kfKD]ͧUczOG +0 + +~eÇ(Њ/+Cr`) Ɏan]d|k ֙ΛGZN(V[g~Ay6ukFɎ j䬴C-ԥJD8yo0ί*Sbb"cQק~r{+MUYُ\k7.Α~L,d{!>܅*ak#e_΅ęk<2,#S; i1x}#&$by6W?>q ؠ#mVCڜ?VWl[D*#iXy;o Uzo#F}v{!IrFB -e: 6y$J!IxQaQAZީ0ѽ9AҗM#lsͭ3/ނKX,kilߞRTqu$Bs=I5PQ<4~ 6pqXy{-FM+~^T[bPRڐT]~E0qgb*Oa')7ɤ3z_C< LZw`VaFzmquzms8?+/RmS)-{nܩhSQT gSܙ .',uķlEOl}%ì(_x`sJPvKt>QI/OIq$$> ۾W5-*2m^Xo粎ꁪH,.]K2vS~7}jS >ן⥨ cJo4UG|Ч6 W\u;W4$ϖY^-A]ݑqɃU]u2ߨ2XQAwbd~э?y`ձàZ)[9|?CWKw-{-­̦Fv䩦݃8l:5'2&RaQ`NbUjxY @O?dHiƶޠWM:!$ՐJ)|rW#UZ}Bvuy#i!D=QwntHvu\Z3- /d AmrJǒ7~0͹>ʷ%-x b6/#=Q?XLNiavD^ V-4,2f?Ӿ;@ʥ8,s]ڒuxRoOm®-]R 0@XԡBf-7N!lcx\T𓗸 };toUP~*[<G. + = )L)< ihˮߪ +ݍ>$X"ՒȾP!NF[g7될[fbk׊_ċ#tJ]nXJEBzT^&tVQB ssX %=N$*(sPa[e)}lIAt/>%i,| /1ӱ)61фpL%g{3c^شbxOTҍ\weϙu*73|2h/4(FWnw8f|82;xckd|5}Y< ws K,fsTzUy^y:"5^4}ysvȌN8#92^ I`GwN%.iN7S֘Mm*2)6{;om?DwUEڡM fE6ff~B2#m }nb:m޳wuj$.㒉ğvM +*GgŔggcP 4>$|Z! %V#}F'R2*;+K't<[B^cѥAXW]{!;]6_|":'%&_6XNOÚd1nzn׀cXKivWܸTloh'97G g'/dڏ)|ƅXӍ 4 +',rJ`m+|j}Tj_{ C}l)M*>"ٟc;V4T2 :LvZG E廒>&z+$c7SQP+p}w'4} S4\%=I%S| _j@{pЋI.rQ+p_ݼ!5{"` r v{BRL>J$b.G١>5^}l +gc.}Cj69=Ssi* +KT_@OJ1TlT!BkG(qcgws6#ԷK/\Xcއ)|ZliՎ r5(VTT!+sܸszv<pYiRг|P":eu?ʿ?L Y^IubKYvv1[s: m R:tLdNqMsr5zSM!Zw_!^ø\}jgu)MSzn[sMD<%ף.9WCԜ9HD*a{VTMQ#C韃* FYJM m^*Pj}}y;WۻU֞&Мj +rt;_U,'J4$U>|:LjxZT C X-?zc@h^M;"p7N*)!A7`[ѢT*v>9}]aE^l$ T͋))) qYg3 #M9 0杦@[33s!V +#P[/-LҞuU\Ajiq_!`zTbjpB\/at80n>BAyID A˗|1&&h.II]HB^BKrXșMLhg0/L|X1nam0.XSVz5* +uG+[w{fo? +endstream +endobj +802 0 obj +<< +/Length 11243 +/Length1 1656 +/Length2 10169 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍP[-{ІwFq'hp5-\BGrܙz볶>4o4Y$ @Y؍] !`gbegD9]\A?R.@sۋ + Ptwpp8x92=@VV" tE8yll^dp1qH8]@`-%@b yWza[77'A66OOOVsGWV(3f ](ףDzN q)z(:ILWP"~~QCjl\t>fU:MF5cJ%*c1ىޣ{lBH(QآsIk :aήDoI>plm{_GTSٝ%m⬼O3tK54EE<9/?GD{]ۜp)V.T5޾HA;~j=OWWy(3C'QƋZC @@eѬ]ޏyDHoHxUb2;޻/j_0VبR{P[Q8ǟiq_^K2/?}o(4+&{3<\mvQ kuЊ%IRZD>ܽo,邾P#FKJqL>>Sm})ךْZIYZ +SNs-dqVdËlsU¤f?zMB?8 +p'[yTSv#)KIt$Sac)IƽtXk9tNJ6|X*ڶ4Dj\8ND> YQ'كmv>6~;܀]DX)&xzW8Po}S[Y!rZ$8 RN>CNMgCSg`,b&B_yH щHd,F޷+meA ZIJ15O.: +mjHFv,k^ ?`Yzgގ$=^l"Dv*[/qe-5j(8!E~ڑ8EaL@<6TBrz+(S|*zJ'E`]Rz.6[suhq|wIpNfX U,D}t\L׆iSDn!(#1w.kFWv%UAwݽ.>BWmrevvS^RZUTٴiu%uKK > X#BAt]D^W"s$G2d5YȽ_"b&(pOuM d~F& 8Ds˲2D\qnP2G|W B#G +3_$~́9꫼,T'X|?zQP;nbLtme-LzN B5-qz}V6knh&>` +Ė@̓6:6Y{Z%*5m |ņ,ՓVL77gO*o:>G,)OwİHmTNf8O^t_C!g&Wb4?0p't5$9PlHbrJ1Ú~H'mJbaaU/{$*3#e|y=:5ow@PzRq=7n^&nR]|Y |Fm)un=(PD܏ *=[Hegyeӝ3;Ϻ~XJ.Vy^A&f=Sw~8}Q\WYF6@o:.#R] +@c{siOBfR&8akt5W&^̇ru,/kN1cPLAD"Gn! +oMe'~Qchn-„\5KװVl]Qb& +dOg_C9Ɣ2!I_fNp1kIYyaUGFPqNzIl\;~//~ځw0]x2E o04,y!Y"R[小 x|I!%Of41DR[}X{Ileۣjo:\"5:cׇ0j%~oOb~L- 5@lڽڴ9InGCDŤ8t'iW -E^9|^@4P}9DžˀL)wоdh=(ȅ#-*KpXCFX~1y@jc =S:N[DOVzs,Nx/ E8y]XVt |DF|ϯEe"SV?9ɇ,q $$&h쩺уDQ0*0FQ0?HEC,F~Ƞ_fd+ƭjpAK 5`]A{6i +LgЋn?z=Quv7+`::vⱞxwŜEESeIiL59_+6rMbr,ߡ/tυ^ GZxDw Pz|ۏX|4N:m}7f= L/onpX{3.Jzb ccq{Wʼ0R" #ŻMI;)IC߷K&{Hz~vAqtVin^Ø_zg`|)PĜ4\R2|2*Xy"3z-a^jg1dJ cW9߇]'kdF}ٱy\W b +Adjnx] P 3RE-M=SM n俚PI5 NV\aѝ,G˖Ĥg毌ko2vw 2%fd4qf%y B̷YGM3%~G~TMUD3gЭ]+$b@t hN j;=jTuWs$F)gO>T\C(PQ!Fkwyr-Ono4.]sX vLx~m0Y<Ѫk̯ήD\Vžq+V(3/#04𘬾0{ })ukq)14pr;85D Y&6lD +o&1Ƭ !S:0gS=vrd N,cHAF #4PDSKV3h2ݝP9Q+mc,8ҁ v.AC;rtw2G{p"Q pFo!*prX5y<CHtKوS^8G 2y#tc~VoFD^/֢HU W|ik`V[:PQhU43^u8120|R # v1 W!$eW3+!S:Sܴ҂Vj=N%?nI$>Uƿ2ulF'J2ǫ`FXH;n~jϲ;Uu?X+ۚN Wy8 +і>l._jt#iDPw&Sw4tR]ɻsQ%3 +b<%.AR\:w '̉3oCZgq-!56<.#>:ֲl BcΥZ!'d8EOo8 h{ ( `P}%;sG%6hLέDRL vWD:XeZ)MFqUHϫ̙Dwͳ"T*>nq9ƫ \bR& +8:IYugvc ~XFq,$hc-M"IƤucZ.Ԧ$_rȒ$&1׉}փT7Ļp +Dzb9d=ݗEr5VeWԊ6?ʮ|%G^4[?KE^_.y4c*{Qas>Rļ>i~aczmK)FebQCJVϢ3}PMIC& oHAHY\W~‹lEm{[Y$T{BOjzsŌ|8 "MS7ڕKRr6~2 {v0WsʳxO7?גYDHF( % +}}kHpnY*{i,$T?C1y+h7Όq#떄"BTm̬|a%J}ڟ^FBc ~܎#*Ti!H{CxS&\)a|T}J +Fѹv jo}zbp=O^Rr/.K.̑3UXU<vʹtw*e2F4qG:35/Pnavg&n'؍]-y_jC ٍqKeuQO ՟1Ͻ&)G ^*LGؐysŸ2٠RljHQ->E?F}U'8.)B[@E}rrl\\y0噆ksu? NjW )%Tep&AjR݄pWJ"mZ~ږŴ,Ƃ݇Fs/t,&^ jYXI3԰#;2o$ܧTQkp ;S%*uJb}Kw>_>277m#HC!@f$oPt@m7oJhCلyh!C2("8l<0 ژa2F-e[ESiA FEĸ (9Zzu +'-~sǗTȦ 55e5pc2b0+N`ka2TG(6k0P+&7y'/}c㑈Fyԉ'ZVf~*H*0U15ƌj4B9c\H3gAK+Qp\0s_Gt "f,У)sʿY#֗縇"W|Z/$~VGuU@BQ5m8pp +: 7иgٿ}?sPgQTB=-ȶcH4ɬ&~1mc! OXvY$ Js-c0l,ײiz7Bt񖆂X`7+M93yנK~3vxv;w(%$a6n]'x#T6$)o,N[QYG6Xq7.oKRYLghmnӠ>Wᅤc«Mݑ!(1/@.݋Y/ ވTen[ACη;hXIw+/b%Pa}*H7n>BѤNb=,>gh<.UU_$x]gJAP +b{msIW陬2Ÿh{%o $R9:5._ĢE O_o_9.q+Ⱥr4] oZr[̽J֡Xs?K~?Z1Ʌsؾ.96dCy<+շw>>|0jUpR)a}ݯ +qv+] +ŗ8h\mE2Vs;\r]-/a?/ehW7,4 cjfP$aއ.r<$aa'=+MߕO䮽'[g&uwF7;> U5[%31^_++4kSleeNٙz0SF7"&+>?3NrFYmg[Խli~u϶%V=?ioS9gbM-sz .FsCD U |$G~ȥu̓5r@,f[9Yx(W`G2 %XSҕqB!科,DsT#^ LZ)J"|K0 > qیsbic1k$ 'hsC|*R" 7ܽS*Σd>tǰ:Jx!|`/;.8.yZG;vLR`.ٗ9\8Miťʨrzs4 9GW&'#ˡK!H?6B6ddCsS^lžI^iꗳh[0}%AZ%܍Q&Y l8zMّ퓃d(YJ<4^Zr ݝ%Zf넦"@{,C`^}_}zʧv) 5qgUH[V 6V6Oys_QQw>Ń޵N޿}*); eN:Dj]ɫhŪJ(aӰd6ASrrKH{w5rZ,=LJ?{m0VݖahW E5.W /-hY,BZc*̇| + S4i-l#C{St +-õU/GɷRtk؛NnL Bd$͞9?)&݌F 1-:iy%i[s{9IRWG|5x=ixrTzX;8`Ű ]T93U¿AxrPŇgW&uI8%չTz"Dm}mҹ l`+$ẏ-۹>Mfu;)DFS:5[#cW`!bةcˆ!hq]=[:T_I=\ibHx4N7FJLpzľm[H92,nK hڜڔ^P M&yR +QZqI7PRzItVtZ%P!Fl#׭/|xTG֞[ni!9_}Yfv:o=33OO+G-MzXKGiwMvݱ:*s$YL6s89 p| s> +stream +xڍuT6-N etctJwH0@6`QB@$DJZi DAB;x~9{v02V#4((,T30 0X cĹ < F5 ԡ8|pED`,w #Tz"@PB`"7B{(Op7s'ocs@`Y)) Y 9,oi#sC H{z"8";}HxD7# 0{@lQ.>گ߈SUE{@aYII$PZZ2Y?SQeƀ8<Ђdp2m`K[RoYE/7/ᆺ"]|C-l#=\۫塂rS\XTmGb5sMWD!X7> /^u0g[_//@B1'~x޿ 8| +1h~ qE0NuB{h9q!!\Ttފ]]9Yq *ykDqVܟqoli1L3s8djs<$1ܞ *H:fz_]^f X^UgiɜO]#y爡ݝ׫8(s{ $ʬ֩Q]axChEףa)'d_R}Eͻl{ը)Y? 4z7;8U|L̉aU<'S20*emz(ns`&#o ]&"J_ݕm҉0&y'6NHb 2 eLz"vPRޞҳ뻞[񍞳N9OΓWo|㴮(H`8|p7Ω+w0UkwED`3 +G7S P &j*'ȡC5_,67ŃKxv;Ivލ힐XPdnE  +ѷi?Uwp6kyMATXW&qx!Hcc 4c1K$+KpIE›5vI:waw+5^q V y{ʩegJ%]`r\]HsKMVoN' tݜݶ.Ec!Gom;u79z_$WZ]%c|KY$>2HEJC7UZǣϦIBN?S%}v z"v"mtG#ȓ# +S"q7N1AM['v(K ltCN*Gv%وj]Aj G5'I:j7 ~@Ї]ًLҫoܡ~>pذ㡁!J 2+y z\ aN7 [nZ! -@St2ƒ@^ek[{= ({HO[>trA;!d'!!\q@i<;&0.1\uۿsbֹǡ%h:\zF3;u#<LIi]QgEړ1_ϣB?۵HM YѮSXn[(=iJyShߟQ_BM$7R=" +n "gξW˻=VLiR;L! +9X q[vZ殪⛊9aK{Ds'+οhI8Ǩ.xyuDt]UJHfu1"jt+AxN<+nvAS{}y ,HEkw!q ʭW[I/^خE,B +J6_<1`@}\|85Rcgo2oGQk,7: +WWv#l錜Q< wR\:Jft2f»RG;/Xmz)lwt4\l ?Hjr7h9 +6H֗2MUtm:Q P}<°^y8!vufB'bo7ɝr DY [%@>sz{kԓlTDv$3߁15'Y/Ǐgi,#R"ؖYi &ܢ$>""kRjs)և'e*0[+> b".RaQ&b2S{|tx rL-*k9X+lrDrnzԘ0xM"Ԏ%@ߩݾ UڈGnϮDrKiG I:# H~?! +bTBQ w!,oi=s8+6;)832φ{%@gpV1zp0?T;_`Jý'F`Ҥ2Ki2Drǣjr|vleP(^ O`ihw\hN3OM"a[xr0\-% +%{DlYK2SQUf)W48 aSԁS풃1Az&SohArD Hň Jsy?rRO>_F4*dXc?'ΑHhLQKˁb9ߵPjdYY[;R6qqw!z>C|TnG?C'gYn!$ꎳ۶Ƌ[yzɛ2˹RzvRe[*/K,";ߔdֱxE9+o#e GLnj'QSqG?s2pX@9|n8]ayzK1jjS \2R k.aRl߮ÁmJW-_?M'd4]h6 HK2ӌʜT*pXWF=dOR0Az O}&AC17s+fM,/*Py6?%097[\ȠshĤy)q*mֳÜZuJ2Kxr7-w1CJ?iZ !RNC'CktIǩxM~ +jO=[+HPIS!]&.ɹ;o;yv;SE-]+glr!yx@1П2r^7`ACJ4H1hY]~R5tR./46u׀>Dʸ;nՔy mZiWGԥΥ'sI6釣͹,`t -ʆ0>vouKr+HR5esRAkd6Qb ƭ)}ARϥs5 z.H!J`dĀM]9aR \l>:M]8HÁK3lJ&W\R>ZoƩZ!'wE^Nn8o]oڊ=aמn96P{mWV dkƜ3.Tu}lܵg59ͪ&c0JLfX{ga%ڮڂ6^2ጏ7Ɵ :A_sqd(H$]O9"vc?ߋygCCpu5|?,aQ+i1 :N-o{0zBv`xa9wJ 7 S[y>wk_ntwؘ'd*w ^&C%ZlUqA2B nP+fތ "/z(@>xߢ㯺o:]Z:R|@7trR |7n]nxRn^Ҽ[_BFuE9N 'گqS#}Y Yjȼ[f-UeTIÄ+dIt:Nߘ7;RFgղȧ ,pᘪ[ (TNgy8R/+vy'3w?| [_zh5KF (XvƽcUen ˃W/,mc4孿ʙhT>/yeIcמ }C|IkՇw([)fUkZgc/M(2 T]%'Q wYb] Y'{bujc-a;CA|Rkh3بPyQ]8YSo\sl9i'V\ Vj6kATR ۊ%vxs[ 5#)QwN^mL*3b+n"r5ۑז=s+'k1VIp0k$9\PuTC̀^}n8V %O!E 8h3*?ZĈup?}O/]i|+ahb15K ˲P]6Tuyi5ueCpgUƪٻs} >io{; +e>|(􉻙6{OLݶ?3oQ~Kᙘh"j=h~ۭJ +endstream +endobj +804 0 obj +<< +/Length 8512 +/Length1 1685 +/Length2 7445 +/Length3 0 +/Filter /FlateDecode +>> +stream +xڍTT6LK+)H CwHw+030 ݍA%! HK ҂t߷{g}g > !yEMe ?__tAnP8L_”@H&x +"@Q ~~?_p@ ha7|E7jgD'rv;CP0!!Ψ '> ]t9v2O(q < 6_)@ΐ?SgC HO@NP0rq@}5 ܀?@Pog wv0;- VEz! /CA@(GTu TF@]nnP_9 +*2F !O Qu0'-fc+ w>C + ""+ 7 rulQi@  ]( AaDG?֨#^s~__(aNn1c=u S?STP{|y<"@TT@: WH5- Gǟ`sn8A 4-v(WTܝ~x3O ݑЄFƐ?&Zbuw_V B j% [>^rz*"F 9AlȿqQ"".(]ZT6P7'<為`v­KO0a~Q;3`w{:PmkDUƟ%jZΫi%"D`m|6IԊ堽Ba;b3)*y_^}N|Q2XsӳF#VݥLqO^ц:OR<|g`-V88<1SX~ ])i 3S- :z=nGommA^BgxHQxqlZY^j/a1ȄMXM>Q/]z9!wl~=U\B +GhB9PV0Íe1ϚY? -k]f'hMwgq"ȾH"_GCMA9{q~KKϿ + ~>FT"6vnSLQLҴ)J#} +(;%RUMW5P} MhSgTDf07HQw)aҨyrCˀ 5ijZP"7Ѷ4 5@؟qeS;:<\夒)#;#GCfqّ:h I6MU慖\PlhH~_vɁyw2JM;6+ԫH.d9й`v3. D.fb y`vg;ޏb0\|'.%mi*Jʙ?ս0.L!zOJNЗm4;&`8ujm_JB)q/,^ +x=_Pf :A&&}M"K5L wB{ws oc`Zr2XNjzڼvӅَE;}i}H&>.r~N^ϒhYh]3 OΉ!l6jb31ztc,9$^ۄNRGrfi =[x1Ia5yp= +v.VY{A=IHlaiv5ذ*=*^">1.ZeTuMǁyt^([XxǩF~_H:^2GH{"uwiM:Fy!jdkkOx=ԑPqɀLҿ}negEoj'Sh%3D]Ȫd!1tzeJ|+Dv8B{[L0p,>>7ûuxy<ʠ +7?&~Ϋ•/~aİVÆ+.=e'Y7ږMPszc[T`G[4fûXhbrRuk' ٖ:GKǀd]o Lk4knw?5YknAqqq =2#0a"b=^Q!e)1(c,7$2à䜳7W bAԎ8nc*NNa!`0`i7͢KPzfSZms]VQgSe7dno(GZܶسx!),+^ܺNOrǬן4~R~[l2\3&k]V-qpџ+Un;hк=R_# ^`گ,+u]p&Ro *u'PnNE3K0 z+3S`Rl @#B!r5ayk;kӂ֝3^~+/\3d!fXoƚTU%}b}o3vY]-EMFغhcpC yt23g7akڲUOL@(3^I3*p`U1QڈǕ%$hH"]/cizi*__Osr\ayn YESP/a K dvM_^8Qjo%WXv9$wTۦF=}◲-m;WOGxMD2#Emq?`OZk&v3HFGͻȑƀ:]lsNA3:x1_?UJVx/mɧU,/hAUR'X/AV1/ح*!x`#1F#pۖ=;ki'Wڴx> R{oLeM0}tOK_x}id nM9p/Z' yVx_-%.GKZߖ\pIlE?ėBxعۭ?R +| 2`D:}GY+o,]y'||:g2x4x31U@Ãf.dE%H dRxdMm31b?׫m7nIX 8ǦM5 m1$kၰn,6}:oefl8iĕ:%DsD26&; + :s"@3vIWtD^Y1~袱d}xf53k$˫{xPIVR~%exkvJ+q}x5Jt +Y]wwT.[}L|y#WMJd#NkCpwaRjtۑs7QT6E'?^)bq 9 QbK"6>35:יܼ v87*B?%@>`V.v0ћEi"-mтւ4SҸzLh_k}oWS$C#k&_ʯT;_am&As) IS2 XJTr|#o fLI:8?Ԭ;.kH9QPYW3ق*%} ZZDW ${m+Iy/E{gI.m/{7Tq4[h_:}g/iPpamTcNJVOwVspv 4 P\C&" =bÉI2HVg;A%B֞G@6i+cBvxbEYcrV7^ҿmQ[u4}J_D\/ +1}핇ߐ@vsWh\"˕lq7xYX~sFCr. +$œjYN5ai>_czKm>H01y$XJ Z0C.zyㅅ-X__D`Nl>Ui`o~%ЯܰӇxWI^V,}U}#Mo@@Eflt8_w@A(m:UTu#fr.Q^FO,!UL"!rB?wvbDDQ߇KDUo6JIDGu([)7.4:b)>^"c)CwN":Zet"+q |bԜ< +"uߺ2R+tcb3gCAXgCGxQ Ll[`L^:6.eu A( cHN<#Y#IpsCY F]čmn‚q34پF24ܺp1jaVaE4Qcgry +w ~tUJg~a"6m8MToU.Y!]v ^cebPTkQ-5`?g͍i)qJy0O:|_G=.Vp<^tX-!@f@P}08iG0{)y[Y;{aRooSyg0' +zY772ygG}cþ/ǎ~n5Lߥ[=>3j_SeC-=ʆW|;<ˠj/:Tg2RxCaMCB_eG\1[iL;yym[|1FXwkJvm? j𲻚!=RQkV5HqݤiTY;j!G~DF>g,wQ}>B;D$w!k _FoăT<&}mTZɮ3D AX` [~9Zߋ "׼ifGЙw{m;KJږftjtg58|a ]qMDd֢^ny{0 +endstream +endobj +805 0 obj +<< +/Type /Pages +/Count 4 +/Parent 738 0 R +/Kids [939 0 R 940 0 R 941 0 R 942 0 R] +>> +endobj +806 0 obj +<< +/Length 1321 +/Filter /FlateDecode +>> +stream +xuV[6 ~ϯ,%Kbr=t}Pĝ/Er6DS$ERI!+כ"/6^IBT2c& U Sa<&W۷Y*EjaK +/|-ea~UZRQJP'(!;)>jg^m0?Nu!4ନ:9QV'QO9C|fb]؝:U6]M~:>>0ףǭ.ǁm.n$GC!d8K2~9eJ4gi[8I|9&O7>yACR_)Tw*Є#f  \t 9dL-R'B3UIwe.~8;]>L6f䫡gRoEUۄ~ +1#]ΛufS%yg9Ofі1*`,F4sV?m+/ET"|"'t$`Bk}@\&im1+u#$-rP"(0K1 ˇhS[ՙtN(SfMv\ +_]7q;|V;Y* o=k=dN +'kO|\-%wW.H+Yu*:ʊ9XdЀ&\BV_E*DQc9S"R2("4>n$>vׂΤ;.9~;/at{ +gyj#ti!yRư5lfUiV<`2wu%XYZ|!촨\mi*vXt1hc0N+C/Vq ͬYѷSdM3 [#xh)5]X Enz 7?W:ρ i}[~Ura{anB#qZ6M=K毶~[x_ #i5/EclηsFF(%E\)w?* +endstream +endobj +807 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +/F24 943 0 R +/F27 944 0 R +/F42 945 0 R +/F19 769 0 R +>> +/XObject << +/Im1 946 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +808 0 obj +<< +/Type /Group +/S /Transparency +/CS /DeviceRGB +/I true +>> +endobj +809 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [304.081 376.187 320.013 387.877] +/A << +/S /GoTo +/D (figure.caption.7) +>> +>> +endobj +810 0 obj +<< +/Length 1878 +/Filter /FlateDecode +>> +stream +xڕ˒F_UExfxħl'NUJeoq,"Ȁ|}d\q.b#4 +~{V@P`YDiVug6 c+?dDz!^Wږ ?McԃLcUέh7Y$UH$7 N;@} н:ؽ #];CRΒhʞVqX{LigST[)mX|lx*GʥY60u -ޘ,>ghO;8F|]9/ĵf]T(@BRXoK7L*YrD54P~;p@猴0uWj޶CL=͎MPtBU&9^ :  jc4d /jm1&jMDn iŏ kNhhP~71#a=x ]<ɹW6|Aqh^s:V9PjX^B9>]󣣓s" ;W GC9DV;7P@~>iUm3q/`&$4#Us}yicQgXGe`L +]o<W}`ƑIvI\u3EJDj&H㔺DEE z(Y%mۜF,{nis$^ѳyܱ)Wh^s9ubJݷ< պ,Vf/ +kYL)'g %G7*;2a:3M;,J rd +v&,C݆"EGɃ2;F*d?*HX&*r$2#}ˡ9*ΰ'PCAإ}I]A|Xnb"jʈ>Ψ܂Qvąd}j,K,§9РH~U;)1bJpˎ!U8S ; P-F9 +bjq̲3s6t QT%+o Zم*ǩ(b#mSU BUC/j)kl8bpvw7ޅ۩F1`q, : =f.$ovF.N6X/-&rŎ)Ոj4$@G1"{c[ L/aŬ6, +j-.:2TIu[`,*KB(f"͠36ұu`U2%.'<+ac>b!4*8Wf\FsI.= ȡ7衅y.CƏXCS"/lUb‚sG}36r/"?^o,i>xi|pb=Yj\yC ;8yT 7Pw1q̝v<2b1eEx'xzSP|Lhi1ÿffqF:e(<+Mxx4! -whH>%&1@t(V0N0"b9цo}h> +/XObject << +/Im2 947 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +812 0 obj +<< +/Length 2395 +/Filter /FlateDecode +>> +stream +xڥXKϯ-TՊC|Zd]I\ICA3|(RÉ]F?>t#ڝww?"*|:Lbp} >]AkrMYDZ->QA7G__ ݏw_p.)"+B owQ|Bla4ݿqι(LwAEmA?oi>~Uˬ`faj;:cǓgHyrcqWxdVpya3/^  y᳀~ dǩtGrN0P%93 6^ps(y뜶#J5}5bٝ:LwC5V]';YСY0`iFݪAg8̇X<dj\}٫C,W[tiϣo@/v*-jNV +bjUV|.8+MמLgJ$gsTÙ 6&81d=B+k;.㼣piRq+DSG N5kk`~:ReD8E ,?ʮ]9[PstЊe,Ӝ]덀8Kgɥ ?x%z'KF5(s`4L3*8]#goU7 <=\!Q|vѭLdGۍ|*c'.7kǎp8s7s/(?vrh xℇ{W좑eҪG qKk_ݦNUϸ]$1r°"T4PmL%`bJw'oD,M8ׂk)ZY1%&[MhSarA$.PbJ)hzq0ϑSy /W?%O:)ޖ,BfqT$CȎte7c[/02l2xKțɤ]Ԏxv4If7 5oif6*L,?A۪Bo{pnfmmpM2߽/X7vJMRp1X V|eCpfN }0|uK)(I=Tkhԕ@2R|\U0Ȝpx"(F\=! cEG)',Ld +Wf݉Jl>^s\KeR)~Y@u1I7/2n=0-eJe8֑ҪiyӰPkR8o:-qٲe0$r8zusg]=}r؃!H)STs#CWtt=?R1u+[VhzSa#h`Ldy!Xwf: >V(^WL*yE7Eb"eQڍ㱕eW aN-Jy' J>+qvnKqE"4V x/ +endstream +endobj +813 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F19 769 0 R +/F44 948 0 R +/F42 945 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +814 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [398.761 395.442 406.208 407.131] +/A << +/S /GoTo +/D (chapter.15) +>> +>> +endobj +815 0 obj +<< +/Length 1412 +/Filter /FlateDecode +>> +stream +xڵWK6Whk._=4ih$UmuHr6PV@{!98o<:D2RCIZfoҬ]IsMcغڻ nRi;j] Lx.! +Ϗ ȅry_|I5Jq*Yzq+Vi!.=oHÊ@+U}Ɏnу$+[$4-UQejw{'hEYz3s0HU:sKՓ3[? >4Rep"ƨL98P<}J=c-0c~]bB'v\mf>ec@forc}b 7|1_/ +jzά^,̔FԀ/~>B|&oJ-8_Dîw>s(䏗wKXRxF^dbx!TL[3.J)}N ջN TMhԹ)z8"k/Ea? =)jLJg7+<ÆǁU@rW5>>fGayJXb9;CAJ,C%J,T2qDX/UcTp;Aj,r1KX?]!ݷMe) ,9p^MZLBG Y<*6Kנ\"MsWK,gXahea! zS0n)튬w)]3y^=M5P׮s;;t [AiF.)`{pz##lvR|#Dkv)uo:!l: Sf"/| bkl4& /Ȱ +(YtI +6.m[jKsTI +r%, %"QѰ)èp獘W tbdYjz.:vG=s7[>o|s׬/}/aP> +/XObject << +/Im3 950 0 R +/Im4 951 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +817 0 obj +<< +/Length 1300 +/Filter /FlateDecode +>> +stream +xڕVKo6W=qHJѦ40rsVVrD3áal +{P$M""~߯/~=3(dLI<Y$>Nn\L"Mi2TIZTܨn\g'!OJa|e+]Ȩg2ЋViɜ?TƜ{;c羵2F3^bT܈botoj}'׋fJTKJrpWT%BK8ݴJxە,!qDs8җbNĈ9$ߑ8h=)XՐ<٩zuDܴ"+깋&s3 +ԇU^G;N-PE"^`}<hp Uhs:?^ wGhM Y@MBյ<Қ C +!t* T*}09 vdvŠ /EM۞lo[OGkfJz.Z: {r3>Iجxp>Ȣ~.47)2^\m\z$8?O[쌒mI0ܴlv':W#y @D&!xUd&j 3 s%r{Ѯư;LAG5*H;1OظD0a}CgnE*ulœFБGz?!7Rq]G#0 ?^`?2 C1>4" uZJ5&kXDCEj=پT((W)]OriM~m]D {E4 D +@B=B,V!]yݔ[d(9h.,?88itZfiQh*,2.BՓHhkx&^ZUk nhK +m4q zDŨGvҩݹsK驅XR {kt>6Ve59j#۷ ܊\a qH#)kE{dhlp@:׌lg0qN]èxh5BVh(XjF+W6+)f+`m͌g^@\a ̝sGZrRR?lKT~ ~ ̐tV@5א1N:97Xh$?yu kT,&f +攧8Oj b5ϯOLa!S]a1äC!KzFU'I8ڍ; +L=CmΠk߭ʒ!J<B 8z%D xjo")a$r^D̉oc +endstream +endobj +818 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +/F42 945 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +819 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 406.331 518.849 415.354] +/A << +/S /GoTo +/D (cite.Kaye) +>> +>> +endobj +820 0 obj +<< +/Length 2665 +/Filter /FlateDecode +>> +stream +xڝ˒۸>_[*KC묽7ٝT^8"$L2Ay< LsBn0ZW7߽Uf +\iVnՇ͡< _oցo.k <ik۔E&x8m8J9x{qJ1CY&p{1ZU0* +u츂PfͿnRaaL<^DajR>U*bloۭ]6ZmtjxzMju3;tMYf›F+9uׂ-ETNPd5}ƧWCx2r_MZ/+ԃ۠e"QV<C恀a851\3k\i*)W] Tm"¾btZiʖvX!/!ّzq<8{*q%Uv[;V{CEI‘ϳlCډup6Ѻܒ_87i|ͺ~1~@Vc4}vWyx]4p^ >k-0Do`t3q`xBA2B)ƖN@rj˚D"6" ?K=S;' l;ʝXpk_!+UgNwƁ$34X.´ ;Ƃv}S3=0LhH:MAEE,GcE6%0aՙW}=k|ׅ2mvn e&Y@& ?w`M {oyݑ$*(4nkd/)HpLA >뚆b%(5aTNAy:aYK9$4lFRcp{Sr!C炙\M')@mYx,y +}I[ɽ4Y"Ao0ZDuܟs v-- (ZX$ \Ʉ:2/k&3=6̎t)d'$B2T=cFe{7t>:1nDO,NQl0=I*kMC?*xX갪 ۞Ncy楌Жy)$7@9xX]ϸ½{z䑣";Iiqx=E Ze˹IDjڏR\!umy‡rr@MJK+܀ͣΣe`(i59D<ʾbTV +JAa.^Ґ|Z"Lg,I4Vs5 x8e=iqMt*w.9I<u޷I׀Ჟh\pR]ra^[}>] 2uCG[-S ɔT^]z"1pP.GwZ201$8l=x!(wI퇮YVn)SJ +u7=t BQj&Z.՜Ջ o]|s.OJKnIP=AҬg߹]egC%u&}sEqych$G)xQmQ6el܇*䱙bLl\4>I_l"9tҐm>^fBv\؋x9ߏGD)z_}2RtW5-:"CK®~+K_Z3z7ltnhvPS7eϸ]tsN zդ Е`l\>Fl^ERAMCRW_I7κߞ}ocAZ`K[B+:7O8-Z_'I1iNfkcCj}%`̔CG]u~w&(~~-Sqgtkh]6S4\Py +li!1&Ez$16>Gm(CwgGKvYzIo4guGa9{d|_\Y +| o[0.fy5̝#~UhZ=4s[#z2"w u oB()4C.1 +endstream +endobj +821 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F17 408 0 R +/F42 945 0 R +/F24 943 0 R +/F27 944 0 R +/F22 952 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +822 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [369.868 696.985 377.315 706.008] +/A << +/S /GoTo +/D (cite.Kaye) +>> +>> +endobj +823 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [227.61 615.69 235.057 624.713] +/A << +/S /GoTo +/D (cite.scott2011minesweeper) +>> +>> +endobj +824 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [339.891 382.165 347.338 391.188] +/A << +/S /GoTo +/D (cite.scott2011minesweeper) +>> +>> +endobj +825 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [480.742 173.946 488.189 182.969] +/A << +/S /GoTo +/D (cite.scott2011minesweeper) +>> +>> +endobj +826 0 obj +<< +/Length 2573 +/Filter /FlateDecode +>> +stream +xڽYKsWjDy֓lj7ΎR9$$1C8C~{%JKOrEFA7?<^4sLyI;}RUO*_c/2Pn5 MJ3ש8U|6'owa(ͽg){*ϜFkl{y07%q"U_LNS>mavr-'%vR/O}ȼ˔{;2M*qB/L5^"eaTMfV00vB, +Kpf􆎬 .f'}fp53_r.԰/YigƴDeYeXe'NIel"#Օv[S_;([$ħҟzE5p2ͫtWRtB*: P̿= ^i> vapdm5 i5 n"$rθSFBc/ML{1fL]beѶ=y+z=j:fMEOȫQCGhS~lV +4{J4 +UEBZ4F0!-П*ù=68N~W)5xA(P,$"= EI.ixxA8cۇ^uy)_<8/C4AD|S{z~BH輯ȼpOYI=y'*Lwjb V1QB9J9/6k3fw&icy3{4-ݧ8ɛu+,7kU/1i^]3'`QF0Vm/D9:,!Ru;O.~H\[}bPgru- 4)`Q[lΥg|~N2%V%th+y) ,HrQ)(so/}JCa_Y^F]υ6mD>@|*c2֙pى٥qmʤ8:旣;hx +H==4޳д[6'L;l?,a'%gA|QB)CE4Ͱ R;ޮl@9Wu'@ֲ^?ݬ]Sf*(y;/r݋Re},wҫd`+'ExT?_t)OxDҘP$d3x{f ]Հp}{7$#$T I +endstream +endobj +827 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F25 953 0 R +/F29 954 0 R +/F42 945 0 R +/F17 408 0 R +/F22 952 0 R +/F23 955 0 R +/F52 956 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +828 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [140.903 563.612 148.35 572.635] +/A << +/S /GoTo +/D (cite.cellularA) +>> +>> +endobj +829 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [394.348 398.901 410.28 410.59] +/A << +/S /GoTo +/D (section.33) +>> +>> +endobj +830 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [429.936 355.393 437.383 364.416] +/A << +/S /GoTo +/D (cite.pedersen2004complexity) +>> +>> +endobj +831 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [515.155 332.948 521.879 346.157] +/A << +/S /GoTo +/D (Hfootnote.20) +>> +>> +endobj +832 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [298.642 312.624 314.574 324.314] +/A << +/S /GoTo +/D (section.34) +>> +>> +endobj +833 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [339.673 126.85 347.12 135.873] +/A << +/S /GoTo +/D (cite.lourdes) +>> +>> +endobj +834 0 obj +<< +/Length 1708 +/Filter /FlateDecode +>> +stream +xڕWK8 W{RIgl]`N:=hl%j[əˇIf{MI0aaf3{>ʂ(\a-Er^ze$ID}Rd2/ +H +Y$T#{D Y!U/KrGA7 +qf0{4v[ 'IY' ^Qt1 l:UgB<\(Ǭ~/vhݡbϼSكrHR8Zb[c- nTcd]^F&Zz6/ʦpN|2q%kHH;D+a|tV7?xweFU=x3Э5pbѭ B0 +LSz&*0Ǟ%t* +0c͐F֛Н7A(Gi7j +`>XDTb vt!r`:9Q5`1ߵP̢Vj*Byx݂O=ѪA8z +|$ivIieW_w3""ne`|DLS8[&a\F#Z߅Q:2ܔ$\j3!{Gq$eCRAVsmeLKZ1p0 ׷7DPI;^vL=9 b1$e$*$/lB-ix(W yak*\lRbd_Q1A/A&3ZD`őB%,bPJmMv+\KY)wa}ctv 5y^{Gj4 y Db')LcU8qaߣsU^nF&(y +Tle6Y ջcũ 𨟅 J(0mVAep g =B`lXhJw83Gf"!/}*[lpGqT\sHihO+7U;t<,}@8Zx' Lw$q"qwFcTzU6;c߽==1/d$ADaT:qcjp@@7BO(H:/.tyDvV>P KgCR;Cr!aTL`^LNH M*Ѝ)  yi!,EBDςQ7'8yZ5z@*Zdex܉-C]^䌅Rp/Ĵ%Qy%ÁǗQaXU?7xlbFΰaq +endstream +endobj +835 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +836 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [394.489 668.364 401.936 677.387] +/A << +/S /GoTo +/D (cite.pedersen2004complexity) +>> +>> +endobj +837 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [517.463 458.024 524.91 469.713] +/A << +/S /GoTo +/D (chapter.114) +>> +>> +endobj +838 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [390.792 439.821 398.239 448.844] +/A << +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +>> +endobj +839 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [359.966 373.868 367.413 382.891] +/A << +/S /GoTo +/D (cite.monte_carlo_tree_search) +>> +>> +endobj +840 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [401.671 353.545 409.118 362.567] +/A << +/S /GoTo +/D (cite.sebag2012combining) +>> +>> +endobj +841 0 obj +<< +/Length 1697 +/Filter /FlateDecode +>> +stream +xڥXKDW\ if"'H*[8J=DG#ec~="okӯhwEEׯl0MU;(ߥI&Qv/2$0?~#&,#as>ms7[W}]Uvt h +X$$a,<ܫi# l+d\P@oK33 w\]@Q"$B 6O֏u9'V$amfbY^i K͂rw \83x}nB;D*R&/R" dX1n]kLV(4,pqJ{ qet.8Ϡ%u~@?V$ԅNp؄ڤ +T$3>k$x* 7^VAP4Dt$_J-G~ZLJ +* ;VX;ⅵtW u%$ueP(K0xUM{7qE Ƭr=S:.\Jܲי,B)-)Rɟ!4a+Y%jCt^ U0t^y)8#=IbM>,p]Y(Q(XݻJ0#l_ζ=j3bE6e +Xnt9CT`Lz֊idW=Tmܧ8 uZ• + q?g&Q^^ daFq^(P%s%~0E =YVMQ*$ՉQB"ml:Kk Q+"/-M$~:4PfUS8آNSl?.uPr)rt*;([k #J sB؀\H\. Z<\áiкaDY[0 `:3,)MXt8ʛ#v~a[+i4d'OH g3Ƨ4k0|Vs*_If6ڝ3i@\" c0>~THÃ籟^LYQci): yERDH\ȴD0XTCk9ad?e{g*_*:Hvo0Ʋo2:T UiNCVn 2)o2i?rbx׏7bp`봾_ !.Wg̀%p 8yQS1aK_{r }jx``eOU)4)U#G? a-}Ih3slo#/6gm*xoY{%9(B`LenP& n?ne?R? 8LHRH_:P$#}*x8C[2MW4'C?tQN @MZ[O#ΥG0}=Y +endstream +endobj +842 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F27 944 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +843 0 obj +<< +/Length 2474 +/Filter /FlateDecode +>> +stream +xɖܶ>_ѷ_0dtp$>%$@593|bc%T +\zح2rjjCmxs7?\ꛗnd,8jls]l^ECmwZȈo?}Rg= +onmj;T{hXC_hy6P2 EW/~7s0sz[)`M,tne LLjכ_uc&tlܴS g2ZUQQ}I*}CՔ=i;MIcޕEwη* M#)At˂Dne<p vHQM4meTx%;%)v.d5>))a063^t@y}ye +2`a`=БcWVaa{C|pڼ+envi:D/{:_( sUbtj~ly3lj!yIW:6^8yM@.蠦m!d!:^'Jniautdc;B45i\eK#E J2\xj ȬkF3cr]0 2R ~벖֕:jn s^=5F)08҃xK>گ4"3fi2?}Ց/kxe,divȫӼ{a2 +rKdq` -Hz-KQtϾ,82Q]ݲ- U,eĐ7EUCPT͞î&z )?L>by֡E7I[kG9K퓨k_CxAA_21ﵥrq( +D@2bwEꏼMuy~b&z 7w;Y ^5񊮎>0\k.B +|Zˑwq)ڕKA;ԪCIxS.ԇ e[5/)k0wiVn!/q'.Fg~w'Ex9VU^LUylT0hJE2K UCU&5RyHFti+3ـ$7 x }Xt},Y<<)(='Vy5]?q.>g=S"-Rm0 + +0K\c|yx5'E>5ps9*wf~v_0֞f/VN圵\tnPd~._%t4rPQ$\z+Zp:/]5#&Gc e#l3R8l=%tqz]b:T_Q4\IgJW}Ȓ{D\q=$9shs +eR${_pؐ|*LT ~MOD3Vmc`+t 'Lj7Z hЋ5V$n\ ˁTde"ܢ2L & 3b%J_:i,c$}!5tX:u퀅O|rpjP @G`&@y XϱꇮzsrxvR A<d@?-nmWWwшPGЃ-芋6½Uq2KM |\9V|ߕV~1`%) +ߗJG2.&6ͻl2kG?KD=IO3ԙ~7E$j&Z{צTAς?-?iԍ`ʟMS +cu5[M{TAf'J"S'ϑ> +/ProcSet [/PDF /Text] +>> +endobj +845 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [168.32 339.269 184.252 350.958] +/A << +/S /GoTo +/D (equation.23) +>> +>> +endobj +846 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [151.549 298.621 167.481 310.311] +/A << +/S /GoTo +/D (equation.23) +>> +>> +endobj +847 0 obj +<< +/Length 2303 +/Filter /FlateDecode +>> +stream +xYKsWVIlbWrUbDbIdA@ֿ>=DI׹`8M_pMp_`d!Չ IeM6}o]e@Jkimڲ5QMSw$@KDF"vկWqB \޾^`ČN\}! _)0c6̛W51cBF(P)ߑpPC3{*|GـF$ qA|2b"7kGDZ߰G JDH23Ksj>`S/ =ZeTt_D'/CZ8QNN=(MT!%'^]gHNeKq$ 쏻22+ӕ!1@,Stbl+Ĺ=7NT] +RP ?Ӏ3.m_vU Ȩipm>^b$GZ,%/Lj}`X6"ôzQ!J]EeXoP &E$R~XrѠ)EQFd00} X82h\1`PQmT8>aL.ůV"wi:= ZH=xS[.כ_!H@G(}>|r tVU;JHT wک0ҪУU&)Ml H-\ $i&+ү5д+msߔU[>M7  "uL <7xhCd=.j)wyOPD@EBNrմ/?˨;RA|gA1-^&CŢUPΉZTKQTJTUVz\y?7!iq(OlT ҝxNurl% f7PkRG-m&U7nѮ-'-o?e Zh,,OxɨnL@KX(2zꂙ" W^sP[1xnnm}=О(w‰EXr&w8ƁOUI$(=%hJphz=YZiXH=F=r*?LP ;CɅ9>a + vD.B6!3n'jln%ijҼÄ%_֍eM[:Asq[k'3*n|ցКtaU~{)?{ZAӿA .!@ik&iK)X h5^y;q.h_l|-m,&a?Eħ.Y5oPSA] "qHd?TO;&@<HQץ]u\#Iy _G+ʸHaݠeP ȓJ'/!)hcX-^e>O @#2MLFiA@%\0]Z5Ꙃcକ9d 9 Sr_E[)d+& yx0D؜|(C~+n"ٰ@@,3>߭6}}1r_xR)?_o[7 %+(R葄vvi7vrSv=hC2'|"|N;cGӉnR!ݠ+ W +endstream +endobj +848 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F22 952 0 R +/F30 958 0 R +/F25 953 0 R +/F27 944 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +849 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [430.821 480.15 446.753 491.84] +/A << +/S /GoTo +/D (equation.25) +>> +>> +endobj +850 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [479.675 305.228 495.607 316.917] +/A << +/S /GoTo +/D (equation.25) +>> +>> +endobj +851 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [162.542 221.073 169.989 230.095] +/A << +/S /GoTo +/D (cite.pedersen2004complexity) +>> +>> +endobj +852 0 obj +<< +/Length 2454 +/Filter /FlateDecode +>> +stream +xڕXKFϯm9E|"f '#DŽ<~hr{Q]]ϯ펻hۻoM3QXF=`X†Y^݇S4vo ^LyQ#x}gA{f>u"n触`&/I&LBD7on~1XvF0CwhWc]ڲ=3YvXq7Z8Y_Et[\-@gJ/ܯQ 5$Pxe1AƸmoBm]yVTnq^.62|u3J.;@>5mVlGa#؆I*͆q(40ElHȯ͜}[H2k3g[]ӻCB9m!$\$d++_-0+a% ˰O &,Q~ 3Fec 6Mh[zžH^(,Rw[!˜8LblDIh$L„̷Sa%BSpMձj4N"n~timfZ$I6ꏦZ<\X-0KDU$pG9ЁO +K߻c5֠8_[ + Z|XZv\B*5~әs5IO{\>5ɟE,6ne@i^j#JT!' NntHBg<@1Vlpʢt8 CXuʂGd6pO(NKB"Wɴ3 AbՅt Fʜ n&ߨ\:864&h4.jV_dg 9$6S<|, H ].6_20X̆!a/iɽ<]ؑF(5={\Pb iH"oWsdD ܺnt @YEޯf ?Fs[$S?^-OzW[S +\UT pܡ1DH%OvQdr6 1S}ap~^Iw7|S%ޟG63 }^Q\~uDo,e39Oܪ %wI®Z驡D1p#N#[Ld*GFge4"rgA B-FŔ$~bXI|Ď$EB=haF;@ ܢgEt G42b> BCKĮj⽉P}< Eihe^656ЉEvttQE!nc0@& + Kφœ;ܨL2W]2K&k>oR?/wQN2N o~eF o2ھjD VOʃRJ<2uaKK-fuwr0`"wїiyx`Ińef#"> +/ProcSet [/PDF /Text] +>> +endobj +854 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [420.965 442.751 436.897 454.44] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +855 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [239.616 143.274 255.548 154.963] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +856 0 obj +<< +/Length 1807 +/Filter /FlateDecode +>> +stream +xڕɮ6zX6K-ɁOⳉhqH9_$ˎQk83$g`ͯoU8ZVAYQQ}| +_q2nK4̢/ߦzOGeUmR~tv:yo[8&W,ӬU'6o76 +qX2O_‡ Һ +* 67h$QeAQ0N:S*<~B]pimRgS3:{FcdAc pZpcOnXI;`lL v*#w hd,ԡ !#IaiCNF.@SuvW*|=nuM]7YO^;#CwyK_*7N7$Txt~gpG/hY=1.F +ih)H$ Ȇ:4@XKƮǫJ*{Y@,A{ ~u'HkMO n/׻ HP_PlH#*2B,渹wgiL"O:Y#T43~@jHN){à753r?SY^.mkѳ/.OZHê,u?]V.U7A\#N\{j-o'G k&ոx,@ҙ~Ӥ!D̵.}4aN%!{ z3~LPH4%%]g +4o`{v27g-wϷs]Dq)T@<"Kgk`5D}Eb~ڱg6)0SzU\ ++e0g}DsrnnC7O\㡒I#s@xt>.Y\Eph20& sFc'11\Cfo4ۓZ ̬!wyG7Z}PV+t煤7/~,Q gf2TOLMZڈ6zu'g5b{v[80)rHӠӖm50 B9QRukvʨ]VOBEUx7nV5l„!Y(hdh iܝ؞؄݋k bÂ+nU5Ӌ-03]ZQ OzH#g8ƬJF|,`0O/Է|=,1-c$󢋐\H"Jy r&˗u8x $ >^zT"xTׯl +U4[GO._(eTP ܗRZqhgyyOq.ĝ8g5ѳJT^LJYsq2f4<=-g)p +(bM=u)+ 3h,!Jq̐74DDQ.!fIEu(q +endstream +endobj +857 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +/F17 408 0 R +>> +/XObject << +/Im5 959 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +858 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [350.551 688.688 357.998 697.711] +/A << +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +>> +endobj +859 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 501.457 518.849 510.48] +/A << +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +>> +endobj +860 0 obj +<< +/Length 2249 +/Filter /FlateDecode +>> +stream +xڕXɎ7WmX@w:E7ې2f,ؙ*ZsQsΆǗ*f0dl/>!/ !#/͊é:~hCE*~CT$9HT箷㥱%,Lrc1Ihm7 I +Rd{.|YŰl~?T0"?<[si"ׇ_{ƉI:>p~򃴜њ;>dE~0W_l{FP5py"e\ „醃;2> ٶh!Ø~=>K⪑0QzX=#^@ 02_,Bje'͊ dڞ/tP6E6FSoE!Ϟ*d( Ug `jLS6^D>9T{qB,^_[A"lq2U=@S3=- ACpxK!6Vнk:KZ&ۖ2A?L9/q?1hծfo$x0_xZSDmk*㢏 ^ǠNE~"Ȱ6Mjp?h* ڥ7IKb6J=CNٶ!<rK6BM;N~A~ِa8Zg 0ۄiyq4'3$`I:J,v |49Yo:~D6ۓ;B3 +=sEKoV ~E!ŨP +偯I -5io(^P"+2m^7UEyO3ȑ9yi%B0M;LR*!F o,J fG `& LѿYQ O|%/<8GHŸ1m+Wvs r֊,Q#bʠGetlj!RL&8beS0]k8tlg{Jjzj)ymlzgJWE{ ]<"94Eb?LD[8E3L/\ ^K1`#\8G4# 5Q#Aؗܶ9<|Gg.e8K$Su@m+BKt(L"BBJCf((`tq!h[ʔ< j߅0M羛cqz_v[ +GK ̗`7a^Tw0Ϗ}_nu haDm({?ih '-,PK;|Lh[oK&)2tOnB#3sSM{H-k.8IMTEL*7MEsn/h1Vŕ*&>V]#dݸ!ZBD=A /! I 1/# Reݶ~>`buR7jpXXChNnĨB40O +i`cf t|Ypr~v7_mE"u$@} +J /]@ s/N ,󱂀'J| q>d7 .qfre+N5cY+avOeg|L$k,(G+Q]S@b4GxK^Rg. 8  =]>`vb`UB§W~ht9^_:s yR{u=> RƱk(~R l2\6g./TӵU|I)iqL$7wX< ,#ӥhp!_d|5^S[nFɒeN@<κ +pnB6?- +endstream +endobj +861 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F27 944 0 R +/F24 943 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +862 0 obj +<< +/Length 1670 +/Filter /FlateDecode +>> +stream +x}r6Э4fML:NZ{$$\|}FJ\H=fQWJ]|M,nU"L՛9v^yw$̋\0 p}cmut;f ;w ؆*riӌV޵w}?'Ac{YcLxh=Dž 2)TBNZOR_-@+Pi[$ANuܐv7Vδ~z-۞$mPw5i;3ʿC=xwu[tYX#!Q`-z*Im\cW93g=k[[;;WmfW/.z{cA[_#]Q.'l Y$MCOe-#9VPΓ;РHԑg!,Ŝ$5!Cw_Pr1XW֋T*X@.owWM +endstream +endobj +863 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +/F19 769 0 R +/F24 943 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +864 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [511.402 128.345 518.849 137.367] +/A << +/S /GoTo +/D (cite.cellularA) +>> +>> +endobj +865 0 obj +<< +/Length 2589 +/Filter /FlateDecode +>> +stream +xZݓ۶B3}4`|[wmsM2'Oq2HD^(_:)LpGvA:YOxzԄQbe4DA2m'Wӿ^7mB"}z)pRD7e0^uY|63ŧy[b i gYŌtů :%f.?H'KxaN5L@{3ys#',ɨd*#IG"_'vRS߆ljXuG3K!X$(A TM$#}-QNn2{J>2yqM,v<@1^}T =$(G~WZx2=崬vm^- +W7|j*ϳ9ͥӫǶWlΠ ݿ)b>o`4GOO 0X^, uF|2#Jlv-b+d7[y&4E^UQTax޼Xz)ul,dpGA_:0ĴxK(mAJu,X-c_zy^ EaI:d1 XgbWSxrh^lR>جλ{.%#_ +~@Ћ \Ny=`3S*sź!Eqц-#ZF 0"3Z,2shR$\qkfgИLOGI\.EnRXۂz9WtPm8>$X7)@U?$m "e=""Iڬ!nKbeoZ|=m;s8n"DH9Y%d:1hlȤy ,YF2O"/`RȜusI0y4r0Ju@AKEd:iF/L!υQW>ֻBHJTLe_yx.50!mȩv<5Q4T;ej$+jtR GS_jar= i'W 87$o)2Y&y"S" _)i#t8!@mKP#3Wk=\Wg 2B5K} TDqp…1crx30O๎"' r& }Smͱ' ^:)Q8iǀvDܖck!B]6 J5"[b86(c50d +l + ؽ.iB:JZNŢvسrt;VK/ >RGϻK׃nxSW"k,c2d[[RJp3%|u"J\j]VL9 Dy, 3&} 𥿚JYBRB}^-Kj}kHҌjH0EPԽ.90t?spfzj)W{$m{ܪn(WeQ~ %U ,Z,jbcQq'q7ZMS{a,b(wZ붗諫Bƃ +endstream +endobj +866 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +/F19 769 0 R +/F24 943 0 R +/F27 944 0 R +/F25 953 0 R +/F48 949 0 R +/F22 952 0 R +/F30 958 0 R +>> +/XObject << +/Im6 960 0 R +/Im7 961 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +867 0 obj +<< +/Length 2534 +/Filter /FlateDecode +>> +stream +xrܸ[!rr&c3eljtnD\m +%'Uʩ/hwEWv* +R=,]Q&a^Tf)Oo$ ?I, t~VO,d3qL$X垖ꧻW +N1Ep>}v l¤*w`;Tvw{;2gQg9_kt}&kӶR}(iԽz؟TsC V㝇vby1VQC M ) PJQ3;iFYdC)\u}@BB` ,40N6:Sک4sCD NyR 1Gl ~Mgr{rB6(ē`+䆳3s+a)e(.4)gWfphtDUoI߃g9#O?JIX`X! ޗUpQnjNNd5 tf-_"tИ|(p]tg\ Jnâ~A;@%.:xlJv3 %#2R78MwkMdkv։)}φ<63Vm[iTyU K0Q~enJjEYp4 RD6yNUS3@zpVڊX##6= ?3,O=wIv9R.<. Bx/ #H'!I9FV6{bYǤ8U*£<Gτ\U̎"PH"I{`qdYa1!aZTN$SEEdtG‚NJ0 $?ǖ3(>3c a},0SRԍF5 ?ɸ6Ό1)*´T/]@&CJLO؎ȅq[$]uS˱?сn%-CTFϔ)+RJ v/aQUOH#FoSFn=oжX8Rperp;̼b^Ys!*d-𻆚c]'r`G)Xv;>R )(p{lA6^^ϯxZB7qYzYO{TdJ")41'[N6q\sõP/j$-"eUA&IgcO '+Y]A0C\ 2lEr3[w<4/Y[g,&e1]xi8yF)& +'ńmx~)b2|O>w_N7"湿﹃{8.0K*ΛQFL u-Cʇ6<**>vTBi4g}C}F|)xߜNb~!yue0Xhoi) J{^iON7ԵsBjߚn&8?ш8}32~Y&8k'byJ" eҥьf+l2DH_#HjakǓ'zf'r9"/O۔ JsqQ]#N;WJ!UL|9~*70|z.S\~vh^ 7,|օu#=eP#xU\x*>E@vt,֯CrB +S{i֍ٜt䎷n^Wg K;GHTњ׳ƀy5m؇_qqzPwU׻w2f,+VvlnC#~ŝAP"/_飀(M ~JULLЏds +endstream +endobj +868 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F17 408 0 R +/F48 949 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +869 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [411.009 666.243 426.941 677.932] +/A << +/S /GoTo +/D (section.28) +>> +>> +endobj +870 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [367.459 627.717 374.906 636.739] +/A << +/S /GoTo +/D (cite.cellularA) +>> +>> +endobj +871 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [202.142 436.688 209.589 445.711] +/A << +/S /GoTo +/D (cite.pedersen2004complexity) +>> +>> +endobj +872 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [450.246 282.338 521.879 294.027] +/A << +/S /GoTo +/D (AFN_AMN) +>> +>> +endobj +873 0 obj +<< +/Length 2234 +/Filter /FlateDecode +>> +stream +xYKs8WB$ښCvk=J;9"$qCIœ IC4[sك-F?>t7t]ŏWz{ԂQҔ-7ԋD '>_|;,WBHo?xR$(wE- W:sͻY*eY*m :RL gqOStW :9HX_}.riAHN/`L@\]"$V݇tD5ʝ3k-rӘMv |L6m{44K'3YͶk:*6,ՒE- +h6ɶY*׍A5x+JI\uxE}uuz:' !BF "^0IR)Hx·?~)%D`NcS +JwCn;ϾI"\W[˞CkoKGo\I~[rLGK tCVmh5I*;+eܨ#кvqE;*Slwȧ]c]Vm j^0ְw~)֫k=CՎ*k-vp{ض_ mQ5$Va\LiTQc1']R)p182&`7aT} N ?Ȱ;e\ Psإawsc#ܘ׹hrR #ĝ"!٥'D<gK&>PsRqؘT!$p \nk|1B%$}DKu@ +10fNPWn><$И]ȯ5./Cp&RT0H Enh1NzYؑȹG;7.쾓3KA +^T0+;'I?5c,7N?91p3g<~t5l.Tm?rX^ +%oKTȪ|v-WƸ&ߍںjB_y8laO;-f%'7]FᱧHuU +76QKVR)bxtn űˢ5П¡i[.u( +RGb9]G- PnU"5LWX +endstream +endobj +874 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F19 769 0 R +/F27 944 0 R +/F42 945 0 R +/F25 953 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +875 0 obj +<< +/Length 1713 +/Filter /FlateDecode +>> +stream +xڕWKs8 W( )zlOδԹu{Pl:T=ɿ_d)U݋MJ ޯ]]^)()24HR-$ ncйfZV~TZ)hۢ/4k6 +έ + גd"R+RȴvR@" LܝV_`)tOȔulW7+ڇ[o4tHzc#n7:VaV1hS]8<#E8Ah-$FwogDh`cM yЀʺ]V$&1ښ$oW5ӾIWկϨ8fTGmk=)/ DꨯQbLy L˅u}7KR s@&& +ߢ:s>ԣGW@ XkԳ߯ ퟊$3{}u3'fn 9o~ሉd!Y#$!l8̺:G[\@C#= t4(5ЇQ(꾥6e{g0:@S_r'ej1\!ӱء?Gk+ڏ=?__=۫^qo?}f   7>.5۶i(Xce9"y0[_K<揠]ӝϗ%m"T4*YSRA'!WF=5M(ֲ/ixXW;>.cG{8 0i +Ӯ)e\'MKQB0Y}h;_nkZ7xG4oKuyy|>#e7߅muiF7P Q,!;2q~Ӓz:!V#3;Wy>':C XqyD,,ju2wB׌gmaO7I"5c '7c6E-RXe~0&iBqc4jajz0pIgvC7> +/XObject << +/Im8 962 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +877 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [452.654 520.844 521.879 532.533] +/A << +/S /GoTo +/D (AFN_AMN) +>> +>> +endobj +878 0 obj +<< +/Length 1885 +/Filter /FlateDecode +>> +stream +xYK8WpU^HJUl%&;I-Tl$~[l`S3Z_jI/7WG8A*Q8YPFBR +,uvj:M?ݼy~EUw HH Xm42~_EM5$=8^vSi+3i$NCS-ś(ATNF)La'&y (v IA<<fUVy71 .$S[ Hv +ȹ,~?%2|ͥ0=H)p jzVciƑ Q.5![?җn +#}"?*fY^͘@h)SݖD]{LgDx'-VY]SB)A" ]rJةA1J9h NQ"iKEn=ջQGsBG[ _ JW -%X>-١k'nCi^TMfgj}WVbc]4F~Da8%lS볜9'}0&(98i/4*FnΝm7"ѭ8.@όFid+]LcYU0Ǭ3Mܧ:\3]G<6F0U˝iqo{[zYE̼ac-tF)mS +=42md_ ඲ÍUn5s: DA>)5/j]5"P^ė8HA!F;-QШZZ绪T.gʵz0j[(}:洚 csl4*M14>enB0 Hu#Jbׅj6q#K`-3p0ȾL{ h[˪܆K|?F ٟ&+Y!é ;M!C >E|T3C)a]2› ^$lw楁ς!R]C!l`͡mo=4BP&crHJY7Po>כM]A| \dxt{wcʍN?+kgWآ +yi`=7B iV3ǿuV͍=kKdxk;xr;7 +>|QC ,8_]NI`ZG?\=tdVoP K> +endstream +endobj +879 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F19 769 0 R +/F24 943 0 R +/F42 945 0 R +/F27 944 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +880 0 obj +<< +/Length 2490 +/Filter /FlateDecode +>> +stream +xڍXɒ7WpuDwenK1n $+T U(%\P\TBDLTڭ뛿?*WqQVJâWO{sx{i~UZ*H Mk-*x~4I`&{ND]fuątǛh :̰sݼ}6Xyi][a9vxM:QX>`? +_Nʸ6-e0:a52tf@V08MdJ,ԛ㒹0g7N䍶HC-Rav:C +Q>%ɞ ѸeViV |?#W% 8޵GKƭӪdjRЇ-x4mL]KF0q!UȽ;Yiũm B'Ka.G>QUH|||ٛVL?@(D=Roܠm>SoUڍg?bao]8b^]`haOdKzDWT~܂#*[Q~IshBr͢w$Y5l:Baq ګCF/_ N[TgEʰva+FrN"$O]0%/ )K4ϢtEQd>RVe!@/|Q9i[E +,SC7'ݳ(xnj޼JHL^$A:J7RH3 H3U&73s3e !"w^CXJ%2 +ڔ\-cd KT |- fh<0|Z tU?=C_¯L͜iUAn1I'nlnˠsY*Y6_nTxFdCJjɿ,j)E`g:z!]08!$ܚ,6b;¨t#1Bs-GyKk2q#0/͆W%PKuKuԐ& 2M`o ђw`o7&XN&u2-8sT4 |HLi%P.ie&&̓7D֌} +GWB{Z @Nt*z2Qd"!eX]IYtg!* wȣJ*GXB!*&%?6]Ӛr[eݴ'O`ӿʼnm! ~F/2^xE2k +]y=ZyB ,c'ypFxY޴_\F9& ߘFH2Biy,?*2}XՒ[Mwhmg$g"rD:50˟%. h IJ#=^tڝE `ⷎ$ȃ +95G4l&?!2&[>7/J,dZɕۉS3 +ի8M:qU˨ OFgf_eJd31þӊɳΑ|wgU< N(yv%v-?[:ltI^ d/SE/אwߋԎ=-$BF6tbmj뉱(ɘ"jA8v +v84MyL~2c" )F2^Kڝ2:er|D ?rڥA$hSALR)[) @ʽ6md*hN2 Ӣ^:wmwvzBIoOʡRzpT]f r._jJ5H%ר:K̚U0$7q'{(,k?;YyB +ƙ]#u 4x_˱dwr$z4m&m)(5@\ښ@&E)REprtnB٩4j˵Be6U2&#af+$19s©vj* v%׹(ۤAӅQz/1&3e7 +NAgYYL~gU,u֊]Zf9 XlF۸ISQGJ@D"Z `؃,69*$}m]}ѝoBn +G72C$\ 7ӆ ǿrB{],!5]hTʒ{d)ЬEčb]PW?wz2_,Z2gNҕU71?3B0l`EVq7ya +endstream +endobj +881 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F24 943 0 R +/F17 408 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +882 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [184.906 366.303 192.353 375.325] +/A << +/S /GoTo +/D (cite.pedersen2004complexity) +>> +>> +endobj +883 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [151.449 298.229 167.381 309.918] +/A << +/S /GoTo +/D (table.caption.100) +>> +>> +endobj +884 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [218.74 298.229 234.672 309.918] +/A << +/S /GoTo +/D (table.caption.101) +>> +>> +endobj +885 0 obj +<< +/Length 1510 +/Filter /FlateDecode +>> +stream +xڭYKs6WjF~4ILIȜD aҢQ1ŤH`]K|0.v.^oV^Q 6|[](͐Tlo՗>c@돛^13#RZ~uj/tnߴkA˪ׂ>:Scx D[A Ce7qo ~}! +cׁA`KDLF!T4:6"* TCs%`-UmMuiWPS}Pb% *b0uaG&|Gɛ%@> ify;ӧɻ$UR+d6. .u&*Rv^s 0E$7w E9`#Qe R 60|PYsZd$=)Zb7kS/$DU0f5ty~pj5)A{P.2+tb?g#Wͭ{z$uzXLXl6a 8W37)E= n.YC/Y'*'0C|jv>D!l*#hH&Ž]J-P^?MNu{l:;7ӃXxy ,1Ѧ\N.Ҭ~(/7>6Z]+wٷǮM$~tƭ!TRLja ?`L' 2o|YXGn_^nuۻBcwͱkn|V|L0?g} +endstream +endobj +886 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +/F27 944 0 R +>> +/XObject << +/Im9 963 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +887 0 obj +<< +/Length 1496 +/Filter /FlateDecode +>> +stream +xڅWK6WbE-mAIzHsZ\,mD)ͯϼ$˩^p8|t4A߼ *`d +uAr4;7Zɲ(KHn]״R]72y;,Qf,VU]^*L|֕d(y|_XTa +'͇QP +uU$v +`;b tnDasUEy>oR.B +VD<3`pb`#AW>mT]3u-5X~rogYɎGVRNn7w:=┬%LU*~phZ&Vzxu&~=*&*-۸[jAyxzs@ѢEp "=un+.-QCe@z:Up^=c /-ҹz S|cPi8{ZK۳A;uՌa ܁( ?]'^OaFhat8¦měZL\,ٚ\κ19FR7ߟHr 4,@Ze ݮ?S2m!"4&W09XAP];sn=A]DIG ݄;~-7^CxEGT9y9gSfEף5HRďnq*,irR_ f]Cg3fnD^.Ad5e~p%e|n\3B]ƶ*(b⏼6_-G3<\3zȳ lVp@Ɯ%p]ۂ5Pka)k䇡 ++0f (L:%5#" G'_-5;O"BI X~j1a5h0eZ3u0ks'99_Qn CҺsʦK+T-- +X)V0~y!_iN+;RXt2_jo\w:C.&eJJ8qO~)Ѱ 9$ jz>HM$#kMs@Hr'\ MJC)j c$#Ԡ+yUh8*2Z~.=U΀(g0k"~3C?4!o~bqJݏSJH|x T[x> +/XObject << +/Im10 964 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +889 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [107.004 666.243 122.936 677.932] +/A << +/S /GoTo +/D (section.28) +>> +>> +endobj +890 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [357.947 625.595 373.879 637.285] +/A << +/S /GoTo +/D (figure.caption.102) +>> +>> +endobj +891 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [203.396 584.948 219.328 596.637] +/A << +/S /GoTo +/D (figure.caption.103) +>> +>> +endobj +892 0 obj +<< +/Length 2595 +/Filter /FlateDecode +>> +stream +xڭYo8_!P ZRm.p&=}P$Ζlﯿ,;%p/G@~NB:idҬnk~]ޏ_,1a-GS$I9pM8؟ᗮiG^"rtD PESt+ Dh0+" '*a@EȃGڶ `9*&Jɝ8cfIiӸ"eC&I͢vC{ǩGLYd2m\_WX`ê[x'ydQ\'NMdr11_gjړ8\F1qdDnqnOU((.˨`*Kub Z~|*ަ626} NfI╞a4\3LATa[{XE6WT}?^ ĥ&Ke _*ӑ8%{53q Gr|^X*+aY_Ʊ k W$=U9K\gpoV%zH-^BޙXXM`4ax!X; + +K$Ae3}"'{LXDq3н\ݹX v/!v\n0>W<^W4/E&bٗEޗ/G|QGy<|/"V;Cܕϔ/})_B1~ 䪀ޛ趝92a EL m(;޴yˑG0wÿv{aw#;@-K݆>(&n<}sJo<8e_{j8ϧd#}q63aYA4aLqF"C-7k+pϚ1HL<*|:zH]T i+4B3aOeqp:lAltLy>=nǫ5ݬ֞%5`;\oEDt zO +_8;/U)QxE: ɋ#|Bixa %;w"XHLɠ\PaS 9 +bOLx1S2D/QbpƆűr5>{_"WDBg,bAQQ(=IxiiTێ=U]׾ze+nNդ\Jqk.N$n8rp̠,L$l%,G\8F UQõa +lnpz*aIėHaY>8MDX5$6k*baUR6k + +83+( +}k#R8#;iIAMJxFQ4o)}9Pؓ<5ˊٲȡ7G0鄺oB%9~C=0Xw&̆r6=U&Tp{5x D{P[DM@C>Bd!4TVك +MI|Q0pd=ܜL n'4҈3~γ~w-Y64wd\Bjɛ%¿$~ +-k1`'ܱY D7fjP.RsrJ^Xj78GeUQ(/%K}Sd$i,xchs5%X!%}N^}3Η*#wcj'0ۍc5khA24V!*xfѺdaԸ@p{K/Xq 8zIɶ`1Cg>A\|Ӻ5QG~H5=o)fw<?9RƧ9X[Z-_:H3VP>B-m(TMVP^c˔a)xKğ׉'[ps_ o`> +endstream +endobj +893 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +/F17 408 0 R +/F24 943 0 R +/F19 769 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +894 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [195.223 621.125 211.155 632.814] +/A << +/S /GoTo +/D (table.caption.104) +>> +>> +endobj +895 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [265.706 427.784 273.153 436.807] +/A << +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +>> +endobj +896 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [508.978 425.057 524.91 437.959] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +897 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [167.247 144.523 183.179 156.213] +/A << +/S /GoTo +/D (table.caption.107) +>> +>> +endobj +898 0 obj +<< +/Length 2277 +/Filter /FlateDecode +>> +stream +xڭYKs6W*BL%ڵ{@ +E:$evdMbhE':JUV$`GY2]}ܔ闫4McŖi1?8]7q[~</dYp#x(BH4-yLJ`zlR!Fƿ'*ם:PjT*ST\qk1+%G\Cs+\` #)0LWA+)$Z?3~UNLH^ClLd9^CޙX9^` KCpv + $q?$[x "'{ e&2G"<k НI`b'B g{&/ :/܉W)bEW'铇`ӷ{s2轊Ԁ޹d{x?5xyc,ETB '2P,aZ{y2GB{"yxmVP\w;~Q.yjO-4׮ۺxӞg;nb}$D_@Z WheJ|8ώ+@ 0:7ǻ +dx&]ۼШ'L~C zSևzmGqSDִy)}}AǕ,IzЭ7ĽAonBh7mYvا9ᾼ*Tv];8#D q+=Ar5/ߙk< 6f6C?~&6&x\vyҍF tOOHM(Ý>[ ])oo7((|qq6j 爐0ԻjImibǁjl \2w,|eq&vHcH/uC|4?4A?.'5ha?؎iBamni3%d8;5b]oP/<8gR:<g8CNB~{Ā0'?(TRu*]'϶A<#Eoع ,*% `@%K9>Ώ&p0#nC +֣lkLD<@MևlK O;Rf kv?G Lvikb3Tb*p|TEpmKu.ɪ Q(.'}=$5xnʳdT6s\u柗{0`0ʁ&/[Z;b#7$PE/EB*wWY`<.$xuߢa#W.:} {YSǞwWϊ7fփH(M} F'(`cWV&X / ſd]zBN!FH6Sj{ҽO1}:J0-7ԁ l&澦VuП4ZG)|# }V/dʗhRSׇ&kKfu 5*]7|e='H垫b6:L?}{[XI +endstream +endobj +899 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +/F17 408 0 R +/F19 769 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +900 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [452.411 387.008 468.343 398.698] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +901 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [237.842 232.792 253.774 244.482] +/A << +/S /GoTo +/D (table.caption.110) +>> +>> +endobj +902 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [275.159 232.792 291.091 244.482] +/A << +/S /GoTo +/D (table.caption.111) +>> +>> +endobj +903 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [462.859 232.792 478.791 244.482] +/A << +/S /GoTo +/D (section.22) +>> +>> +endobj +904 0 obj +<< +/Length 2530 +/Filter /FlateDecode +>> +stream +xڭZQ۸ ~_N噳N$EJ[MLCrZksjI{ޯ/@\ֺH/+Z'*YǷLXIV0WY.bj)Ǿ|t!"Ƿ28 M;hy5@ÏC<*,S"-bΔs$ys{ dHìSعo>*XyĢW^r\0nwf1TY,0U1E, LOH4UZ\cҞ2sP`,`J"L8|ޙD\xFps)-3n< "RBƼ(Q!M:ׇp)>Ui,R5˃#F!D3!-T̳%D)01߿&M7bs"viVh">8T7''T +Nb)J z^@@ ä.qt@w b +v;  +LL*/E +berEkϓdỈX߱T,^F"R=zba$_?y"v9xqcU+?eI;:Ϣvvo} +侣}eō{zV푘׃~z@Sm Sz4ÞF]TmMc]E{g +!!uzGdZkX15ӌǹ\fd*.YZXH!:HKv=. GX,$ 0&O ,̯|1'pKwԯW'TO]Dk]"bxrt /w.OS?wBNK4'=[}` +g:~8mpTn+0&$M@ ~i峥'쮢FF%=*!h*bVX}C_AH/uSCKܶocEjs_9jY o@9P0IY$+ӻCWbD ! eWb{khmk=-:qw36 $ =d*A'I8Zw$A7a8$D$u:N048=݇sѹ玝i;{*.c[šBQ]"q.KNL˼ z$Xz l :e(pl<\xU"4̖p+]m~CDE,:=ib{Pk_[ %B;> +/ProcSet [/PDF /Text] +>> +endobj +906 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [281.612 210.034 297.544 221.723] +/A << +/S /GoTo +/D (figure.caption.113) +>> +>> +endobj +907 0 obj +<< +/Length 720 +/Filter /FlateDecode +>> +stream +xmTr0(r9cWX&! cyX$j$pϷ-@Q;JnnY%*Vk8V)JV-z?~C !pNͭP9yNʪ>NC|^?S8>NCs\O:=R gR+Z%o #E, ,쒧gZp#JbzLg^rr"GdKWZt2#״z?).K\f~7\w: }җIƔD,y=:wS-TaV V}m [Hb=[7N˭= oL?4LYϕ먅WƱY$n׶7oV +endstream +endobj +908 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +>> +/XObject << +/Im11 965 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +909 0 obj +<< +/Length 1734 +/Filter /FlateDecode +>> +stream +xڝWK6Q*S$ +(zHr-f#K(gPЋHpRwʯ>>*V +|-Ar +XEI 娥 ={}2̷QBw7?gidp-e4YٕmuTZrU\`A4"MZ\ʶ56(f2%cNx^zARoVRafDa 1B e|LAWzS2SJ3\ז#DPBSk\AyVߥ(VUxzUKe+*@rT䋨eP\cp≞ {8^u=| +;|dp.UK֣%pŰ$uN1]2vɃyxp^XNV)۲|N+f_*A ›u\Z꿁7%$ +c|*_i;U:h6 L-rlc@t9{T'.W(*" Mf9 + cYUY^ӫԶ`YXdM$. lʱH^ђR%qx$/%9%&ڱu40&%4 Ŷe=0p՜ӛy~,_ܣb{+_GAp1ϊB_~Gp ƍ3LANs>#3G-a'\YD-3O ~aEƶyY?8"17=L"cc{'53NJ8T `Ȋؖ٥ww=, +endstream +endobj +910 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +/F24 943 0 R +/F27 944 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +911 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [506.943 334.715 514.391 343.738] +/A << +/S /GoTo +/D (cite.russell2010artificial) +>> +>> +endobj +912 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [250.726 79.988 284.689 92.89] +/A << +/S /GoTo +/D (AFN_AMN) +>> +>> +endobj +913 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [397.782 79.988 434.623 92.89] +/A << +/S /GoTo +/D (AFN_AMN) +>> +>> +endobj +914 0 obj +<< +/Length 1605 +/Filter /FlateDecode +>> +stream +xڅWKo8WH*]fۢ#=mGJ _ 9q'R8(Q]^x#u$J*]`[FE⼨&&dzy~U-he Џ[k)jOpOk=qWo';H)'~cfSJ"J1$[ZTq7$j}Ī*[b"8+`F_WW89`ܼmcI aZvP%u +9G^sa" R-R368se x&4%q;u#Q _S+,lW`q: lH'Yo'g?;Soz:o<.mrz鹨ϼi-Ty={w7 u]ovi,\_K%qeWYuSM)yDpS,h?#/)+ƙ清qYՙ, Fnl֠%Le/>IH~}cN\qq{h]E߈'gbwttiZblrN0Yƴf7`WޠUȗٝ{mI*[\xa P!&/ĻI{Oi0[92; &٫gW,hp).pv >gC3q 4>x,|CLQ.c}qy=(0kh߿44 +\ 0@cU˥{$Z*08ZYa4؁{  AA/-(D!Gsv 8b/ oEK}Ns=Rr{b Ǻ3s3rC$Qf۟Gä[Kc[ +?08&L ,A_ Ӻqf873[ >4O,)$qbQ:NدD,aLX:F0B^LXB'l1RƥM⳨`fa$YUq9MiW`ae,}K u(r'qGA䢦#1>wS*`"-; +]aR y%֌@]˛2(\2JXà/'=$OO:Tp%AWϹ"R7K'NZ|ptNhN>i~/ 7^^$M[XqƸQ0Pnw>6ɛ-S+NK3wOe#=!CnV܉tJwZOU! +endstream +endobj +915 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F42 945 0 R +>> +/XObject << +/Im12 966 0 R +>> +/ProcSet [/PDF /Text /ImageC] +>> +endobj +916 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [241.776 579.966 257.708 591.656] +/A << +/S /GoTo +/D (figure.caption.116) +>> +>> +endobj +917 0 obj +<< +/Length 2402 +/Filter /FlateDecode +>> +stream +xڍXK0rVr fN6rm6zxD;_zQF.6X,ŪlN`~0ˠ 7G,/7.8~q9_~^tmzʴK A a0]$}V> pNfg~aMQf87LF7jGOYw0VnDW?^IKjAյhoQ lCōS< AwD}x|)(<0#J>YL>fOI]E'8:]3tepVl%A%^;dX^oHJ!@|~jHnuaov;t}wd]!mʴ'6oyLwxƗiz(g +? R@lJp1=o-v/7"̲zE=o:(HyٙyJ!̷ Le)5;, &jhSt܃{ttޅjd]97צ%GL7-Oteդ `Y& hK8HY?ڃ^s<{bȉś&yӈEI n+0t$`^"%gkXCu@Iֲ+:y@V=r8ө]C<OklhJ82+lu oG(zC(NXxRWpS;G'W%:a?AW`4ziCeɳ!c dF F + 8r,ۀYo +RUGœ fM'):+' + tvk_2 _U [$5CRx&VQė"`2A[2@+SRpV3:UU,h5ךA[ok_ R!^<}8cpt+p,j؍mW gy)d6XjBAP cmSr)Ɉ ޳,"PA9:C؁j9:F)\/( +FCpՑhC]+(6:+./!V7Ҽ+Vw" '@J"0Vwؠ,` &Y-n33 p4 .qz 1*DO/ u,g2KlD_]ֲl92~PGO3Iu<= A=MrqY4̱*Vb v$0㐢'syTnAP +EpR,޽]HC)8U>iY& kO@P-i\F\ORٶԪ4{n h#8.]V(/8gN +ݸgh<Xן&=)J^0^d@3m";b&%2^(-BybVa~QOqm Z +jMn \Ny]#7$EP_#hm+Dhz qregf_X0J6MW0_0;L=KNB~Mf6>.O:P\Xk)^hw ~p2/XYwZ%Vxlj. v =' ރajC;fX==^5Xp+'y<䱇_[Y&7i? +c4 UՎHf FWF(&ʉ(Y4P iAsuZƒB˒`gUS-2;IĵBKcZ ]C K#s1;ѧyMp(=tޭ@֏]Tjbq\&%.V>ZY MfE2J%̨$AaF'fͰ$!fc% 搇|?,wbo:Ϋ m ,s]d+4@qٗ]LTNV0ATot-K2og6 $LS3z̳\5}ݕp 0L2{&.\Hz;BB"#M 9.? [ V~k\Lwbz^E=a%6f%o6s.WĮrz +endstream +endobj +918 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F17 408 0 R +/F24 943 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +919 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [0 1 0] +/Rect [363.211 713.551 370.658 722.574] +/A << +/S /GoTo +/D (cite.studholme2000minesweeper) +>> +>> +endobj +920 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [415.966 650.459 484.835 662.148] +/A << +/S /GoTo +/D (AFN_AMN) +>> +>> +endobj +921 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [210.089 249.362 226.021 261.052] +/A << +/S /GoTo +/D (section.28) +>> +>> +endobj +922 0 obj +<< +/Type /FontDescriptor +/FontName /YXMHHU+CMBX10 +/Flags 4 +/FontBBox [-56 -250 1164 750] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle 0 +/StemV 114 +/XHeight 444 +/CharSet (/A/B/C/D/F/I/M/N/P/R/S/W/a/b/c/comma/d/e/f/ff/fi/five/fl/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/seven/six/slash/t/three/two/u/v/w/y/zero) +/FontFile 967 0 R +>> +endobj +923 0 obj +<< +/Type /FontDescriptor +/FontName /DRKHFF+CMR10 +/Flags 4 +/FontBBox [-40 -250 1009 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 69 +/XHeight 431 +/CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/U/V/W/Y/a/acute/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/tilde/two/u/v/w/x/y/z/zero) +/FontFile 968 0 R +>> +endobj +924 0 obj +<< +/Type /FontDescriptor +/FontName /RZPCDH+CMTI10 +/Flags 4 +/FontBBox [-35 -250 1124 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 68 +/XHeight 431 +/CharSet (/A/B/C/H/I/J/L/M/N/O/P/R/S/T/U/W/a/b/c/comma/d/e/f/fi/g/h/hyphen/i/j/k/l/m/n/o/p/period/q/r/s/six/slash/t/u/v/w/y/z) +/FontFile 969 0 R +>> +endobj +925 0 obj +<< +/S /GoTo +/D (chapter.15) +>> +endobj +926 0 obj +<< +/Title +/A 970 0 R +/Parent 773 0 R +/Next 927 0 R +/First 971 0 R +/Last 972 0 R +/Count -2 +>> +endobj +927 0 obj +<< +/Title +/A 973 0 R +/Parent 773 0 R +/Prev 926 0 R +>> +endobj +928 0 obj +<< +/S /GoTo +/D (section.6) +>> +endobj +929 0 obj +<< +/S /GoTo +/D (section.9) +>> +endobj +930 0 obj +<< +/S /GoTo +/D (chapter.21) +>> +endobj +931 0 obj +<< +/Title +/A 974 0 R +/Parent 777 0 R +/Next 975 0 R +>> +endobj +932 0 obj +<< +/Title +/A 976 0 R +/Parent 777 0 R +/Prev 975 0 R +>> +endobj +933 0 obj +<< +/S /GoTo +/D (section.33) +>> +endobj +934 0 obj +<< +/Title +/A 977 0 R +/Parent 712 0 R +/Prev 778 0 R +/Next 936 0 R +>> +endobj +935 0 obj +<< +/S /GoTo +/D (section.112) +>> +endobj +936 0 obj +<< +/Title +/A 978 0 R +/Parent 712 0 R +/Prev 934 0 R +/Next 779 0 R +/First 979 0 R +/Last 980 0 R +/Count -3 +>> +endobj +937 0 obj +<< +/S /GoTo +/D (section.117) +>> +endobj +938 0 obj +<< +/S /GoTo +/D (subsection.119) +>> +endobj +939 0 obj +<< +/Type /Page +/Contents 981 0 R +/Resources 982 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 805 0 R +/Annots [983 0 R] +>> +endobj +940 0 obj +<< +/Type /Page +/Contents 984 0 R +/Resources 985 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 805 0 R +/Annots [986 0 R 987 0 R] +>> +endobj +941 0 obj +<< +/Type /Page +/Contents 988 0 R +/Resources 989 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 805 0 R +>> +endobj +942 0 obj +<< +/Type /Page +/Contents 990 0 R +/Resources 991 0 R +/MediaBox [0 0 595.913 842.74] +/Parent 805 0 R +>> +endobj +943 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /XPJKDB+CMMI10 +/FontDescriptor 992 0 R +/FirstChar 58 +/LastChar 121 +/Widths [277.8 277.8 777.8 500 777.8 500 530.9 750 758.5 714.7 +827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 +803.5 762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 +828.5 580.6 682.6 388.9 388.9 388.9 1000 1000 416.7 528.6 +429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 +298.4 878 600.2 484.7 503.1 446.4 451.2 468.7 361.1 572.5 +484.7 715.9 571.5 490.3] +>> +endobj +944 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /DBCZPB+CMSY10 +/FontDescriptor 993 0 R +/FirstChar 0 +/LastChar 106 +/Widths [777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 +777.8 777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 +777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 +777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 +1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 +666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 +722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 +718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 820.5 796.1 +695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 +724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 +444.4 444.4 500 500 388.9 388.9 277.8] +>> +endobj +945 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /ZRYVWR+CMCSC10 +/FontDescriptor 994 0 R +/FirstChar 40 +/LastChar 121 +/Widths [436.1 436.1 552.8 844.4 319.4 377.8 319.4 552.8 552.8 552.8 +552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 +844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 +712.5 851.4 813.9 405.6 566.7 843.1 683.3 988.9 813.9 844.4 +741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 813.9 813.9 +669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 +624.4 557.8 535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 +613.3 635.6 557.8 635.6 602.2 457.8 591.1 613.3 613.3 835.6 +613.3 613.3] +>> +endobj +946 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 107 +/Height 105 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 995 0 R +/Length 25791 +/Filter /FlateDecode +>> +stream +xڔut[g[K2$)0Cq1̲%3i2N)C fܒ=3gι[voz}ֻdko~Pz95-ފ]+ͽߊZ3vՎU;WZA4Fzk%7ފY#f;[l V]3r[1vDἹ=߰w,=\-1Ŭj[Ԛmg-_+kwnzk7F5mKzs[o?Zv嶈[olrU[n]5js˖4=xmQˊ MIք6{bRTc5XZ-^gͨf^SGj-iǯ`#ƒZUkG6\^:!ڒ`$Ua)8K攪”\ Tj5œXnb,I UfZϫ6$:/|7WUb;o.'KL %RCR!ܐ\aL.̿QfN*3eƄ2}|+cq"̑Ŧ"kj9-?~~ґdיGe{ӂ1{B_J.hxV LOby,-gOtvsq Pq'ap&.?СGyFOap. ~;_ F;;m{}\\[n([ḕ?z1nx}V]4  m-x;]o}V{x!˜FNowr?;uHDiԼ+ի qU +ml>ʘpޔPm2=S.G#E"uj!I˟mԅw\ml1L].QǔjcueR]Tv ]t1zY(\$@ t"m@W$W꒫լ~{m}D')%L/P(UڈB]d>PACaϢhC: +*8bmRkkan.g8\'7zV}N=jg(}֜nKN7m%6չHf'ahMf ݒjIm6'7rmY-&]M]G܈)3lFcV>`r:Fsf%ՒbNoi&cr!'ސXOՆJ]|!ƒYgJ5M[t#폼7f6[s Zr܅S)T`r  5j=yS|.\SI,6eVX*!thk'o?ѳ %X}5۔wY{**x '8OO# =b v֐9hcVjm귦w۬-w9JtvS|Nyn]|x3ސoev{Cm>OFgebn LP:VcaJi%a[x]_Q۞e4أ Qw󿋦[`8 tZfZcV ՜b"73)M:m\"=[mDpH4R|iߧ3SoySÊ_#60ғ5QMF˓;-nGcUL?avٳ:M?{'[}oa.oX 0->3ǘi0f4RnX3:vxNk7D wc>+X` l h*nB2Q; cF1N\mdܾTGu[8y$|R{JnS o>k鵧)o  +2SԂ`{ vА;jXC@7-ok%W{rל&Kr#D~kŴNS=!}=\=+kX hhڜ}z&T{]eI'Ca7ǟf՚JXOM0 \;x + Er`}B{,n$ ]OnfhӪUQƊεgYi +.-../<\x*z"'C87j [&Ơ>I^`߲,yő{e+Ek cBd6( +CgԎ{ +13dazҭKQ UӚ-(%DUggy6:n`ڟPr1F?Nkath:j&UZ J'4n":iՅ|md9!.<^]\Ȼ2N-''vM8f2 ǫ5W [v_<uhp*XCCcX# `  Qm;z\p3t +)D x0Z/QBHvgi6dmd[}fVcbtiV]RThT@T-$$'M\ux5=S\XH7 pCY#&vڋSTm%"W0WRuC=e ?e9DHñFl!;hF΀ީ%CkQLh +Xq0j/ap + -AWYr3c!H~3z nMl/yg)5G]}f7qePQn&D==H7\Ib*&,yf ڗ+m:}po!\uh !NrS+!+-wBH:z` uP`H+ʰ nrP - qD0rѰ`Z0n5Df^lL2$> +ay/lMB~\3k^bȉHF;'<7(Lc`~`$vN?ݤ2dMeNDq[0G\nY0noxBȶ(aQ-]x˟Huhrl׸ax jސ5 hs-ˠG8.^AE!c\xpG-^)o(4z իuQsɉt9ðuou]$H'՗ ‹uȳFH%Y#ojl +n{0јɫiF #t>@@ [t9,Pߐe +<.ƺ1kpZ4eŃէGN_1 s,nHzI-IX 'qn#YYO%V… opժ\?m\@Ohu[ky+'XCx6 A1$`Nް r. +?]v&ZRI(QsR4ɡ8 ^-!v+'3aP-=\ . +/X/`% X"L0 +Ā͐ѠMӂ(_d=AnS‹M,Y &1 8 +:<(ZF`xP; fCz..Fi>҃ fG/+pU`fz78g' ljH@piv(4sz=EUMT%S+)xSW@ &L[)`MEy +WtRTX ^}@G6%T& cB;Mv=MGiQBh4 GTAċWDa<9hVO?Ƚ2=%sK7tkғp!$_ cu{zu-&}z>Q|u,! d +?]q.`ÏrpDxx"? td'Cr4aP= Q{n6K~4Y4Yv*G-Βzg"2%^ %GS`9ІC%r +" g/13ANGY5슉]ON')ES8X8m4:RCrB89AAYAACÈ!`"Q6:?*_ioЬx}4{ A =@@Z_Py`P``@``PPxxIO/V$͞n"9絭m[%x&76~o:GymllW)͍7j2םNy=\| BS#:Wʼnn xmV{5`֟9چs8s^7yCV|}}ݖN)ՕG8).]j(Eb1]l>8hH[)P>G34&@H),[Tb"r lنغ}˖-qg?nۺu-o-[^+ !BM@ׄQ!PESGai"::LB;D1oiS_{59,T[~Ec6]0f\VQ-h`g^0l+Y$yC:X}V~6}[ή9Ee%eK+Jˁ +bX++ + +*mܸ?vX&o)U^׍,ZE}6QU؋ zE,Cv[f.лՌN-G[u]owBūk%DPM_ą[ȕATd,2n}╋+ʨklmnlnmonioi:!Z[S_V\YY_PP~!W8cODC a|MO>"*CxP iC8`GA A,aB T9NPyڨ"Inn~i㚍{ tN(-Ònh66S`56SM)FuZCR>FF$W*1ehh + ƴ*uS;Brq]`r[::Z{ڻtwtwt5tUV6oٰ=*oL6gR˕ FCR6J_ZM%T†>\[?}U,TA!'櫓DBelbH}wMۚM\ Nٲ՛cOow͵L,zMnC36D iVZFPbM3LEӰfr)ѐVuq5i릝I$>_=2qylco.lzG_W0?94: #+#ƧM]yʭk;|=hɪ[HS,hF0s[Mv M)f4bm64sLH7j5jmF:J_)WFjK46NNb>,6`iMƼOa~+mwӰ8zkNӘll4d(k `v!xoHj+]Yk};Mħ9{a_}Koܮ?Qd_ZGf?[(~[ai6\ +A}:[boi;(k0;.#w"r;-wv3ffSvܨG_3ץ%RCv>Z9.hc ٘MZD{^ [0h5iժbSzNO2E@ԛSۿiaW]H.n\\;n8;]r#:bR_}ih xؾK~kZ%TKk7X&G}(]ܮJ6(ݘ|vbhv  JnFjթEphXc醛5<ˏDP6kl6TC'X46ti1c[ZtX}8HC3HSڴ9m*]WWuQi(cp]K̫s*[\w^qەxDžx庫 Ҵ 3(zÅxDw.;_~?k~G8g}./q<XÈ.n(f,Pn;F>N D$<(FjҢmԪ2jI`P}_`5ͺMH_C؊P| ֋{.}'8KA砉Aݏ->3D2ڜV}RES>ڼ#b. :ԛUڿl鿻~V]wD;#^]_Lkv[yew)|?0-豇q\yf 9)8lFRѝcb z//3.@kS[M$`|Z~Q|ǾˎD_4?U,RQm>FӇ0|9g,{>#u֩겚 E:,uvӎ%PeWg̓y0eG2۷>0=gz)Ҳ$MgkDgg#f-Kf>rb_U^-.c˳1н6J HAqڃѐqRHkӃP[5V5I W+cAzI ^Nף1GTgc( /ЇřX|x s ͦBWhHaY''С>=۾w?0Cɇ\Z-7h5_ܡ޷3ogX`':+nA+Nk ]Ǒg7XritbJeC]Ɗ.:v@k5 Un+Nq۵Vm8>G~ k,aQx/N.fc97~#h7f5b +$҂~mKI yȑv!C),%\{D+.[|yog@=o{l A8‚"a/F}eethc; M@v#C1ֱvMn6Z{pZ[w+xЉ@:spY]v[$l!X|֊= O4!fa ZB:Ch2_0bh6Cj.\  y8Qo~㶇x. { ~"~C|u՗o,zc_n{[ylyF.(A@wW R bGEs:جR;̔vJ(;4/sz^-GАg,UulNNQw +G5Ay:J \ogpcd 3'hK2sMa41p(6!+ALW<,A~ 3<Y')@Iݷϼ[ 5ҲD! g<"uhm9[ QH-Jxs7:~/&\YM]Ugk׽KfCpaO\@,*g3jth69, /HvpU34͜>3A`@qLǚuu2UPǘ;>{(n֠O~;V|hi ]$洘(Caͧ6̄  AļQsP8 QF]j&DΓcH}G%v- N@b} Fn?vBUםBG"6 ͈۝op[sx@|# _lVG+H7^C\@"t]&vkt^ )XKndW'Etw9J|N/Qz:CAuvR9jc+*hlCCQSߔ4c)hh9&B[,(dީV- !K~+y<9(7^} + WK{.nW~!7|y}tZzh'Ъ. d(Ӫ4 0@2zFNۇnqH5^VL*Q*D 5gY|>KЩӡq UY z8=ƶp$Fw PLne*PPR&BU<2kXP%K$ڭ?ze]E戮O^q!z>kMKA?{ʔJ5@j5vvd[ѱVXT5JeB<@BA 5?7c>סX  ! +A@*l4T ]c<3o@w? 8zVzF =4(X-`R8O}*W4?z$[Y $..`SS_@@o;wNs斧=;ނ eˮxsX`㢀*!}y]  X"7B;y  NK0:5v 2"L `b*)ɘ9xO裬J4j-#>*y +%G _Fn4AE `B+ Ӈ*dX:fޮmdիL(C9yh&' (}R4=O=͟;{4.ݬԟ ]Iu W7]7pc߁.{'WM ? `ۡs;`h嘲J-@mHoC8[ަgmh)jxJER"@)s|Y\Y bH@}hG|T8,# rQ/ÀFZl,v EۤɮdTS*Uʨ|yPS)U`;K완b)5:ncsx]=M-};*̿#վ_xw庻.NoIw:(6$"Ej6Þ` ` @iFh@D롼]ΪSeשrhf*3iRx|Y8_̒1šiC@Dc13"ffo?\ ? a# ݀O֩3jU5:~hMF:JTN(Q*"DP" +d#sz)>(5~. 7p'nIΗ]^J\aL~,Poa eJ1$ɥڬ*]z&RZH);HU*2yb1;EHhҥy1XTI'=<xOy[<h|6PJR')K$ ߨP$XuBb]T>f0\ / +jRxQgIՁze{$ɭ<$̀tz)OL-w..I΄./|{? . >Z ojdD e +  +qR "4PW$+E +d)I*:}ZVI@rGI{~dt彯oۤe]]o8%d~P$.ӛugH{Ɩ1B4Z H`JH$R( ICR*! 2t@\b6iICw+b +!M"c8`4,W -g̃;g[2!={ gu0w_C_KwL^M"ru&^_AI/ f4ϑg=3eBy|)8i8WD$az㣲wCnm7-Pݟ^x$$M \?w+c6tqa1XdXyƕ1JSzIHԣ]!\ˉ 1g:MFpXQ,L @| xn8W)E[K R] ].> 8Fz h|7顶ㆾ{k\',{UgWn8;&p.זp獵9PK e\@a]~Whm3^hp8/('q0k +`=P.:HL(Fi(hED]a PͿ[&yt:Y@ bK1CR؏HhsT\Y YJ*`Rb姲Yr#)_R+["p9޺O˾};kvfu]uY~z#g+΄Vte-? ?@^|{cQo{2'vW'|;@4@#ϝɞ9={&{tOgdKfKϑ,h|!J=/>5{0_̮]6]{̫W +r&]z4w)Y8M$}s>bL9 OǓKux̱p: HL{쫙oYg͟^rw箷W|u7eWH+n\/;;_Y8QЗeP +/|63gaOza=g/L|&y#wSsŧ%'3}38'g=f OA33I%<8ƣñ?`ԗҺS4ȷnn]yK{[?썝;4*IfNf}iJ4w;M.+u3e@q̱$83~᤟S봍68LpƦ?>Uff`Fn~?յ}}S>9OZuş=[bHjgm2%Ԧ=7qXϞy'x'"fg<p#cx ǁľwG|x 曄rU͘}S757#wrΨV8d}3琁xy'RgVNzH'/r,n?,aX'aNbzq[$gHX-XŬ00n2-OLɁ`D6ŦX1[Mo][1`OV`qֺ1 rd.5Gx>>D2<%G8 +GGGGcy|W-2*[|%-}%~)v1zNENeO,DHdH΅`򅠜`dHTr2oS=oίz6hs)ڦֶyFgWiJ5)T0êPZJ" +܁0VTemPklj]o5iG'{A*МYӉHXDhxhXH J' yHT2kU6Ů*~~3Ʌ?;]DW]F .'-ᆃnΖ;KD+\-DBK~gb݉w/Kw/|_|%l\| M_}Wnt idF" 4HO !1$] +:D +g2"v=n9^ZyU/>ʪ#/q7Z+:{sG׫+Vwu~ʼnk_^#:߿x!:+8Eo{z:Лݜ_^D|U?Cqp׏8^|#VJG_y(+ɂ/:$Gz'C @ fXP(XJ(N1U@Go;P+:fϱ01M~ڪN$nx%jYPƟZGȐ3!,E[Gd)LSGr,S{l ˜Do"^{g$]R +܏"C=4! 4i4YDՄ2q/\6fA0#eU07d[~p^SP/ +.=Mf[*2R8OnTMlЬ^{r@ሕRiJSJk1eGjcteژR-B"EB5*px*4O,TlMP)lvЙ=.ߜ]eLʣڸrmt*:b%6}Cx;H30Pr =@e}!Ro7u#H=h³vg*o!R7g/dfFZF.o |ŝz:|:?wW,dKq1XI*W+Oˇrl@/YHx! g(21b9Qd:|w$ޝM駭cл:[[D4G >t.] Ou=DŽGLE0w4 Qʐy <ʬAWt!*bHf™`:Ɵ'RuGycH3l +!e0|=b^SYiiiR&}>{l~_f%&uB`PQc9)ůŸt!SNEGñwNXap=}ɿo|?/I1)]9bcBB/E1\Hg"c1He %ߊ:_q,}f?d4Om~ʵp1&XLK)@[5 q|L<SĪᒅy7HY6st~F@$k,JUIm!XR5J.L(3"x." +r!7/:tۇ$j=>O}KzR/YMJ}@z@0/Y&h4&$o Eb@`D8 pF=}rwhm %33l%9# @@xp蝯 =`WYoh1-ĎO7Oy#A#uxfOsrXƷ`_1{"̈][(d"JqXxxT%'֖|)&gm:up7*ӿsa/=QR_UF[buR}8>t%)[N˔S.(lH8M[5*dO/bCQc?-GkqJBf`:'q$=Usu߽X{Oըɘ!]Ek(MRl< D%hQl o];7g3dsɿUU`7Rt[hj<-ru@T)3 FTkqjJ-ET,xxNm>v/?:;Txx [=Je!(G;ܗ ~'$[ƊeRH~΄;znzϜ^̬[98dB/Z:-IR#r%[M!Ir8̅٠j>iEmVjl&i-HcӾZ$ 5P+ W_o H#ʵr-\ ɍAL7wڽ=7'_x4lTU*pvo0C c'hU d/eK 5b@2Nx6Pz-0f9Y#8/ZD @ 1.hke āQ<Hgi Q4Uc8x''_~Z+swu|LD#s6UMneN`qzTlFJX:Mh]wFWҞaFzs &x PJ ڗEy`OΕA*LyA]ıWïx 0Q'uT+ݼ ژ@^$[Lʗ }KʖAdl!,_ * Aٜ_4oUnU- ܎ Pͧ~ދRcROUO[_@bT P9[1ݍf=*Yp&dD`^@ urh L +?E A @1!KO@F +laFLG$gկ@^Jx_9kT$~`W 2)AKsۄW9|14ArHQ.bb 9vr;^EhyZ-4tE!=?Uo`Y,F +sr1wk5[Xx+yYA-oFYCZ<[즏7bh~!dF"v }P%S1QbKW@PmE7Cí0tF( +3uR{1ש[fIF/<Ю$ 1UW1:"|B9 ɍ1`kz!ͺ_ԁ/cAZFd+b;T+nf"GwD:CXd,D\Q<([X\XcW1xۋ8NZę2VG)dM4\FtOZAjWjfvVn@ᎆȝjͮYz(Ҙ T(Cx~0'C)![zTH$kyTIpVҙ0wO;+Vbw|yߍ_au&KD(,I$If:rV;H` F!YFv,cy[Z ?mƫ%j?-bj졽)q_"+bwwJn;ou[1*ֺ0{ t\Y.ؔ W_5G fp?(!H`CmJ@ +,fӮGt"d!ip)\eM:>fYf \g -s?-`D[8@Pm"7#~$*[Q퍈j.1\:wUƱ%˧s^n3Q-vU+}c[2xDHT$Jn`NNn3ـ$0,xfRb/k2lY')+pak ^;0CDURV{!81k:M +[RjΥZEot7ӎ$V옉b +|-Pmıp#GyF k6`>mpS; +ma8 )b#&d*;--Fb)J` *aGh@lR`_?h2{ݔNGy]h/m\٤ӎW^HŚS.\)w S_VI1QFs4 hD0ʼ_4Z.'Ic[ŬKd`,2!X%r֨ɈxZ׿=<հuN 7`t1( @2c^UDK1ӾJU +/w4(`j1*z T6Q[hxU"?źa{< r5eΦX$S?!pNCh6: ~瓢.3FU+QpU:6Ka\s(v1$\U^!c7y?b{lnw.@NvxD ƀ)R>(h0& "1,;$⮁ Q)9 ,UN̆C"]+V}ܑ@LJh`:a:(l:`w3`y=.zgJvX LE< x^:aQLHc]t!B$*G +8*^M58'5meݎa=%m5@&LUt^95az-Z x>0Pvi]@`=jPy @`򶴌e5~tS-' +f"} @ "xNJi * +c@>ΨuGvtj˝\K}" D!\ ')CA >ɜO4pGܜ!C78fŕK{Wh;vf,.wBi?=:k.TBKE%2fD؈%@Da("!fL=wH:pU +w V̦:DN>a C0B/$ J)+Ll"* .~K u5.CփX\İ]lt _:{hZ#s`'.,pHLu^ޘ}:b(gѠt4kbVԶ[@3gm}W+>wߨԫɄ #1,Aǁ@&Q<bt\j GҹكX̵8(6 'spOXcE1TD0LW0޼oېGA!ejPB k%¶BbmjIU8aDփD;yS0󴏸؃T<'A;TZJlW]~FV e)ɒ"P>k˗!n|NUc"  'm>zG}B,PûdYnR:pb0D"ii[Sf]K@2'/qGB Q zۇ1O8mz=."7I"L…;AiCR+uM4˅=^5UR6!1!X}Z]&fB-U"kM*G܎vZlj $–'݋fv3! ++szo*0 f(=n~f&GRfv+u +Oޤsq' YnrDY0fI3>X:ٍn/Ctѻ01q8&jTZLS+uü(R;xj>h>#B=BJW36-0FrC9:Z pb "G cO5rqQ .pP,ENZ7s7i 8)7L +ث9+D{ j;(;f3?E`:D튎IOcΕ (Ad Q$B% +x{0 +rQ#q\a.S΁Rz_2a*nmRX):;E G«wt& :[{U"woZY}W֝<2hjIi \.(X59J*]Jd-IW9딎:#%-ZHQ#vGAC?!0'-+*JQչi`xjPA1Jj ݂ʬ0A`34Nh; 9sAQ)ܬt 0fpRtARۛv4߰gXA,MB +S{D`γ r.=xs$P`0D7H~ #Ed{ +8N/]Z*&8ؤsWo lXbIfϢhG`'`xmS@;bK1x6#?'|}Gӻ j 5Z., <@ZwkE{d`{ +[̊P!pI`K 0{h'Δfy" h{[{U +-u2R7$u2{5R)W +7:߅S)Ja/mmx T[N=0l2^8W+'Ţh{;UBLN+ɔMsͿi58[:sӿUgw*jL<[ITDMo)Vn*h-h۽IڅSa;~!er ic.\LnngduTZvK|sw! 6rE01'_Tf*h5]f1KC"/o2~woe;[_o݅W!{v+ʷlGElkApe@#Σr){ C4%9SX۪ י7ę =|C +e;O[6]Xʹr0v6663 Tb*!P:BI^ \ds(>]W;~ROD+aß|e/Jُڞ픱wئV\hu-b" +Մ`kj8Mʧܻ/sΪ~c!*ߟoɣ>)dXO0D)<0I q ;E__<[@pnk?8u>xgnDDQȱ]a[vk9Œϲ\fٮ0W.yȧi\-bO!lK!bcKZ~ ?o_i*)_oWWZl|%nЬTy G.ݞClhKTk6ŖEqj#>dQ94G ϳzʮvx)YKTH[L\ړړ\͔K=C.LΔ~ڼ0e7f5=lM2aoN(q&үʩŵϘ>NR)aVvRm3 LŇ)@@o3d0emC)n},}waүSҏ/onߦi{>?i]~@#Ȣmp$x ? +?PPCaajss/Oon +endstream +endobj +947 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 229 +/Height 162 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 996 0 R +/Length 68169 +/Filter /FlateDecode +>> +stream +xڜ{SW+LzڤPMuS^-^0z'3$3 ^{lc_k#C|GϱΒ9g/~q8=6&Әo~٫ "3M0:Fb){:d4b&ݮc5*#@'׈* j~k+LcӅ`.|Oиgo : ؇c֡e0jq!{`Q=E3@'WC:ӧP6حQ{>9<9v.))xBmCQ`<1 FSz{Lg 5D5_5^I i7W{p.UKTT^10읜M:uyεdD vtDl>m/lKO 1IètۨaXݝ%oK- L+Pmb +H) *9u.zW9­UkAQ~혠v\P3.WUn~z$UDqUTcWDU&^UJ7I^ +TJEYR5¾FnN0ba$6QJ7rbPPT8N$EXiYEzx`+[&'/|e%[V8R??hG5yOSk/!d {l"ȏp=@ӬN*4JÁ3_؁U$}?*µOZG~낦={kh]Sڣk'*3}HIંGʧ6G3ȱ%)L.*56X*sqWDjhD@WҫݞiOhԩ+R+UV ^Ŗ@J{$ mc1xƥ c҆;;w8e q_m+1}]|E.p}akBȩgt +l| ȬpVkFHc**5AQ%wJm:"+"=IػI9 WJ5 +[&p+17>_5!x L[P9$W$5NIURc byFf,ˠwܳ)/-V!\img~<ȇ+w'u_%D6EC}G \bSЌ%@M:}`RK؅gqIj(]Ok-1Nq!\LiFT5UY<^4WՇ{ \U~Dɯ2#Gyյk>u(jJjpDQxcKDe*͑kUWGǸ:| +]Ao"\஽2GJqł poknmV;w;Z+̐rxTw"%eD+ºAxb G@,TXW!_k$mNvlMRkᖛln)I ƸrrZnu=JP@V Wy +jzXTTj]:&E2 @9pf՜JZ3x{w{R>ܷ_u8N:kt<Pz|WIlGgUgt>WAZ{5~{ks0C ž@!VmQDkb97/p@9> jjޘV=nԥw\ߘk]\m@S<~TT?"6"innw˷E6qEYd9c)V rYVÂq&|UT7$nm7 \lo@>42$ּ59\Ip%Iuq\efN8C"tL[Z ;*$ BM<%ߛ>q\ |k' \K2Kl aݸ=Qqݰ-F*J6%uaW+QQnbrEY) cS?(KP3,L\LUR?$koWŵfA[eHҾL^&Fjҽl^wxrrzW8!Ejb CU<#T +A"4Jd*bUVgւzNY"K!FFˇwrrN$%ր>X[MޓЊ4ҭ!C6p $p]`!dȋAEƴW%w۝GkDsq=b뫽4鴴G&'30AÞ1HHjk@UZE\ud\ "\Sk0.`a5F(F! Ӈ賸~5D=':pe5z5Y` k%nIݐ~(`lC\ iEJj~w3se%[Н84WZFYf#r࢈Oxt#P*F³1@QiMT啎]f*(,A漎 {tfӏ&'qFv ŭ$Y Tvsk\Rns:N2m^!WR$YMyԻ+ootd3?@,c>x)4IrY_=Џ*(ƵiϑDAa҄|ҘS#vӸ?y:@H副W@ \Ϥqdj<0O専)W?=k-ƕWĪCkWyWEc.$Kmx|lq#7E G~6ZcV8oq_ŠNZ-w*]쨈J'!RUVQa>_fX*I4*G8ٱW,OowZpG\gKK\3&ZARYbXhCi&E+W硹<\5~DjzkӞ 8DJX_ +=4C] \;6 +C \kDƸGfKCB2ն~tAމ=^pR)]^@+t]T:(Br-e;E6,+#vn!H7K(25S#՛X(--T]ʼnUϩ@`D _tG/(PRxvY+\Q?E +,Ff'P2&VVє +2;* +PaZnEz\K*H>EIչBFZu}+m.VY4j!\uV?:8=2@UNo} @Хcu5a 2si\j FNW[Bβ +J&Ä*UhWRn4 c_HJJ\'Ca0Ma4 +uP& ~G\V}0ӗ^H+tl=|Q +5NA]Pmr o!J+ +LWcjr5ErET@70;גnL>`k_7Mf=uPPnWxU9TR ~%<88P /GS3E 3,Te;֐~yLo HJ҂%+$)Izz+IvS+̼r5AȈ(-8%:0Uz$!DE*T+Pfۉ@-c)I-ceA`\\񻻝HStahB}ppc\0#&w"cH2u*,|[s'&jvTci면{0i-bhKU~-fG*H \\ \W+G!KO>oҖw<3Zrxvn[a, TxXPKy0jTf{}TUd\3kwWeHڟ4W㢍&ՃA^Dql(Br[㔡@b @MWatgx+Kn A]{C5}3•pWA2 -AN]b`Jtb T v1T jo6; % 1 +Pչw̶`Opu=V\u<4|whe``5W:~}\Cgբ$D*4FZ[DaeuRbƈ|ivJ@"ЁY\ɱCmbj@?Qu'֩a`N I5W[Dkaup=sUN+q+M0Q @c^UՓ*XJHLIF +b5|-Bj3W|v.yMD z `WlʃXτ\,*"~( +f!+יɃn(0[oo`oƸrr%hu.䜬"HWBPGC: +ܸd"YYv7BIZa\@,]P+t!1NмFk )S%|_[<קXUc0\ӛC>V[ +Ζ~cz]} 5 pjKH@5`W"Դk_鳗Otk)-|KGhrA~$ndz@4SbH4`zEw7 \*ȕjJk(m ͹TI?EK9z)dIo.@Jr;r; b•a[ne06a\-ggRjү[؝8TQ%JX~H'b$(+n/no#-j"Q% Y_o@vepS]͛7n B=Z +bb{ߙ}k=r4'AϾ5}귖O7puk:k$q-Ӭ&E%c!b1E-:@C=՟#~P&/۷?0 ;-sd v"w]0Ww]Mm ,(@,FQ +E94=[|l-@ s]%5970[I2H+A,)D!n<V{{7#,ӳJlPqq\ +naMοmL}sOқSݕ罩y(_߾ε[ji>7GklW%>eK1qW)mw +{9E K#W-WvD pD Y>]!w=t$Ν{&!kxa_%yexnq_^a<U pK!GTus+~p{'}ч0#!O_xE +kV-np>[ 坧.he kԺHuk(I%r\.w- +s,2W2:X S?YmFV'`ɫ"He5[`b0//(m(Aݻ?G0#Pd 9UP#RgcX+3vcUŕ#ksl# z7*Xe Pt WBʁG^h+0.PͷUɃ@9'yo6טs_ݾ E YGأ检kcӾ$rWQpN FVauyzfYU| 7_',՞b7֩ t!wИѺ?G;)94`[6 5`:ts7Ae4<^X9]lC qtaYyȄӁ{ET6Ȋ@r"AP>qц kGENu9rj-yB' q_,(+FȆo CibE$֒İmr`z+Lޟ *ʑjE0;r(D"JO&.r0|>b$#K JH"KT!̠rgm p󊁢[[i$. Dv +x]Ⱥxj9ßK&Q8%TK:SdPZWp>؂x׭(fsӼsSٝ9ݛ]k}Gմo<sS` 60'.ZXFZFbʵ|=x~H&Юjk\m{SOO_=cwJe +* xM@x͝(ZEʍ?s)~==~.i^jYE͈7UUǏ)t5ڀC8 @f>2e*zg~Pπ5p<:~M) l…;>?nk[ndv&V&VƼ y=̮uuuAXӲrȤJI]5qNQ;[[71;6s:zpXY]$FF&z:j;z$ɺ2o|ޞM;:Q+[ IBIoaڒ׶ B0ldnØZOph5 EF;leO$.xec>̛U%u$InOU +MXk fSw/6=2/eZNL!Dx?vxpqg1\fuԵ'\ۏ:OaC1x&ԧ kt1hzбSh#%5%o=@>G|<:ўvcG!ۮ/n':=}>"8<:Ŏ@G**F<Ӄ@׫==*Oӭ'wQGӱ#݇vva폎v|l?hwtM ]Qd̅kKސQ*n2~FՌ۫w673:63;71:666P[3(SZuԖ{kwW +soE9~?u*)ůr+~fluW~h̼lHv7vw=eZJZ2a{-v{)9&{y*#s'.\*R/OW񮭦cu7RnLozw=Z;ks:,X{gMٷVagfwi)bs%93u+bEaoGmC1pfܣSDqS!F~wNFcΑc8fwGq8Jlۆf-6;f9,V ۝ᙉ lZgC#H6G-e(bDB lF;!25u[!5lNSQIahp:|fgdrY  3AZ?s ;@ę/!ϑ*Z}>r&=XCn]Kjդ{H >D?+s~{;wIJv &"5p~? lApRZ`IjY&jH9;0?Q~{{덷s,(ɖ^N? +Va7cǧ~{'Ykrabƪ;F<[dZ~d#󗷶孜nle,xy9kj :cÓ{{_v49GfGO>A>\_F )g +{_Ȥ1mǙjv9!t4( G z @ {{ =􆦽)(ׄrӾ ;񆡔 &'0jSݟ3o+U/kX`j`` m [2g~e-Z]0؄`:MV\˻cp8L_meut;"V7i3h7`c=e!:powVS"HOw7usŧӠnBU-I Q﯏ {FɷWn"Dү;dhضn` [dY_N{d4ÑQ/|3P8Ǧ:ZUՍ*7773613:6 rdžܱAwn, E#ё MFb=g^,+٧vOz=ީx{ðk0r<Ķ +:A3p'r A7D {uKtyBQYkhzGrn~N(`f "ك6G`ÆÛ- |@<du6d蜳'$LƱ-#(66n ܐ{h#3_>CCTIa5¤E֭޼c]v#}-<7\&ͤàM ^)wH:>t0q'/,cc zy75Mea >a"F޿=Ƶ.k}>1{5Wp=cCYRjڟƺ;Ɍ~ 2GW?'_W?gߝ>} i#G8+7>+_ե+_eK_.aۗ/_|ZBׯ\}qw\^݉RL<񏿺|W>'_^+]~xk_;}.4 ^ŋ_7.^܅fgӷjyjʂ͛M{.;ɹs_ _8vrܧ~F/\_?ڹ=3:{u ;z*S$/LBrJZrj*SJʋ ^IIh>YY%O%&͇'žSScR H^`fIIJҰҟ_) SRQԅ)/ᓒ1O>on)(-5 @/@4"P)ixY\DOsԔ >X\ +ůh9q--g-Z|%!^/g,^\ir%+P/~ /aZ҂ V&1㗿Z4G~2k +ůr/ch{^^Y`B  d9W&QEEX_yw[7pbYIAqX^* +A**((DKbW`J{o y|84H./Q‚$"(ڭ\g{K +dT¨xLf_X./.e2ya>E*&ϨCER9%%S$+Wf/{d{+G7Ҥ\>GΕjHZ\ $,3Ef =IC $]TGb+Eb򮌭I˖Zܵ9OA)bcH-H Kr#xaZSDfL7d]Y{R/Y. und$: +DDl&rCdBsL{RWT.}"ȳ +EqNjL:%e^٣P/ Ӥ?+ Ű?  +P dS#Ia偭)-Ozmfg"_( Ɠ߄_''/4 {Caf]SE^ΤҊƃ1_8<5xJϑ/<>}٫kN.}C +'JqNUⲩIt۸dq˸q.^~`ᰟ):Ғץ[9j^XnSFUHFFU eP[T=$D^;}yK/-z9Oɩ)֎+Xw2,ªbHR!t B .֌>2Ff?rX !yBAĶ/=0߾c5T^ٔpG??CW`@?Z4mCu6`#OD\y@GȣQJ﫨jNbݶ& /_(vFF;cEqˌ1@jc2zP9ҡC,9G?xŌ|s?=J7mJW^Qd`L+4S -Hf +,7Q&z.7Fj Dbj(b=Yf!l* Cx<9=u,Jd>¯+q0 +,tަMN@|c\2#U +2( i"5EHblBR",Krڼ3|0N71b DY23Eb%Fd(qbsJH IY^^Fk$ ^xNO.XC7xic3#H(Em$AŸv19q [TGBAWFUL\n}:wstƃ̓otΰ1"&ghhCzXjs[9qc{c7n{n<#qajUm7D&M4Xֺۃ[o_/Rwj|(oڣ0M8=WYJ+J{inW}QISTT7έD$pCan+Q1 r*\XNN]+XX&F^hHr@K`jr[wEuchoHnqhH2.XEfVY0RH2!Im^]j.9V<]3(:٥NN:envP^ R p%z4`@3yĥeEfG`}S_5˶ghW55:7p\c.5 |Mn[) &Mc 95Tgr +8DSq+A\DR ԘWZWd* gRR.^Εyh2Yi8W$r!,改F|k)ћ #UjgXa`0h2%ETZh0.R_D]\$:Y,9UE\NB&ԁp'+j2~&V*C`u.m@kAB D}(᮰s)5w9ȓ)RB+CnckOd![%p=py +YV02pkVbc[7ٓwv׸ݩoNygOںKzU1ҍ/V{{TO^l6$ڼRl1R3 + +j1hcVO5ƽ\|t]f`*T'2S'S_\*7JIbU^CW+"y9c!>f;a\]r'-ø|$Qq4ٔe&ixP, +vw`U*F*G0:FycHx`\1Άy*$(\&FbrKkDuh@qNkUer~|1dOB)66q EPc@':<DU+r`l>2=55KiC|BOט?\] :%p0$g>:zV*\ɑix27#Ufp?фW Il)w} + K7?_uhkmN{w_\K)o731.ѿsCTz2 +DWa{ o^h㢺 `IX;' UNa_ibY:f2]Ϥ$;Nr Fmv j^ +n1KԌ,A?BJKW2#y'CA8r" 5Kx,n[nTX9e&40.2y +LM]NN~y2jX+>rVsIJ\ȏ5Y\7w}*2U\AJ> .IB:Q1zT/e\<8MOžfg ħ.J^bdj%.FQ/@WjկVsգ,A7}w'E՗몯ɮȶٕnSͩo_΁ ?4ubZ[`uSfܴjBP~DžcX7p( -+p2 +[8}t;|=ºwpJX <XT2j7 B^9%Fb ,QS_Y"$ESC*+ +Vϝ/D[9 5{U8x6WchzstWpL5ҹvpHB2CvQO`F'n Z@t|&&:e5QQ'0`wcI]>km}GNܫi@#^0\9Vt5+Ln0.flWr< u|j5nNz{W2$Nc"_q?|"jSamW-)|:8XqVnQ |}aIPiC2΍y=C5>9_)~)q"V&4B,n!!kXBȯ@=W`Dlbi+)ɋ-gk))n*( 94>M(N꽯'ƤS}菗z[{=q#ґ7 6n8YMO5X$Z%u 5;UpHS.~pp+,vz[1t}tN'=ثm*vQU\c*Lya\BڹXH:<"1]4Qn\TAbcUF?Y'|J-%g <,:pUC-},3C2`W8&*Մ!)+q݊00ܣv+] +g#N0if G1*PXёKHYUBJcPi-O#OȪ#p tB_n؆9Q=8j<" +L A>ܐ8'~Eo6;=ixOZ{6#UL-4q*+G8=pTT|l/Vq љfC}kJ3@[Jhp F]n3/&D4%F1рh;SRgYVi]; 5{#הPw-jEo5+O,86D@V *D.)A`` +:s + + +%T:ツK]m^ӻv +3ڦ Ux +Ttć`54Q xp:ԍ4 +vy6[rxJ-_ +OQ0 _nc!}H}.F((j m%O:|6i^jUuD 0p l@āf>OsngW @Vg|1q]01.$ +kVq~JZsH0at@~(?BGC6˫0ln7E̓d`ׄ|U-8 p%%\4)#lTCv{u7 6-7)rgRR^X+ձmkmMp|ĠVhT +j0S$u fwi2m{=',DEj.RޙOzFK踎@7-GE + ++N\@91G酉[Z(hUXxum\= \#I(|pY~R5 ˧qEzҏP[wbvL>r.i^ZUM'tV? R(S Nq +o;MV9ןσn +%,ސ +M4uV@U7F4`˪[րw 1 6ī0$)x=5AO6Ӹ `p P m Tb0m|mǝMtYlb8#Ěly.ӨB O{#0蒨}OFG=:K?aqeoBıgZIkPA:֫bף瓒W{ IŴfB!Z?Q^)On@prOo~1{RjвϷԢ=1&Z&t!\GדW\9W +O +2(|ݳmkP|K8؎fq-*Q B5V-l=;YMpNoCDmA|\怣Й~Ui=A>} 2t:EoC]a\lBcWnPlűxO7| $Tk1@] YqIXnBT&0X)w?ȹݑ5[5 )XfA%+|= >llݳB =#)AOWcJ hy4MDN50E +n ;GD.x/;V}D E0+8TG^HJZPU6Ҙc^^X!%{sz_p~дwv%E޵_ni9"puOZ Sóމ[{>nN؅L|[h콛XVfve'.W!Zdxh.,`/uos6-4ijDzw[}w33B2\9\tj7P0.\!;bՊ |h`#]u{3=5{G& \uo_@* a4WF$A}Փ V]x)>h&}Qֱ\G1Rg$OL%kܵ `>ng:kpBUMF?>t_9(=[39o7ӘAB)ڹ݅X9vc.'O]Ÿv2{{qSb;GZ+ĝ,vK#GRZϼ 6h.qm#91D1E QUͺQw+qW>:^ q4ٹAĭY\q\4{Gghz +{@hM r`Ar#T*H+G\ג&f{7/d?,x&实)opH:rWujP7׹i{{6vWI4&]V;j^`%BݺT)60;בZzg#cKj#vQnCwp턉 + D9119S& $%!2"%D=?3w?;$s罵n*i>N}6583 U uغ&ak'")(QɈUS"A-,񅸮 s*.t ]j?a`Ɇm&@\',-+k2֏74~ [3aEUi-m2]ց:65YЪ?Go#] ] ~•qݾrKX7-k/*ڹUZV#UZSW?\gŵu[14Ծgm7 +[^ӎn$5N:xZCU"ٻ CêA.F`&p,~KN1HF&xW8'5m!kld +_T=%Ƈ }zh ܰ!ٻF+s?`tuapњ1p#);'O" V'ߠR^" .\[ +[iTf00{2:\PSiE&\Moe- TS>9Woծ2cn80k7:qUHF%1=")[IK;,~ݺz`q=U2=H[F(EM탊k|-կr|r*grD㸂b׊kWyp)k:idui!ؽ\YٻI.j0Wg+}#\k`5Õ +qm_Ek؋m5 3LQ`%0TZʋ%E3QTjו hv +r +ZD3?6frKp228I$ Nn@{dV[MU,1H +tbJÿ҃ZNۇZW}Q W40 +نfkMiU p'\&tfο/bqf[`Ն,̮PnuM:#HMEؠjʔEמ[|ٹrs&P~{uò:@`&pP9r8B5CÇONIGK<ط/W ^M +C,̲%,jV8Ybz<8q'dU`%g㑎8%,=Fpt(RdPUHp o׃ȧxg1H}hM^KQMR%pPYE6s'E;amU"07U >ׅ^/NւޏמpAUߕaN3!<()1\ +zJ̪ ۼ8nߞq5:V8B/z~{m8}WAK+w/zIIU+̮PGOW(zޝ]tL\ҧ;ȳ>XɲVfZ٫rfȚ}Ya?x:֎00Jn)b1{0a;Z~6LAR{gHWJ AvuJtGh]Pr+QQFpQT(GrDRF-h*&?W:j:.Lbz{ +pI۲uf=?T I KoޫYIl1rޑ=a_o@Q7Ʒwpe +ˮ v8ph7tv``G8_\s`R/ljÕ]:0`Ol4|+C[@kPRi05%CFmjp;X +{p UW-3J00=_o(PQ-z* ٻ=1.{o8tzɭRt&exϾ({OY׫5B{‚Y6_/6eOK2+0>rFA4Wys O?p{5z0Қ- +NL,jW ϠJj,P[3[;xȮˡ=JAi-FIib/Ij1*P Opio+RB +U +SZFȨH%Ұ)rzt_T'~KHp%\YE>/VC//A 짌 +` z:PxPp#9 cTz~MCvWxD"猸BΈi MQ<JJQX߃J/3{/얙Ccum#%*v4as,gh4ՠGe`V9RCGڠѾɮ2r4ơ.U*, vk̑` +(({o`byE8-,zjt*ͨjݳ0jY[tb!j,/umȢ`lgf| }T9/2]dW|LCٵZ߭y0 E4b^ (`@MܙU+x.Z@uh݃$;ˠhe |e=8D)Z +wsZg$P.6+WV0x++cE`%C*P"4{PK9}ۏ#~io?x%ʃK+e -/p ^wćBfJ\Y:+\/>fGiiś;7Vmӱ.} T>!g: 6e~eU^nrv *`=|RT0JDW`Dz:aNPWkRMe TR +r8 $:Z;we_u6Z$ rAoձmj-;7wl 6ڰcMnۖz*%J_eZ:#CǹR6c]W5?@f4z~ G!'ÎEfD :ˆ*` ,d$ +H)`Db +6p*D ++Ћfcf|#hI/R^vjםQ2j˗9Լ/mߤ Q,y,y㴈8> &? :$R8ȿ|U=betu_Bc@o^ F蠌>#M p>(uveq5TY*scI]77ʚ f#XnțOQX[;toNpni fˠTͲ6,d_BiW@4~٨ԃ/e- 2@s`΢ ,2}fwTMh^ |8I8K阆| |X;2|f{ݘMΖ$l /M^Sz@o h)YSn ݻlB,Ͼ!mQ3w |b!lg )[[AQȷlMުx/{7w% +$~z:ʗ^V[ژQ>wAh&q`썰DKuX6f~mӖ4:r`ṫGC#Q(:f O'-C/CC/G^j-Cm\׮Oo?5Su/ByvMo2?M`5%4s7$%+m;{IgFxMAm +p.cs +b | +sاk +E9W͊8'Nʯ?VŌi[/%S@AZxEMm&yp,077zc/Be5C"Pk%O===CӮYfn`[26n4!5-]R;34`w*`~s5} ~ IVt[;\$[bVǢO3ܧRYT TYЯ43 &;TMI9ǹ-*`[ Zoh@{wXlw@6hw.sgKmZ{;vj˗zeOcCNf/;I?- +qp5z_`v[w7 +AGF&ݍjZ<8_{嬤3X'CCN; x˩WPo +q`zg,VQA;x?xDȸV>tG׾;C"nЙg`/c{qIٿb<`{gGƒvp?lTݨ[׃և-Z➹g_ o^p yz­Ko_'.;^{;=Ғɤ Q~|Kn^p9[q,soyߋ^Ż.-<~/_GؿPsxś/8}ƩO~|={-g\^.<;07v+?pً7`;:Mga2p1BAl -`{<|QkH8}DX! +Q•VJX3(KVnuMgsʔ/7oy _0w<?K?x]4ޒ?; + ]Oa+|rz l/8: l`;Eh=f* + <02JhOh#-R!zu.@_8yNGɧ?R"@B Q,whViW;\++%l!dŪ6c7 F3d0L7b[^o{5ť-)vMI&w6zd#(/MZҿnDwaLz0iu~ݠJmu?+Vɟy;KY7U?j&z6v>n؈ݪ(b5e4moH1٢ެڤ]-LZ PAᡂ#(G#͌Z\ZןiߤcS767GlDnтآ޿f~>ö}5Q{Nu=!ԡw#I{OGtGt;شg`TO" 40Ce]!19䵫̆ߛG^0B;Z4MgA1;{Y^gzgR]'mؔi2 6 h^o, FzGPG7 / tzM5 +;g|ؚgf&uV{`h +Lަ(ʊፎ<++G4zDC|zʎ~}[2sw?tFz6W$^ : +/ ,eސX;[z43ȓej̃W*P[a*uL.Cd!@00Z{,=QUyG~iR"XkzC?K`\[P< maƷDҾWڬ[[Ϭ~Xs5&jԈzBi`$̹K޼rW7z*x~n9s-*:OB"bh͔0y`R+3NO3M%#)bmSeKGjk-j,qjRz~\augݵ/UQzVPjsBn=/"kh/kmsM{CW;T' : ;^ŤnرӿzSɁ5TUpJ԰'2 +zBolSfz.0hpsKW]q߹g޳ n=uç_ߒumKNk[e~3oz~3G\ ⻫7߼'q=.[!}p1&䖄L >I[;w^=XuDدR7PW=v%050 9؛b-VJkđCGtA]`ͧ8|fd.?3_ knzQɓʟ<-߶=wʧ a-,4ž +(‰̌ݮ y;Mj l VUȗfC ך&K,Q`-Pu"՛>xY ]3r ~h @P^#%Jg|\U]yo:?9WwUrc {pV> H0+mHF7167bSOܝ;]h?2M%ܺ_xJЅC ؓ`Vn )![͡iݩ~F-Ffm{w>:$zl^__2 +U/O1lmf$%w''Yv%{m+}GEE@<~Rh1*xTp9EFi΢obN<}eœL]D q}geN2=heh1ylDV& +@kBYcU ጌdg\Qsm]X&KU+1:\@\Ƒk'&{O{ +vڐ]M~ qPx VQTɌU_ɁΘm:pJinHHɵ$eR3vi[ ԚvaZus@{ΚZLJkg0SIJF\=x .8wp@\m- O 2W<*$VH[)#ȸr72AB ŠřH(Ȍ]}C=c[6j)ͺP&eh֤w!q[͗ٿ~8W_WN)d[S`R33 jLB:JDgdc$k254j5wyҗuCN:'򳉋s? ;H/\C:73 B\?jܨ kp8= +)I̎knn>4=hwf7UjENڦV~HpmG@}~\Q Z/s $b=/'2!Qk,+ʮ6EHޫ{׈M}Y5M{2{?pbݡy=_'43 3=?)hc5JiIn e*]pU WeYUZꞈl+G pWIn\2L<['rBb.lz +ٳ[֪R)|CWr:gWgŭ9W^F +ϟ_x(fדwM)6p8AIP }GUӲVZ!` +wf3pr _gfΚy, oqE}6N^ꌃ']@I:,~OYb՘އ+rc:ٍ#,{jg ?]27Ucaylg}|b$~ Bv"ve5 QY-nD{u#= u+!)-ckי4'%''נh?g [,a$ \pׇKjdWH +,'"aPx5bW%CR8+\'HrWDr #م 3Ł2|}{ְ-P.Jn ]X_K=䂛.؊5yTJ^H 䟐<"OIR._4* 9D`bދ\BA%u: ÇNBqt#3;D#KUܵv+럋0pi(5ڱOZ+&w:-4ެS>!M/xH)<(pP syI}t\3k@%`+j$U^Mc&8pER:ȪZ_^yCaM}B&>)IC2/xgWw^#נb4tZit~Mc*ZcUATk{ 3uWlf IGP `D5ة=u[YDq!\ZU` 8>guN(9m\Fi[;5\ τv4Փ}㎊/\ ,]@muǑ~»#c`^^t;B6lRMC״&*)Rk@\=%x jb:*uJk FL YQUg͝=J O,'*?%> (˅XaFשDBF&rd7Gdw5m-9vV&l)3I<_?&PkLTgTGnh\5$eW/Q8q}@ii4VrD4Y?m +p2wʙ"(WהURZ +p5* +AJojpElCܫ'w4=c0B5zyUK}3t#%+]Mq]@h%ZRᚭ3 WԦӖF]Q!,z=ԪGX\#6a{O ژP&kebljed*w7n|Bd%~MGҤ&'D}㏒ q:AlXJm{D AWҴi츾>ȵJF(n0>PY/;^=eTNt]yKVqKL_&V;pה~|薠*M|ٖ5oj"N;O$WoVW׶RZb^LR77>xT5{Jnts BĚ ^C\gƱRS5Cf;q5ja 3q\1;ȮfP4u BZM%YZof/3A]\+1\5(f XvU콡ŖjfeQOJq\=;p Y\A% ]qNw/}=H:s~򧯉&H$kn~|- hح0Fmlgi++AI# \4(1VM2ț*!P#Պ83f_J*4TNXR7qUC\{DE2ST6*Qs˿]{jHFJӌynSH H`5v):G^ju-H^:P ,Z!^dζ "Vo*2so]8; zfyt?qnie_) \Otƕ*6hƜpA*z[q?$IY0 +M,պJd᪃vLXHvgX4i\z 09'fcژ{ ؁uemTnnaw(RŹYΤ|V< j>{.C)`M!iPxEdWT,qiQR8t:q'UvuSǂ#9Hx$ |4T~~!\>  ׂ3;C620][!oˍ+a;+M9LtP|zCT,tMlt`ɨu̪܅phތokk 쇋@JtIR4+ ?'8ug7<)o./ῃ+frrKgY562ᚑDdC.ue~waha[a: +[M!{FVXG-|Cjӽ‹Þޟ3Ұ;zÕ ؛Yikl[^Aa;SwZܾŌǎ6Xv]oj@v}Y@|=-Ƌ-Y$XA/_DP"$\ŵ5*']QAv $2L.#+N,$3v-`:z B{L fr7vi Gݝumˢd< [ӟ2VS;z><.(9+T*PYSYpeW{Jplh.R>cUB1=>&~K~qR^/ׇ +z \߱ + !\ 2MfV[,^TNˑWC\ͣPNqfK  q_J ~KGVU \ΌH~P (1{O؆nNxiy<ݭg5AIUX(b |8>abO?+qڴj;X{Us\"VJ&qIdɵt5ټc/myUW.W1\wJZD35;$7  +]Z1(>&O[SCFUɻ5q TɊ<WB$Gj  e d-ӽ8rjHe~pZh/f>.Waj-檱b +p=u*G \\ql쎤^.enY來="Vά"Qݗpm0vk~ouc PGl]G]zN +jݷ >Wu]o]76d*2w+[~#sOSЮ A4RxVyiS?ILH'.qΪ}LI[L" *\'8'zTܗVWu ^>|lǵLͳ#HS^JVyNG?/R (EVѢ@Уj=bG@W+WKޠ~(w~ X܉2q 'Fc=@^\} Wʀ5FZzXf;.kcNVE' 8v ;ב]1\wDu'+EitcA=|: rEWWǜq]+/ k2eg m 0?/?&9()Y# k_NneĖl]'bYsiᆽZFw}FY=&܅ΌztbaZ\-1*Unk"#Amy/94M X2Nv,m@kFh/ׯu*8ox qJ|oKNuNC˗>(H{zljlF qt\Q现$}OOS8DWX+e%׾bܡ#GNT +-RJVSa +ݩ6vj+27!{szYn?w&f}BWWX2?ye>Ĺa1pw=js| ViA +C:IEyI3!Ww2p%vupᙳW?J\F9A=fk蛸FrvܼPG у2ӿOVq >vKo6 :д0j"Bho%sfzUdõ !5Q%;u +d;BRs0#)Zg6듷_U5*>jP`7y.-"\|s\pS%$&_/Kzuo1JmnFP~ %"AH $X˯ +Z;39j5AEY!mfLR09&{I.8:0?O=Ǯi|`'SB mzw|O+߃ ]\D8+En{.lXF[?JǏ-șe& x ߕrZqTb=2x\ԏ1\;qG-x U;F!ܼ]0+hTkzq[C*7\Idrf&uG?X&2J9:g+Hs]Gt ׄVZ2JZd39؛](LHJCPɾuwO??_u惱7[ +*Vpr%%=;Sl{EWqXm=6 Qq}[Ap$8 %%`CmYm?Q4MA߇+  _LuA UO sWhaQ%IS"|#ya痀oz3AM?*O<<|l'$]tyU:Z.uNeb6 W/'M$B W9wQKB+EGi+=DHEW%An15 +ރ /0u$ +6Fʖ+z]]2u8WVCV"}3nɇ"N~U.iV낝3"G|pEE'R^?P $N5ܹ7AX49S5s +D|0ffH|`9ms;do}Xkn؆+1 t1"Gaoc=[i@ \/v9w xM0 Y=9(a3DDC:k폮GK/58&`OsO_Vر*U~qAmް}  , c~db^UVyHUq*JZa =+*Q%iRɭLX&µ=~a"ߧA\$b`߰*0xEl0dUƆCv?C{IU c -``(^ ;\Ӂ+Z3g S KUaIlj/>-U 5{3}B \e;u ؛ 0A[h'\ph-#\1bjUر m[^ҥV Wl6O{ƛu}1U'fW k_Ȯ WzT_4ZWs`&nmr842د1veI¤욀vxp׻]d%\J"s ZPM> \v\A%yo*kObĚ݇;Jy:b2 T7h +toz~ ǧ2O>ϝE6\ܬl,œ\\t ]*b+ O({oZvwLȮ&.M ;i5:5n@l`&vbCg" +WG38l|Q7 ܏pAZr s( wlw`|=Qʈi `wNu \*D:=Z8o?ĕ,_[(WӢ@WKC-ulLuaT9guWut?)gܝCg59[[h⯩ ;%eWX ܺ+ꁷ؄&ZI ĉ/HˈD\%8Kv㑈en +I0 +zT~? A@]ǖ CGa x|J(֞\&[{ZrR*S^ߛV٭5(̥tR2Q溗3x W/¸zsJ]8B퓊mE_?}EIC< E~N&q^&ltY,=trIE}"K3XϜ-B6&6-~ۖ`&쭕Ժ'5=+dҍVL \-5"\RM$ڧhX𮽁'10lUR*حXA1-#hB -l"+c.M d#.$ZpDj {jt]=OOI׈yxy0b +Pq]CM.cwVݧF/_եnikP?Hi#CVjӹ^^.D´R.^z3H?}|N@,JIn|[iB%,&$nx pbd<v'%,υł.>E?hC +P+7RHM竩w${wgV'yjUX[ͪnCZ TFSVuɛzctq1U@t{qD"Z}ݸ¾uir[40;4;lUרb9uꔏ#DŞo}^H: /MCc9y;QUzTa)"A(7dzLo `ӂ1-Z%e|83/6 +:J3ܵL-}GnC=V#V kuGz&9@IU:^)EFX]mOU ?xdMW.n;54<cKTcn.;-یߦ/>p_ýk[v7~BIh!bJ L55J`mz5wqUŒ-wj3nC=[9>GXZfٿuEj$3ҝ]|iqH}ooظ' +eȓg똢Z :oGTY'9>(OsL(Y@nJ~-8Q +oK?[>aI'~9yaޔESY<%?r%:FS7£.8}![tnQQcvzjJjekIͫ'˩*,L_j{?JyỊ/W*u.k7Q^߀]z0&"p-+j˘v+oܸ~^KTBВzB@:^eR6MbCRYZzˆ0:.>fz4\wSHFZA.EW +R S^7 +f6hҚ|?6UPgbNtD<~cq5Q'hKt9ӱhہsIZy^5(-V^!u{ _&?,(|^塋'ڏ&Nh9:D^cU6t$HpB㡄É#[5*6;xU쳿_욚S]ͼuZIWMzQͅĚ.zᢚk/ٽ&>635 uFBۤrkc2pg_6sUo1o?$r&B͙pkŎ ڏ$oVsEuՑ+QG5G^V,ӊڗ <?JxSFVJl=子_uB死6o]ܵs$xeζs6YyyĹ;mxXU'F Rҡ&1֓?myo nrpOmf{UؾCvh0nqzmb6[MfV rQ߻ n(H n`[ly!]:eA ͛#BZ&- [4`"hv9V!k񛞎2ns2jK2'-J)4*iܖ6_2)$}ꐽњeb};mڌk?xWTw8hªdk)"m vȨ&X"o2>ዧ.([iN'Ueػ(M6ݺCömo2!s0nή4j>nhwܩ;L.Y::naPX +k2u@w6\avzFwtÎwS"m.9y̫]ND j/z䟏?k7/Y`s~M4^ ^v_/si9o?z~*eim~GiS &$;/ Z;ތz]lkZ&77 jAmrTG;՝VY,]=E=;~[uE+ڜ ?ru3]OK/Ys?eg |вs;{u !۟nN>c]}N~~S֚aovMb[;l3)hZZZxh[ma.1r,'vlyEݻ~٤g2/o$g{Iʋ')/?}Zi y}&6o-wy'~Q#PR>~N7e=Jr >$øQě/N~xɟ^pBC޹L|}|(ޗ+!~`v@!H,A{}|>ٳѣo~=J~a3>Hzr% I txK~'_'?ʽy#_Fڂ(x_!ߧw0\ ]~®?{3%|A5lm qRNJR)ѣW7n8~"(//|B7ew+ +;׏0b`AzFy{bz3{{ +q v +:C%v00!g|} |ܨ+Uޏ~ {AX?z^D cu^ +DAߗ>=i> cƌ3fΘ:mf3O|Gii3gpi&h:h3D3<j|h3&M7>x0QAAsN[8ӦO N{jFp0)3'M7n_7r#FבFP9jQF3r>o'N~ ~ì)gL>m*(4#Λ9c 3&_}=W8US`X1:5ʺ9@oܴU4t8F3˙[9`'ZXQD "C:%q +%TtdTlڼ? `ȦM{ 0qF׃8EŃ^q0b<Èz]͖U3l> +gsΝp.҅W.\{"¥[2 cAظgVX- FmtFzm3 +8Lw}qYsjj Θ]._[tZtRlQ ~P]ԱZVqZ=7]<q0z +rų={>E54L@ OwTI nj8z.m۬ʡ,Yx[*hG?/_ +hjasXd`;vF(U #S`(ь,#BA}[z!(Xa9ZR%n;9s] 'X|qݾ{Խ\z[~Ls 6uz'0ͷ5و줎^8 w9Qnܹm;Wz 5`E?Mݜb4!Sai [=o$ڍesX%sش&K\w /_]!,J0A~WY*֪?{? Xu[4v;ಭ +jF,NdTe6 pEڤhm6 +gG'h{Y?Qr㠔 i8Ud%JAݤvV_q][xv{S"lܩ{{E~!e? U6 ۴uz87X]H%@ZS" B! ܠBMj+ݦ~wh9{?4mfFhciј: 6e,o0ɔ Dt' B!b(𵯠RXloT-Т}w|YYf/?o"Di(u`7y^+<ã"Ehn֘:̍wWEڕ$& iַ9t> phdL4dlَ7#gEbVb5P) * +U!3)\)|(^>O.5ש6G_IįH|i0aH~zD(9㬤Ǚwe$\OK<6ie( qG^gųWaNi8"zj߲#<0LE &,4܄彃ThT'Tߌ +Bffkͬ^Q.Z8.]/Xc$Bw4v) ^(ViMdan=srѶ; FQZ(H$XT8SAk^Kq+lIԑ^]sw{*]E-WQR:Ssh!aa  \$`Ch%\Q|KNmxŶSQg%ي>pAB#u,owh`1jT4sJWQi3gŧŭO}#b>:wB:$SyB7$ƚz?jX_V夻+ ؕ`WEa*3dms^)B튤w4'*+rPxkvmls9a>֟qbHՊ ޾(mջvUx,&O U u][/Tb é/tjZч*߾hmjW2 GrSpiW;WHºجegɷޣ}F]FE{^V*\."wN1x|SO׸|5o[-'ω]]L8r:`- ocWص^ mH%RrٙfhT$4 +a߹`A1>J''}\-m`O/1dq*Em'EtѳkQ-|ns=۵{w^H"V)nD]ߓ]i^%nRGu M.{Іs-uk]w\J) L`WfPTm&'Sw@ۚhOJR G˄;^?"&gjmq8(LJ}kA1~#c|F:"jWQ^cdž{eO˝.5z^hsɕ\ -4j$ B] J(VmlKD!QQzP{Kn|QP,[#IKkk +Y"xˮm*2FJT4W+U7\O_ۨ]#괫B[J>s {eCM 6. +._+]Fn[èYBҐ(jcdW/ChA4b~ T`C crrK갪K$$Z9a`0^*q >"kB'3sEg-: Ɲl!߈S7< vRn+0R(Qes~ _rᆊ%Cd7*ÏJS2q0 P%A<``PH6ADw{3| LF=7dz#;6tL%n,h@yֺZFvbW|kO <+9jQ̮62 4*ͫLK5^uڕ>ZF\q5~vmhڀlZ GS͎[woӲ'Ry!_5,POy'SF7y y`!|bJ952+ж?[D( Я0Phòv_$ +%)a. .2\gWe;Wqyǘ?b3gUK* UT?F$Qᾣ#FF/:;^K [##_8]Y YtbIy ov. Shj>YVْuX!T6 =ɔSW4p$Es0ಫɳEX^MN'Fv-;u +NFemo̻0#{>551)>\I@$Q$v`֪e[:V@Zp=xvp HakJN\ +jyb؋tV!t2vS}jIhzS-^GMdsBd+w∋0ZĮZx;ΓW=dsw@!tŎƫw5Ԯ%5%|-vͫxA/<9WG +xڵ.sq>"7oV +JZJjgWRЮd0i&E4+CЮڕNDRBfkW\@ɜ+Ujo1abdrӹ&g{wv a#p2"_2UG*AWk4݆=kUW=V>P-oWreJ&#t +Į}VXp=aL]tU +.<91CEz}=#O.!-*H:բvբ]yD/*yBurVٶJƽ.l;}ֵM|2ZO;bW&+cJق2 }5t0@``'Y^ɝWϡQde_/7&ڟ(1Vv]kXJI ĥCJao?vvUu҉U_pU5_pȊV+ ]ymW8: uժa0@īԮPbz_SZ+8dEs rX]w] Į$4ĮOHu}" s@ `vU1>vݶ +fUZHD.W+ {0SQDO<1P9سR%]l@XU@*yQC>v=p\QGwͯ0Jd@y5etjn3<< ]$v]_DZ|Z&ez|a#|D?suyL5:*_J/PDeG|#G9m; [KFUiJ\=Y<ȍWVI=]dmlZ[%~QFkaٽDA")`ׄ{J%(OpJMv=c,g"eY}T Ui;nK]Ka$!r)3 jw]95[\wuzU!c:!WϦ\{h(|n q9?Wa"v ۲UkX]!ZPɮ5v\( W yp.@JCڌv v \r::Ϫ&Wo&'5ZI{nGq&HK 5`WGBO/mPv=Ef;U+-4R=~h{7ڕ zjGOzyhh@bUi4?~C슳V%-Ljv"ޘU\#GFx7&r ?Bl v ,qUx +NtEava+fR6vDiqQ=Jy˂甴{tc n>O-Jօvu]vU2&ik@*[&Le9o2k_Jr߫%X]O1FvD;$m'b\$XT;]}R+Ada]0s0UA) zNĮdNv=׮^ٙT.:}Z Dz>1ܳ?*NTNIGAU]!Y]W¶, To!\!Fu$_]k5ZvTܕv@RXW_ouFM8ɶk3H[bx]@axOmy4).z#y{]9-uIz'MTbnh0]v=Hy B$ЮS`f G +Uvr#V]U +v+@/FnObsVsp:L߮:!v-3\vve]E0jܹ%ʝ F|32kLL nfg uehWBӮ4TMj;o2d\u + +6Q9]PP +r5v`1d5/N?JD>ԋ)R" `>c'ҧصeW]nש<ᢅNy\@an*9>OWQW|p>c"|Fx-R$EӪfk,vr\% +҃Y)rA#M뉋5g^58]THPW@`x#~S)+Ɩyek,> +{5eX (B}ɮ%=\cA+Rv=]& kVsq 2ʞ])@l#GΛnT+Zv6/ʝvˮ`cW[y#cU/{.Ý{qzG|HMJ0>/іxI{2*OΫīG:ho:.Kk(v13YkNk琱C[ol 9fi`WɣgRO%S)Ԕ jWvE;/'Q1~c䔗y@EXî݉ג>!:'/&_ +^D.b)88_8d.u +Keu ,@vu&`Y +*PJpˮ!ԒsѮNx4 +v'G`Ʈ]|ü*\wժv߮t)îҰ`X $ +pLhFEǒKȭ-gɢ|t(~#};8,$aŃyβ/U͛b-ڵHG + jhWB0sU5-v!v=e_ +vvr:d>/*9Jx%qC\;[0 H kג(m?/C$U2HG8̛Z"m0'z/ҤG_zHdzBj@ J2LuҘS*4>d\ 8|En3@H\/ں~Oe߶ZXJ@"Ӓ]FĮ:0o]%.Y4jH JyiZ6 + y]ubUea-?ϣvFS*Z=ԮS'/]])ڕ<Ao *a&jW`W{\\W>:J< Ӟw۵NPవ< -ھm/YЮ"g\]'kzj:85`]E:)di[vhoz{"D%5+UPnFȹEZl޲]LjjZ @W=zI{4]e0wvQgr'[.Lǘ5}(}DτCBng-z't8HFz6;a3V"x✗IzYz"xy{V4W^kOXWnS]`Wrb1\0Ͻ"X{o {݃=r!î&+h=z֤1"rD[ڵuu%αZ} vS72!2z8|xUN.~NrW^{ Pyz/̜/Jv-ƇAi6-T`ouh#W+v/8YEĻ~~knL],މ g~+ 54j yܻ/sȻ{/;NYoTD'`WoqܸBtr^gW:բvݳ'3]n51 ye^vH£!?cMjpEw1.`fidu=>ԝOl_"5%S}Kfus0vݲe B~@?TdtdhbyBŖG ԮGi]5d?v ۲C]E|܎=[>tH P?@Hba*=2|~};*gΉ)WRPؕvp)q.-yE5G1}oCjqOVbųVȖmj ZjI/NNJDu(=+]J}/F临FWnqgYv.6?pưX*dRRm4Q1Xem$!krE65ĜQet*2.tW;Q|&ZS#hXkPBo*n"1#MA {2O*zS΃3Ř ~5 V4=JO + RoJqf\VH-j~}}1:m/^[o!5VJi,*bk@+E"\[oJ*%e|U k۷iӾ[*RX"cls-5oӼ~O=-}պ!-4yMWuഫT(*++E|2j>y?=pqA93)~ +%7@7F^ݞW u,"|!z-atmm8+𾏡zې[v&S?:Üsaމg'-8xМS Z~tc qlLaV5Ya7[OF uNdo FH "%8BRFjiPWhl$XU65#-˷>ܾs/-\@JV2Jva[HWj%}D_-5HE.\a=ASM,( +QRHZALu]j$l ڡuf1Vʐ!n`5:,3:lBAa:QQ|?XNjkP \SW.?XhQCM&[K_,oeyː[mC'tw[߽sX{-=fG72̎w&[x)VPa5 g{l=wwZeM] +{YzwvGw7ow[mnMX=TT;3` 19z=̎Uge_64`jfYhCŲ *3H8 ~n;,vdL#[Y٢lVsc~#Q}D*G8f2MV"G7;DM0lM&g3o-vG_0F@[D$G0E +U<@6 >nvȘ,&S̑V\נ1tL BZ"곛p# I">KW>oMpSmEzVuMq5VA4 +& mZ,a~gyM+XGZtFg?2w;@[j݂ߴw؈TX@m /#'ty6Q^ڡ33a,gfjoZj!mmrSfZsX d"7nm▎.:Ƣٺ9jFD4P>Ђ6Z'WyED8[_lYޡՋV[(-J-bŦfD_v,5z3s'mPզ U7a giVC,:կWDӬFD((uuƮY_)BFgBaoCW~L@\$rjS7p + o K#ӿ0eΩbWNH쬪쬒IEqWʗ.wȲe}7/#&;4#+?=3/-**= c0槥楥奧efdfUffg?x\|Jٯ `ٲW2oIK*~<3YFtԓ7OrS7 TZjn7nˌҬʬ̢I.._ >o_ܼ*-23,=>>^^C||3C_a~ 7>>O/ ?S_3wW_C~ K|7+ 7DE>{ + .?n`]/}|~; +M`K/"OϿ OtL 0O||>@A 1_R)w@a  8oǡ?5x@M F L<5xO_hO7mƬSb~66}j⿩.?3MӔ&N~O&@ 9 >7;EO>]14CS!XX/` f\hєiS?- Fa 0x* 3Ak_~gN?O6Bn|?'؀`R8vܔ/oh4дA6~-.3}MǎWamO>~I3'O 2m;P:$ 4sʔ@?|sJ'/sn KZ,~հ6t7:/-mQ.s3Q1A"pcD\K84:cV5SVٚոqcX@ޠ'zƨgygqXx"Bg\Nk \PVْܲ堗Ua uRMqZsM k2A\=aYh lK)-M} ȸ+Wnk ] 3tzFo`G#G X capK\VcY8C,_1/I"ӓ@ 4\JzMf` FzbqƤӛ;Ҋ?w_KB޼QHhOl#Xz~ D+l,0xy#P#ڻ'cj-%L19}ě +w& eL膽0cwc + +`u`Mv +?P'R2d[n:n W6?I ×zT>IetaDb;D{3řl=ݦUuưmጶv6B -c A&h& #:Ţht `"}/fVS'5u?0pr+ fNYWV,R@Żrv@1r6d! .@kd@d`bP0{ffѦ9S7 }Ћ:i߾~+V3%&g Ȉh'D&A`,2)OX`rCJD4QYM]]ã3&ujv[#a#}V5MNH2D aI(xT pJ͍msk{⶙8Z ay]Wz{=HoS%JQbk26hM9lx_[&Be + -JDaԃЇu X'w2XJ57Nב`be. +vYYĤ6!Y 6H/%fDH$/|-*TN w;~^Wټhv P,F"sʊhkqZUoo{uJQ팩]gmu1maih*-o4ò2Ӥ.ПB{$@@Md¹+!{7F֣j<(9i3i#N>tHY &{ڤ4uZT +Fbʚbȹ`E @" ~_]/ =[ũfo9|&0pXDTg6DCT"]lh3io + +k6ɚL"5feA +)I ] +;I 'PzȮ; &[C; xI*uK c_H%pQ/!ؙ2ëB}AS)5Su +z~쵀Śz.Kia<,'0eR +oU)1(43eR%#U+:%a0@x+0 j)\m,dFT(45 YKJ?-,N-zY֘_UZm,'> JOeps48YE.zcU^? +mtamB]Tu6Ťф"$Pb/ %JNDx 8Eǜe:ֆB$'$"BLu#,ᯒDbkOH"9zn~^ \Y5WXƾ׿?x9y=7P&@@>TJ {gz3@fMS,*A5|a9 cqh啻2^|ATj0N6ӫ&>F&& T_ۮa^Zg'#\V) ^LKIcͬ>am|hM \_]vmaӫ +Fu{Ut{s5:A`*̮ {ɺ8=wcFټE6oX&XXMy/ӤkYRޟkW>`roJ@k*/]WSA@P6{JifUH&Åɇ>.zȔ#柘_O-3hL 87ȇ7)h*ZJwScgNjRC.:po@@Lw3k֓@iΒ:Vxصa6O +jmvWDW|8ڕA*aq!^-`Z!;M%Rjqas@BjQ8k ڕz`=>UK сvźZ_ԓxB=5 OjcWgqVJ϶*b-Db3I^5ǼS^pZ?]صxk42H89ot@pԒ|!aKPѱ]Ikvj w||UӦ0zLiw󢍸aZWj`Hr(gjﵫO>o8sUvN; BS;Њ퍗nw]5 +*pE0Mz @v5ħ?|}̤* ^][qyG'}p㎥"& vec׾ J0!ЕEUDw^ztgIc$дK` +$EbwRu+Y@5xOckWB TӼj&u`-8Iw @>eSoĮS \H>S~;Ԯ)J1/Byz_|D[3U:r\0Ug/Y熽;MeJ52P^oW@ EkGg4+h+*}pөM,.*Wﻃ3*vnn(6T-@5KmZ[qsBpS }\{n]*טe8n(7S}G=eh UԠ_GzoKq%5w.EG|ܣ;}V"*#F\>Q.zW8_aqu& GGj?Т#ldvB-ȳž7i; +Bx5n0/]~{n.\QZZqE={%*H9y+&а S{꼊hBݳfpBSC!NzW&,5>3]aߑ_SɸoOFdV 0ؖOh.{fȸ$\In(U&n@YUF|r7pH` ;P;A_IO_Wʪ+~W] ?d88C;cB]F\*1Bp/'+RH g?4byܠgnMpk@{v2_hpE=5 +kr4TVVgZZKOVϩV +`Rp=\6< \(f;H^k$&`'8z䯽xIpH.*53 Q AMӮ%eSU4z 䗚)2 nj :Urv [jYmQMFh"/A3%v4i04M:׽GG>C;Fi b& W7z4FGn[O[ꐭ&bSk*6/Qpe˸v*ήB^9(*DBTj}j5+~y:~2\Jz仧Srq/WRM"> @]U%ڽzy[Rq)VV K|>,jr +*uN7-?Xܘ<Hnϔ WSwNjS;AE~ޣ}I;H^k'/f?: +Ym1r 5MmZ{6o$kj\j,=Ⱥ3WRq92*ŵJ'F={M:^@5U& +'v}w#[" U:kh02M Zu劏i3@ i{TѦ ~2m>JV,&")oZ*TfB No4p뒧u \X%Ve!j+Hhd`Dp--٭O4B4$E%$o&ɵJN1GtZ\M\nHpu6M,Жpj {_OpPv4s wŞ#XC;);Ӏ#O!IGd\a(q;W>K錒MNr VB5䶹U*gB7w3U_3 9~דPcŸ㦿Sr5/sVtO(2^׊s_]kl2əidVW7)Ĝ)iA>`t>)#?p# ŵZ"n:LzV9T9+&Wp ڶ@^O6i Yɸ6ê6]@f[W}4ţ:`R5!Zh]Q\Q+x י1k*@ihG>WݽID#gBE/VH٫&oA mxAX7.&o6{4z}*-Be֧[BJi 1'բKT`/bhQf1MŤy$y*k+UMh5Km;1W+Ec,P'=/e1Edл,視V K0mΙ0xHeվ4|Lpb$mr!L\&!ܻ̀ +Xu!n*\gz%|m[ }%'=wAHdy6b6wŅIt߁#PhMQ yF5AQ,O_"z/h٫F`U㒥V4t\3WX͋7,nࢸXYxzČ´"3?9m)0†oOF+ǎ?ΟFѡ5 _O䗂rN_FƸX% 2~X +EqtK#,~l>q"kM6UhV %\&z)+hŎY/RcoZ=}K7BfLTEvgў1 Rb: Uǔ z}FTbe[`ה$+r\Uw:5D! 8>%yC5txdu+ЯffAY2;- !WkEQߙw'Bxh٫mOD} I[@Àk^k +ZS5pZ]\٘٢Q7<0ӚˬZi)iCEIv]3J`eᲅpMx?yU}Rh0X*VgW+ 5%]y?g#t{o !`WbT7_Ou"DIqLͩRPqXp +H.T\Sd΂hC[FR\s7BEm=~R(}ߠ1hjV~Vyu]Mb(B +ECh\Ofd bBbGV׺]us;P6׫甞TgS )&q=~?5w >F}ɸa~Cp;ZX ѣl86ءj՛~b͵Ӱ*2^m-0q&lɟbA̴O5 +pŁ=U@{6ήkn]pUy@??bVqUgW"{#׮k(Bf Ì +}{)Ayv]ׅtBh25ݧZ~l3J^xW}ʪ Q6ڕq NN~p-\-iUb4Ul]#|$]w?z&3ɅXZ(#v}<Л/׻ 4ʯY5X)->0,.[ !Fq*0E&A} | d1jn.fTܓz͆1.8‡Nք_ɑ0^&k1ciߠIrK]. ^2w6 F\G։@gco/G -BN(*id3,Vqtf!hV~;*l]Տm7,bG8R)׫zq`˯'hي;iTw''S5ݏDN yoUF/IJ!b?;z〶f&6 ~H +-ڡ&Xd|lFb8c>0F>OpnoS>3_z않sʳ_̞=YeY˲s0z>iKddܻdYΈ/0HXޡNF@ŷ5/B/V͖ Ue-B٩*9#X2&37x'⋆?͟⻷=6'HJw{p({/G3('/3NMľ;a?wOG:5]N =lD*d{6w2ozUcs P[ +gba'oaupNl[ 0~6Y]_nWo-8nr>zQC)v<1]Κmu9.PN|悽pp'3] hvc8ٝG e4r^R ?_cs:a=tֿ<:Ϝf@<U :3Y~^wݬo< #U.!zr(4W<qJ +F|h  cPx{7OoƼa~ԋNkh;?KiÃ1aC-Tn0 E?9%`Fzn R, x$#}1 L.+!Ƴ( H<ĽkWPr43sk8)CXE( {TBݺ\P=_hƱV4=Ra1~e9 GiWzc7ODXODx0' e\0{'T>XqkHD> +endobj +949 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /ITKPKI+CMSS10 +/FontDescriptor 998 0 R +/FirstChar 11 +/LastChar 118 +/Widths [583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 +500 500 666.7 444.4 480.6 722.2 777.8 500 861.1 972.2 +777.8 238.9 319.4 500 833.3 500 833.3 758.3 277.8 388.9 +388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 +500 500 500 500 500 500 500 277.8 277.8 319.4 +777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 +666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 +736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 +288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 +444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 +500 516.7 516.7 341.7 383.3 361.1 516.7 461.1] +>> +endobj +950 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 112 +/Height 118 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 999 0 R +/Length 29473 +/Filter /FlateDecode +>> +stream +xڼu|g-mRҤI!i'f˒mYAf 33m04̌vbfNi{{9=s禿ϛW=΃a+"w>[S|l}34a9zRk 2OIziRy}>OVn+6+>:诃ǂ#0X⬅aEurبqxOdq;.ZUl}LuPjtwqkj D5Y%Y%I3Q9A!V:-,^-0mJaT@Ʒ)76FKi2t_7M面JRn x18doM؃'q@ĕ^ɾ}qSv5O2wI?В kU#q[^|C[@MmypGGl99 ֳeKg7$Mn3xK⩥OjG*K$~6#,_zXvXuRTTTҬҬD.J_hmnmvMv5[XU,krylkT~h[ZPKO#иkJEEhֱ5kY + z K:\ ZPܨRXWR 7 "[Lٔ0bZR֙8giW4{ eߨof M*A%]E+VAhr J:"7̕&uJҕa/E +s ]6ipcptX1[ǢZw_3 +1.BN!\9Wo9UzN%U,ױ˴R-:Teh‹"5H(R:*Uj%,.R,h]rx_o(:lݫmrQڈ5XB^b(J&*<9-WNˑs\=WNϑёrf"L*6tyL8>w%+bKuE{tEuud)pP$cdIY3% jʔP2Qr9c9BGev}kl7caB-As>%>[d]ȊAK:xʠn\Ql?{C:lr2?D>]kU!mt ֻ}kCoX6`/GlߧKA:?C~rY!Kyzl)rE3xa觋HV/xn V 9Ca||>Y3ϼx7x,sװe_X8a +7@ OMxg#.83L +V,Pp_K/9Sqpp"3#:Q`1ȗpUƏpP0*ŹpS 8<~ +9)"6D\ +7c假Vt =r5kVXQ~א !m_ڿ<vU෫ FNaK. 8<+r;w>79|w +}.}/;>߬?*4,vsx\^z_oޥ޻zZk9w +=˽eڳ{7"/zY%x}-{omqg"ѥ+{ O|ӵ9[St ? h;BE9{>gߋv!_B5s"kxD֎wؓ{)Y;/;`DN4u -,C{Z7[6d 2z툶 Q znۊ]I%wZ- -6Aϋ]`vR-IQUi=v[|%dNj3%S:,)R;,֗YZ&]B:IآOj3[MS\۠,u̔ofv/rZKWg1㇈b-XK B}x]jb‹ E,EMo̍zfr_SM촖- 1rEe]ZB)ji2̱Ͷf;=rhrQ Kt/pM^V>dbЦt(uXnrS V>RaH -F]k5FVjcj4n͗nLF[,`z5r#H\Jh6-sƌi4v[{Oޡe?Y+o:Eٿv_{ݙxÞk O"eDމdжqJuٓ:m+Jh5[j0D[vM* sK3f>e~i<ײc%t:- Į ~v;6 V@`7F4r}Z_ޱB6~垶9Fƭ3ƠBV"JbPs5I-Z:ɉ0sL&3+cPi;x"=i_!}d=l>mI@Am%uZۍqzn=DEcZiwnzH"=I\{"k A6㯔͞cwYG] \n9[I¯ޙ$AzxPUK0E;̅,;5{)߯EϥK~\~~b-VaO\F^+5)kUZN2H&T֩I +)=&R|-?sZQBDr-8OlN>.e`i@*=gy! vMwNnmR-Ƅ6=@-ZR\=niPmZSr5ۖmL"eOR>)pmXlU! &2L -F^Y @0TRMXEIrZ2UWгGyHϛ_}o]NŚShr_SrĮ5 ]TiBI@2LIOlqrgB׌}8uv\DB?Kin~FBxCEx37yz0-̩ݦvC\!nf~+S՘R{^k#j-u L!`bG`:I5%ݜnJl3$5p_&LIoagZEQ|ik_:Wf Fiݦ_F+++; 7,ΌxjK"$q]\WpT\O^;By2gl)p;mğf\s>m OH:a~w+I,=hd׉iU*MT*RxF +j\his"e P*x4uL)ni&Ȥ`ROSjsL;Ek'AHAV$t 4uY].sZmcjBҴW8HXT><1xqruJ[O OPs;7 BXFnz龦찑$In3)Lf(=OBi`_O^%0wAx6MBMt-O}A;^m齈qfgee33wSzt^IJdb'B0B2JBB܍.h"$v[-Hp2 ӷO#U |K$P ( +'4yF;t>md9u <-;&$>.>s[X&7ҌXBU +݊_ؒ _)|XԹnGP&XFgb'BH9´4P5"1g[vX2w[L(;cpr P)KzrkcaR?f9 <"-O} 9MХZZ,HnTE6H 6͊䣃zvpt2ȉ- LnYE N `9x~,0 08c WE`q_d@g <]=V^Dh&@Il52"Ք\obs| K +1LJ|HUP9EPV6E+ȹ v\`Q-&Q4[ޣ}4{!v/g@)R=#XnaÁ) L6d}`Szg.yBeמݞ)v[@;uB`Iv6BK+PC sSB)|s\N%ڰ5Q,55ɀ4P^­Aҍ`qNGJMmT6D(T1հ!g+|d+!_.Jf`uLmc30D̄fٔbLnRoQ%{_mv]:r =GJ͖s\UHtszЊpI@x2]O]cHDąhy| :`5 r V蠡-X aSmh}STIجIhT2=f_U3e MdCe!א!f%j?3_V΁~3hmƑtzAvhS{,=&aj1ːa785Z6"5%OM7GUAIR(քI-"vǮY+E^CݒԁXfbna M\5 B$Rf)²|<$4qPʘ!"Udhj &PB`D*z]l&V_ժyժmZU] +A_H 0RS<jȞȳ&kƄVCB] #C\6Yֳ+tQ Ԥ\Uh +/C ^zIHDUA/ӀXeшS*GHҋt|-9WKхfk35!L9243P%^M"zR +X9Y%7rM8f +}b* Re)C2,"0`*RiёFR=zt cؕ<4RIE(ׇ?OdˠG%/%H)"HR(\{ wn/<{Ǐ%1PA52"p7n猙3ֶ2!<ݲ*#VJ#TJ(vHIj8 2$KTf(,Yx9{a/yQ+Yź"Ն40 R +DShJp($)[S LêHS|R +#bܱ5aWs sF]X㏒2%,)&%#gJ!eH}PP&Dv[%׿|ϐ١J~7aJՂ33t&Ds'̭4xBU'zZ 2 %_F‡+NO(R~R?'“lJ<Ő+J8k?&zkdKwoܘo%m;hǃk79za{vttvwwo汫l:z< GN>hM$yȟ?Ϭu<_b0٭m.#SAO-3YWXǒz%H|Ry'%^I@O `#3cq<w lȕ|_ +5]C_m$J_1Ly-Y>tiz/5lkg+/x ?ToїP-Y.ԍl]*J' W񈿇R.G晱x,8 6rR%83) ip +087΂w'B߸#=9D"-,= +~r:ͩrtpρxxg,;;̙;oʕ~Lü +*k . ;y$<A9yozt.ܲhS]6ŦE &T_ o{Z:eo^{Gb\^{4P0iΒ%L#Sd +D!Ȉ(/$QH]a$2GR)\Nh-_/7Ko6jP* 1*}l<*xi@c**N2\ɭpt1`]eWh:v1*hQ޴oҘg"ŗ/o߲򪊪ښںzD uk]m}Wu55uuJ//8֭p5'Nbn` +-GG2ryzʙy:X٧hڴ:ckas}J,]eY*reH`-W_{31P[ֹs[GgONޮήƎfo@Iq, J2!yP,8M"8MW4()'"9Uʮ''ݽ`)yf10I(}|Fb|5MSJ6/[3CC[;:{ۺz[wA GuO {{D~A' + "QMnҳSEԙZsdU蘅ʨREjUܝLinA},o&R$gҰt)I ˒ec*wh=cT;k=4  7'yz֓+Qzr擋}w_f ;Z6;i9z+^}ztʃsW^[%$D^\݇Oo?쇳\ |cX/|rɅ/\rtwܕGN;qc皵-ֵ^U^u'g.?:}.]zA}iY cv =WY%Պ>Giku.D;ti?{Y?\_T> Ïl}RkLl}2bj _ㄭ3ۣӣ!SߨEnkťpmJ.\#쵖~}?'8 +~ScJf *3m:t]M#TY*Eh",kD +r8L(Vbjz5֥ ) O}xXyo^&8eR';_+f&FɼF(^7Cc(ONqʩ﮾L;j6%w<:uљ5O5̙g!N9Et9Eĝzs17/>~0lz8b~8bAai\ei#O `PJ%~Ol}6fӧ/9.c' gkACCg#7x4jV²:U~}{ (97yo!2k`zn.cUd <3ޱC\)9 z^V]ż&ϓ<|.?x?j Wв\b돿1)w~զ[]_=@l<-84Ey"xjPêI`HA +z4d}f/qZ mcpNuL9my7Z <x2srgh\mdݹgY-6zEoi`yoY*4 + +ut2@ʑQL)ۍL5] 3_+w_T|ϞwwϦ]{(?hvXKߘ]n@yOːŠZt)e;u%?gmXl S5ɳƽ~>ӝ~ý~! isdjVpn ][;pS~o{<ü*%Z +B)V+Bca˫yoN֟U繫Êq$Ah4/6$MmOlyjƌDc΄s^U\%Ϝ?|1 Q(O0W0A{ xzU YsE7L>!}ONfSpd,\M\vo9q[`EZU|*V[.Q0reA#"H|ĩ˱D`; !ڞI@Dl{8d<{QӧC?Npnޛ4;`~dq#!qŠJ)ˀqkߘ(3WohtZoO+<337~4hj1\utfC9OUbGVH/\{:9mvەa~ߠkj`,_Ar8(Ug!y٫DNd)ՋLj}*AНgYQo8H|-@x7=I䙕9 7,pdsZn=ՔT_n'l=PuGU]}Da3[}[OLI8x')GUWȩ#S:&Yw$ķO?{_.;ԏ&5i5 uZ^/K\O" X ռ7D㋌eOW$ev,?w8qlϷXNޙ:mo"f O 3' #aHke>ĂHDpȴPzY5'߀/yjm<B>D &Rs* +RèQ+[ߕ vG7P^p{&罁g9ʓߠVq +P| e $uďY7PM/ +|U'AD%3ٖ]G¾\UkO.u==ӧ~s/>G:^zӻ}{ӈ4B|{ꗚ"OF'u,wwӧU7pCG}c1ugGvόo9^RVX:,֬ RE!d> +z"*2z9nbŒ:5k7bt1"Yx"񇼸W=L򡗾9MWzQĿy̕md +Hv!ǡ?"O'ēD:}&Wn= _x*"a039<^},(x {l+__CyBeh#"a&ӂDl1ۜ0oLa=|bvKS7o᙭.m`%Z] <*}LWUcj5?:/VnSe>#RGU ug=[My4O\dr~&eѹΟ{Kg{fSSAtz +,rmxzv3a`W)7؟!Wh ++}v, S3sf{@QŠS',ۋ@Cg3C-?{S&yK>\Oi9ź P^dkW<ɡB{h6/y9yutMH!R!ӧ;uۆHOK]/5HsoOx~!Tafdǟ_Qo#FClX \}LF'zYs%'Ms%KQ HeȘ92HJS3@QZ-!15 ;x] s{ջ7o.e(Q}B-{ē\0G+quґ+7 "y=]tbSOgڍzX /J2: 9B0Xh8,uLX/y7ReOrbR&sx ~(W!<}|+vYd\ƹCW{x||^g -IqgCW݄x"|zF`O+L̵3F\>c!4 4@ᬎSWG.SY#<9դ!)CRFCG()AIɣYmc_\6˶=x'+Cy'}o;Sӫ|u>*'\҅YJUx I#äDD0'W\Ьyx+W]>ub[ Q#v`P _05CS%Ӟ/x"3L{'Kȣ7y?}} iwNM?furSFԹ@gvr|nwLd)u*n +>oF`!V@&^Q-On2!R'Y(g<<ԯGaNTӤj?>uUwO:WG>vֽc +UBWMXx߿!֎#'<?=>>xnwSxg0Dg-]NL~b]~_yLFҶ<6J VŖ[XȒ-q~Ї'w}f[O{ oJS'z재ן=]{D`@/֚Uf[iEj:R??Gaѹcy͚=çgOyTŏŠ7ZΠF?|w积ٻ[4Lx񢀧ͤ' vwΰ-d j AӭkWw^;qs N#N99GsN{N9װʹGomǵ{H]kY9ʒ-Jd 0darH(B9O`r }[wN7xW\jZ3M;gݓ^0K3i(1Lgx3Rb@c+^ }Lm/CCׁVLp Lqd׸B#0`E5)٭19Q'y߮ +s~VԴuڃo|_ }0@0Hs߆Ǝ.ƽϯ^wܥgΝ=wgϞ?}gϜ>sԙg.x^)>X~@ B7O8R0X)=z޳9غqYohǝ5; + _ eG텮O;[&:Gdt-*8ՃQC/TdSf ɩR O13V TlДR24=tW jʫwO=j?K+qwoL;PF'^Sie߭ q 'C܇,}ww# +Z_=j]5UwfR D.j7&rAS.))VTkcWyoy-v _8axmk՟x!#Ps Pi*P +HdJ(gĪKDJ})PJ,4{BXefDjDm+@"PnGēf%CI>_X6-_̅㥽"ҩʁ!?nv2 ÉSYcGzݳ2ehkF[sCOe<=5=1cgsn4aj- +Uw. +j돝lNhUWJKj\5#ijr0 xRZ2Tk^^G +fE&Opb++J;L+F(Re@ +ìKzbX9!U43*ôzNc/cJg?L9*/Ibİ#vq۰уIby+Ѯv52UP1@b}bן ָv&XM1U=~)%BJ JH7%~W9iDP,7l#5*5|rkx&,baHxR׈x+w,%1@)zX, m5[a u\^ Sqe1UxL_^rך_<<ew&+;|m@^yvdٖK%ݖh+"d{1R.f=;mV a1߻3af&XKV/ 7O + $)l^@wwa6Xoq!B^~O?Xzx(?# W[Ԇ L7x t[Suqc|JXg,,̗-]}-b?z+h +V(]iYҪxe"ؿҪpmeɚk + ڝVi[j15333is 9'#a… -,>퉙86?xIsafIVs2~dckX i +UV􊫒X$#*R!Y4'B<* ʓS-*b (Pzk>\ >`Vr0)>z^5UsSUQY**K+ J3)IgbJ'C@ήȆ"'|x㦟q?=KP)x+P$a&f&(O  &+Ȋ20ODUAϞ* W韫_% + mem%uB/G KV(|2*^zܳ@VPXIRRkAR{W3 +5~ %o ~Gfڹ__P\TZQRVQ\R +gM@`OPIiQqiQI χrGxϼ|F j'L,l"Lxs9E>Jg)I u dyҢ'F=mW Y}.R`)p'=q$}AE-.:C~%PP<4Wn \+#%='JKO/iWgs]K**kkjoo9Yw N$ˏV99C""-ZKmNk}2徹 +]dPEd7r\qM^%f5 GsuҞ޾1Y9g6#K)=.vO +\Eѥ2'opxszp:"CdDEB=]L8\G7ю5#Sac0 cLؔrR/H&3.f@eu]GkCDkj4AGZ[C#iQ_)xs2EVk2/Zt?.]%(B!ERщZxozڠ]WC[|MW͓ +@exn +\v^xkohzFB4׉YbL =Wdx7haCÏ#soζ6?`!at8[ 49~>yߣǭ=jYosNDs82eX VxaGP׺ڞ07~4?UT .T$d'4K"97j!3@e7g5M]W|o9%K+bbp[3ٕ nwu o WT)05H + "GPk<5(CM}]+U~E>[X- ߜ7]Go6PjIC3Ёy*p8|(1BGTgRK15zuJ6AS\ϿZ5}F^|X7+qtҶ@x86S+;C~ŷx Wڛ=6g,[m8, ner҂%1qf?/wf>zocJ'y9S xIyW-˗@1+` ,hm{)[sf/N _$ < <,śBmț,!U) c'yj:3O+e?uGc^c0jGG-7ŜBIh HiEp,*)!R~EĨokkwOP[LmHU?&~SWhuKR͖aWE%h۪W5S'PSL(LWZ{6}Lx/КYn{sD3?3*tM eP6J@N>,yHO*y=/Y_|=X@>d%C0M' +H=Rl,O9y"ӷ0'۵YmP7O_ؖ^p [_m@SPd< <'эuw@l ɾ@-Pv/ݳ<34Rho߽QhS}EdS~x0tϑ=:q/?>wp`/a1::gMy`1+@Z, -Đ'Yv$I'.*`1O6?s['w]QO~G|[}=zẙXM{U9xLKNvtJ[uWs:ۇy 5PyǢH S4Ά]#F@Ϩrӗ,,`>ac-uGm9j𳿾Ěw,q莆nfjs@+) ,aaZpb)!_yJO4Ǭ6йÜ0=y!Fg[/]H OxŐ(L֏ KH+cLV`wP֕iz3S΅BS;6ai葃.X)ɗHي@ܛ*fүWQ~j 5 cw,vW:9iZ@GPy[V͎GW+Aus%GRlKG +lĸkYw`N8:5=MQ=XxܲX̚(ܲxsg?xa +IAN#G55 G̸U$(x%{O?x+_ Oi̧UDG`{&chc!RKLE +"wߣSHo,'] l[sf,Njmei+oˈUS墈r%XD>șO`md'rg!<1E|"OhhAGZvSeXu぀QЮ!ttV"<+nIB!4~Hԟ"L绐6=̟0]\3Pc,Ϧ1~$:Ծۚu)wEԅ%{6-ܞÊ4J5Frn i+_>7 (C5G][{E̶кa)F߸zgH*tI\Ci~Cw +y8TiNhX%j%ʠb_ϧdʿt<֕~s~nvtx)) M99"t["!rj_0s/c;gXJG\j놆" .& 5Ǯ`Ty} BuzВ6$X{^sK s'XH1A$㜆,acYO<"X3 DV +aQXo~ +/ +]ǜb.q|DG%F`9ən yh}㽖!{0D^ :mIgw׮H/,nH[H]M-}Rf l)#kjU9猕aQovm格 D^}#(RߣdJcN|rD4IHj!zE`, W+2~A@"ތLψF ?Q]Û'l +TSwq=K >$99>e-,P7͹_9sHO5OkA}<( P}JT!ӗؙ!TG(xȞkEg`;Dv:%oHʒHvL9' +|%@>w`$ʜG:;eHe~{=<ؐFL؄#1g1z6)=Zu;NчA߿S>뛥fK?+οVyE_ i`>"ExN9fyEIUz0+f($ ޖ>FYߢV&|vpW力-} YCoy>GxAx3B9D3Q6$z?]4{ܓxnI\ w(P"P 29oBۻ.Uqe$0CǯM)&hJ +S'rӏϥ]l:ژOe۠0bڄ"1`}3PWڄ%|%~Swc.[Sޭ2~ Bi<<;`lvEa@84Ъ@Hn|?cO! +$je7$yB+_&h]I\@ H„t%XAR0BY\}ZwEVC d[,&XO2SWύ9Ca$d b0K Jx(di ~UD~Άw-<R06q)=l2 Dz/Вw-mYXw" kϠ`"_fZ:&c _z(Eqx`)q؇1E3|r%gݯGXi*Z*˥rTLx͵˚JwŞI^- P< jl@n Ȟ H[1W *<,(*黝08E)/s:iE32OuܽvW_z|KW\r ]tV{c;:sԃ57l Jj,t`R 'dX0kƂ6myfixqF,8Mӕ&kH~`-{t)`LAP\͕πs\ 4ٓ~vd$ m w@@ 9 S2({ޯqZ0W!TBo$u{hӡC +Lf6\=ni~"9weX)+ff6,od^̽w#'֘_Tyũ+c'r2k'mnγuE#kU} u/]CW=s9?J~֕œKٗ992*z}vqZrA4#^Q K1bH)fI *c`/>b~ep|ż9rs.P(Yr3gr䥟˸Wr펁!1PwrpDڙj~F +ƴc:{2od]m8|7ozMchglġ) eԗM"wytx{dnn~܋Mrݾ#9X@%-j,M:T#pjXJtlh +HP7%бȆPb(dZɦ(eS B48H;͕C͕êb)XXZX;f`pN3X"l %zB缂*<ĊɵgtGrLf6D8N% "n1L0a&x`udVяZ4.PMQvD6m #ގVQa˷~Ne1htXbL12ߓj;9(:*¥Աg'|?x$&0U/V~XS2·*Te*ki"Q]mKTUm<@m_\ZQQS_SpG醺cNNCCoYymAA8ytlGio$0)BXLϗyRWoh67o-$Oj"݌@tѤPiU3w|'rL\T =WKqfirzKH)nK+j$Ro488:W֠)yg^_ 5N?7'4F%Gc + Mrt+Y06N#PV2#u#)9]wuFfh%Q5'1كƧ4P,K7Ҏ0tФzhR58sMqrs5߮t cȉG4>|pڝ-=v=xiwӮP4ox6hFp5pm/zʕwn7wyuA;;> +stream +xڄgt[ך%($%'[rDe3s9gRT$G/Ꙟ鞮Y˲Lȑ% ݽzs/(g:s.g+d)H|`ѳRIA"Dv@v&_z:OrA]C![|ȕɗ_(_TΖgtѳ¬\^v$LuPy6_r:Ot2Wt"Gt" (+=| l E嚂 +/r3cR $='>Q' N[cg9sBl;}SBia6T32^x[8G.^ scgN<14虿;y؁ْ‚2ŅՉ3LfuֹZȅb\)s-$8-8NN h}_+OrW*)V8[7<]Δ:U驒>&X1>SvtKѩO~UْΕM=f0j剢Nj?^zdэ,yE@wHvM?.zd' ?8]|LSZF+ ?9Qxt+0xppDO>Yѩ' 'R1[jϰ_'[W +YSc:}=U6|wrzp|Xڛw%d yOBًn(uEORѽȻ KO02.Zv;~p>~jcWY׶o1IGTygLѵ^C3ȀcMYFqKPT&MO>#DoK+~'omQakX!IkDF~/$-aI >$h [怨/h +Z|θapoM?O<FR#i /h 1 +cqijO +~Q7#p7ϱkrjֻn^=̽ިQC['k<6]{KE1A[Fm1l-Q~5yMF?e9<,OXq)'tR~_5M^^N g}u6OSgm!esRoS8>ddfvTcqkUۺ;:\cdkm^꩷aԛ,jqeX=bgDҺLzmxiC"e[lmplxYoT n$:&C@@ ShJtMa_78a`X7lgyuC蓷ET ‡ =eQ=ޤ'.0DjA#duzNX͵T]~Uo՛YTL#[$i!j6ިR{No6N?|kۂ_a2^U_5Nn4ؖc}Uޟl|塚otywcn4e6\1]1_yb&0]zl1Nn& Fb vujhM>1+[RS zT?#֏=6?8;m-&Tn$/& I5)ҙ׎*"pߏgۥڡu1-@;Hcoikl`;#$j Æ~|KqZOU__~49K+@*:ÊN/lй1qጙquVŏxN#h=~ϖ=EWBщNTt#.G#iN*ƅ!Y_4X#U1Gk^fûr?4Eo~{8ߍ韛|etlwW/?q[0;n#?|T&j 6\},nNj⭷o>\7wB?ĠM^@GwNۙ$wMUu` @Dfz~"l zb׾O[M8LB׿2l}3IHH5O1"$^a#fͫ ˝?8RDzӏv?6?v'UwRսZ' ߺi$-Eo +5% qYQy{DVe-qӪ,xAeO25yl[‰(S@9oӖ~c˵fĂkh<^}l ;;mL'-[uؚn8+{@hLJ GN8>6}k+;77yz0czbj P* H,? Ȼ|F?8)wxQ5c ˻–MǕǕH#[at8M5R!Z7 mc wd^ͣC/MliHBMm`Xu"z9Ԡ "OL=ɚ :<6ŵH| +Ox$,yl:D7nhz=iJ6}*$@5hIbʎ#DꑴeA[s06$uڎOi/yʬOX/oŠS'+O׿^j}'kOp1`OwpLnY&7Iؚ~8z\O`r LmטΈtDrm bzj.=1_"TR$D>96cƑaxM?}AyP;~`b_C[~d|c8Yn\Mh" 6")I5@LQAYm\d4lThM~2 ci dХ- +۴Xjp]KImH!Bn-mw[V<[%#僈2VytT1DZ2$} ŐM +-VTܤD"ɚ+^ScUw՝AeOꑶ +ԋueMb`'0'M޸q2YizXфW\r)4ܰ^ خ`cJ.I,Sɤe"a_C L^q{Hb yQ0mA1O=`Զǖ! ̆i4a!C"'$mݼ&K& "v$Th`:V !;$8(I@0!~0ΐ%PqqnC`$JH4} hq;`m}*!~ kސ7+;6FGF!>pPm]Uv%A u&%؂X@쐲7BYSw$MWHTwp^bE+UJ풺0qި'*'MrOޛ4O?6_~Jq CXHٱ<]Aqʶuز\0O%,qe|8 {A ƁY˹TwDc q*LR܈hP'Јz!$~cit45D@6RFF, y)Z+UZB# mxCiMp\^sL 2 .Wx nt0RS"iIYK$yB\b&M#qؚu &"y$lU&_bW qZlAPBCCW!](n0}Ikm/ k5Кe$fZF"; n,eZӒ,G Cby\;9PQ9a+_JYSD7†07MAT1h󈜫,BpJ$]ܳ2]ODeeR YC.Yҗ0_z +iJ/!P&~mqmFӻ-76o7^K:&h QYG.լ[|{`ȑ,#W1#99{|{Ɛݴe4a܀^ZwL;/'q>@%eL:B ]█n`R-BP _8y,a'i&H8CQDMLYt޺@`[C ư1SܨLVK +j$/AQe8nY( E aU߸Z/۔Yr70c Jt'eM5"N2pQx`"@41 -DW +beguUkfy3E)b4ŐZ! Ow5--FQb 1M=6Nm.mS@dB^٦rm 7ol5ߠFӵuu:^1+Vx>s I!b֓r+cA.#5lLnX/mئ7WW+=d4Q8ɘ#sz %uEC8{Q\+`4=#wb9uaH c'mS TA6f)icsA/!<{$ʼ%8C 7IΒ"JbJROHAa]Y h ;&7˲Tȟ-1!H瑾!lK@E?kCjl:z= †ԃ$McN?_.XyP?eɠ aLI+Ѓ!Z;Fr` -tkV˭MZ:$lSqؚn0lB(=p7 GeH{uCJ(o )SD7@kp^;tCaIr|μZY*-.>4bٲ\ е% `9 ++Ѥu"iJ:0$n VRt-nUkX,Uj%% \+*K3$ $=HKqS<6qcYΗpUh湺i{i Ro!wDd, VׁEG@v#Y6,La^R#$3[l%!g tEܢCI*a!ز]W77ol6ߢpcaQC:Qewsxje2樯30q nDQ[4ODn ZdHJOuhsրȲ1/[K`s뗊y_dW-g?z^C+)SYO0{Q$0M&q"n_3c@ Hpc0IF}acBR$_6Hg>A5+HBt8QXPL79=j~YWǸc<rP03[YB_{G.h>j/],E4}, B $L)FzABUoYxϱKe¯˕s2P1㵷\DTg? j{B9L8h{|(r*;6"UУ޴PgX`01K`:9*8U ) xdmaUGD1ԝh~j;%Đ:M_(BZlvV71ézYB ϳ[ R|L3J.0dO#'Ҟa|uČ# HR? ibڡKlYkpЍް;$;u+j c#P\ Ւˌ]FCp]C5MDVTAT/Hf7DR]l + =-+,|㪠/o?=[^Lr] Y+UsQOTBSvM 5HTH" 3-!yvD -̫P^cb7+)=Z +;zܺ rՓUg#IbWe8ȈmAy_BȆ>%+fVȚIL7|@ 4W~J=1#YW:_e#*TA}V1g#'lΘn$ZY6a^TzbJݘ LYenR [AndVr5c^JHe* +C(-㰯*:#.dm!Y{868!&KN&j +ȍyUrg&ufiE؄!wJ{=X;23 ﳭ^YkX6{\9"x(A +e^5.Wu ˰fyv_t.}"VW-MOX[Al@EuQ#1)/8\<2RZLY#ܨs: <ޝ/akdbj m_PxF$tx ^Q10<"߾UX:慎EoXڹ*l!r}5I#*s|Q+Ijuҥٗki{2dYEm@Xȶ# #c>PJh :μ*n z0q`Hy|E3c:~_(3- +}&d +XAD {}lVP 7867˲ZkZ!wW jÒ89`He V!oK8$ VfENh :d:W[+V RnJ+5Hc=4X:ǿ[wT>[M3 2 2nf9mkE_xErl"1(W*U896.^~vna]&aHmvEM|cZ⚁Eycgg٦YiccM3xYohfUr  +r2{lӒW]~y7g+.C˲_2?P$]"5H F/ A#4] eY|4@ִ  C2! +*!!^0dָ4[3^>$  +Ƕ +qCR[/")( AN}/L5O30Dʱc>`V)m.m\l+1FX!0d ) { r ^ʟϿS6"l4%L&дXoX/.+Usʙr#(Qf@Z +C1!Ș:͐_)\1d q/-+fBI 3@䂰k^.6:R[̱H +%-rJy3d!R$'ggI2@n&xXfwB=P@O!W$-!MOB)U. _C)k C_h6g2=X%!5z`<>R$@ 29u_!>cSB9Glļ6.cG Yo-h'xIol c BRyA a2ĝR}n,s,LQQͣj PT*f ! hH% -m +] 9ZU4; jDr+&<#h<xB k!QKD6mR)W(́!$0S @Cj af͵rm+xZ,\Sa :c;!gö{9?:B!!|%W|nJ|X8MaIE%<KL9tئZ5k:bm%ϏpzetLn4D/xx~TT-xmU%(Uf C+LK+ab,ס_;Z3"&v@J"bRzzf7Fۛ_\&`!q٨Pф`BPY.ՋUH4K՚rEL^s + C2acI\jSʽ[U?1435{J嘁.WHt,T(f*sԠ <Σ5{wF~Z Z,#@n2{?LC]$'k0;&7D +P]к+eR +2DZ$wJ +%Kd $i鿭BT\gg>nt}%OJbrD|U [^(S-(]Ŋ"9TXF`btPP 'gs)W?W:*n#xKJH9a-ѿbTP,[@Q@c/aKhgE3B.pΊV*P/8&~G0sYwɼb"BL^ +gx0G90-an&co#\b +wJhQ&}P,wQ%Bw?{[/  +aA4s5{~ ꃴt*t;xBn~䴉@P+weƏ釳Լڏ#>(S̀ʚ+W+gqK8px#LŀA QxYL67gH$ fƫY/4ߞ}#:AlvTBGDP,_,%{E.%yfg?-VۜjͿt$*~^"T%P"DtXx.z -~N//Ƚ[ȾSSs'l֯XqωiEhYZF#*[[f,ΰR2eKwJ"g; +8s~Ky_籞W9x=]};s%5k嵿7rGi{8iD|k3妕;yA(K)B e +,kITv-3='f˲dy%*[nE-ՉUVyde?{_-Y'rԧ uŵS33_lQECa|l4IT);}L&XYTmXi;}_˯s{0@wܞ}x&_q" A@r K9 +g ɀ蟌":Ko.Pg_V˭֧e{魷OeL ^HKdf/{}hVXϊD}SrZ~dQUL2231 +>H- _`w(fNJRg23Qţ22Rd R)O۷c1 _t"eMdfr:i=(vG3}w=LgQ{} }f20i{GNů~JNWv9_XLX̗X fUzko晢7qʿqⱬ©ㅗ +/eOeY' +&H`q<{U8UxDt$/9gY橧 ;ȴ1d.:f*-vAci -䂑'l=bqvͯ/zTZ]o[c9"gP4`FҦ/i5uf&RIH!򛼲o'[*ղZM6Xꮐ!cCGa|c%qa="Z皴%$8u7❐t+tä3ht5'mYZS@!g=6eX5s>գlpbb'tv5|۹ǧa\takvsMJ\LꐶzO_yFlK^aUt'Xvwx)Q˖KUc#xݓUEP> K;-pQ_wĵcɶ'RԻ GwRS!h%4w'Y{||gH?n0vLm +&0hõozowڒWt'ڢ[d,N\SvQQD`H֊ 4Cf #6 zK"< EgBwP5H( d,)I3 F"rñ*~UWXb7uFq$ a;=k{ṃ.*>`؇PimvzDO?RW[5&٦UoNv@mbeIBk(MnuDj-HBƀOE%gi{R֩t\I:B+OEIp ݟvntT +<$ݢޤ~; +)ڃVqDxw}M!6PvE|ZoA?ݤKe*{u +t;UH~LExH[b\eի L3_xm 济l^9' Cbz+62 v.EWZ&LfXNJ~M>QosLeGPl8¡78,2*kws[߿nۚ=A!'9E %&3 m&$8$K旘xqk55 Topr6ۮ7Nzָ%91D" e" +agXYWj!¡W!.sB?o;r [/myO:~q*=G JCK=ORMX/#eRVϊn?@R8rL#l{HZM X=@*IIUT#]dԗLkG)cSwF1SVӰ5ڼ"GLK`5 &p=Ȗid;IzNZT֩wT)'a`DbW%%n&E0q7{Z0 lX +);JP$"YeIBa2Ai")."KU!TmR>B* ljYS2E=;4T~rI˪V'EDoK`aeC R|w*đ:Ce4JRueWN qUKbÏA|E}Cl; uoŸ])3:cE m~e+ydR:yօr*>U݊'ǻKtDH.Ciբj!5LPތQ/0?*ܫP>[ R.pʑ:a_)-TMJ\tQōo J+ $cн7NP8vWsfTtF/Jf΀gCA +17a_#L@:KN<_-L.!oIJ+;0q(;Sܠ:U^O(>W7@uuONÇKktKB`Z= +^J1/q2.]Ǻ3;5uGLMNQB%TABeGѺ*m$ XK*Գ"ϘiC.Uw(sI:%qDgYyz)n(!S-~nyˊiI@,?Y!`Hb%9n1ːhlY-IӃ.ƥCO"$y} jQO}AMW0ᩐ/sl52yC$"&,Tġo=wf/m8!/=~]_Swb^V +<˴}^% :#EG|/@ 7`Msѕ|CD@ԝ!u'! $*[4!5 ::0#R(xȁvʁPtC nt)T]@:@#&<;<6=۸t_A`[嶕3As̙)*X$-==ݶl+2ȉ`)9u[s}@n^*)E|g:T$p4eVCLCF)!_!P S[F_ = sF9JSI]g\݆&$vU9>ASebk9P>iwj E炙CHςM6IXe +`|f7q8D8Y5O +p9!ztHXֺ`MM|dE7PYwbP7L$X.ێ.RV̚Қ!BWΈ2Պ 4SYR~BY,O /LHZ 8Dѕ!-"1G !萆9&饊ՌC =+{AI߽`7waKS`)EBCRy!A`Q1*2uݽ .*d&ےBA!(_6bCnpF镦g,6>p +Zh""j tDE2SE 3;U"u Ԫv(M1LGtIJrɥgA(RP- +ygJgܳsFE4}TKZ73֍?,2 P4'\̮12*%A5*2 ʆTqQ̝z[C @X1{h0?k;:BcͣiO0 +i +Hf#I!|s!Eҹ7tx7gÑHUTkN^#pvtTii$_+w?i'Y \McFS{@ܰ<}̍37Ϭ6Yi:,"S`AjO NA8c< XG ;a=$n_?XSH;qX(֤1QgIkD{=?C*I|>{N xUS. R2YN,R88Y.vMCʳEZ_2?.Tq:9C\CIG]DUb znvt~lbHJcKV.[m3'M" MZscT2Zs^=1XY1$V![-/ hŦ ! qSy8!oTkb6Әxl QPڜ3H&Fé% !=3~m5rqg_$Ce"YrG +AYQ9JbIv]2@JX:"Gm +hj_,s"n%'IU9f |'GVlGǗ,#S)u{_0rrH]BGtKP p=[%ƆJ!`ru |mWB&g UXᕑvX)!\ӤmA6GLBycz4<-9 Z}WR +MnT q:xd}J5"4eۃ;X_ӢWm]:7"+&XJc͚MvBXuZ!0I9dySʶii#8Vʄa 9P@$0* NB{cuU +O1CxWC$Cʤ.E-_;Yq977 C1oFAMBoz -2k +hwFj84uHhcLp +$JVP`Y(}:x +%&qE g2pjbX?<l64LpTgh[[/o7C$-3 1tB ّ!;!qr Ҋy&`}J֔u% Lm2됖"jLè΍PX'2j +>n#gG6X c,d"t,R#,KV ?I=o#q>t113k5JzpևqiqaE{ LoagD [^4!6ȉ 8`]&)`Wǹ!|i{'ti)LD׼#4, (g=iRb KBWĥQ=lO|T8\Z&!۶?ĩơʟz.8D8v4Cl)ܰB ^\&ZXЁxM'#I8K! G(fCh_B4['0MAtǠ]N 0:_:%k4LB+ 8b+yOJ>V:3eEN rg24bygUIYTq"!S[Z+ +Xcj[9<_AB*Mg.{bv22)mƳ@IBx3D! XC +[ bۄ;!c2G83u'fP&tݓ(<'6lbGT` s7C"_!.0Iy;8 Hc`ʟْ6E"8V4BjER%|By0SWOgM=2hI5PJ}|&I˼)ɵl[.5c)֏2BY;&hYJxss|T#t{竕^c +O@Y]x7'=T6#L25CPљpIU{jMGLtm1(9-qyd}o >@(-^-`]Thd3 mOm`NlyI} >(&B‹m 2Xt$x9@#ZRp([{Q  y.4]IMפ;}Hm &uۅ` &Tq\EN +mu=j:dZvΑ+L$L.J P4e$t8"\+”9%%!%‘P]' pKhk uEDm-lţțcV3 (M:/F6L- +D0X̹^!c!^& f:U4O[S*4")yBQDQycTBycǒg +~,Y$*p..Wyʷiv!)9J9dY>OOT1YәVwU TuTmS +RB9q>Zb myq42Oσq/~ ncT)CףlK-ge-19ָb:!b:AbQtT#7VCvQP ec\EiEs-4&HsBE"mB)FaL}qH ОÇ؃ p,"e!RVPJhO’>#, @`huZZ4-CƋ׋8d'i$tU/q tb{PI!3(mH mAg|L4:jU4NqbCK¡Cv00әd# )ږ]{͒9uOL!@~) ؑ5R?&atx$ϒ_@H9`|&8:D)]AgLE]1$'IĵDۃ`B }vQHB%8dZ8Q6*1A|Θ>QN؉9C"'kڠ!>@!v h"Au( fGSł _@@DPT#;o x0d _s0K׸yioC +YWˤYp+QV97DPjZB9 0fZx + S-]W40D"wRB\envH ˤcl#w" KR곂QC'2RHЈw4 K1$ YRq#"=2`ID9!+,DWDHVf=ƠD@:E U{Đ:dkVv$! o odpC҇:0t=tmLBbȴ¼$= BYAųPf?FsA DŽ`Aע4"oQ4O ey WJ# \ 8L}D/~Y#|Ao;^|4oԩ=tȉU{kڣZ1JќUJre`x+C~!0sz +Eќh (6N(Q|[ 3 ޓ'K \r?sYCϢ1*dx-qH.q^蜩X:t>">BIyG{-GIg] jed;ٹGųOA S&A@z"6'3&!>1';LsybE!"bP@ +!y@;5ST1E!Aŏ!0ZgDd2 qH Sj.JM%;` 5x` } + qNc4!}*vĎIu1rNR,)MIbpdFA@oR"VtL)|CTa85pk\Dz~(;gP=`92CۡǠ{-\ $ ^c )=U([Kkrfx0@#kl4P29y<Ġ!Ls).'/w~㬲wBfB+t +!&+sL.||S7@E"ǔؙ:$ςJI1Q-|!.Z'}17?c&~{B8TIJƈ |taRY|kҤ~Ӛ` k +*Đaۦ]2p %8&,l{0`Fcf" <1%2r-p ~\^يgƸ+^q#e"[q }ʦ*6Lp1 46DH0 ӄBAHT1D0ĕbZ[=(Wz uFn۠-"Z:d pH6\B4Vߤ*5"HvBD<^$~Hٯj^ܭw=Gn"plZk(hdvjT^NSV(|Dr__@2X)KPGݥD%"?R"mX^%Zq!GRW]+dxʥrяGq#Dž[H0ZĽVQ;u/d]]+_y TUJGArXxrp[&AB,hw~ί ߮4oCA6] txV;KٺiȰ.d0vdo¶FO*RJw`\B$EG +_RsJ{+/oۮ'®\ . VCB:J*ZFB̓Խ!|exţD% >*RZՒj޽q%mXoj?/Q(R#U!;(\QZ6)|aC!FJÔJ_=>΅bϕM1\Q%`7^׼jD^ 䣵j0J:\).'(G ACrwJJ^>~{o?n~U/w.VUKkpjuT)^&*\EVxLpw{{vq^;Il1cZdZ?Ssk +9T=M/Dͧ=UBH){%D#- +ABoS  +܅;*Ɵ JEW7seNτ\~H&XU"/z"ƭC}Yx"?Ǿ^,6NxCe/g붝iƨriH!g;\)x#|uHpJ3*p폈RN^-Wzbb_/`rpP\T1wR1BP !C +?a\g6\6~u݂O6)+XW X +rp +8d_ĸvq]y!P7[44vrc +[{S4o66(Dڴ2)G |Z^ErsUi,#CJrrݚo=[ʃOv'yPͼ-h/Z^-nxwߔ%t- ^|~4mu?S|"y[hw/2Z +YҾZw.IZ]s#,K`>bL$V,bJb@b[DO.+KJk?,躨}Aي56G4YU<5#ul Zd&E G2/j봜y~#B~?>x h@`5LrA?F]xCՅ~, %%NڒZ O!.)iBUt:&Im 53O}D`GhI +l总,&Ƥ9hNBG\r&ȅIxqJ!x}rox 9W7a),0¡fU-[bhckSKR+B|"k[%nM^"ej6UUe*^YDDBn[ +0kXZBy(n)nJm[[߄:pYJq&5]sBLvBƠ-%k ' T7' JJ:~~ŕƾ8/UV_סչ^yK'_?o]D?\~6#_\v_ y9"RS'׺_ϖ3 BվHn_t,kpgje^JUaT)>IX#{\9%Ty,Cz|g["m{^϶w`QkVЂeA2I3'o +!&hw=7$h]{C qз=:O}K?SVDdQ NL-]5Mf yz iNן\5{^s +wo2 gE"˔ VC$̔>!qHb]Х|ǠO:ѭXkPxְƿ~g?w^:{6|<0u_xdY|9鏭ͬ^;~"myxW+r&b@ܫ#RH#&V#(ABYbi U\48}?GoU 7fVqGgۧ 99 [M˱9U %ow\8]sS_[6eM`0m YLٕUbT)'jhI]o +~ mq)%mii8:mV(~Ee9L=dyr.tmSʶiBhd7ssCb)m/q,<3źq.3ư@R}!Xx}tk 8C֤m`c6M$}߂OZ-CvbZeE|H-̚do>4Mfut|+Gov@n,c ЛLSOJoܷ2kXRV4@aXVñ0jxml*a + w:SIe{L#Җ qXdG9v,v ݋--ϵ!)G)2-$,%6As"$YGuSykm4ťwrHgժTVHX#X5nfk [p 6X2^0zn\l˚'ڰ9!\ϓr|3:v< 8$:}; +AiB!ԇ$&43 >ާN{Y#6X F8[߾s³N{fq͝mR1B^2 h:80"&Yss mGZ>iKhFdlS@a9f;9lC3S*x1mNA +:HgY{d|8G݇nE{d:2'!u*:d-)=ugRRL[ԐaAz;d7E`p!;o<<CXX#`;=隫%R+\a *_2D2hEC3'JQ:UkyR]q!T~5X{㔡#}2qkD; +.5}2!n o7|777|L0p|kBP%s3h JDK|5mǬcF>nQSƔƨS [Ln8BL8Ƙ +AdXuȲse3/b#LAC hp UKT8ZX; i-ږ{w~!ޢx_Po :I:kwd+e3s7e֯%SҦxB۹9@*jVG(MB S ;o!L'j}R+!Q\}Y,/PEnQDvegūc"|k큞3C{ zV{n\x2-.*Yx +P%+j>LȕSIM{\5D]!LEa)E"H9eeI6cC6V$m,4QeSDRY}[iF:m~^ښ_mٶkEw2#^L޺@rw7((V~> `ˑ%Ę# `SøJ8Q #P$v/4,-C+w{CkC=+ACyGw !3e1=I ⑉7V(RF]fyd]gZ9̰4mqyS\d C2=rݾ2 X0ʷ$Ih^j4+-f%m{J۞v(!p@hU .M:)ԿCg^fB:"o[Zt7 ن%c ,ցE19#^6#̤(_j^CĐ\zC(j)kXdQ7}:d,dLb[/btJz5mvĐ?בmhr!Rl[<~9Y&Iq/kֿ}NfpHOL2 +-KeFIe}j-)ݓ17kn1 6" +!NFxIrqg [pl!ϼ ͋K3C8WĤ S!UdriwSYF>#o^ΥAI[u竈C G(ta<*ÏDGW,ǖǖ ,5\fy|~tؓ$xP<$tFWrٍg!3r+F-^EzYmu˖#-8͂o#TƤJ +1$ɹFm82"&:oA=F!Ǡo#` o!$![:őy~M&x)h;k<ѴaZA޴waB fhCPC^/\T u?ŧC>Q&j!/R0FLBeY17-Gl2Sz٥Ӌ'ImKa6F0SVJ8J!&Q8db3H%H ϕ Ac ` @Dr$m腌X'#5tJb\ .ݢr7?]O&ny&n'Qǚ+ +1~>Ϳ0xVy `~q-7]^?߾[B@ +$hBg3%EBx*43 +E(U1 Y}o >rRu+qc;u**Ggtu@s6tAA +H+%Ab1zWdLxyL:*о{!\fgٵ{5Y6!!uD"I Ld{ޒ6)ZB)d{~ !Cf!t @'™[6 H@I"P LA(5$ d:kԞrXUuU/}>2Ewx+ +>Xx=|u/_ENewKY)pHhkY1XeVSJ}F B5&oA55$9lL0Rļ^f+)JCty#5DٍD)]'3ir+R$A:a,'+yf?K]*5kA{!;t-Im ˖ Jq?T\P T4OdGLR~)W]u^Y!dKvG`$iO9dԷ`音dpp`ջS Ih=XIF.!XR!uc͗ZF#ϯ^xb%eU(8dkpȻw)!N!%} +}~Dd ,`,!Ⴚka=!I!L]D1EL W[=u %-ˆ&xr )p +H !W%TA.*)ĐAZ]2=cJ94tu$mꖄQ=Q0X0j"[k VJJxa\&|[U@ !"<֎ Zj-iMh`x(Ȏ@dq,Bt2p ꡺JE\\S׵pTΖ܇J[tg>CGh2RD(㎶;IRք)!tNq0vQpy(_+:Mz=fj^sJ g{Z׍Fr40&|{Cv $XJ+r!t 8$!\5p؃Ԃހgs!WV=V@WF!LC±CR1x*CmvlOTmx[׶%4qUS\O!ZCLYCkF\ +OU91 l +?|uRC  ߠ +{zV.%;;6oa4j!^LCRJDG/P6?$Yȏ2lxE4^yAD@Hգ(>JrBdDAx +n!*?%o@51J\sH06 %{# b{ hBSR0SƋmGE K*(V(e@{<SNA +@.`{7!v| q?P/>F !?afAFG1 p]fY&*"ApCj~z×cy?:v.Px,!-d"O&CᚼNrM>4(!  buj%lݵHr A3Y *%KEYauAURbl8cts#_`憴rJ1 +☂P "BW_l8%Rnv}L<¸D7=OHsJ1NVa dbm)!@w5ZuHx h8+A8ՀCHg|[B)0U@QnoK$W6[(P)|/|!,CD-(8d(d@0jM,*C릫5q)3 >5E!@ pH&b_ ucpsz[G;\n*4Efc*Y)]:V, GY:C`YxԄ~/F2Aak73;%B,79b^&V]DtPWI̔Rld # !PH4s"d[##C<o&μ5ɗM ^#1m@2C!,ZZ$ qcŦif 0pՈASgP4:{t~B+^\\W@t|5z7[x1B2l2!͌oIȪ[b)pTJNjx,֝©D4q ~J;Ug,:(A if<l9m +inrY!5ʠeNeHOkCa) 1)· [ P H$+6De&2j, %ЄAFmOJ;Q$bLBpZPC9!.Zo5MXcoW!s2\Ur]BN~nRPw F|¬^?ބ@1+2Fepu> 'ZWˮߗnr]aJ!t0Kg)وCA"єd] [ ` :mC*Ck.\tH6 mK2.V3^f*Fjl`LZ5Rx`"LmU@d;Te)W-?ؕl6G`99;RƇ9 _W) `%V3lRpPEB7T HqW.xl.8)8F:R)JB>^!w˼eR_+ArP_bOpHT}.jşԨFs]xc򷟍n WACA%b}o ~ + M/o@:K;/ \ĺR#T& GkS!,]'Fp%-V*.PhD0R*rr9WKX_' Ua썜wr趋£:ZUZlJ>R e|\2X** +Q%/ kmB֕Bز^\i/QޥNFs~M=b杝{-܎!kR() Auެj +KJxlLJU*AI\ F(מ^{PvŅ9wx뺦yj/<$T)H_ԛB]hCفOxT0T§_CB>;_XߥoTUz>~+|s8<^ -z~yWΧ_yg_x;[σޜzi۩ϧy2ooWK?+)_*EWWA+ˠRr %%Jܯ_>/~boO3%-yw߿nW.3NۺzyJ&h{ﶮ,͗H*ؒ,\DRbF9H Id9\e^Yg{*%L`@d ++uLy vU7k}`ݿR_qY +@bR1Wbb^0I I/J%}D}H!cgE?߻Sѷ\ﳊKpsW&l/\֍=+{QW. BQX932?C ][_Cg73_gPկS+_A\X| Z>Z>|\&mrLO+,n<Ȭ158,(*9]b3LĮ)rq\‹T0ayId[aCs.<7B +5ǬFG׹[cgg . ?ϋK `}?kZXx]TBG?ܼw|O?lm~s絶խ?nkk7ao?>÷k_=>/u1 _{Kvx"+2bˋz>^tAs۠ WߢShn =ZXV:T&k{]XG{\CGk@Ĕpw x^s Iԩo֪S}!f[_x]Orxϥa +]s_v+M&u*8~H>O<[ؚ_xO-MÝJ$%ljʣLwO +*W U ^D+X%xwe?Յʆ*$d. +%{<]n>]\Kk ur@ɦ]nԴSg/5` ++W<?\PX\qج}}HB CS/Tl(Kv!B]x K2VB\̸+$ĂP.apŻ(= +.;~ZJBGs۟]3ڢ x]u]u?x9|Ηx hwŅg3g;Epu K vQAID^$ޤ@;l I+Kkc=A8f0ؙ.J˸Sܧ^;vĹcuCU9vl;ce?qgNk;u!Tz_\ovi;y6 +?ۑ=l ( DAeH*;y4|s#Ŭ}O>Y}tgOWwZBDNSr/>ߺ@i'^*A{3 OEDر-e[aTF_mog[23?S3m'Nx>^ӑ2AIOxۏn= =Lt棧N:N?cD^~&-e69&(.سwϳǞn=t=UTzzʹЛ4vkږԄ!0g(p&k])-(-S뒳k|}V5 EuEߒVJZuaq^x!H߲ ҵLKAUsZȃKʦ%](km:V@4o -j)e2^4N`i->RQ@VSM25/)KPᑁ5_4giؾ1/ 2(2:V7e՘F5Q՘TRJ_FRp\yu@Jנ7ܝPz@*߂ڟ4ڇN>"J(D˼ RwRh4UPxp!%:dj\?.`.}%t&/|.DۖMmK*]S,.l\C<`n_&.g,Gӆs+NzU)6xQ Ÿ#YCdd.ѱ6Iή1l33yi]kJJkۺ㎷s*g[n<ҷRy)bƾU`VJkM !Jh0VYsv? h߁cZ)ft_҇Uvbd`;-YFߣb ^ P7ZwlFBK Q}tݽilYT4ΫIU 5CSږ4 +mҡ +TZ:DS,/RAMspZ¯}cpRQvL]i}uC퀹LgpGS–EQ\yJD8ctjJ$ˁk!jH-|YmpM1;iQӁWoh[gB\h^%:_c,ȷȖb|425OLRK\V7 dc3[}`UdN" YbJ`9b܂29YwF1Mp\SZomMSGRsBHI֋) a۱1>jox1.ŤA?\7Z:?*"T$L{o<6. ϭ\a43ynkQ굃u:*Nl +Wݵf}|ӄEEyҿk:WX: `G"˨4kZe4 ƴʟRr\c^_P3rquQz)1}ҷqҶh4EWt)$kl%IAj/#gY'͊jVv=u\+q]7ʓ6EҶ5cxN70 /J~F )A9`d9~fdµ s'> tR숹nl)+i'-m+ l1\GEUDb +gAភdY)(~#&w\ dx *;"g׷΄6 -U}pQOEjhAl=[ƍ`R8|2E6%I0S-,*1Oۻ=77X&i|ۮWZkwפqmO`΍]HsۊmH%qC~uIxJ>iz|HKt5]y_#o \[M*S{ލHA," />_\噷uUΟez;廾u)7[ cW:X,~ىfB4;hR{⻾)$X7m[z+[&[l-g}n:,]Nj <`xϤqZ3:~$uͮu1eQuA* +;7Cꐵ`U-)MP$M ƤI +OYpYV#O;!qxolAekd=75Ɨ~<8D쿾ܢ` +K涌1Էk/`x{Oٔ:pڲ躾{k$.^y`BB'- YMCsG56"kASbcz'^@qusk˄|E6Ʋe!Yh| ]$&xi\;'-q#6 pb5mRks~7s̑uHEN[(-9KHv(2`K7)M*=I2&Yز#|rlMypRok +zgqy\~N(Kڒj'<ٽ T ®Gݏݏ !Gr@1ZEX碵R!Ibk_q~.Ѵ,B~7NR؉ +9/H4CL-Ywػc#ióY9:>)b,hJt/5& (B>JxhN|I7`7$KvlS2G]p^ƥiŬK4SvZGAڂԗ sT:8C a-Zмe{'Ը4Y!eUAs#!w2 @aDNfS5N)}\0:FD\Z ol+Ɩ4J +{8zӰXB1G +iᓥ\ £/F 8r X!DJv/F&=PIsticfVycؖьicV }Ҫ]k]w+C@xAoOI1}6It?c.hFՍY Ɛ bP66s|,ݎHw)FŮ "־mޔ'D hKbL~#+l%-)k4a.X"svV靬Ӎ*OO H_'3ab=5.p% Syshbr8dcSB*|!Kz\țb0(G D%il7` SˌiFJuNWkz~^XwA4f&f!ɀC0k e3|u*;cmf2kiUa" J?GM03Z혦iNW$ad K|f|ҁ0wZHM8\WRb[ip=) +s4]V2{CH ٢BF #N=՞&>Śg:1|'@He@*9D҈,X-6o$Xk^=̳+?#pȔ%q*-SI)X-1h%F3GB5 U5Њڒ)N <,Ű1.6 2b=i¤Ώ2uLi1!aھL90+K.GucPEeY/6,6W ;MD_Zwu0cEFǒԙuveTUg1ﲬg?fJ l9gtUm.o!`!0&ZA5=)2o+SBG놕62!PHbˬm,CTE\"<.o+7!  Wy9R Õk\UrMJ :ėD88F$Li(H+Peϵ%ĉtVӬ=ͷd|Ppva.Cx-}'I& 2:TœWVWW HGqJk}e@1 (yYsy}hW@V-6(b\XwlŨ7,Q7>4֩UJptCÇ,V1qH!wyYX5/Pn2K4]˄hBjm@aokǒ-2j`J훔;DžN~:)qk,"KSnRC&MYċq2+rqi~+ԺPb$4R* B+!vT! +H7aZcuҁux-{/ lyJ"8u%I?:8 u%!RtEprDcegxcӽr%MaMBPZ[!1 uoŎ82bǜ"aD,u@hAy X³`L 3\Я(n7h$X@AA{U܂eYr f+Pod`[[v#6N*=R:5 ֪WKo|Y?!pSТ%!'*D4PcԶLȏ0dCv]%X2=dȏBoQC-i-Ys8BQ<ۈP)=!r/u8Sf8s0Iu2.NLV+W8!'br]Ix:CEwC@}%]Ji\~%C&DTrzCP=`<BbVz:D 8j07ϨSJ5!sL,5j݋[u~}t!:['MY]sB\AH"c%2ikqsL0;+UIn} e1u$p 4]'=(ŋ`~eqeE¯{Ӎ)ՙf(U!dVJ3R r#-d]ǝ2?dlfTAc'5g1\47Ԋ-@Nj~y qNAowQ[oiCRW8JV=8nl[|BGfӞtt0g5q'&wM +!ywt d!I!%kj&kɑ"v>#<5nhC1&eqsBBT[~ĐCP5f!ș$e/X" \kc0Jc(j8&jEeg9_^J!ByZ;IS^(?HP`q0AҾk޵gZQx:!,QYB2jDB& #p.a8Sٮ`I.A&N"%-  +8uzbu\!& >[" +CQ,Y۷![e#)/Gq;&u9i}N;xYv"Nǐ)V`8#X8iYLщ\k1?Ne\l'H \=ϻU! qHR÷LF2CKt}+a:g",0"v:N+W1!] *^:/!1S>Q@ ):i^6gFpk5,V;Oo8w t`ᡂI'&vB97 Q7%ZeEok*^#q( ) f,L~gYeՆc -aitAMʽ1E ;KqY{žzp "s㕨Zµ` et0##| xa#Ld "sL@6Yjx`C!H2G\ל2URle )H(Ɩ!F9>HqL(4"M(3"dĐE/_.  +,y&DR`B~lMSL4 L뉴MjCJQ!aHdPzgE)ZQ5|ՏY]CCR0N@ڦ.IԍyAjqB4k&UY1mbcA?_Pͣ.< "tyfztfM,]nHꁂRӵTH$QsB +,Ҩ$qHDmB77CVҬbdg!2==<E\#T}d㌐Iew D~}@/"ˠ43 p G:C ]p6ғsxq 0-N3x){7+N4hMŐY!Ҟlv^ʀ3Rb9C~!C ,c`f\rO ^޾рC~Da9S.:JjpJ@dgJeB,Sx):y*=r(uXKWlF mC9 # 2}qj1In&&1m;c2̜Vx/+o$s ZMoJP|!w >?[ + :M̻!/Q"@ Bc"uOJ06Ms`)oXA"4I + (SM j^!E9[.{Cv!DeՄd`hL"&)gZ;tN 9EdW"^ "*2rjCF'2NaE)a:C@d`ē=oN]q( w8CXK.qH~(b+aio6 0¡@3P3/v:bSC`T@ 9i W? ruHMHLdH4&Y{iЏCѾbxPMM18]`pH f+W,>39{^^+RLEKF +BnCBez=Z# sL$J}Zbm08fY Ar\n\v'CeBz ;l1ۈơ X'mpf>KjL!5ATL JWM2QpGDQiDh`3qM)Kd)2. +h'%UwckZ!W9@AVA#8&4M,[CѕyMcJ`83!! ,6ěжU1d^S)p(Bs)IhNU-HRE:`fy(wX +"XyW7“R5 BJ.$4941 VD!%aAD 2U\ݯ qU?***9X8fJ-_`B26ʳs̓(g+8(q=0M';8=5 +]ucTC_6@qe(T(9jga_708I A)a[rTIUoa.#&Nz$3p  >~.%1J?58<3Mp;l\hcTl畒b{H:([Aa|UT|[S\,5ʓk7 uZDvZ;^M' S :dzJ5V|Jr?>`JJ6*:(iPh8ه@Q$*`fF mA{Y5xI1P#|^߹( +y]2 {KEfNz F\d? [E!?JIQPfN3R\S]]Ҡ*9ʅ߬Uއc'uTըVUoJ %(RYUC5!_)魐V zV7Ek),޽T·}gu/dw4 ^xR )z{UUe.R}W ?_8M(\x3>-Z'7|\XfuҶLyMBn:-WYSCԪqV3"`*/pY}9/O?=oyZfxUIi}ip7"}z\"]ӳi[9ԶCNS.Ln|aE:tın mir + &t|>Eɽ bB!BH/;!D:ݽ:ZmOFM:mЫL_ƆX􄆧N6_["HP@BzͽzmJN}S] R2QުQܬUii}S;_Z6XqCGW +XZwh{=uSƭթH`QD^B8s T% lP\Mז;^\4;~Q(^0etEQ6u^}SV5y͒wj*W/_d_0O_T?ϯrNm?lu:ZEf(p_ /˴s/Ԉ\Ļ +]vU4t*s— '2ZѠꔛ^Vh_+4w8|l>"(UAzFx2 tyYI6[^V^S]ETb]TFJNJƑuȌ/IU\X|eWDzj*^%TdZTy-(¨ +߹Pm >+B֮'>S>_>'VR+ p;poW-MՄ/ɶ.0o2:_ j=_ +|Kt/IVT:ػJ׳z^XjCy=%z&z:B6@CD.Tw +ƺ̋I$$+/9 p+V7vdpŅ%l֮"(ыX,|ͦO +'E8VGb*aFJxڃ*!ͦTQ!#.PDaqbVɞ"vqI!U ;f dnſYs*a.OH>$ *)_SXd݅EŻs_dW+UF!bP\X*,Fמݸ8)**̉=,f1BP ++2`?_Y5E{=Y}Pc=/(iw9J_}=M-{ڗQ3j,{WvqpMIO>qdS^&tO!ʍ&4=OXpimI'V=(=(=:b)wAG:)`'q#?oT[@sGN4> YFvnwu tY9JO2煟!7C8gKO4:>z^iv*!ҍ^:l%Sғ~lGOֱ +vuƃ'\XSGNk03tNIT4{d4Y" bPKV5O) +ߢʃ(SdB'K/(A y;D1 oFJkdBV2GdckI7!u=uTN"k-c( +0TZߜNC0MJd@ 9AU J%W?#*qzX׺깲e.+)u#MIV"_v ﰪ;ƄTeԱ~6vu!]J+ +EEGNٵ+օysV ҥ؁}d:B;,˾)iik&ҝV[WXf>|¬$|/}kZY&!Awz}&gA_O98\P &M%iY5Eq|Iy\8'[X&}9f䧙 ImNI{m[Lfy=z3BCo`.ZOM x3(=lE~ب%Gk` +DsYjybӸo #\0G7ąN >'0+J;Ԡ%ik5:_7η͋ oǪSBj<ݏ\ ?mW7/>TxJ_P6R#HS*M qD?f čKK< !Td.9x02 +?JC2 [%p9G%H2A +j H BӜ{? i"m%Zsy}SLJPYJ\eIE4 `d',a:\#&IxO)֘ʺ̾ k!FiaA +?0YŽ +B~fBOQ"^Hmb&0v}u铇ㄫkmVd4!:|Z "e + C6ql?316!0Lq96C~y}IiUi* +_r\}H: 4҇A Cx-ѵ 歝Im=I})u/i/=j{__1c5Cx@P˺hIOڅ ɂ|K.A@eE'eYSۂ.dkѽ _L_؊M/ھkɂhc lSz@~FӔq_5T:p.sJ䘵_Y#iZ\h}5% ,j%]3sYۼ +dqJ;$2(d*߂7e&cJQ9?c@`r\y$Ygjjz?'8Q׼i嘜tTp"#l} ?MI]c"81n1x>!*$8(K +xIԜ6U%៮Dc ;H+t@ƈV߂mѴ1dst!˰:am+;;Շuizm#m؋MAmB)FIZؒ/ĭmI(x=ʴRW$b xk}][9fhچG5>)!k$|fS1c 'UX{ qW&DkD-c0˴}{- fĐ4) j?|ț#ۤy^ڳO`w]} N=IWףrt=D@pEXBkeu@jn $ rǨ2!.46p7t`^Ч -?olW6i#9`KdȵSvӇmJXXB҇f(ŧ$sxAay~08ğt\]&GΫ` KtAmML5%S):Bq\; I?8ٹ) g1<׾vw?&=`uv.aAKw[L=P!=eGǚЂ7Xs(&Gf]#`1* r`CMoR£h?c+[è1gj]oXrtb8f-+2D]3GF0mSJۄL6 +9*0*=1a9\Ӹm]WaEeyRH[:c1,H"ۤ;$X Dq, ޓ6NCͩm+!R_ܱ`PflLȦdm˓Qy0AڣCVa݅J@- ]-NǤ)"־G.(.B/C@y: .D޲S'QqDj9QXoAtc^] ‡\G*|;1/W h%"ėX1D1qAu%p߁ (TsJ8pO3hQIGQ*&FM{dzL &kEkI;Vl7m.ChN21c;]-"oMhG8$5xA1<߃vB#s$mc~FhPѡc$̄T 7 P+"(n7F(4Tb ["Y=Y= >} +QB> !dQLYe1} 9R}p^7# ZvPh9 2qlwxi-T= `"'118tO胸3$/C)MJ=c +Hg6x~*ԡ! Z80.uҟEfX٘6G p-3zow:-ֆ=輱v~D枔@Ş}$U{j{G.7l teȖ5G(<*ajQzC"Ǩ:L#v[3Pr!؄\Fin@Y%Z$!LJXzgVX?AQ6Rփi2ZZ1!a^!IC0aidZu?0u:oV.ɷLHՑmv Q\iNQ{ 4dgg\Q6ntC !]sRa-=i*pjc0A.f'!f!twlĦ%#AA0 ] 9T\Ѵam;vR{@DW]fZݠ1 8ejA 7aޮQ`,8#=a%59K+C5^ZA$[c+e',8shD j#S/@Z(l|h Ɛcɝ5>aPmj'r1To +3ftDLm"(!Myz`ހb +oT#Պ ?>`}qHL)bRݥ'!H@MY3!) 6-VpfO WH[%rt])8xI{N;wEMj͈{ b÷F>9xTt V1Dfzi">g W \wJi5'e{[ӖHM\ĈeU\S-2Z:db%}+e! CgFUchز̠rWSe޴)4 [ {`$(! *-EƠ߆F`9ZɃ{^YJmsR`Ԃ9cw6Ra}𥔁âB, +UQC A&mձ/""|]lhw7\WQdz "ֿU~EHZ3D!C t)BKEgWډh|VbUb"&RU*p-iJ4zB pҎ}Fbsj_\lQ -#2#TV:D暥>8^zUw@'9SHA@\F|C H!`Y.B9/D8@2-)kL\Be=a@ipL萦DjQaps¾uJʑi)< +Q6ڱptǕO/Oqt(:Zr_>DXےƖkBۤN{ACqC(Q앹!V¡͕aR{X"KȒ=ue\iWg &IXS|eY<,5C  CY=D1!K !>lZ[ъh +}hn)9 "'3}Bj7_`vQrK`7"< +QHnk(NҺh glj9F,a.p5\C18]}0%O/ CCP"Gpfş;{;u7\+'^{,&m .qMr CUAL?Dj ܋ƫrOBdGIhy%Xĉ N +ڃ=6,#s*i?VĆeZsJC\s<+_1kDm4F/:ۉ=:RNiF93Mbݻ,CC!X&襰E=LS ֥FzY"ь"U[aC5+Ҿ6Y՝!0ۅ/}gsلbGpM!(Ԥi uAF~f Beq R+~b(ac^ĦowR`i0ԨWJzAe6< <. q>l-ۗK:=2A]3\+,Iho (V7FשC$!ԆHbnEWXP/уGudigGpf:54OkJ>ʇsM[#Qx/Լn!^-îC!¹%(bs8 vd0b +ט63j^9/NsG:g4C0+d܄q-m 6 K+pZۈdQu2K^9;{= &QA47ax¾:]]P﹆$QC -#`JhT)zyA;ΡCh/]r%Dݶ-۲#\t#?*Bo_gĕ{$o@ڬVR򾅰HBtzKt:9o3=LIM^dLo*Br{\ ^U-~SBiۥzptTq-˺`3 "$.=TQˠ:Z +-1ll*\m!e1fFOK.5`A&pDo&.lB&РBcDU[q9n%N2I8jFq?){[-r +0PW7Y)Xɋ;k%by_;5;c6ajGw*WA;3r86<*yHؠԯ|": Ekm.Lضm^.#< +V1tP;M:!{!-[$Y W"5תC0Q|3vB"pָW$&nEhΕ\IpjK0GMv! >Yv="HCcz+ 9 +5a%tTY/£ |b*Yj&YC"C!H(~^5a{C=b!NHٳGza /Z+@rV4rWu$-v/QaXvaSޕ"[!tx40m&/}8NB' D'Z|- MBxTeG"\I@m&w5W nTR0qBxS>\؄д +f[ax7a4_ÁFz bbT?v9wk`WC[ OqHHh,7,_ yp~rbE*Na h-4 ]J=)ċ9 4$d! +@w7mbRGE22;0!l 6 m5r4F:d-?¢C6afS5zWwZB8i]KrGӜ?Ýb"M Y!zW?m1 +FSgr:9XAZH'|mx.-\H`ADW{E Bg!w(.$.CA |,0,QemҸӋ8vC(,wo)=+;e%mR5bE::N]7eN/eDa$*Qa6:/=BS rתy? ek ] "D'8f4N)F܉yJ:!7`ܹEAyGDiTvpH* /z +_Jd r_6 D{ɦ<8$оj(@0G=4awQ0ːӁ*"A! +!< +e,@М+5ħ NtbҘӣ:o\' 806xTЍSs w.zo@ Y j8&< >CQuzdžd2+әԱ.wnB] :V Q 0Hm0`+B2JNXoP zubMYy@G DgmP?}Ej_"uB9oɋ=(xfM9 u݋.K*δn\#%=0 k4.#nDǎ<㐤P/';(Q*<ChTA3tlJA݈h tbY]C}o`[ @ +u2RQ<8\'ޠ#o)ҺJ,{qhY!U>6q3D0ز _QZ_sC9b?$,[7AD+1_M2wkwMQŚ32ss}sԬaƝt's !92T #YoX^Be 븁Zgi{\CƇYwƦTotlzf>G!&\RD< 1OHux]FGGq␒ʣ qM^{!@%Q0 #7- +{=qClrY.((wjV!G yWwQjbaZMЊJ";LC["U:n2*/+K2Ό8ESBäI%f8N^K4DA@|, +B3RCߩ݁9Et<-w9>:\d gpdhfT8 noRU萦%&2Csv[m;H9ui!US {QhyRQB yig᳄5 VT CM@<w5އX߆G 9RyEU@T>"ӇԱ Y!tg} Xu|CILݓ0 bA`1EAk i&JC̾y!K { Ő8-EL$CSy +N&fm͋ļ ijk=DRJjg-g eh9Mˣ<„Fp"r9MƈC%?Fg|Ldfg˶/a82ka! l^1~4ǧj{$-2XAFQX;#)%09ᐚZ){m/w=@tz! +z)exN@{ 1ħpʎu"ܡY-Vv7¼/`s_DfpuL=X;h VEM $#0:DPr|l^l^=|9c C Ҕ/glҤܾR,3r gѡ4%R: *2`LVI,5Ic0ikLd^>ȉm_2y0HQ FGcӂSDUEg =ku,&? GxT uH-L57-]KF~D+9G #'W H ZFxTr%;Jm&tp3mS)VZsN_ <(a:M8T$G#_%FqU\G[Ir30f({S0t.~FBBxsCAhSv*8"fЌSq'] Y/0BST2kg-: |r;̌qx1AvIh [村uߖ<q P_уb Lz[4}[[\\y6hG +#_y]`R)Y3fiZGYi kZ2~VjgSjm*1#)v#a: ]cotaXE5RǍ*B&p? + D L./;4oL˕@oeW`F4,_#{YY[;4< # +*vzΠ%Nۿ׌7 77tu֫丣: >WQy<-WK4VʏUb***QőP9J~N;/P%W!ʣ"UGB5{<*?<&W W+Qٗ +]Q6$g]u$X^^_kGʣcQxDTu#|x\dPyH{Oُ*$B]S̛UU;,,/n yJ + +ֽ*p驞yrԼm| 5c>xqV Ӻ ,y@DJhYVXdm !j6L[w4EUGFaU.w*JG{(=)(NQ.芮ppYJ75Ň 47]d +6Gi4(Ğ+qr!Ȋ( 3gң=!1Kpρ\y!EyP|hL<,S:l,GЪ;&&,̍]Ux\ɟy3OБjk(`8~!II'KO;T"_ +(qOJ 3O)z૛ώ/<&bQ̼-ۤ;z- ڂzBI]kULu]Ʒsr&s+ &HmӖTun_;6u N.,zƟ'~_xsG (u<1h[փVHSC!{RQU_ۆ sLr}\{ u?ݏuu :6@2nQ!Ϫ^ 2@}_۪?zԭ]1y'5-o񄋭s K +x-\PTtRȜJ|RNP*;ó\ +4I_u^}Qc(Zn^e:ΣbPx2q @?tf +yᾷAO1XbTàN]Su쁜"gp"&RZkDMǬ1NHp,Z/|Kr<شJIyL(rHE7'Y6ͷ17kd,Q8F BroBB^a|_u> +endobj +953 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /BJOGWQ+CMMI8 +/FontDescriptor 1002 0 R +/FirstChar 70 +/LastChar 120 +/Widths [672.4 827.9 872.8 460.7 580.4 896 722.6 1020.4 843.3 806.2 +673.6 835.7 800.2 646.2 618.6 718.8 618.8 1002.4 873.9 615.8 +720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 +546.7 492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 +644.7 513.5 534.8 474.4 479.5 491.3 383.7 615.2 517.4 762.5 +598.1] +>> +endobj +954 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /JKSUUE+CMSY6 +/FontDescriptor 1003 0 R +/FirstChar 48 +/LastChar 48 +/Widths [365.7] +>> +endobj +955 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /WIRDCL+CMR6 +/FontDescriptor 1004 0 R +/FirstChar 49 +/LastChar 49 +/Widths [611.1] +>> +endobj +956 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /TWQYNY+CMR9 +/FontDescriptor 1005 0 R +/FirstChar 46 +/LastChar 119 +/Widths [285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 +513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 +727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 +642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 +770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 +285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 +314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 +399.7 571 542.4 742.3] +>> +endobj +957 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /TMCDBM+CMSY8 +/FontDescriptor 1006 0 R +/FirstChar 0 +/LastChar 0 +/Widths [826.4] +>> +endobj +958 0 obj +<< +/Type /Font +/Subtype /Type1 +/BaseFont /UJRKLY+CMEX10 +/FontDescriptor 1007 0 R +/FirstChar 0 +/LastChar 92 +/Widths [458.3 458.3 416.7 416.7 472.2 472.2 472.2 472.2 583.3 583.3 +472.2 472.2 333.3 555.6 577.8 577.8 597.2 597.2 736.1 736.1 +527.8 527.8 583.3 583.3 583.3 583.3 750 750 750 750 +1044.4 1044.4 791.7 791.7 583.3 583.3 638.9 638.9 638.9 638.9 +805.6 805.6 805.6 805.6 1277.8 1277.8 811.1 811.1 875 875 +666.7 666.7 666.7 666.7 666.7 666.7 888.9 888.9 888.9 888.9 +888.9 888.9 888.9 666.7 875 875 875 875 611.1 611.1 +833.3 1111.1 472.2 555.6 1111.1 1511.1 1111.1 1511.1 1111.1 1511.1 +1055.6 944.4 472.2 833.3 833.3 833.3 833.3 833.3 1444.4 1277.8 +555.6 1111.1 1111.1] +>> +endobj +959 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 124 +/Height 163 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 1008 0 R +/Length 43350 +/Filter /FlateDecode +>> +stream +xڬtmI0Ž7Tl. N B@B\e[.n˲{/&!>#C >}khg>3sp+VN)Vʆkcc3*d;b=6AF0 /f:vAf[XfkXV(Mi40?|74 jy>XD61ڨ1_ʕVNvV66v cԚf^F?W+̂m7he 2[Y ^Mme'0 JT#1LC  FElI]C%nAb{R=':֛c[;F#8]L.~z/NMm5b+$5Fa`2$k鱆&/ԃRL,s lΊ#o\}K~Dq~?G8kbht2lBa{lѐauһ⦵sp1pm~Aj)5hƾ]u 9+kai*<[[mK0JipnrR;)mVVJI=7Jjf& ʹƐh%;#$Nw v "K-(К`!$Nr''Nje%0љ̤FV43&jlcH L4Vr` +Ũw'W9Kk87c."}4oaƋ~1~|cT~khuPH0ZY Ffɵ&F|3Jf.{~|:>>}%[.qlƍXDg^EmysZ 9Q|5#ʈ7[q&j\#[--^1FR&8\(T%ZSD)]!zgJk@=w1^G9\-FO5bzjl34F QST`T Ÿ' Сh-^z7RSPCP '?27F\fYݪJX|N9"s?n3\3|%4$RF +ԆDhB#B"5>\O&k +c"E6.Zf̕9̦^oz=)LE +" RAM WT0ȫc*jr|9rJD5{Pٿt0t]dNcP/,RP Ô$$j )Hఆ "PD r$e=D:FB5ɐsk#Tڵm*x|%[8z\)АHu(xxL#51"Hv]RqޫkkWn=VUKga+x~,v ܛ[\ÐsiM̃Ô&uA"M@bG!5aXFBuR:^)ʾGT4,X r{aZAHe̚ =?~[<#U?|W>~G_ޛs_4m/}q΃? +;:8q pbiEA~I0G$R1K~=Z +Zɗ<OYӁMA0CPo Am1HQ{RdNDS`\pgancƒt +(T}4lO/^.U[yJ_Rܞۍ$Y̷Yv] dVV~l?WaʽR7CEyҤAB'U#[H  YJ*#^cmrjHmfs/~9wyF{h֏]-c0jh^4'MNyYtPލZ"qIBv!oڱ6;J^;v+?9XY[0\0R0*m7u=0SQG@tem.後VMhd7?9Lc};T_mxʝ{v}raO'/~vAn]Ǭ}bF-j'\,x&%%J/ZCÔ0A*/z'U +~A8ES 3$WjWr="ҡ%!G͉f6[ݶ`mNۮΥ;ou/ܷu|a2XsB++.wڽmLJ+<غm3 `oJ9up~{l f ,lW8\sv{{]դ%nm [mں^28W2?/'?g:_/.浕J1|(MA(4 |Ql0g `s;U<'l]g4ee}K'eڂ_-1?rIhܔ.v22Bx-E +lI+Ǜ-YV)C"[ edm_uMMWƓ7u 4'l91,s={*7\O.?֏ ~B}.Y-YvO⥙POOQj_.6GL~&˃4 [w^E^,Yt[H~7?MWǫ;wtѹnVnZɱ2o,'+π`7o?ayiMaò魐@nd3(o;i1Mm=%K-/ X +D0`30)0cj0?F@3]Isg(cVpsbL`4eM$%NL\W5 +zǧs:=7E+h 0ZM~,]]#,|%y6TAtR>Z5hc^;!֠tbu5j<+ξgCҪ]m ߞ5og@SsY['7o̦͂;ò;3ޛ O+P[orxUŻreo.gԹ, ewOG>fhfZy|htuL ?`6Ds1Lֈ;{Oͨr!.|g/4szrk4mxV(,Mi|utUtf| ;3!YlqXEX6R)i5vG>c;Rqn #)GUf8~QjxI_0^ C\*,n梬nLHD“QT 6+z# LiN*#+YNPP1v^Y`z1;<{tcvsl)$KajV=D^fffim /%BXɽFz-[++ݑy?ܛgxnШ7zt|\[qR֟-st iOZ>"s)0_^HܴlùKj+eϙt"wK1MϘ9"6Kd2;[=2;/}-TGl]x~@@9IYZNm',1捱c[:V2%@aiz/;Vm swb̯=f-fFZy7w%.q!if8 ~ΝpTaaM@t N6EE EW]>[F[>@~GlRvyJ?F+YBs#G/@~.E%CťRCWLÚ +`G}nvV;kM 9bjUQ١5iy_hUcIJfS"AB/GMuKx73+w$K ^0d6rr Mkk^?ߠ/|7h JI)!Z>JDt}X2oęXLs::w҅R$`e=9Ow2ۘ[8yaE̢r:T5Lx5 }HD#QEp"D)9}iҡ!F_d^R&Ø9Z6gPa/,>~f/?^jˏW ;0P:/RceM!Qp/ZD1g7N3p-e" 3hEz +HdO+>d*Fh/+9X (’M̗)sfb4 +:mRF//4Vص}6Ե}Ǔ3W3B-ZAiF5F6ô8+¤R%s7FFOP9Ґ~1J^sT68 s^ZƼAnaV ,jtp?z8Ӑ"d(DA}J/j#p Iq7y6| -+H& c0Fa5Mן~mХYbJCH4x6PDtWHS1X&J,63A1yL 3}L!d[y_+V4pih.4sPSp}P E7c^w >dRy0||e%%*o$`/wX&3z=NȊXRpc`~ax E\G1F7uDĜsy6}Xq`$ld%R{0WnaF(Y27aNo8|^@B=1L D͔&WsAm؂ WJuAzpgo3՝2?*)!Xi<(4JDAcUwc-co ҥ>l 0d%uܕ\mGeD 搿y2{J|2RD*uHdaZ5(Oelgd%W͔B$wS"sWD!Q;M\ǔT!apMH)AiXR=?099yIͬD4PǵQsJG0Ts_}hmѭ^+7ayY c݉X]~N$)6\EDPƬҟgw >,`@I}RWhq99܃,c̨"J!"YAL~k٤lWw fpɽ->> +S5k:}DaYTd$TE %QBiOΎ?~?5R43[ͨfʃZF\5 90w(Cϙ2sw\쑊y2;a1G,X*w$VEP34q9Gn7TD" 3pSzhm0BlD̙Ϙ{uσK}>/&21B`nD-W(Mg.~XkB[a[w܍T~2smNGb9Ig@I"5=Z~McTPnW8^\b-ݛx>j+X?xoӹ/1 +9Kab\կae>!Q*N&2)}ӾSWGjvV\Quvs׺><ֽf@bAW|^77 sC_f]\C LbUTmzY5kRj$Ue%Wn(rփi:r{ ( U.|M#̇Qj[HajHEˎSG7mD1i*+Qo՝޵՛:sz8~l+vsٶtˇŰݶv*a%;:Tq%ùOuKR? +ǤKp,m=yݷ6:\JIWy39[n6`XeU8KJ [ WU=y+x*%u5LOl:67%omaeE%%wnW- tt r"VkrN&|&l\^l2[_%XW_[[+歫A[[CNhL/4[Y/ג;7qKP+څTEYXIM&_h`D֖PĂ +2]tN:<9柿|`xhf`xvh̽3#33MS.x͉ȺK &'C.A֐D80/7o->)7 gJx+wUk'f`b 56i}gԌʹ`amb!-gt*i! kI:"&(/77od\L2ou^I>wīމ׃JIr7Nf2#XZ[Ld &V "TDA=VyAJ2;މ7}n$]~Qht3gk^I׼o&ݦ$^7]pƘ\6:jlkkojo/޹Gaa&+qb9Gz8yĮp\%lhYȅ }3q1q9s$'%>8.Br^qۻ!C1+E+܄]˝˜ErV =7JvMsrػ3ST|dTRttfTtFdt("J2<j>8-Q9 pJYpޒ`i DgxtܳӘ8*9æ cp=?B XZla-lPm VB `}|Aw"@PZ,8Ḙ_$V6Cca9fȐMšBHYaKCfy +1[VVl6c~cÆ%N,r,TةG7_VbǵN;nuֱp]9n+8x%>G)ܰ--?&/ an%-dJYwq'{tnrOh|'3J1V7b업^U#7_P =!Vj(Wp Ox%%sGMcScSFg[z%={[e}tȱ#>r蹎ZYwG ul4/r"?>V'ewv^3l;hPMXICiuL`mRrOkiZS*t*k#=fr7kUu:dfN3Z{M>|T]YT&= G4b;"VoKꦯWOS)CAV7u2I4🩟)Nd%38-ZK +{ֈ^g؏VjUjpsuf>O5:)5dNgW䛯ȵ˟oon˷+[rrÔy3yV QsGx> a31+D1&j:L=1 ̱SK6Ct@=1} OvNVgJy8^W,S_6Olx זY..yJUI㦂Û'AJ8H4V&ON6;`;B17;}desɾU0 OH#`gzᓪ5\s}hI*Asv>LC ^*BGi&ਞ(hXjѓƘȝ37ն_n|J1Bm+ 0uW&nsd%| +Y[*8^3x,py9\E[.#'W=g.g!e9p~db^0uW23;9jN8dfov0} +4V +~1_GL8AfD>~nhC~[`^3)hLj+7ňp53b9 +Pej헙cus[̞׶KqpzږW07p2ӧ̏NިQ@r@uj'n_V[k +}훙֠b?* 06NR2 \=,_y<0Ǚc+ebq㘱{zJ +3Q9iv0K3 ~&K ߕvpSxih%7k,ܩX'zږuo$}ZV?T!~Ym3M |a ^ʵ +>\C-)4_s.bұJGbG?,E vvX>63N茓ږIX2jW6+㥒d>3 cxf=c^)׏ Hd-]&<211'R%9ˆB`s>,uB>A}f~z+/oF62d4eTf9-+=-'[kƮК,1I(XZ1 p ~5> yzS3̉az.d/i1MߏK [+ _+hF\MNUEW,ϱJ*Pb~r`d|d}B(0FѻqR>.ŀ9bXu(biٲ].٢^*WWːac(0CϑkZ~(J{ʬ,A\:f =kġ9K;L8N9)&/Dr E}U}a;|u'*l4CfB-8sW2j[lgqM-.oZ mm-}|F'F&`" О\7!$<zX;5z{|܊Be\8P^71nyyr0ol5q9H7.i޶[{,;~}O}uHI@Z?`fv ba6]7T^7\V7ecImoɒ`a#;&l/p4b1ར՘xvgXv b`&1p?WKq)2a2msKeCׁA+uyCƼT[ NNmH`q\5VT\߱c>K -园0?H + 2CΩGU*/tQ.z Ȃj'i!?|X*U)Y8a38!yhbvTZ;\V̡Q cs3c>ٔ~"]# [<< g ҍfFe=ֽoHn)W.w[^wjIH5!B + w["w[eIewwHrν{N9'9g}Ϟ^i<[ggsGa*ж۷g5/0|쭯Seء0и1Q~rϰv%cwMJԯa{B] ~mGmaܾ,l'j5ؕ؃~⼅1Qlw*C<D5yuiAFQ\39s o=VYvA#D8NDΙ(8V:fr#z($}qI"H{Zh!W%‰|aTxx=Cܓ|/~zϐ.G.劣^QyOQT(X+gsj=&D!8Dұ|ާnUuL';ͭʩfvfa~/ڦ]ш8Z;\|1Q,H3?! IMs;onE3 *޿C,rUSЂQ.Tl8]&2 0wMeO/3'ƛ `48D/ID6?,OHsH_gd~nh#,ESChF=J5%ϩf zeϿD"a!ևm(轃vUf֕8|}؇gOYyc;H J2b/Sh φxp9.ϛ\VG'4oﵯ,XULcn߬mtʛYvy^ +N14ScvLa,f;d_ Tu| +"L/E5貥W7~JAߺñu/:go%1^C`tǠ]\ds,:C4CaYl;lq#AX/"ݥ!"ɃAw L@Q=AI){/cVh_9Ydd C I㈹bN1 c^På SxPKF%׸rYia]A,;5r53DҭpAAjA+&&w9vL1g IҼb&B?`. 1S cP>P.a6 n`| T :ȁ4AhDX&HS7AepCҖ07=Gd{D[SxǠ.qo|ߙK9 -]$s|sg9W09|8ͪĪԦݑǾx.piv([XJT9s;RA=??0:Tm Js +`cpz]('Z?8N"h>6_w>0`>[\@+mt e&qGA3HG``@`rP2lkv$ x{D°55}0=HO$9v{vk`b^"e9ѵIۺb~NNb&AtF'ؖ]ω>~psAUdܾ COKt;>  h]޸ĻIw%݊Mt;6[sg/@lXjrZL'y;bKK]= I'NA,? +cQoLOLZ"7'hU^^Olnrd N' wz5r'-W*|kF;`|%es +s7N>&dyV {_YA.ZUly;PёO`ϧ>>Us튫oU^:]~޸$+V3XnR}``Nh';OH~̽dβ'5]65w[F P!oD7--cL>6l ] b{D"]C"Ċ-h':0 +NOw j!ӓb1s=G6sE'٭A/,5tsGGWX#7eV3oV7u)>yp*kU4u;_YiWe5JS磻UaNO`|bBc (+\RdGMSy-J893tCHhNԀ-*{N-=9 GƖ^(6%!o{DG{0 qR~ q`vn52_/~|r`}b}s +Eeڕ 捝 nq4llwͦS7/nĂf~8 duLztm=ZFԊFfv$nޟTa$+ 4AADgЈ]YNCE,k1Q(Q +n]º" 9V3vGԈg4#1>湆 lrpose%=hb0ժdת~)cYVOT;? cEn|P KC~=hf$޶Tae4JMfYTSUf }9eG9!usnjW2:g =fckjTs( cgACj- +Oæ&8 `.]߫GEo&63Y{`#]KZf'6ஃnl8v::w׉;#ur v xݷc7kE{zx19p `8#g[Q^_R-}[iݴ׫qRl|m~zF'pk2MD:A853!/NM/Iam)mP Z;!Ӊd A(!L1SLfqa|R! m=rF85+NL͋%Kbܴ^y)S-N*baRa 2PjHM +%s +j +ѐn|@b8(hjV(/M$:M#c1͏=y{Xv0aoll%pDr-Hv V \[!h&k6w‡e-rˣ.b^X*%fI yp|^Ξ ޠ[tKZZR)JżB1/W.HUR"z$$Q-Hh2lßgeg®2CC%^TtQQyљYS(@H4sUsDHyf6вrfgefWgEg0B@1]G_pd*F1>Dx>𕧫^qceY#dܡ%if4d˽!jB))jmv +FQЧ#ʊ(hQ03 +nJp96MMW",Dlm (f@dFۺͦ5C[o+}ͺ(zݺzæhm늭;ʶo k2?yszt JS3+BCsev¢SN9vOx3Nsw$'O\N:zg?_Tr$"bՍo?Q}CCO:EelxeM8yzMḆc%&:ln~}aib z*RH(,CL*4}2$})~At=MW ^I&IB2&s&Cnbfoy'l`5̭ҼV-( 3v~J{e3:-jtj^c00 Ff,Ht3 *R?IZgsKkb͂NCmuzHعArsFgҜV7m sc"I3Ct\zk\yamx/y¸M D zDHhYF!S"NgJ%9Kهن5OJV$-NaL7ԳWp*퀣0W\L5TAc)ܤ|vR63)AI/+%M+$:`٧ V=*U~P`3?f'dY-܋.-b nu N Mts‡]\C#э&6%ڏ^' syEOzu%m 0Æ9~ܐWݾ?@3Y:R> Yp̎gHkyc{Ft#4FqR#+Zڋe2ó0&GY4>32nչ1w5k?zkIQq3c2Cmm΁}I|HnpXD$4]<(L% IdBI$>R"7q?ČzGs9}~ b8N@tz ɼ-%~SҢA{X7.(gԳMh\\*4*"O +g8B^Tg8[\zK +,)QZiqG5>dwvT܎я! _Q.64Svv;*hhnlB3׏p[Ey! QH`'r +:R3ZR)mѯ@tAiXڮ! y Of9с_xP <d}S ɒг!Ya)4J22%#dpSx~Ƀ/t?qJIF?WCWُ*; pzvfI:( wbfDaCֱDX;{(+ޖ=5/KxNoPu aj[llfvv2F?Q+ G%*֑uoDRͮ`PL.ޖ?iiYcP=Jf Ka !=~c)C+ƗBQ) AyX",KNhE-ʘEEh4^`XZz:R܈&scyJs;w| Q>FrF E9W'>(!mXXvoZYW?XXl+C>mOhg9F1̉s:cCρ(Dp8۬?3.(R)sff> _>*8y`>D2O>bMG(v|U#0VVJÐH3$ ] S L&V?Yܲi锶jz~`FQL%Ck{|bS۔Yo+h6MW^YWa%6Touh9SuЏ9Ϭ81@8ZGq㴗-* ~>0/Q+fsw <]U m fussNItf}\<\ed*2WIsdO- ϒgOgò&B3нSFc Bƚ̑ߤ/ȕs)V gK.a~p\?nxwގ5/Ifͷ<]EE9-ǰTm6Rmqv35ԫ%,5(|B'ÛX XlUEM%mlBaϢ}UsS[ =L:#_a@R p6ᙂ`<շ?/̼IsGve},OQsѣiC6#sU9q O?;xbi/+>k~sҴN_~MG)G0#e=G-J+RzJec *Fp~E\`a4E +U5趴v_}jh=iTgg|d>΁1T\ޣK|F5nWH/jw%aʞΚ%7*sZW̟s߰b[, >n +(S+;Sb[R+q#}xV?C$s+IsKjTdqxDD02= Gaװ=fښ̷U`mO3Ynesg}A2)9Z>D2G6h=,QTj +26[oXUҶTPcU3>"oDbiro 7ǰ;ٳn=ഏl\cWI?xre *TOΐ,K5> XL/+QzY:sM2ЈaT.?*w<*{<2 [0|0ן_Q7ܦjr6dM*zJ(Ι8nBưjCh4 +r@#dԝhz8aUאd޷¼g7VH~|S޵uSv"Ɗ&;lwJ +W $BZ8ߎtOp )M,{ƚGƂy">mCq1nF~a)"]Eh#<"pH%ْqtdLDL :;E= ͘K8Lqo5݉Wͩf>iǩf\h!8ٕ=Qw ;sH,G铺Uf*1CefNZ;FzL4]jhs{DCBSUƖ~gDȒF0\}&bhV5j#yHVT>,G`k;'ߨ+CRlgW7Td]._0"I06.١K֟~1)+lP+ ۗG(B&9 %f=U#PϚȞʝ&,ӱSS ESEq]Ç>7~3cO۾w5ەcUd\z7u69Q;;*a|_ot%D[KfiՊ/wD[忯m:2UQJ'uiG!Ыf`|s\7 f冖,Wu_gM +v]ʇYyu-]6Y~a S.0'6Kpfzob <) }&sLQG)%*[E™IP\QDQ}^};bқ1/|Lin}t 'juPs79=\={Y{4CڮAM'yXD'Vsw4k՘ZSk-Grh,08oj1$R+6n:t>O/y YOC[Ԋ#o5rb`HWT$s&kĜ`PɡO,^B'DG%v(7ȜtoKse+:鷘ZxF>wRV i:4" g+1 +|٪.38շOCC Ϣ DLoېEheΜ}+Umܥeo4@tкW9Q%!/*fvpͭPXѫCҧB3ógH&D>2O[ /+OD +"y$pT׉jl͌Lm- oi4by*" BV1嫙̃ -n#A)s(F*=#b' :h LB|b:ڻ5lHF0w22Tk̵(7x{sAbprM} 7”505 gW<\ +4+먁)-j1Blbz' ?ndbK9墩 zsds P<0E.}eD1e @@;< XpX@Y7?7ue[FXRf^yoތB>[k}BF,cV*B-̲m+Z+q2mԏSlho&v&G7GZ1 RN;t7TڥVc&אӳ2YMYYf'101=gmyJƓgصmrhB>_duq,8O(:E N0bh'[V0rF-ĭwCaZ9sJ6QPĢ&hQpgV,'+,Tdی:Ky7ؖ~Ƚ\Ec; AVQ#捈;8je28󃣋_k䅇"f0w04DH;KE/^'G}Q>Xoq% bΐT0V\Xds֙[:Kt|hLt0bݖ xHxhhhXpa|2B[PtyFs8y8x`$<^WWLp^K M,*Nr0ϙi/[NVBͦN 䫩0YV8F{#,@ m깅RA57?]` (m2)0Ā~Cߣ``0C ?C(OЋTxcuB]\jy(;DۗX%m'4: DA +N N +N֑G^>HDL +»]bA#Ka1_?V7tH=ig}tQ̪r{Nݺ1f\l)'j`*RF y80y?g_nf0&]"DIO(ԳOF0{()%e``-'B /R8x4!H h=?b>^B}R)}I i ވ Iŏٴӵν5$o1'CH4t@;9HuJ}]=w6ٺҫeş9O֡8qxJ }UUM1ٖS+4 +mzş)^vʮW_?RqYG}z{M*#I10hR lEk|O"Dj|0ײ'df~%(1u/0 Kݟ80<";{x WDІf$Qt;l'#Nč&ֵansԦ slg_`PhR 7tH/=~}+ma۪hLljY|{5f[-5-n9u<\:)pB {ss#Y+~~L4V^-wt&oeR:֏̮յ#1ٓzTKdL Pf Z:+@R{%sYIz{Up/Qka#n8ӹ۽v[skX}9U̷Z8ZZd2X񧚅Z4V4urqዴRRWU2 Z{]:LbsfU[h(eun]FQAݞm Vxb.ݝQ)um](}ESo]٥ϩ ͬ>Sz'g)RAe7OꓷBʕatW^9|ЍUe*ʮ#_-?rʚ?ZQr'?khbmmʮ.57Y2tpHo3rhmP@j헷ɛ{eͽ^d#j픂 tIշ_i3~l-, Mk^L;2njaDuK~wmœѿ)pk=ײߧe׊A{<7x6h클6HMfNG F6d/ZRMj{M78:KBF,CULLϟDZ휐nLKM +'&RkF`cC U/,MȔbZ:/G=ʀlDboRo4MDcBr@xE%`A,V%zYcۘŎ}~¸_:vX!OPdj'VGKt'D;@nvHvnl]ۮ w:$O1zEcnY\"M7jS~I=35/ܐ#b |^GVT;[\igj JB3'WUeII"؀T%2Q[0Ӈ.2H[ZYR f O %vAW +B͒\(S/ L R2zThfT9~^chCq&>6jfaPJ-K+yGh`Å޺"~))1q@NQ#GŕsO5>5BN(4L秦uSp6N~cSSE0!"_CؘrtL9+Z6oX4|ܤT+Ӻ6;ADZm{bZ$OL&D:.GyQ1+- p\)jJWbc񽳣&fvڛUϭhscY;eڱ/notJ{3duu9䔃fk2/,(+,,/*(.,)>\vi'rMqMw$&W&,)9^\//*,/$UPnÊW %5y'jL1 ,+KN+*@*("UBh"r䭒CN0*bjNaq ZFyQhyQ& FaS&s?ssSsh T4V[J6[i&M7 弹,:_(Po(wu񛖥[l X徱NכѶl,~ͺB+l({yoz㗂W^C^jSU-9[VoZea|Ik赵^|*w4dYծ>4e_39Zǎ=~Ɋ9J<@ +ISdB)ap*RP 0U R&IdʒA)zddxpgflw  I'}~I<$x `;( +PQI%㧂ӄQ(&Z4< %P0X6>>_"O(N%LŊ[8mU:=H3 gԺyzN1pSM ;>xe /$_tD%O&HtahDHh&rEyiJN*B3␌`DZtf<$k:"_S=VTn0[oH&J_dNfMfNCW41\4]vJuć*9B%|z*<_[4R:~]AٲRuh_2ăEP:|~he VHDdDn}я%18T$?d>=]+˩8N@sϤi/~zJ{ِtg3r3r#fd}a A׈׈~,Nw XI="]B{c>¸lEza-N35[g<>a铞a\7b%bC4nn}A#g}>=~$>u^ڇwy|z\lnW'>WUDRLm9؝R16q  p wCC +P:RȾC˧ZYҋ7 Wxh'qlhO#(d~z! X7wXC|L_:_> ʕeN D=TTY#oG.X}PƠoZS&a;~;3& +S k13e M*FӸ\ @2? y,`"Lt4Qǣ,r9|zpcFz&c%E'M,DFC2E~(@C NK.U 塀3^|N)+ LG?p(ffEcWѯסz~ {X×hUsj;󈡄A!y?fV=-ЄfH&]3QX%y$wzgOͭ᥼4?(u, i?i;:3]g}bO1i\&$s:8(4s"LZylwGOL]\Ɵ:7eB<=y< y?V OzLRLL ?Q"qP0qLX*gHQóy';zWs,x`Xq +~ *q)H7afk28zv^{XEُ7 V2׿>|d7a".>b]HvQ'ye'%[=Rkn-Dx!'H͠ot qچu38 OcH,5r̉ +߼32XX]~ܽol{v|åA,F7 Hj1|=Y R6υKAe|SgLg +==/r.=~W7/nywK"#(h@Ҙ \Aɓ) m/?1ڟv웳]r}FkLE׶Cz(IJ2źڬJMISܦMSO.n!0UBd9&z zxp:aIq'8U`*f]|#dڤuV&Rzc_̧ɋoo3㴿bǿ'P\;߼PdB6(RFO-nİɚze|xybm|:B]T5 Nf+E'+Aj#+xB]ZH0$s!yRKqo-32VczZnGCZfUK4ݞ1J$7絜*дw;l3 ۷1z(Oh8lK迒p&N=þ@G'2GY&8!㷙 %qy?6u4gg*.'z?)CW@'o2LJ+iư> Nȑ쉬rY5j,}xƏ{\~ڲX?p|~bT%d{nX(v[68GmLI?qm?|r9-!jhh`*'("zqkr ĞOk@" |(=]T_kݿm4jOTs_oPX0 N.᫢r'-g_oZq m"C k NT|u[ .fA"w;͋ѕc#<<ʺG{D^h &eok%U4-*Fգ%/P?n*l/;m޸'ib +_ +3/@s|q* 'A8esk{wB^-NݼyKFQD1؟?{S LƨPBso=C{d P@ +'0q`{;r˫{|[Jx )y9(Mp|:Dg)DtPDC8IUۍޖW3f3e3$a=}-EDž{\lO0_Oĥo Ca(Om|B`9#³PJOr ey}A]ܻ9#ޡnz.gx?ACi| 1!po[aŏ"*2P[Agzn: +2m/Vi->*1UpP_ ܐ!h%29΅@ +H:J*hMb50&-6\-o7Tě!3׽d[:RQ9r݂gɟpO|0>?0lq>Tq] #MD6/8\ݐ[b PlJ=QZ{)=b{vz_z}j_T:2h)?La2?Sl~T8("bj)z#w3=ib$TٛuY;,6>%F07ݝ;Z"0e Ecr9.0[\1+_1qN60eĭ&W|Kk׿9CFc+՝GqV^j'T0pG*urTůcGóG`"W@Tg7R/7:V0ѣS´c?ʻgF.oMb#g|?1z?L/ťo E b߄#1toH00/GWjߺv[dh+;:ywwn wc9YCBT (F:vihdnCx[N۟wݮ\A5v;A$ #iUå>J?{-EaӢKC2ɜw54֌Fr +Eq"` HxEtmw bG43 =;<"0 +qCGk>}M[Tp8?ff]+b~3zpl0 "F<:0c3[(T_ +hnp^>ZSZ\Ƈߺ'عNnؼ`<(&&;:ݖndp\!5t"Tjh_3+vVmHvD#E-kzհ'ΡY?4î̯CyA\>7:scgLF#-Zh +ΘfN,Y:R/}#~e3 7?%k]L8 +̇l'p iݺ5ԊD`oT{>{)A +!/=@C]>yqc,IhtH((o<^6\}ɇٟ8^VnZDqM\\5',s "{44c{]ú\Z“`T +se =kG={2bK?<_3YVwa|J58_淟Gfe$[a\QpxP1'|$kI8շ~Sy9˟|߳l9A#؎V{.fdj-nj5%^D[SN>Ь`HE#G<$}gDxwz-1UA)8(PACNGf{&Tǵ̼ȼ~u)Ek y- r` !119oB\ah(\QUOi4K٨.?Bq>^._3wJ$HID6} ˝J)jm;!oO xk'4?(<"{}v")DsÅL·E +9мሲʎo1Oz4n,26 Eӭy[R[Zh]0 m$smA;ׯf!1bxdXx7{SL ߬(DK!ONfW3ot  +J R3+39s:KbeOdBRjٴuaZE6B=a_DH@ef:gw3mڙ7@3u8sn{{o}~ C̤A}G񏯟< +\}@v@Di!s;" :;<;Bku="&<'1h`ƍ3T>i禦k8tP%+9t>c (9IQqVl+uZnia#(mEzfJWw\+Ae C 2Q4>ٳgw/7-Sd?z~`[%PWĵnc<;.a5>=0QI$2z80\^7_=y6+ZqÔUQm5w ki\'{'w +b袞Z +k>aߥWBE s PyldNy6sy *$aV׬y*=Όd4}۠Ʈ||7`jnϾ>ҨH}NLٿPb% f7E@ 700bf~PELgg a8`bNQj߿}W*-Z0FKq9 !z:条.|1IF4 w;j;z>p1;ĈHz{jo_? +kY˴}RG߉ v8Ƶq@4'ru[>`s0>|3F}bBZѣ"""*h"*z;{Vߞ~%֒[@:x~.AhȨ ç[v{c==힑;#Z }[+3 HyϞ=bpDSRlt0 S{"k2ڼo1ݿh p5=r9J񊀳A8C>%3\P}ռBMY pr uXarv֏1_>#m0GuMCV.'oGhn}tmeBP88vzwzu²GraϾ~ܯӸ&H^mt)0Fe nRK2,<lou sRZM{uv`=f@=ow`}Tksdn\$JD:4EpmKg6n!}!!!*jP+jԐ7$Xq 9 o޽{q%IH/CԠA71kѱm'ǙC/3Cu5\n7qb7G;WLL%P'VF 򌼾م/~dQ\^?/@n>L GI d 1߼ƣ=$uܩŞƧAzI;j9pPbvշ|o>bddD:xO)xyE,]{-o; +Ak̭=)S'h~)}oK/U*RwO}7ϖ4-8'iRGk` U2w`tc~RnܬS7XkeN7uM_mOW2,( uSdHz9g`b ڻ_l\ ֪+B Uǩy'AB|( ibM{7.GBfu"0IIL)WĔ8aO a>[^yTZHڹN5nbqȁ1B-Y8r$ûjk=7qOB. m +܂AI='Fk{1Lyon`u Cc`[GȾ]NAd ,bCLL)dJ,U o$t8](3i.,-/3˒*HprI m$v"C#%2.25u=ѱq +-H)_HbnC6́|{c-s~]~Yzc.k҄sk jSMr_3L:;^R>"H\U]sJ5ˣGNcǂCR=qrkKa1plQy$b#`k$lL=)Ҡu,"6rul23$|XpHH{J?`nE`ppmg?%9)sRDu$RE3|T9sZ57\垿g'xCc=o4qNfӭ)hzpZ\uk;_&KGޥM/??dQgm|X,BD,RP,DB@ DlSy*gBf.,x^z[M=F3B-ڹ .{4![EVۿ$SJdB/!#K X(Em<dsټɺ33Bs'w̎cl4shunq{p4.?JAql^/u5ɕ$p#x b~̓M:7"|SChM,H!>X_o)Zm'ٹrฃso~2+Tyq%EG/Sq$ + eWɩέ8_wZ9VyugM*uHz[#0Yz&2޺ֳ/65.l;V{W,K37UvY^|sr+1+pv9UWqT͇9U{j&iޢ:6m616iw6=.w8ڸp\{j>qnFkV2щ#W˩6F~ ^Kgxߍ`zKMPj}'x3b( ^'$ +-1_"LI$-(dGD_o1OEAAIT< /F;fy~aJOtshAn=lmv8yEgK# d.,>U Zr´0~7胓>,ֽ~Ϋ` a#xw: ^?+Bii,W0Sf771`Lkqoُ߱//xbiy%Pņ.!doU¯\(t EE̙. _EsWzQ`h/],t *#3]Խ(YTt /O/jVl9 rRՋ`d.Ҫ!4ByYy克.\̃ +~ɅJ0_;*WVqw eA]>6P j_\S@yGҹ08sa]Tx+≤MlICV#VT߈TYǹQV{r׃cBD]ȻvµZZA vwQxGWa7q8"XX:IpIu:z׏}x9#aF`S[}|u-. Ĭ6_XZo}Nnךu › |Xɓ%ys2,𸂰cviͨS(lထ|l˟vqe3C)w'.]mhosŻ}jxU!mwl{y8aJ _k2,24澶g#xG ov bfMZqi݇V&93Ӌ{#K=CaԢk+F+X47 +F M[Mx8W7fO~G0,"c C_g-fgڕm/6~/f,5$4攞/>#=gGiF2?8+ ApF `>KT/31'g[\> +stream +xڤTW+&Halό +-=9gDF @9l˒l+G'%rls sνsfnh%ӫ`zVPuI)NpbuJ1!EjCdLxL8tG80OdF1q2Sy.2iY=&2ma]N>#ކ諝^5g3Z+I!LzOOP6Oa-c(e\W.fx:\6N ԫ: '+eT`CB)\P]l<&=iJvN!aE$D_4 +5G'͉J= &`l2@}J{Ha84 L SFn;A׫`A=rn-u7$eڤL-ޛɁ3Σ/C"- D4Ge8@OE1F&$e<0y.;046`$rS9{UC=j8:F=ԣYv(_t̬AOe0q&W?Ot S +`2Z(b\8q:6H̴x`BtFz"Ds(e&jny0{3=1u< ٟQ,xFSϳ<cL/fdZxLgb}(b=Әpv|l|q?{$,,{#MHD!Q{{"1}-e&l.Lg34z?C)C̈vD؇w"LSr +}G?WL ݮ%m zef&5үv%Ph!3 Z=R?]%e4PB؜ޔdFfXb!e+OGi,r:hM.L"ao*c|=i_hX~5Ow!݃5h/l&jx`rؑS>HOM3* g;aMY9cƂݣ'tݬu0=Ia:p oxCG[~:߹]u}У>bD;8La10=an@f,FބM )a5L:Fv9>/<.W7!y:w( YhMම}1) "Knu3yM`&=74| )q69.pք&$#<0$YFjq31+M$!0u2`΅X 萧/9h4-etĐDi7CJv#3:yRcoPDت2;mɄFIy>Xx&.:$:&z02Pn=&LkYq(&Tql詗:03P=S|obBg4`J6`0=O*&T*]L: %0#p'>ByOj}H)M638~$/a=4Va꥞#ah~<$e$NJ7K6Ub|/`526u`C= +'[9:vT!K@.1R1h`AA+dN%AW Zh* 8)ia _?L=M){ +n[j[ 1S-~Ԇdm!-}zGA@7Ud:xP(I ]8>BπD j@0JDO"~/>@*̌q?{+8,DK`zѭ DõilAN^Cv)eKJ69\Wqu>ޱP蓞'z.9T,T +-8!Ɂ;KjmPbYGܱYBJA[ت`<<䔌l h'"Pɷ,V قDJn6Ax "'a?2@(fw&}O CznBa`,g B&BG>铡ۆPH~tBƄ2#S/Hf3}r_+jvmcB7찉+)"{꒻TH +Hq19<%{nI/ yf}l T}r q=(@9N &&[A9IN:AsI:Ž;F?&>H@e)ŵLwɨN7[x.%qj P=riچ$:`#{IçZ8'44D89Dh!" 4pw{ЏY! 4\Bz:df,0j}O(q1m|32 |9ǐ>Dۜ$k'Q9H$Ձ[0]AL;,V' /3egMSs p@l)kq0Nz(dAfA" b fmBǐ/TBD4&7$ +}  +03v3zf3ќ(LW8 CG aH a6Y*̾9I*Q°͆[A`k65ԬD #ɋDAU5d1<ƙᴎ86s r:B93'VgG*4i#xYp'/@q$ R%]7L؜0`MӾ~2c'>Bѿ Ɔ4>K N1|LNGzz[roXD\נZKAڜ`p݈͘2; 3f|#O[]̙ÅOis:g:w>4V[2o^য়!C3g~-|?kG]g>C_ o2ߟ'O2}}|~>8}??NWr sf5o|}'TOC~. 5y_23G8%)/O}mO~H%& qMׯ]q*ҍ v֕z'~2ŁN뗮߹zի7^u tH7n܁\7@7W.9q#3+ЂGO}{µo߾t֥/]qoõ!]p[p~kto\ySajdVbN1QUM('h 9~?6T +"m# +dGysO tcXn v蕙@eF&!NHNabhp*0{[? +H; +' {h-(PN0$51-"sM//iF3:bB?:qN)'|Z*hHG axPgpffh}%S9lWln9s ~!B^e{=UvrH Ƣ!N$ +s *I+jYbyiWڧ ѽrG3bfz>GM*c_ &M + uDib$ݲԯsGụW΂zdLE˶Dn]Ln[ŭs)0; +>ٹDiL@#7#)C + W!;G\ڑw,}ٮE;-q(  ݯԇJ{]txHM CbpplZ[i\Ny/MN ~} |2Zj [QÈ|Z0B>Bo7_*KyO@ϜъGN`u9$e0݆I jzPEVb5;HN})׎}T8wVﻫ~3qvv+UuqhXA zӍ1LrJarTgݿ^|tqg;UϽQ=RٕS?y~ͩ+ͭ[n4Y5-LY'PJjN9LxL~6E/[vVU+DEvl Pe )sH[}OxD3an 0;}Awsݲ r+6{G~ɋiX'[9$̄[%jD͂vW_hRUuU攊$JgMyT02Y?^7jn'`B٘XQF +#r%7P7ʹrFO0A1b {"2[c. @XҵAnx{;gp7'&ň2kn)}>iC)]pxF4kzIBR[&vS4+ɬ. + +{s-X۳ i~mzY+|f __)S㬍wwJI]Hsvqrq&7##w}}Ok^~ޯzOUs^+},,J~:eć1fABĶEqK[$(,5*Ď"ԇOBb5 +&(@|{NQCF E&vh؛/2P1I4Tc  }Jn[G}Q3z M>*cwE^mi/; y`Xn!@!7#xn W荋_oOT}+}yeۖ~ E{ )}к*0=<'&96[vķGWmL^s3G kcdв6d(mbPdZ{y];g^ݿIdkKLJ$54/:#>fdݐG cb~'J^3JMst4 Oa`{. :o_?H)%kZs?>kF yxjR1u@{[r˃5[3{ZC et}{gp=ԁPPޛ1 Ĩ_B:vahO[B mj5^VmX+h FK?%a7AD +k<8ww|[y<5oqbm7{߭F98ԤJ׽>. (>Û뀑DGNK(hZ ;$ԉW̛Y!CJQA"_cFbD@rY~~naiub\R܋r7&羃 + +Gi}kլmiujqJ,8LKⓎA+̿L3iPmPYQŠJ;|^#.5%T7ξ˅3ʽf T;u!:q& 3&\!Fvk +ƶK>+B"aݏuKWN^.Y~ Vb3qѶ#f4 `o=׺l ;[hD~7& ɚ!|4 \ mt"\iX= +:t[ +O,xK{e2x؃ +Hq&&jPh`87Is OuKwiA6N+{b +GMvrE^>9Z77iooظ$ 0AܯWw+.햜 |ߦr`" 7DXC6(C 7!osvJ@t'SzpUcI3·FƣMhm ?+̈T=Rqψ.~),!m:kQ+ހ7hӼ=쳠1-FU7gIJf^KTtEQSDOom>3׷&CK^)h<&l\`MXT}%ܒN_JA|ת r<1u7a^iL!aˌiYfr.LۻVzȔ on^rm<0N)Y +|تڪ/Qf~Vr*z[;UCJVW:%PHjK'PJj&p CZF82/nm-]nq:!v$"rLɁH '0^=C;Ѻ$Ckn?SImW{=%#x{1L47$l#V Rۀ[ɯo0U}򳺙oV,^5/9Qy[1&0Gkg(&s]i]G{}>!|9}_a"& |SRR0 +U\۵xn31&0`.LƥH`mRF$,-4ۢݴSjgIMWz=y`p8L4`W@~$ۑ{=V]tcS?e>3}>\Zё?o;4#;9Leg}ߞtkf1ztnO߂>z)qGԥw/}i, mEٜs"9ٺ$1L&b0ӄ̍sظT3i7#J evr\k;WiF&bɈto .U,L*-۸Gb=H)LcH?dl9GxЯ`=)&p#&r?6A_4"w.wc10ێxLٹ blB}wwM Zs)?QAiy\7B34o6Μ1!un@ϝ{&; 9`Ce-zn2+7"u. +:N44aF 1#f"}uCc:yn50 +B[x rhLF{oip^KT!taoƏgfۥ ׾HZyF7xLMBɩF>LO räz뙘<*{" +SH%w-'2+Wzme Zzx =ԍ19]Bf+`ꒌ5 +n:OcJߞ+7)`O~y9;rWmcKI/Lmh>hmErlw#ajgWYFpZVM[V4kGfܜyhm+}y'T?&n)ONM3⌁OtbP';ie Stlb=ɽь=4h&; rچ31M84`bYUϿ[/ɬ-~yv K7-9zr3JM,!|3rMMO 9nM oU*zD ++,:YϿS^]Y/.yiv ]u#7!LIi6KGk}Rt/,u]p\KHb[\NsK׶oh{Rc$ +z +z8B1=,{XRw3Zt?,ePlvsKi)kuVn^7dCpԅI|Cz-MyڟJkUfw^V,Ae+'M+U7}M=|QL=1ed!]/v%^K3ri^3KgÏޯWxQ=wz`Nӟw_9 cB)<n˞K܃chbkPBs` +.^b>NbJ``ccQ? }T߾8v{`£{۾,zcwͺ=O}x !73P88l=R9}]~PPxR޻~zM`~y//!j#l_TK/ |M: HX1bi^'Wް~pZ-{yh=hZx>hSg5İ-C:b';ŪK!+ 備^ӑs fxS2 {O-kb`}dm#?!9UcCMp%n#sƪyqqH\W`|OQlg@D-N\Թ7{;-{>Q :GndM3>Mj%{eh1L cqɁ%[?u[nScб&*A;~?N]Ԅvu"^ܺx#/q͋'n\r? t@/;%DB)+oZ>j<{x%IN'չe8qx7z8~ :haEZ'xOM#Zbh bpb:{p%ooǿq׺?l]kF,ͽTw!&- Ydž .(EAyt|3_k\Ԝ=yQs@9\"8v; 6S#&|G ; +!7pc- g!&*gz4OɎH#('Yj1V HC24C5d:s~©I:326O|EGtP sv8a܇,Gsh-vŮ8\;6mzVw?#<&Ai l5PB⯓>bՀ̴ GVcyr@7N34=Jmb̊ Ah L - ' +mͣ1vq :Fti65u,ȚZzSDrKV0e! ',ns_0a<8IA;P 0}.26Gl6ٟPa&!E6&<*4A&d?aHKNZOA=RӈH.h +:HFPCܽ8,Y՚b]2F#k4e]0]Vi{dh/(U҂'p zn6=Ko`F$[J=kt[!2 EZajOU''%tzTmJUZZd\ckҌn#/2*]W2?<^+SEou n.~S"REJT$ϥ* +IMJՄTJ!Z.FVɭ?-N!W;]-%FK׏'.)sLJĤ*HլJOt)y羽 n0U#*-Y%Јc2A.A )Ȳ$hŠqB/ +Y3! -x? +Ƿ. + + Z80WR(/qI`-0^\вKF̝읷>- Y$"88vI`6%詐 +] +[tyC/3??嵙s.X,pq%*)4`ɸf@K-9nj%џY>O}~/<}-Y:dIŠŋK,> z{Hg@NYrf Sn΂sozgzwwxww@ 8.hp|_{7ĘxOo1J~;wz;'g/V-]Nf6 T:sd52ٜi(P&55k5DuTl N@mţ{ aȳ7"LC"j:2ȨATz[T^uyfyzsjmZKsjS*c*S|5ZOrԟ9ɡm ;MѕPJ,n5_CI*-KjSvustNsL& +e4EV I5d[C?߾\cf2F4D@u,$c*r<Ey(]aԁ+uQrMd:LYiL\C?WJ*9&eDfkL uD&DQ,G*4YjɸQb(./S//SE((‹a+K4 :jg|zТ,iV"^aXV /Tk"Kt 8XFйTݵ]ѮGߋ{dh/~\Y{r +͕<\)|+S,ɹhrq&}vM$vǓj5-jsZSjcj@6l#^/k[eI2YWnZsJZG)M9u{w7n֭ފ7s 55pU*CdnJsjKZ⨷WX +vڢMqͩm:K:S:3\*\\m:uk1bWcW"Ŭ4GW*eer]dFTZ1{˯G0oc"K tf{:.ŁV#-T+9Uc*LFweRrDpbMp"Zⴷp jvUQKN#/"R>B]aXaF "A0L|={JۢMm4e4M8(ma-8 fZjK>{Z2coc+m@7Xgl)40_QѶ{?IToFur1@œY"Wc#+c7WT)# /;1Lc +JmS6PzHa)5Dz-Vh!J5uRVMYT[RMkt+qU +yX}`" ;'( y ~7S >lsttɣǴ>_s/_,?_/S|o +C1iizȬ&ML&&s# Ȳ7s^̥&pm*e׃ sj!ZFWɖ//x)|:Xj-ZOzYm8NG]w[oI]gN6&&R'Tb"E\їoxL`h~@X$i-HY&q\[Kpq9[ɜ-DfKf>5ME\)ok)v%/,0[]ܠ?o%Q|L@LtrIÀ 0%3Ĭd4 _eRF>/ERrLz#fnqL#Nt&u:Cj>y.\$MZ-8'~?-%RQ@Q}) 0<#¥$p+qN0ZKzCz]:]j6y|vyraxI<&+^ \N|/M\C&RDr5jpr%'5 `adA Y`[~VEVi*sAي5y'_{"輼_/$߽&&w`"}ՙ1Uf0]N[eST:ep%w`h<;b2ʳ[ͦ&˨KJه).L؜$id>JmDJkAM @ h*#"^V# 6sN `LX[V"_")ELytg\#,ZKf= C$zCf>u-`RI$sxkA9:Ǒʤ +wkP= B5X (L9j<e. 'B!d1`;x٣,i(KCD#q`A*R{koǬ5bV67K3+k( +%?[ ZsGJdonllmoLX -TKh"!tiDd@8?L;AcF#وgos7CͦMlH5*mptn"`pD ޴,@Vk,^ Rkh~HZ} +'8 ʨdm4AX0f762j PŔrsDŽ)0oZ̨3}/@a%W#B" yȃVjtR#>>Ē%ֻC7}ʢdn2;Z Sț8LLI#بkR$lHol+pKAߋa>a1Zz`mM&MYMZcJm8T8)d=/T0I.УJ )HITV#'Ժ9-xV,o%Rsv1ސRЄ( 5f 0Oa˯/0Ӳbm:U38 @E^ecY()@z6o) uPLjJUKsE]6q߅a +S$V[׬\P(#ǔ(NT_.$Qf=t٥ެςTg_,ӄ+>Pn^a,4Nk 2 o$7bM?-(jʋ;<&%1R 24A!LӸ+i[Ct.H\8JRMaʌpdQ4CG5YMTF<ɔҤKܨH$Աǖ7^t2QNV]a9IJCSw LoBBA/A +ʭ&"PQAePr¹)ɐQOY_.W-_ ɑ.JωKD@`XΛSÊ h.c:O*:,12gC5iF8gi֫W+cdˋe,Oc{? 띟$ZzyӫYM&4GWiJXeNZmI^cI^;*(uјYg8y&=3ievz:^OV )!, [w4>S (;'ݩ+n{CܢZb5ԨUJܻYnX49д5BVG^&VgT>V5LAp4g8?(a@"xZ5h%tx0=L7 +nlI[)FDo Q =rc(!U|5lQ)+6-n Z\06]-a*.b]hqP>%-e#EhZ=RGI•_ݜ7wc5=IqogHvMF?Uv'&xk4)!qdxtAXB},?zsݻGYѠcvtDŽ=ڠpkT9yF>vGR %IsϚ(F 7"TCi=)FDsE^.E;hR'ߣ 2spDK41D=֎ CLN(bbt&i c?Nʍ*C~Ê}X 9IhII5ehB)ER=P%4Cqp~67u+tRA' {ߒqϚMݐ͡% ]0]@vtpA(Mk'uGݽ:)n jbBk̶N+v1E'׈Xq/мεf(烶ꑄr(.8 Cd&?57XpUƟB4ɜYlM\ZKB15Ҳ|([@Z1R'H\=S GQ=*AB9j 44gq"OVi + xNG4#2 ޏ)-K+TFaOIY_ycʁ?/k୳oXYZu'}iD*ebnZ~oZegIeN{xʩaF8~$w_+)ulp@cky!4ˢR`>@5,d}IHz!@IZC"kP܃ R9mc4y4.ER#x11T 4>C^%mMELTCbKZғ["KTaL axNwǿp)k[s@S¿O8 "6HдrkIRR$@lC7- +Zǯw/Ii: ~H}ɳMw*]M“5}tI7A^ZB +( ,AkBn +@*E7i춨'jB76]%q7OMϰƤt > +|suhs}/!rf0"48 .FsP!T!üZ`$:i"a`j$KCg{Vnvcf7nAlԹA"4jѮs +cYvyڣDtpMPZ.h䎩zlꈈl`MX{]4g 4AȀoSƛ&i p/?j3[!hF?}2z Vؚb@t4A3L>+ BI mL>VZ6fxb IC#xԞNWx:6D8v3"MTI@cI ]j$307TfpӍNH5):>gONeYf4$kMMd"4`5FqT A1K;Z=cڃ6~y$>9wh kV9ՠųvՁIs3M!=ZƛiP9fkh& G!ֶڃ_[p} +%R-re_OSQɊ&]T˚ 1>=t7<7Mz4dA +W,$wʜ2o94 HM;U NE7iUpQtNIoqԎo_W_?鰇atbdo@ +NhjHȚ{ ."Z)sc6FbJl G}'&D.|xW:J\xhFқWߧ bӲ65* ¹M(zx˹ߙx2sG-MW -InRH +/ICP*?EhdM 4}p]x]kr^ DSDC=ԏW)JGrv$ltN2 wR ^rK\zK}Wk?|'oσ[֨Q%g ܠ{2A⯕{@z|)Mw7._yD^믽񫟼5{5&pz){u&'z%Z^WkjdP)vV"tܕbR-@s8P;5>VI' +KW<ìk{SռJ!|gjZZ6[%ݨ +(:x<'\xaOnnv0ʽTοF^G誦ZǼo\dMsnTgj$jl`})ԡ3:xyN\oF_к~GKHJO[A:͝ YIܫ7zo;.rą'ڃ'`|}ߜyW~|G|oʁraIɷ6iIť5t5}ztV: LZ<}@4])ݸ%TN(L2>NVw +߂}HRa1Dol&}u_ͺV-ݨOՊj7jՂ*dz9z0m9Z9kb?~O02~_xg3;?wz+*Zircuŋo6WJB]UOV?=P~> Ff,G,L{L1>` nmmoL"!_WG3ztv\e|O϶zӜ߲ôȰ=F߻ k}Gִ|\x[bzUk%PT{U2n9;iΝt fwc'mf'uzej;tJ7J[&7&vq3 be'H,ԫ;)3]T:v:YJ|iAl#Mlnt]'Osb#Ѳ'bU Tµqi'Ov$O Ol'Om#OC]{]u]{DWwk:߫nXs+#_^Ef!zgc֓1s`GbYJdC>%z@'j9`eWw[>jZï,Ț@lZIW^lvOZGV1Yu4̃j5BKVOUSd4M7i_^JKOPĿ]Itkli)f:4M;EܠSAVN6)c\#@RL4'H :w.6|JfzxӍd 'maxD)ӀIMT\ǘեեT;0S.N}f'crZ%̣+s`9=m9ЂP&9WXǟ桿xgFdImFҲ/#gdvV@_R K{a 7͵%n4B"=슧etg'q5+&H9)q W旐۲YQoFhM )5)3o>6_(,yh&)=b<}x3'N,i5-愀,Re|Kx6$7)n7Kh^@ApQLBKJv# 3jZ_fPEV[XlK:z7  k@FdMK;%WtE]60y/]DAE%?Eja"1 /ܵR3_OНt I;c' +r5@7'NI,GU%]>_ho,%'"t nS#7oj"%idX) +!0IPn6 GoQޤMr-"uwKP0%!YyJfOHmQqO0KEnStQ~wTsppmHʡмrxwPpu?rFwxf?]t~r5ҍ.@AECsy|b{"쟓@%D~aJ†;q:VUtƗ"cU#M<1#d}@g^ĺ)Am6'͉ I.t@*&u󚱜z)U2.'_*,zt)Ф9P +qbZxlN= +t n#a"\Ԍ/jhbRt rrI Iy\fC #}cMl,,@ +"l2|HԕX ۏ +} ioLl -a9HV-^0Ma`Z2h "vWBaygDfnH{a%=*r^vIw ֯V +(zbĚ;9 0[؍۲U& +nk,MFPmmQg#KE+; > +94h)> Єoqk됝"/*FPKk -*\41U"tZ"քiB?iZ ~:FE[@,GMnJma%pBU^-.zhBt$^x2`>PeDд {W,lJfK +'$]~n;!!^+,xPdaw[;yvH>֌cM9QY^g+\/v`aWJO#D$Z̻1AF惀wFukTU9H5T-I }Qpȼs"f{PX͕륨~0[%qRU64dQ R^9?PÂ94ʨR4b vGF桘|le$|[iKǹB\mO)ʁj0v:s}iT~Fh}:9sزr);Pm.a8uG䶰Tbl +gUN"pzHj4], `Pe!UYP%Ě~)?4iguXl82N#)6:i3gQdӔzyȂlx^>zS$82+V8ZsC908UdXЎ&T 毖&/[#+5S#vc5(Fe+.MkckCpx!Bϐ8j, O2V42Fcڑz0*A;z&*kbQ>Y_7lI5I ad {2¥=QZnK)J{Rݟ &Cq`L=SB>f3ՠr0U/ +_ ԟGgV`G")t$=&qwJԝ- Tlplt!a!i4* {>ɞ`/[sm&(n)!iHJ?F E\؊jUpgn:L4fi0LQ Ndl#ԁ)pw +;V@J3&uCI0?EE]AS'.gݨW25Id@EFX2`J ;)ҒB֓cHMa +ԫ75@~4F9Ji0nTAo,GH$;2 +TCS8˹T-/CBkD@l~.K jPzQO3!THin4B$ؚqF:= &=jŀh*Л#bs؝8[FJcAH4"/ OxIG~dl&Ȱh"kBntBGILSJ G[N/o;=GQ$R֞X"?Y뫖s!dғ`)dauن1&iFsZB}(|kĎ5dD y? \s@ǚ%]tYyN:C'?O:u ^N=юf3C)E~FFKջ{g&{3 !3Bׄ}zX=TQ !:'w5)Gtw}/zd*;_T&&MrN~gP_lMJI5.m_[ Q8GHj#e@6(=,$qJ\`XQs.> +stream +xڜuT\ٶNǵq]֮AdVFSwjwL1^ [vŴwGi<ot#SKMdjj ]qӘ5gk2`Ɵ8~!{Gƻ־a?;H2}@odҡsjCp8/dK{NA+ ÷]/RKR"ڵ-f cţx+TΨ~+aTCzFԿۜGwdϞ@0100|9w8HS9c8(%xמ|׶ND_ 2_sِ`ޥ#2pp_8%a/UK^'ѵk[,V F ё>⏖}?ƛ.O0Ça=rxM:d:x׾tx>s8fhhޭ-5/ C CL-,}Vn8p"%1pڝL!\QSkeXk@V缣bV-07l&Nq͒L9̜tHxx^0sԡH>zaFkXCa+]} +C(PTY'wYXij Ds>4{4@?x|ji +/5ڊl}Tys`hb>p `!65a]Pt(IX~cьlet1 +볱U 9jcB4wC_qp8@ MGZN4[GXm(p菖/9@gYh`(-JуG7 Bg >N6 <+t,L9 SEGse?Y@S L޵u͒h٪OjNuuA/I;+7ei9][bl)Bc/Jh{e(å +Nm=,UW~o{ wX]h`+K8uW oo9C!LS}TO| ?g]C8aY9pbz˸C|}e̯Mvi{Wƙ11,MEۉo:9{\yWR/].,zxnK+$Gs1,o:T)P_J|$;5*a!rn'[Za*fdžY3${.J"Xh8>$t;̝tf!A簋(П=%]9pJڡ)k/P|j;M@}L+(ȡbb\Xn9!] N.{ PEoes!/߅sX5vJjΡ@}{x(!G{rz8lniWiu1ʯXpX!LCqp:XZ66uG'`7P>*Sd+! 4:~?l{\Gso96o=wEC_YT/iyeю9ls *x]V歨I>$7 !8 Tཫj7J%ovޝSkSѽ,7ԋ_ EÊ)̇Ҳ]C̓VD0\o2'tyӗ%3\CXo +tO4z̞`sX(nfyul<` +z)G=]?:#/WAo5j:;V1ebrmhN:F簶1F ΍&5_`:?pqiVR!HԠbGCN>"hJR!G<;5ٹ|!6m5-^HQ`kpru[,wR{)1`)8@CQeY||e aaE{IKO4Zn&|] ' |{c ]9DSҔl#nێ:uk=.m]: KН.|hztݷQ^֢Ͳ+iqĀဘ!ﯵu=5j86Wa_+|WA:tqcbL!Wj|bFKٿ>!U<_D^$GyOi|x9y|ͷ\a6#/#_Ȅ3k[jޕV%Uw%U-5M_RR95e-%յ%Oh}W湷?eqSyEsiU{iUGIUGqe;Fۛ +ݛʦ7U_RRX\P\5 5۫K+kIg\׼*m@}i,*|B÷]_e8ןf+ξBBNP411cPj  +[O'YZ }sۧf6}i[Ne[Ŵ/^"nO3XkjdA@2666#݈?w_4Ʋx%K-[㎝;w޽sמڽwמ؋߽޵޹cm;voڶoӖf;&NĊx.p!&OIGߊ!k(:c f|EK.]q˶{vob=;?Aw_um9461344MqJ*PJT؛ +MG2KJ@,)4 wP_bծMv1_ߧ2D~%pCU#t<@qNw.p~s=t3w<ǵ8r! ( - v,!oŵFp">̘{מհ؀D=H5I>H{@9R5=nN{NEg Υ޾SP9bH"5<@F0%@U֗c4(C)ĚЮYmcşGEg,o3]&pK$niKbK"Ts9Ep2,tM.E.'O9ឌ:'I_\hRqŚԌ۷ H, =B}QcQpT[Yr 8Q~gmE/?wh`hQXݢa!c +Xq& @c4:n# v Uu "ڇ{ۨ}Dv2=-]Ē`sǑ\z$gFޔ^^^WrqqM#ɑfKCe!Y૲Li`?]wYuEqY&rJVfS`FԊkӳ{O! | B2tRP9Ý#У᪎w!B!ętN!rmDZ (S<>iQbTLYa<IJԴzŊƓ^5O)R~;v#WMd…%ZЩ6uH8fW3WmyMYMU emm-MX&*<s&sY"+*tW +3mtC( fڒ3|_n6ҬlśK,-ߘWUmxUGQ[<`5k8q$^X<"_{_}Wink#n)#op۪U-%"*_uSyCL #{ZE3]tѧ fQe3,MfY<}zk32S2S +ܿ_;!C]JVEϗ|k3ظoSjU͌YfaP^5d"!:?cSm>^C8:-ɓx-8,`O ǘj :*@}KA27d7E9,Ui@,=+ a<5YT|ٟ n6ZVmS`NR&F_/w8LBBaǡ  jl]_m,~;<"#mԆ;e{v{Jn5fo̘Y~S_2Ej>qy)!٪ ;fہ_K꾛]M0ziakMe>ze'Wg:E#Z~NL~{ZGkK,`9Z>kv]/SޑR@ŧGXNٲ2rh%*& [rB[J̤Ӆ" w!@Fe +}R8Ή,ȑ(<oq-^oh9eMff8lh)H2MXʊ1g$Uy5jƵ3KMatu$!qjyb޶kONQjb Y BabZbu7A ^dEIEeJíD2RدAFiѪ[Ȣob +d 0P@q"$(@y.7u|v,~8ϓٕ5w:wP]+qh&(11.E=2A21NUo]wKG:'n)]J04կ藤ʊ[MVN-KMM*L^vyfeV9Wx[5 %OoxM _lxV0,Oy +< +[ے;{Ӆh=k,)qIbEQ6:SXsAljٯ)Ȳf6561mjmfߘosxы|[a)COj:o}G*s{7 l܊3`+7~a7Y&C%jX^ju#҄Aפay@#&N[XpX -apWw[jah (C{qq q#w\gbMW\}68骰Cϼ^Eo.~U|} +2SY`̢a>x/u=|ъ99,sj_u1$x{O~2Åc˗[MY:!IE?uXBrO]HBPGaGI" ^*Iy!t;N"({\!%*1gz+amʾZXO)(*(xg15N95>z֍9l7)CC㴴7 :S%mIUŪ(n=R٪&FFV]+j(":ap Xl>6&nKgK®saJȓî"rEukl~@&2z}2r9N{'sBi?Qlt ַ7*#-ɧkXZ[?>ӿ7>yݔxݗ~-qOWiE4U8TLYidRjbQllL"”(VP9jا#m(6pI% && & g @UAX $% 2;yvs"y,pJ`yٶ}佮A3=OY pX3@!JSSe* _uxލ>mȼ kbC]lOWTW~ҕB@ѐ7T )Gs@'QIDXʐ͎o/>TلЬ#Y~tD@ +TTd[_2 +̙g +,il@ .~"u*Mʳ {ۅq$4uЧ+Wg\UpSC:]z]t2c98|e_2>tZAާ%ʮ>>W>RɏtpʃK_PabZgAp~+g7;[(;@4# +&cbQelɷ`Vgd\oN( [1]GŋQI Q9C)Z>ezŇI|I#)Ή $,X93O2qhOLsJL⸞㹜x\KdO<&ׇ$ a>hӵ 216(5,#WʦMg}04t}崫Z@ eQxb֪y *fk3ӗʌ,L^͘Q2oIu5j+%q:HnkHJ*$c|ؚ5[wD<7h+6h!q,}< Azن0 `A$6 pM(H ?8<:ɕۅŭp MZ&==f~z(^්]{+,]E3ci/^0lQ)qJd-q zh@IQ 4e}^nk͊U.__n}_czAUY{뀰$kFwdEh:30UbG^jۚgG7؜@:L=:r$z8r χϛ +EAkx mhvm۝w|e3y6MFF5M}q/MCSv(Ҙ!Bu6V^SƪkjliHԒy^|_#%װC]-q?E*H\%"U?.Mia&24DBWS&DʉM6l=&P[\x$u nρ>| '>K&w]K;v\|!+ٷ +շ9l0[>R !CL rhD5DUTTT?HQ Pp=| :XB3Pk?4 jBIZ`BP)ZR*ըZ=[DjL 3Ï+p<~ I4ݍ͕ՅՙՅݍݕͅo·J69R6:R7;6 )Mδ=Ԁt_?\z&&>LqރB;=Ri&z4:|POȴcR(DőGQ| y7nCP)i$XBB ||GEQR: jX|ݾNnq)-o Ii?p*;++q551DUQ@5ETDGV:]&VuꝮKy=DqbivPE1T#Ĩ:Zx<+ T,R-=F!8($"2*ꖺ޺澚ޚ>4wS ԴtUtV7wT5wƶږ?{ȲF FccFSCS/ {##3c3#3:dɲФ3S]T~U)o;vַԵ"^vxrtޤC w-_e9s̙-gbJsď)fwb3LrZL͡k\m3XXc9c?N;G&OwVbrSc-1ĉO1 ؎/;|2ӗ=^!!q7:a8LcY˜Va k)hְ5[Ew>!eH( +hh6gp>kьv-ܸé6Ca<u0:a€w0md~ +ð +[21K`m0H'#f|b ,Zjͺ mX~ÆI6~ˎ':BǏ6&{OG2Iy:X8z]-/&&%^,^(Ҟ/0bbB}[$+|oh;N`J +qwT wTwI5gF==[I*T>PTJ*j}@xOpOyO~]tm|L ( +L)O")De'WX&pO_ƝaKͲ ,&cs8pm8N:l CV(讉hs{"Wek M6:~N?δcfل¸|}&c93m6~ XsVAL k ;}/ygϡZ~H9.5dX!1*TBʉ5tBb"B.\9xq]>)Eү%!GMaKdgo6l}ɴRFtj&wO6CRcXxMt] < 7T7 0"0Wz]~]#{ ^@'5R$'C 5 +UGhi0WUYle`2>{>"4Oa#8L"xN8Eq^/YC9$3U7ɮ4 o!bh}^Sj?-?_wx|&l5$0FX.* UyJ,90 zx}IIxW2gnzjpxȗz(w9D)&k*1v=~p@azG +CDY,^pOx#[݆_O)xҡ埕 OKDrbhʮ.F/-ULz )6e+͹Ulwn8<@gC^V +r*Ka5%w +&@/zvI +ïsE>0w8sn044`_}h$;̖̈́c-!i]<" ##rQIdWh6/.Ӌ9p8̐>!'DҠ$?]{u "A_u ; AN#T +fuyp"E:MJO-!Ac3Ѓd>tr\WZbi3fsu_[12\!!*w dJ0R! &āFMqT[܀ ΩK,CH0y'y ~JwxRs@V4E`(E7Γޔ&KoIQ0^CN]dya&6 G,X_KjFs?Z4rQUG[w՝̡N/?s@ͩ a}KgFX@ڕ_DJ$17/D-!<8t;rg 8ߝ B ցCˇB`P,Ua OU(wB\q q,\뢰,~pyt;<=bHGF^Ep~-q}KO?USf65XKlĤbˎc  Ӷha#"Fcrpْqt$::sC'. eb)L$Yk>z؟ y12U=őS4s€˨v.4B#@xi7*yM# `EuHsMd&lN u! + 8ԫ%oHп "EՁqo.3gN|Js ظ|֬dd7lɺ_9\bh8m3w|HGC~iBeI@) fò|D/, tT+Jϳ]'FN]Npl}w; B=gZڳw}Hg0 qAb,~X6 J\fpqܓ'hǣ(Nr Xx :9Ҧ?8mxuͽ}d Vo3/Sd,}gOr=ʺ[^Pu*drx%=0mˉ҃ģ#>~eQ" "_^nH:7 +'2+ MfycAǣ##i $L+nNCklRCMVr>!3%A`4! +- +/.Ӡ .\+46,!-M=Fv#;FP]X.qç(;{v9 HajZڦ䐢z +I"{X/;iUѠZA6-:%9C +Sppv@*?{supMAT؆m)# ly[nCH:7SYor*s*K@9'4Osa8삉p[<nwԽf칫`uCyӧkHseҵƄj;% s؛[oIi*s}F ,$>&,,,~rXc?q`ҡMyb>8gЊ[ >9 }Yy^9v"z<|! +87瞧m.];Ot??;4$=}:i::%@kt2c0|r {>-r8Ox9.OOH*9G#,\G\=;Hp]u:j@rz{Aw<ѿn¤UV1^Ľ>NQt8!Xh?OvfȉcT{D>OY&rw>u9ҹñsՠ߹hauCwQmׅZ٦f3pc_7V!vF_vHʉ(#9D419r<#zo6A#V؏XR #_q8U[J̻Uk6>۰MlJݣ-uMFRӒ∄'kѰ_ ~|ӱ\>z2Rm8At >*D=j +>*!iNw©'X>R 䔝SqdmEu~w^> X#'cFPE:qG؇SJPGAH !فhnB'ca":?KڵxacֽˍdKc_,-^t2c2suXXb >8b/6:4Gv&:+z)j)E""Ǣǣ_x8S,)zqNȵAa>9\o] }nP?x8 \&6l&ji#4\1,Xhc4%6B8a:eWpۛj12} 9 %.'WfL>`4c]~׾c}$@}6lG5t{:3 󟼇~#:?Kۑݱsc*۾ Vj+)(m{Ziks*,UZb + լY/Y M6Uӯ'uO^O :;k`G>=;]q qɡ-NVA8n>1m0o!pkx9ɻjD p<$0/w t!n?9q`~`cfMk~q_+fdZb˽Ò>!*zCҎzboVcEW]TzE]ԙ+wZqhfñ!.ǯ(wGJ]Ν\~r9{'޽=_;qt^;ֲJ3BL̷Vݰhˎm\:w=wУo[O.ukɮ}{yޓ{5u}UYffluZ⺖ +H +0l*p"'I> ⠗$9O/S|F; HqX@^gO\0І)Y;vk; otv;+HV,,Ɗɒr|h7vpԱ~`zm[}p`3Z z㞾7qH?/1G<o_pL_:c_0 {s{LbԱ]uzY|"[*]znIJ{y~teh6K/MTeX2@WWߛ+ۖq; k;.eumYw-`Mhi8e]h[o2CXVǷ?^mеnll4кH[`^9(Bs>nEX8W%jپ*=\ۿȆԵq0D]q^?ro<a3aȼ#[o pFEjl8,TRML$50K`~A)9C _C( XŅWx x"Ѻ/~K F`,pl ˵\w##;ҀFP(J@vReJunқMwbܚ!kpkP>zlK15gı30 +c4ʜJKFi%֬Ɩ@ u΂ ER4KfoXU`Wm=Twp# ;uGș'z5}? + nLMu1h3}4r`q"JG X"^eQ~=(NߤKo!U\L~VĄʘHk OlO^%%Ķ/FE8(}F@o))u`NZ25+ȇ9sr$"Sxj_Yh% 1T5kf?ENц#v7D IDE6@RmWt=ٞ/3~ 7!"0y(y9aIhq9pHEbMbh]!RUZj-bB.GDȞ!:o)Lā8=yH9S@̱; қWH t>T4&bƫHjl=^w$Nĩh W̝neZl˓ky)M˷d;PLB- +;-L0Ə# +ոH(C"-&P"[ +T!acuI}-!MK>-7\=6d’SZsJ[Ni+yT# RԸZwI)jޚ_NlS{93`Mt-Ov/~ z}H^( 9%wAxE$9 k"$uS1u~'R(SLv(b*C\JPj#"jtI #ȁ$82i%#f=p掑ɫ\]OQ-1_1k@`(r=sĚH劷;qf,{R@z  E0|Z 0?a%tE& uщ GOex ox!Ḋ!GkA>:cW1ޒ95 +endstream +endobj +962 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 523 +/Height 528 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 1011 0 R +/Length 416337 +/Filter /FlateDecode +>> +stream +xxgqK$@H$ti.qU{޻dޥU͖lw^$;;ZK{y]fF+;3%2g̙U׍MPq3+#o9s#'2p kL"Kd)=Pe +o _LہoD`yd(y2!qI2g̙po4=$vkݦ*{?+,3%"}nltsv7GPp#)$ixbmpbmn񕞱e\%\׍х964:8CnjllhowݪUq}Դ֛UeyW4+k ~PTۧTXӫTPݳ+gv|KaMOAM7WT׫T\߇+iW*mءip桭*ZA%aut57qcqCLCmswo>~8( ζ >4H l*}iW l88bh48AR6 D-@@|]uW a[ F|8z Vqh |A g#@lmށX8j F('L끨!ܬد.(mvA: [Ӏg:]]QPvA雨fthߐٯX; G/V ؿ.;@H Wj]9Fl:ʄh"۫WnA{ǗzF, Q6V/+h3g bQG9th^oⰣ~ {fQ#am bg 9JÎ@Zx,p@h24Bسr ; "边(hֱ-[} +pF8ҿe8Guvw@L}-Z@|I[:z#>[qԚ[Pz f@Wq1Ez+뿦@ЈbwL4쨃2;;xv\ 3@]aA 8=P+SVe# qj[hQVC-7;[ĿOIpVztVzwvbǔa:`8q91{@~Co}x݁v꡾ULbk =tF(1W e?P<x@4vjqIĎFxfk0}_b:l uPa8z<7}h :|]@]ߵ+]qp/CqP;"{:4m f B#aBوbag RC(waeKG9+5pd4`G~Pk Ğ9x?!R 6–-v\Bqz3Q?/]P?PR߿rփq@vQa3;f |hsҶ{f>p&;ӛgVf@[!`*-iXc),{%@iO (\܎@(=,WruJQj{ F,Fa`mg >o oA_ECQy޿b| n%:0ЈL@mF@ 81o5bt30RbWE KK5@̣cU&ƞ;]w;o7tޮ@®bQEY@ cA Q#v*B/D>Pv( omJ:Ьl: &x#L 9lfA)K*{v9H]f,旙pz9˜ZckȂ;(xVs_a.jZ\e#Ddf5>B{82zF] +EH,^H^OY2wf4 +MDEsEpXZ„bQY& Y0}(p$:@8&P +&ʟ +8ҭ%n|[`n39( mx:4E MQ&Z=+cˠ&ycc,Ŷ֡ya`e`owL7tOwMwNuNvLԶߩiCnWު"ܪ$WWeM`Taa~x!PX<5 +߅0\0CIniWq-#R:CmCt027kƵ#2u@aOIbPZڇ:Gf:gf:G;ni:UQAp>ZQg)Se +uH)>IJ])Ds̮6T<͚B_XclHm;-!%]67qqVhY=#X> +yZn ʰg <7G/P b*\y"wyҁ`&B9ȁk;h%5w"oZ;ʝB8S+$XfO %ygya^`Z# +`6f3iqhbu핁R8X 7zn,t.t!h: +SI;{'&A睆ʏB㟕4ݬnQ2ZoK-ݷ;w7;m[=>71TL>3>zL N,,ve`M 0{bjw{VU獚=c=]7ACߝƾ;o7i깍N<L4Bzp#Hc +MS̓S-aGզ[`/ex>2121::q7涛u:6Ѓ,N{Kss8lܼ$MfuǦHݶiFg(7f3O@>EaIH@EAm+UW<ƺMd0WWw ܹJXWƜ!fH-X3k쉃4/P^L|4Y݂ȞFf<5kr>5sb̸^#[T5ul26䛳itfmd8 h'We0p{ ^쿅>ہ?ݣs]s#3 d$vq'Z`C`X ;O9^9^1ja_F ~Xu0Riď7U4 7 58_>Ɣq=ٟ_w5*1%C]*>HYHyV5XZ;\Z;r2d`h9hۆPR3P\wޢCT>cy4#]3mS˴7Sٟ^ҙ^Tblkcumsu]K =ku]+:VWw٤muUJCZs;]V_k'(]mfmu t fchmh} mۣ9ԵCR`z83g57|F[o37&?}7F/~j/Nn黃 B*cj6BYhˮϮ*4|ܧ^M㖿xR> $L>D:z&`\9~ijy?ՋD*?OܛKXݎ?t:QaK, ^ +ZM3ޫVN{-^g9>9x賴 lz֛}xz?_^ zN{y/\'/U/ߝN{O?%{c c;E݋$܍hۈ蔇wۥm69F";Qvid8M.H]DvH#;$v6iX$U n6۾XOi=~,>kskdamPPFHܷߞRU?fKbM+m#gS6\;.cʱie\xJv<4., +gñNXde +,m2N`Ʊi,ooUQyLF+WVBdi0n2g-I`X$2-XV[X'aĴLd E<<b馱4`K3PuLX]2-篻sl2c` +oVhIĘ].fVk;odWfuXB SUUoNߧFyn4a@ԉ$~ZWԻ^$hDv2oKܣKRS>yנJ׹@ߵ%x^yT a{J|~uU_ԷV[#HՒ|6U@S% +WĽ\Q)IBd)C#ƍvWȳLY&( LQ&,xKqb +WȻL]&X].*%Rģq/Ne<*[5߷Iw7sh5ICO÷4e[fr/ѣLZR(s)\íkЭP^$(c]Anq- {a 8@9_'p;lX,RW$nJ5w>T9~sݙF\ +_̵H`'sx9|\1O/rBAQpQϹκQ1nM+sWig)')GIGgΫgs+N9Ɯ'[=ig6+,}b=~Ukd|QP1?Xj˗-Ҹ]׶t *A轳2#Bڏ^9Àw8e@)q F||B02..SSM}!"o%%oE/Oyh@vw^utB:tT_!w +}GoLV$dzR/b/{z>%3g`igR>3J3^T^Ӟ +g6rr|Jԅ3SȄ ]ۛKD6Lmc_}#UGͫdB] +|'iݡ_kNO3i5wi7)i&DFQn8Kh)0̀g5[&yhE1/_jj~WmFp,ǴnJL\]ϱLP*-[,x|< +pA[7gF\L3s Ҹ\dn'R&YtA"i:4c1Zr 8l,6>3q&+c0cFRY)^ +Ka#h8:l6*h^8o5La%3Lءט~s}O΀:xھL-?e+$6lL(]=r%|%|%r5A]Q +4=O>Eo #k܈g]W:uZ9vɉE^%_ $Z'Fi<+INuFܩV//]Yj4)W|ɗ.y%/e/ +@] 0es's'ss䳮s.k緀眉g`za)36s .nK Ь@ Gʏ_;7AzybU_ZK*E!ā/RFHӷ) "%f 7Aȼ@̳I(so@n%sV]2rc|MܦRnU&q,t _['TNbYKROzt?eDFlOȫNQ+Fgi'BwhK$n5bZR%v*pb +S9V*/mD6)y˂ B9LrYm˸ѭ@K9BS0 ٵL֋<<2s\\!tgjS9r\&²"/|b +$vERM:_b'lY̲&Ylif 288Mdͱ(5ȃ-~u2 +KةHP(A$ (IB]\\ :o+Z VB,y,o3IhZajft~\؆_;gVi׷v&a8i^u6=*E"|M&n03:[ѯOvJ =bC(}=sxsn}8x7C +Co{$MbfW xF)ΣS;!ʎTCGĮUbJ1 Neb-Gb!q2^yџMhԵiĪې8t/Η_fݼ+ l{ְ]U|j{ؽFV-U\`ՕbgTrK8KbcȱHcf:vƮy&9\ڂmlc˷[dͳ晀oI*(gOAD{>w>PSU}R~<ݫk#ҍl + /znP#wl"k[ev Voɷs4<1KgLS٦)1d$@,<Rq\Bh+oUUUrh%\4pv,4Q!jET_1g4KeS2gƳHcRd.@KBPfF,8!Ћy [+ '] %kDrlV1>W_8?)c jьٮE׽vLq8a4g&!a &i38f0XbXz1LhnC7AA:0 jAq%z9prLӬSٶ]Ùc~W ;.R%ù@ыur|E20IыE2A40Ql(N$S'μkatPPv0ZE+H'B=gW.xSiî@P'V({  +1ī?t|bطiݾ[Fz/jWQ:enq`ĿCбعq7cÿ]i*'`9hmRU@Pdb w9."粻2RczJ9/OzЭ#pݰ.9U:9Ur 6z7V!n:lx5{7|Z$6^rLɳi<"ލgģN^MFj5"jkm +EV0 +vn8V>**'1iw)E\D%<i/f~!yHVuzI<`VU#s rC-4) ]TTw(d\YsxY\_7KAd,`•лQ0v֗9d B +JEXdx %ǩL1^ PRTXs(T;P/ֹLli$k R01{/kXf08y"ث@W +sF2uVWdc[+ $A"]V`[p &;0no[es-,Q +0c3Lx_~[K iޕLl^X k2Цu2 <,E6*upY|,}\$m "26Og0ysdh LxN Y;w.n~=߽~:O;Q±JtC'ŵK2:S!ċa2̰̀FX@ `v3S*qSdea](ڥ#i#UR60yc*~W>T-x,Y +۫XӼq/!eD6N'0YF j4bQ`fXL^4]/ +n$M7FF5ZAld]d?<?NtR c.yZyt˽ bM8bEGgF2`JeӜ>dBQ +dtWHYGiaTvY' B:Ak~T /e/E.+WrW vZb'⁀Dث^nSR#MK]"mn̠,G CGz@'b=2!^Ke2ZervYP4H)40@ +"uS c݆C$IcJ cǟz_ܫQ=BuRrqp,ud#n/r% uI Nӆww LgP [dp a:g@@J$Eץ9bj=c=ȐhnIк(grދ[j Buy@<f.{Bf4nUbwPU\+2"uβX殛eJS٢&~ ҅\Xrd;L}w# "ȱsBX)qsHq@k.;T ؤ.mÀjtI0A`*5lٿZu+g-Me0KxaMNtBL <`ۊ! PF .xv0)ば*`7*eN7Me%sz1<8[1.w~Lۏ7! u_;ȴWZ$둄 Zk _<\يU.8؊@i.ly`c@uI2(G֋BiQ,|MlKozL߅@ cxp-y!k1tk$0؉e1HS<}/X#5 D< M֍ kE4ChT0}6 R{|cs⸗}Dk0RV/ {lئIt$&6lpk{FF`b GQՃWz2vQ2Wo} @F.3/Q28^EB +_ 6*eMG^D`A, S S?Jb)ҀBoD(BсyI{EIbcpZ[/@L@ ϕH\*$2JYH$_6,θ!O0/ ȃ{6׃ +6ܹEzHzp#El D$iSQq{EybA|)_YOxVU.}8 htK)X؏ !|> _º+km +k@gR|[>R( ܢS([zWo[]$oŏ bO*Ǿ1BNKSy<!q\,{=ʈ5AٰY keu2z$F&5bw*kȭRV!p+@6s,@\f<$a*7?$Dq&$a-Vy/*;VJ!b`eP; ([=%e8 P#x\ }^S/S1Gת +,̰GTd^R2cAgF$Eb"#dxXG66nvvt+o˷pMLsSX ,tς-|` {(]1O^7aq/r!d&gZ6yngAs f_ԷY>'ib{€\%p໔ q~T~ +3gS +~2nw-52Zq\,Kد^ jy7B䞍jܻ^Ӏ4/ShJXT +[9L"h\w(rͲ:T8_վK_r싅UbjoKR.T:8׈kE5j L%R%⨗:&rE[l]J."E `gaI*U;E(7`}{=Lo8w9KI2ԱXT,q*;qN(Ώ"N[\؃|=jTi(z-z%aʹmyTw*űRَ\\"Bl \<u-(_h/.V=J)c͵Zgr< 4DQ"E7|՟rїaFi|m{"W'Q(Џ`v^ DZҸ,\}k5FЊMHRQ {Պ<WD:Y' +EUT/@Hd,TC)EU#:.h:(çI vi~ T-D`*EX#BS!϶nMA*7`\8p̥RX+9UI\j$b:~RFtz5BV)rA` x#\Kp*:\P̵ʥW.] +vqM/FǟxOjT[ep:쳾4eױ;Tf"{j.@:H]`Z!QvLSfbQ/=*Ͻ_ɤι$_HNBB{dY]23ՙѨ.Yْ )$N `$M/{f2{F9s]lx~iM8BFdc}0 0n+|Fר -VK6SZ''L9#LdpT>J`pO>3"uI g ؅_!LTe,@L(N1ِ'4i*U5Dz)MA5PgÏGAPY}b \UM43) A>ݒfIlg;<5z N%LWXq:0EA__lD c|>$s2ݓ=Dfw1=92Cb=v MFKBbKn7N+;΂ӱnY/),&z4RK5RzZ]\Dl2!S +?Dz+ۙxp)X2BTG-Sk  PBWq4ue8D\>BWĔKQ+K {S>v_uOXF>z_ z&nvE_>' &?Z>n4Y ⋮K+=,Jj W݅қ[?*",XrWZ>b|%TE7h jĴ-U2Spt*}E C;9挻NUX:.ܪl|aES +@Pt+ ^@|Y, +5ˡX9pVYlCq+sĕ>btSMfل#j7lg~o[A;WhnԑsVw΅yssgG`F lԗkM3/8 y3=G0e2|5 vQ]$P"C\auf~]<@9-Rqμ9.ɤ K簘{#ld=)oزk$ hx 3A0.+D:@@FZs|}s[ YG!E9*>!a;v;=ͷ@x ! a*bk*VR[}^sj7:N%S f+9Ԛ+ގwA:аO>YOh:.+nz@0$Ypx BH_I': Һ-]fA' j`RI z}D?KHI7X>YBev3!2n|uTXnn [|nM&\Àgu`j \7$Ŧ H/+BV Zm8JmB{L'PE/{Y@K6:(W=̕ Aae`@7ZD:4򘒛)؅H +SRAX%QUb˕%5@'Aƣr}t3 k9@g'`;QC:;]k1홤bcɄ+k ʞtNsL9sX@“8d`a%6~* ĝ6[l|4ۘ'/ @DREq:v`0hQ{0,cQ+6%!]^ D05f TF<=.#4kWՂꫛގs'bj@n@_OhS;.;s{^0lC΂ؖǔ0tjpKAɣv#$kckaE1a_*Vůp ?aQL:͎c9hD-5 H@_ w= ^@x~n"i\h6p4a*MT>Xf8](]V^ݻ?ޏ IfKC"1Nl ugV5N%=i1xm @p)S)\ &VXIVU*cʔŪ +թl!z{rHʫ||~#/Vn p*h ]KTgb ƸC\1QRȸxLst#0UQ&{$'^ڗ%ΓD@@,ktJ@|r_d@d! 6<) D=_N s/y$?,FJo VA巐 e7nB wuK\We%E{Ѣp&8{jU48OP98oO+g??LkwfMJSoϥN颓ݲ,be| +n6Xre$t.yG&`fli<7e> Q!\M:\jSsGA/zjo .ل 퇥fF89!ș:8/8s\YGk ?g;D>˱b8̠;@9ILZă~H,ϧ3Ŵ/K{;I*ƚIƝqw*gajޔ+oʹ)j#Ob#aJ#L0-?fC} <*"r"  >cF cL6"+MBUb_y"|7<ß`LQk) zN;y=6^/Z0ĤAF+멃t.ZCj +%kE#B^:J- 1YmKGs1Un=-͖H0aKX# *vR'+kEѵϋ&<\ +uՊWn e8_CU_]]Ge;K 6Ŝ-={*Szڿ. ʦ~ {f])rκ 9ʌ'άsnCy)C:tغ +V.Ҏ r*pNhhή) Ƕsb1W09N^_޽^7{@H'#Rc,u͹f3:yĴGy|yFz>#cf r1ڀB )-y" gĘ]4fBLH& ]9 9^@a kbZ{lM'@#K0E~ 7L^c0: fnٵ ,'s;y +t[V&赥zO L[\XGRwIuXw0hF*R:"Z+bL)қ'}}xpIr51̭ 06`m[b0:}MkTk%a[L8A۬%We +/ʔӖvrEzNMEj}j>RCJ[SBJl&hFK_[CI.%5 >^\!R'שj+R}h6 Gy`[܃ܕ«Ea Qx/݂Arf&@97ӂĀf!jX o_FUWbJV" +T2%"맗>xtײ@ H kN`3Sբ˫݊+mCčK (ò@ܥPeWeW ]q_a᪸ꬸX1#l !OXk8YIL>zfAD.Tn+$t:λdA!ÂY@(.;88bl]k*Xd78 Ud:*3ŴdVچS[wamWO,<.OmtޞH6l=|*FsƩZ8lbUE2Fd@1F)][V!>XE:Z%C5ʙrN: Xy + ُ,2dy8bo8?]m k FA.uA#@$cn[xŃxИ9h $TfIkJ2- j_rP_cI)}6|(e&:G,. F R{i(cx +q+bҺ&$좄]Ncj]o.^:,7USaJ.G||8Yd@LV@@<$2!=K54[5/a/Wacq+f~+<_ +2ZAz>0 1v~WNLVO*[%=$_X52}J9 QO%ԛ)f\BB]=}JDۖ-:$ zAiinSJU&Tj 9ywv$@$\;||-RKhis'{R+t "o15T\%_gzjM^(xVnx$C%aM Z0_I5juBQT MlKԧOğoKv1y!2#bf"y ?R̸Kf\S g![#wegU*[_:KJ.c VL]q]r]vW\qW^;n\눌:sƖ>Nr8*S6^?o|"s+wlUqRN,giH&Ղ/ Y0Ns/ f% +0Uku%/=0eY=%2S <˶8R{~ + "@~7[r 8yZc<`se =(N;P c)v P3 SSZ+cB!V?)]ڟNޝӅ+/uP?;ԐB/D8ʜToƋ͉˦ ,FQ&75QRפ5(Yop ՚2]H?A';$\;~>>@@ޏt_RH>DWRQX(Kl5jwFGe?Wh%j)v.FX-QE+Ew$}K_ O/ܵc1}oiJ@ `Y2-dRl9ƀ(.ZsD%?Tt] ",!h(E4}xX~BMW-WMgMG-'榳?kɜri~P +tJ [||ƃ7rƴrd=5D+![\Ej?t`mv +ͻ"9y%'rRV,؋l ux"0e{񪈀""k(-;[6~ǿٽ-a!s.ptl]tAg4@3|e.ϬS`Ƿdߠqxa?mN[e3ւYk᜵4"8Qs. 6! 2 \sD-u'qC 0pfN:$, PX:ccv/ry$?e1s4jɟs-Yb[!eڣٺ#A;R +$4#a54- ph-y@9pClcSBnB<4#tΨ%gԜsDDaߘ֣Oi74uG$*DB!d7?o֚})n@NdKitvb8 !p3ׅ.nTjeNC@z(q9DIgu:3FcxLy *]Roy[k?Qlbڸ3Y}{<R؟?WpL6BjڎNCz>dH0a _>ޝ$ťM BVsD-nDQXHlqizRw`!դ~M>/IU:ހthXzԬ5i9*mT6X:&7ӝ wC W_yq'8%/ZپP>[mƉ*_k/)v  qUEP ֹZLPP6NP)QU9KS?':oep_vA>?tl|^<-sT2V*v^|^r틒k5)/=,V\4ӥ V^+۪njn9j[NԇLEt,sp>u+vܸq`7ZSqa/&tb˨t7_iA ^pҳ, M~,⠜⢳ VP5*S~ +(^/Xs&!k|#~A睵~iS b^Kr%pR<(VɁ5o^ +_ly@M%pȞFDʾ^B4m+axȖ9YL09wܔ3ń9k,3 +:IƈIP_I3'\|=>6@ @Uʓ +5.%cM +0`lۍ`#ߧr'v VG\JXck%6һݖn(3>>ǘe 8Wv'۝%\yC_ꃘER} +fܫ‹Gh`;W IN!"ۖMX7締рIХ#V|mW[ Kw~=^p2|ݧ_ڸ?k׀x7^2Bĺ=K18͢a}db+nAz^VЬ7yMJ^$H/Y>qwoҧ#>6]g 7c-BXA>XDb8Aݡ 8Y ؤLóO +;T\w.`l r4 lgw|XyaElΥfn',s_7} 8+z<ʟ'@`ͻe `V^|H?yFMr^t_r8ʯ:;Q75$UuQy t(Yt+f]yS,]&R|D9{7~n_ JFA|J6װ$=eeAjwV6jdp^`^0o+\HE[9Ჽ⒣lQ:(u*%SQFco5R'<ͧkx8x^L,@+AL6xfa:wҖh8hh(*D:`M~&MسFm~8Zb!y}ꃙf:xW?"twM1dC*kƀ״bUbO, DѴx@gg霳<4:&$71g0-:qPT!D{4[Gܓ6%o|c'ĻoR>|._aHh`RmĻӻcG}Di=47u 4D,a3EKvY8Z]XO<3iiWU/6穧 :"e5yA`Af2ߴG)%1z>߈=`N*~~ Xg.Յ4'wݙ&$.AЦK}2@6S@A.X_h@@xHvi"aJ#px-X41!th7dt 3I4V+l剌R|[]pѲK>^ݽ 6(߫ǐcpUԚPO' Nנ5MˆF5^v*t1%02 sO}~g_?} 3o>i'""V\dt3eV\p]B_ƭJWWˮ=}J Xva'?98doDL[Ӱhl- .sD5|(WlΟ2% ^9KQN(c)g3g +<\'/,%ҳspG"e.T\Cnj ^Uy%W;o!!/X(z >X@H'AŖRKT-cNj@ pΊ"Ev^+@s{ɢ p "KGSvޙ7锌6*Xa:&5ӺLODZn\OK @;r& b% ;/uw p[ cȂ(^Vy/ތ{حTi7OcU#u|!h z@:R_.քɔAY|#B?y16Xc ~vSџWAZf܊ՂyPHGW\ڽ(OZ#+ +tg?;>r4]C3p?>ܴW\-uLgNZO䘎s'LIݿxUo>]g)gPx%MgGDEHG pUJ%p577u7\uם5UWeE5.8ajE8du[[LT`%}_Bv~M__āqV8:"5G4p dҞt={Ӟ982tlɂ"8[e[p ֲKLEdъ#v9[ބ-,n1Cib)/650{ +: O2T2jvܝco>%bk I.'_R@A+.XHjOa+~̱p,JSp1W?ML_}ܶ͡ dbMP)-ǫ25)2h*)4H~tY:$- |ȟ䎙s,9gaFׅkpFX\ uzWz'WUfϽA=p15|\WkZAˋw]dR9~Eu1i O܏(;b3j1e[/͜ލr3/"F^ sԇE=1KW^C}_9Vd@d%(dk `(^H\uGl™G8n 1 aJ >ND?e +ͩ\1ʁ]IF 8W;||6|^yyo[ uӗTubL&Ki4HB NuPX4k@q8ͷ) 2)Wz'>8#}/[|}Q {xˁ2MT "WJM oVȇ9?{AhSnY@*,qL` 2y.Vl^%6S?_p6lA:Zn습pњ?cL؄#v^bhVYgQGp3'x[ϼptfY'jMs,ު X:`Iz$nDoWU5777HKm698![3GƖx{#R^1sQ)Qˍ|ǿ>5 @D>#xxܚ a|iIZK%#:3<G0JvCTa.8'v8gYø$Q1*}Px0۸+͸Wd?y\iI&fÌp\;%`Ł]Š٤ ; {L+ъ blI7rKjB8o0FVCrӱ|z'G[@%B(>w||;6LZ)vHXfLl`ﵤoe! < A&s!hY$ ҁX@CI'T(?>4p׋хkhw&iv$k" Y~1 |- Z\/xDD'x::I3Q0rFL@8)=Ѐ8DWJ5Aʀ\Lt-[┧ 4yӿW3i ԑz8xw$P޺,p=0߆{@vSj) D}+.l[S, \9`G½"~u79s_Gī/m2 tp#YÚ_ h`@Nz^Af"]UApF"ʔ%0_rXC{{l~vBx/,g Mdz[g8. yo~b B}lyۧG?s޳wgEvޅ5 ++">֍tXKJkh߮+*:+9iM&ggvDeS00QcogƿLp u 6 8aY '=H;k:x+.V,:,A@l5KKZy^}Q欸(]AX. ^ D!:u{c2Du(׸;t@b +'85&u  eD8H* @&ҁ$Ek/۪.YblΛ؋1vI햸fSd>\Pd<"3w{rZtOvtڰg[ {Y5 &Hz*f"MрsDqL׈_HnzGn+5⩧۵9պSƄlX / ޽VsFp _|n[x'<' 5 +mh&@>*4ᅺ}?٘j @Pp[AH!#ꌴ. ɌPSY%s.Nd"O0rZ K! jjWȕ-P&:wn3or/Є Ke'>*L3b-N)FS",{m;wR;t6p*Qebiާ|2{p`iq?@5{;V?SA "P'Wu#4cgKxSgt5k9:Ct2pta) qCZ}]}Us( j|_yQzV`!Z2agOGۃ+'JCbPC2`K?)<..&gP9uj:;>74Rk't-:/zTr @ʯYjjJ/8gly0*p&v3$RUT` u\a:cؕnڟI@|ǿ>5.e q[֤={+Bt!vg!RE[Qx)'s :]o -3+LM|4crɤ 1mISؗC@X 9,=l(܄ ^o’s"wuR+nԉkaS9C}iI +\y7~n9^ +ь[Fch tIiК9dCֈ9gԜtakyc4%Ѡ)הEکVÊ5DW"*KRfozG-N5^}@81SM@2}t5i& 4 =o,`$ b4;Ѝ+@F#oR.@B4dJ?pj_3AA1:*g8oy&ݞ+E@$6:#8`M(SiFVVG=&em˗R 5ru8nSbe?oyG16^K /t?5ئ&##-{o%gZ U crb6R] +HWv'Dw{쌹Ago~;6xY, D/C=S*DT6RiK_܀$(NǩC0D::]J6BP-QE_ +~(y ~/Lp`goodso'[@> <)lW?.@@t]0hD{5757\7]HMP /vy=#V?d9n{T#v>G}xs@|N1{TpmlXp-@4$t@U\uTG%ܰʘW4fw&pgJ:|Tnܟ߁:'@lqׄل=^|%ӳkH\p(fA8]4oZxd+XL$3HFqqxN%/|Ing c&?`.q׸]`Hl>\aI@Xg,D*:ؽt l2ôMóU~*b}a?}q۱$`6*Dz źdcl>:O|!V;BxWBF?CV=t~ܛ9h 8Sֈ/"mKt( i,JQpo0mҲh/{ꭱT!2'~? j䩎KuQU>T&t`>39-ƤF] ԇ,T^jGjs(V}H3_98^H! rKTzSR3 *ZWnх^FHY f}r#Ά`]:**D\<.\]ޞx}]?у5@D DtepAktlɍ8ڐ &^lo$m)TĖl +UL*0w_r0;vSuPѫw4WF wsVrTEUh*PFV<֥9N-DtLDĩ%Wj ŪB%rpҩNDK~i%u{K'~Gnؕ/W g\]VĪ|1@*, O::9BCQu F ǝivno SGi#vn5~z| ϸ#òOb=B.ΟV0GXNA`~iTMJ E.X5y.sS}"⳶!N2t9] JET1' -= ^g~-h= j^]DY.LtXۘ탂ݛ1o[X 05@N%3YL0ކ&r:33TB`I`Z,Rlq+Ǹ&ka 1.xD) +y{9|&=,=B-齘rq &Ug +Rf{x*8oK4ĔF~f<," LL17da H0OHFhvC ",va,82dxzcT>RYhT!H;,yzKzsJPb/9 xa ӳ44!q0{ۖTdB ( ++^lMm`$G* a%` /GTQJU᪶*=nrP2Rr7?ՃfaTf{ RZqi6 G%2 !;=@(i8y-zRƢCl6L^ A sLi\:!Zٗ-w vb"}i :B[ig4 @~sxąfLs5$^W.UE +T!Re`J@2`MZytt5>RdܟߑAʹ }? wq>B@L;+Td? +`t(ZX-Z]m4H%=-|sB6c&1kƨm%sǘ/%- \;+2Gh O ; bMƸV*ݒI'ZM Ӎ[R5- Rag;a/+ =\1MxES +EL w, ܄Gj1 Ƹf*i0J8Ct.φ=C.ZYC֠M IXC"0C45 SCxmނN#iE:7XpLQC@ԛk #;TDދ¢dDw7D~'_uL>w^ 8enR5Xa(mJ2 +:68㊹xs6DÊ +uķB5؇J}XBu m1#ZMd|fLa26|>iIIT^tP毜[FV +Oܛ`kw VIgx=f_LSY2M}[ V^i@F\RT^AU +/T.`q/Y\ + rW>"'?ySA|Oqg_g>)TXZ~:A+V;xWvUIz%UpS*T !Bi~wO=)|-@݀48uū'{ŋp/@dr&ɘU4[t}.{B#Ӗ`2~&a9Rh:1Obb~pyf]?5JD)IrYbE4n]HyW H1i+^$5Nb`ev Dݸ3NtY#Ը_!0NLL/^xM1@8q ВHƭٓs\QsdČ,Izk I\ +aѰ%c,VKL3`y nfq:oܟgښb!L XEoNB8k &̬DC+8cr Vi,T p8/օ飪Ak +f_#IAzss~X賞TTJɍ\8wP@ wH`&ǐ ҧuR; Ր|e,JQ?] .ԧd t.៣:_m^W)'MܙرVc;A4,`Sl͒lɲ\Rl'3iNLb[ dgwę;ݵ qQOѸ d\;Wfy׿\#Yhi/]@tq[3z1]#Kq=he~Ѓ?sT:m+z=NMovQ-N/,mH6rk .tr_5ė_0n78wbx p@vk@C@@=`bDMxǽqrԋ0xĽn4ds2-ilܢhMVkQ,Y?_fOW񻟿ʏـ!iF]>{.o*ƜN&^{? +}w>{v5Q$ ΃ᚁ@|{Mԁ2疗>9I?LRew$ی?A茕5ǫl)ɤ7+sWm/}w.--=o{@;}jz^Kt]Ov^GgٮKIˋsۺSiձb9XJSTt;sۚ d2S‚6×v_O>ȣ_Pٻ/ "A\x调 +躖BSPF٩֗R͗MsI톓z|J0-ٖ%ebɤb)jVلb%b*D @2~eapb)4-!Cl:e=Kԯ$G`c DB2/Kɺ9=#Fʛeh6, Z_sn-㽩[n=f~0I$x ||r.om>Sq\Lp32 ' iŨj %I&€@ o0"m9gbҩ07Dl +V` t~"oGyI6ws 6zh]~4$ocbUvR,#qd'DCAjHnXk#saLU¼0'Fb9a0/lFOS E>feo܋Ԙx+kܢp YdZnFa8t/[g-#Rev!|. *&qt'| %1۽6$ +B8[vɝG.ߙsRMN'VO :nV٭JB9QNgG5󟮆w=06ճjڣ('h=>tZ]o)f6-^^G@ؼ$Ξ'Zbl`8Wx'h>8yXtBnɆbҟ}>՘~I5UxG6+^Q;-vyְ^ߨo vm^f,o rطuo~x$o=M4xL=OPOC?d?)~w5;C?~NT}NuimKimTRur';S KR3$e QEK,Vs'N#1rrn{`@=Hwz޸ӃwB3H_Ct\Kk4\I7_F;M瓆3il BB4.URxZm*k.k6,$羋kW(]X,`3 mIqmmt~˩svZ.'/&/&-s dB{"],!_JCp*%L +QdB` jlHoXfh!DD +\lJsw1@C~MFWCyCYTK/L: &bܑ(g7 +>-$Kq\J]@)!a "=~%y7 ۼ(%iS1 +gy6eF7' SXFhSh*|(׮`꥘j% K&C 0{ o0$f"ҩ '@0ʴBU4pDcub}Dmnou1JBODž["vհ.5KAPBX9uSAx<V:`#am[su\lus,W ++/xHp; NrW<$bŌ at~|F.GSz 3A|rfe <~ txV4Â1-2_{6ϑõUUpٝr)PܮjU vSM\2Fi\OxdcQA2+zxCuѭ^A}?OY$e Yk+O|$s_3OӚ8Օ/Us:|4,{l4P7$y$CH!b .Ȇu.IKnA'>lA6 ɰEd: +빼ۇXP:  @#@ +џD)TR}j??$7?{7 E5V|CQ|Ƴb4Iv ~N;M/.m.uSIűl5&]&E w&f^IΤS R_+ocqñؖĞ?YSK˟ h:˖M6|NnE+|mW(^ޤ 4ɯZZ^J6_Fs/Sg IJB/`pDQjp~t!9q"5ъhES1Tb6&@T(}`g\حZec "uCẑPpP: >a?xH"H3\pz. \9-Nf3I5;!4lTתpՠTx~V/\:ȼr_7TCxO{"<~'}^EG[n\I@E+PmDj=ot,o;8hNoNd 2&Y0BR0#]Ji[%Zg!&&+:孱"3Vޜqۏ?PO_p*MJHﶾ|ݶ'g/{bZŴ_, P0]@\ПKNhXc\\0q¢H{K;cњD.҅KB#Y_}"_,8{7&=H/[27q3 tHY4:П7[}6Hjʂbt>! +M=Meٔܶj%UKōHK)mYtn2tF +NDG@1XXLw,y>Pe<Sc٘d:*脹ap5:!Kf)QD/ljG#~`!@^-#@41\q%٘a%,-FHx4 Pгʹ|m)@xÀ?9OAuyxCLLgCTW˽9"oZ4_ED.n"n=tGd[@2̡٘t~ :^1G L*gA!\X9 ɦXP4 yꛇrQwP"puS1|L<ܥ̓=4 4mbs3~z,ij^@D9WMT؋+JǼucLX T]~fhpQ$]M.f_<DŽElA&$ާVY!#_pJ y ucAhP2>8?p-tݢ%s{\n7j0P1jqͮZF$4:u*fnbqW ln@cޮb + Vo;_V3}7( ^܊;2v;Ptv;nAhA3;(F;[Uz`FE0dtp0i<|y? oRf^7ĥ)ϗw-_*#h/Mc/&ёN>iËۍlkNmןQVO׭DKIbB-% )t1=lc8#&+;e-X)^֜4K~1pY_{PE{PL'4'; ۦPxZ5a86Pl +J)xZ-%GⅤp.!M_8g*,DHY.}l}3^т! vO샠ʏ6zg#t٣QR\NKG!/X:qI4YP,@a8,!PM@(w%Xt<i +^ģW0 }\ >BnS|/ +Cl6f"69atȚ` @jr Dټ K=U°1~gv}hIus{ܜvr;ݬv7fzhMBhp\Fgk% F]Z@uuk?m-'Vx9rG;797$avz'[m?E(:W+L.fO4 H~hp3(MWe@hrz 3@l~J +hPڂ`mM(QxDȗ;rŮFC}k[|f_Gl8}5f?\.tG&0v̍/ ~tl,Pךlbu:3r b!N>/|v\W9sFt&Wu]tG8Րc7J6N4NJiO:F:=9֜N ' d))YLImoa, It=>l}AY`?m8{~!?Z*6 4b7NEfg 랉 ?ʀsH Si$TT4GyQg-C1c `7J:^Xa. V}:u<ʺ /7?{M5 j+x$( @AX(#hH8M!(#a3 az.!-LE +،p {O'GS`: 2 @y =9B7Ͷ^^ BfaTټhp7͈ Yw?p b77/p =AfW (H-ARKF[er,f_:gamXm?"9p\`?^x$k7IMnt2dV.|n/y/hGzOM@ `hW(mn`lHjL?{ez"Xk<ȽqDF;6;.y_.:PPhﷸh. %]8+Ԏ + hTVVdvaNn "/ _|yɭ2?ިߠT#ZY <bMdɰ +@h.lVTH. 2*Sl* 6n| YY^ϒ>l@ίo?ؓg(ejzbɄre[ i4 x6xv[wf48ҜJOmHu2:VOV3tHE Ib_H &xqt3 y;&68vxhrԓ,@XG RK\Ažq/r1X|Jv 8Zݕr%+IŤhJ4hH)7FSܩ$g*řLcw*LizOK[ʼnf‘#a FDSqBBg1\~4lF,Ȏb҅d>*fc*hLDQX9c$#00a Hb3 S,І!ggNs-6o8"{&, Eus1>Rf0hО 1 w:f  @Ԟ0+ēQv<)P+Pˀt"Fm iV7$ +hp4hE4#P7G qB vԎ}@!?'rR$5ćQYݬVoV劍rDr%hTV\wTm#& 使q+ bo;qpAv 4i8=>?IdTʓ)ʼnXR[IJEx1.^JӢŤx ₹mHϥ7D:sҟJ#Fqdf2y.s0^DZ6] ;i V+CH1xf+8`|Hp&!DHi3eODsZ^`"EJV͑mH=Dmө;XysO%G6zx +Z GsAAu&htLr'8(O1x3FD@.(w-/~po$Yc6têP.$L@A>1ctLF6!#TT}:yP1A5f EC/D P{|` ;~pj1VYE?AyJ`CL2CL4[GhF$h 1D !"h? J ?*Azvh]~zW|U´ ::ʹvyG9E@wDyrEnñ^ݝ]E h@4A@0 eN! zRo݇{}ۏv+ѸܤV/bj ~Y}5[Q ;O'6_U w䊜8lfu `. N†(}DYSNG| 20lތ=trZ~* R麩<[s*]yL ‰B'q@{4+b<cXVE'5O&U)(|?zWt+GyA|ɽf}￲cv*D5;kElsڝiDkqR; $eh1؉ \ @{8]PL>G(Mb#W_B=4sط +;A:,NTw6hJ(ܨVn3CbTo h6A5ڭ,v H f+(;}$=ZͽAwqw+@د=t`PHݘ)R?A| +DJ=x:e8f +vN'cIh4b LDJqxV!O%էS3)tF ڳI͙m?/|l}yTD{P+V*0˚1 岾DuAX/}0.AG'S)ͩdZ}eKX4r2@IrJQRTKO%4Ǔ h]%/ߵ\n8L=6.ІSdd} '*dr S-ԫIJB4DpAd}w _@KJq-IVu)RJ+QJDW,@dD:9YMGĎh%T,hYL  a J~؇(31LFQdlWSQp=@7&svx^0rRbG?qP!PA"u)f_DzգJ1|  AMAP;+A8n #A*@â1P>O\A3g3 rQ.GÆ(%T64bG18}>vÅq^?NЮ:OAphSΡ3[!`}@ x,&Yb!h ` ]400;m  Vǃ>͟;`Y]>f]AF'.F0dB62+_GEj+=qAH CeY6*CI ,-@ !&7\3K @_XYFlGGkn\x(*r$z>2SVfd~Ҹ;ڄD1o`62tlO 5q9zWFF']4 +Xcqףݴ&a6{96?BDPûuq_/Rx_> T!D[ە}Iv%IBJԜH4]P~4(W0R WRciT'-' |,& 4Isz[sSϦOTvԧ?ў;6]J.$% JO-Vb Be֘XBb;_x$kWOW!(R\ +jBy,<,r\r4*= vl,r uGSuh +l9-[﨎CUx!C\ p(@Ɠ`="(X1|!X h{uo7nM닕Ywjn!*_)IwL!p*" +4!0L! rtanqnipRIRdRu iѤb?1L!KL *~n3b*5-h)14(;=)p\o 0ODx2( 'SgA ҹx&.Sx֒r x4t@̗|K\ 2)c/xP`/@#Aw-~l!*ڒ w00x\4b‘p 2sxL:I hFq{P6>9ϓ.6Z"rlu2;\/^tx|.輇9$>F̳Ah #uY=avoya(pzH}p3"CMSq]bA+[`5 g8]fŕ+Z/QoB +Mou13S&*ꤶ8Rh0 VpEf0>Z1L[bwXAVwawaF{buAc~=^a!>2!&T@|gʏ1mi[U qj٢867z3 ^k"B~nMEirnE2dbR&/Y}fŇw;h X 8L[>IU$q^hk3XWxG=Qn| +Z]EZhA^`'j)hgA 4tPM5y&/ ->| +So7n<\_ѻoO={Cj?i'R6'%$(iW0O!{D1!.If)3q/$sI|Z-^.GY1M`$c9`Li;Z/7Jc9ִ]YYkU{ەeǸ1l\%%^k-r&Bq8g"O0Q  &<O&PI7͟Χ T9DCH!6 ݋SbHm{ʂD>ZhB7Z/}\SsҞi Zn S["0wm10ĸcap15D#}8AJP܏D!m8I1Ҭ4g`ƨ%Hн'J `6 T7zkYbFXicG#0o837CҺ7H RN$JWҍ7i!F?X}QZW&#Qڣņv&6L@* +PxNr韞.xd7eIXmD&!?һL4n/MHVzȭ>J[b QB Hr[Sô+Qj[d -AbSD@ĦhC9u}~i4_ylo#{eXsDjR9IFՉ'F{a ۂc4"d>OkћjHdZ)5DmA?Kh + FPaPucR/W!{yPFkX>4kϣOU\B)o*W7jTM"uww{ktHpmj@z'$sd jR-W*ԾJMRԄRXzY,l Maiyz W7>(}HP&6kdbQ Z{UfjRYUUW׻T*Ry_]]V{oW U rT,;T.QB@8rd36715:G'(XiI|/`JAMjzz,WrZ6Lvrt\ Y<JfuZָ+U2X-^"KF>g#yr{/[2n}6 ~>z{ gĞ={==+kN2;(F8hgJ0A7LY`;`&#)P: a6\>c$E(G{1BV݉:$3UݑjOTڰ6%Pq׻V'KמQZwav8!X 6/NƘ X3L$qX1 F(m= ڮ(خ!) j6%HXM{-RU+[ph* +s̀EiUծ_/ӓo|Ws-J5I{s(#k8B +D:FE"խ"EjlȶqrW )Z˛@ +K‚7LRc1P jG~m~rYH% %j;”(;p6$!\aBK»5P!}x5Ll4- +SL,m eHYcD.ֆ4"ޗ_>!Os>$W{8+ _v!浺U(C(DQK, )h2Gl,&__mLHF+ +4SPe4zwq=\}U"@+-Re<h~|Ponh/|j_MV}aZ <Ո^G һ{+:oYT)ոK4.4J*Ӻ+tO]tʝ 4܅rX;_*; +,@G~h@^$( noX7sXrطrXlGٔ` ga8p7AN:6iT-H5b[' X)VaWHx)^fJ }8h/z՚5DC{*|[~;og_櫵$̱2!2(Q!̿+R%v 4@jkn +W̡ +ÝSi " +C+7pqCP/P4lnvvj*,v! ?Jl#Ɇն9VmV[cUheS.7p*3Kqen@Ic!P jmP.P|UJyW,,6G}=\񞬿wʳ97(V QJ[ j o[Bp%XCM*S +~P·x u*GҞ9| tD:,sJ'kJ?m~_.Yuŕ YB5Ă]LmJ҇RқtwH=Bk564vDj6-1 EM++h8#&_c1ݮRM4qgܯȴz.]l^W?-TosThW7` ":,H9RaCeF|%zoIR)yJ]z{ifnUًpi +59$' SvO6M졲G͗t\0f}}kWUmoo +:JB|5JnDRp<${aVa&@ 2 +8>k囇$7^nz\m'⦑=}bϣů:kmcn)P(Pqww7w7B !F<Irߵ>@K{W>#ɜ>g>J{efEV_yͶCOi3?\`߹[6 U'DQjmOktjv4NwBtR8yJM:O*b(t;rJ| @q':@Twe󿺙We?# SwLktecwU8y;E{%{%eG~فqفyٞyɞqю%; - J +V 3.xy8kA9f6wl5V ۭgB"*WJ)hk)S=#4%Ǒ/%Ke+ƩW+VKKVV 2,-IbÎ$fN>gN>kF9kF}S2 jBP96zRIj'TUƎ8220r?P -sDq0 ?xXn"?tD~e+\kVz!TT޿WWdÏ{χ_2R1H} ˁCH;,Ld1hQ l[h%xaY!C2KhZdw_n+U{P٘?!▰ȪO +^]OtcV;2t9)\ò=ezt/n!RJ$;HtG0U;?&2{Hw{Z.ܶ׏Θ5f7qTIJ/c JǕơI ev1|Z©òÇKAj> ;zPq搤 c+{?ݷbgՇ^ "CGd##GFM2們C0pPf!ɡCG$1HF Teu<=aU["}עT/T;"{ʾGRCR}HQ8p/7]A?Qb Am)B(/*xV !12eAOTf=J[rV <|zdQ?y;sR6ILK +Z'?$=G"E(hEЕFQdt)(AY?E"N8I'IҋBה!$sIjiY/[S|_p͟0M8viȊW< 5ZjB2}@D+s-5g9gAmiF9 +#kCy:2JҺjjϘEmzOGTВZy/wEܰ'yld!fjE6 !sjHDVihYDZjߔߤZfФa>b1~"1)M} |^ GHQZQ/xV7p.m-ebԽ /==xMW)y|Fս_F[4e9{tlZp=  zھZ>SZS|I{w'԰?D9%=ƕ'0&1&e]_JJcjw|Fq=E==xJ *W"Li9͂\2N sh{wfzܘQܐ^TV &FWb/1ui˧ڴة.WT"j6RogaD5/m"e,i,awSﺮu=ヲ]/^U]~|c}oJ*hY97v5)[6nE*i+ױ ӱB/k~_4D8a-[77t沶2W0m߫:|C{Y状^r&^*8/]@CPCwSh[.u}5|AM]:~״|h\|sIU+AoY|Ĕ)=|+޷e W7]a-k|ܘ^\VTVXoBDP׭Yv}qwߴ}-?߲mnܾk6Xعf.`k6섖O>ɧ|ez`+ƖO>@n~eݧ[}m-b h\uXq7 ob-[_*V}/?t lm-mܶnnܵnεY'(H|[׮gRH`˚ؖ@OA߼v浟m^ٖwlشc?Hk7~y->۶nöa?Yh/^l]n_|5ps'X 0mn_v굻Vvb7qjxvٸgg.3%ZXo =AWz=UBB"B!_PXPPHPHH`%+Z1* +FYlZE/#, ," UB {V' %$(flomQpCw .(("xW nw=П(,(GH _#(z-c"X}`'>y_P 4$ڿ JHh7~sa͇TPrHy!͇P +J,lݠ,2[~Pʟ +ltˏjJ;~|?|{۶aߵMhȃ)Wد_|g[+nC([^ ٴʛmٯmv?*A|[/)m (nޫMm+ l߼OPm'[@C5Oi^7YBK~+K0j\sN/^qw} 7lnްa۞k6׬\=Mu[ \EX\[umY 6ݗm ްnj<-#B"~~S&X^hwue˄K΋pWW ],1Zv_!tN2"{^ K# 8OL@agEY3b&:._4hhzA -E.^2lޠa^0j[7l3l59'_,qtlҶWۤ2jZ.*nOEEt>yZgɳWтs:.k³I)d]*>΃> nTSKKKlmA1P&cGXƳT\L7BM +DqZQlL|;׼tȟ BDPx>f ֩auD60F.hGkBHNnQZK- irgTaQY&V4*2JLE]ɇL6ƒ-3龕 '_S:*>4Eo½9 +2ZYEYsIc {=w|.d-gVuBF_w7~ ATvd6-5o^jwYLB"'q蔳Z14GQfiD15hmakEq(z8[= Z$T[ݼCXJL"3T躡L,Y2չ]O#'{PHO~AAaAAA" #48?BXpH8A!A>^^NN. + +~?N:cie{ 0_)H ]tÏ;*Hx'_DA~#p{A@|C8;|Qr;;[(١7+YBS|೗VdA +8KcYf ,\*2zs1,,hZiI3x4DZ)r'}7DžE>͍FTדT6H(fK7Od@6M  GL86y0`1C7[`!CӎDSu)vB+A hQCjj!:A/i@yWf1釓#Hz)Ftx~,]!M'cFЊKPF3ujE Fj5B +u5E5DV )dUf S>C-DӍx1qy_8jժv?V1xꡳd4@'VcAqv[>THADD @B@=gkގA F/+!?ljmQl9H oݒ AG )- A :bie( =<G҇ꤼw bwxyߋeAV A3j\^г_O2re/~^ټ{)iʹbg9@!k˵ VY,,e&@:§sITE2@d{?}UQueeЭVi 4u:U:2E,pӊ9Hf1OB@`f,Ӹ cz3>Т;>^8K$m[^ҽh)kL>OBx'mgq̀GS `2,CQ40aA1 eYL*7G?ܼMb~$5g3 ''Y\yte4nn0aDz,bY(I"hfDF @(P$M/JӹOAhS5ht`z(q W7O,}o }k +wjhvnЕ+Agϝwtv  C}B||^GA}+H??08A:u +?Nz->$ W,)A ?e!H_WBA>| JAB+)km|6D0 0;T%Vu ͼfx{t{tgdwdgtEnyK\NuLFmLJ>bn!U+~W +xiOd.>ql!I[r)`9xN ?\ʱpޱ8p9]-z.S]6kͱdrl284$( Hf'% O ⠰{j}`#i +éRӣ_j)biCbfrv9Q\ u,U&-3Q;v*mƆ),X#eȴ*n 6D14YޝAԏmsy?G5Aӯk~~seڤ,S)LTu6kƳN]kµJF'Y&q IB"'MHfD6>gYaBs{;23L +J{o~> P)onmojn02  +^FEMiEWp{pS{}[_]k_s+_SnӌlRە]Y^V[ab[G(,K|Z. Χeu]껪zBmx[AWSP(~jXC,GW 4U5V6U,Q v4+×ڹƦ>+}=n{g]HP?)| rmn܋hZ]deCPhGk'w}Ş㦻O㿾&fNLH)mxR&='5O뻪[z:[[< ȏ>Ǎ v׷+ʆ^f>?ug=Ok{rK[Bcʽxݯ\i UWQrvUiUEz~C/%+lꁏ}w7nڢM /J-/\)ntlzD8ЃnN5W$e=J40C>K&lf@>d!UQ?5?I]F4~q+a;r + +_9\sON00.w*a`8"xN/}W}IdE,[C<˘_'e 430c"kȵ@`E<<d +GS #z4wxk=< + +AOЖL"IF{64W֛^4$)2N-P^)=Mb,DxN="?Xm}N-\muou:DàCIitSa[416CqXvAs[,5IfM&qJ8+Q:umcO+z*zJ&Wx[Npo1w0wmշi57L+j{>H~'C`Oj"ȴI*4S@@`'U5ZfI"s ^,?Fh}㴞Ԏbmgݙ%m*KJKܛ];\Zm k j-*[~$xozgxAMdϻի[fȌ)kp=2btaRlmPγLp_]myߛOǯj$VchwiA-7}."c3J˛;z4s=sͽĮ eD$EAXLqj>1#u ;Ab {@oƒ'yYm)EAEEwJ=]M]L5puRժNU9s ] ]PߢTM뚫m$ MSI G ߃άƥ%$e_LwNu N4V$&dŧW;}u29_1o 3wl9>jE}3cs1שx޹xyEpk0G8!GC>pc;qs]& iYO&q \ x y%ԋa%]x! 1 ZaK`KbC. `0Is@X2v"`AO7BBXe*2AH(fq,Wzw +Չ`?B +l!k6i̲L` $`4U*&jaY"g1 IL$PѡNS+u˥g/* mb |F0C*uZ*旐_,g1 D:&v Dw؁tY + (Dpv DI}h~YmkAЖhmhi[{$H+߳t>O4`V}mvvo-7RCʶ2_χh-C j0l > :g 2{D/r*o3OF#FtW)?S.R,TuMJUj.WJX[ !2 ۇHI* V%J/-Ah6w䗎DB]aIr ĉTye)Hq vDSx,~zǨ/樓$$/1A6LoAZD7&ޔxW'#:mkvǻVmڢ/`.K_d{_֡mGCҲKA}[RU|A 5D|CCAbctG>!w;L rJ%rJKo?T{UrUKrU* A+;"tj :I) Ho "D[|DxD0ܜjQXU\([w#A야l{`ipE?FX^)gWw̻="\K \Rs Q@(XLqG8C <" Ig@g3g=`Ʋr-2w~}RP _^?cPi~3iD0萀xr9 =Yp)D.C‚}!o1[|H el)i 3a@B4qS+)&l`~4\\O^y-8rm29֙\ "`ɳ+>lEdpĢ LcFT0F U#E5ܳ_L@HJ {(Kӊź[*F?{q΅g Ⴧ2mAHbc(&4hGj : @e".~F-SqCFUMZ+</])vx)*Qz1.JHi4XV ~G K4' AsA :ARuTd?f/yV<-QN Y#ހwAZ2X[?'AK@b|AT=O W/ww/v}Px6S}#v~{0|AqC`@b2R Pk;Ͷa UFJF%Jn?;NviS5g$ϋ\,S_U]ڶdι$tk;gkQ bhr#=݃C3#c Uqi5q)FN ?+qɢ5wɂa G#ncoقӗwtG"๕λ=w/??ac!]KRs)w)Geϥ]?fxdŲdl3|GXpE3x0<0/E;Ob:dy\yy,.CMւmفy@efbd,fK\X),d.nnK1 RQ%9M|Q@uΝADr:At;I,:nFuȤg2mѬ>Oe8Te*:ZɎ56^Jfz L#E,!4jI6$"b݂x@o1Zr5mnvS"`0i,j'l3p&F FmXCGVU]}̒ ckX*Oyh:'_{N\Y駢@Y*Qg'%H_|DZ&1@n>RO&%4W)Ag$!r~Rm9&=^C/+08o:ᖾBAum!vwWo3a,V"; v~M6 n3ıHd;ݫsK{ZY6 RX1CoѵB $ޙGCz-bQ̳3RO vI$IT^ dU:E_CݛvUwt` :2K@|; AdXD4:H=g-ɹuY\{/Y4澼WR3D3|Ĵ +x %/JQj{قyg;ϸw<~d1x<^w+r\ +K>%va;f30bgLBwX澹;CϾ&_a,XƛA.! % ^#;r,xXұ`ޱ V*wQ1xk q!pf92HLTM*aD4x0?;Mݟ&IRdz>Yhx\2vHҹ4e.o}-̀DC`+ |<Da@bI5$ ay '@|A?y)~6#݆pݗk|گ e~ٚZi.GonUl7d.j;bw?mB}h ?1 P`oءw>@,t콬RsBt 3gkDe柖z"&ӫ7+WK6[M萉HA|ƨvIgH W.YA K!XWī%U,k0A,Kj+ b}JAP_ wb 5,x\jove[v`WFhWcn'[l#2ڣjNP"[-^8akkuPmCAP\àʲ`$3~<8fV='d+TJQbQٜg.J>zͪkR5 +Zv5Ymk#tb@t;j:fjgUA$T`k{֒[(arm{ ByKO JTY_~ .܊\J^. + ½lޣفZK-< 2H`0]Y.lUvtC]&qSL-P,oq1}ky_ɣ._nÿDhvC5bj[1J.}Z>vh@>]_28g6@|R7ԋ^骓ug/IV]zvNdiʳđThV +b>@h:L_foR$A6\ 5qNU ؁нb}7ToE2aK&9Dy\jkz|n!;gV頬m@\];] LnݽM6;L-wj&5a2 1At%A"D&AR;쩞u qR'jN7\"U~^sRū$AīW(U;ܩzܾ535Pnjnik=2ԣ3=#Ď6DLZmLr:!$>M.9re%ul$ l,>~ bd%8M4AdaQMqQ (].LD9ʳL7OGr%=YS;W y.Y\;DPL y/AyvUrb/ +Ru[]_:X>Z>RPy۝@`8e;B6H{eŖ65- 蛠??L"ݴ"AxtKl}[ii-RzYVTNTZLrR:JD3J"-  ^ +ҀĦeAonA`v-ۡs҇q~NMJudN+25o)[.UsA`͜1AXdۂX@Is?ヸ,RU\8'9Qa~A!I}o +X_{n߆`vݽHvĝ~Qym(3s+A&Sh) 3^+ۢݠ[e.SBLxYɪ%(+T9{-8fjڠS6[>S>UQTޑQܐ_ͷ32S=3C}Sm%5Iy1iqFYLBݾ`%{^ʓ(IAb.vy­rGcP=hޣx޽Vq-`3\P3]. l <$nKƓ.JsN-dk *2xn e +>C>`ϳ_<p,`(@r"WDpcͱll&&1pȤۦѭŲBRn[Nwo3WlgTh\eru؁eŰΤ[gѐ#rXh^ q@dyM5 %TU22BHbzlu_-!޳)nX |pM"CiaZ NdšY(ItpDOC.>&8*y tx B)7r%;@;Ʒ=Ia7eV5?$P;Fi#g- + ݽX`6]{1]wsW^M[c?Aj#c71c zƩ| |^P[Q1֮ƻzv䴕T z;8B϶c:3 ِ>b2K^peqfPS AK['p 8f謔;4{vV5nA٘#@6֙L,&hأp߲kM,zj젒ƴIcؤmM$S,)8i,C/?+4sÎh4SBXD:)8wF?s@v +"Hf҇46wAS2N8*>bM#i? ^ V}ctg ˫Lu#}rBj{';`` ޜY\Dm IoN/-j}:H.,sS)2gg*oi[8$4~k4{(.1 ]ïW0r.mW iW[1҃ږAgvè{"iS]Q/w ޣ' nO9`aPF!wLv4t; ӟ +t-}ЙOdw>(OKk(h/=[0]mZSvY3daDKjۖ|OeLEtedu+b_D0<3252"G{EyߠlԔn5쳛n%%E +t{ I* X(݂S23 {=3 {0p$:{`ICwqMOiu[*ރhV ~1a f ֆY@D@<o85y3>K)^ȹh022RƴNZQʈF]QB8jO$b!j]o }IX(}0PTb*iš%y(L$MU=ˉȢ ++ UrG"q(EFHHSNyWMu%;_ǧf 1U]|ǔ +VW+j.0Q)A'BR,ˣ,RB 8~Βe(Wۼ$*@*K I¤ +\zJWv+]=ˀ w‡`»L].)IEk1WaqcLMy:N_V["=ٕt/8Լ't.9-]%yQ=N/}ck 㸇WEWK +{.=xebphT4r| iha-{ڶiְKGDՀ , z Fg*: `[`щkSv#ۋi(B;D@"9V=pM_b@73+bKw*, +ܖiez8-{· +^GE G .  _1tF~}~ޑ+¡kDz~Azuw >:X!sxwDͻzҧz +[3W;WطfƧzƷq@'vzN~aAU)@>kQADZ,2VTWɼ"&WfD ȸqQ %K_5:ʕFvj/"#Pı(ԫ+W8*FxUd}^*(RA >Q_¯R_Wʁk!WflDJJړcHh薤#`RT:բJ:tGVvQGn\[NK9l,]2쏞:;|7bq=)o/P[6*ۻuOa F  Y@ܟh3L/Fn3@,qm6  ԾA#Ie{{"ٳka&Uwū/?;|F ^CtLW iz'K9{) Z®Ks* fp !ˆA&E +-{~0G@~[2ǗGСsP9(j MXЃJwm(o.=[\͏~֥'v&8N?+9%a-peS#Zg[IbH-Ә"xFf=p[ זpf*dҹD٩D E+ P5[>yg9!'>e +P J9` _%~2Rֵa-R3X]H  5O:\ fY:ee-g #wj8.FcY^u"'volC +p> SKRЁ];Xmmv6xL퓀U<d}ts(ӫ} H r*@5bpXijvOuI}*@ob[(yi#X) R+VBZ6Nq{4F Q|&=rA#$ tfdIxVu6Ӳ5K~|&ݾ G]ďw&G*< nLG]M @ t'A] A8t$A@D6bQu|os( O]8W 6 +㬲x ?A fӁL.L7NkP+}Ih@ӸD_("\L+{m‹Et"Q#9ssFP)!ޟ"C@4,(:}d_6T#8 =ǕI#e҈6 Ƀk~URC"53SBaUb0p*D@)9qYuTgr/02 + +.JT- V,?RKk[d> ROw_{WtPi.  KZa]h}Km_PXe} +B￈)`у70@$b@L3kч,ADG#|ٕR +UsDxWe%hŚ%l(׀xO9PdW8xqp1>$9;f/ H@Ybz@\A@D`wKVxb@|UJtץ \j@+:pQ2Bg 17.y|@ɥ@0M @?Nmֽ bkO^ZŽa1}p}`kH8t䍷֘[$78ţ @t̙ +Gn>ln**>[v-]!S +IzX HgLx:w:&l%EMgfbĞ?8L6%"tq#Υ +\ac0Q:DUy:MԀ~嬲Ѓp"ȼV@щ).;I +*&dDd*3=;?; fex"H dASry̭Ή$-P?S H/Pw2NXT9;4qQ&Y i <CLr"]< 5?E֩CLs + +?rSʛjgqB:)|*8JO̯JP hPCjkd(RQ띖讷Ï{ËkV~y@AdUKo0w(, n! KNxY@= 憘CvqƤ)D֯bĂ"}XgIU5UتČQ\/Zi?W7)pN/a'y`9P3: <#Ԁ iat鸳MNnNN'SM$GqpݴQC|T?!#ּ7UNϡJ*_Ċ)aI53IX:1BaMSyT2dɸӓg@SSOq*V 6ݗJEv +f%`I묦{|fʗL>S\=%]iM:$EH"t* ,n"OÁ +8³T.8LcL]A{e\lk/>Ijb2 >NAj~7O#J(xa8c +Ws!yh-r#EœJRk.ٟDD 2iǎDOJ )9Yi- .NԴu &wu9.Ygd/~Iޜcgn_,X:9L]nC Rà&s5na g'x&/Kd`$W2s@,]PIUAqux)n<@t\TB>eTe/-+VbbjNBLq MZ@KKTQ(qtq,g^kc_$햽盆 2*:F;G$< D*@`Հ !n 1ĕ[ԥVR0 iKP[.Mty: }Hoq)_H;C7 ۋ]^NWw\;^7c-ӋVao* ҃L uR::sj* pa*mPTrdJ(|tJT٩SS'gMTM[HMR=vW[> oI + (YH ^՜o+\ +ٌe2e+*\|apkA@̻_^ pN;^7I/^osd==_S\5}YT@ꫪ$5;9NO> ]zO=<'Ggi1 W"NWg+_s01g֢tP"橀ԧ]d@DĦ,[U$Dq 2E4t5Ks' z.ڇkkq/|ƍ˿ =x{?[HR5 uu,_$Ib}8dqEibT < 00>(<;O|$Y {oĥNG07>سչ7f:8B'ΛUgN`1pTIU1ނuMq[DxaXTSD`iOb-,dYeYEEiei%8G͘Qx`$]dx3L%zђyHv-jgԹ *>p4&+1PKmHE ed2IӌnVD8pX|^[B/ɤ'J=N{҂,Uh Nj& h\ko Ag9Π$,LBU( jx:Th<4 ej՘w.yonl3DbaO(7 CYGoZIX_ir]#} \e| ]4*@PF/{{GURٓF:\iKgS zb.QqbdA45 qF`$4=hwwT\VUJ󠠭OA1׵Rx @u. +EAPdHJzp%Ap!A=g48/novym'k~a~bU Ò!Id7iUBg/$ݙyPJ齛׽ cO`|XºV! +| , + LT&$Jo79*BG7>|1f&.QI6F +022qRU +d' +׀hH'J:W$S$ŻzIEHܿ7ER\2 7 f36aE7~BA5BR;i-1T?]XZJ*Fc,EѤ @@.\L eq90kA'RF1?j)6$;DXB%YiǑ|z~FAРx:Ex Q[>&1b0@jfwc{0jG.}m4 r82 DA,e#w9]q;`!Zq.G.8P.8Dq@PMU1R2[86!iQpwxoD6WHTI#uao1{㎥nϿt@gw]Y@IDM[Oץ 4 @D<+abVA;L bo4tKEP_"t 'ge" d Ͻ֤̕#_l+$ZHZ-[Ϫ5Uz|pA2%!>-E@LHc+W8$9^JCV +5*o~Se|}wJ[O|/r~/Hhũ#q+8@ekt6Kt*wErLϝA,:<ðC*:LhS"}f< @Ƈ[x@ s'=' {7tx::jA47@L j:܄3M&AʤӘlV4p~2ϣ2R||`&m~6wE;o؝RR*p?>P# X '}:|BW5LौR% +gg; ZQ&.ބZcQ wYe1i,60yOi"+(d@ ^$ t \T#ӨmB\x=p͜^>WjH& #D$;}&69Lluu-lCd˝ R 4t@PArR$@ra[IeB ˠT7ٺ3 T{|qWzo:Ͽ,,m.^ wKUjha<&T ,5( !nĈkX %xȀC\{S K0o5h;ܯ<^+OZl|8^g5>dU_u­am1,n1((Ʀ}qTdEmi#]t#O?3 C +A, ƤY9eo.oZ7>0\;V?m+E@LzTMc!g>&:z h=Mtf:ߦb9 6֎褳qVt@cY!w-;v҃YYmSVvԫHr0 بmQ 15OSaƿ/ %&BTD4Td$!"Nie\f@R|q+ +>mrfO(3%$.5@0dԀlṠ 7e0?{Ոn$th0X%b20ٌus ڗ 6 -e{fg6>XCs_{[:s.TKͳ VgqT_f+!Jx p ΠRidyho^p[*I= MۂJZm*i0;9'ZfwF K:,]d@g㿋=5rDe zD+o9 Xx^_lT( ^׉sK%-Mi?=~ot͓yaxA4Ps gʍaIETnq"zĜD3KNm@L Tz h6w7\ PjS %t?q1,fwucskIXiÒ=_ٝClevq cwP>(|"]ݗ/]Oߤ!}(_C@آ( +mi䲐ׅˢ% ŧ\Dt籦!q@ AU6 Is Th>6[1>t^sH9C `{d@pp;Zf3^9X?H&~$th2:f脳I`IsӤTi*e*VaݫRs*Q8k]Q( :j_uuVaW^ Tb4ie o*4 BNm:%t+B{ӽDtC9qDdHMc=f'Inq}! 4I`T %Uyk2g@)CA$1 dfpE炏ݷ Y&Τ3$!OxWv$6ɔE3_[_{O r8p:s)2CBQ$JJMpLxLH&~W|p^ĸNy=+:8$'mu} + ^۱ȘY@ܑ<:Pgon=geG,_'X^lݒ:%3ળCfODW_y!d( #e#ꀒ:٤$.S5 V p_~/MSԿS,/w S㒨sD5,zKt_\u Hx=\α4TqJsl2 ܯ>Y_Zr[w.+7?L wUa:?, h+/iq1z_W龫r9xY|LX:};9w> 6 4)i?h@_@^Ǻ]" V_4&F6褪!:+BU"ƝVah:,<=:1Rx\Jqp, +I}>T?!+*֋q˗@@|Dw6}i}t!1O&ykɬ kYa'&#S͓8\^O8^XE+0EZ tse rAd-7gvP;=o&iG@8V.jUR@-<9> dy7BW..yI] <)Vt ~1KtV;L;Gb0S:b5tx9 Y@I=he\17J_Dh߽.\ +rI@t5ty ^߭\1{,Y0J68pU+O}^l2+5ïl M0mp!@0< uuW._>ɣǡ0Psi{ںp @Z481 x\s}< o[\Y\6AxAy@0c8D. lTx3ikjU!$I2X |@p3oˌ#Oà{\,w(P"yB/laqax0yE6MW7i]1|| a9-p@U>/Sրs#p<_+q5 +p|8kU ˕Zg6YpE:TϑSBDEzHv|,^"xQ2uTS"gGv鬜\;@B.k̯OԳXV(uɗ +KfAY-RELq7@|.8W⃉@xV +|[ep7L@q +1UJAUdA,K>#eL*.ŋʼn'J_ x@ + "THJ1|g4hс\A`چr6}kq @\~UǎYu/5Z;n_˯!=nObHaA~, AKsx镗\>tu@jЁD҅@q,6>kK=5N0 Oǀaeq 8.]Zqهۊwvϭi8ycn/]Ԍ%//_WQ!YZXv=~ѝU'cg.>:|##5'+{@tT +\YA19 <4wG9 + q'&n%"t߬bQ2(=lS(p[\pDf/=,ls +%±@i$B@lraz.iU>+^1,MRSPV\PGkH7A bY1λRqTZ*s*JmrXL29fK]t_"?;{ +{clv.]s+<Desw ?4@Vτ)%{)1e L7NG4D6֨~R+k o 'Q(uWx#z iP+nȽ+SJA.Ζ[eMZgN( +80eBi(d0]o=XÌ;ʮ˻|*Zi#)L?v+㰡 btACp,taAJ,*ހj.»̹ɜKebUkHc-RM08R$1އs]0 @2/r'J~fR7O*С?\$@.xJ^,s=:糂<1ͤ- I,6Ob,R,8!6vHuo|(>/6\g:K{uͷ4;}rFamXmZ7T (jO$1M¯zGa c|:E#7~k@q[yWq`{9I#}>kC[f)AVrTm%dOO%,  ȫ\Qʸcs!˦S)DIxo HbO'3VYH=E[\E_ZrYĉL*Vw%K_]3&_gARvR#rb~s\-@-R|oK݊#K">I$)pha Lh*4JbR"@6׉M^DB2bTYX37dZ}{/Z~G~ol܆ {H92 f> +e1WQN?rA ڀ ZSm A^4PB(7wBˇ׬Fuo l !Cf(GTbPl(xu~$kDtn3>;" ;,]㨳Iw˲x;ronxA]ckeAQ;fThxrtoh{a>/SҢJ8Pk睤_СSAxFO_ 8@ܟ֊|X5]J冃k81emrpBu;}8Lpt0< 1w~5{L]%{ssLpD˓!2%iq{cӋϓ Ku}S5z1?$V4uI|9q-}  cA,DtЖI9. b/Vi։87A0~v. Ȱ>%? !&CbZ_čQX7i[>4\󟈆iD~4J +<>"l+^Ξ2r2ɓS]92K T9e6Vٜe@?]b*5KL +8J97lox;.'96O9QSk80%270D`~ fd9P$w*Ĺy`Teٲp<%MY8qeDdqE3SeF6hB@H$5Vt/VqGd.8g(#X|XTȋPCeh3)4EQ ͤeЖhq(\*   +m9{!;籯.>wk0 Uə|uy~wϿ1ˣε"y#̯BSTϪ^b!Of+ɑ̒a+]?Uk"Md&,Q /RQ:cXnlC@lr|iK}-?e6~`:&7OxXj gƞb};m͕ER69u6mX3I2z_$2H(1B)RǼ)Btnߺ}#fsˉ/lc&fz&vW1c"}bW@"eg#[JU*04U +!D<6Mc((Q TbBz@. 8YctQķNHM@@ Y C%ΡC5MnDzUnK`s_jğ"*+ϵۥ41:nv,F@ @h.x?5Դ\|V@A4,<@X]V>lVW(4T5~\m뵧/qx:t! ģ88FrNdT4TX㎡Ϋǝ] t ܖrYNop]y2Ԝp½n-4 2h@61/10lD "`V{X=ɶ[Y bnSDo:D@TkBW9\ЏQ&2R2G`~HpE8c>_aUאHG:&+Le)i +k,ߛdzױii# +8@[of+j3@a6m%ʀJp{_~0 60́? +x/ -ʒȐO fM43c­iQxMno_؈r\t`CIuCH7q:  d3dJ,yePH8E&Oǀ@Fa8JF$KɃi4ׂ/m>?0oq艽< t_]{OئQ^pN1h$ Zd!$$DD1/$Q5)5 $2HLqeti`F/ wlwX6C鐭HLlq(95PzɮAv} *$o6Ywj /]è1G:F\5%L 2\>Nq~VpqhFʆ07-?a3BªDoW ftkTz7W/ͥ8Wbū{c<  f5kh^Sne_s[ ?Ut|#׿umVmesו};zOR$5 XrGbtb".sm1 i>0 j@Z3+7 +vShhu&H=Gx Γ# vr<,[:;Ł`hH%$) +{{Y$Q 6=D<=M(bO@ ;7Nc&½J]!^E1AeEd1٬] O,&Plk-'3ODI t/8Vf쉘0ZK]̸Od%_L| Enr!P9B[e;U:e*E*?6O͓!v_"cb(Z? 配'| wG_Zb_6cfQ?S)|jkGۼMNJDfx@Xzd-E4E bl zA'_N??4ۤqvro۶ Xsdvd衚<wlyFHS}=W&pY^t@^T1IBQMAZtP]Οo/qPSP- !~: tT0",15"l齑U_ej?~s_^][6q~fO݋Oj189aX C*@գ6R+΄ggp [\ʘ 1ކsTtx&@o`߿r*bw1Ygs'?_"<ǎG&;-^f1ɪ<ݥ|ɣxrwdpwd2v+blAM&[f-F^T2C42DfocO1썓Dz@(ɞqB ֭hƽ<akWbWBdOHaYH&:DOad_c.aba"iJ/BAQz!]A?< @8V:(h8O Ԁx_ Tʭ610!?yC<8Xiԯ#EF"u&Z@@@g>c;4Fl9ds +si!۶x + 4t_2d^At`zǥku\? x߬pߌp x ˌOOKȊI*+hi?wIzIuuLR *6Q}-Z3Nevmaa ZZtܳpY2ҹoh1F^s3j[Gb*S׊+xLU[2D:Y1E< (MX X#s lm]2U֠+]Ή>^PϔPP00x;9 EE.?q F`ѩs!B@]ϣĄjtxF@p@,lvVuzlQ~|iNSe p>bRCL/# z1`{{Obvg%ɎG.ѨxojYG3-{5jR٢\B֩nPq @cۍ %bA?^53Dy>;xs $28wL4_/%?"КԼs{,{ 2i֢c]#ǺbѶ12ha@<6^ ^=/TPMx(C–k1雂6-hdUY? ^ZN[v/no'ΪSw>VM_{{wEWP $#RY0"wwXm7Jkz +: +*+Yȓ&];L;~gN烎ȯ,i|_DoD% 8a:fR?R3@fIgXpeUaMl2@AE:@&HfYd,XLҬE2Y^ ŽdbW|;$1a'uUIjϒ)p{jO8&[n~M` qp A4#2@ +8ɴ:mDsQqQ\?b-&~JI,t a HЋ أ%jƮTnaN&~?gvAbr8̞y9p^=CmEbbS ?'^wJ@F%6|-o{m,撦ޒ "5F4!aA|{ Q;m|b ܂l؜ [pܜo.Po)776(7)wC*ñgÎg'bJP!V1 "}JmxIJ؎<|g!WD~E΃{s𦛊}Ӎ׀^Pf+|2O +AD+CⓁ" L+ +CT񡨓Ce>j}ax&X(03ǵ-|giFLΝən$b"hμ(ӅaǥqӜsΕ|D`x ixp|5T1Gғqo56;%G폜|+ /3'Jm7֨;["o +-oS5k57jmS"A5bL9EAtԳ["oo5awwȻn.ѧrǾw~iyo+{EǞݭjUV7>ZA02Q`lVܪjKYʢ9˂8ssF΋4żw懛͎̍,BS. 7_F0gwAusNs̴I?]͏rͯ(An'/Ԇn #;^~6l~]9{g6Ux)ֈۛy}Bq7,ǂ' ie \/Y:i#n}? +,QqAA]G"ʌMA@LN:_)W +9a5V4Ѣ(< ;:=sCa'-y`m&_~A6 ئ"]APD*AAWLBLW$Vo+ ;R,1+Awѐ<߂}2ǵ>DևTQ0<Ŕcxhg:Bngj{ Y֠1|[G޴)c`AqGz{ 蹦my-F`dp~L~Lpދ9ax]q&d".5]n(|qB+gAwQ0%aGrD~Β Kϳͺpk{ϻM}A8 "U_8e6|xw|Yi)tS;Ƕl{A|Qi7Afӻ 8+{3^c>$|҇W/e  E'`? b +O눖oN6MK2ihEG8aP٫737tcGCWNC.6..PWa_ чц~ńE|<W#${=%WU}=Ґ[ivKG|,y悸 ` L. 7_3͙YY\. 6FQ&b,0]2qYL?.*B1Dc#Aރ&fAA4wB1 > 7܃_p]kJK'VOـU`xd#T=AAn@1:D$;->ą m4 \lHXdAy Q٦y DO#d BԴHG#Wqis깬?.g8fpD4\΂a\%!fFB41;nwqeDZz6u ykZUB\Ib#I^j*JҶ V#Lfѡc[nxUY>fߣg[-ɧPnO{8zT@I7FC4q ^_F"'A#0ۇA\b23vΡ%Q^퇩_Əd^Bl-B86 -BؒF H|'-| QΦ"ͶCe5[Kh"،#(o \#wIQ;%;hFS_pX5ܶKZ&>/ mc0$lhQ?;)P훇y稼1=C2OM{eQ@ГK +4f^$ Bz]Ӱ +8X%L:jܛUq蚼Obs +z[P9G): '+C)c^q}мx%<'P,fs)$=#L{:FQ,ns)Vb![},Pel{bS Vpͧͳ݀2]9fc&D!J$+ٯܔPW@{5epc[=UJ{ɸXvM!!dx^{5>>{5il[품9'@oLKzCʑ' ֯ߘWRRq ȵ; ږ~ +: h`dS/Y!VY|=kzVufVmŧ6^O#;Nb8Tm +xY)&eUS hS7+`V3{3mUcպ6=j"Ns5̃7h?'gף}yn?nw?mU*`K!Jbf),3FaRTT +PelM?*w$_cK.uH=VJg!N!Q1YGa{-E,s-ِ ^/^']/[X1VtVG+b%@S<>^!^>smoR-}t(d=!k vzk4{Z~f#{H>O z 3p6YuVh$ |7o{\ R|u7qԅX]Yz)B&-5:*<U7|ITF,uu;eI:⏵[dZdOXuOŗĨ#'!pxPU)0 +`iUֶ)k_ %ǞoΣ{5 o#$-ݫmk==QaAqIYK'UK#' ?j|;34Ƙ7M༳`fȚ qwtlLS'uTs&m:; Zok!F.N!A在rޭڐ\pU81J(m&Ry(TZ4ggU@+P]ʫ5'#>X3ϛg(0"4"0;;a&|j,3?;'ttyZTt{ޣn4uj;z]NULR>dԩBjZNF[!饐/Qs#uŒ\7ݵwxnQc^m^m^c9>V5V>uVzTrsz񝪾NCCI7P -bPSzJ11ضcgFZ3黄T+#^@]`=ݺ⇮Ez3"-ܠY;gAjduxm^׌ +ZJj1& E05 #T1ij5]ʧmjRsG #LyFNgu (\cQgq TrV@ue!y!ܹlu/1ouʹK?>k?kQT7 DM tPnrL}7χU")R:dS +j;՝rC^.p \pSϭ7P1y{T۹U[QIzZoznUnUkAܿ MggugEA}Թx zA`%;')GYbQOwߔd76?a]t5Oe9C|?6E{f^9lG=S疡uݯqGoKOקujTbItM:'.I(IS6Ze{OJ \Yrg-Y&neƨo*q"LI HG'^z# rȹ#;$j$)I[[ᐨtHP9&` j +UOm> |&9%'7Q8(ST)zNjD  ^aSmcXbvrX`~bl!A`Q*0#K`g Vq;%ש Sm{y?N_$2XSb]Dj]<c,]6Zd=8&ʀ&Rh @h.65,CE ̯o 9-;| 컻VFdO4I|^s/ؽ+ǁ=K@z҉ۗN޾ }?\>z{W/<}C}GUkQЭnz@qC){3&&ӦN hj4/dp3%u]UKk~R7X"n49g$'?˧ݯ⫛;p^\݈.Eu'~<* O_*H 0H5/a%LW2H_7h@/~)"@?A516uFpKIi=t,r\ #2/ٔd,RWB{tBw*15 +l _}bO BF =sZB?tv khWz +B V Rd5P&1BfaF@;to4#&{/5A-TӈZBSP"'O`VZ+UkR_+z%XD#n[ ݃@%5:h~+D?ge{KU=JA%-R?COBMOV U"e ):AU{ uP |lv}`,X{?> +Yځ~NPwݽd +Dy ^^b213FjڰS*o^llH 7ēuq8E1xYZ`CkK9ң81`>]8"iKP<ҒGXpHh9Ur\su6쇟3kiH +:X'SOGcvQJ<]$G"Mc&G(-C!*P*Tm!2[\XXYڽ7~.yڷ;{t>m&Te +Au(f ŭC5 SXr0uq%6DHVJWW)P([ _JRkW$/ +8rti4{3 |(;|gu f +H@#Xt*Dhk5JyFebUQzz((ZJ2S@Gp̧N+Iu͏Ռuy8ShWQ8J0ŒHbF4djF!59@ +QPZz%hX8/36o xT B|j1 Ѩ(ZRa̡8N R#ao@NRP/+.'T)#^ G(L$(9A*&j\j KTDeH ,jbp<0rPf%QAYaZ4,@B+>{ZcW_1E_>2P_?kwthbbNPQ Q<%(0tH9\fL>*#XH4P GT"N_*3_7 I}G9g.vм2}%_T)>,}Ï`a媐2@i T\ *QR*A(Tʝ +|%,C3_#O#O#O#O#O/ *G!O y\8֕ʺI8Aa%xH1xPPU ߅R|?O3O=W6m@tktK&bkl[ؚؒ)ߜ!ۜ!ْ)ْ%ޖ :%r+eQ(Hpt#eAr2=n+" +t2N +5Qk1m`Y03q$ WoWuUBFJ1͠FBe{cER2@JIAD +PoD,eH,PfXɈUa %(i>=136~^@a h,@Ht\ @R 7mRr @JSb9=` (%Ab4!#м ^u + ;O_3SZ햹siS~Ig zWmlI7w 'y̍wt׈# + +琊 GLPK,zD@uKCJ#J}mO( {UD7[N +sj[IG]C+\Bʝ;n*(uU4_S_WWɿѿ(CN%Ρ%-1E{;dh8kI>(,|4 m!4t)D@` m;|#bRhL)R"fS18B0軨nNjP-asqPxT|ԙ>WnUַ:_(5bfP Jh+v|!|@ DE##ﲀ`8_ ͇TRzPp(6j}l)\w\yC1tJ)RbOU ~FFoW^z2aYA€P+TbB:dU3s&14| >gvyKF>Θl朥,Xadռ3,Xl΂s?dޢO.^1Ïg\ބwM!8u+?zƂ?X,d΢s-p歜5w̹+g,+@˦^:>X>W3f9K,,y?ъڷs6g AW:W̜bvo>LfX,X<͸~˧Y,cYf.>gKg,\j`+~rq`x1>aO̬r%{E٫b{$ %ƻG}TKܰg '4XɀD' {ȧφó'N`ƦWy k^!3Hw#+7\Bu U/`/c]|?7`z 7 +QBec'DUh6t<}ܪB"[~Oѽ 5켋29( t (XH@Fx#KD n!+RBI_{PEyI8bjn:i/]|R'nv|=: +HGt+:c@9rD8dG6WtzxP'%E]gkR6`i_y_(k&:ɮ~ S蕷=X:z/0%o7":dRMt9=ywWK;Dm}VŏOշ~M~m7k)kjjΙs~q߅嚘q 38&7xp_b5N015㘢sQifƝ1{cf5"fHDA&]# [49Ý8 ;^jƝ`5 |}Fc4K]xDŽc2N= .׌ e +Ef1Oq7lL%KV,[r|/>_ekhcdm7nv6!m\,]VqYuO̸_ϭVq\mߌVcp9Zq+ut^p]A3ys/H'+upjN=X:+a lvnٰr\q1eEΙOH贴B%ic8F(6ca:,~%՝ i` "6|j_,[)/ϲٟ|D:HkkGkǑda +sDXpBzW t8u#^zϿ.WĈM +7޴3V8OG?XsJ/ 'cj+[ :܏==O}a?;q9|8cO}'z_9޳^{Z^X1=,V F?"ec+<ϼ^sVY2oHA2O,<pcqeq p5eL8ez.X5לe1ϝ`153#Jsh ԫ2C + l MM'^ԘbD,i]* gj–$לJ JDިH԰"QIG?I{;7~P} . *4ڄ6؄֏ˍ6!/i m"UvV::z^Ux=|&:::*YXXVՖU|e`Ӛ]pFg0mڌifN:݉A1IϘ>cY gZ̷=b_3fϱ`=3{}֬y3g`'p͹w fpBٝ[AK#̞xge1a`Isy>9 @,qsYm14%9ۼI% "M#-1TFj5,؟ٿOq~ {3gy͟3gYsϜ7}3M< e3Ӊ;Μp{wڑӝ=gALV'Ac1]yAx kΙ]'[s/R%/{.rEʷC,zӾү 2tҌ Cpe/X~\^߼H"雟/ /-]) +#E_3gU;bpxI])IIKyX) \JahQFI0PCF!x紑gg~I<rTwE诇b ŝ; ŝǞŝşş5pm$%3xv..>և҅ǜiݸw7ltq(]ߌ8Fgsƍ^˗䚘MzZ̼99,6WksXs ^Ǹdf)L_;%/.)7.1g:P;SP^Ԝ + .7D¹B "dOؓmm=^&8,!qO֞}9=g插[yCsEΫ +P9dEDg;z@)߫B3eEW3s\h)CQ!77DONˉM̊d8m15ΔO?K@Pl}yY99@fN!+7w]"g惌;okDS'wJϵA 3COvY˼7gʸ9yEr,|}s8P̛`i<2nqwOO{v߿(|њ{>͇?333y_>2Spoy{o5OW__C>ȿ} >~ >kF"^a8p4ksR.듿զ\Ѥ_=׬;?]']}i8}7:\Jb@r5,sahoS %_J>?tN>K$\$w_.h];)%)9uOiRRRRSSҀ_n$%-CjڞXH'%%&%$~9tz~Y}WCc`G({(M_, ê`AC D=~]1p^{\Q+uE~!JYzDVQA h6m^! _TTsqǍ[B9 O}?w;uu6vEHd{oЁFbAc@wV`KPo-]ꆞ{Ooi|..15h6ąx G (U])t +c.~ڿ]ga/c]uCA/)P@~Wnava!#eC~e, ʵοLvvhn/(뢾bbQ%U5 g)wuN[K =BžK;١\w;1%ZXtʴhp A:@+D_Dr; ̎f{ ȥB|O/k>xmoK *Ŷ[ +<Gnͧ2jviwA6; +~,;fzG#BQh,n|[.5B?|K69 )͒m˗*C*5w ݒ܂¢¢E"#EEEu +ác/<[f |aQЬu"L'UaL3f`hC +WѺW`tB +z|`-|QbzzXkE#' 0S-yC+4RbHA)ːaAR%SR7@o`rF$dCQ@Hd g¤ɳ7um@/ŸNFWC GXa|͐*/(HDB+'9E+5Rj4|bEbj2ߟ4sww+[drP:Zz/L'uB2kY429ap8AT/N0rP@EuKn~e_BJ  i:$BbPz^Bhj)@3i@3R_]8$44-TQ=dcޓ䴃Eh~eW[t5pfXUxCEy*U/ղeڝФ+YGm{QVRhb)ֳh"Y495 [@A 8T}7N%EME H9{8Á`-, dR +ҷge>O'G˹w{f=24d`).pY?^ۛ~UuD/ߒUy竼򔞹*W.杇FG)`Y퓫7f#| fd%*J r;\ca\U)buHx~ר*+.8TvHiY);|U*e`'G-+..)-UC]"]U4e!47ppXEFj_>cSbdvh1HI9} b"j@#P ut } YslJ/j(x=߾9:b畋8 wFaD~FvF;̈́_iBNi E mtИi)2rg)WJ*5'STyM񣟣 +gff}Eؓ ^~:JagSd 28@13%c G2~rzg9gSbarGvZo:m.To+vi5G4;+xmoWth:ҿL> B%+p {8WFvbFSW#sn=H T@``:^m "*vRYx#%*;<ⷀm[` 8TR^|HAAyff=Ý5{NBrjKrj1QA˨>(^#Da! m0QȻdx+d0bOF)p$^?u ѱgӃx[d)$M  у^`_a,hA }3Sh) i;iFJսrF p{?1L2m`MSz Âv. 9.AbB $GUuU!vn@ #olpXD PhIn޶y3bFjĠA 0߀zmHoo{N>S蕑_GL8&Mr}\(Vj o JZ [խX-fQn.us;i(EV/C}[տ ppY4ۡx"N Gc}{{?eJN62˷++CWD&&[me@wI."J./qǞ9;}f(..."njO1a_1EwɻhgpL-uZt?&_rDvJyŞo%C tqk]y=pApQwA{^{R}sC_EFN]i-.+ĀڰcУ`mʙ +}qmqN丣~PFC3^?\N gѧ4'KNbNcNO'tQu-("66&8ʄe +PvR%!FWʉ-ꝇ5ÇP,*;XTz]n.8[((,/@WA@~QRrhnn#c2b~J3$"lQwq@T-]X)BgCLiЭ|ڎ~ov_K(ėjwӦM hR1z9R[떐bKRĸЅ XNS2@Im|jHvR$ѭڶ^ VOD!IMSL hh +zHN, 5^a9 ++d-}Dsk8sSs/&{ɖiVw 6 +$ +! +b9y;v5*(tqI2z l G F?~`YmjCt ӍGC'It2=xsO5Hs_,9i1y>ϛџ3D>E dX6TTK?vq]A-!)96%9qĊ%ߗuzw%%j:6@` ;;0`C~48}{3sf0 /!%oo C|_!nF {.OEa9\1z?wc?$U:Jm1ġƍXO,+uc1dS.tx()pHwD#r l[xmkX5$Cr޺ * 5c,uKYfsNәyƿ'F@lQ9vHt.qDe~'t&`ۑEc \g!mmg1[[NNYN O3Oמ0!'Δ^צKsENs/I OsnWniswwݝok]IWSXyzz}h=Ӈ_u]ݤooljj_a,?yoc^a_9 `hB2H,ā1kQZxQݣyՏ?}z0X =^{FD2{u86?ыdx_}m}FE7GY?ZI!,? p>]@t ,U+UF@E}H5 +nbu\BR:u7vxzbKÞ16k}"lһ`؇܁,h +KCD&*c}e,b5Mz:aLXa@xbV* Σ$lAmoB;L{u۵Ƈv,<`;@̞tyCs,L##җuB +%V9D.R\v/iavr/YknR;M;-۬54j'a"'W!J ZwƗ +n:T2kSZPҾ'~PM͔橦23Uh*{ECSR˝qeNuWbW[c|fGe +ySoL/W^ޛł;10~9{h>Tg?,2ZKu+֘R =?AMl]JM +[),FAl\kD# 7n>m:͇\q "2 @de7ܶ}ObB!4RDKM$kȱbgx ~-<׺#[ fD1䜸+ >4x°yq$<aT'ҌL +Pݷj'4?0raV~Esf=;7vI ѴiZ֜^G|7?gA@zu@? Oy۸Q @̋Vy:2)@'x[Wi4r~FH;»wOg}!nOW|M+C{W^ D>v#|9#O^q *.ŏiֶnM2I'I{d~1Cr5zK$?\MV}qa!S~#Lr#=IN ]KX'Ù4@W8?hg{toɈ! Ek3}S?U{lb՚V8{lgT4%`dFgĢL׈s1.n#Mf>K{Ӧ5۵f(dqg79ت݌'Ҿ۬5F-4ZsψY1$d´aq*:@G'}1k֫oÐ2.6 W'?ncnǟ2Zt.LijZv +_㌯v"+U84UE_/wė9a䄨Kmq%bl1Y`ّg Cyǖq#l/Y?xm⮪@ +"2Y[H.Xm;zYFӿetZ82V&@xEᅝ&F>8TGL-ǀ9Ž,&$C|fjI{qs3;2ĭ9ugg\>[$Fͷ!@J$& !`\!"O>([h6R*X)+Q.#ao?dž5o9c +>ex/^@9}6d!&xEIq\qy~:㑶3 |`hZ,0DÐ@)/BK@I ,@֚!o .uWZz-=#x@cr4F$zܫҦA3`0KlyVӀP6Rߣ#^ +]LڑəWRcs'l[0dwձ+Sɗ/=Oi\pR,kv)UĪ΄JgBSՄR/d5l8asI Ww? 潽;|ǮgO8V21BE1ZYkKs$8/*qLmMi]t-w*] FX8/;e"<1*Ww\e0O4=ditD\l8DdEbbRaKXf)F!1Ŏ"l.q`x)i.:g-JZkD#p+"[/;2lY&cQêݦ-/ ӢO?:xcǫ>^w,A{O7ǧ7(y$/ Fa)Bu@qY \]XqkKqr8q_@. ׋4up'ucnő^x@ + ^< G*OvmDV)#܂o@:`7Ba3M D3ѡIkh(@4;7uDŽVU-ʚRmM:XJi姩W]}z) cJJnHr3f*z* q$TmRAU,XG_sp|ja_߬~pDgږb֝`" Du.4VE +3┦iBDY5Τj'5bupA!J #0o`7I15tMnC[/ 7aMXxx\Fv K~~5 F4z[o ;Qw"ht%?W_}g!SLSU\kl=ʑSF5jSiמ] 0))LdHP;Jv&?SiTX˄b!SlS Kw+|[Y? ?x;&ϙ\lUMy q8xt/NU:cq4)TP$K@eP D|N#WbS⊭"klmG<t̴<bi.ڸj?zN9"D |kD-+jUJH*CA^q- D" +.?6Wrl>" `w`m8` H0o=,7$ ~=[> d^7_|݅e5ŧ߫5ࢁ i1.s'K1b l4Z2@zO凜/?g c_`A$lۆ!oCc/{ GXw𡃖uQ mŁ>ؐa u_ѥ7!Y N$ :1R>ᗓ25vF\@-&Lٖoo {<D MpD#)Ӂhw z0פ h9|@֦@L򚈩cgƶ~/͐F +0蠿שH&n N*[}]pfŗ.n/4iF<Wd &wNe6KlBWkJ}x4eTAS4wę\HlJ[B@#aَMǬKSɖRq+ +W!nE:J.KaИVe# ]1L}gSJ#&ST#s. =H4@Qc+4"(p<>5,þu!qI"fƗ%c +Q91)!1@,bPرZ)ǔ[2.Ę-$ƭOE^`#2,agN[skY>ѽ #@|@ġqЧ6֥]o[reP57?] 777@ %ü+|4> ֗b(\@<:8髍!oD!?o(wnjP_~H.77cG1= r.^:$2 R%ú&m\/n ) t%:F ;HY c/4X ՁqF.d^csg[< Z;4I: t0{J˳7&=vh6.]cA*IL@%K(].7w`1l`EcB(}ҳi)&,e60} yZ)׋/\xYo o _&1OKs$=UGb vP`MhM xu T0:²AĀdNSdݺ/_I@85EOEqUG|xwq!te\w:$R&.J"¦R1͊+iTE\LFfam[Έ ++Ռ뿋 .=:;R " "50JpmCԁ$oͳƠ\t_٨,&%"vֲx_:ִ0ꥁpO.C fnQQzw8|bw͡3q >Z ԢރSL:1"qQD/>dZNuWtU8WrY>R|[Jsug8{33V!cϒ;xbqX>EtCg8*fxr!!@ zƧ<4.@u@4]3Kt:/m +44q&އm) J<@CyMS D )av @t]3PG^KK7 +!tX ԷW) FB*gd\4Ag{M=.'N.8p&q-m٥bEj7]\K%ٿN2~m=M .! {R3y.8]i%!ڞTC2tQLKEY cOD|uKZ/~+ӷ?C vQy.2S-ځDKF@,*g ~cb"VR UFpB&:.[Ι6.N07IoϢ+a zUDzs*{.\3ү>ojZݟ~>`S !6ԁbz44:@`m^9ِS]^_wsg!Wsk@޸<QzH;𐋃Z }PPt&> {Vr:=%S<'9K1ӯA ͼ '%Z:3_Y/h葂pBb psNI*AY.܋@fфVAA:x,h9 N$5n| D[oӺÙuĥK{f $ѕd8quؕ*H%Wj 0P/֨b.4xr?m"ηnJ-_~~OQA<[}9G8Yj.uĔ9br<@v&02M! ()Ch(#ޥb<4e$||1*`rlfs~I/3Xm^m^_#:&mBsI>jUŸt֦BEPEU@8 ec LxuY[ vɯE?GLHq10.>Z =M:1l}U7~ᣀ{]e K7Wwqӧq@L \F% F6sg>ևl y%W1]2{Cg :_ĸO?{(i_=h6I&4k-\KXw]C V":i%u@:z:`` 7ڴf7rű`Yr!U /Y5y`r ɥaą. |$@|PAO:CՀ4P naBY;w:vL4zQ[.8pFbjtraD3Q,¹8&M >;1ʮrizABɵ$5SI4\&W保RcOiRkUJQUGsM)ou)o?^y,Rߊq&~i]{4ĖC@θ +59<GR\W*eL+I6Hr5 J .: f63=dZ|?9x1byktD6ηx*ra{T/U#r% HC_hq19lx&8ݞɯO>| ֑q#aE &qkߘzOx T K[awat9L@vҐ6y1Hȓy֠V +cw5_S^uP7!uu/Kn ,J K +:q;OqMi3K2M iaнO:(-n(&yП% :tm3" LÓ$7n (0=B }!W $w ݆!/ ڠCufz(mAx31@ě~aHl*}*ƚj;=( C+m$>ͮ=bY"v؉q6´: @(""` .T⽀h`ZO O"5rq}x판2@:  ѳ0< O\@SL3M/6C O@zӓzV$c/i=((\%iҫq78Yơ#r1-}(H ?X&y,?6W:na'fc#.y k9 Y M7Fn:{#N2<߬YsM-zuc>K, S Һ `<Si>T>`(zxr)q ĸ:i.`d{AyV 7/Ar\jꥵt\Y>'O/d',[Yw(Xڎ˷/*{1Q @F&g7zAHĞT\"|,Wq$@S .䢀@q94ݢ/g\^oYeZۑaɵEX#sA{t#I4GGȹAĽIyV#@ZPqP)`".Ms" +"<|l2$N.XESıW Oցq+J"}O֕|/"9@س4!h#0 ĘA@̒ - k9`%.RRxCh" ^>^L1NW^@f2L + H7Wm(lp0t :qNu\SZڸ.jn;:܆;m;; Q(s,qI❵A12e gjİod @|`{ԖT@|,7 LC]@`PK殴HBDj):KˎW컯^snݶu^%Np\)]֝q̷ļygÿ?}!©D8 +S$8잁Ǣ.NI'W'9_T xEkB-\eK$5ҪԋVx¸B.<|[{]4Yq3R^6/4 ( nzAt(czxȮHÒAL(KR4+O*<>:~xԼbxɅQux\PЀe$#H: YRQ>R(9 G^h/!*i'@xƹ/FhQ.%0(bi$@ ?f@aw]miz%JIF*d'6M--ʚ% Y.O%YkYFXS)mI7ͅc6gVgL~1(<ia=,YF "rF|er!Ȫ.ŸJS*$!\H+H^bL#|Y{t8ݧaF[Ƅ"+i:P *]/7o2q}x M +ʀ=x|PA?Z;^W`8DipAZ*[}fց#\;:xVy~7}xKذ3848f}h~`nI#:XH'zp[>=cV`mRVNu:t>phsAI>}k +VEVc:LBw]uVĽ6}ǀyx3s7e\<R;5bݕWՐ|w27I֘b\!5-.d x͵bUDnP,wþmu;~{͙~ٹn*f*r*+n;l8ƭo:42Sjo))$vQe!> + :k{ +D^'[y%D+W'4\@:+M.qA'F@$^ Z:a!.X0#:3qr'@g1N*Ir 0\@_=KZmym媵-]z 'Ȣ ]w ][_ +:(d 2,ÆGf³,ꈨ\+]bPL%IF}D([ebRL\H* +.M*cK">6/qNZ62J7,I6|//ت(@\68&+PPOxW\{3>Ԝ 3 ϛ~64Α;x(;ÛހeXlU}i𖐶nHM{̒AGN_ }ah,C /'&5]^@$$_ܹ?^>P:8<0,x`ǥ}-g1W۸6L^': +{q{\a4:B ᅹ$j w[h$/7*{ѵ`r2N%Ȱܮ/# +ģ ȱ MΞZ@ +.R<ƈ=4gZ F -i i$u, $7&oNl<.1N~&( ++lrbh{X{k:?|㝥nk/ )IbdMUfS[q5Dwrw(pZf%n}uqM(WD{ܦ*ֳl1˺ũ*vva,u!!ofx':ǙPO,RV²il@˱-w)zĚXnM^1Zq'Js)J<[GaYslICzx3_bZc^1Ož(=ֳu><̡ 6EJ +qX;")U)B*40"F]癭g +%뿍7|4L?ÐqV +)p=qv{fAӌ<0q~~ߟ7jǭx ((A @D/B0>/xv03d89u5pw=s}ܼ}5`Rzk{g}ܟ[DVPAUхLC:(Y!u&ƻ݆{"sSo'LL0 )2~)بLAΠ)DFfww' 9{ k¸Q +kP[ od7xH ^U $YB h&nNlE nLʜx/]LWꚽ fbDG+,Y]dO,XJd p2_]n.FtŁKjTYm{;pE&. iuBJ /yYby>$in4[|~G7_#b⽍rEj\ht B#)I@$dTaMVYwV[kmXwU iJ./c lv{ ~?jXO,m '?nt75 lRPQS*B\.TDYJ.JB*Äg2!g-Owz~XgOBo| fp;Ik>X@ܯ6CC=<*V30lm0GfV>z}@O[i@:m@X /xg27[B+A#@ Y~?zmO׮j V+{Ԭ}ݏgnrL1|Plję\0=] ':nޓ9?A Z;ua$<JyJ'RG>ew2:1F g+ +O +JƧ]u0ȁ't$;@껂x8a9u6~.(HFݱ+E.Z$ +/xg--qHbHh4THqB;;h`{վE5ޫ]ibr:bX=SvN>Ů;ln~~m8qּNs?Wm'@8S(LM kN5br-7J2Gb=–3K CZmg jښ{YRN]\yvv)6e})oԦE1OBul\23 OtKaF "|PER;%x\w K1\&$pB66v8l>i WƑn ]Ϡ¥AAOtx1A) 9}6z3-Rk! +Dwņ w뷅n7~r6RAXR-_%cOtHdΝu%=Wp+={.wZSܙ\TJC!$Cv^z^|cʼnO#Mlc>6q֬WvcQ@,TnbaJ]$ Yi̞:8˝IJ\wpVSLi4U}kbtmͧL eAuqa&oݧѓKvY6g"sDR>Xg@ɺC<աTVp))T؝/" dCβOG-u-x"J5΂ͺO.he{d})/ 4>u @ ,"o9bb{F u ӯ/s:u[qO>$D c \[ď^[B=agzZ>om|qiv/ 6MD]@/qP:&k@v6tO{t @$ 9o\G.b od궤ذdw ڥܕ^ Y={^Z@jR.1" S2:xT-w C2r@ Ծשu[pnV)9ozvu#:Y@9eJ MJ :#@\:Pc5RH(ԥBl],弰5Cܚ)KI`MDbYʅUejo76Fe?;>Sg N%dсt !F +[J%YHOEB)|d~A~10ǀ .$dgy3а00fyIH=8uo7qӗnv=}-%:pl0ثb wګZ|17>F@ Fn~Iw / @{i[?DYRCQyV G@H{|aF (%_]o :)c΅@' MO-m"G\{/+5ԑPjOɕ rUe\\ [E9|X&:l9c FO Aǹ;_G&8&sqSL /XM1)4\|1.jfP8\`Cv 6\v˪&"9[߼4Qb~俬 O^DN4 .HtFfB14tH}85O 5*dh9"y@AL0«Ku?`pWt yרd ݍ|VdK?}`tk8@2 u/@O{cQFqSwK$3aA ;C9?`a{>o&WI=奃BD'[A$ @or&SLx5QfI +@@}Jezč1g}0>W[ +k$ hzFkouV@*ud kxlaR>8ڍ-mA+*`V +i^$lO[6`NsP>l5TO¡0 9άY?!*_d XzykÒuU]6i҆I(4e\|)ߋ-d\6<75-k9|BHC >0~M@g" Qia>!ȰFf Q9bL.VR +*׵ybL˚6*`b٘\&*Ȱl=l:i :OeY߲j]ҍeuMOvyĉSG?ttGb&8wp݁ꀡ@̼QqcTTW m }q@ xTA` x0⺫u+kDqS'b"E ̙U[&- @{17Rsq'~;?ڮ.J,/E X"seJva%ѲHC"GJ~M"y'41Jy|x!{xq~Q~n1.贰5Sv>0w_3X> goc1ێ+s*W?o e/?7τf7]x?] +7+ |)yuWI26Æ5-3kN|QfYX'O?6=giIqan.Ӗ|d%d9VU5.GZB!&ry(r,\dB[BΘńLV5eXf\fZ21o p "9N2mZ P!P 3K57}\׍I15% @z^0YwѼy?KzhO8`"**\&])^q]w304Fb>C#n74h ZScxN?Ʀ͡m]}z>OJț|ݵ,ozB4c'[b#͓sI_nCpS{{b5'XO -0xd#ztpexwM +pסw8spӆExb >Iuw +w= +ݶ44tO#ۖCycou:( _={_/Yqcďl;q2Z!5zViPᭃ$|p2XAh@,cfѤbcʇ{z@nϭYrTiӤ]̷)G|X7%U9i_=2\7R>DP1EbTm97VVgCI!$Ӷt6-R?2~0Լ(]T~ė;/ ˴8⊉+DUdUM M/ +UG*EY|x&zv|(=-+-+XdOOq~4ٴ(qXA,M|c\nzJ`ɲBb`|,b@ !DШ,6* ;2-smg-@æcGP5dTd<,ոriAFm[4u yIsf Dd^~}.]ҖwIB=ML\  'p<7)y4zW C L|\Z]hQnV8y됲'~8ʭojYDB@XZsl6eWbWǮ؃禃NaYSTG-db|IJ"2 +eO(/}8asHg +u6޶+F<$-E49<|'Ln9nvI& +u-kXcZ˴4ʹ$մbifIa!$YP݇[~iƗeI1֓ [k)Fd +s\96,&2a,;3;2sxaiDQ@^׸2ݸ,UO/N-I֭L7AtnA{ɿ{/p)d :<t{Z`f :Zz`PAxAnc N1cqtnC^S^`$+: a7bgWfV`+("OS-gX >1~nXb > WDdY?xWRìc5"ˆm#.0g@ؐl0Ҟcg0lj(K[d X1C`^߼r/vaw䶞cO>9<{Ģh즣bk9,rzrҲ"'[OfBN1[OZ6lD @Zi Z +#O1 &Q@87^, u WQaBS{H#O <Ob}pSD/1lj2{j$ы]>; Je1s澾rƖn»9g7v4i@Is^_nC3񽣖>stP82u|MšW[owQ nkqwOvc;>kI}&$@v:;;;3^vOi 왉'r)A $ O]U?b2|u)7Fl;@՘H41T|u%1!5VG_dH/k/#/ΩBO U'YqA}?8اqˣ3!8J6qZC[' uQ2 +7 +b +֕qt{nd1)k.$M9u9UY6 ~i3tYv ;L1֫!rϣr5u΢3#PZoSXF-C+B(Gn2Hl U)'a(t ^µP!d *^ҁGC<=t"3y;i6U mi ļ V>OG8taˬYCЫ ?A0FBBUP Tn,h>A/։)miEC`L~x 92ϨU6\՘Z@1 ' Rn )CIdNdb2mDDL PH9A BDǫJYuƣ^ӊDO.:$f"AT׷p\Up2S7CH%eTNl}!B\"Q5s! b: ANVTC&0V٪DOE3r\#7b2RI|8A(_9sQ'= (AI YGBQl6#a5׆!u̠Sp<*ȳUVBF? EqV)Y6sӪB X3*C*kmjҳ +>Gµa8WډYE H^WyA + k4rcNCNe:$Ӑ>\lq(%1>(R{>v͡]lKA٧a.8 ΎD<8!A QS.0&#QG5%}>q߃Kv# ~h>3vϡܲILySS\٤^ȰBa*@[2@h6)8ЀF#*T Z*A)o;w~⮔!+ĔKJs ~xй+ł0c UuP&0hhE"A>r#T?&tCF 4zȀ̜bhj^ Y;գ'cyAxzT5n!ƎQ=cxi5pOC|c! qLkYUD]NxAǎWL2(An}u@%\1 . u޹W{ ]NVY;p{䠉-W2wGvkêP^rc1<ʆ8YnXW!^co5ajCOCQP| *Tp2uϺծS枇gv^ )]͉e,}2_ @bαIU6qXlGp +<jo PGQT=ǘ4GUY R@ s&퐆9e*@CgA+WMI.Ii.Ng>~}@x ^8:{㖄w#Ejp"3t1 <{Ŷd<{K }%Z/,' Li:''L"ʟu?tktJjhg< ̝G҉HmiA_3/-;0ϋ& + ohiv^eM bSLXjx5L|yA̜_73j h!Y8;F;| 6y + cOEmB< x?g&Ʀ%/%g + z ØXS1Z1m#/OHwO]{ |+&^&R0GޭG4t -nS5' +}G93y[ RsH3!U 4AP +>>/5!Bup!"* +yv?@3K9c=_ +#WN3\n "7l(AŜA AACw Fpk0w;*}оz`=1yk.6@dh,)OS8g}ёg낎JqJ 1 [sF@A HM 8؎<3EWݲLkpث^^nے{$H#&TXsxLzW=_*D7~^}UR0".D|Ү% BL/AzAO&Yjcϔ B#[7 |YAb*l=bwr).QfjhɢdDs0R k*HG/;uɝ77sA Z{֭hw Zz +"&P }9pʢh +5agTgUgg4a5PjCIUIXGmOYߣ|ف)h zQ^h&\ V\s \zpȔ)1Fv^"[%1+VO^ᐌ=E>\1 潟$g>vSzb9{6;g`i`C1M锎/8e(Rt0PqF9{15aUo+&Ĥq0U:@27~qbidjC@&* `1.zw^{'5J?I%'HMA1!AX̙ >1G xA<@H/QUtXZ9**;2[woݦ>o 6Ĭ7gF5suqϗ^Vuc1S3;UmTe;Y1i%~^޾Uu9A֑ +ءx&&OxΙ&5 +ŒWyU`Ÿ 7*3B?~f֪3QøvMRI͞8u 3]j8BKwIݴŘq8;"/zqީEw~J&Z!kV:)nSՅۥn?+ݨْL:g1 Ϊ#iς,FxB'XAPa#G8D9Lyа 8:D`/o+4^6{ HTImMM28jU^zC`}Y#6( qV Ň؋S{65 _VL [niO; } F3@ϗrIðsV/}k!& + 8B;v*׆KWJWL Ao>5=I@"6Y?xK9ɥl *5< lRFM.eGg蓃POaԠ;$Y +$h C3W9s%4 Ep8~3 We sA>ZA:mq~q]G^D9"FTU'5IG94QrR'!!Bq?-1 uLAߪPvnXApMb  @Anf *BOş;)  sUZ`E'l0MMb%8*8GT'ܙIYA;5c P(RT7=YÎ}~A!aQ@ <)0 W/OjB A߃s%^iXX}N+&*Ln'wޭؑ7>C +_@K9J,[&,Q36`l A9{..`YP{ʫ`a&0ORn-Z0iG qSK +:; Akmuεrks&Z`s:X\ޱtcV-NnEO +ЍuP 5 Ĕ$F:Da"=j@?QAT6H Vio/[Ԣ Qբ`09pc;R..5kE:| BY6=: 8bA%bV!Sg7䇊mxQޠx2z,Շv@ jvS+ Pğٔy:n4n{y'ᴋp#R>_7$[?wϣX|-uc]s\X:j^Fkvp!~>eSl>K4MIXFP+ɯ°1Xq#27:#/]Woٍ W.{>Y@{c8h(S.Yًc)V0L5qd3ht1rL2h -uQyv;HQt1 /R[%"C+_*VFL:. ɶHc%M暩@:ܲp )MGn*C;V8P}*eb rHw3N{Y4K5C嚮r:vQ0v)] +/㛢dVUo|_ .Tǿ=|}?AچIM'[ݞsY\NU@.e\ޱdCVǪ-NU[ݫmi[fIB nI@zA1 +ҹf rC5 +z[GPqG :. +=G>t(NZݝ bvPhxMK Cls/"U3͢NzT}AԷ# ԶFx;Mֆux 1@RR0&-ECVږM3No=fzVhAO I1Jhކ2E+/yJ[RҪ(nQ5ʶ>_IIȇ02m Su=׶2\<YV+QʌP5@QB^$+FfeWP2+O=brr~RQ-"AB܋~U4czՍ*ghLPV8euzeq=V :=EPUrRY 78x#}ayQ)1bᇮkBbncnJnYHIH! 0nyKE8>Fel26fn%Di]!`JmM&$bKl6QcMbmbe\×uc"O>7앹UD\n#^NǰH(M@2)K&9ta/f[iMlSpf$rk"a#qX-޵MvÒܖo6*7(6`c1Ćb}.R.\`ъ#kWGMnNXFq +dmbsMاⶻIm m :߲ bF8bk<5ܞHn'a(U|]8DƄ `tm2H_O<?b:sGگc8&Ԡ2݋;[:Z9Tw^XȢWwr^Zq ?vUQ¨: zD)RJlٜv&%7tTT-}fuP5 +T ֨T?}_vN(H?:.HҼPىUv (1O'C%lPجYoV5H /YFiCe?| Bu+J,c:F~L46TXѯ++Qqj)D?HY$b (zϜ5k_Y}RHH7h\77tm6>Dl|8i4ʛCFdE3O{Q:ٿ3fy(kCVogiȥׂڸy#,a&6 DyFy9?GyuԠۂ/7ɊeeMDy~i崌VCyx9)>D H}FZ  p1`cPkפMWbǁzLա)eOVЉ $T*3n.\>_"AT?(ojAcqfܬcdI]j)mA;f2NYS6gvi^PmٞnMaw1[-I$ +HW(~$fs")ڰ\Ēb*,#HPlMrUxV&9{*dw?jk߳_8flmIlbhuL¢a 6vHwے)Drsi'ob 6qS@p1ebm ׆h)VKVJVʄ6%uOnl!Io6D˷)$ +ؖ@BeMhQu*RbHx Ѳ !Y&^"Z,Z,^,PlAU+D+[Z&c9ۣ>4RkȓzH{or\ѩf#V5cTέʽvS*uu.V<.UwuY0ءm`{URrH Md3TI=gRRCgN1G6 P/h:/c;G? +nS Ρ9'WuU]XuЭj4w0IpMʞLPجYoV5H)d[lPpi܈9h,q&FC??umAvOuV eUm3[BR +$9 3gz5JH5h$Fn(5݈.nNj4҈Ky{ ͊1([m6i[{f&0731c&DUPG :}! kڰVeMHuu@hCVpsnB4+J&yIIQP4+Ѳ (F5vE ءY^DUSuXk> c(U'Ajc0m[/Q!5cUʪ6eeD@*s1")EVFiO Jc^RT/)'JkjEc;+aV\ b wO^{xnս׼ Z.Xi* i ?v,C_ZU]]o.ķ"&mvi}:cvi^fkHSj.9ؔdדHlJ +ɳ1Dʈ%Ua!¯#7n?!;:6>nꂏlWݏ.SZ~ 2ZurUrS!JD)-xM Ɓk[Z״Z&"ZiS <|*e4mŃ5v';4tX=E^^3./Wi$f (mKq~l)CdMFlh$:{H\de N R>CV*nSTڹ%4j|!7R,i7pK :Da^^U+:>)-C4.ߞ=Д~;U+~iDKd"-]afn>/CKO3ɏiwZ2e+"|$;ޜlN`7dzqԆ8vbyph*"XkÉաׁ+¤GԻҝ)/L6}۾ப[Aؚp2Nǐ8P룩uQU$eI@nU$GZZFbk#kÕkzp[PX%!`b /q`UK_XF)Ғuv{D_K?C~Mtm2TaBuU8a[6T "9B/WIWW+?[pe~/vJǏ{'kZ#}2W#eZPQ $ Z +~_+rATWh$R ꩔(1yo[wAPr_ꓫdB@@6 "UH%Vu.E +t+W"JfIȡԽSzsvHhtC [ATQB+0EA0z$L:Mධca ܅D*z^Pz@BJ l,ԓ: 2ÐIJH(Z1#"Gh.nFȎ^y: ~k'zr@5 aŘZLj̦Ϙf)2>-=b 's2Q~JODO/jRBڋ殅]VQB/; N&GgH3;tDG?Ѯڀ>i`@ @Zzn ?6w!=P!&T mxG7-{Iᯒ=u+[5KALj6o3TATdn*>ٰCn&6DC7/ QQ&s)%. +^ ,hXֆk0e*ZJZ'R5pٿ.v0f>c>}O`sjTI"TiA.XN ++QJ=^ɥA4i @%*#d+d+CQe&L&gܥϨl8hj5R`5kek8c: < O"Y (L-#]-G@(G _eoO' oO: ՍfV!TCHVK2Z5h Z%8YSjR㔆 G GctzS?U0Ð*-R i"ͦΝ8fgjMS7B~U:REjPT +Tt8Bk +F%Qj936*].%u + 0>c@31:/ 0EC~XdՄZCiJg4xTJRPQ9]J42RpvHh$vɵ̦L9sW`qEH  +;M*ܰB܀ gLbc8A-d +nB#ે=P2{J7f;<,W\jJT2rH(GLR 0RA@+Gbc() H%'4(BjHN蔤a]L S[;RhV2)#P Wcna]8$JG +F*( e +Fdk)MFd9ئj+\ bב wO A<,mA/H͝G&Ĕw?)UG{GwȾ?(COGX!ݯه}~KԪ.8`MB#O+ߑ+Sx+| +ÊsʃسU#^=}_@SuӦiT!m ݑO}*$z >L+| |B'ʕzʼrJ;WVxf=d2 ,3 +{=].uOgH<3%>BixaBdiofC?ivg"q|N#׃R+MqKW ^18;xS['WyTyC~>mf =8sr]K'V,0L1$=D:Hi HHFh0Xgn +A) S=ƧL5Lh!-3!4RvG]dff1{␈G*OIfI8qrtaDZ%Qbj@T/1\` +HԘF%6uhT7Z7'u="JLhhO +#[Grǁˇp5w|8JZiLP˔cQ$5:u\&uD8aIsjA:k{:AB#纫j-+@%*qVA*āN `$ +FdQ1`*)"@jUjV0Ju[ul39zxO)ԏ̀<Qh D)ŠPG T"DJtZ"#E0RȤ\BL*RR0nӖ5)ͦssq@IZ %U*PW1^*BX)`M`H IJ%DL9$2@Fk!'9"pf^mi={ueޡI/z;wkp毕. ,,xmoۇvNl[A7Rox$_wKi'p{`}.m%; "/hems6gyl#Fs>Wـbwv|m{Qs|uk7]n~]X5ԫ_qb.9D]#/E ?k `z&l,sl 9-!m!rf{3QgN%ȼ}g^>W"^ Nx%ceKmFD[Λbm$Є[L?spt g oOB )= ePB i"چ*uaQ outy |8|0 @DPbo !Dd+pǁPt/A'$r@It2խڇ嚘f̘kcuIG/M(8 UKUOh %zHD?)'D`>Spa}D W;.yPF1\+xSբ_I}b3nvvIe/GEČh}zzA/mGB[WGфpZ8)-V"O3K47MqQ2F]!i+E,556_[e_,xw>r_>[O%~_/~E˾ZTς_.X_OL-_b1[ɼwad> Ǣ?YWҿ__k0Ыgl-lK?tGxO>_/Px"/b/lOG#1aޒ{{zp-E~O~ҏX&K{.tѲOɒ,\|`͛t縷~:b_,wdAfd8|GuRZ(&H @t#. H >h@ ,lTt+2 ڢ=ӦΞ 8"ǍU-Ҧn{1~.ADt="BKn8J(DO n1CԫU GMf19ޡ?ޫhԷ]}^Wh tly cM@` ܕvC )(by AWG:|o;^Tӊ UAPv.A:PzfG’:ϣW,ʮ>.sH~^G$WԵ+{O4; +MC5l=o~_\Z5Pۤh} Jc.!ԲKw +eЭӣۅ/`2Py~q{ {TAHʴSߘfk<+4uBb]Be' :X{GVhxcޒEGnm(ۄv!At +Ȟ>b +խ؃R=/#Kھ/~*@M]&^ +:iu[ś ,,,_1ƔabT sW M670jnl9s2s͸ӧQ 29o+oAS!* boM33GML0e$SL2 wdi9$Ys3ڧ'evmSO54Vk,?/;z8a<\wG18!MpvqquuEKkw?~m_&km6N.ή(#.'`0sлG)prrv]\]|l|lݲ=/+ ںow8壏{F̩' ug rvvq`mcmz~ӦO6Z۸msk2=;gpwrL08:y8wpvrpne~|WMoa| }pqp{bx!na| ol3 ?6{G&k[|? +iӦ/^lն[]oуs+{2DQ9"cˡ+ptr8Dv[M[|6n . +1Dq Nkˆ!ĭ70ڬo~G>9ow>ܶ?vl3e￐s߷=Xylv">M>ﯿ+f;Xvއ}u|}m{.>V9˶yz{[83akSf/{f/6ٶlo3͓ ޷޶˶/^mmsn6{Kwl1aF׎Nh 0wٖ-G셌x;(N@9W,_0{ sJ`)ӧ #T0fp1: +rIH|'d [Tt +pqp pJt3Qn+x,˩036>l*e"y񿗉%bn1eZOj!W 6A6z* '&&H7SQE)Ƨs(fe8-(Z s}nsK~f/fܝEOk\D MHdM GL&ooVWXU22|]p낪UZVXgx9ʬ-@U`%^6hM@r`ePzjbcқfnŖl>G +5A%kCJ(]_֏÷d5EZ?,k{}2}--[Sf[ޯfޕEW)^]ڻdW*;~d{M #spoqG^+/ʖ([]iSf} gz{֛os[x!pc \``$L npSA[2άoOfٰ]S9cD^p;o=@x.3s_{o3o޲ -\.=r,?ܟ |dߝ] AqWP&%jҏn\0t4+|6RnL̅ w+Orc${nc=C[iFLk`M=7 né׆S\uUxMxM¹2'3Yڻf 5 M4tQ̱6.Èk}Uzeˀvuш`866&HH8?yH]/' 2)y=ٹ zy"  {% N ڧOT_Z6wP(ſ"~)*oku{S}ݽh3.~*&Ƞ]BQ}[YaI݇m~;y溸Aie[]SO[@gk@7իM;09@\zхt m¾@uKoqu?k N07vnQyKeCws@wNAGO)a@?ޱ/S%hmlyRuQ6EEy1z>,klvP=&qr8c#-K)>pxX?O}g]6aKn#@;F܋vpt"z'v?38WKk|PWĽ0B< ,l::}K ?͆<;e|~Tǵ'uA +a h@c#Qf * ^gӁGL9:`ѿ.W$_?ja>+JO eG/!D=@؏ɝr!aM$GS~`w?廏|;ʣwg. rK$ +k,IՁ |vG.#r <7+`- }a# oݼrHjG6#ܑMxEzf{Nnik` 8Ee4Ȭ삼Onl%#z+\ꏥ8MRXV|҄qsTSNwQUG;Fd>8L{!=P#G^4<1#SxH7tG@i<)r̡),%8$|M;X]pc_?:m+K3:h;.%*r"~ȻuֽUFu w`P$+z&ْ,v{ϙM33gZ5kϮOx?{ʕlodwv625hrFa +ʊc RK>xu ͮT\BDicS!APo~_DT/yo>X"T!bPPBѿP˯@|xY>Ds9E9;m˂%a?"{{<-:/f0gRHFo_VjIMD%"x9t"/?#e,;adKK܁E +Bz^`<:Ts~`o>>`C>] 49[ xF"vxe@3 =dM' ƙ1npLpd8fMӺGcܑ = +IAi` +?ihx+SD?v`줇#q^Q8L6>c-`klO)$58I L&M.;nB2zGM=(j¯ME5, +gW{kh{h?ٰWק5֚Oo-eRxr2?.7I Kq5JKL<.V.Vb*Y"+,pYeRV*Vj -[BZ =~9oWCB3ݿx{)Ro|Z%[|P%񛴛ߦ]6Q\RT%V'RD^"C-,!Bsp9@ +7噃/剁\1#g~eчdƼ.^$,`62}pm@<9#UKIXgy_e*B `0>W!ybH/Mrxl/#wm\ƺe,"{9>:zc>x?`,RSsbƉܞ^mzb%j4âfY}/f#z9|A{y;AÏQ3 =C0rhV&+2K7?qǮ=zڬgRQCӦIpJ!p)ۆW ͣ:a}P%hi:M]A +W, OsFqbFʮQ⋺Z?[=3*v &zF@ܱ?ﶾWßRtwEְ*Kҭ.>)9n,%֛@Ku Wi@ ]e!R>^TZ+-Q +Td9xT"-4Χ,g?eԾ Fx߉(o.}e (b~s=}9wf7Q +$\t5BrkdUfPd("JExceB ͡| |8/|8|(1̢|r-kް\p̼_9w(B, ŰB ^d(DXEC$PHR %Gp4(Q" !yB%GL˜eqxs}giKkrr +2s z1W}2qzE pwڵ׾ZbO f/N//97-^Sy`JfNx˼A ϶ 8<1WYg ^ rp4Zȟ#@[3@q@JëU^ 8/9et7iӲ,o-1.1 %pJ9)xP 7"&?2+ (IA*}]~=FW1/3vF9JԲYv"}B3ȅ=$G*y-y2<˃fx` ~a*@"ss uz]=#:{#j.mܸqm}x";2c2b+N Gt`С!L(tKAܯLAL =aqJ.P⌖U ?nm]ZQ @"z`8'I` }cLcc + DBB!~#{olqވdj Iδ@qSlNA+yZ>SVDȈ{G݃ @\u~op'RorR}S_{KF)d_oXNկ+8EV R\-Sm 2TJQb@!oR|7^u{ѥ\MKDѣYb)7n'?R-Ԛ#Js$b]'N Qd*DQj/c |p+>×5\̇.y D g>|m#NNSm*"J$ v +Zֈ%x GLXMOjBXE -bY|Pd!#|.h-k"/++rvhaΙ;mwgtVOEC[y}kau춤O m?ޑr1kH7N”^f#/-D&qpl$Xup` $uqlGfk1>YttX _|y/WIeb$, + "+?0$dDh!IL!#DA\@6]0z8a># kbd[b>3[T=]2]2zb_H=o/s{O6O}ثͻړ4 ֦xEhiJoWoS^F#V0uB!X+8=\85_҂}C&֪m HdA)hĔ t!b$hV +#\'2>Ĩzg@t;1<E@: +X4 m@0kB "0`V2E 5=xy+;gt O YC6@@8:I.@*tPj맻yܧe.^F@L-b"UEA@PDv@~96hPb%Mx٫>-LCcDzp,SLsswՇEUBs|Oˡ3ŀ">5_>:w.o%4~(q iP^Ȇ (B,Ê"<  Δ2nrA'k_qs /}ݘ2uK`epStϖNQ珎\_Dךj-uK1uKbWS-@,C) +KT9L,EEOB +<*(A|4u~D%q )PL25x~훤+Kb˘撉Kd5lI ^AP)#& & wxn3+!>SALd_̀_lЮ?xgw5hۼloٲuW򩖛kg<)K.M$ &]耀AFBLw7? h ~o u!ǔB"9^A N9|e"Ojoc;1݄!W9:pj@' t5tpZhP9k 9#X@вlt`d:(Y7A\#| u Uox"À #}5@d3&au^1JClC@@`h`ءɮ~CS gzJ= *Y J6[ċrֲe9'4ZӮ[o=JMG WQ4׾%6>Jj\NzAK V"x"3šPGxf8 e|dRB=ϲ蠓?}_=x'TS{Okgg!Wkj"RDTrHd"2g" ("Eh(Q D>2YLeiTӮT,{x"sjO;l{{_m٣M=;֖<$hygl5. +im~pF\ )pPaU@:r"Ltl1L+p]㴜bRB\˖VR;Y5͓#Iݩ39Ja (:I(LqO5쀐;au:0FfUc eo~mS #y~+VVuτ7bB; RЁbE mPVHW@4v + V4u˟לPcItyUsŪ&d:`t@.,%?J*$ɤV"xBr +&URLAT9Zb +20:N6N@mSW܉.[=OgJck:  @ãGX +B`tEwGlR^Ѡ#1 ElD>2qqW*呺ftcv cpUd,+$M"a%RX%DQr]1lDYJ-%RTUbFKbD^<6$2f L'Vim@ L1 ̰wڌi;ʞ?jyuG-ojټ_nmУu㮀pĄ@2,g'@@WžY+AG (6B?L8ayP栃d@CV2I.tP+f1C~; lr0.Nx86No&\Z7&]:C0B1cʀP耩Y}v@8耀1tpbBME>S=J>ha%F {hPaXnw]ٖ_[xc` fWWbos|%޺+4c*iBo 5I,)AV#VATb='Zf̱pP-.J;Sm)Trq~s2 %&՘w$ag μv)ve +G^ˮx%pHMD2R*D R> +DŽ2Y)v{"i⚾wg腝njAYf\Ub,:XˬAF 3,$('OJ%],FBLSeEqz[,Q©yi`fJh}w=Zow_֎|=M{ڒN4ݼ=fK" ,(_O@Qbq5@8;aWkAY + ltV1sxb@̡j@8: ޘ!:Q}_@ +:`sBêth0#@ (?l0)vfc1:D?:atl}G +0d(4ak' ´ >٪1,ٓK5hТB=v ,?`~?@ܑ΁N=cW*ixXz 6O ֲ-Q2u2Fldo‡F+ȜtMJ@Ը,vi5uZjUR8R1t$D: <~^>"HTJۓLw&^^y]([C!ԅW"ƅpc* +!.c<:$d1/xO [@%qtP%lMRPb1 Yh`|&,͡/SCib>2nxb@DJ_k˜~yt{@6AAm_F~ǝ^վyGfַ=ZxS7oN&*]+q{vDBEGuuJ ~U:=0Lj`!.Xxb@b{W=9'G)Ė3v(|Eʱۇ)E7Ĝ{l#D;8Ubzz ͽ2 (fܓt*qJU3KtKt@u1zRV nw? ly,@+@)OoYX>M4~H$EU,+xD‡V ͉פf V +` +fP"y\@"HS+jjĄj!R)‹-yD:BH/Wގ,*ĭhVS( +QC@`SԦck1wةP5$RlPB ҁ%)DD>kǚޏY3kx;laQc`Y^d /&fDRD9H V3 DUt`" +h\*(:M>4l [j@Hv@Ӯ;y9s*k0zϭ?DiZ<ݶywMo&S2 ֥׉~> E}0h+9%YR}vju~/ 1[P*CSJ0ŗ~ikn~ _!mӘHa JT[dRHVnX T4eTP"Zb+9P"6*l3f3ޏDE " +5QJt>RI +@!S^Ld!MODg1YQÇw"33@adA?s#%]_|~wvTψqdFᤌݾ[ ?|kWWI'@áW Oh5Yi]“AvzS3\2|7Dp27vz# +%#CrJ$?4r{G@N?pi#'^ 1<92K` ԅi6n3M󤀐WAg܋J8hAX:$a7Gԣk1Q2 eCuEK;(t.AGn=CH@PO +)!{+ ~G"e`'$+UIrKJj@а(>lXJM2%ҶF+֤zA$[ z)^fa>s keo_m!5QŢҼ=~/ָ!T[oD,x~K|0ZVE;H2 ⫅j^-DLYd7dq2??ָvNvg)(K*FZ %`DDEiI*36&ʔJ4 %( b!P*D@1\L1sXFgBˬ9zQQsk/thx^_j@8΍:­OzwwMox&x bS#>Jw?> XcÇ){?SC]D`h(taچipnl6%XePn Fq 52CZm%eJ#i%BGWI.=! A΢CT7i8Q6:, V9]v@Ip½Ƈ7J< &P ;(#a-@8Z(yAD!BF^ +#Vv@S蠿ۅ t7u?t}l/9‰/;e@ܗnAWAi"q2i"y{_iMrGIoQG%5~tDY r;+tC]&^YJ_JnX;&-G-FU1^" B->9ӆO'$#߻mu;Œ̾G"C:Tۇa)#j"*^ dрD! k$'@ȋr\tPx2-]Ǩ)U@rlFIVS*Dg<1XFQt)b!/K2. \T :i3zvhE&{-v8[I Ý.NԽNh@>_|rr3ƻ@iox~ ֤ꥭII0 qXo@$e>N=X]/TCaMjIl&/4,jMfMn>zC:z]NDǕ>) ~@x@TZw$ɀ`Jj bP2 2d/32DU [#WK XI)\K5\l9Qd1;>Z0vͶ8pN]l,D%sd6`:PLER\9(D@ #xM9)gʙ|˅R \`4n̽6^v9_գ9ZFA>hdN$ E=n@xwmq΀.ͩǺ'xp]+bNe\;Fqv|Aв bMIHY& Duߥt.5:8x<p@cG0B;",(#7 pP.(x D@`pO =SSְ\ Yİ 5nt$u s5|L-x3 p)w }q灶^m֚,siWbe᪥1%lXFHm o^r&Es_G@ L*@o"~1̑ƧwҮ$Ef"#EȻt4vKyW&zd.%v@ۡ;{Fm'E_ʯ :|RuAջe boZ D ^5D5ji[2q"}Q!QUb4i j7lR|B"FMxhMfIa9vK:vKLɧZ>'c=R>NdJG~ǖb@4̻13\X%*dV ܆ yqslW'IRR\'R# z6QiؘR&,?Im~v)N(-D"!|@("(!AmDݦ()@^!D!KB>Kd5LBPcK>(>>f8f"DWډ.(!tP>mP‰Up1<# VҁbGi +>5yi %p@9l&#dFmrw.9.AMz٫J#w +u BN< +gyL/%dTM"mK + x\.W#d|n&!H&%c'Db%ޏ6|ƖRjm3 -1ݧbJDNSȌ # K|%P/&֋RvU<ڈJm@X\jJ> fg7m׿ +AmqwtGMʾVl%ex}vtEaJ(JDT]CЄ +QS.h*J>O4>_.@_=R Fο0NA@߻ 0D%BAfI :zlu@pҜ$ZJ6VQ\+ȵ[v% :U:19!&$"b`S +u@ГKd7͑]fT l pn[Z p p +g~\171 O9bu:ȳ+ޡa+4Cs@l¬5Z~4qGŪ{A71tpJqV2 B@VCww躇MDv@M#QPso쀈&W/mMf>J.ѕ[+'PK{%Gr1ZY2X\ްݰi9vJf|G[R Z ! ܮ㘘";W# ~k" n1DNhHh斤z3.*6ҮJGQ:)FTI1BX>w9pHù~Kc%Db `+L>tUjBF4wFРR*АT%U@TJb8cAY3t${oͽ{, A.Q.Ag: w5RL'o`IZ'HVꮀuF& $`ɥ?NVP藗?+✇]_A@WĜIg}> 0NPdW)RW:ĺJD?ؼ* ~i@hm\'4*gcy岭b :L{L$'gĴ 'O5?> 6'lEs|tZ5: `: ~g=c;5th;6@tkD1ĭ_w` I;7uq_p)&dD!uYbYd+C֭dLАzz5p +!3[fxHaMmD4hಾR18?nO?ӿfx?*d~O/k%ƸRh*DVAQ;E6 E%NW,)3Cy"k q8z_NQ?п[p \u;L| Kag"5I%bt)ƕ")5BR5@c%D\Sk2&cF-!s} +zl "1apV4w]Dzl%VWsssߴoq脉. (`H) N9'UAޛmn$aA^A`i*#x?0}~DVrp dИ YL7ҁ&<yeF _vSJaInI +w10=|>pٙ|D+nT⥏^=x?آ4sNrGY.E#I;8$ɌPPcZsRH%~՜~UJǜ$$&ֈq8B!8Eܧ!esJUbRtᓫM(bK8hXCg kwh?Mнvk_\9D_s&"fd)TBxσD V}P,geu bk i&$$5gY#؜L9.~Vp]=&vďl@ipޭ + vR1Z({KkD Ò4Ve] +zHG< q>|t*7Ыi ^cwՀ`2Y@#"2:`~ %7M9,YA +:(/x{whoZ1` ':A296N,0Uʀ8W/o=u;-=+3e<^o[|D9!tJ1T rAN(ͫVp:4SX2nYNܲ|33c @hѮՖT{\qov + yl؄dj!M̳XJ8{eކH:NN̒lj+ԥʆ ; (W@$ g7v ´4bhJޛR)t*EgUj7Mߏ^7JfӞex70ȒP)! ;O2yfASrD| .*H9A: ՋGu|b5_ǖ@\6 x4:ݞ8^$^;}3`@[D@\rŰ|!1HT P*S-$U ՀTr5XbJ"\᳸ ;>]x?b7|^98'Nr5i_nRy#l:_J)Dӵ;U7ȸ@y:=6@ɕnn?ٴ + "-sx>!:@# ΂#zq¨=K*'qw?a#gVphJ2ڣ R2.:qav^G.;3Mj\CLo% ΂<_{׀1ˀ5x[̎UEMsA{}F{faCmD$G:w<}Z;"Mn^킉& wV2ծ N`=+q)(@t3b$LKA5orIGV.hX [@ (~_> @ggwn3 "_ݯvUCh)quD׽}_6 o-l;b JBDtPNXlá>pt+ +..ƵK^aZ ;c:x`0MLY$f77ܫO.o"in/⏯ /B,I E-k"M>6!E !UĒI +q&ؕZ}A"ZHv5@]}# + H7N(F'vu,X *wwScNW?ynw VEvʌ咽qvΙd\dp{?۸q e@t`/nvVC+ryƧرa&4B>WDAyUU585\am; h靺9\E{a ?y=v@|z~qY>oꌯ}o*|JX^Jc2 @CtA*r|XˬO&d^]i4h+>AƠ˦}EUϖ%; <2l\p M;"ڬ1:H+b]uBJ\#&V)墊|pE4R^g}'ۓDk Ӿ~- B蚀d:Ȁ2g˸rNSJ$!|2!,ɦ.@g(@Ȉ=iOc[B{Ͻ58@v?-RI d$֝]_w 3(%> 6n EZ@ *ӡs]q$ք=#o6 ij.bWGjurgU:gVa}x N +M^2 (D/ηH;~@0Zai%9yK<;BLƍO>- + D k|\ҪdPգ͠! F)rcSm+Bۊ^Vlz"@ e@m[e| NHݟ ϫ_nO_xy+=*@ +q5:3.pE^ +W-8Cp4, z j1\*‹0v]]b~9¡Kt(`^ 0\2)# xճUD;1ZKx%#ҳd AO8X+ʫ3 4kxM5PbU!4 b.1N=O6 [|gK;q^͑y; hҧ+D+JA\BkqlL ULGи5pw:|:aڗ{T3B jq[nKf׼mή lE F[č/GnˆaV{Hqw{zӦcFAZűy/M='\:誀l u ׂO}2 u@1m"gcpҁ,r +q|w 9O`=Z58 GAzi}:@`J@g7?_!had7Z ·v92+6&gr*@鍛  ,Stא_b֢a> nccln E- :FQpA.^oI11@p27n1bkءpE%՛4XRWJbr%ԉ5Bnj"ֳ\ /2ټsߓ|Oo @h_ 0_g@D*@A "Y$T%4ո;EɆ%M *mѥld1φdAY)Ӿ 8tmޑ?jЅ>gae}ڷ淥| bX^=9"]KXT)c: +7昂2MM>gN  SuRu{dP^Զ8=D^?0Nq93Bf緻a5@lY # + pAGa #΀'xnp0FUZM s2 F I2h&% H)u3m + ,#\߄UàƕP,= x; 1<7g^=vP= + ؼ +I .gmp< EY l}JdƁ9H}| :l׀E$dBTʀTe W=R-ݓ-]SGjuy6@x˻_튭XT1~hw+6c ufVB:4dewsJ"z! +x\4\]!DBh^׃ D@l/mų%_Ewct;3l1{b+e"b+3qDBB%@U\|W4D%lX!7M0/6g(ԾԞcM,suڑd|?RVn_]\R~pL1HA7#".wL . +H`..3z2z3I3:bؙu  'hu?la":)|nwM+У +ǓKBm"ϯ~9GRL5{iC˝$Fv*^H()<*g6Cؤ7/Ro"(ݰw+9MI:(5 ;A] m_۾B5H/.{9lJع[O &qh4땲x֤$cJ.3@&xשghmǭw(n]:n58=4x⋪o)bx5@ŗ=툭 U>L+C +|?F ݑex_6~ʁ,Rw$ޏ19Ag)cAy$*6Rt )ābY*a" Elp>CeQ>iԾ ]ihQ3>|9x2mט 7@W/ݫkw$ ݞ (D# DIa\h g" +H(?!9mҁ)?1x2?#I#Iڙ0ɀؗn$ZVk@~D[;z[7(s!y/7RJp[\ *޺Gq.EJJrwM"0<sAw +s4jz@HU].X-J:k]mlQmҕ|=~9δ;}jk)h͵h 詛:(2$'\]у"k%g4"45avѰ8kDl9ߔD""> ?Jy'^a33'D֭mto(Uפn0f˯Q_WP R5 !*xK_b/r繈3$#:N)]c;罓 +ˆȎkn8>[%l1K^D"!ċċz ..6<"& +I*{ + h gL$~h1FCnj p}vRA vʕaA~rq ̂ȫFRb A@j,PaQ7 +j/ ?19ۊ@&Uj 4/0 O7Vmh*Ft8N_APB(2  8}l AaDn9mx ;P| +^0\#0 TFALF 1 h~4 4k_JA3 jAкfDpA 0xw8([ 8Nj8/_HL(~r Jj,5ۼֻ {E(x0{5Qhs%!w1F 6"{L64vG~)߽`s龍t!] ؇D })]!-\PlΦ7%=G gcbhOC\)6$~ ?IKN8IE8#9NGP:pZnK9M픪rP BjD5P˗ʗȖ\Bh@jhv2e/B&B?[-AXKAl3 O@ӟcߴc"=Rc la/> jѢI9(MuFͣއ 9MHАk"Tthg$h/5éhcJ"P6:A +vKA4R]Z#2g cQ [PDP4u 4~j̢q ݩSgxx Z |m"oj @ E5xQ n)r5U1#ʒ!JgɛqA/nKJPCOYM/ i%킋7 +ãr,|IVzs ΀MYHo|AWqu!D_@!:s-<^pAuNqF#9ԈkCip@vg.C^~wO|f be$nĿC?s .ؗ~+G)v jM]Y-uVu{P*۱Ǡb)J\&t?rJ$? !#<؇6@qoNyPY$.@Nds!9? U"m@bޥ3NCj!c's e;"A(*Mi؁, 6sOjn$} +Zߦ`>7A40f4G,3otDdlu6^ѡLZl|HxWAh| Duփ j;j) (XE)AqaP.Zx͛!~e `;e>h ƨ1QO@a {xz`4oA4ɡk#GXXM2j C d,A{1g?Rjc AYtV +7xA,5b4*9Z@P!9qrbqaLa'ŨRM!w볗5x@ ;5W+W S汓]+ʀ뺍\Vى˂1p0 + xsJԛԾH>D Ȁ8&"SԐ*R @ *`gSPUPw. jpN l * +K&嘎mIf)Q g7Z\X6v Az=>M? +@m +E.g{ĽvH=t$\2PsJqL$)7&8<#0 P ԯ[cyy^U1a1ڢc|qa%^sOMljk_9Bİ9rތ +ͦQMkTGo,IDlU]k)Ʋ`4-QbP(4 0A6 +5 0 jA!յ `kicaM)`> +huzj0GhP؂*)3 + t(e0V`Uбx _t bԩ=A4 +jEXap(#Gý +j1Ą~BR ƳۏK?3 Q\= v|Sa/J:tzmS/ s2Y~TpM{R`i} l5b:_ yn7*&0lYfUL$sKd>۔R!tba L~a/ ˃LA%}>Q34*8R Hc۴s&rLoS`Ǟaݳhԋ)BmX&ې&sш6= + |FAl'v; ϝv}斃fYK&9NsT1E%Y99] ?9`#+DPUk/˺tZr^yb!}IM΢+wQGZe3N/9s?HIlhAwP1dmM̸4}" P#1da͚Ge JMُ-44l4AXOfA+&[ +B_̥mszҲڧ6x4>~Ee5*Jhd9`&!SjQoequ{Sy*T$ }oz!41>)QJDmB-m_DIMˊ; n +$Q?X~ D54v%Y@90AZ?ԋk d v`2>w/*2kO^|sBǀ ^e`w |,}}/ؗD odĜS3 *CsZN:lfH5 /V5a^sk#@ّmRrdC1H=mڌв*DMV:`p[2HE/N؋ +1Di^ƩƸx0|^# ;ޛYBIprDq\#G!"ViACB2h5W+Tc/\yA| ID[ + ׊ w_wz~|$b%A8eA%PԄӀ|>q +\a6/>hjjr\4B\#PW M&\?e +.{ nֳ>bPS4rSC0hE刃l~a:$}޻`{4緗`8a;:|3,xmU JLT䷇CM{(]P|n Ax r0T|rmh ^ൃى'10j>iAMq h()ldo-n]hxY޽p{oo}߳>>} +6z,]187mfW} +ż8z$Lr I H)M 5*C[B_ĐFǼ[ RZ Q̖0e-hiiR~8o%ac ȁ"q bp`SFLC1tġ#gAx*I^c x )}5dC퐇|[ Gg>$̓060w[*:{PXjs_ +bqwG8|YDYW@U(*|Qï:{+A8$^ӥ;C "tʀ B0"$15@s|Po ۀ $GB!&.>>>>AtB/> ; #S}u!GimԦ$!X)*&5_ bΣ*RIHls + y~4L)t7J~o7dg7԰ v8=Z}:ڀZZAM!m!}A]mK9@=nXoP61ǠmMDULij.w7ηM0晣{4޻5R. 5>{{u|8h]_[VV)TQh_OH1 2Zqk=,uw:h453\u ?i3U4QHT44CW6WK-4%۠Qƴ89õ\L&ADDU753h] / WU6k*+obYaZ!ǩ+ej^[Q^؀R-Ҡh&L6mV`0/ I[45| UMl0 tE=B1BQZP-m QR f뱂:4QH4vQ=t +Rsk  +˪ loo _t,6/7w 8418aU_T_Ckv[&JUgZYټ7u[^QfP׎~K tYUZKώDztgxHQ +^# +F/(/*/P-k#;UɠqiPXKOO_~QT~\ta/W;yYm$3^ ace3sO;Qu-<|}j]$9g.)} uCb=rYK锍;e! xS&0[i` ݚ8f2NYs璭qѺdiәͩdjc"@oLb6&uq +2. nXUovLxϖXYMrߒX͞ )rPlkfnY{6e1.[-I;[$1qL6'u1غc1hrm&_#Q +w/+^:Vڻ&{ebSrKlc9Y咢vM]S9I혠MqX|c x7qxbk%"Uk•jDFj +R!߄T}:v'>Cԡe(;4rcZ$v$ + zV;xT:uX^JƥJ|+}# +)`Q +)'W+e3` /!%?Ι;?)-M ͽh*:D; D +%P4  <ƲeIi3QB4C>iz94}*ڐm3f#"UC/4]mƼ(?g,"gfO]@@؁-** ,G7 FQUب.AljAhZ砵bf@V{yA A-HML hH ,g[2͹ #j2cH 2X݄cy ثzDc' B44}ay(C}'] |Ȱa Buy)~B ~ęо`:jjU^ _ 8VFtX5-⊵T^/ + y>b^%6k S ++TP*W 0 b +JE^%_NVj(A(Y=}Y8ą_O_{vk <Ȼ|{H#)(,lVxI9KA,x; >[SMSam<.ߒA8e.96pΆ4ښAnIǁiĦrC>Q\0<o 8C>P;DѤFpNZX)V\m/kAiw}jʼ]#UFߔݺ6Ů%%7R 49Ө-)Ħ$|czczc"Zgm,&%kb}|eN$Di\!RU؅YҴ4%1?+ݔո&L)X-9lmoWnIPoMTvsrcbCX-_XZnBp@(}D8Z>wgyhmHmpmpmpe=m;-}M[Is1]>yܑ~}Yأ$]\mWɾ(ھ?'o{:A+fGվUe+]+TyE?[J -Pv+[6]MM#E8}n@RܹRkjo6>4R5Vl%RƠy*-%e$Z(W@yu` ^BC^gZ:Y95*/k.++4M^^[bQ漥GV3)Ua"ʍ0@B\*iB1hi%xE;ȁ~߹瀵j +-Q:D3|R(kn[!lDI#n6]anKZR8FMi-W^K52b*ZikiOUV AlbkZfhˁ&Qpc%u<JZF "TժWhV@?RA2VUR%x} ѣ08wjy,,S:'d$ب -WujDUA22Wz U*,,j 4+k WA;+*^XxA{p5%ʎŠW ~);Cl¯^i|Yz۞ IJ0ϐNB9ei2ܖ4vs*)ݘL#/$Fpul]jmjMru4AWGU"a]KEK-K" R*|c"&ZOr$_yG͚HRjybM|}rczs +%ߜoJ6&a:kb(\`u| %[[!a/A,}qPw߉bKwك4S5KûDmSlWmsū6)*(*2{}I*DϪaY%Ziڹ݈]KZ ƿE: G6%/۴Ȍ솕7aUlU=Wu +BOsϢFа'GuR@aH! 2]Y QS@1XaL :8d0 +JqlWruLk+y2}OE6?kkf f +~x%:;D9ZpG V@רDwD OR^\(eUde5JTi ס8*浂NP5 +AG`Fԅ&Tj@|Z_0+)'*[e1]~wO$.>>~|Qsq7i &Mo.E!ԧEyY%rt&Rkbqxn}Y>YScձ0b0>bBQl"1(5G x>*A(6XTܹ*Z[z?^W8qϷ,{{K#5j٦C߇(%X.+Ci>b"Tp >La/DiBJW~π[]r˺~_(ڜ][HE=+Ž p=D;1kDԳBԽPkTK˃@m6v˃0p0H6X(EɾlDz*,+g|(]!rREmXAΞtZOiufz`q2P0~\O >gT?NS3WnҫMLe=aҌDa%\Gz$ F`h1tC:55 S3@GfJF߃CqƐ}j¤iJKkdpQmZõ(N6Qd>U 1CZPEhUPz +M!ޯ"0`N6}ik\OE=&arjS1J +dx`SP(,  4ō;ruP3hhF 4]jmS'% '7? +JqZ bYDt4*RNA&8x@ ~_)ԬSbz [5Tz(\>`R>t漅HR^z|7~)y֓k?]}ʃgZk@h,`@0O$dFP(F\?tIkJ?sUͺаtkw8*6 ~ X7iXM?1>aLЃ J'ޒZC֣HkJ4^*+tqVVX5J ,pb9/W!} 9 4>5H Ldt_lAtji{xNr},ci "W!y` +Kp3k1N@"c _+=m/o6j3OYOx]܂VM!i1!z +Q+IgYBAh5JtRϪ5PLmr (4s?Detc}*!CJ!ُjN J^+z9:R'WjG"Avd +BVgрp bNF?,j3F?u2- Jn SzUZGQhrnr"Wi*-\CGfXKRLB_.ߟtW.C] I7TzpӸn9Ջ=,Dfn8tnRQ@N*^myC߳B}ZUkSgnqҚv[fC)~2 .$;Ѷbx:w1]@7|vM\K٭[z4 +;[yPxO\ƣϫo=.W]W +@ZPގQbčg P}0g}/?ʯ^׶m'o+>jCX]҅_,x_,}/}G[?V}+ʿ}clvѧ_M2u)-p-tŢ/>/}>O쓯~t>7dqg >_lXb#}q.篾oCc +>c'Xߗ~"\s1^% FaB Fϖ-/V K3]XA9_zz/8q@,O+ F>XqD$"!<")<2!<2><">,pv ŋ%p,/79:D&0Z$J%0I(,&TᕼdIVNz/'?2$4V, a1"qH*A=xc!Q"8A,ko/(;+i +G~ٿ9:xzGxDNj 0.Qo@<QT(rHˇQl8n`(\ ]%/"LpH]:og~:uכ<+_]WX +‚|$KxAx)[0caG~05 >a֢38 >*識,A,rhpWp9_7y;7eg~~·5 [0spU32Ȫ7aoqB&bBy ]f֢chq~Ƃ󬚾Ăpz͛>:,X5 =t9 V^hw` lxN`56VtV㝊 +R6VXOxj@F#3XCa$>be V Eoq"x&Br,wޱlc3AAxs#Zz[?VV(0φ@xL@@a2 +k$ALBm܇pF^Q wޱ½CaMFA +YF{/ +>)޳b 9gd5w-/Y;ޅ 'XMq]8'?γ돊Xpay|Y2R)D1ęy,yB9oK[˲`e>Om}~yy~]S^`cH x?Y+޿?V}fկWM6o|wObK,zRϧK<]d/K=Ycxpx%}󷈟qk[~u}ۯn?ԩӀߟ6}挙g,3fϞ5ǂQ^<-2 uߜYΜ9oyN66ߝ2egϜ=GxY3-g|2MO͚9,>Lp\`9sgΚ7}&b̹SLENgL&D8칦3l!RFGf7D 3{<`3M1oN +;;rY f͙?kΜѿaώ';9 3Qg·)Cb +~Y gY8kЯx,Q7x+glÞ?i3?;eU֓&Of3̟i:sPcDA΅|3̙̹ '>߮>.Gx ȿ +eik^ J;u &ַ|m ͉O/D^藜8}z @Sss{/ME#ǜ0tӆS@_䩾S}NB$':W9}9[yZM2-="-iLa}YN|B~&25HϏ""NڨH#Cᩈcd VrvXhkE +?1c^5zQma& rPzBЃ +:Ċ v$4#>ȉ,9o?ֈ"h +a6ʼni)%IIJK5:)/H'&%&EƦ#RB’E3ެŋ"%IѱI|0))III< 15`)XF(g|kRRRR#bRB%I^PhKVA`7NVZ@8"104/070v6_;7OQPX(*9*!-6 >N1B SY6%oK%$'o2!MAGۭhg[&%&%nj6I $rɱ a!~޾Q+ Dɇ=<~ QqyEW~ʻ/.>x> ~MP\^wUΙ>oϬ{ekvkǽv\_;;5}#.nğ9w̾gnqu-Cm]m}큝?ϑgQ>rIsغԷ|TurmL:@77ndȹ:@lF 0DYD Ӂ}iW)W tqlҵ;s3f7{qMtEpYtQtHE]%]e}C=qِ>i )CЧ\'%紉 繘t:{IadJFjZ=~A +tihjl"ۻhiڤo@*mi6ִH:/[~}ӯ՞>+ɳf. +Y^A]ieKmӉkiC4iSt4ۤc G& R>¶gQqPbnGO^U54׷v4շ7-1_}0Gkø4"jZjZꥅeͿ{?'ڼs:z_UԴ6յ55hm&S!GR7S\V]\R^g~P,̚8rsoI{訲sWt=lwn{fپ M 圳DY"( H*RT + +\SAvz3}NJwPmNIokJvʺJ3Tp;QSU{F67BPI4CϺw_)im{;**۾@w߰T)1pTA +OiX=T*W0z=CJ5nR*{Kq~_۵Φ N RU]_"NA\yMZEo7_[$~_#=+v10EsLyQ2Gr0/` BV`zA="8eaPt;1y%UNEWRUb_|t^;l*dBقNS$p,FyLi:^w_$X4tJr" :8IS)ySD!\gkn-g?I;I?fԌ#NP1T "8z1*s \H`ba'W@YCL%uڟjyΕWKd +:O cEPp Avm^fI hOӶQmpz7?gqY^(Fuf_K'99\WIB;!6;dxɏA-T H{#wwk3G4*`?[/qqM+p6 u̪a#)z\\г-9A {3@#,u9.b~v7$LqYLs:F3“Al}9k)x>7@ +b9ft@M}ڵK@ai端7oU+5۟t],DH{^( O¢jo}4<׿N,cBN!|NXqwGP`8;QAy"h|%<1p7ؓJ>L|y"ؙm"ۼ;Ӳ/ +gLv5ԅ_;4q_K\w s:Ly9l˜6{x!rI#>BTЧϥ3F2s – @OZl0s3&~ +3m20mΘ_XQY1I,]ٔS=}Pļ>ڏlNƙF0FfHO[ ޝ)#?Z Mܬ 賛!) ?2usÓw.;;GtĬ K ?6TSfVL #3R:0pn˘71B;ᙠ) 7a4lWܑc5? jnIˏQ_Yݕ5m폻'[e GeC Y~)- ':_Ĝ'CΓlx^·rAlP!{a=XHP<? 8K;Ci$u<{ :a ?g >ߙ$Od_߾η~uT[sJZcNB69p8K!Oi34: ?/ޗGG}OQ>'IY wG-{ftt!WtCY‹ȵި>r;sX}Ivul٣'V\˞#%`=ПaO8A{wI8iܛfˠ2k5 +_>MZ'-I3?aB a73gF EP&n32ǎ2,?:zЉNuޑ䧙Y/毇4}ҳ+ԓfȼL[l:T0!f Moր{U,4 J;N4Mp)v6:g'Y_OVɇ{Q}a=iCޙ2%?f^ A-2E' F=ktixԘ0[gWWC:%4? Hh~ϱ btŚSvx~V=,aޗV9F51N 2ãFGPFzb&^B#ZБu}?C35t90*԰IJ7L(d"cbxP +BP׏j5I:iZPhy}xutJA@j9iB>,\ +orAbVJE1nv'.9kF--1J*FHT*?0#z +4ܙsO"ҋjo4k +DHmO yҥi>Vy1(Q(_~{[?Nju|ͫ"kthKi{sٗNo]Hnp$jlqՀ=XcuSSeEH-"+>(JѡrlP1g֐@ +*#Oc_w~=A*UH5<Z'4-dl~ZHƔQeLT)\2kt-ר2 kd5ʅlHa&or >ӁyTi=ox^ -8|R#_ϖ /bγ\EαAggg@hC>נh3{R-%Yj*>ˡ3`]ʇAT@1Va=yoCm?ɡ˯^q-Vߋ#_Lkk|-֞T7$>Smlq +k P|\%r.)KX *b# E7L9~t$u7)k9*˾*ǯ%e!WF\tSVvŀlѥ(LdQGs@x",QV[Qg0 OUbNQ,' 5W1UTVT֔U>Aù1<+cLmzLj~~dn^;AhfijʦT`ܫŊO IpC"upC^0FegͶd,~sP3>EY_)9%sVu9Sj4 +>6rc|̢ЙG9ə1YX'Wi nD;& 11#g*taX^a,04rd:?(fr-95Ǎ9jiuoA(- 3@EEjo BǫuJ*X$FlF( Q 0jnPRܠvN=eFEH۴?S(>LCuVgьAt\AGcr Be 20|F<\y"ptTe@cێs y|w}$2#IVMZM80!0|F+EUD SyE$,''SЫGiʫ.OC"Kn6mJr"augN]HK[n}C:ӚS_Ak5GQ_gcW|=R[.,)-"E@r-ɖhMj&[<T:+gC-!ELTSQ/7/xP^^+w`BVIWV[rPo/:{ , +1!D9ajh"t"%7n]7voҝђƑkG]:uy9Cn[:/ 414F@:K2Y?);_u_},oAA]zVw٣NJwt z.kمNğB2ZS++q[s8?5^{>|Ցq`OAvXt:d1@hue ;@au9:>0zgʙ2*|Oi:qWu| #ʚ{el96Ko?}'|[_g^'6 v  "'c@u_ !`*>@4QĔ@?LR!DÁDyۚsvSH%Iˎ»)~wvʫtD5SECUe1@-]*A+,c2D0ŴHj[D~ ϧBӦc\KifmATW:aEvy fPk vJ_ >Lx8|+YmYinyܡD$鑳w;BwDG;&8ʑAS' 6#Zbջ "+[52NrF4>w ;"g bAL~Sase dcR(+y, ApYDtlHmDA vK!2,E\ p`A +#Р.X#{$7{~pHtpQ8ϸ F4B= Sog{{kwMm==eQg'$IgXL~t8 ё :j +tƂLSy `APNA%F r"U==k{|=E+=-Wz% s5YSl_lHJ߱vS*vP==&)83eb E% %R,vwH'gDG3k xǝ 5]i"i,h+Wgq#}c{!,#> o  +Đyh A啭 eM_|u` I# .u*@DA5 ⭏~"̋{y_حW9W/˴XH_d^0E` +' (HAAG$[ɠ $:(#C LgB,XbAܶWyLH1\o?8us? +[Hk&5ْI MF{b#ɑԸ1eOW 381 P' G *l\9SJEᅖBKp%0oMhKmvf;~u!yUs|l MT[cptBA8DvZ~=c776?N V;l||lYS+ &{rBry;R^ά0]it$7ځ$D-RC"P5߲gOgCd<{FKthžΕQ_L 8[>@7ϙ䌵.GAr|i|bL,nPBjE`#Pڅ|lo&n 4Lq*|b׸ :A~5^ @k O ]1Z%\mL**c84yhnqK6s3^qo H;s)](]CaK"S X(3hl9u&&c8*]:ڳճcޮ-{7항{`&/)4r۾8 h{#A(tRGl %-3@#sNhӇ#ӕȰ^{7\ȭ~}1G pri M##+? H/UpVG(h"J1-*a777_N%^e}*%\^/,#ZER[lD-%UQUdt;Ky]"7=ֽ_ +X88ey_[On.lJ )d8RS^>͝fGZ=m[R'` +2*/"N^l˚6S G- UtHMXcy/a.hV%,NTY*DmtL ]LEsgwH{#A*ϔW:1%P@怞~/{X7Kչgm{zwxK‡cD3HK(c#5 o&뜙OLZ!1aA欺9۸3vN+&ODkpN`A [nMb RRSh +Ƃp.F`]i%u/.;扂XL%It!TY`Ap 4nVg +&|"[6ݻѯqd {IiG.ޒ5Jw^1o +B kWLĉ-лi_g뽻7x}'.`Wﶽ=ȝѲ3}VAAٍ-=C~$ µ@Z^}Md`rȾM68鳼;|^0j:XB̌Sn 9s?ɧ%5{o.@r]YwyE4IruGKTsULB%WN ,ad rw:Eꚃ=M{ϳe(AS%>s4_wWǡ*bA%TT1Y0C3ɼ%qfmAT o."4+FtGh o6xl]׵gyݹco==;BsN~:4|vXj\H19 @}\c p! b>L-ðQ.žW1_jVhK 0 Gh) ۖ +Q8pd7;K hW 䲁:J&Dic`DA4t{>l|g~=?}{uokg7zwnڹgWW,Pv ܺb7^(i3ox#A,:BNF +{g(m!C-޽}z6llߣ|:6x?{zHZ24d^)j)vRO.iB1\Lmy֣/otkb#7Fv8{wGHv„NId,Bf4v:A$=;G`AT:_ya7I$KmRJ*,N3_fP;3&*_f׺> vg6'O1e:GBMC7 M b!|M4IʆałpR%ײI5H5PEƕ[@D9(Ee[⚂ؕ3),SjK*[t-VHO;I4wMq5|V圛(D ]L Κ(7oO%cۂvSջwO&΍OͫgWvϞ_IEHsNun.!4VZol9J;8眰A8(ҝ=AtBXHSܴ J>%>8geKxA\J3p hy$* !{ѳA<2䕍5zOᆳ>M>]qo B /6qx\9Ԡr6ɵbSD|`R;1`; h?54L쉐)տG٧{Ӎ>?Zٳ٫{g/L/ =sJ;v-](c +"%e*sdqbo{#FJ6vlyޭ_%ѽOKZ2 Bf%rA|OUVGͷ7\k#` #/ +p > 33mip8v{,=- 0v!pX"E;pRLD)x"ܖJ3Gn_{|qeԚ/ 漏1 V+5- #Š&[Z;41'tR x$聩Ծ#Ď57)L]5;ŔڢAYB#NH(eK%V/Pm*ZU%NAH )! ?k 9c}#A%1|3368^47wop`4<= >Ҕ=AI`;X͒ATazSAIr go4uTfgç +euIk[|5`ozޒ<7ן{3Ŵ(?`~1G惆n$r|AUL0F6uHf[4Q/90<0vO~RP{Vˏo>çQ?m{\{ +ދE?~LuS)ē$!"+ޑѸ;ݞN?9IÓ ivpl[zhebྙKobS6(OwSِ?dǺ !ߕfܔ9AVhmG+ZE;,lXKNRF41`dz`,V;`X SkDb%*fC1~Is[ 2G *DL-@ΨGRc/Ąe' _NǗSn'"|M[cf7DM^%΍rsvAEWU\Q}xqy>t/Be_={v5'D㲃KvOJq&~ >tv fi*jJP^&Wke+$L#,js.Ap+ᾜ]CPFA B2lA);C>Z\+R2;ƞCjz9ݽ?Ju?}ӻ;Lr栻At !Ata|Nt* +kdՓ xC9ZG{k/˯x~*P]IuoD}{a?n׷?VzKâfr2}(!2w x-\}գ~idIjKɯ/F`r ~g + + ""zaݭƛWD6:.== 9:T)ncAI⚇X?wDf=܎ &TϧCi@MphBE9u>*ej3ѫbԐu}ёsё}g4D$Ղ Rf)mi*6(O>ǺoW[_HY2ݼ%{SvfOlp$5A25 .h^Hix6Z mS|R +"Okz& 9H&6<;=yjK~MA$l{YţJGtUEUr1xA=ƑPe j3\;hO7x!K40lb%XA'8c 9eAk\3fDOlԽFee% TICz@vB65Id\kR֯sNDn-սKů )w;iga i(7>k3 ٚ&a9\ p7Bߋ‡I q:i$1:AЫ-G ٛ7Z*旖؁[CJ;kdAD +7A)5odNj Bm Fq8/zpŏ۷oo,"$` %3u@58{3J RErlB3O%⚞]{7ٶ?{J1_4LCl@Bo7"Z5 M =x?%(}*K{dq]OXJK)ٶ_,Br|e| 0v,M120,fqݽJ[ov7\yQY%T^.Xʢ b SpgZ#^ ֗ BW^f\ +ZŠV!V_ d\@f3[9ld_2[ j +6=:=uf{)μO~ iӉ-fSKx4-Ύ#<|r=& +X bȧ7M, 4 hzDp:45qrKk1 {;TpJ op"ܼ`ET[t0ZT&V1I4a.4|L>!QL ,!< buRbp: B% ?ޒX(D"̜`)Tf@M+F1A93W1}( ` bZ{ +%V̒;@U\)&~IQ +!`;+{z)oihx B!qtzN(X R kn; ]haqg-p+퀺;'AOT4ZAOùyB0$ +Yl|S4.*LO`%be䣴OOGwF˶C7cAxRA.1ds_$?i} +r @Sx?@tLY }tZ%J!?JG!#Q +7dZR! @)NA?=ۗ +b\* +98b 4 +·[oXBG !;Pxʏ8W}*s{DQ$4oWb#7c!A %l M: #j5`Ps nbB\?$04nikw bji{Rsݧr@Є:7\A'f%wiU?PoڿL#7%YO ɸPj q^ yq44, u&8>Kv@3 eHk2[V.jfp^$Wѱlyˌͱ3[ k bvCdx!Gshq ީͣ51e*^9a"K5Tr[T)T +H('bKQMLFLl~>$d#nj"uѤs.xǪS=ޑ-Ĉ{TŠM T̐%83gGef娵$@.8TyjpkՄuX B!㱺`vpR2b+NC? :ۗiԦD :f G$6*asPJB9,.ԀQ5D MhN$[Cv3dM)f)\Δٍѳ^'1sSa\lX4#0a֓kPS`A@Y+*&ZJ;>ė1Ŗs&ݩ3ۢ& v Ah:'y\[\)$ҼA~ P2g F9f 2 bA7 AMpgl1圂``APaA( &Lk=Պp| \4v!QNA O b@4QhE[Bּe&A+ +Ap4Ả$ +brX G)N : aU5H>Ak(evp;F,NDK^]V4^ vv T>@@gqy b .` G vlAQDOXoOl +"znwz*ͺ Pjv/:)ŗ hZeHB^@@ԐTIT\ SDE'- sSfMm +c䟂Q:d7(u֩ bU;KtDA(0=EnȄǏ>8#J;A0/гr)oF^V+"+ӲZ@(  غu$511<൬Kn+ZvV3n!r +WH A˔fn c3JG)K{ok-E/% MQz23HbRBNAh|[WP ?^bo,L)| X=aNrxVt 5 7; @ = ,A$*~ܑb>=xoxsA\D "A\yQQP UL ̦W'@8*ڒRka{&HAH(s.9]v8r՞{~`;zU%Y3[DpJ5)cBS'I#/[6DmI0%P~w;DmW1y*Fc^IN" Fkf5Ś}sъ⅋lE&"}jeZ،&.Ma+ظ6<rʼqOa;83lZ{Sz*"JR\)ūv70qeL|PF'SITJ%JA48Dphvo΄ѓtoA i*֭coS\aAeX{Afx\8`yK\ٛUO9 U+i.CPQ\ b`s7AL.~Q()ע!jX5pp7tUXVD2Kcua ),gp! Fj}JsڙHZE`(̏bk ~q.ߑxtH jC{oi/Ā]E7]{SAłt#QA, +?ݩ  jK$ZAl@JN;$sj-՞)pAn 5`sڏ^8Gh20nOi@y +T:}ؼ;ۼ=Ͱ9vn}ܦ8c|1__(􋝿,ܚVJ5oܛKDsWpwRMvbM!dQRф*q"{pj2F&o.dI#z]is[!Ɖc׬boq*b#وQ1IB t,oW +?XF%S)Tj%VE -D\ ]h ?c9m +:i +8j=87}rWԶ~}7 +^ԽU1ב L1|p;t oru}XD/^/ԯ"W +"1)[~c$a;V*t W6 b-Tg +w-j]D>f! p"@6 N|1o/awVJw"KRΩnG]\8Wr=q$7,{s +ª'mӴrLXr&mG@WD,)W|]5VAhxYzQ AY*A 9!_a7GU=kP~ϵ{e^X +˄DA H^^]>A ZO WZ@ = +dn. H~ءww@PYV +" ^W;DCw(;]|?IRMĖI +:1iHmq_ +^@оVq[[^tv-u۱Ǯr.j2zQ":p{԰'EikqcܟB>1)-?Ax|ǖ5ܮTqDDZUa5 ֔Zk2%Cf>EƂPqn!3:*& 3āS}G ^9fw$m<|f> &Ad! Rt"v~Y.fbgUJDBd2VEW1itrPf+6ΛMA' G}sf=3v%M숙1!tO_FXjtF#hD@;\xW8oAxx|Ï~#q #`ֲ*26K7#;S7ΐA^i +/juACBr)(t  :aAha c3jiR !vp^l)aPm ΀{! I=8jXҙPZno=Ѭ)#kKJ-E\ [*@C#lVADyA$ 8Ƨ8IA~//.I ]3A h ^p҇%K3q]٢4N8I>IsĉY U*leK23؎Q%KR1nޅ_xs]U977ص#KKU֜ &c>A\~ D+O!1A&Ͽz6^ѕ2WWAt +o]#/B\ d#9RI\up?[m&rWxb ֬!Nf P!؋M 5 s}ـ+`ȗtŎ&1}.pvAF^k71M P0.3sfvu-Xp=rT+&y +247 T\{;&6q`t0wxVs̚őW8E|`-{se5A !Av)pX:b1h +,̨8A,#E wя:MA+F蘣{ϛ8 hl`-1 F%$~; ^-A7rWasqwıõ>жiASTkDй +j:?s*KyA\{}0 "<(gh^@%8fMZÅY򯣭ʙQF%$6 بJ\C ps_XdgƼ+lE6L1*APaՄOn lYuoaOޯDp)3)iS !#1,"a,sl9c6p֘ )x,CH.jRUCM/!',0;CN-Q bvwD`GgL@ *<ּ ʑ , zf"Ie U2TEڥ$/鏥kP7> za֒6^%G׮y7KN1"AI-x /,☸i +@qIOڧ;j$'3'킸Tz n,qe B[%.x{Ȏ~_lD9 P/rL7؁_jE|k-Q5?\3g]Fs`؜pC1DPŸg?ð;^5R3^t +>mN;;oDDb-BE; A\u⪭ອSkSKg-hE +o +}pAƤf6YGא`:*" ߟ"VoZU>$|28Ā&'L)'4iL@:#|8d.‚2N3'Trt; +UUt;BKq@XNSS쌒o o m * ^m`LiZ.7; +Bj/ëbE5(iWAزr*=ּ~Ert63?L-h# kIo:[y|Y:=ecHQ08L ax)ٜ lcjLHas֑ ?MZ\5'l~3W) bx%ATqݺcFq$ G@GW1b@%Z(jbL"A0 ίY^wpE +(GkL0=ç+^/wAn0;}S5!"hScGC|.CDGm$5ء1.Mhv[OyA\E1  <ʻCM:;ug /Cg/lE_ۊ@7ö-_Y~a;d_1g\DGObQZhD|36P9wkkvQ!_GkCz]"NhfϺd˾QW,E77E7+LeU8r+Fc| #"&AQGj20;ߗ!t8w.vkG LRlL=aN=H;iJA8ɦf3h9ݟSO)'&*8@5\PAVT q..EŘO!'OD d !~ۯ]Ù(I421T_|$ib!=2{0<<pq*<%5] ,[foe dYZFk\-~Yi-Xzۤف| !A%KV#LBRZS~|aWà)w.Ap}37f\/*#σ KJr? /.XQ.iNޠBJ`,j/?Ƿ` fuPrn:Ǝ mA RV zu-ZDʂ+č[Oo UxnGW{zFKWA "f(:D`1}8ACs7?[(A|aa-Z+sW¯LE_ /L4n!1l=fjZ2(&`cD6q-q [B{-_Q6K9:%p -d6;rXrbШUS5SucoT |Nl'gj#TH8Qq(U7I+ +y t4^XXwLR#lL9R0;0`S&&N$v +%ROȔdR3H#cZP!R/.O:4B"r<ayx,'K _g}gqh z^${9.3A9# P1 eJ[-i{EcchysOAM2 '@ b6۸_84i̧9ؕڗr&״̒H~^$#|n4J1cVjDz~/Wh}QWs|Q*T9#kbcP78^vaZ~vX9σ +MRs(Cs,I~8 A 8≄v AGü &{POam@pgRqnj{?p +9)& 6DCZ $xrA}vㅂ݂qM'.=߮hWPg^Dhvޒ{͖wU[+pq\r_X +Q``̻Ƚn5d]6_@sO6 aLX Y5 ÙTÞxHÎxC\{s͚߾О} +,%-"n *;zpWL9W¤\^yAUD)NH##ɰ#\TFr2ԎdxHPHW"PI lr#(jJLJ3h+rGf<ȸ$S"a2& W+(Ї Q;U'F=REϙ8 hs2j"3ᥖa3Eu/)nsa?̙d{ ϠU))(.g:٬:j9~pA +[&ѺDo4/>Dgj)+a([IYǚ{wRRFg)cQCxźl|[NfRiEFg%vX\rBH](kѓrAT7C#qԃ#7rdıw"eN9gV:d?k9crVa>xֽ+ LuZ !/cЖ YԑSZVnzб I겆ޛA ;`OxAh&!|dO1Ac<{ӵk"AEOۦIzܴ| u8/ʽ!;M{bVA쀚ηWУkѶWvh>M2s.]SL 4]. hexE< RA@Ȼya S@3-h@~) _EښwSW ͻa\:51uB5:A l9&4pmb ^WSUtH%#ChE|91(XD@aeؑ= n?֬Y>[ ~)*ٟ O2//fp~-3.\ư*|~N;GeRPg&HE7@@U冠CP1T KA$/q1NngfGfsvK*|,M>fJi24R=1H9 &Jn{߀uDt y0t(T f}2 + +ADX9\JQmm CVqęwn.5;X[g + i#wCϤ0JtdmeA0$Xυes +eVcse7<|Z/J\IcTCF Q0#A(9AyAԣuo)%5sxl6 }2Riǒ7d1|}(dn/T$!Tm.n^V1eS$ o}uoDH&Iǘa8A@Ì@B%Rp=7BʂH]. :a |GyAZt^[ bgQ#' ( {5A~; Az$mCrK֙.]Wpnӵo>.q˖K_>ʂx 8bþvMk@]1Dg FB&ޘqΖwm!Ƴ{}̒uŜuB#Upͼ̦_d.0ؔli&DG#5 .eTP dxlI8iA tb[#u1Au$>ڝ~k @>H/xA)\wxY0mn>.A #rUA9Om͔+ '(A $f{B[JVr\X JB :v\w?_/*'1 ,;C+F5B5TPQz &}J:gxbZ*F nTj 5Um aRLTl@X:|25T p8E坮AӑGhbgtK`O $ h6-;0yOrsmh +f]w J'ge^Ѡ=q|fi}3;8-vA/ˁ 2xA0NAШNr;Lv`OF8 +rA0+ ͘I 4ucҦ Y2Qb|A -Y*qn_!A!ҷ'?nD;/[ ق +YlZX$4#,g)gI͉L 'P8 wϽ)/&F3DUтR, + AexQ?K9g`Rt;4;54[b5 ~` h'4O1Yov&4 +3{i >ⅈZ2?}s1lg7W i072隝ъ--!OʍU7>]qJL$#@%^!"0q^\ڰ +]Xe@{!`CP! WBOI @t +uN08F*M#dL==o'5Eİ;{hGs.Y ~*ʅE9ޘitѸdr/nDz|OjpavD+ xuAhwưHRS?F މ&]]q]tYl R@= ہq0!O&BA<AoO\{.[̋o/ +&"F4e0ȏ:FFxA4:c9g#LH\I *2& *5J(}@8,%oؗ(VoQGRě{n2}]ùڐJ* +%:<ª,ѓ%5 bHa TL(d|r9O6敥;VʈX1cH%"dŶHe`.RJ p@! 67]H&TRDEBE : pPPp +?LSraBJ ɊsBg6 +f?n@g.n؏0kv$x/W$#7QPBAHjp%Q̝1>3ݯ9qpv'g=87}c|gܒ󎸣-nUG[1[I PB 7Jc^;ϕDZ"߁ cQh^ 'JzI$O?O~?h?U!2|!y!Ga, Α ]"YEWL +blQ:'+  3ZtO=<^y@]Ü Іq{T=wwsG9znquA|㰫vӋي5i;%)j ^w +G+ӃQ{ Et7f]4ze ^yqUGF"`]O!{G+]'2; )A)TJ1%<`֯ꙤIg Ģ " 6Ǩ/N7 +gO3YA ]}\|  =YB+ ^ o /ϡ,; ]M\p E +.cMGr+DlH$tUAHmٝ(u}+" :H# + _jguiZ4Wpp(Y898ӅWё4ܴ=bİs 5K@9n9}wW(gĊgc;OϒyTHCR8̲.%]p۬rApȾQrhQgIJ ~o%&Fj,30mہua-z);8/& %8')yEYDJ1@v bGxDTO(7 epA=J79A,Vg[* z1N8\DPPHgאf4ql؇y;p2n]XyXnP!A%/_uĵ:@"-燇C+ "n 2/ ]Iz\Ch :^ ;ID=^GdXVKkP.DŔ?/| 0\>I>| +ARQi{.ZmPCܖhL?dv%fiE=D!C&Y"aBF jr,O;]{#A'_WQ59>$q10" 3夑#nA8rfim9%6DG- -.OrI(jpx)A0K;mޛD//n';ZA I8k8 wKMXSUujoDGǡ cAP| V /+[N;D9)&Nk_{m]hh$F-eA A2K+ +рJ-fD}Mh&?@=E)To b=J+w؋JtKHYIV , +BA\DNA#3.ReYd+W,S$9: gp/GZN7X["P~=r.SLA$IVsݔXo/X}Ӳ`_ldͤ@h\L*L %ΟRhd^;ħ7%yUC0pD`PzIO;mCnu?WZ9dih@AuoznL#OhGwZft(+F; b:?(H +1:rkdqS{Knϭs Zg!'ڣ;)IW'ljhlll:~X{^EKDjo䐨#z Q_$2i^UKES[yӓ:*:]88b ezu-sExer F&Wгr1t-ҁ NA,D+Ы ¥b%{G)>ŤنQ <+t+ 6PrnzV,YAjj5 AX'N.ē>7kZ6<*mx\^ZQߖW(2 |wk=p!'wf?(=qѶ҆ړ׾xԥ{vY4.eU_z!@q9hhMsKG?*k)k-z";;^7y8? /*=Aq=E5Eu5'گ~%yԩjw$ k RM2=c~׃[Gc6=.{X\qY-ǂX.GEg+}XXqaꦶ˟oWpA9$U+ znDc[){qq#}$$5D~ +)'"k) bUI4D 8!"zZ\Gs-:U aulPK2ᵬ 'A_k4"Ad`t;$c_< + +"Q W"$XH!  ( A +j` 8ŘBJbb\\NE!oDTY>Dr+'Aؓ tH=nJZ*0 +%tZ\eCIkPA50}=\ r*SÆ` ]Q2 4Iچlc Wm'Cz3[+WXaȶM{ީns +"hx|¤<* Y^,qfn + +AwR- +bEs.Zz(԰LTWA8Jy.(&Ȩ^WA)ڄw=#Gv8;zn6 ^ɏBo;ָ(zՀ '+]!q?y?:qp}oc'>mBP\ً[4+3od!G5Mmdh bqshℊ@Vxp}ܥ>s;4GG#y> Fzt@{6R7 52G\#=K~tX˝dz Bŝr1I +A<(\{돎 +ƒ@'s=IluàEtQ3!GpQAT#D(DLh WEUƐjchI\g?jlD5G7 zhM81h iAG6xr)&$洳gng`*trB2LTi 4h +gP`5b8T RRTFQrZ\΄!%Z +OJ6) ." {c5"CʏbJVl Ux5AH=@(^Qgq9p^! ,<,.$UTL| "B\JCKI$ծHf'AsI7WĹNA2hǟD:k1#ݦM-݊v}(x//]®n/!3WpQ!uNAu谾yâ W<<> *a}9F(7p P wxQ ف+C¨!ѸWOY S< &!PI%uFP@5䈹8P%4j!>QԤ̨IZ=Ah(AV٫3HCC/]=puTmxz 9F1$ke B:,w~!DP>-ȣs),7$HL'L6 n U"|(Tzio|K̾9$o/C헩!2u~Z4WRiLtӁW;M瓮e ~ 2 L7"W;EjLP Q]rK7?GO bLc,yt<2m6v++:C$E{08,A +x]O;/>e4=tMݨP/J̲s`y=m-XsN~LI,+`|nUSih<4ii`~8tƫqgY {:ǨQgՔR00~dkI9/?'L655?DgU&UXq\H`#D03t{x: 1bRNI.1Br;8b`-j6!7NqoL$B=W7@v `|+9(8Aq{ %^!}ЭU?h@oy}16G+0 >^} {@O# 'T,D3V&[z4 ҿzTpzMu +MzƷW6i5c_֧Џΐ cRagoxy可(hRbQg5@tO^5R5uk$Zx'+j[>m1`{ukD3Oڃ)!hX*;Z+ +t;#;5C[EMsIqj}ΔmañCCIjbž8WSUQF(jO +5RomŊmb&Rlʷ6MmuWpdžUSL篞:}b BjC̚3GZ>!@AJx 4|^E3EuO=SD$L3VG[1Q삢YiAIr_vAp@]ip +7t7q؁#\1tKto:yjJNkH3峖T@ Aq)=c:ME-L(`3fg ;.guB>0@9;HCxǰ}f ?OH5aDQhuoD Y| ;(\K^ڶ_8'x`wP߾Ё'M>:OAKBcBԤXk~ h:FqUޑ-݁ ?$ǭe +lȐcOAPHm~A Z߼: AKGi` +؇s#q7 ه2 *oh >-}DkWѧ:0׿~hLnù;͗^;]׿kA|"KvAzo|y_wK$I$Á4gC7 / ,p&q8eؾ4loC'7}p۝ǣ5)M?NHo">|oF ] ?:X87V{0 }l@`P8#ý +DbwrGg{j[4tOOԻb;@]QM-abŦP&OB?bCb%s%U´c{eH[} =qrx;펕QRToTmP.m{tkf̦i$( 2UvOo];H|lT㼖o>fkkQ)3%7'ڰLt}-}/ldd5r777dHYvlDVJi/KL +$su< QkDMX -Cg#ÞX`e@.AÂf#{B,mh:r5:=ڡ1RAkӥ_޿ }#ėw: IxY{A| x*W^!8x޽џ+ړ$R5^tP?Ep0{˴<{R5@;E+;Y/U 쁗I]]ͮD@=N)FqGbU>&~};1gnF^SԻ+JлKOHLVLVub|B'^+V1bGmgglWtgtȀmma-ُC> Bȿpf7MΝ 3{bfBkcp1ҽ12`wlglG|å٭agOo&3-tf+hbpCA燂[xsC^Y菉vS~;&gFaqHrfPاc<~~洢| 5g5gGNINjț|l064MAN MS#1I`3rK^X’iaEKu)[Jw$s+L A#? n/L8?ix:J~g啵7x+1)M22(Yrx G Mn5@RI{5k ƨ@&? CƑfV ,T5"A@=87.iĨ)ap +GL^NcGkO՞՝64iV-2WՄlhSҲƙsuث|:w k{4CD90OΒj̄l5<аN 41950A$dcDTCtͻgIkN4T7T5VHLe,OJ+NΕ5Nhm8?qne׀"g%$в[k~o c:Xa1 qC騝QC曟' U7iUCSfgTؙ8nLY#GL\ITs㗿yЭ|2o:4 >}oatkX=cQ֫~2p a$=~ҸDݻ5QDlAݘK]E>mLJNN$dbObw+ۙ_nW ;55pEdGDk>#lÈͱ +R:OJ~w>t[tDD#ϴKHFҝ]Q+ bW4쌂r;dG$c0Vma9Uʣ"gJ! 8O>e\͸mXӣ)2zrv쎰ҝ29#\~xlm ݌-;<-R`p?>(xd_:Y}ճ.9iTLi`#`֚85N;QZ)a0J,cV2Ӭ̪P[cӿ ̿rrK_Y;o||j`Vf4̔85ct41ML0T@L#3SR?fyJLʩI);-5KfΤtBiyNJ \ UQjgGL:Q +0!8 c)s(7 0ˌ2zj5ΚrZkS6LC.T4yyeݺ"cz&AZ6I6 ԔDP2ML )[dg㙡Fgf(>{ G/26'izvkh a15A}7CcAZfaFCM( 2|RFO vsԊQ'30d+9qU~İ#^QG0HQF>>/o|Ppn`nCtC# Ά@ن@9QC? `vkĬo:[xuaF^lVb0YpT˒0.gtpw1h+Уr@^b *͉У_p//~ m[RӋ׮o%+D2<Jr@K0c 0f;"ڂDZtcF!j* *!iZgJͯ^6)7,y7QHB0PFWpʌSVa`j -¢'\MD༾[Gj}o Yrr2>*4w t%ɹ !IH$C$Hxx qs%|3dŲS#SGY\p =3Yy53y8O`b}Fhaf XQ[ @硳%(˿H;`|6OlZ&1E0`'uFe{{ƚ1ƈZȵJ4- I-,NpNX,N'v h00%؅g&hi.<JH3 &R$ok+oZIf=ocleFŮQS`is& 7Lax ZIS!zW-X͠'aTX{b.hT`QVh$pKiBh¤%E֎Pp=6EA!jg)LC#a<$,crS瀱Z߮?h8s" ~G};|F,L| Auwc* ɿ-)0#AAYec@O?O_[pO> 퇀~ +HH/}[_f6N^ok_Y/[6l>r7 N| # +~ +ͺ-JIC`-oq7}coZ[/{ԕ6zcC*523dR&3$LݸWI%Z{ظ @*%}I(ƽjn;{>,owΣsg#2NEd%y0"({&(–_ubg3KeUI.*$qQNt:.|bo=Ԧ'?o~MϿOuϾ{uOyh;˓~?skI~m?O`/ox=~fݟlx .X~M??nz/[/{uOeSϯHϾg`gOx7xv6?yy k6sݣǟ_6?<Ͼ83^~̛|=-$"?oϯUsYu箽/^EGTNP;1S"*BcWho\jBXJuLEb׸&upFbJoԛZq}tf<,^o:ur8gR&N`\M+vf&l*4ߊ|"ǡU$2'z/~i"\tER +W/{ɄkLWި*,Y6aMzy1#yN̂ьu +_)ĔcJmz'~I|6EK|co +w @=JAC(8Ho󐢃nsnyOZAޗ{ rނ`,AƃPc8`3w`|sG&wrFF +ee=b_*ç?qҽϺ?AX4w|ѶKRPG_7}_xuG/'q1c>Zc}8"8* +8Rd '_Sp^ du"5꓿Fz3׸iACK_r/EZKp/~1 ^?#K'^ +?*Ka'O}v_rk"5\腈rͧ^|rՖB +y縷w_K!G_ +ygUQ`Cz{7 +!z-^r+GG =ӫCNr|uA>^Ë-^d%KnbٿK-[eKyXG/}tђ勖XQBٵ`>tѢ\d18ƥKo GQΟ.^p"p}1DGC~νĒe$\Õ 4K%`L*[~SJn-[ ѥB ؚ\nM2ok׭ߔHO9\>& p$B}+\^6p1.᰸\&%qJ"<~dժ2SRy,:5LJcxl + r .9frZVKA vxO/G$ӓi[!>D_ p+l]pldS34:;Ga <*2*9A{,.|#N[| :;熅2Xt5b_/v[A ع{nd~+Zh9(;kǿV^tlwfwfʎ^/Qq?VfʏM;]ztw!wAWA7U*pyUp&p:%^;>dxW Ɉc['TrJwu%\`Yp}gW~AH:(vs8{ ^W`LA/'>=' +xxܝv~;ȆmS)݃An̞DN;ێ9;p]f٘F +es_PRXTZU[CA1 ˇF%HoeH,#CaqPHΑ/ӟ\M2XwiiB參=x#HfŌ ˆ܊xpX<0$}|/%dC;DE_]C_W_,  0002B2(߽3C#}#=p}F$/ Ǘ>-=w!ȰpZvޫ={z}a 꽅Aqho\k~8E׿)?+|A wy,Rݤ ZM +" Rļz9Uz3(>:ig3 Lht@bX.H"F-s`'^gXӷHҠ&_kKT[jsR.hdDG Ͻ 'BZc7 4;|Br^i&I + Z{V;؀j/iUV?@ҪnTS*ɸTfkW6k9Q/vOF%H-7RJLbL+$YJGJ#ґ\iWؒʭI%r3 XjN*1}$ňbH+4P J; zG~{SsSs۞}mʼnq]Lu{ꙶxz!Wn+3Ėbʌ1XPk| =`/cJ1"ctB)cD"LyF^Id(J[R.ٜh#'ǟ{!xGe 3t®'ry\CB<|< !2#B}v½B-f Oʼn%RSVhs0* @)P UMX6"\B}%2BC@.DX$4[GOF@$^Bj3G=VG< PFdKk=Ckrd$hp z;ـi@oN`nhh*Rs@͛7uvKZhl?leFg6V67:F 6:u'}G h#) utfNZ1h@3gN/CX\Km~ȃhn4 bA79} ,g̸?Ǽ}3G&zZ1ќbMm-I,:XgX3FʹZ JR-@=iQ/&e9‚c)5G#MEfJ-ęQJ6'[XǞx[Wi_dnw,&ejj>i%€V* J$ҖPa3ƗsMFCLc)1hUd,Їkӫ1B-ϔZb5nH/6ßY|2LXiH@?jJHt %DMH/͢Cb m Dk" 0j O +UL U(N#HK+UVk +r{v8tr2'k8'q=1 +1sL: \퐩as7\2[FbDLY5_'?,n+SXR9(0X?l){RqsLC(h\e+h`|v?RݷPC$Z<5oj7ا@ +LœY&XGHmbcTnU9;2ɪiYlE[%”0$!- @ʔJm P˷ d[d!mHnNnJlLݐ,Zِ8$LJWDdJc8%y*,h~Kz Ɯ\dP%%"ӥ8)$"]69M ېQxI. Ss HoJ݌D'oLP`@7H:C)ԱTyD֜,;w_z=bVN8}lϩs] }tV ط2.JOh39=\;<#rvؙm#` :\p2Z"n;2v 6KHkS[mI5֤jKb5N!e)V3Ox_+|c=4Rn4vn"ՖdhF=Gd:7u dXSjmVeUJH@%5ҫL*c|^'Z9]Y-KJ H4{;FB$UYJsbccʌT?J)F_+i`W+Sǔus?0G xoBO(tN9֋LK48ej7 Tn5SN!t ቻ1'PTSeCcĝPCr92o6Lz-%SXZ;/xK8ޡ31m$C +2ShrC$HSJrZ9 c^ 64n YI˼ Ǡ62ikJ]cP_n A2XaE|4+\򏒌S HF`Xf'~Oj"",70j`ݘ~hB+ј&sΡH +%b#@LFxLX>Dbd4w"3#k,5m ŭC!jQ3eLIh,PVG-Xg~eK<ڔ +&ċd<5GMFrƁ( ia#L!B2i@HxsPtP ɜY`O_<P!JҬd=:ij!1 {WuGԑA9di,j["0yJ+낂eq8}Cfc{& X*Ljppc\HXb _='1Wc>/I `_z%9RdZ*tum<$p!IH + tG;G#Ā TÀ:<%S\{Fb|iJӤifp,3NɟH=yj[R.>WU'iJN&$G/ V%Sq-"6{Oƣc\EGΕqealiK% c+?nuTP}.~WZ@N2(7XX<|SnΩsg[uU\6l@bUJ?1qSq8D,EE[ŒEY0!\Gs߽wώb l=sAx*ꭔsOszӑ_?_ϭ +%`L ;~Mc~^7}oˉ5 aﰳ۳ZAt,L)[]"~|[^}n):b595XEGr9y.ksk v\:dpp;8\Vɫll+ђ͒[5IZէmsuۜJkrQy⧶s?J $˄dٞ_Ad5Y-nfOF=$˽/Ӝ=U~2uɓvuL1jAt!FӽU38$ZV`ϯegxR+L3z6'c=ڿ | D+Ó}` : L x#p`?H{]8b'qp6Vdl47RkuSz]+O~%{J5YD5'{t"x\]nN7a`Ă;PCp`ܐ_)ga4!HjLުW+Lus'èsRʭnpmN7~-gQK"Ad9ٙ A[YNf q@M8iG vpF8ƴZCj>2 +}bZ2A)+s {R׾лP׀ dJbPf^tkR~qQvo{tnhuzn8=/#oec;B=Z VtȓQL(@圿^|Uubf_Ȍp/R4og&^PᅋmS^G[ fQgJߪCPK U9 EfjjO8Ssx A8mV@dحxp$:}p0} bdyH\ fHէT+uJ-D$T({BӻƑ PڠIy_r䄴}@QE~[Mj`8Q M{]tAoe[o9KTue 5T5J,P)ITܡx4+>OK+ A F&v-z$T'#$)l-DmA@hd =//Nwz{#?PRO9OKuF%zPbn*3Pjcv [6$㜂ɐ&(HuvNȬ%B=@-4b ac~re;U4E!A$p˓Es%lPxh(CT8F1EkCrF"TmF$.{2rzWf- l%S9zjL'M6A:B== +##AH٣̡TqH|nA\|G>}30] />q3?>qЗM?ky/o&]zzj Wfo:;u)>~=4Au tΡ\48!!5!psg&vgjj5f6RkLRPrD(;o=W(_q; +N'W٣Lg-g=QtSpxZtۍ҇=ӂ3pwfnb { + '5഑٭6V (ܦϬצn+\7^f5ĕ3-Vn;d7}茬M*lw)|qFjF0fɬ7eAOѦVkRj4j-XWݣ p5v$ӻҜJ)`8>3r9,kK|&JzZf`;4;;P|-P7!Pu@fÂ{L.P\bAjv@M%wĭvqp' rSku߃ \|v@ӳKr o+b6a#v%P{H;qP ؐzpeyLT&r )(mm oޒ؝+v^A\Lر' {GqBmi}ȖLyPX%+D+S +t"D +;`u~@(i9SIh"Aϖe|Iw$9FI)Լϟ[C}fMK(SYaZġ8-OTO-1<0!S@C˃ॎMp +;`d Ha2$h4g8= Mڐ<ӄ;N}޹|@ +ħ]$`@WIAq2AruLӠX+0jrp +G9L {luiё#3yG H0N">\}N>B%ٻlv+j32ZBsLQz≧-\D+mD~K0BQow qC=ܝPڻA }MyދZ.W6tyG;p&L5tmڴz)&W?5 J(0nkiufV3ς>w|0[L7{i܅ judy3je5Z 63v$ZuZ6@-F +…"o˒o\BXY.v;&#aaa!i6P6z7кRow*>yfPcA9ltX`8[oR7I|- +Z1RdȘXvS$hD?<-5WCK "g"R$dˀli O5%yxmH@s⃂&Td؊76#c J - 9x[H5vH,013`$X~s_#8R@ǓpG9CAD}-q\IW?E=-"]Bێ.iMzX#3L罃q5} ;}v>hC! <dMJ[T%ٷ6I]W7/Ov)v%23*+K,vY|Fp׀[[1pk(1W7a0kG@v;@-@9:(cAQdxl^I!@;i8RGQ|gAtsbk\˅+Q۽ ۽v%IfTv?k!s W,WASWw ^Y,MRP!MI,2RKR g4&|5T"4y\ebdb@4![=` mJx#a 'NO(A ZC2}SZt:u"=e I|cb!1&H^/ U4F8h g$=g B럳w&qt |A AuG6 f(Eg#M`A9Gxa݊p̜V#IϬdlեTPnwQa<[yԭ֬&P bp #,q< A}"$vkwdj41z="FRO4C&3$ķ̞ަmzB6']ٜta k(Jw4+WpvR 4PEK ij Pv}}8 $^"l*AqϨsg7\j]Ҿ@>؁4[#`GZoP]AFv8/12b<[=a]!IW7'}1vSE%D%vј=Ut&;\42d4a4UD_[Ga5x! 6%x^bHThہDR6)_NShܱU$$XH$g( Ax/q=Rrd `%{ lo3Jl Y?[p9)6&&gn}mC`پt @;@iPY [s.3iEsҷYi%-<&FӜ^7h@fTǂG{)'wώ lV“ P;;& v٘UojWPKs0W:@s7 5qh1nDӂjMH rMYM1T+19ꍌsO

i19o{Cbhk cGq xH<3 +@a91&1QrAz86l ۔&P#c-5pI!!|!V} +d{< ˦Z{'M"ޖ%\EG; !/Wf 'u+J pY㠘Ux5zYֻЕwO^k}N%Z&I۽1Z< p߀82h:`; UWGxJ fKزo\A+yd( A\-GJIX$3e:Dt_s8I_L0!K)mJ +\Gd D5P5u.  z܁*RD*,)> +㊣bĖqiAtކO;Aǐ ~@8%ROŸMؔT[<9g{Ž8DvI! Pw"-g%g9%v@DPkzVjn;̩yɷ=􉰗f6lz2Aڽs8;4Zi-.iCvLȎioNH@~;h˜; N)Qg tٚ9b +(ʜABcY3‚@l_; lxj6[ #n6u֔ZcNNnd A @9hxȞw}*K=(MRC &lwmutnJrgq[l'pfa13[3 Pvx稒\IMv@.Y;("`ؒo;G Rͽ TMqHP`~b#WQw& 4&C ) +w`SCB5eyucg +w(,Dt7&vűkO|:A .{qx ^1;>YSQhjhBC[bEp&i4_!IU> &sǓrǒrIy8BJˑPҸlY$g44cx]1 /{D*Ha_ Y@O +[U +UHa-+1GGhԁq/GS8; c~ٰ|R3 f3wng@ A@Kii!WoDkVV ppvy+І8`g۳ZliLrsJݜ{O:o4  +z#OWghIpCX9N{G3=q<4Zv ;m]U*ڃ]0jכj4ql}kSz[V jhvd82's;WrJamPġ u=f3n1Bjym&N!YkIE*:W)YǸ ;g!,'j% :(Fmݣ]/1@&)oN{BhB!kD/ܲd(oDmH +A5Hjר)Vz'#gO HAgqccם1l1Z SӁ +]o- + +ZoA5wiqo`2D\E!'/:4vA^t K u{KRO7Ee2`o‚0^7ԯg4(wˑ]>A X&8P,9_xh.A,a;R)z=<(|Yb.Dl<3%}xeb2a6$D'i5x?x5 G q=R 4f Ałc#CRrڀHYAp8c_dZ_C%=_EW&LLN `;F/'I)BY _ "v0,k;_ox9kCh{ +24#BFpoM#tD !pvx:<CHlaߞap۬ *}tz[Ɇ "Ot'PbZ;lcKP3Ă[4i $G:;H^;nY سwːjԐADoV9ƘP(72U8ڹ11UϨsZ'ՙF.p!g:-';izV+mڬ/M]F. i4 -63јYcb Bui;̃ +~ܪ(i Z8VA$7yl ˋ ˠZgibŊrl` !ktY"HjK߁,~IH/ |j>N!luuo/YnDmм%}>Ak cM10GQ 3ťP5^7y@2Y{ F3{fN6IۦIflْe1˒$3 3gm 401[e1 Oy%YƙF߱\7=8Ld/w +#(i]Wπwt:hY"=^17HL).#Qz"7 ,F,n4Lf !b:Q6]4&d~q >@|q構@aհ +HpJ,:ĝQ434c:(PysTu0zk^'o7=N`r 5d^VҚQᨸ{o.g|W(!Uȴ@]Q*-T^YMQc@/hP{ ;CW^!wA=ܒ* LrC^b0FgPz.@Hs8AKKˁ*Лk>u꺧IqGGzmk3dy}@\@< QYcHtrsL^^Kxw,؋9I +_yOyUmR@08)놣B71aK*kGµw) Ȱ>E/z-MOԈ+[ +,/[ZZAJL7ޏbbB.aHpl&.5Cݤ_;L@? jv)  k]IA{b H&:P" 0Ǐ9 6a#,nH-$%4#) F{'2)\ݾ|.`r]_m( &Ͷ 08d^TIR8h*d'7NV1@[gŬz$n0 F=ь`NTaDb4]2ߓ۷vzSr#>Fjxq@ڬ:™Vf9_u>*X)43Wu ڷޙ}'\NF\ӻsM65 ςP +U\ (G<&GN%YaI+s_Tvm~LR@QBe.7O+)]AFPh t}7_Ou3Q +QBLC* țs^17IfeԵ1@Hc,e((/:PCe)GCE2r2W] \U> o57 E'<6J1$驀aY FQWD+YgV1ErsAlALE@J8@7b,np,Ł ƖF ?bN%ybZA|u.ŕ-Wڇ!"j^EEG`hp)lСqd VЁ٭@Dp^ne: +#c( Ɓ?bAMޡsF.lE`,VWIYhif$h4]4d+YM"9ID&acMN#$D%Klx'J (`4%M&IQdRuJϮbȆS}rz x5@ w>F@G@6l:&E99 +ŗ j|wD TD +yq;Bwߝox4ۀDC;\Ȉuo%-@riuٳJ-I2KjW~uD.b%>b"}X'< +f*櫈%@Cx57OõwBu(L! J\ V_ [t-8ds-JSĜ #V )QE@AP%").3D"`$i~5ϣOP]yx*/{+.S^a'P*)2~>Ab|@LD2:,u/V/V1},jɸ6c] +w$hLhir@hDVMS`D7k0/o%!&{A+1@|7һdGabC k%4KVv z=O7, hX)T ?E1ߟM= @% :tT[izZ;Ah@B6pB!jf*!Bpb(:pTzfD~hd(E;ߕӷ=OY4PXz X 4sWxCu=[85vQ$iA@ c_@iQ< R_Px +zvflv@uYdRt1&>#o|U>!J`,]%;(y݅ڻOj,̫ޝ{񽅦?o`MfoϪojn+8<畜pڜGʖ^lIXmg\m7~b}Q|>[hD+:<A6&_s1KMϨ!# V_1:ܞ3[7\7T7Xw'˾3 `WYirc<š}9v4!5B<@JK.HllTISɑ!*cNLDU_UD_OxE]&[A9˜^bHOuUаFPK3"~^ u _QSˡ G0 2j%Mpa QC4pvLSMiKd’fb:,ߨS]\CӮq?+ K,R샳 "I]l((ڬ6p(j2 ^ fGiDfwgv Yqףr ?L%+Q= 5V1i.kh7c(Y AFh,K|r-4:" &K +_8@ό}nspK4҇tz + S(5T9B.D[p)@]W*˴a Dx\ZŔiCUXagb1@Pb8Q@C<<0h7?}Y 9 Vlh ( :J8u*&2pqvl]  !YrA]:7ZɂR"TdWʋ䂰5č(l6U~;~ft>zxb8S:.&s5X}{{glK(gظkK1HL* p:s kT(Qр+AYPkbq.̆40h7`_;ͭbUN2݌G2CX~%\fs$=+):Q{g.BSh|g|+8`R[ڻAխ СOq+;ssMVږSe(Uqήxl!``݃SA\`/J`Q}s +hR UW aJ5*ppmT>oT7|o"N;%aMfFVi,5*Ib^q@* (u9P&lU:E?EDvvvɎ9E6άWsJf23n~`x3ş=3FPTǚOE@,KLM1iDgK6ކyQCkl !?A&tD |<ĩy F|6cbPG&i,;g'vi,xG;-78D1"4 <@S*MH~jTDcXdH(5>XawX Һ&&ULdT^ "ί "tFJ(!$-FBЁ,(*F2;)Ў6HixE }Y`@,>#+qhÆҏ 9pG0=4R^\ ޑbtE(ֵF0qԦ@(D31,90tm:WØwwX,Y#{ȱ 6~cs?@@ yB WSt$/K +v^c.O_L~&@# ѿ b㻣CYI)aE:` k%Ƙ@QA0CaQ6_2FS @蒹ڄ=ޝ9[Ӻٗ*c(~گQa`>fV]McX\@4 L LFbs MbJ*4<(!K2!J$1w;wtlIx=km@<@aǒ$ݠi ;(wp–lQym3")QyDޞX D47׈uJ!@M_uŕ@ .wjU3m=<~E~*C@lN}X])@$+ ?|.I(i.6!Dyk*8`pC7jDdTqf:@f;ޚ[aJWd3 =kGor,1@ )N"HShr?5+XZ~[r֍ai@8XvF9ĐVONMdNN?UCq9_G5&VGCl>\7lދ/rx|73̍1p䰡XkthCbuAC1)]>X3(@)@l@@L# "uJ񡤸L4 ukKQ1SGdAvwjW↍܋aƀRe%3b9 .~R9"7I+6X!&;7@ʖzRSg:[ fQ֬nKX[I*T +xvgH|8S2(ْzF_.k񫥀IderCaBhR[mm"!(PpC fS"[tx"C%5ot:u@<q(@K ++Ar=o}8s@Ț_+9콂N@0Bt Wn+ƑYjKQZD\^Yv w1s'A" `+>d,"B|ʬ꬚Bp-EH@:) +W|St#őN^b:mnA) :h'KfVfM!}tFMy@,D5쫼+?->F4wIFn`8NPa-Ԙ*NLNl/YcЍ=tSXOO/Ӧ#c;(f㦈OYuw :Mټ%`3i{x@!2;tâV۱GSO_zLVc +#97~{s/ z$<1VQW }etb;b"Wi`Vc]kC@EAz Hs4m7$DMx/&ƁGiK@bfQ9Eclhhf7/dA_ A~ Ui&t,%& +( k QJXk橦 x&ED\pt"p{;:e=M_9"r/M/'6 8{]מ?UyũWg+am`ZV">l:lUVX}'T}3PyLWO#V7 =tz@h1S bq *J{^[|[|́K٪+sW竱Z GvW^U]&*h 7q!})4q=B:l&; '8崸0Nbzszo}@6 8;…ب%" $ep蒧⢧쬻NQCx_hcZ@zkve6z123qGm:X5E4#6l~W1e5 Mϭυx4ĝZVa y;}p@3e-oŏ;s/{kqA12朁ykK7~g/Iq  }VCPO>j=ݵ + UӄDDrTVNJ@R5X g+ ptF}d7eDTGA|Ʋ#Frcܢ4~uZ_/OW (@L"K>(aUE8ZOI^U).9CAE,`h C4)FF<^:ckד2V_D ^( SaD [P}"@:ܚR kQpTwշW%}|>)/,-G|ԇ883Jm +k¼Wd" nHJAy,3~~ Hp"F}nůk>֐Hg\NA`7ڙBؙ@jQ@HyOD. j@i? 2*Afhj)p1r삫삳 РA@`JR05l'" ƷH>:k-@Jܸ9*1$B$3vԦMܼ$I=曝wLYO;':Q'iߨ"NwtcF: O6FpϹBvO@^T@g'̡H'MP#C>lb-@NSкcZli· e5)s]{#4 Šd1`Yf!<٧SjaU-Ҍ҉qR4!N ҅ÙbثO)rd)ܡ=;h۳vޛ_`w)5DH\_PnSSM(: N5 W3 O abY6(Wrد.ԥ +ْ\xd,3'w[.֔>^# ˹&ൂ}7UW6VUobQ\MUkKTs䯺꫼-)4Xy+?푞nvv Nf2._LUd^}&>dc(~ݬ/ yՖR #;*=mpe꬟Pe,*H;]T9u6\yw1yE'qKx`Y*k~ Qkc5:B@[-œ,7 +MkVXZUtȧ8  ΅@p_|?]q + CRvNdmcT+ZvV^cUrˍ +S^Wjt +kJKȰW0=`j'{]ě(@@DD0Mif#$"p}kb|Yw'_] 8a÷^zG)7դw?.#/@:f"e0b=G@xܴ=RY9B󓖅A}丟+~bpe<'R XAi=T#̹ i÷7 S8yKOx"'y:^(5]ZW|LԮu<:jD^LjFw2o8_ *)4 lST?qrSeS|%P^,><7@zghw^ܞm[S;~C%+?O߸qwE@L$pN ‚4s,j3SedWͰ  B%>=Y(4qS4OMT.]8-'wzf?ޚq{7r 6lD:;*@(OpUOᕟ|ʎ;A`'\JN=f[mV؍6CښWe-7K +cl]]78bshfĎu;o@{"eq#?|@,&a9Gp;@$}?jj9L}2a /=|bF8¿ |K㾝> +_ۼy8 ޥG.z zZUVv  +@`s1 +㦐n3 =#eY y@T_ǟX`%0Q,TGpj#zJ_XHU(ي[Ӱ;VP6DrVh i.KbkSZ$X+Oۖӽ5cK{8D!5] +3D]idU + fv1y!1f(<|Qzh~hr4U:!۟Od9G66'[2%}km~w^G}} h + + *ޜW_g-^Ppť0l.Jd?u2*]*a+~%'`,?喝HyG-r: e0[:%. .RƔ(.Ph8PJhERMۚ)׀cDDo/:^ +[Ҕ+d?l#.D.x):J){E>zͬw3j]jg +tpÕVmϮ06,BpMb// +63(%7x@6Yi]Fk~Lbx޶Zym6~:9;^Pg/P;j']Ur*- += +B\`U(@䔛3{{3;8kV1e'33jvnl4Yqo0Nj{+ZXoeZgUּ +CvLV1Ș]b.1e(3Q@xl)A@mog?We\b9R#M'{V)ńlΘ1@ BAP*<Dhp:di,ΥA$*VM> mOmDf81ݑ#~^5ZG4ʴ3!]Q;~ ڼL٧qm13tHaOא'n~89'4:?k@ :* 7&Z +B,%L4sJ$dTd* Y&Dztf^mx8(@`m^& nݾZ@H78H(L`J)Q@@ 26<-޹1ch`) Wx@_ "Kz<# ƽVڋ³Hı2Eo0·0j۵ ]C8: q~:|cU@`{HJRkbkփ,jO4-›-R e9Sh uJ|)pD?KO1+ 48|GJ:OIq372ܕיb\(CD, e_SHLh҅}RC t;=` +RxZ*Ĕ#O"-I_:Ẁ~Î;xxw߭#qz% ^@<–s~!\nkbV'W6.sщkU;{d3(՘](2ci@dSJ $l4@/dA# B5q tȫVZr-D9L%3Ff]|4lN< 5ʧRSJCǿ ^ccА[n)3."(F@d*`Ҋ2V Ŧ!bbstKضgF&Mq^-XCOuDޚL9( &rQ@\:4w-QCh`jIg2z$8i h,ˆ k!茵BCq( yRo YDѤȂ߁Ÿ8: T{8'hpEN/]{{8fDCYbJL..4DBIDS%@P*oрhLI's@p_+*@('Rx1@N?AD +"]Xjv ƅ4R<,Qh:%t @?ч7} +BIR/")xxp_ݗp}մ 8i@aΨ5-hx FViqqANnv0]b6 +]Z=&|$Seɮ4,Cs%gG5TeHabR}b}j)_ee5؉Yτv z deuvށVN]ar38rcP5dPpM +wDz~?w2]ϯ!& Q\,(4G`UXr9eHrŚ%a }r*tG|&GNjީs=>Deh7d pȨ?ۏuL6?thCH~ixQ+`7<@Y`u [UgwƯTĚ8q&O(d̏utXQ:*I!I/nDrGf Wנ+x每}PPW[_w U]74AP>i~x| + e=x eFd,D)!XH@Do谿P B.YUT2X{xDT`RMp2o0A@2[6QPfdWi=m9[VwgӅ|1]ؿ5Z!,F2BG*tWTm":>-`eI%3 +]9mj#ޖg`}@ĝ_"IaFnPPvšY(w[=$DTUR$nb7S%g!8&Wa,pBk\ڼ| W.ˏf% ;Mi; 5Ԋ^Fx@K-s^ S$nb[ +P E_(@(;:[;Y .Rdg֑9Na_PqJkxj)SiL3&L`%S ~D>ht@U5F#_(P(F oHA$aob'A/'.>}'.~sם _77E>??࿊y{/N\x/" H*9#&E VBAJtHp4C4!ϔL5M8 +JeI'z&B[tvDz$Al=.MͶ DwR&\Ȓ R阃HGE9 +T`eT<(y ? G!Y x*Wv@X>l?(';/9,5ͤ(Jް8pQk PM,(CA˜ F7 4E•f7 +]Wrd5sR>!ijYA(AKghzFa%10 @`ʫ2U+M*3RPcej%N9)T +k V]fչj%xkZgڜ4% +gvs'w0Ƿ揯^NBCFDwC {Sil)nO 6]6G+E)w%l SQ@Y7<ƒ'VnRb ' b:G@FRe"" CX\{+cĒ݁^Ӂ"|kVƍEj@/DtR=D@Co@9Op_w+ەdsuOQ]\6)>?E\x =N DCL#3U &QDYð q)ϒLH'9ܢ>K:)k|K %3_O~nFn=&bI-ޜ4bФSx}Dp!A +>(€_YLDu*K2!%ϕO+Ȩ~o$uRSq=JOVbw;.SL "cœ_m$o T؀*s%ABI|5 +@WcCawac5 |MW*Oˬ1| VP8nm׺Kl+~镭7}з</9Rʦ'Rӹ3tM3  ʩ0T[iƷ*lI*FӪyՎ]夫\ @.Pμ*;(,5F [KMiRsg4l_{X_rz?k2]0IS+&FQerK跜b!H+5J͹%& Z%ܚ_ ž_̯r*V2+(F`N9V&fs;YS +~?prm@t?z285?05709Վc!ЗC?T /h .`weG'-Gux;Gaf7a ڂG`^]׶q7^|u MЂ 1 ՍtAv, jF#+D@G  |!_ϐ'S"$:ctpQvRDꙇ2OOFa-0k4! A}CP/h@ 8%nIC\G[V]~sL^XMYgp;v&(K@jak9KW1x>_g_x/O uk3uםck8ӏ~~~>>[I|7=/;u5]UDV_"? L20NE B:xDpoΒsgrj#V[Ȯe[2P"^ڳ왥kzeQ%R+(̑S.wg8Ӕ"k ")2[Ԗ(&ܙ-]i|Wn7_IւvEpb~d`:h +fjϭTX3JLiT2),iE"s,)@4-CiP9IbJ,kؘ 9wf{f{b ^Z_Pb>d:w2 ܱr"[ 0唘ra/6g)t>M:&Ml&MjHS%L7ߗd4%UnI#g qǟ˝˚͜RkfVڀxD1n#i<|=ߞHhRX},M&) lMP+,JaG>2̓BDR۩D:ڵ.cߋB: 6/HD$t:B!>[0fz _ ]*{>Znq3|Q~KaSciOLRxHJbj +5E05}{{A>TA4={ }L}̡=ڝy;h}QmmY=[3^OO/2:yӿ}~ӭ}y-[Sf?@<_лٛPGꑨ꣞===]}hw~nfC [WC۞ ^f[v*'zյ+{wJ)~_?ӯR >x/_nv;'`Δ;)ƌ23 Hk-}3 iŖd5Ț$$ )&xI.&~1A MNTnڒ~o-_ };o>iz@Ȝ!$ LZ1̔QnN/3SK)JC2쥉,$u[=|؄fv]ݬ]᝜J+]]ϟ/HNʧtLҐ*IMIIPda @{A|rwzSaof/W=5L;Ac; v0uY][!xwsi]~ҕ`:i" +O}ϻgygq2M&K֤qt؛ݗ ;ܐ {; ǍA[`7yƍ/bmCvd@1f@uA͔?}|vI#P0;ߞ;9r= 'Ij 1='-RvAg&C>8y$T#J`F4S4ȃr3&<哝dGއi^MkGҭjfn7 VS3l@mӾiw6 zjdmǫmYY__e*+W9l'+-,ηt7܊E_xku{n}wsO5}{ֽrM΍f4}aOݭvsl~XݸucF6hPѵvϭ/~٫.NON_h50* fͽiHo['/ܹ-DO*C6Qö1#vtK#-*`gpgpG L  v쀅Aۃiж@W=|>Xú%[ +'Fv̛3OٳJ`eSt:бZQ6spvvE#l"m"G##"a6 hjP&@ GMT˷ixF|y_ n\մj :yh^u^_w + چmÆlB!]ܝA`{ W,ޗ,`/h`\/+^_x0l49ųwGwVz^XClOsԑ6ui:aC4tKԛWٛY6Y6U*gMFl$|8wV:Tp|+P\z5jWun )9>}%[RӺ9|9.Ҁ nuaCm\C3m1)S4&Tg*n̔H:Tʎ^MthCLmƕXfN!-%͝ +CAuGCǣZ8At$-UP&ӨZ KܩZ)3-].us-kck::]l tjr +:y7($_A<` Qڎ>O M{[E͏ҮBnz/^9\I-LR1(䦖SJ +9U}'gm~)%i@ve/G-a?npmӸ Ʒ6.MpNO61q744t㍎O`zuv `~C++v]|ןWpO<' VNs[~B [v3x˞G[tn1եqs 'Ė= v7ltlаx»hxipg6Vﺹr祏w}'.U_|CAeg.5t+vna}HƧ,罷uMRn];`{ hV(CB%|dGp'vv 2FE #Fw; Yvy6'zYy~޷q4(Q!*ǿ|y~elA+Tܷ\[?% JW@NmHCP3% ՟|2+%8[}g`' +j^ 뼺mcel'(k_?;jf>}_l`~m~ܯ3ϰ{+mρ/~~^l]mއXukflmݩSw5GJq:Ԁ4ePD +u0Pߐ!]0A|`oD +Wg3-{ɇ3{#*S16$9"͠rD $M}#C/6 >#zyd!ak^'!u?O;%äHJ*0= 74"=A36,r_Ozxw!^14=pAܔn`Ur} B1!P +=$ 2$,kPE±}Ú>^C|A>a/AL؃) =F\\/ԈlI쯿Omqxp|q#(c7iMLpLk. XG~Z;‡kk:. nCyWuQ3ê87z/:WnF6; 6?h݃ vޛdݽv[m{XC\kw5wlqmW?rVNMQW yԆ ftאD .7Aݚ>l瘨/$IFS% /`1HBHbɀ/|[|E!4"#~MF}D l==G6ylm!YtӊKc?~9澷n/"QoZz1ݸBq(4) lrrbT@ϑD +hcZ4f@I)>U535\!6`Rz[/vҏ+uNjשpRK!0JL0(0t+3i^ H4zM!NvT)1H`;*Sz"#$&磧XX- +jLN(:0B1E tR H&QStL\FFW| WTQvv-R#J +Ql74wJ!jTSrTӊQhPTIT+)HF SR5)-%Trs6.16k%-㶕W=^ed-+ͫaje߄޲im n:-l6V6MmXY?ոjW#1xu +v_HBՉe7>[|Μw~Ny.Q-+lW4n0b`e۸j;FxieӸLлnDV|bvzʝ v򉷶?\>ڲcwpHA/;ܥs?{>9fXauBv)Q{)TW&]e.dd=rx8F-v;H^F+G#@ؑ!]i!19%tM(~$*lHO֙q1ByHsL&^/uK8cPFw@c`"(].R0E>Jh?6b6|&|fG>l6dl (K"8pD-^ra־zmj&8[8+-oj>l6dƷD؈mذm(jtz uvs6qL +4hqxŕ3Nړ'Ϟ^n쯔9Jq1-9%  a@M / CL$ejݘZ7?0Sb)t3@vx֫ Hwٲħ>l((kǞOuc:8E!Hr Fqh(ŴN5h^D*Ah(Q515aQhMAmig_kwZxb-ҏOtcn"HbGqÌh4zfKhrP¢1 &UQvLiqc(׃n"`/FX J' V7Qi@ +HBV g`6Ra\=SGw|)uH7C8}]d*`R/hbB19Zk܋pQBð|zy=ޛp-ku{oGry[{nN}={QW"suooѿy^w;_Snd{pHFϐ?9_tb7K-}cro,7V}oy%ws}/#ȫ.W]8!\®_"3F\\Džy+Gu_S>Xx5nrvx~`;ɷoy}uoԯOkį.a:'g'/0pewЕW`Ƹ3o˻. q+bpO 9&>X<G֝:y5\=SiOqjL+GQ@"N(C +Y5E +dR/VCj݄JGpjX>5ah@a $w;@1>U(5jոJ9T)rLfI R@%RDJb@BA +PB )tb^0UMQRXMcQs,^dgOK4v+blQ 1VÓe^QubN$ Ŕ`&F9!8Lb)RJ$P)BEhsr  +m2`#苣`BR0;#BbD8k`hRB G׀l$Γ(s~i:w41AG3iO]>c+U~fUܰ?[5V#|엯@|^h0*_W}jƭ{6}n/qEq'|/;~a5_^PuW! +Ŷ +`;{4]1ſL-hj&ZU.v^af[~2 hlmi³rd=|Y s/L`;Sl?Z_W^nFǵWo5Ȣ⊊ck.p/o<|fhdy6,Ԏa9, d@ U<)撏ZFoU2oEpUѫPJZo"0-oDr14xC5!Xh1>$! K\s߬vo4*j޼y[;a hL ҡb|C[;4\S3pyj}\3By|EpT\sG+~ً'?| #.A8I M\{bŜs޲ Ss 3g\f擘OB fSπ\3wߞk>-ysQ s 9,,晿5|"9op栿hBggF13CqΙ3bN9|:>X_8&/?g-^ ;sߚk>oɹo! + I>]VUWZuQYWbJEm0_ZQS܄2#3\V ԖU(/?Ӛ)ݶm\KvZ;OK:_STZ_V@ 5@qE$E5WLQR(>PR^]Zr&'*K+N +N$LJ9km;oޜn޲+n_fZFeFrH +BєVx!"JtFo/.=6#%+֕a9×**?q(@i[]0 9)iU3,-9UZz^fx+)NJʓ.A..-.+)-ANjJN DghAdFAV _5 ]޺-~w5 XVxwLk^`jIJ ^t⥫ޗ+,୹~YƅYj{.5X.Yp%¥wW"pբwg5 _xKY.YA.Xʄ4+K^fl_l5YL3 +r itAitumshu37m̘ρmAcan6l908-hfO> x a?9!Ćfo0Οk1#&#芋)'F79 $:j3PHv*zsca9Zy"& {x Si< Q#[^A[t7mٴi/`ʢ Zುdr_VW.~~0ҕ+7;`$phi_oGo7FǕ`޲5vvn^A> @&f`2 0հVA{:\Gl ? b +1A!7c{8 / 0 +ʯA7L>vٴ+Z呉?5Ӥ :ZDR>Nΐ|RoH=9Jz وaN^NTG!j2фjáSst~Fsi]0aE }ٱCud1*.(1ݾcj`@-A$V3Ui 1 ;EՄVjɨJ2v,_g;AIOFW"+Ș +Eh 2J8 GɄ#D]h/ w]B +G6KG1D <9JAL:Dw^O\65x'ӿXKk <"0A9xp.GSaxH"8!fɅȁ fa,M@?S坩σbMZ1d*֚ϝ#Ǎ73պC~l<"ei146 &h`&0q#YV#24!D8,H{gjr,69J<4 iN'=7MckY8+CaY'hCJ_ Is{Cᙪ`eiI'~-¢S͝}Sn\Citcb|Fлԋ+h'ӠuF_@\oy"# {Ao1t T"^E욠P&L["$F@MťeG+TW:ZYupNVGpvWQlHyEUqqe^~YNN7߰PrjQqd + +lULGK* !E57& +A4KquBsuAqC U{W9W9%*i`Fg)Qr@zw=u99%=-:kDҔ@1N+G:DK&Rq4Y`@hяDX>2;ݏ7yR|`:+M'V;y JxtSS쉓M;N+vCM#ZDI"%vbp@d!qSz'iSSO3i/d7~JxOQ?:}I96q`puMb0h ѡۮ5S TM>U*~g#8z GkOCڱaTSƀnB6qDtE +S oZP +CoXFr!`J1 { 3ȰW Jtsߘ +<5.%b#Jb ȅ˼nm;Hj_Ն?TgJTVVI)&jN^ /'﹦oE}52ts:~^ ͒G>q;U[w;ANںk++kJJWx{[;7nNIˠ/ Lk +B&Q~邨ĥAd|X_ULULor~"PgJtu@'U擩|r^٘G=ӵ8#^b{kLP1*T4uKUL5YrH霤ʝ(&*|jX)PfH‹9UaI>x>pv-O=,$< +=S%>W E, cKVx$22CRz|j+TL#u;t;u5QO CI\b% +$_7C71 Ib'dƌdtaHL88%"$GJݝ r: cGcbDFʽ^2$I@%ǎסO_G*ÈЏ( +\eBJļœPD\^`_dp!Rip /<<@b5tPp6fj2t 밚OS)|SeiR4[5U,ߛ-HT!q%OI H   Ts~nnz-O7dH|C/ose1nO%ăi !!{ ( 1"Atx"Q9\~_!Ov%N) \+g8R5"%EѴ|4% x((h96N2( F}=]Pw `hlHtIPx\A(7d3VEDu `䘊BBM?Ґ&H8ba=}w"<.:xҡ( HvUw/m0ɚ2'am}NoD.Pb2@j(.EXqs^yͻ?_s.ߘ `zGS.Dtf::BSh`FV+GS.@F"kXX!hJE?[曉NAk,abuR.P盅b1Ǩ~/?*ςv}Ն +2bHy хL a\ +i_CTڐ,@U> + H+䞩JYKxa~J"ܳ7K9< +&Bb=BsRA2^HbeS~>۝S T +sRB!˚@%An!,(6CĐT''FUԘDw ~ϩ3y#LA@0)_DEt;B#~O@]<%; :8F:9Յƿ:9nT+uiyffK,KH$A 5$ni,'Qlj`CCѡ \Z bZ428B>hc0D;=z]ؤ_ACcԉdVN\4]Xd;OCꔸ~HiF-zNLA HrAuKK)kli_7x'*:֗w{d 7PW`bgJAt1F6^zWDvT:XLF֘ϵ\8 (G}L"0lok;lNiCN{Wv{+슺#ܜlv_o1g5-hq|M5-Ac҃7)[{U|lDAJ1ݰ?r yzzZ|?FXB "X {gMQ<=W3U +C;B X2)R2HX1ZD!(C UP" K!GHy(rf I'[Yo%{O>, ++.hA M6E( *DMCir9tc 9uP*0[ʔҤbg#IꝮ]O8 iPCbSB5.绋3SoHpv'p}c"Y YeWqCm5 <J`CuRSSn3Z)3T KQICjxQ(q@s(Qڻ%4= D +0MX5u{pLJ*QRs/Y@WǕ0)ItMұ@G1v@dLQ\ :MfGLbq F)IJ !AFw (GpA7dac@uQx?;_{U01zqoFo6؎FA8i/M|`[ "9A b%n,O4v1 ;@]Wsy^'$-` +q=hnu[eƱB47*P[ .A4 ~u  9d1!jS_8}N/mLLdxF&gЂP?agqDZ4ԠN G B/(w'D=r%A1wL;5a d9Cgy;9fǑ`&z4Mcq MH:Ɩr*G ԡ|D;M雭N9J>7͈bP>(tO樣*I2}vAPd4 +]x9HA +\^ L"|TXZHЀ 20G)aeH}3^ɨs>V:zP홮 -V;'>O=xP?jA\C{a AZݺ4H?v` ;ޗijP4+:U=} jozQL#SXtIlw#CYN#ckȄ:H@cq5c@ ZC|0_KSc!Z\w= ʱRUxΧɳ٣Ż?7{v[9;iAtH>F ;Lb}`ڗFf&h4m} Rd v5|bF;12 9҂ #2;x}DGsf%ÿm6kV8ZmO/t:Czھ=4nu A/B&H'. GE^sNݳӿ~;|ۭ}Zm7j"my.m݆?sM#[V=f+LA +đc/QЩ4j L6C>SAD31M #QEAh1K\i?wۯ= /%PQ(bkb} H(e@v`$v&j պc8"*[E@: +O K:Ap%b뭈"b_/!qNRaR"Bդ @ +GtOa +頧a0W^ng]UEcEBUh>BR{RV:ɶ2 +GލB"3a#SeLd>c+##|uh>R aACԐu85 < AҾͿuON.{N['w}X449{x?Qi@uꠎA8DǠczAL6ibi&Lj&/^Ap7#܁z M(Oj0TAAXdD0b3S_W;hm鞾X^\=־ͯuo:nkw9NiP3M qYՍN/kD0PG) U86R],UɃ w2-N8* :Ӈ- "/vGKv + R]T!b4vFA5^;I4CnO4.Fb% X^+T+eY + }ec@C? JrZD`fPah5@8@$pPC8C6`{fQN)4:0@'C•u 8d-umVS?0YKϠBF$zBݩ3]oxXP69<~%Aqʓ~3AF]G}!7H_oc?e a6\TίNX8vrc앾*kreaeS$3.N+;~FB`V9`E1sh08fO1fpf@nIY̊ ǎO:=t#Lb9+6@ӡ_l~BbD M >f(Wpxwn"X bjly$X*cePc݀Xc +H.ť%WX 6*:: +Z10f2'V"O[xƜV~7n< s]#d&w"r34p7.uA*$슟ܬDCЁ^0\6sN)Hz{L`Mg+)BJi)#uyXǕӞL4Jлn:X͠1ɘdig7t'tZS1}T`V@\bAh׀ÂfeZuY7wF +힅ƖԼറC<ɁQܾL$Lյ}HtpK.n|.qN.ĵ~K>V|+Kiߚ@Qsxii%'b d1>Gz=bg9@tX4c'zÃI~]^ ɏۆm2ȸutFٜD{oӍ7|=pP1>k`DHZLH ɷ@$:w_OP6Z0C/Ĉtpù+H){j%?>rF~e,|vkn"</MFgMIF?=̓ +;_ߟq#534Gc2USLXP9u@|C/| )Cy 95qt88ȑC!jwD CzK.bJ|-$Z!wȿB8d\J-iyWgEG;bjh6Vj4sJ__{c/A"D=JW( 426,NOx`X$HV: FwᨮoT=|zӟb  +Dͮ`?ׄivBxn +9#%C༧ 1w݇ Kx7PegeG%ҋ0&V{)SR&\y8O}(_nN)oܽmv1W0[@[ߓ "@@`IiU&1.~p wHaGx.u,Ak B́,GgGrU3eq ++[:@ +>i/2Z,k٧W٭Kk39&;nL469y֔٨OU.Ș?@|=0  +!*q  뙯 +&CQ1upb 3y\Dumܢl +fW>sa} "86 fqH[Ȅml}!(&gm&c)c9%9Ju K>HIq(]\be%0>0 eV&j#B +r-vjÛa +dׁNwMFtYi r48f^ZKXK!7Ϣ9AJ ئU %@#@Dq8$ K:_0@j1z"}Ħ^Cb |J[o(sD|BЈLWQ`۠6  ~  2sԺaD D#ݠ8>gS @@ ߟ'_ _YbƯ57NSLs"ml=q ϓi L%($S` /R5 EK+ŗbcG2n7+8₇iŘ{}" fo >C=:OS9גfVRo۵յu +.McMv[Bh/.97mB:,1&7㤼 =ۃ @MN\y=yس7Vа7I)u838Ff쮴l= %ZWIx6Ҭ/ϗm.ٱ +@)|.8ئu|ČtC N7wx᷂n;}i۶gSZƨDfV: +DH=<=/ Ê7G )`O`IĨwD?$!Bu=m< #bؼ +;hcǶAi4n! #HjO~q{rGx "F e6My̯jÙ=߿7@]G` hO] nHY):.|$*:l3.zV V<8tەOOղ+@5Ķ^z)%Y$!wpϝDOң{l@|@ ' I0@H8͢1l6E{_|1fƛV\ssK˽307w:gm=H` 2r@hƫw H%̽#^aPlAa { ۞@ 0ظ4pu:</ܠFCbX`Hjo?u>]77>-'k_ t}#j"܏#t3KM0w8)PrSz hXZyS'7]WWeRgI[b1B,P>>{ͷ xbzNYM5o1I ߘ`  +Nfzf7 䂣s*}d&([Oqy2N~[a}bqf?;>{Ad ԡ^܅/:ւּSq}1]l:`Pqw3-gt{ Z7{1 5ؓ0G2|GyjKNJ~Jw^; +&97h*=J񥕒+WV kRqSyP .pU^G w(j/d/:o/oLG #C|i9?]$@(+'9bCJ̧̰ PbtY " ಳ첋QísA5͚l8aJǗi"`@|_-P@43O2cԂlN4c+@;m':`$Ad Va茹B6K^%ɜut%TPP⇩sK}"7vG3[dQՁQ*N $ lֹ@zJ)u^ n|>GY>z-i.`go1XY6f W dS36xYlsbYط+Mt`B<W@dbE"Y3/#-MX+Ē9̂}xhsٜ7Pi +&@L)f@LD +qXjfXU]g_|q1Xt{Oϐi{]׷bӛ@O +~Pl:w܃x77Aa]YOh0'ЬUl W^DDCϰ2 Y oFjVMOţnR+G @tu rUQUx@zyϯ!k)JL5KedZ2NSqUڨRMH@y C^,M)]/QnL?wӴC_FNt ߎ蜳CB 0k%)@NkNVOcy1FW,R+(?MPOSm đMr~Ȧs˺ Iurt0v +%,}ju(^,e/\؟24aS8qxA\bSL+ļ?4oTꍍ; 70*\ O޺=_zf2 Btٍ@ϳ b:I+L8† 7<{ 2ĄW(x0bW_{3_qt~+D__۶?XBߌsšjJOE7D%wewUw5wu܏cߚRe[Ek9Ӝsڔ 31LU ++R9̽iwU38ǿF ~Fx"ܘv[Oviه[ ~AP`Hxue4qpruQDwbS^.N:TjJTa#9|)o*7?ŤٗtX\o8e5A@@a(A; VxV +CA1Qjm1O :^6ZX)Q,g/Z0}o'=Wnpl],pgcmĽ@zjiYݶmϽ5XT8a{NZyPXk8a5ع@yiXAa) t"h3ONe%]QMB:\W*PqK[|?u~_ܞ蹽 OͻlSھ{ϺCA_0[ 6kFݤehdba]C 5}w6 wtr_ث ][m 5Ix8g)9Qp{Pͧ6&"2R}o-a{n@*:׌crDs6ǧuBmk "wbln:pǮA}_Lz ^ɴ/dvl<52na> ://6nԁax_d4>VR{BxNNZ0k`wܫ[Q1+owg"2v?낎uiz5xك u xGx;ތߓ0,\@Nl.ZK^ /x..C W1ʯk\տI,>G^ 8`L5&יR-*CXPL{=qʷS ^ ~㷑Ч4; b .䉄Rt֊%|͠q]fmO3OZ}B&&JXmH6VCʃY/KXx+jao@Sqk ۸;` v38`i nFY' xm!ZtT.Ėk|"Z +ΖQs7qɔ ܋7S[2A/،_صjf5}uA^+e䦡ErT_=h RwA'с9ꝓ9Ӳ^_uLr03@Ⱥ H9J}Pi)n u +30ȗ^~1 On0p$! 9NIv >QU6A|F@#X $>1`7!bw( cu#V<1ksBwd& &Do:'9Df.:p0x0P .~}/^x~z f3^c=qwn~ M`u A7}q~S [>o\׿_ ,'l.A#07<\eWH\v +bҎVMqk4 IkJ5. %)v*&+U19ospg:B"진],$̅]梳_/vk=e0g4A$jj#q"sw;@$xh"@: +ݤF# y䶙NC͔bi Z}J>]bJ &TbK4oqqoEξ75.߸#Zvn}>T̀}:DSI_DY_ܵ b +΅t~wqn xv휾z2=2;_XJ/b;В7oxI| &lGq߉If<~)ȘZ3l1x ~˻xɖQ\? tc[8 A\@Їs88vBo0y@ )m#t7Tu Ͽ2$ }Ȅml!kag̪<o3᫃_`ğ9|KƓf_|3~o".1uJc {^ ;`wy +)&oab^KO7ᩁn@nb|zZT')}:8 %pz7>[4Fs_ (۷;1\uh,2) `@Fې$Rb ¸I +  hYB8H G? 7@ L)t|,@3Z4CȄZ91nq + +@Ԑn|#AAG +SGWN:1ttyήϭ_-G.pa)Y$ VXQ2^`i9ܜyʔvܘRT+1DT@VOWKRSJQFd]@l+܋΂3P#2Lk8Yw +rv;A60 c=q̓\\mŔiJՑ%RMl.ڔ\c "$OaTb᭨= fyEjSf%넅ʚdkv@sfk6džF6`>: 4"QHj IuP^ /Ĉ,VŖiq#R%ϼ72- >rK7L,9}r4 fGqƟ[fKL_ c x|l]h[+hܾ]^?V8 KLkz ؂Aoo!q+is}cE% vc=`r`[*q&^Ҕ  ]_6t:(5knZ\љ<'N?W1٬VydB +3 b@{ DRMFB6$ d(|5=1!3#w\ݶ1mqmk3rt:2e.qD Yl!9Ȁ{,[`< 1/^A2,lnuef%o N{#8\"q4 ti֡UzUR(?vҽ37!"(4-ɟA I7g_yot:]"a6(fvOakBx]*F],F1*k$Êe)qwR5+?oWx'!!8cjfv† Nꐋ5Vd$69mV#٘a"4x :cr!!>LQ/ˆ,Ĕ뒎)0&'7aM|rjJ)?a>i9em5k)x)nC u :\SJ%UꀭBEHrH<@Vct0R]_F4N$;fB uK k`O+~0cnvp~qwj+ 럖IE l+Mv +/wzXMʺXg[WNЊ&$nnpð=AĪ4pjxݳRW_’EFS9!f|40$P4+Dܧeg`gry=1aaZ\`>y3vc9 sJI Gb'[5Ax=i&@N7~9!iQï{ .Ӄ@t^_ڙ@̘k:2dVє; &-$ 6l;& +(90ȋK â ~SKnm#M"oyex3 /9A2x&nHO{PGBV:mZB \j ڬX{7ܼ5;~T@ڱ+qD4I*>juqU&OAJaJDpćsrS3_H$휸\o6,YKZ%*;D[ /օ#qGV,>D oaz.se6k+=#NA%~% j&׆2d075x F!ƐP? +,Z!PoH^Dj)~ o-2W'XZcO`%8ƌCF!-O(xuTR\MƗkb˱0\G0"Ul9RN|;f⭈b60\ -if سa @ 45[AYYbW)~AYTR E%[p@7ثB] сa  &Rcǯ + +K&BsAbZ6ζu ||@X)bs뀘Uh0gD  e05-CY%)&&<@N+qblUp K$yxҲnD{ :ØA<F,Mp1u<\~ߌ?5LapF##@|ГR篶DBso@{?v Nڜ̚yA&W!ga|k/ |'11ī7)1!{B$ E(E|)= -|xnbw,.1%@lj矱 Q%z^65:@RI $,d0y :F]q} }q=5S)uZ}R>_-A6PF<|>)7k%TTyK{I[[Af(B)L0K9ޔVg CÆW괬 *uQuB:LS.VEU/\9KG*@SK^؛07f𙷢߾}bu~q'WDnYPZ=, 5ucunؠ-7[\Ǡ@8`ZXD cmN邹a-9%xLpt%u`mO٫+OY V׊K;([gfc;̘Gi)k ,tG.ywyiezSSzA'2%&mtiYb .14s.^ w /6q + ϿH &v$L.FpO躀Aux* t[ctO /7(|/1o' cud)?79`eg]xq-HgfjV`4ƔJ5 zB]HJ4KQ:̽`2DʕTSOF{1ԥ=I{b1Vܦ'HCӖ+*tjCj!ڐ| jj+q*2 +*u|*\S"vA /0CًЖ\c 8W'D6Ǩ|ڹlN)ǁ1@ FO BKL A U +c1c]': o/w`NdۛAX@lC ǧHx e +2z]  +ezbS M @S $ 7r e c @Zgկ2;1B Lg{G-^ ]erX ,KՆxdkSĴexIX9H ݻ@=F&`66¹ + H/&@LY&tll9`CYè7@\0) |@|և@\ Q v>zo|N]p"mb1\r dʅהZ|m6N XS}B5M ƨ2cd!\-kCh>8_^I8fƋ쉵x[1=Ica, ~?%ܟscL:dn %$@k IӐm\6BSGJB]x6@,P)A&X>#wz{q;GrĹ11I-T&85ĖbK(Saqʘryl Y}s{d;t#zdFV/s*履f'A6=]9Z]7=@h[@o i+ ٧ i毃!.UmuD~ļՍ@"vl.:E2 7}wl +D@lgHg.ֆ-y!6ss +ƪ.#+lMS` E~.Y,1K/fvs \DG5 +/-sdtXE p0(3AZy745y~iOQ &#0B#9UZm @U7lstu@Ybjz ĎGXs[͇-(cfMWZ9s2N}B㫌@>}x1@p^Ê ! "T oƱ%wRߎ_cbO |-FsV`һs#J ! ̛pQ3\]*Fk#Z!_ Gy#y*4-GjyuF[BDgPK1BytFP ]SFt"t9TUJUxH)@NA؂rr ^0cP|P\mI1Gje @D!t\ :8Ȳ bdS oNxAZmxxL9qnjNnq?Z(<Ǻ! F IX}@|ǎW±98 +z4[:pAj{$s@tn,̽ybɴɉ@L/S L[~@xAfgՁ\)bpILZ䓀O@¬ b헆@m 44gMg^<08f9( r :<=^7Eo=b xY@d -UD*h1>rm { tqU8Ga!LQ jCtaL0@@Z Γ) Ad@W^ Ml6Zz'aŰ"$^@D P)E^,D5au@MDP0  Aؔo%6?}@}V{^}iˇTP 9>ڐT?=:GXPITb܆-"m -ІhaË,ov&כ&5.1mW^ ֝vܒbq_⡬!eI\iB7@*7y!‹ԌdH"8?271庴{ ;|fzO S"(a|Xbtrf(t(GÅ$a +80:Y:_!X&`lׁ2g,5z |A|>aOmp&~{HuPy@=!KE y~@k 🿐Pr{P/6 [#xؕᭃ]8Z31dq=Xۻ c@ VY {y+yy ZsQ~m@Sx5`l{O5q g #$[<{4wzo?X㍞?CZy}" _do/c۞D-2 +)zcȡ a.} ]4㛱SgKR0v7pOݳ9pR hBllb_Dgqh, ,}OPdƆAƒ *]l諻sLܙ?@~@&mv'5vsmKAdǶ\,U;,PG{kL4޳d*&Q:D0peD@#P^ (Б#L +"B\g7[]Kx,廩[~ܚ +)'-RD tƆu! +ב4h@m‹ 19_aN&dO5fwdty?mĦGM(c1$[55P^ /T E9сنFtȠ#%O@1Ls G Grx)~bwS-1!6D/g4v4tto9yDeCwFPTXH-̱ @Ǝ {;{/=?'/wI.1{:zߔW֌O-]k Fv:cZكMjl˯%f*8ctƾO( I?zY[zz0q; ăa-|Ouv׵ݯkWz~FQ?|sCR|dIdW0T\s~McM=5-=^@ā6 g^|999 <{4Չ$AHoƛt׶ܫi[C}c+`═ CS1YLayݝ[U7uW5ݯn_G~WF,1'֙j!0oOuܫiW|nMuW a !L/zTZ{XU?T}>~7N1)^Ƿ7o\cz1%d:QN3CZ]R>ƘRqG qUJ&w a MH+h %0{W %5>vn~+!})Ą@ A9* 2(~w C6$|t}dAR}m7i /A:bO@v3v8G8j5UcGMU|G +JY2Ct!Sa4AT㏙1k̉H$Yy cG9]$Z4쭁{Kҗ[F&**S9VEjЂbbNZ$@:DCY +D,4&5+0+̉UVZRgl+o'/-\=ِ셨(\bR 1<qEぼ}ɋ3V+3V +@,UBֈ +q?H3-i,֓]8ϲF"KQ2SL9Sf*S_E0V=}~'I;^XŞ"4ꫯ׳~o;/ђf8t8e1ΜcKo_5 g?꫿.<&Y0,kSnج +C2ЮԓrA'It&p۱qc4 =w9 VL5hzf/#'W0"7<Բml&!pHvh"3|!bcXF [ +^m`ꕘbHfY"\+⥗xiY")=`OaI/{C{C`{H'MZV엯 l_,[J\ +ɚ]$S*4O ӄ䨎e.\RRTTPP`W%::̇?`LiKySRww᭘=. $@ + B;ްi1Fo7S!@!qOェkf\Hrr[kK3.!YhښY^h[?j$^:P읕:5}Vt~rA +E9"𡜛`s522 sQfhB,B6%G>>A\8y艳?+; ӽ451ao)4:G4bu0:t:`߈uV5B!Cp?˽ZH!|&Ķ,k]R AgW䒔֤mraS݀i=l2IJC:QuP!ѱqכ HZN0g5׶wVƀ%D5Y_oAT:zUך:lKk!N7}o6] 8{_0@&3%n{U7M1/Ñ蝥B Opa*㢕yy99Z9YYP!438300ɰIJ5&''zh?WO}'4A09Č2s/~X61#Rܘ_7#I97I +Y (9*`njvff.41#E LOLOLT-z5 Yx8Ŕ8%|ĩ&*'oGcc?IQSfkLKR͌W&e*e)#2UsҕRe^R*m:DŴ" @Ǜ4ViL)Ѳɑ)S[&Gݟtӟ=AN=r' Vۢdf%j5=JY ZI9o]͏oۧ'?pn&9Lc+,$ʊw`nٱ8W_XM +m%:W;H{ru7Q/ sW>xa!e=O.>Bgm;ZJ :=N ,| #䮮oۨnX\Y=lݪu"K^C]^ն j`l=ƅpl.nrj L"Y;=(7({-QJtnbyh(4lNɭG=F<\о> '̍mY,k(?[Gr4qV+drVg#~FIJxPdrni3:Vj5-VKckn! +pAzv=~;btzF^]N=I5.4k;DA;p<ןee2eATT_֖%Ϣ/Wݮ\]*]ULy[`d֚fk}3d1q]vȱ39ՔMN ea1Y'rԊ@M;k2|u֝ e e D%+r*DljܲWxBG:ҐZdm6X_2n >]!SԈ&CC5H#xf_oݺ+Un(o(/Ȑ?j`+6ʕŒUcgW=7?>?B!1Pv_ 2DAܨ=A ƻ˧ǴኸI΄ث MVNUNC1vnf^v^s3s5s4ZRte]IQ$@1+^1=^I\GqM.Xiʭv_ttc? xşӶdWb%z?ZQlZ$4 +X9wM]eVrfh0&*B3Ӂ8x)"NL}a >l܅{W^)M,o(峘qɬD))LC%bь8O3#=4N+ӎngBckG F~Aؽ"nfF<>>:wܭAjdHP#jFBTHEdJ`d% +%jLrJL:' kcQkesIDc;~Н* )cR)3kiQ?v-) +!BAD; 'eT~qjEJ]a Q`.p+Y "pV*`VHNk(&yT/ R@; 0! ^PJ$&!8H~PF6U$KeB .Sh{ 1&#sUC`kh*Ś$bы܎$>zZ-m" p3I1ϩ3ЀAGƥ>XpH+5 󨘤~4ڡ&.ФWTi]bNs8X88N d6"$;T8kɺ8%5еLK~~!KG}=jcX'@'K4|;:HӣBiHb`8dvӃEE^'IPdY'M@zHz(ȼ0ͯZu/*5a*uˡ{e'JOm>f\v,<_ nhKE]GYS %Aeқ٧0 0daV + +X)U۽ZOv.kIy\+Y4fuج|A,&lbLF6#k0=>zFJ &`Ԛ]Ftɴȩ>霄OgǏ0cĈQB׷A-7iΊ$4f´>z| E( Oac? ;!|GТz#@kMP 9pLeG[e +o},ca &|uFFkz$O}Ŕ:tzzKn0Cmiɀ?B(ոJM<R;^}Qi* bKkĵ&T6sW67H`@ЈFGg]aͦTP6@lVJ8*BrER= ;ݾ?hW*@(F ]c( )y1ӁCzʽUuDNit,8WoBTrSpJ@"E*w+!]*2@-h+ +C"H=|m*Eq49@xypaF-\(j bT3BjLrJN!ErHfkYۥ@,Ir;LAȕRPi +U _8XQwi pݤDE=@~#~7Aԟwc?C `!~BR EaFr@^+e} #EC 6PC2?Wӥtޕ)W?h( HdZzvVvnu{?{3p̅kUUVWϾsv9Μ +qq;sܵsWz9sJ_9/Ƨ9ssW*~yWO^ߵƶ]/Y 6|"KʎwЕS9S͙׫}Ud\<{*\| \՟3<^WWWS}^rCǾޱZَ˖ ]udg*/q\rSYNN|ו=]y:O}m6\+z .(m߃ QyAem}:dTЈF~4r\Шq!ǍqB +y;rG=h+C :xTA#> +4rxX{h ̫EǾT@ n0CB 16x؁bP$ } NJ߆ӿnn0wy=^#FnЈ ^7B?gY3m~Ȼ8~gă \pae nȎCsƗ"z5f/=0hj HXYz{@RnhFh8 jD18Z)ψ|iS+Dz5Thq: p aКZ}~/lmD# 6C iE=KO׶_A431s^8 G6I;ߛQެ` NM}٧?}Y>y}đYG>fG}/vf{ss''>>a s}< Ç?^buxC86>g?0b:njC<8^(PS^Σ7Lߛ~ǡ!M;4.ГM;Lxoڞ]lh0"(8hXpaÞeXq{!!%6:hؘᣃR Q/+v +#,3/ݱr[\`aea 26":*< 'Vc"= DSƉ\=oay慍?ͿdEKGĆÖpKs,:XH >0/}""K5g1JcO_6~¢ʼn"AatdXdTXzKXdLx$K̳""|)h(1svXe8 ҅CwM[:o^BNdXtTXtDX/'&O?/!":""ń#@TcDxTEK" jR2jk _._{͓?enD̜_޽m/w=yX[t?   hkmy +jj_c(c@pQ|qNٟNaʒWVJNI{G>p_sMj _y'|j͗(8ѵb7Oَ)edJ9JNg`3w8، Ny!9К~l#m9ZBAx6,u'K9Qſ37N<%"/4g$ vd ;˱R"H.KR!J/ӷ2RlÓ}T%nu [^%`鴝DA biϪlz3_ı%;K0/$(b П-xVDXL܃#ȑ +@FKF#dv)Hw +Oc {V8|lcpus}fHËX ^ ح+v; vFB䔵Cnj[M6I6u] 'E0E½·gC2$zq2z+Um;+ +AIN^O5BIbq]}i7хS^fqб.' [vة)-_sWȐbcaРIwlFN`E6@pkL,I^چqhxј Q,GG$}~sI"6r;=g'HqA@;Hس'ً?E0vWP6a}CF/Yw-AA$tfڊ3v 'z!|pv /V)\**5?|hӖCVꊲC~ q\9x1xwgɷ[.^X2W{7U%+0]ڶVuc@ZlՎe!aacx* b%.]e[ևϕ%yyE+Lƥy|tXfsNɴ7/ bS86X;ZeZZdi)W +v ; +/Eظz--s(Oc^mZm\ue_i]l4'Vd4ExD~ +\l/ s4 WCx#M/9^ekekdiffdg(+JòkMXޞDn087o.'wHo u`l5A+0>:7E]/rOp B;1O2 +Qi_gsI A~nz: 6zAmRMz|`P$u4TEe\K%W)!!B"8A +!u hbO=b;a{14Iue&]Z;#Vj70l記0*w =I9 =X3w>?˟cNë́KkcDJ#ͦ!Nx%,"Yivtۈ'N zK-PI` ̂@^QwAН&h[K j 꾺%Sߡ  ?xs "ooE|s+z""e5f!v9~=~=n-v5?ف(r1̓n(X"79LsFk_ILa ֢>#V:6bI%֬J{fq.ӝv ƨB3W# 8 +\s#g~*) }4&Rn74g.l9&ϑK(SK,޼|,.J^Ϗy^G{VyYJiː0͒\+K3U9Վu"@":]y Yd=[owm.`eјj.@mb2J [mnp.csr_ +J;ٍp00PlhBk,LB{PPIPH04J0z^ ԻUzB? ?D +:C ?^YIj >d 4՘ +0J0 +=C$ 3 +ݳr-@!tBK+ QץX#٩?JȐc2jo&'Wmrnѥ28t9JeZJ4h>5IOv[&:Yށťǡ10|Ę5F;m#D١Tp";XB%\zqx$^`\0TX"$J84Vap,EDU"_K}`T48`؞OMJG)VbGD݂iDrB#:DmΉlQ{o:}h }u k]ܷk*c7ÙݙKN  RqXRL,G _bACZoB㐢;`@%kbcI"c×{{ؘ7N ?N%mt$J{ȜL>*)t$lжO,u8P D+ [$ `3UJ + :6] +]ǎݕANIϬoiAB T EEѢ}!QEQdhAA8W(wZ+r +؋iB["YL6á]NV A`%HgkBFMV)* f5nkh& ֪642ȉA:uh} ^l> B\ ȩ3+Jw.2ԙ8ֱ?J7yd^*kߕs'x@ h `}0;iYP!fa er[L%UnlچTACF|JԝԪlvyB3 rUk$*k/MyfFdv2htvBl[-nKj9O)# c%GBb{VksVs[l 9P'`bMM{ ++mݱ'y;i_qP.iۘL̗ J)#KI%DR X%~Df@cZb6! +/0-[oXƱ Ν&V=*C P:.[$Oi7Q{u;o6%;.~v8K"5~fҝPo(+4 5Uf +,@@Onp n-ѻ%:XW6@ɴ*"e"u2EnoS[e&pY.ȳ;j5D2%v9nU )j5|^R弥"Wejn;ClZ$ +&<-T6ɦI3XTQ#ss[DRt]֤:H@ {-,k; o"&;!sn|Qn`DXѢ3an{T Cf Z4e e C9 *5pƶ+Y!h& ޞvAԗ(oh'ID# +bPc$|@䱓 Xd+-QG}*q1"gPA),qCJhhGݿs#꟥DQjo7(r͈\dU\qh 7O[AVωed^r ׶8>{?={A:k?:ʪpeWsl}}A/Wa~/d&8N"} K) k/J)**mo}2Z%S"ڍ`3vq[xao?'1Y{=L^yLhq'e@!|>;G;S9RS)8UW+%x"/e~u~/g}t" ]ȤRA"ƤmmgRd28*_C{o[{IŎb[r%i%lWp<ϝ>sVg=yd M#$r4Y66~}`biSҜM¬mhS^U”tiE21fk=$eKqTYAªY .%­08k`zV!չ$ZD`aZd(UAo7(P׽02j,A{L6fKA~FY&_( yqY.iKwtTpjJD*A*,ǛeD37cBJ4\H~@w&DhcwC7JFef4cAu^D=).͡Q*wᮤDJ 26-p@ N !CEpRJ;pڨ!!#RS$c#ഢW%URPnp +Pp΅)J ͥ|& rAykzp!UfF Fk&o`0؄f;AZ *obe7\V_cX3b' GHyƍ-Q҇VR]dkf̂QZ#~k}3;Gr\q?c9VاwWV+ݙ;\dbqz'C?=NB`AttV=f{ ܉glʜe2kc[NxZ7ߙ =%#ރAlsn&+Q^o׮D>H"=}.drdf2wшc r"OLHnO+cI[ ֤j؛^FmpmMq|_T׊T:Nd:7`_Q\.w +"~sr8RKl%"Sl!z.v.6W8U`bhGz܁px'ŵoWU(ܱқE%7 6HIU(KF6o+h [}a;pSrhP:/XlAlZ&kqݭ1wY fzPY|A@b|D) d|85d$4Gi +UaoVf֝qzP$!@wzFwu4 VsW 79$#xRB !4qabN⸁Fm{ߛkFV ]ʣ2A@C_^.1q#z0;=2 B@'Dxz #PHIi`%WG R (!U2%!n+1H}DJlD"_C݇6^Hq S֚ 2 ">FPVN+_+!քA'!8wp6 z%w<=9,"pԷ:rLk&83:9]v#g5 wY<qA[Yq̓V@|0]z%/Zsܝw=Ȯ8r*ln> h "y8AW b~t<"{5gZ=̖Tnbd/ ++_h| V8RLGnK+N*so8ّWAgc3al,Cg]T$2(Gl'ӷ|͖VfK-'mMS&omEDaw-g+^sG'r!A;)a~0e\\S'b);DJ9y1IQN dZ`W1=-۫)ۧPHlkZӶ(^8?IMz<(O;p-vY‷@;tskdġF1諾>Gwp #ŁFm׵ؑAXg+ ېATA|)xx>3oꏣ/iů{ "|j샕tIOV:|#W\q\{^X)?YuąY##pS6 kVv:[tD0 +&<NAC+<"g/څepflCNfIb,0FmR7^y㝩 Aqkћ5G'=Nt>OAwepgwea^PÁnj\Cfb'؎+c#c-ܒVjI)5' + /_@,^nq>f \iN2}Yx.IqlCo#ѳ$S$e(J+saJl/nƮӄ._m !PÕ%)u ķ,JKh/ύ,%,QRR񇻊aʴȽpCKC|&Zd-cDK ( OÜA0 )tzAiS@LJAx߰y= ]OsAx=)w{L`nh [JV}><&+@|D/n"| oCȬktI0ڃN_d}ѿKŲ"_0@|$@"7/TqE}wNW2=Үr Pz5XfŻe׶$/(RqmP σ Dt 4 @AxW>YW$mVuw?} ^ :m<^:qd>yHpq wM9 쀑#R:1]!DgPځ+mHܒVCb-d+hmT+U2SRp) ~<6BA? _҉Y Ia_ +rh+jd-h45rj +}h Fv +uw)ŷg.=V0s`Dx‰c'T9ө3y󅊕omuήHw o+Wa* DoD>DJ :| +^wg//_\f a<Dt/| '4싩]Ax9'D}@8"!LR ȅM6ar:"&AC4JUn~/ =})~"_+/}ҁp09CAb@D?Ձ^yu`u.:DQ!kd9fp] +@(v |p'$ienV9RϺ`eAŕMŕm6ʁm +Dpm ^+Y*1TkĈhD-. ^?DW"VW9kbt㑸/ޒv*IesR ӏ{OK]!>2P?B5f!yOXVwe#e3@8s JInkoJHPe*蕐Cv@aSܾ)"%iAIB6b[$[蒫䒣F5sΙ qvw >eG tv&%]ppzM(=R>?w,wtSE'(:JȟL͝N˞I˟)T.6wMQ f}~iRׂӸÏuE-͎a5$ ݔUՁ< eAr@Xo[ R|L-fn!LnfG ^ |&#V?WxU!ޙeH 6@c2<^Dע/ԁ+Ft&i! Mxg]Ӌ L@^@Wu5]@]K;ۅd^5|K>>D=n#jQ@G hi/.MtbK~`uKqĸ0 n.Piװ9v<+B?o_ pe8vTfIi BXҪc`Kye&eUE\40'1hl "\JtPʺbrXJse'ٟ~9喤_WXL5OXEIo-=->D"}edKRD2#4[.5SR1f7AnyH{Xx'i A%-q@pdF,g2$/|[!i/E-N%<8o=gn0eTNh=&: Fe>M1/^Hf$㹒 Hjx|yys)si%Eͽoix4PS)Z+`Og`RK:,L@ kV,²B vҺ&C}?gvoȃ1CI(֑:P 8vxU  ܡgx "A4h"V\&P s +,Y86k#TWVe}971t/ \S+)LsV4Sny$Rxakx:CS.>b9Npp@` Hѽk޿ݞ?15CY#6N-%3Ħ-L MA~u)^E[u$.lvgNʌ@Q7?q,\?)5Yld`;H=[R $/$ @etRt]~Y' kw; AF6s;3'Ć#](ė M<Ѿ>w"@H6HLheAu@4"Y rÉ +6CbQtw)/>}edKUhT¹SfNOW7Mq@msS? t_vls tgalvL + xXg)RQ lo ؝%|UY9HZ;Q:LCxI }4-OsZۡ;`7A(&dfvH0\35+tҧB1fԤɖ\S5nݏ ҆_ú?*} ~vP\rWp NA8S'd+FGbw_"ysǃ~;_܊>71a} pK}KW wn%Z&M +8/EeXHW"^oiǭv;|RQ,(<yK)7Em>eqO")a[V4 €nC_uzdJQ=H 0 !ܡcKډʹA\;R2g:H[j^0J. +/۲ieڷw}O>+Rl:JxW~c_7]_\/5WTP2wdx۹S fr˗/NsW!(ơ8AJZ&@7 n2DbD,C X< +uA@8}#{at`7%JsÎĜw=>*J\aw\zHw&/1t`^y=v]S Y {A-E +!" D.z2{$ؼ axMb~'񱁠:ΥV[Eks@ [!Ha0E\tҸr Ui`9}!e yA'T<%3Sz]Jav:Ui7F6  D?P'+{)msZ=\u2rۓW/}O2«B~V1Q @t]ΐ;,ݤ@H6/t`2Ctwz@ARv.%:%]j hݛSJ D2%q{HF& q CDhKe2 mu:$ve I f/j7ڲϚ'7>&tX7m;7;I w֛g +ʖ fOM'W,] vTˁI Ù^B sI0;_̼3:NȀP( x ;DtXXtObV{;bb tw}i8:.z~?*w@ДA7Y,U/!mqsL1@&~$fhBZgwysҹ,1m5vygphv +Vjt%8FႹO>WzGCf~}38]L6} FOaXfKqi, p(L8hŰߛޛ l+nx-qxC~'P@ ń@dn- 7UR @!@AOClj1z0@**L"Vw%GzL¨vVO~qh%[=%7%~iwH, +Xɶ@"NB$M/):N MYۣp\K^1zdHbE UfB*i ]ơU"8^v3 !QZih#_[<7ц )kw@ۜ2 Qdkd5ʵ'׏j?O,;|tu=%"!O7}:_T4W@{QX&8Kֲ|@6bKge/Q#8 y@tEj<tr_pM.g}X-(x\)Q@zab26qĪ>l`L2rA=Lb,4"lBpKjM&[hO K:Ģֿ V=G!&y7>a0:m~_OqkpAuo K>6 +)I53gXdģдU>~<{[OZK.|',T\=ƒr-&~i_r tZi9؏.k, @ lY1psP(~'Ps-Pu_U$Μ֔j1eϭ'8gJ+MGƔz" ġn(Iz&#(=vVlbq40݉郲 x )Vy{=nyKr[>M\9.^}[Ʒ7~*"# E؉\OԊ@;7ex "(&WfDe[9[Tt:+;. L rϙ2)EkgwGe9̼FCЖQ +9\#`7CQ0onbÌ@xBm ^8ye]@uScC 3\E#Ӂmv +E҇JHab,w6g BVuxUa 'ˑwu:C`M|9^a>0;S\dǞ^5Ў f<艇A|kxJU#i>ʼ&ޗol;ʤs̝#S9'b i[bL A+0WxW,. +}}HeS;X 9@MۇHu/˻nQE=`$*hNJ5oo1 H"hE&'zb B{J!ld%Y{[L>IO{A@r( pĐA\p6XS{@ט5m;UwV7@,Xԅִ=_άի + I#1oXdV \[5u` .k}a鯵nbRc^0Bv̻AE2sc Sɳ\f b@M&>mΜuÒ2-n_s=_QQ䇗sDXpV#fk'.,Әgۖ%9S )i֟]B3Grܾ`WK#A~rji$ ־ﯽySx',_p0A(688Vt)vQ˖ぬs wGBnݸaz"1_*z^YQ﫺 dQ3,8xBb@*kQSPry2AO@p@6j9%$ F6z^':|N? qJ{ܥ=' ۮDE9urIpB#58Gٙr}dsh ugB:o7 nkaX~ +, @L=p=6kŽ .4oBCbմj^3bps`PšF:L#x Mբy80;@L-p@<0@{+*)@]}qdg ebA,bgl,boe2MT63@l pzW.Dڨ4x 1IP(#d_x%R9XWͮ-g`bdRa&44bcFŬ3@N sX$@[l[|];Dn#@4ZpF1CY'fa54ᄸ4!  ΐ}U=֚Bvw~{@qt@&M eS ^AhH:>,M:4`p5;w5}'Fjއ<|dfW9{jx*owiL!" @o=_Fy7/N h({n^AT  nQtUoNНklB@ܲIǴ#BK$ʀ0 <4#{^yR RupH(6wIYeNTNyP8@@p:R{\ zh-B F]H x#H+S vl.Qh0@CVqe_J$} wEb-!s!& Ps {o<> + D):G#$XvS@.O>@0h 8 Q1awaݩu6"4:F:@R1k_ځ &hey*{a-8<?'M@)hq{q{rk|oD L@ءÍgo|=闓~d೻ķ% ,| HM) nqǖw;2DM~G+Ɋ W~?X~z@\]w|W}eV*?Ȭ&UO o-6kVg?qbQr),kߖvD=ff Q,_]AEw'P(pXTaNQ텗6ucWn7㭒GQi)h.p@w ^]{ :~hҰD>YOUt{=^/ЀVN#nq6ڳk)eS2ͱ7rx :,i7!Hn"bg|b5Ȣ/X@eòB&xԁK +Kn:0t@ |^ + , D{ܾ'@8*S%.l0}6RL6%x@:`{c >*gW֌J:%]XryUi(X%`翿+qOa B4uaM~@h|Ϟˆس临PSQb0i +>= f!>݋WcS+cƲ>=!2@7 > aIЄ r{vk~bZv1?čHsƧ_M\+}T,k|`2,ˆ@oʻpĪHk{JfuB? :\^-|׼eeG)ʇ7:Kjtx&H/5n}4PJ۶s,\G p}\{ii#is}VTV/>ŒU% 7 si b  ,Dk5v1Q &F͵Cn<|Y/NC, uN>E%"̬n . XYWbz5g;D SM9}wKHsW$_pq.PFy'򳆘:0@ o74 \B ~4(7b1{>>م/㾸> HS ϸEd^{>4;0HQ6*G&H\e A:(TQSVzS~գsɺ]vW^a˨7V 'EsoE- /grMI<9 )$Yv +r\(*W5kkꊻ +K{ܲTl/`=kʨÛyLXs`PkRF +5+Ly=ֈ򎀼!kڽ/5S>AHyZa\4[ɔoKV)B(8)^;Zr8o̕CkܰIw=;EEVy6v{W Jx)( ںOBXmYCH8[8kXcL7H+s@hUZn %n!&C}{Jd +܂7" ίzk$k ;0ECd})sYT"V̹ r>NW3/ua*C8۩g$ h :q"@8fWz{6ق[0N_X3b) H+G4H$48nd.q{cbqkvsbCzBع bѴ/{<a8 @ԻJ.M' DZrF1@֫JS +`z( WenEK(iu^r]g6XRI +qHlEKtG kErl@x`9 ɺ7 +DP4˺T~jjB C倫Uއo栃柷43j )D{xܵv9?{]gGzHc:/FSn[R@J..k/[9gYƴJ}b#^~xp9Wf>?vpv0t0?p̌/o ns`! +M}OWt~ƌ@h`#َyn*a|1)Ah9& ď9^?:x^с$谄z9n.0 X@|g~$)<-PlÄ[^x3j $eFcϹ6AL91cl0:7-= D53l!ozJ%'>r&G~pq:D@t`157)r?xs 8 VxOٖS&/mAƬwG|b1dybjćQ@(s@| k̍Am}q3G=!:ge佁d @ p_]{̶~).w˻]vgq:䜳g[R +)Dw8O{(SF>]"喤5ŔXm)hnK;:5DS9s2گ Y/~,F_\o倻_Ε]N;lx37WuecÅo䬽v0Gw_n9*j#>VIG+۹ctz@$58Kᐷd6Iɒ֘]oȪ1W Io*Y{p7@ܛUAHŭ=6 +d3bݸiS S u(ЁXiBT}+,( "RX{-- +ąN|~Ye7a.nr*yhZh ;Iݕ:,O5C( 9AG ! ZZg1bphL!XI +Ö?u2FyA^eg<Q epAٳ 3Pۯ >exe?="QIvoyCq3;pƒ]YkJ4J6 W_M[=9 +Dv[8( nfG7bR9pZ@jΩ7f2 Uƴ +CRwJ9ZfkK,H |oDu!Н /w n6vB=t /v, .?kL>x.!k:M8lSAz8 xOlD \.vAβͫlh!0MaܼFu[ ߜع09,Dq@\ݷЖݏ7kyH:퍱F)vrqw +#!R@m?xYsI=]\ϳ[RV,XtcꁿfvًEԓ?)rޠ zՋ  ̿n7 ~~st@50dqk|A+;?Fϱ]r7'@L^ױX@(MG&>p@s+Cid%:0 CH|W^ t-&'$g!}pwsfۓ%rҴ oF@G K1`Aߍ{4Di[I'9J.9.8ٲ@`ɪf۲풍7 ^Zy_ͩ2 +/xJ}K~qK@r9 mh Bt@(nT8%5KlEs3&ԡJ:dT R K// +'| <@h 17u׷b7vch6Vm=?Yc%u"8(8 ;~#g_V N=%2+l,"W-b,o"VR vD@?~?N{m1'x ګ;@X>O?âbJ?pxnǣZ)X1 o4, Pbo:P wVЄ}fɋEjrl1?) ;ZHGQ@;s@}ӷ?&ej֩1  O#@~̓at-_-zӯT,I GP 뜅p bttgj,$\@P>-(z%ju]8dAdu5!5; @-ֿ}5uP>M~@$T=a ,Dr+!SuҀwN7-iu.9zkFh9cmgZck/yʞ@,#>%/K[}VvVbt #d'd4%iu[b^tVpΚ`ɩG+iJcf9ƒVa:-_}#gP7bQû .ľye;( Tn:pcHI1 bnX~AWn1EsYr@tϽ,H%ZTn+/}{1{dNiz WY |$Ҳ%wpcZnU{vҠr {Qܾ{ X[f;t2rO0kqA`ى>PEA( V;c;c;;Gg }[xPxQ4JKj>:mw%EE$mh :b7PA#ğMgv~h;dQ mu1O[A@|6MAHqq?xYQ@$!8Z@ B<0W+ɶR;@̍?$j4_OwO0m~l_C ~ +@iͿ}ဈN +39d9(wVpTE?3LI3gthd.k lͦ枸{W/ivuSh^bDec"R/PѪv0)0C k +b!]`fagyCۧe`9lw7 X#*=kg:tp_qĦͷ= N.}2t,z^s1HߑJ\ac|{8m>f7O=\vvČ㷸ߌcxڊ37 чH؈ 1bg0!CQ@o)fowG51SB 'ޏ~Ic2cjS|)wr:"XFL r46x >˻=N-pݢVgQ^pY,5J*Qg=@d787 +6^8==K,q[90.IG@~e_Sn*"{$5vr/+C9lgͬ5TI2cJ1/1O @H[;F92}9WIˣip[{ p&j/9$-b QtRh)8gk0ԙj!wg&5e5IM-7 "tXfCi3&-9Oww\݁Ӂk.fwCVv n1@1@<3-/\hYӘ|0{DZx䴯p3>Ir4]9K4HG"v3F5pY8^kn9-whپx GZxB>!$Y a#x@0J:CI oqoz Ypm JKggW}^ՇfbG]I~cDMu 2B *EA8th@3h J;6sH;ܲb4}8@X0QQa xs8?){" +oMHD!nR mo f(>bf;-:Hr,9(=#;t 9mkpso҃'/E;)^9s3f\xC튴N #F;+nG^ t.pkq#,BlQ: ܁!#| LQL2ٽ}ߏ|v\6<ˌ٘AT *ZX$qU|IAQ ⲭ䲽A~ Ͼ^t@ʐ.f6X2-ij4$O*L?[x-q G@o"dI*ka#^ +v\/ lMx^aU"FFKy g9U)Ɯ^mJ̐DeS `" Y@a;@9x(cW2{q`QXp59! U)$ [3ΙgA3D> `ȩ7dj 5*}j.L$7@I*0dJөݛ́Tˉ /Z(7wȁ݀?-/"nڴzX^??wZGGfҜR, 隱M0r+ c@nax&X&fv_b@ v!)+:B\D6pۈ=;a)vT {$=<:% +)\҅?v_F{u SR&sw!k blYӶu؁:DJ< PH@|+©5oI/nQ4077φna}ط;"@ְWM,-5%U +]򔴸[EͰc:dͻ`/Z ^.sd+{F- @CBtBRd>f +ġ@|ٟ"ŗ=.wxD_fk\p7."Xr%ל{ M 3:3 XN I#^?)8ХWû//5~0g`+/oŤ?/= VC~3zc$9F=QOԧ IJm"52mDsR @h NVOIS yggUfD^@|ѯonOGMN'r̲ԦM'H /b !K~IQr#~_N 8NWb۳Rqߧ@/j'D 7_]21"Ĭ' 4s]FI);4popRR= gr5٩Cvup#{>p7)NAL8'sӍkW>@ITD lm.i)A@{FwԂ +Va wlz[)6i +YH,3_%H!*6Ka4cV7_rs3}`bf?Z>[Đ^WfҘ]oo$gm99,;"< 3 K9kY[Y{V=#Ξ^kK%WZH`H(5&!╦r>^HE 2_N4Hz)N%tW]f }մ +]B ӞNI''.^qB,8̬jK /% ;mucݛj @u+N ȕm@!@?9ye wyw@t`&󀠥j!^!"ayyº'9β>^wXE"e# 1kl\A 'V7!(A`ȆkohzrW]@;ip}7pi{| ] +oG1Zt!e;";M~F1r0M`)b-&Wk FSYYy#v[ UV~@:,lYl53n(q!la0hi#/dןsL .F,<!QK8!սV^q sS9?yU/0gd[3lu5 ֤ +B& Q|ɛ`;-3"3^JY5{#a"rS|vBq(wh-L K+.5tXZa5Dd Cff1jLR0e0$*15 NA#0t^&\-ɬ[ ^M})i݁8V~(chbr#.BZDZ ௄bc*Ҡ%mt88%ѝN'ESbqdggI +D_UcVo}{"\%ĹW>@Qyrzb@Uγ@H1;":p},S 9 <[gx+݁ջk/r8:E4u`A1saC W'&~|ȅj̝ddFdL8Q>yWfdE4֘:DcqxI"whx]U,|-Q;K| n3Y)CDns+I@c%bg +d_}s;Q2Q[n?._{[MlKf9ޜ^gA~yBij d @M0Ç4p\ jH_})e,MMB?z p/[O4rV&)7au%DzFkE=@Wn&a ͱS*Sa 3WSgoL?\pZIվ\ˬ$ɥLЃ 3)2Mr\d7 Sx)@qR!A\lh&h%=x3{U]'R 1*V `Ox=b= qť'wb\n^!#]`gXZZ53pJT=-8^aM撃06WfX"Lg?++TSr&koP/:Td \$=8I$&aG >ط/駟.,O9|A7<\p9Fg#B~o#!'y{ XR 23slN]p@y:V Jb(J +a/ _* "&n(׉h  /3d q5djEג]ob-`Ê9B2ԙj\0T0'W*L@(?Db!!j t;#E: 1[LϼRf~R Q:j&Ȭ5A D"ҐR:`% SK7X7BY5&_v#^jbH{Nj52. RD@AH.&! D&AqZYD:IqB+Y;Z|\\;,8ʬċofU@ "H:ZuzkdƉH{{f7sL*4 lリ;aqg|g pHf g6-.k ~ G0="ËX@"5;88iuxL۸?e`eGHH!rށwꁧY"5;(&_O@Dq@ĕ7E8 Noi᭛`Ʋ|@/ԚRk<:$W2AY +X@5̉fR@,Rܒ֐-\j=Z=UAJU쒷9NI箽-m]F!k +\0H)hg.qH.Hn+AqZMPD9Qi"5/r%@^V`8Q}-s VoV%f (۠@P#K+|:h w m3SH2[@מk  NvV + kA13sra㟿{~;:޹yn׵{w$5钹 +~-ɐIjFW;v`ە{|4o_/ܟE{fVя_hh@< txL'.@rW5)t dN  +ez'UnY9;jĴ# bvڱg~D6>1)n;pu +f1ӂ܁p,{Dߕ3C9ۇ:9nư h b!*L"jXɇY y@@9wEfp"ZloU"Zg+R{@|O ?O%cPvY `E5㐺 c: 4pbF5_4Dz֬Si5Zgv'i )eK oo"5HěyJeV kUҘCj>^S+)2cr)>[𙞆K0VX*m R+pFV^Ё(.8x0}~"I̥#ˠOJ>R#p*~$" dYHkD"AO +]R4$)8P,Q <JƷrWd_Myl n̬EAqnZ$wJǗM(L)K)O.O*JW'OHg# + +G'$NʟH*+>]ru,g\_Ժ@ԝSz8 TB&UQǘ)0b& {b3yB5S# 1t}Ɖk>C}!F{Pbbԛ 9ݜC Ĭ1"Mܼp b` =FgڲWQ n#8mFF0@6plAXFKT>\LO˾¶N @F HӇLh:bVeI@R̜UVȕ2jgV+֙YȨڲjm`"/.8xQ@i_X*oZil"F Zjbiyfq3 uȍ@:!C}h̕dBm+ϲFCyVH0h5=#x34J?+ >uC 7ecLwg..m  zXeL|DSS1 J±BB+tI0^eL\aL1mN\1UcZSj% +)CZ,i9q9ieص0V+tхL4$ʌ &ЄW,e)<.,[& +ҁyKWtS7ШP-Y/,f~Ld9 hUlV+ *50$4BeڅyڹY))i?(D,_\ I,'+.W&/WKʕ b@KK>T%R͒2DB9ҋH2@* uh~PM@:GIJ siK9S/~0Jp4}`R-d1Iy͋zs91hGY5H :dv&g$ew/ DRlXu A[(Ϻ;`K߰q3O$ŝ(m̯,f/H zvF  ZD( |:.шbK +'z1Gpn߉8lYe{jwH@AsDL;ю@,A؈Oߒx\l+]3P:c7ta RAL~ +DAaIK; +DqYn&f1I-0%si@GxM'^ݎU[aS ѯ@ ڍ#"kj☼O7m8ciehTK->j8Su 486'9FMNɨmcJqfFQ:d 2lf F`p3f +4H >,P uuW@l D'Hh #~^4%"Ka24eLjQ,8%YKXGWETƖjbK%ژbMtjaja*H])VC2ݢrârcLaAv~:*_+PAQ\yD<"]3;M1#?%陲 ³/@W~>m*r^d`A89Ee8˴bB2)(+>‚%jS)룋t 5sUQ9Y2/,LUIL陖qJ}VNgH +*%ˢs% .̕-ȑAȕ-̕y +D>ȷbA|~4*K27S!L$@&HNM[iRG]-.=u˓gݎ6o:Mr=l9& ŰX|[IjWwc]}"R8~1=3+'4wp-vr`6d豶yla=,!҅wYRi. +Z>j#M:3M<3?=qj])jJ/S'iGe-Q9'R͕/-( KUѥ%ϊPU gEBKEd 9襹pUd*2K9'枕&*a V<3?+;+azd:Z0'E0?M&'Y/]X [P ,_2?W/6]9+Qgmm=6t=ذq{AnVP9~#upABkPVv&D ogA+a<5=hi]ڂP-]xlzkDv>VRO\leKb[ +]-M60vk+Ѝ-),s3܄:&877vq:Ɠ7cP4X_/ '/klIh.鍷 $= r^֐C,!jAoj-dk75{hM8F틣;!;ۀ4#ٲ"F2Pp6t -|@Dwf2PЄ>h>l cCPn`ASs:̴Mk%OT,|nť8V]vHѵ״K Jvfb2VɡJ֨jT흸Lm7(Kw@[g"қ :Q[|h̓MRʕ+V$^X")ǔ+cU1eRP9˼Byd"2Oɠ`UA#r呬RFdfK9YiiS[?ͼqΩiWU" V\{ͩ^_<}/ JKtEKdxJhZ 2G0/_YxAta1E +%Qy@xn42|,rY0h(#p1˜4T@% 1+?=kZJӴds~Aiרvވ*qRϧl\<\=@dNvIG^@`N +ov23kݳLꞑę6%_?vjE-GstN|}΃.Wh}skVM+6KWl/()(e)` e[e%E$ee|wEnkv>ŧ;n>% {A p㍛wa.XkuS%w^ Ci.J^C|<k,,m@ mmz64Z(bRNnicȀj,jGai0y:M(`l0524YZuDmQӬA!RՍWհ(eO]brIД:s E;!5=Q. +_f42vk;5Cu]]ɔԞ6|zäy%gݥU7^gj`PKo&J+?'XvbgtdiwDFOT^`~pAhAx$=Ks3,΋HGۨt~DL]xi)#!2O4-MO-LKNOQhZ`Z"4$Tii K(’O㹟sA|'Im +$G?9{8Vڅ +aH`&><]au 1zg&d5fJ>mp^ͭ{5^;9fX6h e4Hf.;Couv6Coq1CǠ8 ˈAhoi%X(Nγq3jcrٲUQJ41- ;X^P/ TEB`kvhMgљ\z[oq07s|4c}#slZ+Uض'q&5LwPL0NزV0Ggka1j`gQi@*@*5F`vmxLLBe&r4gܸY:LGfYI=,5#4&Jm$@1 zJDh5c'oM@ NaZk!&+: +4%Au4o'tBBgtfk$5Bm Tz|8PC*IP@e,j+B= +U:R'5֦9Hk͸hQDZמ+@r &wFJ\PlYO=ncqkUruL.T>\_//@GO"E^*||yT<*W1/Wer&_XtyǾˏ_rBz|[1ҔUՇۿ?JmV'TȣU +̉`F#gPxA*|0ssdw"3#`%ySbsoɝ?*r>dI sliDz)HF S d"0c/u|vbfN랝57HXE_uz1;w܅bǎ~賻hW pQ^}rW %egAhf9Ӯ'{?}=:t>~Bz}]Bg-~'jͦna'?v=6OO(W/wm#pt/lh e]b\tO 9;y_MTPT]mƭN7sy}CD}E0r P 藨5pȤ?)Ow/v.)Zu;׬;F ޣ k8Nk{hmln&)7It6rc +P.  iHB%a9l*õa ެoJ4FN@gF:IN([ڌؙ@%:K0`Ilu. 8ˍ+(r:vJ޶b`@HxKRoR'V6IM96څzr'VZm|i,k & +fl ͨmI6)J:+IֵP; b=~KDžK ^ykK ?,XWpޓ͇y۹E[ +6unhYג]"ֶfmZӜ9}USʑXV6hNBESJEc/+ֶmn\vۉݧvZ]+O lф[ɥw +Vׯ틞5{Z˶4nl[ߜ!su]ƪڌtVQ6aYʀuҲ2hP@Y]rY=KM+?tnmNv{s+j|rgCцܪ5iթR+, ,{ariMrIS,kX`[Z>.6&ڷ}IJQZ壜5J6>״w1hF~ߟ W<1|Bڞ|l%1F}0.5YzM^c4y &02.9=n1[{MD^"\.`Hmn זUl_!P ځݤP Eo%5FG6:t +&Nz4$skT`7޸s84VgSRv0b߲s~ȓa\)lA7ZCsh;,ZxA5S v^LGc$MN%tJC5FG`05:l6,6>TDpx%Tp]K+`WTZ4fC|#I)v{ H +8vKuVgo~w" xw_{?OSߟᬔYeϋ)XX2c^ԹyS"r?fe!fz0#N`D gO@L` LǬOΌʉ.[[S^ + +3ߍ~瓤w?MpzꌹsΌʟ35"kʜOfe|<3|8ԴOYS?P~HT s?;=2{gs FLM>'gΚ2;YLb[*T }J|2)Ȓ>|o +ޔw%˧Nxf9seG.,x4#8rWNwU`6 m"7 3v-7}iL𗎎ohZSc&ap4yrOCG߽A!'lۿs[: <1ҹ:arր1`()%RX(zT J_ReLVo4صfJmryp``Ȅ /eTܸت +GN 8gPpL9{' +R r +C2[_ <PZ*JM1ͩ'J%dM3][Yq&\ЬdJVUZRKkȬb@"`E ̢aDbX2"&,Yd2Tjp:S-RK߯#l[^y:8hرp#QcF O+=aRE"5EbQ(Hh +-,Y bRL,$6.WJ-Z%^_IZscҾ?S}>q*WڔJTeXjJБ"#_h ==  6-` +bJ,qHT[X$֮su_o[Oz. `7Nca&7}0a~!~a~cCE!c # p0 @C߈ FA8.+80 y+}f@ݳ  n +  Ȋի׬۰a^ڟytM[7zavo mXGܼ)nܺn[6/5.~uWMKʂZvؕoN9knެu[[7oxpaӃ7{ 7^ [57~xt?\㥚=z!i骠x_N+ 7juMiѮ߸ ~Pc>OOwo7nhyxtF ч))kC'-Xw_~uS/^d͵ ^pE޹|Ε˷roOs+WF*ⷫWo_zkW_zKW^r{MAacL;7a_>rٳ\~UdoK p"2%hswt\|%FoຮW{Jk^W|ٳ^fpAaacg͊ٺԡ׎v,ڵG=˷凋^~˅` xgW}WZsJ˕Wܿ|÷w=;o ˌ@I Ɇ ;$7Bƾ>cV7BǼ:5yAՐ1а7j6Ǽ> +nؿ + ͐1^;cby=t8^ c¸WCǽ608 t׸G`gWƽʠa L9WB^! g 5l Jhkc`.d cOksZOk?#A?~e +e(`JaԸyJB rPOR0,2<& ,dZc&8; p1A`dPwTv#, }F"=_Ag +w|o`'u|A01?N1~=#C̰m_`oq`0B8"3~@!r?p̃!39e{N7Qޟ{/ދ<~"0s>ޜ9>l#|~zyC7"uݹG>8Qz?b^ 9!{ N 36($0(((<  3|7_1/t#21z&4< ;LJ +f 5L1cLJ}ƄGÍd'd$ıQAF <>4 a`!!C&;1,<}7BCB_DX"y WB$VXLLp冸Jlr<_RnJ-=kfq2R]a]n/ŗZ:e3,C2h\?@K.6^n\]jQsRO9o~l\\lܢE qhq"oaq̢E[4{qoѬ1Q,NK1hX;@8(fbخ cˆDo 3f,W`R\L⧉ظgNL좘ء`"k$SY<ȘYΚ7#Ǿ{Ӧϟ5qŋccEGD# A 1{y1ECAƼ@\pQTTg,>7z|o0L}_~{ڴ$DK^06zal`獎S_;@c)4I+uo<ӿʯ\+N8Wp¹+ړaUkگ],kNr9X=NW} +Wˎ%G_x*V}Y{ʋ1 t_Ms?2[J_zԳ^jQ +#G=+yV1'PמK~(g83k6T۸uۮo6wt5w47-CJ]/@g'bWGjQʩo޹zF 9((0l23O[w46v4v5v44{6hG0mϧŴ775u4tݾ|:wﻳ22=!!竓^0ilnkhjmDAhB7 Mʧa Zؚgx=뷻͗<̝SogeU(_}5V7667 - ggi94447454Զ=nK_N|u+7w%1,L<|ܹ~z>ƚVhہ(6 P7e6=:5 ujn̏w<۱ 74',l\T⃇Μ9{凿𰾡>z0Kk]=8ghmm}uu uM5խ6t7v%;@F#^ {;ifjucۆsO~WK&wڀt.{n{?.,^.n` wQ,;]Iy; g;E*{E/ /4NZmj7<[If [Fn'w`9 ۆ͚ClrX663Z7 +w7hw͗<[[M썖 h l6y[hʀ@9X0 {ۙ#ޜޔΘްt&m1o;}u_9ȗߜ:-)r< !Cp"l^ ]%aw^ޫ1E +kzT'+Xo{cMv +&nz Gp3['餜Ppaёf]0mP8=GmeNiI_ͭvShH3}h9 i;pvi38FN ^rx.h'N9pBUGdjhQ޹'(+FܸYQHIfsb #(H_ael@ pHq|6 c$Z?(\Im^劝ƍtiޕ[UmM$mQf0E$ XBPXH3P!74a 8&9}M/k#ǎxqƥKZZ|ی8|-Q{j7vq0[܌J</Xm&͈zi Avp]WQ g +DNu0\ߺooS+KV* ͋̋-YaK*J"-Y>aaZTPf[cAL!D] bKt*(>w=6j+W4aS ^,,}f1Z7~ $aDA0a"1!. |>Gmɓ?V;~r츿%$ftZFb +Lq`e!hn`|wmq5"azdӏ++4/$+T:ovZ4>[S'hj'q"3IZ&Ý>i6q6q&q)QT&%eT'TTTK*T˕)KJ4)eƌX*cZcVlP; +"زTTM^K^M$V5CI`X P倂R\\F)-R+Q/*V)ce+'kLi}wYH0p/. ZP&2v(8UABP:;Bog*ťy:7M9t@YcH&;8<:4Q}: sMN t(t^\i\P0[da80oQ;]W{0,Ox"Ǫ5{^*[Cha'fbD5&R\*=2O hZl2MVd v4v)a(K5 PyQQaؘvکлfs^\Sƽ'N+,kOX032M$*R$ĀeB$A( rb("5S@:f +shqMn /e=kY@xKerB砰`j;\XE66D 첰1_KI|J JZ+6TYr.k?Iəw6jL4F?[=`!|ejTi+l"M'IH>``.K29(cXx()`CP_L2.98/|?w +A `Zqԍ`}JʛH f&?*9`[uon{: :pk kkpx5u9se kKo5=?x+Sﲯғ Xe\mIle-؃nj b-,6adl`Xo[֙L@:Bn(iU5zn%!]iH]iN]mjS7Gy[pX}Kp;`XgLB@!2eT!S5T>u>e!yq(!RrvThPuR.ҔRiLbܥm7\r 7sJ5npI.o@?C(,\SGK 0PV/o޾K$'OOe4cC"Q3ൊ 0hiz͗o^NfGȘ RGۺBDq$G8 +vK +pRB4o!"5.T瀧@{$VGLvÆc`b/- )B5~µ{懲SPщ٧%J`b0|Fl`y# 8 :# +$u@V&sƀ%»@c`}BБQ> Y-mfʎ9Hxb +xPP](W';x rȜ=,p*ۺm݆nYW^(WdApiF ޔL^_t+W.2c%{'{?63V}_y +R*k+}½{>0vQyܝd"{;4fNjJlJbJڌm#e/Xko jĚݎ U欃dWU<젫s98NDvvrtty;yYm-g y[m[al&s6,З tе u䍣-5MMeGk?W/Ybقn%@>*o&9}M F,` BΘVeH'%%Uy\xgcL\wK yЬ˦@X2܄ D؎E7>3;j-C#zdWl3b:db#(GAv(S )azři6w>/C+Qx=ʎю5s^j6(J#O!! ĕ«# DW '83 dNO[[Qώȭ97}dG~x]YU]zSzS|UÁ؋" +ϡ@3~N! v|m'r@&X67792gWޜ4ո w ktS7`Y۱3v]uQ~CD~,** 8A2wvy;|D x*"o;" 8S1YPF$ۋ(F詝øw%%e]]<=kpɵ0y!r\G7HND#'Q] ɘ@zp_R<_~m,oq5 7~BnAAK'h3hH gaQ.WLvvԁI=` JrEY6Fkil-\sԪ2ٌC@ džjiʄÔ* EwgmhL%u*TsH&0_*p+A,.sSeX0"l +-[w;W|_nZ~Ⱦmy{G=;זTY +%]%a9Ј}Ctd }N!wEg3267b;mNZsVʛSǿ;5=u݅\em[{?{.׆S,;,g=*dg1H E{ ёW0?y vX[s777ja0@lfm즪y?]?ړKr?B2}mr@oA2H#r6[l2go4eӧӦTiRVS*3gΝFV )^omOI]9pv߷i5Z*˷(7K ܂G3ymݠ8Z ɋ `&sm6?&E2TI0E`&A0`A/E +{Ge˚O7N1)MuZ(0dߺuĉ\Pv$LOԴTETLEH CB ؘlB ibB{Gb^ 83!24j;ŀsXAqN;zbC(ĸ%Ō@P("(Xef p@07`3P2t5 +D76S:-p_Ni1v 'ǂ@s,DijV Xu Lsͥui8;Alg-ؒ(iwH(&$"gs@"`@N$Y$[ql9ؒIhtBX%{ϼ[U] 9߃fEO}ý>3 ^Y/,׋Ơ6O[DI yȚ%H+b.o0b{9cq&3|/}cމY6OX;7o,_u v.m*<dk/n~ˎw/SҦj0&APA@!UTLe_PU=DPmVggQ9V{~ety){ؓߓk\C}>tͭ旚 q76d=QY/d1Vl{hcA\y'@:(33&[aot(Wr' ]8gwo#RLa"`J5vt%lU SyQ~]rQtZtZx|=^y q,S[ekeۙ.sz>l&l.d1|9]vʒQaȨX̔W_4m3}]':b^ڍ9St+A"x+yS>PHV9偈%!`VI}ho(lvlB)@/./#ȹuML3*\)/F-Y'Tq)Hbzrr:[nfl Ī69 : +Lt_k0Bs rO:0qz "oMoq@v"\_1Iax+/?=pw Ƴ!ŸDb 432ÌN=`4D@/3):<- ĩ|Yi4WbMonz?{jM-{|bpB=@cC:D5QMDu> F1Bw2vS*;(hr7{jdϏ^ijx6]*kgy`ͅH=<[~Eͥ-%)ma$҅I v6 9DgXRt³dl6䜻윣5Ζ߸cD [,ltI꾠v0\wiҖrV e>+*CB_ ,IZ0B%-ʳӮf{IZ|ܒY?VcH D4lV5ؾKd,Y-Y).NO/d돖/*ŜeiZYu @$ЀE~,eS2rҦ9ת&CLiIc`,J"vVհӫJp~-lxSC* {d0cfA"8+(Wwu\㚭 KYPځ9fv@\"a$S"YZSk2A͂/+aeߔXGF  Xo@,ɳqiji~D { g#>Gua +@,AZBQN/bbOaPifx:0<Ny9 "MOo?߂i '+jd2jP`bFeMpA}K/TT+[՗^؂@ch?>@Խ3l=UD3Nf78_ 7Oh_Z7v?ϔlåFƑv* ?QEI(#O6FQR +WX y Vwd].oq8ZkiͫUr-~Y#b%0U(@`7ʻ$b|D(I>I⌫Qv^l Ut+AXo7òC҅UUUsG%G&WNeVK+$kOo1 Cl^ >faM6DtXa ^ P+!2x , :,P_ˬ#:i@V B pl'bH^j!:X@0V&,tA!D:`$bsfY5]X! %00^~Z[7 +I 0; (uWDjiG :Rt`wajH9bbo1B;X2ŅP\"}S@x H~P#JTox;@ U͹=ؤ&,1 9C[I; X7ԃM˛olռq +F5`qyKB 1-hDX{> {YUoU#z^w1Pt -훻@(zhn5zV]TkoXJ\d*„>X#;l\]˯;v-A \MLFڛu2Udr)).ɻbA}(0wbDhK|"98hW LĴ3s@-ҦhִI'cפ ʗ3+$KtقIJ{_n獱:"_g p%#-}X aW: ;>MAT "Ԉ2bkm! !&ҁܠM]F%.^__zmYIkp1!/礿Y`! HZ 6wIW;o$nY](MJ&3+掔-/T,W.u҆ e@Q@VF#"D0;M!}fG㹃X#G7Ѱaj"G 8 c_z|< h"M԰7E>PpYa-+pmbhiz8 @ADX'nV:T +xWbftƟDl@T:@02$Z~ }"qF 9OٯRb2:̜>[E܁o=,qI:̐`5 :G 4ܞޙ MzƦdįSx E7aݮ+ p` [=M (:x ͅx4@֠hZNQU=>eO*y]G +X4j4l OngCnCx{&* @"5# +~% ^kM@K֗."՗ qHp!Ut8U$jB/{.1缅 +u{~H2=G+"]aEbSGHٻ!t e-%$v60o FpxISv{]G(9Ϋ2Z#eWJ Z;"oʋ;hHl}u0v? IꬣYz +q4Ce}%;>c[bh12#}ˠv1<+ا7 ڵl9$%GW/(|az%1\L-<@}x ho:>j%S[2Di 4}]UBΐGZ €"2L-1/ VںPt+Ont\X}a90,t1L^G}c38w8 6%@D 6;踶+BG"sLH- ~Gڤ}6Dמwd$TH +˯.{g{w^/Yl.Y8,=,>Z y0# BA5jś#ơY',#_o:*ǤU󙕺 +]d81-: _#KIrmc k}%U Dl; b" "" `\du+m`E@F BMpEtFwz bzXXB5&I@PpЀ)FF}̊1oAD@>K'GNbn%~foA>}ZB,qB<4#&Gݑߔ!*"aFax8VoNxÄ=$@ @|zťuDAí1/ps{{sg=2?EVz +׉ D [@@GּS^EwLܘ?.n/m% +={Z:D:\D&ZH"hk0Avku= s5X)ͯ)ͪ^gI'O%s|*b +dٍ$CX mz$B7f]x UOM_{ϦH"H##rHj8 5ܲtYq%{P +I(u2R+U4"N <ĉY{PP `J.܊vHrqTV]t&ߘ,s aZ]E*]1 :TH+y tk܁d SKCdb)Lj8" BD +Wߎ0@$m&m"nRn5 +D@p[C!,Xt*c,ߝ䀘 ,BNas"_ǿ@ `%1Z#Dk0 >4R$j+/w&ixs\"6s}):<,+aUah+q[w)y +D@u @0xr`j)0wZ BODM{s{ @0VWĬOgiix @h#ut5-٧b7c Dl(/l( / - Q7)"% 4 kCB!@u^%sB@8Jj>~/+񙼋9@엚@Hz"Rgr{,݋PbNAt+7榁:uԦ?xU}~ $]^y✳vxHMfO +U~A =!"ꮨ3*4DpRG@Pt0N6/۫:]6G9{i[ Kf`"@5M&AVc<!&}qD +Dxb14@,ud+D b8[(,CLVnY;J^b ۾QȌ`^[ၨ/\ލ +d YttX  ߕX@&!8cf0Lt sȔwR@Ib + : iK:}ku`xXbQx 1 4ܞƅ @,Q)#Y̋phvC7; >;Nk<a῔սAxMc-A  ^d2\uZ}K\ @uOx ]wQ/1zq v=PxIW^S bCӿ{pA1> +8/M +mqQ :K㗃/4/!~X+Z=l8tPeU8Kk~'{\V*ıF=!%^zS (Qw&P +Rb +bUXiĀo4[qUdҘ^2Xb:*70f:+NְHm@2 w =$oYyUW@Pս^u[݃q+v NrM2R샠@^slTa{2[Ėf~lIOaLz;F"ś<{DZxMo2 XwP<<;ls+ !qiţHƼ~cn5߭p4āX3+poI_mHR\= g\K&9J;-68uC4rG&Cs.8:ˎL3”h MN`- %CÆ켔?RbZ @l!nP6>G-3A:D%{BO@YVGO\C> xB@# Ӂ >*lbf +{蚕nuwd~=~!aA`nv #^>7x0lzyoc"oF=Ó>oYL7Q6>6La7\aP0XOfqs4T4ָ Aqvs.,|b;?OHV?:;+vc &:|Հo < +sIq [dg4_bpAc"B WBC0/C/u4Z3Tת,6uKx{מgsʻ@%mQe&mOWn[\Ҁa,ڧ"^`Hj/+&8長xNrJ,%J! @O<XW)ATvB.Fͪ{ y4}.u (6GGA5xrb` 4$`qD!Bѥ%`@] c3&, @LKwz#s7"ȡFr\6J:@lCJp#:G*˦378<1Kl$@#zx㦐+hЉYyIG' Ffx &!pƱ09}qx𰾹y6L y0a7,%'/#>Ua|686$:` ϐ ^86<ŗsϦ7euE=JnY7@CX~+Ba{?LJ!:x0D5Iwv?rn6 &cZH 0Ram,Ͱƒbn>oo 9!Y +,yu ˱_:'?U8܌MꮘNrFp@Рe%M8*pz0Z{!Rw1 :4\6B\ 7>P+˘P'i5+M*ͯ)>\Og?wM&5, (|o:5IAglEdkMO@7:k,GeeWL"QDda`芢d4;@At +!XMe},VАF#iur_W/Z_n| :lh-e 7Zu W_JhHM p߁,m$G"e/s4б%ZYJ*=z<'Lo@BGāN KWf wkp";ĝ'5$ގ!&o&@u #_EKoӀ5V|Iܙ<0 +$Toȳq:y k½%%e<>CH-qaJ!>>>7-^Q:Apcq{579n&j<bRxH"Z7@nYW o7IM)z4 +' СR0DÕH둦P2_5W~ƓȨȬ{ç9'@(c]-!kţz"4x(nqtB"êPw~ܬyO8jCU}%k/W}kD9M0"WnZCYGPNjz!3#_AUtm3F[vBly_+qch@O&5bH,Z"TySObYCq HMĮGo`@.4Сָ.q0ɭ +lLS5 +K MāC:UBJ죭եd {?Łn_b I:$V]T4+KTRKzƕv"D &:

NJL6<$!'ggי56õWHjD:E[ḵӇD bRD2,^Ezl`[ h@1@^ B.O8 zga ~-Q3BQވ[@DСbtix=F #oh3;}g=EMzJyd]n+Tw qqQ8%!IWHt9Bh틨K DCP`bRRr2KťA_ iOv䜻Ζ1VVR2@j{ys@l UYxf +@2z6`*XUwPCRl57C>wj&OiWQ=v=Ce<$]=Prkgݸ;Fѓ6p !Fh*K@VԯDdai@@,`V SLOC8㐪C0Qxj0/c!{R D#Q"e7!XS>I.Z gd4aTxtZtH@#w\ճ@\>HdY6>1$ &$MSi>:q+~G3 m2ǧw҉i )\o:zm_Vr@nxn s@"@)؃ @h;|x[ ~,5=D"z'-tUmdNz`1ߢD Ѯ.nn ok%mp`#&69tOp ?D2"/lnw&ܷa恘[e /H?@CQb̯2dx3tF|04o29͎P^:xno ^D\bv?hG"r}8\r +96@(;B ƷbaU=B'=Oঘ&',ex5B .@?_PPݥPPÕ&?xhx=x +S9/5Py[lq',jj"Iz'~LUY,+UA UAH"d8Dw:pa/8[mR KW_׿Pv ^.קkm'me`DKYb]:e%,$2pthsᮇf{ [A-֒6U_-_~`qf̓;6 \,c|0oИ3rGb`n +h\ C2[ =CoXFX5[#"j=Fc^Fox\:ě›xL4}# , asmmߵv /&_.ۇE7 oC>KV`Ktܦ@Lx8  b]]v}ǿ @-8j@ 2acՈ̂y&9 l ߦ1&]\@iR;CWO!@|0/ ~9(gsb DFw[b?̽n<_p[sUmA<ء' vp?/KA6"1S3k= ledoZ3C +˫R2㋅ƗU,?!{؏sJ;DNKLg0d7݀*EmDl%n3LHغKDzЯj΃nyS@"S&$%bn 3&%nJo=|r|bkCUbkzKlɝCI:L[Mm Q @RC_  |w7'էba' +Ut{>Ju"Hͅp 6yŖzDPaq+vOY5JNu A*㾒 {LgyĿr8q운)u3i;׌D44}!NՃTz0>UyXrKڜg6x3/j6 yʰ\hBc+=@HZXii.t9{8P0}PunDǯXJ"5%"N.Y犏Lc 5`0C!1 uo{?'BX(BYi; H:@ 1SN-b#JDXi.1{rwAqUwx(Wz]zSr_PY_U^.?b)W3 pDPM1e=u RSt6l `` P^YGºF ,`+e/.?\8V;|$¯!;5=^MW=z=^&>y*U#z㖼z3qܚWo=+Yz)gswCoH̓AQ!t(av-@oWbJvD4Az';v};L yh0iYxmt1wu`x'y  ;됪v rF@xv L}VS@mq^tއ c @x8 ~H{Idم@xnC.2d' +zwO<5kdG?=mc\0k;6]D Y&l.Y2 -ցnK@8 ダ>6zu @==$ lji_I@dGE # +}Y8# :~@&.r35&3 kUifXHwCķ Kk=?{t~Y`aq֐C@xބtk/Fbsg & 5@A|F ~̊-dorB@wڲ{b/G L=@ly{+&lOO]oµDFsORҷGݷFa^C \x押D倘\ ~!I'?OnNxvƵaջΫwx F8 1AP 9 >1 h@ ${C ,Bǯ%tMo@Pt26?P~]rYd/h;yqFYެ5r"i<]꾰DIt".i%2Qr]ZU(Py!|4'n/*κ/W {~zn"^{Q2k+/--X|3+ JGOc @MyOSux՝U[颡^-kӼZ\g=e.8՘ j4sef#f/>xZLB0āf@da{H߁]|D@3K5:y3-m 9D^3QU@XpuT C>=A_ +Gۄ °_Nb'/ @G &Yy v?tυ@[ +|,$&8&!7@LxDí8i(~Hڷ  VL841+z3ųjVQkK@`!q 'MATL@!1-Q1 )7%YHӲn1y}u6zm;w l + ꞷ}t@tR 5L5q{e T=jxpwX :ǭRbUF@;cJ ~Y_<-;.>6-ޖ^*=-m63U՗TzҔ-y{OsscWe|(]e_e̬U/VS BHЁ`Rv?J OEEGAڽUs8RUrQSkΩ1ZQ`YA=Cn9Pt񥂅ry@|m_rj2s L" Mth[XEGQuNeC9dmNiS:KgYIeW4LZƘS @8@ZqKs{K v.1}8 fMW\‚!pk3 }dFfV9 ʷA`zz9AN9'KQ҃DK2<)GOii\3B{/ VHpBs\@\XNyC\ ə~JشoN@Lzl yI&@C?dnL~!b7:B7sq#ت^,dH wW?zz<=F79<} ]T" +fNo %w,O$@3t"x i:.^bD¸yy`15z{i|yR|Hbc#A*q7Ѳvw~G}rbba^&l?wTG59$67Jj|"uݤۈİ@\$@8B09*;11D n:ҾͿ::L6I+xÚ/= D[u?Nuɕ=^EVfY_<-#'ymj!ryD3 2TW+MV^)ZڛrɜYw]i_TsٟK;SvҐ]m8wvcVEϣsJ@+3?Xr}!'7k9%'!S֚aB&76J2ek/| ;N1U/[@ |- > +2 'F۱&mBZ<7 y[vK[svYDiG)G x<{~=nv 42T5zBsXW-?7g<1w> 0D+ߌ̮ERSk&@ 䟮 +{D#$ Bs ]p"F?%{xA ֊%<7+'Lir[ %c q퀈_%I,d;@tu=Q¢1yX<J +ʁԑ4$Ip + +oCoQn~ub/{wT*xXfO81K7r@\ W ;Șa/qx>=$=wu7.ex7suWpӹ=?A\fU;-vx R 2rS_7n?wZ{H=[qS~S.>*:oԭgVm&> +Dұr˅/_*472Sq dv Z+19Ȏ+kyONѡq +Ao$dwC93βfp{"dZɖWg21;9#d~ow"C?PW?5Bڊ!&WgU<Y{Y[ikEV`- f򏟯!xn !zuK̺3Nq@2;/K 5R7;}0>`aq3H̎!q*,~5_ ޻жPkHqXnέKZYeWHMwd>inI; Í߷WYWiwI褳 hS kzV%KkԘk @+K%/,0zVX+ƐЅ28TqpBTM3f{I:xڔ2B+ }^Wxܕ!/][ /<~ C ߩmZX0p@L%^):+1t_ na`~b@޽[ @@L/"bvaXn r4 +@8<@.qEStb10҄ݤ!۔Mjws@M›o u/HJFR3Ab)@@ w>]U$x #DދyA@(CM^k$m/moT6.Y:a~^vY,>鄔hp79j[f"K35UB/ JMxoY @3TWUU5]e")>a(9 /6\OʚeeIwON|T3Ut%z{iYѝ!Rhϟ ;VĤ@rT-kU,GI;@Z/lǀ h7ZJ$,KaΒ_cɫ'OeJWȍe#2j<$C*qzҜғ N5L3Y+w>#F¢h?s>]={~v{ @CҐ; `]wv1lX'@D #-ĹU5Z6Et+S 8r1z ,$`b&eS[4@LSlvZ L-$wij8^"3D`[&bF @Y<smw & R(ua5J&])Mʻ" }!"3u!5*nQ6~…%&rl|dž]ܒ3>uD%zAR g$bAЁ҇;wu\C Dp {m!kKky:ܛnFQXW_z]v ~4좰4 a/9(w58zGNX `2 -Kkj .d+'W* {_ʟ,1@|Oe>YU+KMJ'\MN4j$ 4`.jP8jrMа4dkKҜLR 3ẘ{t~l³y;.T;$~/;1gy|uzsaI:s~-`јǥd*GFa)[ rϜz܏3୷?̼!H8DŹRHL2?]5zr7c3Őa=e҃@mh$m ag ٽ;55sk$Z@,E wl[$ Pjg03>:6e΂mó,@L@D\Kq S 4:H+a\ #5IHmF7L.܃vE`( v}oc:/ cYЌ7Q7n:7E%Qeg ;=>$ hlE@| +-I x>禤3 .sꬅMM[xN@?o+h7 :;D؁tJqTiИ$`J+=b+1q@d~Zy#$%jNC`oyyd6F^d.i?.a=[YC+,GuX~Z{y⌿t}Q{>w晬gvޤ|rł*#NCɭ3֚rj9k9ZjC^ DjSDiR2rDqHb$axRX +tU8c!_  ;lR} $ D83ʍYY^K8ycW׿ēgζ/Z=o `jy_߃8̠|;C|I.`@@|A7g#fs@0 'URj8 h +}{iii?B@(f6 oR^3<;ct #S·xH ^X؂1r.\$/@<x^0,v_:@ Zw)qڮG֣#@ߗyЌkh+z<tp?R :17:ztug?g1uz; RhxOdy/ ~!1\|H]#Ɠ 8}އњ߰w +[o˩т# a1]e;<6*l^(1wE e?'D9,Zqoʥ !K8rj,4r!j!k/h!YjZP2+AFV 95ֲSӾs @īs/MZt;c5ȩ6h 4k$ = Ƙ2f)1pHu8X4CV¿FVS )?>Ï HY)Yb#ŰXI#܌otZD 8}mī9[KV1I8@ x >ZJFR}vQ fuL8DD¬WB!%}ܜ=\s(eF1]r$_Z<:`y)1Z0wG}R>E0D&#:0q{B8UfNlS#`)&L!n#[z|xdG9'QwyJ   Їt O@ޒv=CWGZ;  d&SjjlT : i=DFUԚ \֠-Xrʛr ` DeW=$1\rH#F5uxԮfnn9QP 4k`AIeIW I"#2VoƼ:{@Yу=qr備+ +Cny1"1Al!KiD02Qh8*];"YC d$5Z@*qH&@VP<.>$o_w\ < _ҊɟOΔզQro7^&K 9yV'ddǟk@ ~ +I{t⒙ mĶWxgDHa.}%˲\y_ ̬߭0(-1ŁՁ`$EW8 dr? 2 4p@TTFt6DN3#:?d !'@ܔ ++i%@C3$ nJ#u$*PP:D;f)vLg逨I0 +]G2?; 3P|zt@hC6O&Ax@ ,ncmj>ԈҵDᑨι9?x1gZDiiE?ިLmtR1 +%֨ M.N8 ^݂葎.MN2ZqⅢ%4" 6!=QtVΒv<,D:F'tl9`rI8(< E\ŇE0bRv]n=H۾=jr"# +FܜD@Ԡ3ڦm(=l/MgxFX +A$E^+Lܲpl£l[A[Y0~̷ycUnqj|et}j{Ȃ&t=(ڏJ ;S +wAkXˈq04; ^˔ۘDŽcxZ x޲b4D _$]ZA[\ZR#.TKtUK +[jD[j9v~`c [Iv͘lTUfDdKϽ{2>U@.h}Q"/pgHxcH@}/PB'D`ŨMş1^@$JĬYu;ѩT@DaSO Q8S~3эr|HDee)rBt@%^DtA~4 CL5t q_OtO,)ND# 0Enp%(3 :5^:n2~H@̩kqCA\~$ j?}μr;:yńo>8k  +De[DahS`ŇGuփŇ1u숫 c#7`-ޟ8Ԃº`"`~'蠳?v]0qa$}ĒRb['FTjzcpZ t(`Ȥ .`)e-e+-[XY7>`-.e[@ɡ^ƴrjIټ4& ( cY>UTX'}Z 6W6WK'&\-Z*Rl|f«Jq~< zı7"}'H@3 e /..dx@@#Yt` +re> j " x|y: D@pRGkOɜ16@fty#0rս:;P:4: ohAc;SLYqF$ėm$DgČg~[h ogεW4C?AGHX`PAm}}4tsnAA +{!)Pd-:re?#\E{YǶ־raIbQ|~zabKx b˂Mw]hW)ו6i1PֽTBW]n|emlPʋ"Y|+>Ԁ5X;~ճϾie}yevqt|->rt]|yh6uT0u*ͰAٱ.eS~@0M M;,wB*=)w[6lD l@(3LPo@(m/(Q9/۽.\>{.Z1!uCZZņkBib( *EJEQVZzxJ% +,=lK(LQ؛M6 +/yrz:!O=hDʈl<8@zPaixT秧զ+v+QK:}?㠰mtS9ᯏA *jl!ނt!  K]ZX؏p:"rdž\kYI,@digv2Jg;ʐCa"'y%4HG_J4A(!:n)!tE*2لO8tDG +ezx1llF +is55GnkkL@~F@B@T,(lܶkEe|vew +8q*Pq_u&PlhöquUU&zqUi6âbقRKe7~ۗϘ1k 는 m.e;xu 5:Zӆh\_c|jUZa=jMкX7Y_520ЯХu+˵+iW*nRW8a@//*XX"m5@6֛^KjvmfMЬԮҭүԭԮHk kk jk<++4+˷)m2Rh)J^*)_Ä|O5IP1!hԱ>/5M U M*Y~8fB|\%*oT*+j<B [@$q"\7ə6c)U+}͗"h>҅R3ǟ~DKnH!z"e{"e~b (AG0"Z|}79ss@c Խ~=چ:%guJ<9xBB1ArT,>N"Ly7_3}֜9;vD +4-ƕ{ Wl>2.n}E!v٩-d̃p٦~EXh|ɜyfW2y" *dTPw[b lA 8 =h<ॡ>x +%X4ib$xILezzD@f*fs#aۇJʶјlW0 Ej/[ATß1/Ȅq`y39^(MIvMO,0ۏ hHx!ilH2PЂy4]y7&fNKݯn')`V@>ے[Im?}{^>ԇ뫌k@~]~Æ v7 kxmXbYUe]YeY^a^Vn\ͰL?JnqvIjIlQ)}QW*,&9f/^ɝ;W6w[+vזWkWUjh_ӽZVlJU@u_]bnyn6r+л K閔j`HXrQd-y^r1}w."bT 4kG:#JQ,Ӭ(%Ѯ*b"咭[ e +e $ 6mdJKJ>kg]n\OJ=j=},_2KkyUU͕ +J*jkUuCn)0E^6Q;B[k͙ow +;4dquQ:!Vńʐ@|2K}蚜?~}~5C|/SfΙdI@/ YД6zԚ~Un>sE*wx"beT6dbSR %*(g.FaxXQx΢T^j~sU1 +9 +?;9srOhKʴ~>P7ʒYRt9Se4"wG u+i(^ގp'- t( ]z CCĊŕ&bX0|99OʛSYʰ0uBggsGuv7jV!88$v h|D%)uHDB Nbf,BN8-牧fmoP?,<e((ҸG$8Ab9vtÑALщqG̃.sҘ68d!K7k>E'W_slE!oQCLs%]?^lޫ{+JܦZYZS^[YWXW_W[[[ZR +iG ^rmeeڥe%jʅ%%~XPsq=U{wrsyy7˾:;W5pWT)oR֢֨XSY]^UZYZYZQZ]\lP--ʌee*ûVrIbq,%iEy—X.sw/4.gN_ne,-\(UL\BB`dv%LYMr +Jˋ Ee2xKltɒBbP  ob;/7jĝ]?wSz(r1!7DdmH A*|$w낺ںC1*TVa<+?*ۧ8&a܀-rq8Evɇ7~# +޷LbU@NS~‡;@}NȣC`o ], p1.YCg,~+81w2OC|z<7g}n#\v.&UE*ԟ6#C-{C1Fa W3NOq!91yA6?x|R<PH_(~6I<`a<̖Y +/Sː]="7 ]4!ѥY Eq4Nc%P Lu䢰T2>xPcd̲QFMNfS:FlHۢX G/\mcǧ.ϵ]/3.+V~{Yl7l!_JdelMbmb]j NWWFz/ԁP1nWkSVglS奲Ţ꺏5Fw͙-*(еVUJdYdUtvTuUWz]ʶjfj]C]-X5ۤ$KūJ05`M,(/QuZ]Duﮦ[ҲhW ++DkkJ$kKJenC`d] ),ȲL4C&XV_Z_Z[R%%E\x+oap~m^7v//TM|*ĩ3b)2FTV +]X ɵL$H!N+@ ܗ-5=1'Rb"K,KA&h'6;Ls/OZ7vԦRk2 ! U?jTaE0O I%>E/\Tc #1'~3D2?6ڀ\H+VȵG *˗H;xb/OK||T~PRIP)Gc;5-♆B7p߉< J& Tj@|S2/u$qD.i6<_W2EX\g$ ſ;yqzӳg=[S+yA/QjPU6'q4s(m&peqX|#KF%ORfW "snL>3o3u\|SDNŕr\x'?%J,]6w2ya,T#xN4~./$DtF7~w +[6њ +! dԯ_([R@ݸWHzqC˲j /*.*ց%%%ƥ%Ĵظ؀Ϡ]T!8)G'8?b(T/T+PXSt^xC7N$?{os~NΌg/XgO<hv}+8lX]V[ jlU*.*n:Rp.rj)lQ,(//ϗaln>"}%_|7 ^‡Ӷ|NT8!paQMU Ջ +R`|fՂ|%|BY鯞$8|+S^42f˛_o^>ovua'>I}K\C W(X ø#%%މ}=<1fvВ=y` +[}q}栓}=B&},aW c?N$}\7qaܣ +csE8`:*> 9=Cp{<? +ވ2;s=9gγb Tp/aC0t7DhZl Q`uEa`vFF 01lqF91'ww퉹ЗB!|x2w:jAT37a3:?Ή[` +>1J0#jDzD fG[۰ÕtzvoBb)-ѿŒܧg塺9o顣_+4oeX[k^]mZUe\UiDCtC%´bqv_Y1ʊ[tKxIXZMۍ+PH>i|tiKњW@!שׂ0j/'|rPVJߵ|nY9CRmݲmZ:AHO\Z(b"tI$^.1-)&XE?:;a{Ǔ?헯zffi1PȲ-LYbղG,+V.+R,-#[Q?$,"YUXTjЗwNMXHh>\tʵ2<6< C 9L YCP06B)C)C83ć‰H~dAda$)4f֖;w?mZ3f .T@d(EHr( 8,p W 49Jt -2>-]΁@2>8NfI&ݑ|3ٳKX>"&@5u;x]JޑԽ%=&9&>*>T!|_qW~m?ll?`x@퇄;;)Ϛ䟜r\7/,ɝ WmvSŝ- }\w7>~WW}W0l?8{v>vNnnn)++ۋ0{.{XE{X%{ G|SOO&{k0}~Kpwì9ʭ΁d`A}ҽ=cbt\NZZrhd7u׻ԣ_^ެx .7d`$ yCЂv\$Ibˇ%Xta"Ȕ -g>., +LJbPr0>X]~δܹf׻B ꨘ/y|D ѢE˷;ٝt 9q]H$Dg'Av6Peδf^vKh|"zq71O;]P(U fPQ| /+Pj vkӟx<&Wָj4*^b_/`R_ YXks t쮀4:2]Ɖ7|5=Y~}v]pћ6{6Xfsl~o0zNGx(GjG MQ"#hvjBfYsJJ_c&ĩ7BJU>:Ojtֺ =Pqh<4QZG^Xw>d4=6dT +=|N~hA*/-5Wi$+DL(Oo>{:ZSiӌ>J=GvڍmؐUjXBʕ~ +-xFgs7l(mj!Q=k( e3W7zc û"};Mh:M˝9m=Ĵ'rӧO}*7w9ssrsrrMdڔ_N'srʝrsr??#'rʙԴ'gL{ +`f(PO¿J8yby9933rf̘[G+]t& +iT!"@B@LPȂ1S#S}lga"M߯KhT.%o4]76*n=bw.^qdJK#$>9ė +I$)5I}71oH!(%P%dDt-g/Nn{kf=[PP7.1;:d>%"I\z9}Kqθz@72 š*d*#{zy]֛&ޏN̼7{s˗)w +{{}$Y&aw{lnVwsn&Lazy>ewq{8m3Tg>e_rҝ;YIE^(p۪k<#8]NVFw2R +ߤẻ9mm3g8?|͌'~sV+MHnzz}$Ig/^/0;wYww`Ⱥ:Yw;YK(IQKT{N{].[-F?NSoo^ßmmuULm}^ńA6S md[h?\|ǎ/jܧg=3s3yy02{fެgNmSz:o3Gd5'#/oٲy%؉!s<\QwuGS҈uoTIO$4M0ՠXhvC>#뀨q4mS~1@,m* _aEM5kެv͎w*vYhծ#5;xn_vYIY֔*I=BR1*ޜZZ4V^TL`{lyFkLq߆1rȿ}t{ͱe7n9Aӏׅ$eOA2HvG]]Sw(6|N]%7^>OnL9szvr<Nt3 +if3i0،KMa8sry:+u=Vy3V΅V6nS6цfm\lg9)7n-0fIm=?{c20CS;bE2`:b+2mmBmk\ʻr]t\ \oO6~SU)E\>5Q,*\4^~ xWRN#/Ӹc]FNsf.2T%Is"#20~!b E&ҷgox~ +HnR4|Ev@d_ڧoE0B@\!"''Z垅橫QX8B`SӭlbNc+9;…g&5 zjs78*7k nB.\#h"\+Da⩼Tx;cXR)I;:. +Xp̀8&ئ^40T*]WЁ>Mw = /;-.MP SQߡ,@(Uɽׯӕ~*P Kbi€ u.G|c\`JIሄȒYbd@dDcP C9,s 8@r,}A6'`5s27Ay0)QUذƧ6Ul@ ҙTb kR03p$q%GB+'5؀9ؒ:ˠ<IdlrJ[LamI(l cPLk\6%&Da + GDƈ`  rA >R{* +CeaR7MQ8#`U`{6kYBŶt"Nb4uƻtEB-ܠ=KYmHִ>տʉ\QL:yz׻-ڛ}[PwˮwɮuI[D$Y}t( 6,}VH$ djѵHk}.m=IS<+!n\'%ңhê4KQtT fxn0a]i`!{= tl|[N:EnGz%.DyH2/Y=TBSz^PSd]Hca13F( b "DV@"GRLl@L``@ ]r7R1*yUɩ Iyϻ5Y8ٜk@P'B$UD +X|3p`Fd̏;@(l2J$.w$V:@/ho|R֘Қ:5 re/05]a*,٧&$Df!8Bd +qN > 8*`+3,)'` !u%Nt_줉*S0t"pv2!l$˱tI/JA zA@W}~t ~ E k@{ik1Z^HU9_j-=Ju;WdW:I.v 査? ns&M~-Am;KwW:$͝]k݊jtGң@~ IZdP6>s; ׺͝ޕ6nj:k:rS~hah㜾;sSprJ'M"oM377uЁraǰuedۻ8ngG zEO"$,P^]+ e +!&ф9Z>"|CT` +M1)D؜Xp֤Ėm@b8A sȜI wsP *]C{H&xKEx'!'qk-dHK llPHr@EpƁڙP;IٔKqhhdׂyq=&CA\cMIH9:P"%;QaFDžAfAb f"c@>:$ Z?_#^Uy;p)s]/rt퀌_EZ38^uS 鄀:X:(>9BdqQ7Hjq %[Q7fDkTjh_ZS|…;B37X?0xs+T2ewWh_uVvyt2$=Is:QN0U Bu8h I-%-)m#>}*o(7zNT'=4h~t{:;q]#ޏw>8q>=ޯ._p~E$4=rKv[:*ZAR@߆o +B CmUt/t6䝀\hDL'#8u/[:_r#8ݭΏ|vESs7E:)ƻTsGډNgۻntc+t $,(b/UI|4? :s-2,VٚGjA|}\`H I!)2iH̃ @ ev0$)kD9r +{X']C ~Цd~8 mr&Ab馢u߇,0Pc)lX &ņEㄌPOE_M=9йʙP8wBId3ac3"+ D&' 3b1a1n@LN饻ۂ6LB'wǎu/[~qm?r||_4kGjyx;x3_6B5vKwDWA)o]] &Z# +endstream +endobj +963 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 560 +/Height 420 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 5473 +/Filter /FlateDecode +/DecodeParms << +/Colors 3 +/Columns 560 +/BitsPerComponent 8 +/Predictor 10 +>> +>> +stream +xrPʾ?H8LZՕp,cii{4 !$BH A @ @ !tivҖ}^cp۷X,ny5

r\z.9m %@:k%{vaO} +=lH?.| VwXݿd[wa-h׊m]lʉuØ@*%ڶ=VoF{󕿚l_e($_`t๦¿>rZ:ϖ{V鞷{.{ik<]ϛ-i~ !ewIal(Xy2ykY.?YS>w UQ]ۙ>1X]tĴv/Fϥ:b e㩿r.޽t{ף1-/3^b1\~]hOַy(Vc k[^L7ٜͯgY'? .Z wv2/)Mf^|9oaiJ`ݖޙܻI V ϭŶլpyWnsovn%nh*=;^ٯ:I6{w6ZH}m>`W +tvj-_¿>Wwf_Ӧ߸--_Hۿ3V^Jg_殃s*Zn薸}w5B m֖.`G!,ϳs5R HNuA.Y, "vىH"/t 뫕X Y -ˆ*TH[lp(J Yja#fז?2,y5_sL[i)DR] o564m*@p<إ{IH-]UFαR}>'M0LHOD weww_G ^E H%ܵO/_K+TSQpFTͩ7?P>gh%vb"Ɛǖ , O*\H fӶ\͒b4-^WGh.A4]#iG냇|R964/wN er촆maֿꃳHھu+!I0ʎŽz>~{{|] N6>)Kn¹1̞Y)-`EяhAaB:ga7|kNw K8/`j!%6j!;\^pT #T d'!Ҍ! +OW)Q:[窂;2 HJ] :$ ]vCj؍f+ř +#fzǫ͞刺. ]!#? G 5G+׾Ѫw\Hĵ!oךUowgIH;{/IPZoe7TnR PM_x?rR|ːK({ھ~*OBV>S>ni!q-%W>|%^`oP^^;G~@z#ǬX2@\D#K&$F&WC@fٽwDKk $IxĭL$BHm+ڶ_5mL $QGHFF Q3ʡ7ZHfRXXf-;[Kx^;'$&@nU<_E0l uS\wˆ)]v:ꕍеk@l bϨ~x[H%@}!s-@+ߛR14ުߚ!9'cKQ.HzƐim 4 cUsY h0[CQhuٍn 2xv9YF^, 0?2Z2w}@":$KC"tNoa^tTC 赃7(Hƪ l&cl'TO!$64ngٍ6Y1VL{oF%_}WȺf*vJ }q*iXckkr I8iû`c0^"ǴKb:lx'5?/g 4.Oi'%cGQٍ$掱Ba"T/Gku7\NI;!(H}IdC.;D c,!X:j#vPR-$k(K@rsq}!1$MOOz$iM~$d'HҪP;f5&M@9;ןc=K|>}z$R|>(2RH HLj"/4Bs!eIMFMv"^;H*jߣ4r vP cHTHDAFe7So*@:eoa>[#k6끱8@o?1/2D:9_#twaJ@v'5Ud2c$ruHdvZt?tah'j,6xfdQv7L@^fi!K.ѼFfx?TYvp +)2*5ˮCQUܐq?$BHTKrH5@@]D%A Q9M"B :" +bH U @W$/% @w1/{6¬]BHZuv9$ I8r\B@d9:}Uĵ)e +\Y,NdnЈ'd +|I!B@2ͅ6|rtٍj#nv#If!onj6_l49i +c .7;Yx@ {i$A( =q$RۉB A4MUJ>M#1kѝ'~2I# n&cox@EIp'}>}ۨ }&{s4M|~m!$C# "A wIpc!`) $p.VÊtqv#K'JGF9|C#K#kd&Ю|(`\.Y =2 ·biI 9h@hT+jnvhTq3ʙHeAE $8KP%`v#`$ݒ@ H $8H\IJa qHpL$BHpF\B d'  $uW$Ip@ WH\L&1 'E$K A)vIHw;T``L4MπO81$(M ut)[tF4hIs,M i}x4-c=yܴ4MiV A$f-tA )$:Sx]v99{gO^ާoTg?Atc]#@Ǵm_dipH4$HZL 4t$x|F3tUn5O6Y=nF8HT`4vzS]vROHuiK̂v/۴z +.,]yt 6~p6>%PQx3]v A @ @ tb_gv5{ho4ٯqx%)2{%TC AYfTL FXZyhYKav0J>Rs?$X3\mC,]Zh!R}#ir_@|ZHۙ;T3@$ {n(Du~0fKsg)vW#̨uB}t-]մ##%qNC e@ gO +h.;BH A @ @ !$B?Q< +endstream +endobj +964 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 560 +/Height 420 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 5927 +/Filter /FlateDecode +/DecodeParms << +/Colors 3 +/Columns 560 +/BitsPerComponent 8 +/Predictor 10 +>> +>> +stream +xdyWuܯ1j׮n>`ҿ^r/wHA P@EHA P@EHЄG \ezcn }ZG_V=>--|sMm+5z_=@`%{7C!=Q◳)=ywN;{F]=w~C,RKakۗ6mE7K;<ο}uHD Ar},GV`4;+Ozb:Ǡ&53_<}8mvK3'k:qA;X}l8|ϓ3;_0BfAc {\å).ͅϑaڰђa,~7g,-ؿa7ybێ_q@C19JvAڹi6EPaV.a:-@hJv!F T/Lt@҉颣Wg t:K@1^@*zh+Lnj#o OQzaFH@ L+VI eՇ,\+P@EHA P쀚}Wݲxoz\ +kY(:}:~z}(cJ +@쀊~gF Ps l覷y]cuJvǼI+u杇M `%6vni:!:T3ԷM/ ?bʢj$bLzv%¨ +y5v$N߁{6xfo\׵=PG҃disAZa{p(@ "THN9E@DQy Ed35Zz廢gOXG~@*5۱_.bfF[ڼ MRծٽ%XD _%O+F_/eKh) ۼ -V.:Oh)^I@ +Kkf{H ,4UȝZ!{`^w-Ykcm[d(ٽooH6 uIOHEI@;LT:ه4L9I@ je,yWZeIXkh昀*dX_ßM'ns8$F̡l-F搮pV'~Z@ޝf܅dy2~2dz +iF ?Dd7T}+lHy-f:d>zW>뇿3unlۮR@L d MG9~[|Q2Т/Vl޳;%߳-M,}o+~yR&d^}O?E,.0N?T 7<6os;n@[ +i9%GpƔ> C*H*Y扦kҷaS!XQs?UH/\N3:8uPhG(\K'IE`IJd_0K %RT XR:EL)?*-UVPK]ukS$My? + J@v;P K.b~C% MəTlۀebׇPzY%7< r{J +oXXXE2B mm\uELX<-۲ϻFmWN&Ys+EP x@*HLK,.λٿUr_5x]dRוʼn3PR]'u[Xu3 $b75ȲEY >exZ[Mڿb H:4zNOp_[.F]g5=ibaPmԉ%h35s.ktjA{K&˾gRUvFrM)ًk\uߗ H "\%1>/nz麰/{NDlKŒBҍt:B^躙W\e]m|b fjFIoM&^4)R vmzV^U9[\)Nh;һ[THR ,pt"вo>V^=@ s/ ektLP0%NDϲ_=da[z@c4nδk@^5wL6Δ#d()<+%̝w\ rI}v'j$'Jyxg3$iٺ@:CxCw@޺l vV9dNKH^(*a7!8Q%qԿl=)inxd -315b?NVٱu ֥$bhJL0+*΁ҍ$ $GZM f,&+A)>!@*=Ę $2(D;0Tzdz OL|dV5YrQ&fS#$nni3QĝiԽPKI2@q;7Mx, 5_Bon JLH} t\/fix &LT٩&E rd@"y},s+h@"QH,Q+dl4/2Dq|6;&kF Q"7BKl`T%sUF,o7"bhRa~zb):t $iR0wv[b,$6]/p uNߪXg( 2-_ýRSS2$ +v讔f)֫/_1l"RNb3D@2bXlSbdmYX-Lx1l^]@jRoaSjCLUN5 3UR$2}sR-rں:;xUOM/xP+@?xP+@1C <h^^ 6(5HM/ {Y&ᔌ@c0L8=J f8bzX=;6Jv]'V.:5+ +&pb@X8M1 Y?0$2o'j7ӹH&>o&mOjd8HhH&N5w(턓g+YJ.&Tw8 $(dbI A') '(4J~$J2qHoI& TF  Y4HO R+@:T0&HkS2 `/ %θ` U{w/p0޷ɤ7BАO>u? AN疟di[^ agZk0@y`u(@ "$ (@ "$ (@ "$ (@ "$ (B@]vU . ]泛 '{P04M#PH%aO8;!4;`*|+!1@ a[@R+I쒝E հr"!0r*֨;NnrunrYe]í@DQFcvىMs7w9Z,!R$:v@":Mqr +KvR5 &HR5 dG:P@t x*n*\/Ɔ}Hd@EHA P@Ep.;n3"ލ_*X:%VIu;{kL[;5L"Nw޴wh_JvݓnTN H~-?Y7=Jk=A~KX'ʝW92:t/={jvV(q=3:ߟjb;,uam)?֟۝=M[c?/5oemnޕ[z{^,Htf oYɤs $rz3T>zg;OOײ7Ѻ=m_aH ͨsޭ.&ݒ{@PɎ=,j ܇=͜| sv}aĝ5Vo7.{6qԤѳ_&n쇚+hvϾC{+`ISUd/QJvA <_Ἕ?(EHA P@EHA P@E?H +endstream +endobj +965 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 202 +/Height 107 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/SMask 1012 0 R +/Length 39380 +/Filter /FlateDecode +>> +stream +xڔ{[ǵM`89iz%;.ꍔHI,7ۉsj$՛%[dNU;7t7*I;9~÷fQ^߬"kbZ5 Qfz8&b)j%m.hldLis:A˪[QfF7$JU *l& +h#,~']4b.AѶI&$h=׬㚴\c+ʩ5S4u-\-D3W`U+tҩl{-^{/;:Jar1;8$]; -F 4xK +k)!xW]Hi)*%[p*^<6lr L=Ë )Q,IJݞː۸γWƴ`.Ec0@FvL.vќ0BNHFDdBQuH"g H52 4DteC vZbxqWutn][! t5quo[EW(DWo"= tAcV6Acf#l`1ZT-.E]RRt|:?R(T~1)׭xaL5u*WC:CM[f U ?.5dM̶h5 z1( *6}P9+.ߵ^t;hLx +ը^2FQ;Af~e}5ХkBZ.81P3\!FV̥ftFFW91QqɛcVPG#T*e+BÓU<YF A)cm0ӌLׇt:xTCB\JôbƏM( +C"1n?KNb]BdBZ + j]Z.*%UGUX ]P,ZaA"UR5JWH8+tZ":.)+MT5ƬBEVOWlm;iF%6 DkWMtM#UӀЂtHF#( +g]scⓓ7xaşhJ +kZY F}1+Zfe"6] tVո61tf!l]-+\$+# +dtj]0I]y/H!BW-ХbH-#4Dpk5 Xq)`|LU4 tz.X ]03"]lh5B!z<.4Մ.TUFUgBt[mAVvZd*l% +ӥ +P:Nf+Dd!qpFTl=pdcVx8-N!VFf ^w]k9-c\^ktYf=e .3].]hu2-2^Q-c›zȨtf*(B3I úK!DpvVf>&8]New'8𹋑lAҽk‹&.8QA;kT.xNNW!+&aEmE1n/ +#6!V]#V ZCFV$Qvt,9y xhvppZ4zŸ:97EڤԻ}QT42PY?#H&ݘaJ1ý 5`R3#RrnBO@Rs2 /6n^+]uKn2$Yt%p +kL;1,tuR(GM%k"&$S?~51]ND URBkVgh#xT:>#hf :ƭ~ +tWǛF:_!A_#/N"c. `f:"HZջ팷 4h!EGBV0]$HG8DMr}.K܈ q,]…',zy, e.R,,)aח JƸ )$\.A&"Z-ukH*K@tU`hˊ2#|لt't=OAI)&wc6ա91BqE mU3;@txfF'tQEe sA-~Z89Ǡ)#.z$.]VlI&*\NL*)@W-D\1Pbqh?1ؾ`T1[ב)a WZ6Ic hG9 tZ{}Hѵzz 3mpD_VtõKR@36}7oq߾lN48 +u5(师Jxq2uNu3gv#.\uSQfLWD11>Bh ޼;U]6|dwN^j1sX /r=]p/wV.YvJFAъzW،#.䪨qt}?]!p>O dk$۝Kpk z n\.xk ZH]v$VJr%LPіIR!+TeUyK9`qfIǣj]cXU9UU=5.e2ٖ-ۭ6%DEt9*3,k"z>i;8a< +|.҅7ntLLX>B׆ڬ<t56{_$cs,]D'ѥn>k&x7B͸qrߘhU(! kDU`@()е|Mmк(q?=ʵ<̱c^+Xe(<7n݋V4i# +#ЪPkd>*nťukI7ы1h#DB +5WpMf kԇKq\\| ;*X'=̜Y l.H +‹ye5yyy֧kͻޑ\(@ݏs-Sy%JPx()'.իכ-0]^P]_YYAA  lO̸b:'tEWs32xcygEoأ_ט#e_˦jr=t]D@Ө]?SWT:x U !C*DEH6`|G22[`,.j?A/N W*'& +z{xHTF ê#LW~ @.cև?~F銼,YrֱP=XIW Fʟ] _Hvrz>kK_f76ۧIڭݴ#Uݔϐ:+|/U‰V hk@:{ _hDw{'c66leܰm_TQ[lU<=m޿m>QK>q)[`or5:ju #Qv@ԨJ{uZ^ Ѡsay dettB]+]AQB=}n۸=iwБݨ =>i[V'\h(#XTm+Uzw.#_|ug|'sզktm򚝒Co͚4Il}:YC'`t՚ V#@i 4=V5:Bz1;D$ !፭u2.bhwȁV&ѢZt!9ky:$$X [Ot5u0v0$TP 2P8/Q8V=$M Q>&#e|?tl[g(kcg7=k>xz8coyOZ#7 &ߨvwzyU o]b~vm4+uqNNA=~?=9 t yVZ@0zogi[Jƪ5?qi #ZMmgun&Ršx/#Xf{}Nc薎z?O90\kV1V 0PҼBz0ȻPDw1vKdCLٴ`=n>@38Xf!V$P9'@EtE%SpbA|Ɇv^)}~x'!h?J(©oy?(2<$5#zH%Sx85 .A;/HʏD/giIOР !|*>+ڜDH=!gPy? EqPE! +8! "nH KtNtvmlkK2q'BB ^)==\O/'Hfb] Kq[?OJٴw~m{,Vi"}EFC/ +W@`-f,Ym׮\U@Vh-VE@KGDOHB }/ѿY1kT_*]< #ڝfH,?/ZG +Zpp,IyZԲXyU]]Nb-T?%'B&yn@qRMP$jC鯠`J%BNnX-nK{OpO}ÁV< >3jZ;#63"+83$Em1 EFWYܬΞ-߳.XzRkyTvVEVFΫ(R+b23p^FeQ΁?9sb+ܹx1YYuYOd=,zQY! cQ4Y,|U]]q ܌4g;^PVPq +Ǩ1+GG5):&6:F?ehyLtL4~EL41?!!PJ訄ytL zh?ơ_IxSw$dH& Y +ØȿzLtBtԯQFqAo~[dqQѱƤ=>&'rx 1ѯ#hyb@H:j 6ؘAIAփ@5tRH΋ dznԢ 2`ɲ1dɲ}l_sS.\-]`Kߏ?be˖/[KZyOse1o ,[.t_eK?*d\d X<(-h?M-7~`ŋWl˂.d'e˗X%QRޛ2e#ޢŨh)$l +Y`\V,_Zߟ:-h=HjC`ْBI-Y}PAwm2ZbhM_~-Zޒ, e@.]t 2͍ wR /Aaq2prCya# ;Q.`w}-Wqqn//FB.`r%Ҵi-3Cp,,ZtJ #|ٲ^v559NZ #'%ЋK4+Qb + h? Xt촲єOK} /_nqtiJD1n~}Dg8xd);,q`̨ N?c}fh=١HRCrGFX`xXYq `8<tϜΑロXQBVqv 2nxc()?& vF{G5-KVr3H " #xV C;a=|ɣ1 +_ 뮍wϞ{<)Hݘж vﴊٰٲupmL^C'>!hGh56NεѶn?(‚S x?\^{Ϗ<.S¹ЙS7ɋ(B(]3e1׍[dɛ-.X}v˅cD1҆A!,J 3םk[0e|6g6uIN) ]r:q@OK6=V]+V5;``G_ed@MV1tުNU-DSK\ƞ1wY0v . {6G%cڢJo/o2(5Ϫ_=|U]SU54tAm1* i~+3.n[y{S8=G^-# +UVMA75  jۘ>sIwS>LaOEOT $GBu{!H+JWE=ӨB(D$pT/2ޡYq%nXG +7Wyg+y&Q +*VY\^^j=`vq96NU WںǢf{w>9}9B o^5rWX7;`޸0V}v}9sኅ9tZ5HDtCIpIUuoQt0t(~fL +ţReKiE H&en>]0]0BTНzV^pŧfPёI m23]շ%Zm032ʇ +t]SigO BD/:# !5S@|701]=#BWBxgknn[gnrBƬ"c:u |̌ +$ZekE:'F+D'O,-\ƌ虩Q D?摌ZVxZCeFtp;^K A73sujQ+#d ]dor:fE7zn]]O+zƱQoswxzja]d+D]0섚̿PR&L<#-K 8tUkTtUpU{ 18}tk.tUdB+d4dm>N/83ӓ +'l ]< u#BDP t/n&'ب5l]1.&J!y1ҋۈ +}Q)SbEυ-iFD, ]O."QCfjO,b>==\-ĸ5͌N\LP%& 0vK-m R^$5O+k99mjZܴyY!BZ0]h#t 'Bկ[=Gn]5F$5IMF"DV^, ZAF=WYo4Sz;+*x.óvä +!VA ᥲ7yDwnDEzVDB#܆I*s@JQttq4Et5L@W$D4HC/blbY1"I6W f?2i7=Ac\Ct ctuKxxZ!4&iB:/~Y\ۅT2l)}W?ˇ|S1&Y'!rkZ~"r%5r] uD$M ~b?ސ%U_2fhR3U 1tmt!_YM;eeFx^*`gK礡lU3GOږ'h.wX=Sp2ʏLʐxzx{m$ǥՀ.bĠ5Ld A]1ž1E\ÿ6sM3Qe1/G[.z!M$N!ɐŨJ+3k{9{oN;='U6`c@D7"D,3LI;Ƹԏp4){9eZT: ӕ2V6)i.C2*6ZUC[2JC-HZJA.WNh* ]^7\PX#/*"dE˹yi7_\w='e9UQgWNHL[HFх Uևe/ڶ3g'MW B> #w2b!TV]lv{j0EjZAe*ǎ!Bt}D2tB #e-%E U/޹?@S|윴sa|6v; Ine4 r_PUBCVa<ٹwaJD^"$R13JmNjkW{56]?=/ +%0,ъ["*_v9ыNd. ̌{ЬV8u Z4owe}{:ԘGd.]}ck2K ,Va•U :.ó\1bY8]N:U +º+.%8q)&aڐ^m3[:}3=c ]KzU yNb tA1]"emćL!׾-^@*T!{n3J@t1u r!"ZaſP]̻`FzIadxLf]Nv૩vM5U.f}Q3 n–歇={>gxC{{8TfBmWj6h4xi7w@=B{}ԹTM\I>E4qp^-BO*ggae vAqLaoN5>ԫoBWEο}3L=5xxyW6e8)eЉZmO (c2]]tq&S6q1 qX F%3Td&Du2뻷OnQٔQ3G?ZIw^& v\ʡ#zZKDKUXٚ5YwyB Z9rCj-(kqhtݸP9K$tE\dS/+ss7fN;otz$]A~Cݧr9 tDuqYmDW+.KKF|c5.d`뎘Ղj:Cꓳo~V|NjtS?p@~b-:tkFty%taV7w".$&&gBtL]<)o?y? ~ƮrMțt]&~]~KV"*%"ybٹDuеsYUkvBa[Rֶgy,~nzAny@؉4DfDWNs\mNu;` +6W5!_E}4o#rf{F:DWc<.E3>]m>|jʖ?:I;߲vBm=jvWYdxxn/xaڈ-hGV;?.bZwoNZCyGb?<ȤiǣfCeD/9rcBr.1D׆ 6b}RDQÔ+Gf-؞SزOۏ);2 ]—&j(,t a$%ZLBKc?jp\-$?T0GZӎq<џOμ IXJABתv` +CTۿ/x<; t1S3$Jiw/g?A_`[휕UVsim*q4vNZԘlH.2 .~s{}H|S6ֆUYov*a^͆];&f\אcþԳe*]TJ;@\y.\]Ƽ0ɹ18E̔CQSӢ/HK.{hGS54~}Z3U7v2Z~v:mHg˖g8l~]e+ #_: +BP2 +b)'G)#$#xQlɳǼ}aUcLk]e7u%MEtJH.c/WJnSax>&[[<*C?]C;v9-x}hPV}ɉ7Of|nqʉ(覈Ci1 4--f9d\mCl~+?> ♑G~[h23Vۮرa)iq.cΉC^J+,@W2mN}c6e_ʾT#Q3Rc{XԴSQ`-:w8awϽ3#AXI6Z, 7E_ 7-MIrl!vVJR|Sa1kAg9yzk$Z %)I|[}3b'c GQFsD2Jw(aEg] }4DtY/ʻr:af4I*BP]w@k(`lZjk/6:g93449,(^qOs^-R&2J=q4zNj##FOtV[p):"d@EKwc>dۀwH}7& Mlqnw]MT˘m㾎J*0R:+UVU2z<Q>9;EQ F׸eߜ~4zn: (3 +63-j1~iǻ@j2.0ZδVm}׃=_nUCgu#.5 +om 7PtF*o6_)z;˿}{w.ufQҙVGI}xgm8xٙE+QRoajR7@{!Ooꠅ  ygThmn*?;s=_%=Կ'o_YkBނ8٤5k6mCvHH'(Xo;.^{/d$ūY[]|fRM7J\YD>8+-W@F+W%ZN4kCZSbVŸ[t84:Uj t):9 ڽ_6`M]5@cQ,JLFԀMtY"S($~% PK{7)۶Sn0 d Fącjլui + +e5p:#o0o4 y|jz8}7b!l+D;66hB M7IzӐ^Z(0ci/'?MNmB^%`9ChP@Â3S<`J'zmF'ߴ>W0 TW' |BPgH^ti6h11h2]~K`lY*!k;QOm7U0A-hD' r݃w6A-!c#+.X-!{h38rE$`_ ;VB"Ff7R`=p |W2 +f'q.J^!8&=P +!?y~u{.V`q{}C~`=^wKIK8!AtZ"h y!9m@Xd}()7< +9!a<@38<fזZ>ߐophpp`(/O0ܾH!pHAI"=Ae804!6Ɲח,[ehwr'?0s_ 9`X,'8QQZUo]?鷈0hwyNX=fx~F: +=$xd='#(dHf`q(fF );L ?8hsI6j"T!hLSywcEob)c$_ʃek+ۻ,r$6KbFŒ6INj>G_K'VVwZi'qvb;7G7."Bp!j,˃l9-L%+_Twv[xA)6I%pwX,*+.j,.V5dd6~YkŸ{?w(.nPXYyeAy^*ꈨ*ĊဟVK% Eg9oݳrlL¢E\-yX]PR_\WT[X2yUFڭX[V,)inrgnM^{qbh=ԀՅ&z<$ kPUTSZ*+і>;p;>n֝֒%5ՐT^aU^au~ašWC*E5E/((-,QjKŐQ~w?4]rJ5%5І@L~}^8^ Ƃo,o,)x'jI{FuقD$$ږĈ+纷J( +9 )ɲunm[۲-[rvjYbQEYr֛5o^=;R[o(V}s­ +O=sG"=B?)<[PXr=t +-8zic8XK +âO{h +s@t "=2s0osU~Ч=^pъR2y*2N'@3 )8r}sQQ%VTagYy3à~JiɡXß>@DŇhUO0x'X{=Z.jM_' +='k*~cL=^sO~4jx'>[1"0eq_/"g*@mDϏ -7u:׸л&phq-?~jx *DMdsq+fL5;QtSe(33:(z\{* ~ud5C&4+Yfy}𘳒Ft%Z~}L2Ԩ1Gt~Q ?ZwB瞶_-h-ޖ}';fgt|H=3zqLO)4WjhB%EgF%jbINŽܳG=^sTw7}=s׳ #7\N.oPѷTǥ{BǼgJuwm]|@ xir]zM+|'9EGqTȫ][.=CŇ=^BFm4 (>1ikو^йQ6\PÆ qħ.{{DڧB +.|{۳#(\KC_䇚Ň+fL};M}_}A Q _ !A.=B/=‡JOs?tTbmZ x=*\.Zn5Tq<F%l\l_;- ݼhgõ:~=uXfrdQGFjPc5X4xB+B&@s6/~'l걯'>ςbצse8c@ McD5vgDȅR÷rr 1XhXhY5HzaVs9F0*Bɋa1%1x68:\tNɠ][.>T/WSm|屧yk3H ({:~<${>>E,U6ޔaƒ@5yyGՙęˏufkQ]UjAd=TEk9c-wMIkrV"ݓfi\m?)0 +/âuD'V + [&UoooԬ̙8mR]6yS7'\xO7fg q>lXV_OI:v_gaUb>7)Q5HsiZIoۺIgf)MdU&iސ+՗`4XI?i +$_E}q7n3*z@6 +Bn^ٯ9r`fC[})6ĹȪ=d뉛 \%bX2`\E50&)j镤ٔ\:q6pVeN9|xZRV +Gf,`Vf%pfo̧̤gODY+&eAnڐC;R3zWBL ˸rfX0 +?i˛d0Jq3F)fW6"2>\\w4\Ӗ7ͫ|dY5W*% gˊyceHDPހ5B1S`Vh]ps0.7!rdf}MyEk~ ++ПegxѸhL7, sֆIKh75yϚ J{io^]ӥJ q7𴬻"U.jZqňP0c NXC1}`si}>g) pA\8k~wSR߼auݲB}jw1ppqMˮq٘r=[p\Dy֤bwH׷5\z,v츚]k\ߺlrkEXs5ΦGxѸkkHYb{y޴$s z^|h򧜑zg~p=s9dȦF4粧yݜNh7c'EךC'x?o ąZw}ndmzڷmH Z"ߔt5Ac1c*v+D.L`[^D-w6;nfyse">i)p)K &v,9_7|G` R GȞe 0"x3:mKmad%={1f?&/9Eze#koXOkư0d VL&$MIGcZ m&bm8US\z {pˆTS7#cᤃ{f_ݺ"D=|=^ ?/{|6׺Dh[b-B"q$ROk&MncL];&yk\B~Х宻B6 ׌V1lfu-k7-:wŧ:ɯa~#!k5sТ5\| "";f_Q) e݂OQc2+&HqPZRJϝK6oJ,ved,*wL\ؘ*6ِ ĕp5-0eFHvpqR6A""r.}r},vQ$r0*|5nΘaTSRh|WxLy[ò~A$w߻eyW=Awa Fr_dغ.`< p9P^XM!;ܭ'L$:ሕbVzNݛ@`ӺnH86~.yHhiaQʎ/vi.̰uw[S9CFycG {6Iw] +b +VAl]RBKg\I⟲cs=|Q>dőb uG"I]; ۄ-cClV6Z5iI0uB]̾)\M1S<\iB|fpƨ +Xp<+-Xlg\+bۢضiIg])'ԥFrǐCƘH=/ +q[FjB)Im+Zr4LmCi)tJT* s[Rd/@dJf2V +20*h:B3ZaJ'Nojj9NmXAYg!MԎ9P"jT&)Ϩ)q#wp̪ WěԚZBK'u9ӨIʤMs;nY.dյW`Xeud V%%+<L07HvA]@Sf7eHQiF0ձ&fE5Xj14Q̊%~x#`D0箌]ܾtK_&Pl3uPCBK+,P ۪ԵY%pyl#[B\39m`Ԧ*\tYuiycX+Mq1RcbwImRԞDb|x៪v 597iY* |Դ6wrw 66u$Hm)-)AqWSq1wlzV.Od11qShw_$"Gjn^sx2#uao)2nݙBn$Hܶ!Z"iaR*8柩v9r^:ϙQgՕeɜ<֥urPC؞fdD){ ZA]4cG)ls7  zȍ4Qۛ==Ig8f Lpcծ1!FS=to5 2yUZ*-RWԾQ:gk^1(f_k4GO9.{mfCUV],|(|Krǂܙ;H*\jA +_h?k!Er$-O iN O;bHLy՞DF5749G.Xބ0?Td5g+.]Y`*&Pn_P:KON9)oI CN!OZ̾V:̺?RfK/:vͪԡoi]@h b=\໔l""B ݫJ_Y '@FU< /-(?SDGn|˔VWY9Yf]u)EogEZ`]y2^2)f*(>Ȼ+D&`PT C`rǚұZv/SY*LjQ4{V9\A])J/^eH7uqk;V@^w N}fe1&m7@THY=.Rٟ|FDhe +I*-jZvQE +q-:ITu7uD>DMk۳d+GFL7s歁Y0Y}Џ&gCԨ$y$]鋀E6 K,E\\WttcaY#MnSW\B͈eB*9{6;팋QDarەkg WaϰO@ӊw7-kh)ȍw{)reKT?;Q˖|=2f ߸:@rUjרM.S^L]%E6=LjMcӋctaKSxuDCDZ] 8In}l5ͮl)U]ծەgtW!}W].Ȫe WP(Z9!"jZnUZ\do|hv c_(5R7F_ᵬ'{%dY}˽PM +G Vr5TI+~6_@]VNJGlo*</?2EM&9o2TWZnݪrXb2~"C~mP1;߽A{B5(w}BQo˪W؇L]5uBB&uEy :6͏QvVo^t?N?~B42+1QD*-4R,UWHkl ekUf1.:Zt#.7&A]~]jF]$-Sڱ) ++m ƅJ!)%y,f Ts qZw'ԅ:ΦỶH]iUhzaMn_UT.*߮% Q_ۃ$c[`*pA ?VQAQR]r)bkIrqG0jϪ0NR-wkK/]L]BnE%<24Q[ӂ4""jTfn[m5#u$Sנ^v9Wh\ +vH5*X +!5к5O? ub+ZIQ ‡t.@WlwȼkۂDT,7Ak\CZ_bы BNu]db"#]: 5MqWh5+Әw | DUv8ɬb{Եi^[פUBr{M#}wBA)fGɺͼ.D8ݑKU$h2wꖐNXr囒\(nYir!+-']b6֬A{t14$FKg˱AH]zBSE#AΒ;.w$`3&$;m92:0!aF#%~dea{L]6cfa|HXazaa{XAhNC]%+W]L]ǞyȩzA|wjsRi8 8?m)uBE{ x] +@*jc:% +m ֛&yH?1'}S?0$.\-N4 cxL\tUf\9CIx +Pq}@+.3^$Fi 7"q9g…{)>iXU-w!MKF%Zj1z8tQWdG|Iuu oj].e&yuW(Ix:7VaG1K[PZ?|WrΙީ`ilmWOcUGFNC.h^i.UeeҨ-5\r*T"vƉ:=ˏge 1V GLpw"S9#rA&4dBcB_F v3ժc,|ӊ՟!2Zj u呺آ'U  PA2&PdDvUZLW8Nպ'atUI7jZ5NUƻ: +ϊ g7. ;!&DeKp9XG],ȸ.ocLu)T}H:iJ+Mj)8g߼f'D]8ҜDpEW㔺z"44 +8mf3_zqYGWIȴPDBR 5.D5*ѾN[AfcVS”NIsZYu5-{Z7LH ^J]XjVYJXnq$ b+2M&lxQB>c\t#ޫ"] ړg 7],ʴ "A-EŴ z)J,Y -T9A4uE!'}CXE*\W` ĭ5P#2Ѝ%td~17z2E猿'gоCՙ]0K 2K\4We,3\=UwvSkqj99~R}8u\z*A14Q ~"ѵ=苃L9 Ru].ԕˬcBU Ĵ?1om"`k9HOU@6Hu2c3U0Q7p`XaAyK#Rl_;p`Y#g֙nFGQ* W*iT93]5ur妫1d 8҉yLwW]c08Te]i܆K%[Li+gMOB" iõ2|Cz}Бg_qfߜԿ]cGUJr`6xH2Ӡ +yNG ڛ~u܄SAN g쿬c)ScQC̨a`y8\49= ho?/8'yCE5]_xU+h`cFY`Q'`~W/on4-ohN8~1]ӓ柟4t|(q,3PwE#(1^RRt7'uo%@->gy]^ۧoY + Zfp\)jftƫt4]9û/%`z=#Ϛ ^ ZK_f(VXFdZi_i4Pi0ARsPߪ[~s7>獿$[UXUخk|t3qKPsFV Yo`oϯx?xX_%~nN~A9ܬĖ Tp쯰YnZnePjo_bh+5^^'~/8T4 ,wL7ͷ*,؏qZW_X3uWW=(86noZf/1 n1 5Vq0 z u^\w5㒁ېC_@l +-/oYiSS~ 8^w}R)M$<*Ni''z\k3krk9*M#Bg׹Yih0}~ OOn~FQԾsޝj?}QA8mcr+ÈzͰnnH3 X +u7_ Ozک+^g n;g e"f3Xf{uMs_΋]=Vz5u5p59$5!a@~``02>T=EC_/ w Y,_h +?[[o/H~Sv-U~*""YCٟvM_Mow]sT{虒h]R63S~ˡBz&*,,abhi J Wr9GF#n6+QdUz"$i`Loo87b0Ӱ ?s{L]S<0z_v K_|tzP~n&UEEx,bzHn|=oh4; )ߴuw\_9ȲXᘓ4rjhrP؏d8G%f́cE;Ȉi@ 8`^N^nN < hCta9p A2SUhE9;DWzJ+ \R m] wP~|x 's5s +Ypٚ$|ZXXBC:x?|'S'gCx0𩂂O}g?}Ч/,8sё>y@>|\dz4>}h+O,P/<|:'s7cGΰ?(;0O'.T Fi G?xCDO<|`'(MC%O93*kI $ٟ53YSFzigAaP0j\ H +P;OYӸ'?Q])3g ܍j1{ŞHq +uW;A4^TSzU"sJsFύ +ГZxqNE\iiK _|4>jP=ۦ~xKs,*>!W9WPa -/PGprQCI4) {J}ï~|iasBcնG;rVCu :/?jz齦5Ҁ#\h^oK#.UR?/VlnBs޼y7!{/=n]~K50ऱ"P{9\޾>>QgJۄe.o75೸.=Pa4.<{=li)[?0Ҷg-MsGtqS`0H; _h8MYV?(p 2c6\z~DgKנN2zJK3k|!Y +st#G'>8JmlOˢvڞq,5۬ dٴv5;a^~Y{k<H9?c{ZUjc>Y,斬sc% א!=ky"ضn\5s5L jjR%X cŒJ9K/ )'lT0:T}7vߥ5.äz2Z0VzM%kR˥J4t7d$_@lkj=ծ Ca:t])oȢnU޻h 5]zj92#EZlzyG^ҞܕKSV$nQI2z3Z9z9x'OpVo {[4q{(5.ۃ) 5LX jkOoa"kDiV>&%!23ɟmihmf)*)Zqޤݛtv_'6T[2zt MeLM Ҝ@,UҼ) uΖ37OY2rX.j)EtHa 1 oQiR//z8pջd`%gx `_T: 3%ٻh.0PI"Hxe[›y6ߺd &\»"JRAI^b¤5!oM> +ugְlܰ5id(߲5/qEWd YB C0./:|?p?@J>O"७|PrO`]VYۺaa468ØEfۨ,eg%{`oI.m4aCko[ywUn| +t䨋fJ؉hΖ%>->g.g +$M _*fXñ5V(eRt@3V]UgxѸh\7l E1aDȲŅ'FoLxs,>a#s.zfsމj-1k#MLЂ&Ґ46$1b4Gk=KJ#3 xwq%ʇnBǶp2CEk ΦUkni/4̚AJ!ȭ?N/%}KU_f =w=3!$ZV7cflk*Qgc'ܖ`2Lmm?>#zڶm72]2ϒYIݪeӼ5#|$c;qc&bیm$O=pqU.Ei-KԦ)I-as@B\uKMz|m Ii=/{=>36hHϟ|汋Ȃ+g쾄й5|+w_A1N]z`oX^h~w?Yghloinn&[|%[ca]=}_Ζ gOk8F{jG1{=%2OLʼnz.LlR'4柷$CMEZ)~=q__ kT;Ѱi^hM=~m&s\r>bnޞ;{z#m dϺn2it eOKʁȨ9ZwV =_&{}[SCNXs\ײBѸ}~wRUb&|^ ~OD?3+1g3sˠƃ 8zƗ?Tz4|Ҵ!lPҴAiYj~S[#" +?_CM~q)kj+l&u9B)HӓpeZ$-zTNi^řڇZ =d95]Auo" ԵLQλr=y˓ vjw$1ÏjM>Д^\r5GTuHqOX Bۤ!U $̴NZ(IM ?4kf}G.7-S5Sgm󎌍u"ɴm랶w+ԅ8g 'C1Bl)'sȵ ~QObA|{BH?%G{%>tJ.̘RݶÉiRo(0uEH]z.#/e m6PTI}`mt; #RNr(ԥuO}3Nc,MS߽Lfq^R#ڜ<6sOiCyU%woǍpKmЧ6JK uLc };;vXcXL8krFv椳i sziF 47U+=62.; +pϐݭNq$ԝq0*7<7Y^L`mTSO~O=BZ4Զy.IGk12a|o@ZamZ7j۫.j22+.:T Kb4&2 qyҡwrnrVjP<+BwZ]rY@=rp_3\໹9ǖ{nO$[꣎zx0))1s2LQ ɶT&BK]8UCV;\=CJ[fݒrF :L{R ϿQbQ{8&]]=⒵_bOYH6 iv(Zg=RwJ̣U] +:*R{JO"1{p5jTƭr5ENp&=M-EϳYk+/5 +fMȻj\czi&=|R9`ΞPx#-FwڣU}0<ݦo jׄVrBu +=܏jQ[OvckWZ{Z\R?]fiˈ-IO1n N: w軹 + .3&(;OӮtTmSuȰо!Z/&<YR<=+j4gi]iHVjCNpsbgq.8;PqeuԬoYԦOi_@(VjרI(c* ̓WAMvHTlvPզKdD]t$u :Ȉe X9tm;條-@AEk7A]s Iv뚜êh~,ȻTߥLgKU]w$Ne ǦFN"XHR50[&\okKuI]eQf6%HpO#L#k|ukK`ڗHN{s +AK#.w+|}Ճ}4NP +,XRam.@⦑ιC?h-an*XwYwQ>DW8nV&&u>v7b央%Ȟ4+e_R[q+jz 5uL$ƍEFSP|2;Ե@z224~ܤϔڭ7# 2]倌kIXl~ԘxG힧 o[%`eܞ>HkJ׊׻Y2]mtø L]ekpѓ"w)V{ڡwӽ2YNjfzSׂ7S +.UE:K,PQw> +stream +xڔtgIJlKǞ`+ZDQb&9gJ(QTNrbRL%Fn4}{߄vg@gO&vl0 ͘Bʊ(2FSd1`6:=Ϟpw H̢'pfB‘Y27O\3F%2 z3Ȋ?&\mdV6#}^g3==k" e síc0I1'tMYG1+,h}l5H"No1븖J<č*`/8`Z|\م- M` j;!CZE?vFgxR0+831XF fRQ̆}=2ev&DXKCitF4qf}~dt4f6cJI +{2~*zЎU@׷j_6W-m", DFdHiBm6MnBc /Jf + Kany&}EjYMDcA"9Aˍ};s>L8nS 3nBcA`;m^포$u|cu╾ݢ7?iI>8r^Jitv-]xڌ ȈHzㄢݐ jyU`hi9*s]Jk҉wH8f˻]b f8ॖ$a.1&E-VhpV ~u\W~1PYewB)14Y +~&k \k2e 'dBᕣCQH?ݟFJR<%}X%u{ 2D .Ɓ1 3OP$əZBƎ8;H7-R b! Yda&a $1Yn( +ཪ>+%:-]%}~ Rx_7N#}HP:)Lԁ#HvaH1 .v +V'aҍMYZCb8Px:a]C-PkfB̸yPs2|7iH/S˼cEYH""-]'F~E ~ 8/׽kFVۺLW $xypRGP 30V#HR:)7w`H /y'Ěmb4vi֍|W>DDڧ2CD +{ !1ȋށFD0>8pnqLQ!Ida`b+SN$4Z*?}iux$}KԠzѠܼW4r +2cO'r}M>ўcSg[oNTũ̒WJ_`MmX#Aka ]R!# NiihLCNK*ĀeM' O.a0:-?ݱXo 'RվxEP"l[$d#A56 -"ȓaP`IK]ѩ(\( =d (͏_hK={8Px+zgw@/NNV8-+ڱ&p]x[VC}l̺? g_yF(&?z~7xy}deO( + Ђ5[m@+]YB.HYD9ae;] KO_S&(d1Rn!WmZM.Ad8e^Y>1l?8Ni)ǺNTA­ΨjV<(V܊7Zwʦ/|(0n aPfܥ@7!%+[ais7:­0CjuzKv1(<"j) +Rbk +KS- G +YVV!Q k V߂6k7 cy !!Ĥ5,Z00S;&cn呆fA~" IȆ:h?<n#L+H13(aJRN4dPB<~wBf¶h06qgZYtN A!cPǠHI*pŪ1JM\vS o3~rr&Zy|wxL0s#d #CJLI 7;fA.y,i"lm9!@No ÈHi5(ONtJBnh7 p0e U׌6-2u GT +o;:1Hb'd$ l&)jM?x9v'f~&d l48#A`f[{ KfZ!'ЈlLyq4֣!(πLv#AfdvBDkY7X;dΝ1{b$敯5?ހ'+$άڙoe0쐍bJ2uJ͎#h/5dj> \!'dŏ$8L JA!߱C"!OA'.5SKYqz7 p\ . vpU%!ϥ c)w,vU.`.3%rjz+'%α;{+B&c^DD ڑi#\?+2tҢbWs@Fr;+.F \"8G21Gc3mi35dCjS!Ϛ12UPX`cqsdIOD &/V;`gKͳ`@v9^4!C?`Cn8Gsqiaȱ}Z]y+yn~o}2C>gD_h,34$iAI[vF à0q9>`i25w͝G/(  T ;fAv0ױCy*+ȝA$@M"9\UdM`]8$hΆ,),iE[ӤuB'߽EJ(RE@JLpg 41][yM +" C$}S x(!F~80d$g!#N5Md2\ ̓9ynS]r'-"$LMH<4_^:efA& V޽(\6)҄8?p1\K+u@nlz>F+A$dy %= ]!SO D4$dܓWg/F'0@wِE -α#N@,9L dRfFAk4͸;uIOòY8iw!NgB Moɔ$!Nॕkf'dm#DqS&&#3zH`-.M"F9 +0vrʚ޳WgAr#1~u"'to"kjlQ"?Uk]}ד;] Qur,4+ԀL%ZS9SSr*$PiŻgFH˞2 {n²gڤݐ%=mTꞳW]g3>{ 9ZHȼ.00Psƪ}`@뙐S9_L1Ebi Af1^Ӈ:2 LKF;f{p|D`~a^٪oU>{E0 rCޱcZA̽<9<"J3kqIVhSz^RLvG),]h!ZUGw|dhl5:PӑBvsZ5#㦱ɒ &3Φ7ZLЙs}]r o&dO}eYO;zZd9,'<5mVݣ qFݻ!/ՄNbSh|7AlqDD' l (uB&3db2tp@B{P6BJh pPa<%\ M×Ձ[XyB6[v48F ;rFQU<7ܦí| + ,NCpS׼ѫyʐ +Q'RTd5foprŻe4ϟu(\<*P?Vʉ~!'Z&HiғEvE%O \pъb L:DHB/flaH(lB3Љ\QǪ18,]N*㜺LtM-IfO90DlBO;gyӆX;Qu茺Z{i{5?c;2/ H3H 0bFB~;Z#Vkn+5(Iu^r 6 [umE(O`aPF C([ʧ Ԗ"Tcihˏq+G14(ybAY&0$r^SC֡aY3`7zz\;[>/E33yptilϞ"<nu/ !a1v{z`kF>SOJj-('4pFvtM>^)T==>1 Cցz]dFD j`2{'7"/¼BB;:[9AZd‚?+w.;w;s>19Μ``W ~> >۶sg[?g?Ԃw+{/g᯶}[:mFg0`7Ю3;?_?S0s3?b2>f0`hݍ4t\plw9Wn3 dY 6qlnPlA +78[tٖO~Ϋv`Ŷ`ٖP`dK3T +-!ԺPz#D9D9T*9#D5X& k^)pɪUkV\q@.Ⰲ&ϋFzn۰7~;6@N0BⰃ6(ZwFhqL'P?j0;dBE)8axH0+jgZ;TO+{f/<@A탡;FvFG1D1DG6D!+q;%÷g#wDE i-4F0:aަΘwk.\zOLk0 PVRH+h2 Y_Q>fX[5}]"Èrz` p+% m$F"/Sh=a85Nr a柍ZU$5J i|п+m``es3@ vv=WTiN\inhغӱ-Lۗ Σ1nnUq37+Ϋ$0t&j ,u&XZ 4#ߕ80Oh-">b@w[bf#!hF )(>8èRTo+LbILL2Cf|WaL2Մz4` G~xd~^}&HWU'G"T ꆥ*(Vڽ@wyz'Xp-ȶX* MDҘ 7c 9?(zQwm1Y1ƆʥPY=꒙E2T54cAMV ?htC y8eNF"oB nK4"CV.56 5|Fj]UUe!(RQ č[&p[D_O<(;z.%s*%d6(y4JNOگ9r%UOK`>!rYwwwzcU~2(o3RN ΢qws]!?NڃgUpZ',d^t[rvf~~퓻'w_=.{]"h+4UCai{_}>DwV56J{lC-ijj,7)MT2 Ŧ6c]ElKgS2G~kQOm{I~vb+^+TDޢ1>pss[⧕ըHlP!>&鞷txr?5/{e#n_/`.Ogl>Uʽg.?4 "taQP,  Ve(ȃHUړkE >k05/!Vʇ{͝R3KC5;C(E@l|?,g$J{;}ÿ`8 -J 3c"waq   i4g+]l9V6./t-\_sy?6G?=Pnr?;DmEuyI\#B;dT +hגu[r./3hK31Y1o9KїfYutaENֳGvCK i; ~ + v5b͕WY)CGd?fpcAq?7I )|d1atAs;U?@}uci<]RA>CGɾ8-|ÿ_}<hl ߮T%SS8D+N,򉖱 H< CF굻qIg~nKe/:J_~}y3:mq}EanQP] ]l"dy [eMkՐtcT/WŨY 2vx!+V-HT\Z &T G];&(O) I޿8{S?'Zҿ_sL3Ng7 w**v2$?$b'Yb&bEߥ1: @Ȋ>}=TҺWvQ7m=ko~׷'h2a,:cs}l|2XQm>ÆЊ)Cd]:E7tnW}{YvSψP;C;bzfpa4S13BI|tgf/62'7on1Ns;g:[$ N IU(ى2V$ sKu]TpbԻ0վX7O~v*A˽nQeǯ~{  [}W J%Ȕ'zshֿ g^̭hj'CQo)QPtޢ'C{%%e(OK*$SvFTߊ7]Ɓщ_L6HR0PyS-ǡc5m*TL+6 w)NdΒi tsv;CY C/"Åy <ޟ&PkvJ^iƥG~9>_LęF; AAy75 O+)a;aUA +ȓ²i]!?ZTuNHKT+" 'l R9l%[^o"C Q&ԥ4!rcPjϮ=R_:+r:E1(\H!DL<ޗYw.-4h_2O~71g?sgbM#792d"ވzvvޡzwg@&'f20;[s1Uq'~G3+N^xqZ'd>#PU?ʱQ"lo9GdAsJQ 0L:]Js!'a.ũ:mT}cV}k;YAu pfa[03\MլD4ԁe1ǥ{3gwp7lm9svw}c#U e#vᤨ|[85>͞\7d)ཤЄ Gm/wַQşPVE7I_y}I&+*1u|\F&0GD5N&L2ԟw~@njGHUi.nL7π +avPP@>]ݙ ?_zꋯ>`2=<6pq!OFn Lmj^dsg@~Zf^$G9jG#<Wu?"8 c6]>2FA~PX1 <X>Y(uVԛOHQADPjm~P;U-3 ' P9,i>M9ib@A.(ϛ'/;Ei3monr/';(Qe$7Y+o_mD&ڼxkBL^hk׭Ͽ_PPX\ S)YlOf|ym1D\\(TJgc8a()Clv8덐Y"a/NU =KO)AoGPYNdNZGh`n޵B;Aq*80N#bE8g)_ս.1x%7o jiȁ*p_ʭ5_{Tmh{?'}9kf3>[\4oRsvaޡBPWHwhwPW zA6?O#Zuĩ"d$e^C턼fͺ!OHNyUSRncq[tm9NwA2:Ι!;,{;tu!7&AUR)C-:9@ \4p>9Q$d@ SBB@m0*:qcV&ni +=C<)+;Rxg?AQW e_1ӿ>Xs䓸k*s*s+++*TV>yZyFIUړѭxLcdAdz* u)I2NC3 +E1ӞтG 2AϡӝI?W>_>j7VKp ?%j}`Ӷ01m9LΊ +K<}9o⵶AEգGOf߭){1Ԟhպf/A&0 +ͣYv cE:w|~rN_tNgGlzQs1&/?\zԷ>>@il 3 Y(FQ.n@Q2z񽙆!Gd%ij$lRNMdJg)0N UϫkyG + Lcy$duw4l k& +D{/f2W7Uh6&S[lW'/SǶ!cO@31ރ +^dj[_}ۗGh_b~sdLog+26\v~\uA h leOapȨ#P(DQn>03 $#WWFc~ rg$ N6Kd{44F u>fg5yϖ^ ޡ3錵6/*(,+*yanĚv}mlu4wΤ-Ou9-m/3mI 11Y~x3/=_׬k"_*0ߎ?yd|2025mf-aڶ] -! {qtK(TKTXwHu+5g9|v03C:Mv??S4(R]UZVK݇15KTfwjڭMiWe֜;sV7R,H7>>:<>{Vwɖ6E'׬݂r2TTeTh };&'6;WT(׎^7Cnxz,/ὔ-H:2 ѫa7*݊laNi(>1MNP5aC-T0F p jR-y,'_7M`CqXI.^ U'N~yVU^-mkX ew5߅Vۤ%?67)eߤR6컔oKW$}X"蛔o˾/_U/گߝ fE9'^AaimCuj21 {BhLw $,_Ma7v,㓰lVr9޾,J[yb +)$ڬ n:7NkmãcC}"+3iN h̃AРuxĄM ˠn7gOOW<,+Ndܓ^mAnzuuj신UV/ *ꠋ:Uߨ)Ϣ㪶l9Dg O^zݍ^Gl>7aA YZHƆoxΜy_M]wa &:ۈvl@}HKK_WUV +~g ▲꒒׷\vu.\? l}>l}l_];U&V>#a 7o4S7c WZ ׀?ZxEKrEΟN-FZ%/^/W/^m-[9&ts`'ȃյ%HD 7<"H]IQ8Orsb[؇Ӵf17o>ړGoH7@9~&."ڈDiHkqVGh&l,ѽpI7jCz~پ7֭[Ջ]z^]]+^u+/_r+/\_KIOE@tsAS"j?uu} ++v)V#wc!?{b=5mG~ڷ/Ytd戸{n ڂjnw+6Pzk3\5\i+L5T, o xG “uaܘ>۲+>`QF(b4Q}=~ݰC=~aԃ LTLC[UN߁յDAA$йޘIll۵+}N*b2ݽ}+^V<~T*J%2JJʞTݹ_rv8:qg/z9OѳgEŰ*(zZT&U5O+kYg:|wGJ̘9` ٩J JN$ ;4Nd'% H4xM ~_'Z#I~ mx}f^VboޡMܝ:Vp`,Iɧ3vPenSD-Z_^9x5͡{Qf(A ~mZw 3,[F8"Z<㷲QQ:)eIZO*VZ%OZ~*y~٢EN}~r+^cP['!2D #UwK|uK_tw`@C)dC:v6(yN KpP"G qjHo:l;6FSO0EolwPPR y_fGYIY'UIE&@d"Lwɉ/i`Wz74p|r^BRiЌNyP;ӨS~lK+M5BǗ~\Ed tCs0sʣ /_R6ij"fno1p@ e+LH<`jXtvZN8' qvRo`?A-Pqh~%\ϴ-RH8&d.3e R) @!7 +D1jgUR +/9 +P)3_RQpi?q%苎2e~1wi_fG[l9OzN#0h')^6pEnl';8M`w#;!;pn^ IEصnZn(7\  pS9=D?F*V?>Ȟʈ=FNvoHAV`̡r@~[qΐAE3d;4"lgB;qdMC GXO|φ*t8[#UG?<.yz_ܸO0cYcqW'?ΊyޠCC5*sF!9B~_۶0 n|VBv,t'~k7ӐC ڮ NEc@88?8 < 2.PqH|! Ɋtk<Õ/8j)-S?qg{{kڽ!v"{8(IũbAq4١3"1ntc 9&6 a(puǾtvλ)˫vEsߕ-_(4}qu9pdC2E dyJ/P%r4=T;QBwTByoaٮ I MCɨ$$',ZO}#8F[-a2r%!vlb38oi +[hY@-Q!0 =5vqBX@Ay{c2${æ@Ϫ, +wF,M7vuW^,ۊt3O^o_ Eb`CkOF5@Ŏ)5V:Crv<vE +791!\|P w<!;=)[8p<ˀӾ~d~շ6@dx?d{vAڲwK w_>N^OBn4sO/t_>PxYG t4#pS.d'{GtAQ+Hq0M , ݮ!kz¶òퟠ 'Eߡ}HB^!=uɣڏ4d=dJx"l +)ȳP^!* !{NRַGrPsFH& +2K*T׶SAUHLJ_ ^#eGߜr_f}=2u] o.lnwOd/C8yC#%Vnha;4;"vF M hpsp'+.$;GV6{Gd:cGBF*,& g87 gĥ@oOc3VӢ/RG]ne0s\pt}zlE:.Oj;ḙ&=x:4t2WЭ;F8x{.&#J|8:c2ip]r3x}$|p.P]?hB{b[k}[B$4;5aë|^=dfL'Ki4MGLV#0!l"+)讞-zd +f==6W7?*jM5-C{[4,y~Z{Il >BB^_!ڛT+ > v0?H䮑={ F$nHN஀4:sdrR##=+X 서E=#vm;2w%[w ϋ2pʈ62>PO@EׁSo\yS{)9)Z6E|>M^aj5#s*07b:VkCFnHp^X"O tKHw[y8witӖ9CިbEv-d +og/מb-s( >E=8`Mԥ9%~`UQ 澟rέiWeG]y\X%K< Cȍ^a*v0+y9}+FP|X-vw!2(ȍ7[kfKÆ6$m$QmFrG)8M !9 ݡ ݩEO֙Ԁs4 =#ת9 =7,GrLe9 zA!ᔣΟ0V ު,K3,9Bԧ쩬Wb5+:Hd P7( K'MX;JgU,$ɋ*I;:XE$eq;vLٖlɲ.KlK$ {A/r&yo^YRrio=_\@ݼ=w}.qR4!?2vA48yiXxbc{Q% ._9XғnۛߖU!$3%}@L !yQw L'IOE4#kzX]_)(g #j!y=+Tu HE=ueo>s#O$ _7)E4ܭh,pq;!`GaSf唙 +M,`o?Xf ֑$K%5@\PEA8-iƫ)=ch q2ܼF*E2,dvCbՌևI}bm~z%3d-1BucO^GFUv|$IDxA Uz;Z}2z/TsLI"g<.˄md?) k]9+=cS'z<7s~wO6BóH25@ y+~NS \b4L0 bSft%rRKF&ٹ;#ID܅.Ռ `8%&|@8AF!mkB"!$_GlH6xpι^Ԓ'ι7NOhƳ`DC6 6ͪwUub3y֡ +~ f{`h\; KvS + a=% OF4 +uvQ]X9Jk|ޱ53/D>Tǒي*h"s:GFoݛ#X4@^Z;.RQAC/lp)c9TLj"œ$XGrsdX-T 9$C2EZNY97oV9@ͭOZ2D yCH F*!/_rx°DS0e9^& $ 1ym(|M8i XQT_X%3&Ga▙Sa>#fO1^zVnE%yME5L{y$83XFg6=tC$<`fK h:a#3:߿$3Dfa~ڷ(S2Kf8\h>EϔR=]o+^{~USE_i0SjMomMvR$C+20oYR)10%z LQGї6\yWa9zk + LJHsRi̜oڵ MjK򟶞i|C]O%>rfk9Ϟ7[/~zKZ:Bxn횣 /}3Oh-UMibS[eHZXW uymp.Z-GR ^ Yhg|{XI(s`.ւD!ּ1M'ק?>ɵ.=N`\wIM]/|Z™*glE3$+f@264a@|k˿ݍe珟=o/lS=Gw?3 $>z&!}|p}ŐyB>EJR=K[H'b ] i"=,R]n)V́>@Ƣ!X2;L|.bI'Hf*RD:2Q ;aE@.6-FW@r* ',g軋 + \3E Nkt: >w!11Q,ON :0C2'_w< KdO$~j`9'< ?*3[ ly9ՏkFr8[ҥ"$оAul@89k! &2M&b+~ I)ƅu,#ۓJkL pMX#ќU_AQ pˆ!t!* F L|۰B AN7MV[ `N[!_$kJ}XM~sos+\%g0 A!-0zqyɶ 92g`ͷ/%%ocSz/%'>xaTz<[qdГ?:@xr.ywovTζLΌLCw/~BD]xDV^krJ5d)3E̢ތtBWY؛Y;Xl(2hSYS TfOj~kh_3եۨݛߚ,J~uFaOF2'Pu  ҇FtζL`鱡FO ՞:9GQ:3ߴ *a2j8Y=?0t/_4)iXR1129kt ^Ł-r4^Mo2hMg to8ྔ~1RZɯS/~F{!r,O?jjSvtͩU¥Wa1¬>J؝{5ۑ]ؙS,NAv{&-ՑT3]Qd04Z[j~kJ^f +)y{s;(YZDA\{g(,~xd *jr, 'Hg`*)?ҊiE1F+@C-N٩z w>|dKFb@`l9<[v5N_&<6aG+.0-6<&'jԚ9=N-k-}ij: +.^jlJܯvEq +btNHcnމ4֭tfFoIcN +#ZZyyq?V/b^F*V*0t삡V Rpu%r;\^/-|MXZxa mɥjpu9 Xt.þ_[Roi!p{!x{XBC1 VjZ܊/X.t{aeqai).G/Yl S>_P=G뢰lt"`GXCޗq䶦3'}ǟW>N&KÐ?UN04 U{T}}CPpVBӳKS3 (w M`EH`$ H'㓾y LT>~rRW10:uWS3`(86/<:Ķxhbȉi +'K哧?l+J.6 ˯/K/_e γ瘥htĻt><+6< +.>W|p\}b|bWOچvaB\E + <9ګW׮\+W@|9ʕ/x-g"[Wlekה׮/UMNޚ}O7νkkW!<21zu= gZ]m~MuWk_>?tTT)9nӦ8ߜ9.!9.>i=PAVeP !)n -!. Zxhhq(&)1qGz6$l/i# 91qsrrR6X'$ܓ9!1-)9)G;؟";w=({췱PRIn7oˎm۶3e[Cܳ+m߻m;lݳ}=SmOԭض#l{().iK[n7cHۺ#5D_; ͥvwGCIAVV~J=rg{tٹYY99uj ߇gȁ@`v~J?jFhZrKt>oR a\6L0V0SbdaHR;CG" Slg˧h!IB\rh"[EtY:\\6ʯ, sð%(F8r[6<0i}^G<~ <4Q0"E$e,ܥGg?J޴U^!sŁm.%C`s~̤ A@S|*VokWnu5Z}gsVϽŎ `aՀT+5CҺҺ) +:Z 񒚉ꑢªJ.7r*>~ьlN ؂+ȫ*?5SJũ'9>J}AأuY>**1{)Oe> CzrUo(Nqt u?O7;f _6CM؟勯lw\P0r71 ,wrGQ\=VxW'JE ψ ,'o7 ͕ranW;PT*lC8/?u4>0Uآ4#pX^4zNN' H%}AFrP9)G +s 6z1u"9ln$`Fopx +[Q9S ++Kl_~d5J9މYl5v>Ӥ6NŰ'VG}QMT&kkv spQ"g4#fΫ]ӌɊ~I~Ռ`P9F80k|2TĵrƆ'`Cr +0v8l%N!6D%653u] U6a\T»숎CԄJ*qRTgM)?CӢC .$rlV؅UvH;od*HnK|CcwBĖ Ny`4 $}~I*!7ZBU[Sn>1ƛom$11څ)f]WTiךk{ {K*rsϮ[ Ҥ f"y_H쒣sE>%hTNT3"nrQ1yDӼqN8+n"쏊FZER截?hFs4MdhGW6pKurA.R>њ=pCD[o#!LK#1xpo) +"T+SYW. >Q Ϥr@r)&S)|sšqND)FDŇDdGa5<5# a͈q&$ST axM =EX? N+GDhgVRٮ^$9h9k{-m=X~)J ԯl]DR w,5y##cw1]OW?Aw ưaFx FEÐ;q֬b 9E4R2eCQ)D d 3lAR>kYM|#Ut0"Oک^}0}~$DHYHl]w̑< nRiWf׀?FIlң@2S1HyC$?$^bL4EðiHxhz#,Ƒm;ϗXa#D4ϼNbF4/K2L%iHppwCnA)!y[7vpRm԰ ]8ߋvx6޼䫖ݤ0 U:Ov>If)+L\FQ.yFWcX!lGi]\qZvxRvd\~dT~!=<"<4ZT=Ē2 u"O~!>q q6T<\Z?=ET'5aTRaߓX3ݺe,vtXُ"HRPa7V:)yݛ2v{GnMt [FO=oK %ݳqHV{Z{ǦۅS;'ldˍ=pJ ϧQQgvOkBlS=5$ +`YQ7+x˵{ ^đ DEZwtHȘaf)䗨X*'0 sQ%đR~RһV q~.&uɛ2;]l$VHx$?QMlв_;r/edp4":>\ +u:%Qco.;> +J ɔWϒ[󅺜"e +;%rD! , !U`.~irMYob}orP Ix rUNr8-ִwc~I[r&/ ֵi4L7wv +H nB;z֑ B2] +$f9qFF$./q˭L)_i8hC$G + '2mܙa^MԌJ'?k}OtTV{C\2[FQ3W0 |:(6<@66禨¾`*$Em&W?nIQ(A1S$E,dGج!B2\а-kiRSIӬtDNnQ (?Ljr=(gos9)q!90Y:6dž^RGc嘑,|g(=W(6|q?@#yIL +iI  aԈΰo#Bnd' ɉ(nlqQ4{Mdo_~m=81 ڱI>%$$_HvĐm7w!KrЫ$~IT(9SA5Cb/b7)"DH>FÈa@B!auVXRL;@Xӹ{2 +UL[HldXrd*a0Rы&H17.d3DHD 29;FRJ99L% kF\|bpXAqJKAImK*ʴ'0!鑙LN/Kj#" +b +B"9**0\r}ۋ+ib[GJ $0xgwfpDrdmu&&hkv_;įE^P;? +NbݡAtF&;".T9Z5A2%gpC%ԑIi"7,8eZ $#'dM: iNgbz_3(,jC>9"M/em^)lE?f!)y\%E2 dpT W=T\3\JE + lŕ*LU}VbC35C튍|7ax > ν%dyWpֽdT'qGhFCכG$֑L?.0?XN0k8e6+U!u?0Ȑ'斆dGi8KHeBYd̴ Ҙy<щ}ʖrFz3-219]#0lj~ D=OVY:!3퉜?Z[3Z,hPq' ø2W$~J b}n^@~{+ڃ%,)s.O9¾"5ѧ Ad#,b_J @승]O6 ° BX=uT3oWn 9Q")Mt`K{]͝sWzs|1"NyÕozS_5πٮtu>$yqG2l4짷,K(ELD#H;IK)n xz@NS>ȫ`p4.6+ RYEjr5MaHŠJ@21и Qqݡ +1EYOlqQ QLN{FM9{>qmGi}]\VkV^Qi-2 +kuQ}1~:!y^Ñ] ~VO8"#%7Q*;h8O\l"s\ E@Kjfz $ SYؑ +~0Hb,A 6MdY|*BruGĈ,"0oj|8">w܅H,c +iQѪ}`q +qW"U[z$!eķHM|;`@HU£!3Qt(-pt&A]LCTbK1Ȕ 0EUb{:WBoÉd+G/hLgqTQ[Q*"3XaȦkkDO |>L~w†kl}WKY=ӦVɓuϾ~R&T>:r/j0 ^۩PIY?tlވJsI9'Ł--J7PMzg&V={!p-nȡw M9\l`*XXU;X* %5rД5s,4fuiݴߤ34qII<ɖl9bc$]n.{Xj5ڌ"FsTݺycǠS3Pvf۔c0Ӯm'q:]h#c>IJ*TO/cr*nK?ߦ:`ݱUˏ ʏ o԰C~b? ~6FJtCcKK{ z`QKJAkGS؛Sԛ]9Qe{2٪ vO*KNa +awgve즵^z·>uH|).aYy_}Lέݴٜ6P=Rg*Ceq,ve65a-nКzya Z<|hMK&u{>b2E͜3Unc܆0<`HBֈ^Skpnc0ƐݾQB>jOyy5e^Fdp28"4`e2)d*3ї̞L2LA*aڥJ)<5)4n{`+Evn֍G n /X. +,,U +ޅH5>X|{aq5 ^x˦|^Z+ˁU +C ]xh:V,0_zCR`q%b1zwwdje#L*ӌ{TaSSг Uֳ{iw`w~VZp1go,]>~ə}t|՞ roj= Opuֹ03V4L-Oƃcc(A5ɩũx?wi|GII9\a{ZsfWf 4DB(a||b酙Yvv>C~9iMnjҲ<ٕbgEğrEpėY1wObW)մ=c9z+}\|SJ.Hn6j_-V\)}^(|}~A>c +>onkeliV7R5Rߺ +q5ͷ6-=1/4Z6Zj)y[nn]uo4Cs3̷*ؿuKbhh}ex-m}k+oe36HJONJH"(D78–m Pz''&$''nڒiIIa$&%F #!aM/$&$HH؎r丸DT$?`M] Ea6%oJD9ý(gH6oش}ߖmogז{ݺ[Am[<|7A.a/e@&:Ǘ9sv?$w0(^  {'n#rS'oNp--qv% rw0h bDb3vϻ]t\nc^f+ǟxޟ3 Mu.ΖO+OV=8T tvN<*O+NOzdUONzY\frEüN̔ +TwO, NC,|wtZ. 0@‚ga\xBQGh@ρgp&%oFӜ+ ^Zq -CmzC/oK ܾ -O>Ο0ڧE t@/;H]js&lтO*10d,L̹sn9a060<40Y^Cm -dAc`Ǻ1W`|Ĥ-y;[˄sitz1^ + mk!+e25pLF,Cw +Ug8I]6ZR3]X9;,l9el`50dCl%bIRaJ.cl C>*Vy ⴟ# cS1Hcs,B>68O4H> +چB8©/:OFOc>37{p>K޴CQQz\h1F P%CA| &zXUǟc:55cC9[c}c+i!C:$?d  OM=Rq:$>a-ii9T^ v:ɒɒꉢ"LD>Įy㢚 v!sHʆKjGjZ.{, :<&J ,P ~1JT$14PD;N}~ͫzz-Ͻ&PYjhM9i%m!-XJہ/XCCpYad0uc_LcasObMN Zr. O~b[1ī~|'^_ +T "15PPPZ7˯AGDi-*b+AI^Źĸ;H+O ++uuO>⿔=*mt9!] +T#0&H"F[EX#YFɨfDk޾'y,e<'^ĉ' +0,g ~mFզlrQ͈zXކ H>H+ch!E3j ++陋jI 3X(9çm#aHMH^ 1!#[  EUʑüIqø5#ZQTi89_j\NɒfXƑL1|#>Hr[xLv( ac/u@)i2$IIIw}p.%x>V<|x䱎^~4XOLL\J`X3HdQg +KK2Bӑ!C6e_ aEFE~IUa5Đ-4 $H3i^Ln0QEG#E dH +ZC#ØJZ^7ocl&/0u)Z/nPOᬙH2]ZF26ځ,%Qm*4]\3R*jhh#=FDCZprKN1l,|?1nOR/gNagT33먘͌1[|5Q0QGz#'N) 69>܅dH}CN —2OmC5e-p4ӦSui!_`%J+>ɀ-Ù7"pԈpv%(n&T$dQQzSf)2%e%Cla.S>7c8fp0޿W`P~EFarH/q>,E崇5#k򮑜Hw`V187Y΄{wv=/}`9G0򴫝*gl|IclQ)Sx;Rb\G&dXz} -T7]PrĀ*яJʏ*N(NLOL(NNʎOV t&>;Hp@Aj3i?+7HvdF 07rdo"a+O%hHlhKCdQ3l$pQ\~8C4'=2+;6G+?1[~rtIʼnI Q(}NDq ưfDN~d9_#ɡd#ѧTm*8L2$Ewh-LR(xҫǞ& +F74#]Pud";gRdh{YB<'F1#;al9bqY2KȘgr<-Wx.>!~'@g`$3C<Ҥ2%ڑ$Gd-amL^ӇpDtQh%ι)*azpi rPϖ92{QT`Jm酺y û&J@ILiL䦰l IȔ i̞\-w>!!>6*9:ձka4eڸxl +߹Vvj1;X,L /M +Eۻ!ٱЋ)6ixOᑌOaCq`1BaGfrLCP 5X##ҺA鉍 \UsIidfHh"3[_\9”CJWu ; .Hdz-)&Ml&c~Hin{a^;ED&8\K!$I>2OI t0.wdi̞6wD|2=n ZX?7,gk"[I f⒪JG1PRϫj` I?eIQGÚ1O`LIl|B +{OA X!qpMLvm*bNXjD/Ct^!R\-EkM Jő1`8w 9))Y@O Xz +s^H$绑 ,M)\Sf)-[aa1yVE[ncɬT&-U6a)o`+)0 {w~{:Ib}LOnJev痚a~,Dqd V`KKZ  qGe1^ "b]|vuIgG蛜[,ɉI2i30mB@2=Zd}LT9ʇ!cơ}b-fK1<rs2 pWh.&6xXȨfFEJA׮v⦅#6 wbKbo R /1` jLؒIjBAc-hx.$aQ0=ul 6T,ècY~zc߯ksY˻_~6MܭyPd_d8@/jO.eHL) JL`Í/Y<9Ƿ䔚l]6#@iwI)Μ"-Cd\G؈Cd7A}bzaXۉ5R{!iWd7>Ͻ%gݕV }fQM{"2jW:9sEr':DM)-Sj`[dR鰕YiʐX b+aK؉q9E:HN>Vp@4肑 d +[j!VDB2Uj%0ܭqwk<8*8-*gf]3]X}Fb|7[2 +u~Χ)O5ⰜZRn-2m@q)*gxoڧqŇi3grn_HQT4+#b[s09eza]a|D[>o*5f.,1g酆`g]tPV\r=fKE0tzsy6pyG.6IN]QoٕVweruz Ѝvw3Q4Pr/*}:{5R`y &%m*'goOl胀CE[`apdeetx => +^#xZ W^KkrQbd2,缾ؼ^o3Uˠ2CChOV!"G6F3:GoL`ar5_us~G:ݙ\efaOfv2jNtyݝV`in> oT (gȒDwq<뇙̮ Vw&[6L#1u໥ KŕJ0\X .,XXG"W a5"`bph*nٴT(n/o/.^^ZY,,-!\.1-+@`!‡Z^\shw188|Pű0ʦ-ܕ߻+O+;'=z`Oaw~wnW^yGsݏA;vʎ>=_^w>.iӎxYVg\]4ݮ]y'_@EQvoaY8oo;gW榗f&'&'H7Q bS𕙕М KKzIINФ3_ \ZX_X6]wAopaӏ_y2 59ʶҊV~YKXvXvP$HXvPUzF[@!@M%[ʎFͩgFN ތKH'is`Vy]Q-j痷(KhH +@JXz[ץu:[gOReWS豫zTʾ *%w_5^͔F;֌~:vh7%n+/}}gkU z m*@Cppz9bSzXh5cm.n%~sR"dؼ5aPAldKR![> +stream +xڌp[f^a6:m۶;mc'۶mtb:u5i11eSR@ I +ad002>?7;K]?"ۘ8E{! P7<= %uoE"VVe׷6r<;;}_SU-Չ;nh(bfl$gdh!)|21u40Z~^*gs7_y0GX Kjdlhml>]&0(+ /ѿ+Nb A:"6z>O?"O??@}FQ>q|"?33/bfD7Jg3,T4/da /_i`YٟZ?ongy~dnIGIiBCY#acelGoA^V~2G>i9_Y>?ofhhIy99!#tNp;~?Iia`qpN\࿟>cc7cCE[C@~WI9T +Iՙ߷FzV b*f~ZبTbt"2>C)p,YZų3 E#XFÓ'ՅBҝj`b8% JPDZ*jPE!he3ˇ BFT +<hxUF}vB1[Xa1Ss#"īZk֍Cn@8⭨+lD-`I#toډ)&ZC"}X"u~WDuZHwfa-wM9BX\8m.o>e6 g2sPuݰ~"s +T-pjzP>9{y\n +mZ{ Xn椧7p I_98 at.Z2?{() *(]wuɕ|ZPiR*AاO_NE9DUڋ\,GZhq<*43ejd% ؟fW:yUdda8'rQZv ?3)2R6@ODsŶRl Ͽt7&8+)ܬs43)NBxx ?;d1/]=hU3z\?$ٴR8 __aJ jOU +7+"ݚ?.ݘPJꭎd#|xrMv!V&(VWstUfm1ΐLpV\y1wd 4 QxHëqw*'`YKȂemjS6R&;H%D ^8K 3GG҃?"O(t@{h%jBniPO1%sÀ ~vSIƳQW*6B'DJ`hw>%9R&[qN |4MWz2̜h; (U=F(Kku,D60RE/Mo,Q(YwpnHfUf{*cUl!ⰏJfJ wg#UpFlv54鲚 ?,~1Nr*`ۻkD]3Zt`E-m7Yu]e١x6"X%3^c8KZS@$sZtZ7AدmIt[S3_'-(D =".K¢ws`}\8i{iʖ:k`{y+s[uKu!_:-.o#tL.|O w@yGbE#6%.iM =5 Ȑk8p+ cNyrK-x]ﳫ0AfA@2\)i/ς9*Pn1*|cDqXK\d~Nj4oΑw 1t``W:o[Ʌ|ZJp=io$5=Mpve0{rivA()\V/&v( <6rm9KROH*m4ĘU/BdRǽtiG*s]ORؔI-@., {B'DN/ԐjBݧ}*,\U +sNHMfߔ&2D /,\Ȭ{y.$S5@/ v (ŭe\^6^ M|sD) 4;'>iaCVLgz N +]h;Dnc=,BZDmiVU'Xf)$6; `1YaN~bEXys`L`3Uce9k[Rl0<;4E=7?N K]m-"FVm}߹Z>cR+#ʁpuוeBZ;E^s''/ Mt'6iY6 ǑiFHM3完̛HKAFtB>O%yLod@tv2Ix+\?:S8#1ONQz]ѐ<* +i R,5# +߿{/ZS|֮$P7mg.V AR)<9kEsm{ʲEGV~q ]wۇ6?Yc92ޣ5"};Q̵L3 Z=Oe=8=8Q բ ]lR4 '"UDŽi^KKx ;m*HIo78m^ꕑbhgM_1CLX#o QOq;U)Udc8.R+^Bj7W҈-/a"XgocDVhBO\B0lXk[R"iب` _{d$fLom UPfTI*Z F>xPQ=NuM04ޫ/ʍW'g3 +LlȺhB + TG#Rp#L8b}>d2o~0VIPl_M`lGv8gʐ{6es@/hy8r(LLo]_A+붻mw$.i+WX*eRG/n eXZ{s08Y MM'LvɯB dLp;Nt(S=-Jp\G/M\hBB p <~Ery@{SG57/ +5CD +l%@s5gaWi{T| J2JCkn>Xv^m,W5X$o2FY'i]gb_ h{MXQǗr(|rd͗b m9ljx$s4g@0]I(5@Ćly!JIY E5_/gVPV,uGg<ݣ"LH ;Am?G4"'p;Vt\4@f"SLH-9WHx|i~hKӐ<26iąьy#{d/-~5COӋE3 VgbkM4>(#?{Ag9ȧ6U;QfZ;[*r@u![dgW5Gez21@c y <@p9\4՗f[ts߀=y7 ;܍LV'5`Qĭ725g׸]]ՙ\<);b&N,5)Re.w[vc)mȼ -ApDu8~x[S9VrGJe:@]6kG"1G1.-PEӀ})#}<)*~T\ِ]1K]f 6DڝF.ckmГpr`k㶭)?)D}[ޞUթ$Hw!yNxi~NlɄ#. T`HGJ*#F-:ڲ8"<#xݟDhL5m _ƹA~!J6+L $?l< k10 2l}l◝V +O->i.b#A(D($0+ +{~2 EW2xp~IGy赳pWV)qc5#p%UV}LLZѬ1ji!̩rP9}L-eu{=MU7خ&/? +>TFAuB)Wp}=:ŠqN/#PByu_TG~ d{NFYMT`vLVSfB^D6lEyC3Nq`MuO:3c\J}X8g+dzf"J\T;i[nW6lh`P)d<ոpB6UqE% +vg;^b1>*3^q{RFkܦgs.Hv03>/$ٴQ7>Ҋ_!N,?$qƯ֝*7`nAk8E(U4Kq*2łAqA{8-\݃ta:O^0QkK|$d{g{vR0.T]h[=Μ%[2ZXhO'lԙbd>m+"e;&8zsp1-{ B.N=E,:/g@21I +4crHi(SKz}|*_gPkӅHqQ)"p4l!xGR<ݨm~Na[𝈰&v +&{Eɔ8WZ5;bJ)}i³:gCg D(MmdH6ۃV_6"""fTD:,R-qYIrD,:awV&LGԠW$Fu[w4e@]{e\Hd@-_GYS3–bU~N['r;$v&ě +2׺r3e#-|$GF`Wh؎ +Ár֙TJ0Mŏ1]jMPM.@mi T!̑y vmb8^Wb ȓO̥[{9jۮrah< bm몬\Fy'?"Z2h\ug̺AUZBPV#$v@9eWQ QzcTMTjyvp%G|>[W*{tP0xmOM#D`¶ ;`@hN@I 2|:^q*J2b\ySq6p + +F^}YȑXq9\a=4L 8x, r?'M3Dzu:a\~gA ]# Q9ؕ25\'Aʂd?]%xتRGU\Sis5σ +!`@<+6NQm:m/kެ:C0o$wE/{L"]\q{|}fk `xpȍo1@w^JL_P>cEDv^fclfH_^N/ 5 t =66e +mr:rj,L?Z$"du΁9~8n~9{Edž!`2R'Q%U9yiS +,#+C,%iN_8J JWԪoZGkP/7$ߞxv^_w֚菦_A1~"R anp]t֝A]W ¦1||.ѯ |-I2bU7>у+AM, 6~B,V;: ;t "/zT#*Tu q{ePE2^U2~ہ h8PXsN(/k14To_K^mh4MT׺|?X%o{h=}ιG^=r +nWNN륭 xA<((ώOX͈_:zWPdžzo2^2L?7 +DV] QXl[} =ߚӇ|2!ei4. X= +rX@Vg)(˔he_WWEgkiy=& FxO&jdGJ]Zځ>0BOÇH rJu Q||*3/Jq!^<×7{CF ߬r>w?պm`h-ЗTц>NR#) M8Z\)tJ/T/i=^p9|i#ZcJk(u8Uhђl̀H\g4 =:0|F^y{btz*»JXnOs[ѫv(ijLtyޝqR1O + w_8Wff)`ӔbZX: +[KrqZCj2G chm+\wͧӫu:"H|7PhuN/1 2bcOni%2z>zQc ql¿wa v[lh%^+-}ִNq߻%fY +VDЧxM85Å5f-q#pE:ɐ1ac~ZN Oۗ ni>P +LR2&+HǸ-FU+džb}|=6.Mp~k<>ŊPUhɆ:՚1x +|6]̙a!+1-\{-uYae̞2d?:b Ei\Y$5K=aze U.R Ȋؚ ^/cwCl-*Jq2^bUKUpG$X jvz[29I+mΊA;ˉ OL*+~ݨ3R|Yݾh-^<oT/&j+DbfFǎsJjS=&wKNys7Kۥ~Z``y +{&ܧ梗-1J "唭^׵l>Θdfc}54#1?|vM?`#e>-@*XD/>6<1RxSz\y` LQQLͣ[@D9㐈 +>[4b1X28kx8%1WD-hњxo@}\9$ |N9Cre r #5z"С92Ą9jFm 3{ɪ=IpPZ7Kjc[ߖz]8^CCֶ!iJUroi1'}m8䅹sP 2XXicx;`qD`𥥕9C# 3obVo)>[N,])]jU _ƾ5xz ^k*18*/ 稞lF% uȔm~G`z%.y3^Ww^4Spb``f1P15VTN&ժ9$>%3]4 +>:r̢⛚E roW 5bD xNO¯>ť"k05"_i\> br}ؼȵV絓Tmf[q-Af:X{%;k Mä[d^v4d&(&VwxKf0公oL6B'uw[]=U"T6-g8=O+8Mf]SFҮЗ6A=q2?#2;גU"BVl_93ao*^cg)*kwĔtٻ\O?ns/FZm$3i/9F5)+uO= f$>q:zjCLόpa`9>-9bI.m:.{ Sszl]ҲYw7&B _ŅsvLĞF&嫙Zl$ x)I}8&F ʺdS|6P?πQ`oA ?ÀcDP= ̕Lz :4^B}b(Xh5<$\t؜%~# /|4j_$1{Rޘ[֎b2jA63r1?dEw"ih0#Ok5AˬH'e1iN&a+Hd} #DߥT<MufK\*bp7-gr_UK\tVkȕ#RHŤؼ` t)|;_lV\e:4F#2Y`,9t a<؏Pn#3^)A7G)_@=EQ0{ _s:p9h]ǣ%5O""x~$1B6p"ӆmé  Iƿ5[ 2 {uS>q?(*)Vo`Y FS>iZi[6[eB#H|0ooz͚afE7!&i Ȱi=Tձp[S.Bnׅ8q̻v)dI'Pe9l;U3k'}萻t*9|ޫ^h7$Fe;/ڭ(/W\sw jvn@28z^)'MD^tT./!G!.Y(p!rWR'amA"`\'wt +YU %88K2iq8n_=7S;Nj)Bn/<_`\|#ޟXX/!֘ s . "7ΠzT`PeMf0p*OM3˞ ;fRWd-b.(?hUW??dJ|c'sV]˞2Z 6qh1<"6lG"ϕ*SaJK +n PS."k`L+,kmR~hbL\1s/.c78`%HYoi(G4@F"pz^']^$B-/4iBi ?H}D)W7p*ٰ*L '&x/BY<?X zbRuIfݥ<ϏP;k%bAmi=eƎ:!^ms^ + HzO1K%"k)Rw ;c]:,MR{ƕ)U:h%=sԽT +r:8n'TY AzId;9ffagD<*RZ1ʺu`dϓںIJ,4O~k haڕAI ǂ菐8Y(A&,]O! :=_ + މ~IY0Æu&`{x0{H28z~Cpa а[owĦ'07z$ q,@ӥREmhN9r"F#$c#s!P2.rKX׾+ZfvDݺK#q/4jrw[? +Ig'!6`;jʨFvow>Ky9>۔Lk~ j-6T``PƅUO!N^Fk6=>Z.D+R"juzyv4([ "͍'"&z?lzi_%,/N:pʓWי(zo0i6mqװ*!}Q3(G9\9p.^~pz|`tqJAҜSDyDuӵCn8}R«naŇPSϛ |AU*h&zD?DȮ [^ n9Zyes<j>h] ~x7{>d;zcZlWS>QX!UJcyY?P1-Z +[Ґ +'xtovh*ߥ:@|##ly{ +XϷ𖽶(SVz\\|⛒?Lo$ciNI\,8ۙuvm]TiOs勤 ))sP&<[cc0]J^x×3 maY+ , 0vF&T?|"{, ʬf{~\d>7LA.g]981LVl&"F ]|lRUw#g`qieEvUg Ӿx/ixxYj)6~gbQ-> xc|˭5\֎כAN">(!փgUe Ww6A5.mIJxg"#{d;am.ZvFmC6 SzSsvc}._{ IjSvE Xd`XLv} LΧе6odeSqdCk=)"1G ;?p~t).T@3O:׺ $?KI\+Ԍ +^8S){# 9Bۥ3OWPM>~$ͩӍ]r c +9%>aE abߏB[obٌg醴Q\A7jȖ%Ng`=OqҼ#LCFkR -`O4l7|ļJA_{ (anfl:\_[' -FOM +؎zyڐp3T8;*x1:vcdk)fwr~pN"ZÑm찼7CD R=;?%jlL5dsυY33vE`Í>·D5['˥&l]?Ҏ-ckC/By&Qxj^fDh]ϷVy^&0oV2Gp5r 9/[c!փ;QPZwfh; Wfr/P}ήD{ʦHy<3/OC#!EpwA Gm݅5&/Q5ӚzB2G«I|wZ}H} +Q! <.}'pPyj\eMxLxA\]NIrPxR"R ڴCj_/cզ +q3EPT+(5 +)m.x[~D+Oua#cMja\i>0] /יg9jmYMz v`(#g"k^֖spKhg|b+;wf+`0t]q38]cxva#Lŵn܎)9@ϻD:vGn0d# *_6 vޑX 4-`?gp2Eom%!1E쟼ZVfBKwqtqb0Ϲ0KMbjxn|UD:8DRK)l kQmt1K9PCd6J 0nlv /tvԡQSo|+F& Q8? "ZS13׬uPq6B`0,B՛|ɐkO>bQgŬ4Ϥ|ϩJh}Ϙ/b'o}+;IB=-@-m_qrnd"&mTs@& ه0a-`nb;uh"'-6gcAU ST R}?0$&;τc$NDD'K汸$,7K5,([\_ f +r~5!7xE aw6I$ޅxZjG/dNb!FAjHAZ5ݖSW`.V1-h> +stream +xڌP]Y +c!]{ ,==wޢ +ݫ6$J "f&@ {WFf^ + 3BBb`3$7v;dl,lN^.^ff+33 yVfyF=BjS _"v@g+Sc{%`jt j~KWWG^&&Fc;Fg Az%@tv~ P0]#@o3Z]@'̀Pp@hz`ad?9백Pcttۛ24uq7v7561@BD` *\L]]]l .prdm<}Vf濊0ssdRrrJcY]\A7`gK9/s7? , chHG|fP@Аl6Yvo]Wdfg%hGZ;GO?Njo5(#> YlΠ{SοdV'ꙣ1AC܀.m/+?VtxWԧ߹p^_6@?r- +Tda;,Nartj_VfnW?|ܺAp|Aϫ4Y׿.SкzMLB?v׉{0 LSj~aYtMmVȇ^w7K>mo߷'+w}2LT[/:iJK&dE"ɍIޣ_ҳkHܮ^-,SCz^P EI,)+! -ڹ'4Z+L"I,[kìjK7.9! $A OYg1q."} + +kfJ}K_bN@(Nr}y 3"fma4k= \tV:`g0myiuhx.<~exOT ;KݨeL´7ݚ@i %Oo}/DXur^U7+tm̠z釼p*|I;?/µd{gN'2-Ji&|Q܋X.icb]Zowf(J/TZ#Pd$a)hHX?ϭme桃yGPܦWh~dJ`nbH4Dl 5QwxdM5' +iq +E}ċp"oZY?}VCBY[$3<Ԣq'v_@7?5M}rǶZiHI2q.@bպ!ҸDP93\?6%J33؉*kMu.9z;[8UE X^68P)O|eJ(ZI89V0zݜ 0`hmY*oS/TЕ哄2֣RnL 2Y$&3&ZFYG17}<;'5|T>$1oA*qA[???i̟M\ qhw򰐵6dy^}TW)4k$tŕzo8FC?;,ᕀ2"gz[! u17VXR՟&np^M(֝It3 j0L +/esF}8qRιNClw)jSڲ+8GC4=ؒò>b:9dX5j8m>V2$covG`peG)Y),RLjɌӻ9Wx%罟-AڋX9el]P6˔ݦ޹Ek5PvxO{hc{yf +zbEcKsŚN$rfS5;,L1D0'h;x?x 29鱹ɪPѷ1|v/jw*ĂjS͋.{i @(X#gϡzAYp<]W#}_s#*izSRqgG RtUSI77R#~jj +ŏoh2''3e~PzǚK!B**Ǵ_uʁ^!#R~mW}A덽t)L4GPn$Ԟ~5lCsY_yxC4Mψ^;y]saY$.SټҷM'$i+i: N%^'.$*ǻѕdL4\ÕTɦ@j"Sn7+7E+AsI +8I x_Q*,6{<i3$WP +H&xDwFa)0$>oMW$|&dcS9щuyNe]Mx⼤R|ef0X<!ˀPs5~|U j"k.bI.f*SWEr=lP^| ڊ+5aQHQ*ZB,W|- J܉sq7훯?~ w $\ĜOˆt"KP}jQC^p(yM-zʳF=ԦY6mV뻠rYOg7)#C* i?D\uDMZ?#B}e"|>Oh[gr+{,НD^O]>`\]CҦw ܜ;db$zÐG`0j41co8Y(}4#gԻɤw֊l}8ԟLg>6UBiIԻf}n5L' 4U>-pBn";8$o`v%`T/r!ҫlDaSIZ$RVO߭F+yJa|j[$@F'eXzڻߔ#ԅgIKaʡpS(%!|ylA}]L*[=,5XG2Ϋƪ 7}кV,Z_EԀPE˱ga޼v6'ZeqMe?6.Sj~ؙSj#Z/Gq. 6˸Mp!`Y霊bx}b إ*A>5:MaزFR@<_Qď2YkV8/ʎx4MŗL|oUq nxw\dꭅ0<+BQ3Kc.+;AĕبQ'8/ʉ$k8Fv'YT +XCl2Kál/aځCʻLv +\(_5( ZvXu/_ˠ1$S?=̀KhMRm=!) 8" +r nGDUf Wu~2+iKN@CObkaE s&ORg% +g KY/@vt \Ic\IYL%_ʨ&ИOHxg lK JQL:ۃqeKmkW}2!潘1%)<l2.2dǶydpT<z\e mSKvS|< TY+hCs4Oc[2HWV /SY +q<v^s!\ a\Ȁ.`~h (O} RJl4?aclk NXcN%mQO3;|R|Ђ屢 Qvi#B5 +e78s?S>:/UG$uj.<=+^˼.ŰeCb!F׋4`F?$oEwHNXEn0" m^ +j[l85ZBv2IX lwVR+ A!6*Ǚ7TvhT۽#^O8\X7sb _ k%8 %37-Dveو:`g0).Mg^acINX\_Lh`MRcjGL\$x]ʭ*wu3!-o|[bU@+*1CE=VqEP8L+>ln(jlPrbg4`H4uk5 +\iti%Q7yxoGv,*ޱY,_.lFnxPU'Ęs+KL9^?J!F֎EMu)ysbLgu)gg=\?$0jk'ޙf]>2" +{_EFlA 7I'䙬 (tːKPH$̹g20ήRRuN+#Q㝸Ft>tG֊ GNoBZ eR=Nr@OY\#'%Mp ]K'@Up3>~p- i#ud^X5 :}DIi*7ƣM>RZeU.%mZ7gˈS"2t{_:`ЖnRw9?iF-ȥ eSݞ=H`iHc`VIm0;5A ݂[|Ezx!/wF`ed/ ZkZwF o7~hk!M9G}P&caRߛ(NiD$G};dHBf%`VVG0<ɣ>8U `E6:TtK59+6ID jekVZ(\WF:ҵj 궢lƤDL%U}KRH1s*."Ŧl 7C?d%F5* +xIMVITU1'kx%ӑ$v@CN e}Vp~4;2y<-lZ`dĭZd=#NM%iu5b@#lkE&JT e0$.a{/y+3ّ\ĻۇѝUQQsX62Hj_FR0>ͣbLo㫪A zN f$yʱ_.KCW{/mmp UU-"0aHO\-tؚ}]:;z!8I_M#sN"z!OЗپW:B_N s}ʹ&gvaxړyGPw џ +9i-ľhZs"JV%+B4Vd;yZΈ]73UE єaq7ٹK,rP¢Qd` +bL=e"#eIQ!Lky d}qdFU(_1i:3It+" 6IC5;lp\"DH+#~9aXMQOwPid5F4،=巽 jCSH'x2i$.'RIj +-϶/~LQf݇0'CSul] q))y-hH%q)w3cT͍Y6J_ڟB|;W> hulxU6=|VFrLxtݙe\V Zӏ6阓F $!SJۍoF8IaG@=1ʕ#kfKϧ8JѕDfTs0g<@&v(!=ӭԗ/uCb0ɞ1k\w= +1ݭl9,2!K_{pNU5tF5GXrd'ElD +IJ첆a'^,^5Ť!/(av\JLTeIS@Me&?c|*0 A#KF {aؾ5;nxɵԔGD1o^x_DʒE+4u(˘Pb4& u~9G{iv0oDµ݀KCId`o̥.G%ߜΗ52Iޑlh ÊD>_釣Ey4U_C8wЩŮ0,Fƣ==>&O^p-X܃{a(sKdb/xdVԏo`>VBqCGu}|S;$x>H7ȾL]r60=k]2>“K! )͚ Qt;ۨGskg`JPOU~ 2u'}6 ѥU&15`7X*ozlwԆzLjy2zIf# X٣8e r:uAY/(%sA/rԻ%1Ga#v9ħ>=xy+&Sy}(3i %<άB'0la D'>\$Mէy x?bcZ~QxُRr"3S*˟gˇ~g㟬Q 8] \+ 4ۮ&PX\i1h#`‹eN .gtg_)t8%Honq(ԴkP[0As>+LCzZ8괦`2?K{KF3%[2ˤf>Ai f+Q&|KӭyqA`Fо+Je3rkC*,s 9,1'Q̇~;9.7vLr)?EK eV|_{-HKe!{U1#ߤv4 +A`O=Fc=+9wfP.iciiMgОd*['> A_X$#{" 8߫XV dxX +Ah o +V9 *.^]+7I A90ݸ=C`n]~S,[-׀|XӤ2<lHCw$A[I"_rMm1/Z`9gMXH#䳣sU>)P8G]g#f$ G=pa{C@GZ!gJ4>!lb΂&88j4ƼIVCDpf_DIb +%br)$,tEw(Ş5ȨA7l܎!,[t?\$?rW)oaԲp;7V}8c2Ҁ!Oï⅙$)$.k-W@V!&CM?hXV^]Rh`#cY`b$*6YꤝVZ7U(k D| +[& l~ !D-d+OAscAmUvcM7,EzIΟ$fvE3&ƷO/{L O) $>^eNք\#:O#méqOUWjѴ[t;FCyy  -0.:G_CaO! !^`إݥkrmo(GrNt/7y 7):P&fuVCeS_Jllpߪ,%T^6yqsL%P7 _΢CJ|mEzaDb֧/[$BJe~ qr +2J@Qԥ)2oVu*Pbc;Vd嬗hiaVҌ,k t2;C. _\r=y eD-ޛP3([0a?D4aF(uHN YӎGahLKYHJ?#fˉ~'y4-uEpT* .l?+R~|K/z>OC b+AGWyOsuB`AMOa^hy0#[yޱ.)cVצ:(]/z<>fI0ɍ 1lv:jJhF͊3ޯ [bSGmݼ^?A ುu>) ۾ +KE$Mi"̤vJx7NyQ=y,ч5 Zw<.ݶom& !a-tS#w*yelUڗUpDW& Bȴe ӫ1+-`Md!k$a< \do0Ʃ3dKjWR%:FB͖pT+paIO߬a/-Vi9=~Ke}Z۵FW ͝J֌)C@o 6y18ПÉ7R +v~D ۗDv1! m_(m?c( +M`w\,A )_r6])(1Ggk& _h7o0 â'U)^i3a,мoF:>0_-E.sZqln&KNH"h3RˑFKj8RR.MڌOܥ6 /쫿i}!tRW=B1 +qyA|tm]C$/@fܿtH׉{:rNBT9CIol }T=NU΢KhvtzQOvٖלR|a~l5q]Y.8OWgf?C +Xֶ2@\"\58k}Do=r3 8C0jKcN6Dl! (K_i'j*ف:?Hw_}Wa][ W1`*4J{Boݳ|~.*bGu樑B%b8ϫLzϻq'@~UjC|IuUvV1!LޭwJM8a9Q~{kMBE:Y:BJ(CH 6/Ij˨uXo"+E\CGm,'C=( +q`^,N6v$(z gL$u8Qh7Dz:օ 2|*~ P.h]2r˜0ΪE[y=N?sdDY=p Ni"HrM; I',5g?ԋy ؽ$ϝCtؤT IcO%*\AчI1=Af! )ߐ| 7RnO5 $~zN(>(-O@ę6 5+eH$DDb/ɫꧼ‷s]a` k&?V$x~n vRX#45Mq8e@!v|Pn+Ñ ;mذJ蕟Ie? 8VfS,'EU~PГKRH_s"$)@81빡`$]͚T4BwL,;EE!+/`DG^-ܤp,uuO6ƚH㢭opc8Bd:"3}&KΔRb|,1anڕ*,uGz"@\%KԎrpI|OQ!?N#b{4(4{J4 }/yrBd& E [-ܫ0}P>˻N20+>l3'F IL۲q!x[.J7ep򬉈(qtw=uHS|CŧAX!Ґg`9t~=#93{Ho*- s&.Lxx$+>qg}S KJ-$mb&\#I;FJJɊkzc{D +q01X%UBY/Ɋ=k2 +Ky9j7\.@&CkDQ@j.1b>ⲫ){nȻi,A&&ۥFd^ѲZ~ޜȁؽara@W""[+}! +R{Ar.:y{#(3X&$/8<**B͉rxE󶉓^iqlC&?V4}JӺEǯXصh (k%섡VW .ѣSRloWY➠#Q`0u>s2`Fe_uJ@6uےi{@-:X#>n;<7"3\ #nS9h%v.{AGF^u?# ]zͯ(RTN8 YqƾCK=Ue( OWu0GCCb5E +W +>QޣX?SyYas=̤h+ډ$9aؤdQlKT$>G/͐γ2yMRVZ8MzcƐu=qkryu/VIJTNhkmpSŤts'c0%{nᑺGR}#S!>ϒ2 gRGgI}=;lZM#zi26 ^cA8z5 0=غ>6Wj zHKCB~K#ͦ`C)}a̍##C-Hд;@\vmf}W)zXbP&L,myee@9?,y=%c0`h$NgڕB϶n1I?a ʢDŽǢvri˶ o8dkO*u|F _D?b9.-1 <Ӵ{JLN8 \[0w@G~ l /i>36s06o2 +l |m6!5kqtb!c(諨4tЁ~~}N!_ސD;8h#},K ڑѓ{q$u5اHDCQWϵ֒Mlvm)-?s/}"%jNwFpZ-vsz)Ɯ?si&y;ܘLLOۜ7H]V$*=xQt`|8cEoBӦQh_hj\\aqZiRB$/+^|oUnv}%PMT yKJ!z[z!eN۞}ך-]۪)VJXyW]jH01e8?~Gs\ooYt[Q$W:gݥܯp4/|SS0_!/r[)zu6. E/+im#3dѵ'dCZm X:ˤ9+Lg޺DsE+xrn#~.ml>RDΦ| ePGQ.5s?c݀ѥ2Q«&*GK lN^,F{*X[8M,i-(S[0{; Fhy_*lϗ0ΰ8CO!\Lg\κk>m ɔr^h]n1ԣٛ;7gEH}\*=p$ h7͂O!BjC55 C'cވMjr$I se>ɋ/JŒd4n{CbTEgtVDZN.&Y'd v=#bΔ=mΊǤvG. 3G?j,.&u`r,wcHSf&k4@./JwBփ=[Xm?3XkO\5.[֚2'>u*M\ʛ<85t(އz@hт^jWS!cH g,-n$KHko?8P<>ETۖ@3%tqW47Z/%˿|ʷYnHg1=41(_a3r+])Md/$jR[\PX|7dAm U`y"[M-E2+} hN> oUd2[X*k@}T(uYp:_MDqXbת'iL'y90NKsyA;T\ʫh:wUJ#g÷{b>Itc4UNB6!xgkW.s9Q05C3;άF{VI4R Ke)Z̒Ar6sgvWvؙ=V%E0mnX+\ Σ +񎌢U d_ٲI*FEeZ;0unsohYxiɻO+ezEFe$?A k"r@ǬQQP}FhBH!R(5l$[Ǒf;ol{)C)>N(~J88垆'v+Pc'&ItÁٓcuB Kw^% 1xLInä_?=#V+ܐL{:㯅?bN*)o!4C4 D`i?}klVl7] +7~8PoϹM_[֝nDFj{{hs+]5u5$Ӆ vClV6zahR!Sč+†{E̷h@`73B}P*#)[:xK7V]Ҟ{նPb.j1CzHAJ 67bΟaus}9EmB(6○#`@fUs1]gP!Kj@"Cmh`}m2я 'U8.ԣ| m1NIqupF<y:V!K5bjDe^e S]ͱ IH1xrNIT]wt#*ⶱUY^ azZڞxߥ! g!Bp"7flGT}3ȞIs43m˜o cbP˻u[&rσ #m~~3?Ar M]i Fˇd-lHa v_/x1P{C\K?+Z +-קH3b9[ZT%$]Lvoͭ-~`^ _ȻYjѤ#*bdCVޏhlFO?S(8%FVo2]G"ů: s|f!ogtiF -P9o4l?Bj=AXrkL%:9*(ARG~'t(eMrd(ڶz~%u9X2.2 +)YE,=[ ?Xxjb⼾ +Z[d=/} +SyHs|ԓ=n%fm 5E~<F9\HC#(h'g|ȍeD$b !g ꠸}gx="s㿐$џ-ZmZbn3x|%*]l{e dl7m F m) ?`B2Ev9|YS'7cLDad*!*u wrQqYQ-9E|]~/9 -&8-Uը{*5 `Hdzwi5,=W vP 'Gu{BsIfs]4gD5K}|3.wmA'/q˃@iy>.A@'+HiX#>sR"Zيi-VhSW]0ܚ@BrvUAB%vgĹ:$ R` ae<َ,7]=oشvC C!J[uU+ί! Wb!cꍇCA܍I7F@CBJ5Y,U]< %FaZE{.=TR^Qȝg;EYߺЋXz:l QxYm@9è 4U;W 0mf`zx֜.kv7L2N-?_3)MBʌ*-6]DNPM9~c@kWf&HS}K~^g&-:L&{Ԣ32lGS @`T/%݁m8$Ac}.OZRՊ\7|(bJR㐩~ͺҁG:8 +%T\q7,:M %AVM~J5@i.P uw;0U8F?8Ni(hu.(n*(DMѰH=\]Ǵ?yF7,TyÕcLXPO l4c%{u>E;nt}Oj F G?// 7q;ʅy,SLcɽ [|v))`7iZi0p,5'P AВN1슏W4oC +yA`BtDteZ?ӷl@L Wk+a5v,b^]d|WJ>e8ulIG;!*p>=cD_m+mRFZ=eg;N'G.. +mpEE |E[$Q!z +QӬu*[cvFS>R9>-bO-7UH 5.aH<ΖM fW'ݭ.XhXd/sE̬kxlAnAL2GLZ[drY}=vlƕ]GTGi.O tWs)"lQ@kj JSFhJvj&lF~{d*/$=j߽ RZ3.R-O!\}4XBbIe/k$BuHb>s(6"E㉈gq=#J"UJnA+ũK QS<D X )}7T0-.ϕ-Pw_'ݽiy]Ƀ ĿEb> îG~6(JTIZbgBp,]Y*YMC KF\g" y@O[B9vrs3˙PHEhm?@͢R}TI΁롽Cc(2⾷-&=[+ܤ- + +QCh.gڮWH%Lk(!]$N@vQ4ʥY9yYqsaMgQ01W2?uG*m]%AwQ] R!}:=37Cc.Zf7mu/ATM: ْpi.r9䜏[\PF>IaW䈕Pm_Z\PME߈9f +.=mgr-[kIP53wE;񎠤z5i3 (ҳx >=D[OO{i(#cJag8O>w\lO(E EZ*B9b J 'Jy\޾ ͐yϙjNǛf PDwzNk+Or+U NŎĢ<zݿQMv6GP zɁ7$D-P"iq8S  UZ}].xuض: .By$ \cfxAAkϢ^X1+j52" }QtqD$AY& ™yUy*Ie%S ˁs'}"xIn-=âH4|&p6ԟY#dӲDkzRV}2+WmEˤ#ڱ$(MnQvGU3mEKkv U?<ъZ㳲jlsʡ*Iw#?Sjk=m<.OOQ5W#tTfM#4GEU ~#&7Aze!?kMۦtKrέ$(L0Mb{ 6BfIJ9d9%ة$yPwp#u9E+2Jpgaܟl#[^dwP6O/Ki>1ޮ譖x&66`Auh?ׂ M~Q53~IZX7 tH0-ok̜͚@ԟb2OH) zǁ1 xg 3.@ G+ܴ&ur\R'VXgrCKLQ]QSa1 P3OsVɰsKM;w]wu hR +D`-%V6n )~K!;LVޟ n8*̨/@3o5¦ΫNVڂC#˚~'BI 4b܎g(h3nJ&?H&<':j.` ,~L5N[X i%β1Poa,2hddvܭ]h P0$x^G{!1)S!0p|os>ޭұڻD_Z= 9K(1FI4K[$yBC uӃlnB3J  'aߋfTn`sLZUU7 +mi֣x˷[V&6)PD"L'"vo$ϪuWR/0f 1ö`Y߆R:7LdiZmKZ .C})pڒ)iH3NP{ut"ǟ0$Az+u>īt%Gna>P՗>"Bb6!.+^l2Hs$ڕ@IQ'`br.+РYm]VRޅ&()!8fONg&L+V݀Eڊ8YCF6.8XF 1T즲) 37WU˝⅞h'w3^%AX׎k#ajz'S`]Xi)$7]mAw[韕SeZhx~GAMbBo7(191bi,?nR5Ye<=TG4CImkH H<>=-z{yr1}E,m䬥-]'.sY7D @)j)k.%Sow^ o qE=m +P.35> +stream +xڌPҀNp!Afp[NpwCd{a^{ 5R refgaH(iʱ8Y85#Qk[: XH8[$M] = C3?@hPbȃA.H`G/g[|Йxv9X:MA%SWK 9B ڸ:zxx:@W௖ʦnitBlal x-A.o.n Kg[v"@/c0}8v_M / `H+z2LAڻMMfon +Su\̝.,.@zd+1K,$ W:[/ ڰpsd,$m&B#tpr,6%r[?G# K??$SwK?KH +BMli/~g'7÷ }ŬnJqq'`g}8=tTQdO#  =3(@g ظ>?/.f(+v[O/oJ _S-j\MvD d6\,l\]@Ws.-=d +vy۽-.oWm7l +rp:;z!Mq|vo.V`g.=7U/ѿ=UX%K<V? `C\V?EEQCV?`U/XU[>?OCo=h|:%72Co[v[̷_jdZ +ڷomzc&!5b| o:)-:ۏ?v[.E7Cxo؛-?֊?[^ڽs7gdiii6 i#`ޛBBٕ"pW ̏ZuyQlfgŏke;)pSK߄da{ڢ>q%:Gty #HRu[is +Oj2: +*C,JVlnSBt8D>m`{{p Ftxpy(W{Binc]U{G:3q J, ًh9u١MTh8MDfF ]%"5 9izeg~Ա|PUI0tIΚK+djRո>c8d PȎno4ZUއ&LMyHzD]@~d\:N:zQ{B0g^d2Կ]kHh +\RgzѶ%C@\:7we!컚1{n! 7| TbuJU;n\7md*Z~}HFW]Y5URN3R^:Wex#_ + K&M0!I+wSj)'JX0/wPeHPJ~̝P '\yZ0K3Pguz-/EIOG5yNȠ%HeTh%@X2`Jƣ;4 /;ܥ|m[,HghSYU(Nb9Mӹ$t~}[Kȧ3K +=R͓\sʆMe$5۩Jd&cx +E F1$S E W;*'#;_$ۓ%8SKJ|.4MCVBHIsLm//\@ +DE\L0i1[z>D1"Δ1ǝau7{^ QOnEcV/)`H.qZlv_ZYQe^ ,FX3__獬Cd +flX$VFg,w1r{9&$ (˼JEʪW\!\$C]H柜 4W]}QY6HJ "w<u}w-Hx~҅P"2eQ.L|CF4MCA(zx`@8﷌Ǫlhulou = _ &հr4pJYR,Q>`{׷&źeNk4?Zsc٠}Kr On.8@gj0m.L}dȋWU}IJ\ǦbiPGn){OI_ + ?UlU4\jnC +_<:A]7` Tz&T 2x=|ޓE^]T5?X7Vp{|chTN%~WH;`!"r;W"&aʻK1*Vc4KsɨթGymKs'9d4:!I1KN(4ϿJ~h4Ry&[9kSV7̪`QU"S}C@,w~F,w%v]eZ +cҁAtqcVPeWñ(CjWh-HUji]x se'rj0TK'PQv|x5μtS7`~qйF-;ۇΌ1%lݟ"MQֻg -ӏykԣ-t3ݚ"i,ب0, M@Ӱ/&BxUVHuR2axrnR`i"k9؆wW2z}AT?_/w;xmlI{v,w'սh(wkit[۹;${~Mϙs.A^8ܐ;cIdRSu+ +AdJ+c-pOMPS]#369g Yv h->ӲCb*u~%tĹ[Wʀꪫ@H~4VR8 >3ꀞoaiҌoǽzsH5N{o3~ͼ4 H&Uc>dj + v̉oWFA +Zrޭ%_w\q!hKӤ24fhӲ]sAº\aD4[Z#Nqv fg~Nmƪ림 G?թnpo aD#^gLJ_F_lNiqh5{w3Cpe '00>n *Y7&mUvk߼ S_ vLװpxFek*H>qp7LQt)NwtOzݴ^ڶMn+&ޖy)϶IY + ƏFxD z +y 43P9Lz_xGMwE,f'O.iӡptz$9\;l8?=`J!e56mEM(b,tY?R,lߞJZݑonF%}G:OB_"Nj6hWlMz_/vyglAԓ}HyD]:Ça;qxNŽݹ\04^u6+cg>yuS[Yޠ!/A4:\/>a#1^^!]ለ\Qa1wԤxm;!{wSP#u}>g%44r85t;4Zbѧs TÒ~ (2O,}`,#)59]@+ zF\IؒC.ƞΈ=~a1P&r kHzf fpG9m<ד2MܩCo˅[us!k{Y*~4MLeLVZWWѧI7bnhx|'jf,5E0pV߇FB]1nrDv#J3A!UvV".+C{ +[] +]$T#ߗk5Q{~G S~煴YHM3VZTj^'-*L\5{ꊁ5mX:CP1p|}Oq8f˼Hy&N8AV]Bl\]kxwZ&{F-;`h`B'5=ɡ?2S,FCXV,Pf="נQtB1(w3MWޓfsx.糋3@ٶb+vonCKA)B";K ˀo&`}p/>7UJ|TmeW4aXOTkAbGw͐õP`X-D, +šp1NWEAL^\.ŐYx +H1ntMOK4_߷ a1I]zZ? (Je]']xum;e) ,&zDxf'xI\HFMwW"7 $`$&f*i_t|ٕ7k^vKEЕ}4XJ \= :qTԱ 8*֢zܻɌ3|-ߛFaxE=ET0sJM\n;=UyN`Ȉ˪g*ڙ}q!ا@f6׀}I @v27/$?9킎 Dgx3`s#BdkQ7ۍ8(&fێ$0:?`^rޙZ11ikԴXHg =,s"R8$5+[dGVL*qIv,`ؒ,n8c<쿅O P5!b0G=R>Mqw)8RMZT=mpjoc;԰G /9_0uZ1&O*ޑsZ>KaDŽ;fypJ?gҘ$&ާл㊥HC7Cnb,H @]5K׍|*hӈ lZ"_8U4FMGDoY*EYS?%$([GmqCݙcEE~a: cEVi>Ǫ\NX7Aubή,* 8yJLPٯNө1woіCI9uTc"z=섄>X/zUhi/%%38]{B#|5ur +sV,AZkvzFdXxf.Dһa2B)O.ܦ+l# Q?vBr #,2ւ4 3b=It1]@A)fmD +Vm#7Ps!DktyZnYjwJ!QeB}26Hs*}b FV$b.^|F+^:꽵]) =ݧ%V(sѶ9 +*UŭяyvTxi&j:@e;ѐ@x^?v88Hœ_.G_d~ xy99+evMYtB|NSM.%]~~u?)Gd ]MR(ԀS n-r@ =cxn*^~6!84H>B5(*Pk DƎpZɴv,XEsĝ.q9pF )X2ck I$rR}ό2NS&紝K ?;QJԴ)a˖#`!Mtxc?[V׻7Sƕ ʶ7lLBuJu[kDj8D\]'.*>P-US<ޝcZ/IӰquGQ{M1#[JW=s~Z5PhFeffE/psهe.Me7Bׯӯ4L뉴RRR6ż_̍rl~D~lOOD`9~ԫŕGg\c1>B?XY;= h S_2le3JS!8@:lVJ?8a>#}gr>f,xj>3XOYMy,Bg_umAؙ@;S"i,/,tj?z`vi,1YNJOG!V+{ե2l*-"d;> B>WBfFIwJ7xma&,ILGI]6,2eLhxC¼WjJ3ߌC%ꌕ5גPեyYBDGEGL +鸑aVŗeČN-ǹ{ +&DHD&e90^})euή 'gO^\$_>?Uoh +mC!c`́)B (3Sjc$| Grf񲳙0Ɵ}3[ 2 eYaJLT k'ùs U[fKYs58B:۲0"79qwGŏP +#9S}/c @d+;{50tߔ=r9Hމ}˳F uWPCߚo0acWVDU@_ 3ma' +.IQ0fp ?5޻a +;g`pFh_mW[1"lӉڱk"<7d'pQ%d9RL*Ǎ+IoK9r}xp n XBemF4-Q~iAG>_o^_.06H$ /P,h1e=|%8F戁s +w̌{#ZB)egeGEEʁ^?BS 1 }eTHa046[A##\w/ +[=v\PG(6;+3r/'3^#MfIdfRl+XB R=H.P c5-3"s +e%hR;;ey,yH+?8d*va͐p#̰P^+WE\)hzu6JW擫cM=J|b,)U$Q )N8GwAD4 *1!b M=eM;/ ̧,9X\S~D fkop .C1n ݚ=B.BA#It8W)-4 + TD$ZIK*󸉐B֧8 }Zfkoο(uEvac5[25nzN#@D}!)v$Xfw|/lnNI0|h^KbࣁuZ6yJy<.Zx6TR4w W)/Վܟ*9-~"|"N4[qtbȶ0|L@+ٽI2 *Cm[b lUaC`iJ>Q_v^g{Cc~s,gJ| h)grgN ŋn,s Zl09,?rhڣ! ϊ{R6M65GX%C~2L۞ %NϟNIf?#: [i6O) aa$$׾\BGS [׽BI9ACQ@GʆO_CwE@9BLjH&$5=uZv+/6!]mezThp0r$uwG# G\ic ϰ/Qƍ+/tz>zF^jb(ɔG*I3_)@)@[ؕofٲD:w 8npess݄{ olf%|U!UJjӣs8su z9PlMJ'$؀$iծnE003+~Xo45*[S#zA + +,'0jpOK5ާ;ҐƓ:Hj#GIؽO)xy O^s=ZD|< NȠv]|[s~Mh;:E -͟k6TofmȨ;9^/eYHɐbٶ)‏k.P^3՜D!=w>aBvJG;bbYnzV/e$rY-Ҍ(zwbK|Yev(muBqQ)?[# }Qp^VF$O~E F(+Ys#PIL~Dޘf +"Aoq+ʑ M4̆tᇟ*}=:]5p*~tE@}<#E[/pePDzSSp#^waB29МtKz{@ﶪ}cB:kԶǮh%M'rx9%nxôXxu+=M{i1J3 NArfX tšâ)\6iۧ܊`\i<W(`,UX? *jF_f/`{[cS3 'KAE'1r,K%5nQC&ngѪg"e]V+9+C2BߵE_Mj`Bz6GJ 6_NͧneWxb;zW^ʹ]XЄDR4VnQxѷ,Q ڱbkT&o/Pn&g+׃ÿlCS۝%J7}@(v1<#,϶iQit7mx#rS*WpvGb+gSB'v_vOͳHKSb*$u}Yc$ pڌg R]p/7 Kl*t6ߏՌ?5 +mL*yi-` .j+'zj!ar`$f-erw >73sj0$` kśQJZiE:v =c +SXZ3}.MQOZtwݻiZׂnTG/0:4O~fl#{(+tW՛\Au$ +:o"3P4 ܨob=(]ٖߘ:$VCt?2 +k7;UYGbWj|/,ſh 0CiO@1DPÄ2 UeCABJxCg|@ХK}X,]h{?ė޸(MZB5뛴pe6?y{{MF`A~{xEz?)+vH+neʑ:{'偹$m85Io?I4#:ؗ &+vz׻ 669"5;ZdRe$|ۊ#is[ +Ql_EwQt&8l-Nh.3V1۸c"ُZZ%裱‚]ֵ豗Oί]Vi*&P 8cMIrlPF9XYC^F?JlV?5"_>0$* q:Vv  [%-YzSO:F)xsPEa7{vZhfz#ſߝyjQP $[m `|Be =bk>*zK;.|O9jN(Xqp)Ϛmq1 \adN*aNxߌNrC\ӻ4lRK9 tw Q Ok%c? @NeBUDp1(RvC;_VpwKb7ڤSDbZez6N'f4~F_ftӜ0%%@F!y.JLɣΧ%~z시3FwwtƏj^gR'[DZi{^?ps,4`ڄ֛8(%qh2zR5ѡ8_՞aH}ub<#fR("1QZwXL̘<%oK +f@ KIk͌X]~ 1a¯B6$΂ {eET I_}D ̵L3[`_b_RdJ =EAdv܏x&zk{ΰi4.F$֮U@}54ί!y#,S})fMONZ +VF:$^qxzEi# L:0/Qt."!f氛!%h;ױfV r҅h/QH2Ù/5,nW<_ɉdkV]e0WJ|10фS[W_=꽹 ЮSb7_Ҫ4Q)UmȼA8j4GN3xĿZ /wA*G /KPnn1&g.q*$0ݾceí:^ {&V3B0qV܂'WTpl f5^ac߸>%WZR1)%I"Me}Bɥ~!?K@PAky VF0r:;A + &UrٵrI؃@9))IQGVs3e}p;s|sLwT1Ǝ3Ӂ eg!AqK(cT$јK(-<)#*ޞrwh{BTGĽ)]V7V5F Q_`·z`D <%'`茶~:yߊ|Z^N/vگY02zev(ۼrF gWS/ʨZxQ-O) d}A*iKǜ?js*>xXf{eu|pN"&yՌZ:[' ѠGf낎_|*Q )&1/ Klj~I JS4x]uhj9:okW>|])(OvlN98RYc 5 )f{Aȶw(x`RJ+ &)`~o]hfή:8NuryQbkUL&D{x\-)#^֑gxAڱŠJZĕwkǐ:rO6"ns'ajq_3r7=C[g^!`AQsYvR{NT琼Q3.[2 ͅ?\Hu5Թn#@keAREeeΦfR2dW\xyT>v=)I:.mxl,u:k1<ȤW \6K^XWi<.'>Hւx԰렼?MWQVX{^gr3Vg(즈5lq +j%` 9rP#ZVI– d ?QO!j#/ª^tQᜆAV 0 w(X6ӈ\{ܭ'\HTYVۓ޷P."!5sm{0(;Z2fR-I\'2V&Dē^b3sW(9TakKŦh݈ oZI4xTn#rNG'swT`5!؝NA˺3dv3fdTdZ m{įCr.%Y5R"=^{ ׈_m~.pw s?ܵ$: _mc7.Syz;kq\̂q\K|n'fڮIp:R~nLY̻`F[NqTs1smӖD}Edw9Y֫Y\ [EQckACtg?%S`CYlo V$͖&n4 +<+IL;1E> +endobj +971 0 obj +<< +/Title +/A 1014 0 R +/Parent 926 0 R +/Next 972 0 R +>> +endobj +972 0 obj +<< +/Title +/A 1015 0 R +/Parent 926 0 R +/Prev 971 0 R +>> +endobj +973 0 obj +<< +/S /GoTo +/D (section.19) +>> +endobj +974 0 obj +<< +/S /GoTo +/D (section.22) +>> +endobj +975 0 obj +<< +/Title +/A 1016 0 R +/Parent 777 0 R +/Prev 931 0 R +/Next 932 0 R +>> +endobj +976 0 obj +<< +/S /GoTo +/D (section.30) +>> +endobj +977 0 obj +<< +/S /GoTo +/D (section.34) +>> +endobj +978 0 obj +<< +/S /GoTo +/D (section.61) +>> +endobj +979 0 obj +<< +/Title +/A 1017 0 R +/Parent 936 0 R +/Next 1018 0 R +>> +endobj +980 0 obj +<< +/Title +/A 1019 0 R +/Parent 936 0 R +/Prev 1018 0 R +/First 1020 0 R +/Last 1020 0 R +/Count -1 +>> +endobj +981 0 obj +<< +/Length 2107 +/Filter /FlateDecode +>> +stream +x}˒60$*]oMj+q2$!1_ ) ''4F_@蝼QEaPE=̽,WA;hRO_|$ <k'ov}I?EL$ UC"T +v??"@^ĚfEag>} ,ꅁ*rJdA)kq.qPheIIʢqʛxnxZvvL Cai$Ùj=0v:-?IXv8_ȹ*0i!ǚw*m72Pw BIB!{kVR0/GƏj`t5u> 4nxC{Ql8N$6XYQ.Y2JaCȼMҴ߃'uMj9Ƭ4ߍ[-@:Y1n!䯺XUKiPlG =ұtHHʩ cߍKa)©hTm9&D"ISNpmU^EG|'o@^[S[>%Z5KFZ_ ׊r32c7ƕ!$-+4 +#\(Gb u6oGQAV:΁@%Fq pڠ-?nL`"}BuP91wTω;Yt&_T&Xy.zE1|P&8(1pN8йl񌡾c.걂(PNhd!+rA),ss\#@F RO"l)ɮGJV)؛SFyAFJNKi-a@TTyRD.{RKGhwaUȚC+>p430')tnJ)쳛|G& +D53Mƀԛ NBlaALĽ,ڗ Ʊ4Q_ +T÷L fl+7<f[|  ]?Ka/Z.}RvZY`_m g8͢#6D"K0B0!"# Pu/xg]9[Ʈ.w[#Y.aqRp +b$K<3ybnxȣt,0USAYin"8b.Ε' w`gd_*!["xs8i`u[A\^> <)#yB0 4R/.=lFٍ+bdP`9$ ˱w웷c?fFJ}kMt"R@c.z>FSܹD"Ud6Crhc^, vZuE:4r79qk'O0iͧ4xxZޛbkʾGq߃-wŽa}"B -UXV MԾݔV{O8qeE9mLSC׌Nߨ*?~wzĞJ.q*=Wg<% +endstream +endobj +982 0 obj +<< +/Font << +/F15 770 0 R +/F39 771 0 R +/F17 408 0 R +/F24 943 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +983 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [286.368 140.071 310.785 151.761] +/A << +/S /GoTo +/D (subsection.105) +>> +>> +endobj +984 0 obj +<< +/Length 1973 +/Filter /FlateDecode +>> +stream +xڭZr+qU!ě.q2d;Uw1ɂ#(!qxhA YKO7߿<R#4D m1OC٭֔T_Αsh'M?t+Ӣj U~0#Ouy"O͠L!It7:[KB fn7ʒ-|=UylЮdw QBP$RBd pjƞ  X&C"7Șќ&c$)1UMȸ %N覔 vfEPy(U1&(RqL`BS~i+nTCE pl 2BbXSl-H28`;Z3WMK Kxv ڠT)$G >9z%C8ɈzCF(b&D+dd-1a$ca&+Kakӟ3ڔ p' I5j=~GZk1 v)`d`g'gXqu^mrc8a>@7^ݱZ[ vc 녊f T Ẅ^(b4dr(x\.W:|uk`EGX-]'^-8o6fȌ$ +6D |xX2-e*dOnPn-n7)-qvDwllph Ѱl_uFSƩ)_h|?O_IE20/js 08ncNzl7Q% pdNeXqb.3ik#9"j|=ç'&8C(1+7dX1آfŒh Q[cp$gPaՖL73B13荠փwMnj%A "`3X\X7p&^|!L@voQz/aQv]*^-Cȅ\o*xy.쭼z[&_"Ϝu=Q;ό=K1 +ם}Όп@B׉þt쏵c`M>՞AO}y[G+A+~^\t[mRvV1s˶3bfhZJ!4i + J!ڽ5VfaT_n g(°`+-=ݡh6NSX%w,Ulհ7>2H${ëAC?ڋ3`U@vq{|\ɲn}Eydj^ou4Ẅ́Y7<}YTݫQt2, Ȉj^,S޾~ffY)qw>'#iQrd}'@.gv6k$t=ex6 CDmj{W UkvusnO urU]Z9w~%(j7v_lOҧv^qKzgs_L{-tJ٭^9[æ ɶj`ShٕJZN/϶6.ڻ^z}D[tbGy-mc¨p~-d4p0z{۱{>\lYf{PQfdu'uRzzqE[PE 1`Fᾭ6݄zȨש{O{ t&^6uYteڻXiۨOƵ-Ѿ,E2Ue23D"b\lfʚ3拓?.?+[&sh@v MuA> +/ProcSet [/PDF /Text] +>> +endobj +986 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [136.575 461.364 152.507 473.054] +/A << +/S /GoTo +/D (table.caption.120) +>> +>> +endobj +987 0 obj +<< +/Type /Annot +/Subtype /Link +/Border [0 0 0] +/H /I +/C [1 0 0] +/Rect [174.507 461.364 190.439 473.054] +/A << +/S /GoTo +/D (table.caption.121) +>> +>> +endobj +988 0 obj +<< +/Length 1655 +/Filter /FlateDecode +>> +stream +xڅWM6 WxzoNx7II}Yi,}'vgЩvUETmzMova_e0M83^C|X}R$:v]E/[qdi䴗^T4"h31!L"M" !4{ޙQ #pSs3D6cY g;2άQ_d>1 ǒܫ F Q3-4 a+;L+,sKlm&;Eϋ#l1a:y`;Q95[I\ud+9E#*5N dL+BZ&JgA^F{L@PEG/abElřd4{\7lz`qɰʇ @Ɍw"zK2RmABG +abX~i[t=觡Y^734'B4Ɣq$Q|f> ݗCbEH\"3dg56$b8-v Nv|I*'q8HY kN"DWfٜ[Mw+7}5K P- "$w^YCRDrhp9=<ݞ$sà 5*y^NpI&|*z71{[~|4~=?^FyM9(yt\M(LTeinfdw⢘gѤ714+Еƣ}2yCU^DL#,*j߼`{sO.kqSu/snuʵCb- +{Zz`/4t(6仅J:y"GtoaЙS'dUo#mK qbVY/=Z: >AVdeCloV$Cff_\_Sk˿+/ F D//.B}ZtVVbKt-dRoe_o>7&fd=k&x?r(@<Bb o~8Ì^؇:l~ٵ'\>vs7ۃB.ˀ;"+ I5w.m0ͼk߉qX~reQ3HЂtL<U6y+o,_?<|d3__Zj +endstream +endobj +989 0 obj +<< +/Font << +/F17 408 0 R +/F15 770 0 R +>> +/ProcSet [/PDF /Text] +>> +endobj +990 0 obj +<< +/Length 1489 +/Filter /FlateDecode +>> +stream +xڕWKo8WHˇ(JAM&AnijhI#!$`{(jffwWo>p=1թ͌t(Nf슼˯]^kSm撓ŧ[ X,J:W|v)|9)٘z5$9'f.4ΣI%/lsgl5Y}J&]Dr[9ۂl̞GHI%S?bcO*Ŵ5-CgcrR0-7ѯ;&S*a%S [tE2i`TlzH`1@Oh#Wb#Ld\|yIٶ4`-"j$!][-&X\%dXk OM!"tkp!Qm6N<8=!sݵO/R֜mI9OLŘkNqrG\ Dcϵq:Q0 iLcJ4Ū 8 ֹBtm e^+ivIe,D9\n ! -QBј1&  !е:54ة򉵓n.qe $^œ63eI2rAZٺ!4c˛ YDfB0 $cnySk7ˋtE,o7tk|lJQKT,AFQ|:>:X2Tqeֶ?%Nɴpԭ}A$/iڔn5WCez4 eY`$Cmk,}z +rv;5:4M7A\@XAuX;40Jp +{er ndLy!Ӷ9v+Ɠen mAe P{ +kDPo;H*L uzܖai-M9mmƾCE_ +H&20;I׵fRD.4L_V5xuN$N0gN)ri: ^ e1O%Vx"mq0৬`?WVm6 1 o_"ejgJԾGL_"NI>1wzr~ȩ Z)U<;6|>~ \#ƕA[}: 3^k?6b'd2I`7V[;~hɈ!45XO4r, 8R>^ƅy.-H-*چnZߨ¼ˠ?GsRuh> +/ProcSet [/PDF /Text] +>> +endobj +992 0 obj +<< +/Type /FontDescriptor +/FontName /XPJKDB+CMMI10 +/Flags 4 +/FontBBox [-32 -250 1048 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 72 +/XHeight 431 +/CharSet (/B/C/F/O/P/Q/S/U/comma/d/e/f/i/k/m/n/o/p/period/q/r/s/t/v/x/y) +/FontFile 1021 0 R +>> +endobj +993 0 obj +<< +/Type /FontDescriptor +/FontName /DBCZPB+CMSY10 +/Flags 4 +/FontBBox [-29 -960 1116 775] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 40 +/XHeight 431 +/CharSet (/approxequal/arrowleft/bar/braceleft/braceright/bullet/element/existential/greatermuch/logicaland/minus/multiply/negationslash/openbullet/union) +/FontFile 1022 0 R +>> +endobj +994 0 obj +<< +/Type /FontDescriptor +/FontName /ZRYVWR+CMCSC10 +/Flags 4 +/FontBBox [14 -250 1077 750] +/Ascent 514 +/CapHeight 683 +/Descent 0 +/ItalicAngle 0 +/StemV 72 +/XHeight 431 +/CharSet (/A/C/F/I/M/N/R/S/T/U/a/b/c/colon/d/e/f/five/four/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/q/r/s/six/t/three/two/u/v/w/y) +/FontFile 1023 0 R +>> +endobj +995 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 107 +/Height 105 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 46 +/Filter /FlateDecode +>> +stream +x! x2 +endstream +endobj +996 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 229 +/Height 162 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 6588 +/Filter /FlateDecode +>> +stream +xZyeeu}wy[w^g`fpdPḚ7F\HJ*&B)EXITJ*(DS!˜X, FcKc0 t[oF+V=s@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ýpPJћG@+kNfKyP%-U-E+ +s;7{*}MiseYTmeA_PV8za,(Jf@^0w.8_,2:(yFtt-ۨaMνkD΍ Oz%h?w: ~ +I^ +Ed:`Xn+d+EZ9hdACfWlk7]9}_1zacyh',NR9ZY7dRVK)/73vh-tas.,_*lmcmߎwùYO,[g(wo)2:`}dYnFQ6 +}s.(i51y%Yc~z)J&9C!+#AtbJۛRC4S2KjQj3>Θ6ĕ LFX0N 5 @߸Ko.G0ӯ>o,,\{=܍E +"dvcއlVtI"M7B{, &LaO +N҇v[duUZ#۴*enʑU`&zg64 0>ΞPjgH{\WsY>s.x6=IESfYg,;HDwх_z ™+ڱq'DIMs2+f{hXf[ ԄRҩ!bXViײ4P:]tE5W)F4/YٺZF ]*{{2NƩ%4:7*wz4,:׼GN߇1QT-mEnW)LWGB\6kyHZZ2$l$&1&.:?c1Qp1 t'.ߢ16T!ˎvS4_,&`'F2Ʊ%S!\"I8('J`cli:O'Nt.IAj.;5Y8';*-@7uW6B,]UrYei#eNj=<%;huZ +VU1w1 +)'b, ( +p̯$Ĥ&ɘ=y`ٸ k4 6&hXgHG ]:o/5NSia6׆.4hŖ,6RCUN!M1@KRg. +Wu)Ml?fV^:ddR,*8%ԧ 0BeLSU['P'=F_z_V>z+^ D[t/v7f͢XXf1Q{|Ԩ旵%cgВmұoM[>䦟c\uEs[r\X[3ހ?T ZSJ+8^).~.=5P^z9x8W5WȻތѧ$z~X`-ٍWsz- +7WxMFOu\j&|ˋ_a~h9,iB4"݌Pie(]]zt'`te@5Uಊ:q;IspE⨲ɺMW ĝ3 V)bS*BA$Ft^" CMzJ  +_a~jQL?^l$2"Tzq'3cCX=Aa[Qnp£\ac_4'aRtL5cXHRG.=okXoP bK7CӑnnL9׃(˟lj߇oE򵯠\[qj +ͦؓauS3c>iԤ Ұ<6g9ojꓕ%"Yce/~lv^96LR \ #0˄:{Ky|!y(FPt8 4.4~g]޽{ZCDPs١k5}8 +p]í'yEuTѥ@_#벰zquD[d[F\^o5Z˵ U;l)|k'ɑE4ɦ=F8yfCŮ8}zaoRtY>v$G˯}WXНz';0w#Qnێ,b/c+%6FvǖPYCIe hM + } {U3&no\6i3Vd06t7{u}R3N4Kl9H9`]0c}>rP^vq KŽ`ɗ սgԎI6Ea$Ib' R:dvۢH'CX#>g$N܅+kX3*#0$G20ܓ熚Mi&CRjTj8qjJ찉 o$yY7ӦPs6Nl4ڒ`*u5gi]ZPȋ† iE&2<[t4<)UHo>ڎns]R/BYakJ\pnc(=ƂiG~ y>8<1إq),ͬ.w4ݔXn[7KtWIenBs:4_.ABTv)9 +/dnBccMyQʃ̺p8Hӊ;>+w#jRD.,RnTݩ`JmtAAn"pSEjdY45G!GQT1eu4GxtGu_G!&LtOM!cТc]L/z*nR&1N b9?#ft +GC X]``8":kLql^i%&VoLM 0;#V=8Be )oKc0 `zv7M2T|T"cz +OَgEcׯAiьB?Bcς\pF?*¸pl +fwԿ0Q"Sp.׆c!eH^=.|^J۝oS<6Zd ] +/JNGG]{E;G{8()?cNF)NIN3\T&HOM蜀ފH/tV@: +I0ZC`ڹ֩~[.á/ [##/^լ(ZYO9BO<\#(jڭ1v7aR`ٯqYO1 a?ۘp`ѧI~R{.PāHTɉFi@xݯCشu/vѥ?Q*˪MHEOOrT՝SfhSm?S-boz uحoÇpޥ7bq~'sn )K +| O(IDTaU꽠_G5&" 4E}8gn嘙ZMўƎw/U +ZP3nypj+#~+К y.fET.ŭ~7=0NP@D')mEz`aRy8MxG:TSvy 3p/i~ԤT *[AqRzRo^RM1o'f,W\~^z-:0v{lPɓwil_47C,G:D"37'8iI`]/$ O#Eea!rAr5%!!r:f4SRJZkM%-CJ\_[ : b@\Jm*)ZfwL^ojOKHu,dc9r5>k}+V~.L/<5Gzk=VƲNOzb;i")]%GORJ>M<;1x>2@ OpV'7ްٶ );⧮s7o~9ncBqdzjc|d9TXNu P2<سXy&=]I:BTEuhFF&rbnFO#OL:j%{\\Xl +<gyS{)蒇 2rwqNg'l 6ϫeLdt\Ӎ,Ϻt;(,!)d Yc#:,}Mts9sa:ߣ߭V'>yw\iEfѳ^QT T#>ã,ܲglm$ ey/׏W]2bY̵֔}iLA7@"RQ2}J15i4"E6-Rb <\z *6}X1{'o#m ~%oӱ;EÓNdV7 +gD.#Kb[ˌȅDwŸ7ߺ.@ @ @ @ @ @ @ @  K.͸9u^3_, +@ @ @ @3 +endstream +endobj +997 0 obj +<< +/Type /FontDescriptor +/FontName /FKUNAL+CMBXTI10 +/Flags 4 +/FontBBox [-29 -250 1274 754] +/Ascent 694 +/CapHeight 686 +/Descent -194 +/ItalicAngle -14 +/StemV 107 +/XHeight 444 +/CharSet (/i/l/n/o/s/t/u) +/FontFile 1024 0 R +>> +endobj +998 0 obj +<< +/Type /FontDescriptor +/FontName /ITKPKI+CMSS10 +/Flags 4 +/FontBBox [-61 -250 999 759] +/Ascent 694 +/CapHeight 694 +/Descent -194 +/ItalicAngle 0 +/StemV 78 +/XHeight 444 +/CharSet (/E/L/M/N/U/a/b/c/d/e/ff/g/h/i/k/l/m/n/o/r/s/t/u/v) +/FontFile 1025 0 R +>> +endobj +999 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 112 +/Height 118 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 3632 +/Filter /FlateDecode +>> +stream +xZkfU~sxL3ɈhFTvaTJ LnCQd!BE~$3A.T"R1d&Ofc069|߷ok^Z{۟yn{3eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔ)SL2eʔEocKfAUukfӹCǿ[`-Il"E!ךp3}zw^5|¹n70*}ٴAS{tΠ,h;ވ{J^3 a5 }5֢k-f34eIVݢ·"2][Ut`t{rqJS cY16ߚ>p\7'c82V hGt0(`g}$NDY6V"Lб"?.2VB<oI 7\I7֡mxB +5,ο}?^yv\{p=xՉ;0ۋY>ɓ79Pao~(>Q|$}F|K2;Q>51:G;azIЖEAjH_ɍD^7ex>(%UaL6cj*kDk+r,fHʃc8۰vuk/ca/C1&(ߟF3)0*B qЋ}ogՍS#kCJprd9_StlX5:(RFgOp>Rw\>q%(r dώX}tD`+kPP]+ߑӕň> VLR +)Ĩ2HY.oVn 5#FS0N/f#1nJHtuӲc1P1 oƆr>=Xv|0 f>xÚ<$IM@KR!ym YTV}nTI|Ї -Yu(͟uKUCiÎDl.X޳Y8g$F~3|s!R]Y! S&JN[er,j=&;H +TZSI9F;4zD!n1( -#sP-!)լC5g +%`cRSƃ?A?Uƴ>)89gugMTNci Cvф_TxqhOh \$TNz.!<> ]w5VIRaY|)GqtR2Bjr#OB}s;͞y'b#zg8q0=} +##oc1z0˻aQL2XE 'Fi +mlԱ ۓ:ӭژV9F]\mE`MjF; GcSt7 jM'9 }sMkky]`Ӏ:тs8;s߽xSGqꖣ8[1{~Gh?_7ބ};܃} ̨AOmܧjcgE2P6˹efNBv 镚b`H@>ȚJcR"M<"9W6*RԤTI}E3BEhS#c.}#X0{V f IX4ʡӋ8Rcf#qiHI)Hz '#cUAԬP~!.xTh08ڀqhKM <1,$TJm]c]jאfFJcWzPa'FcpgZ\aG0 M уУ2&#uNPJ$ snQG0F$ s_7DuaKB( BhCBOg Ktoeؿ ѢLEphZcaBxY9O@ sA5z_&}TjMJo&!AYZž+Ɓ|+X)j,FOÓ Z˘> jCz h`%bIu}ctG2\ V{U<@R2C_gJ𔀼F Q JBrp LeRjl<+`!F حžjBqZ-Bkn5m;x 2*=^_LӉa)6:8G>9 @^|P{ڡv$txIU1Į0۪xحECX3~`$N܅it6D6w8v^x<7h49 -xah]Tf8qj찕脏LiL֋)q\}ԉF;mx\>MYbpvT8ڮ!͵H*<|EHL!]g> v]8BpC⾆mӅ2//N;WgfHٻ7*v6 4!%;'6di)V[7mKS:iCޤk׊Cmg+=4@Ǧ/Nw}E![Eڻ#\.TF}Հ㰰~cy9tg~KYl~4/eEEE1Fy`8B:i;l8}p""C꿜D9-.!e٩k¡lV8,HTř M +O'zL>/g K9֖3Me 6L{w 6Nw}?'~OzqL)L|&[g(H Y]ѥoY^S)vT2%OoC'OgqεґgiѸĘuTNK˄^'z4A+`'9VA Pcx V$̧bSQO[9E-(͌ +bh$ pAlpk0A*ӏ}@W&/;/}(sq'RDM>b +p +4ùg( +:2&jIV{rM"MۜB"gD`NbF%z龗)p:d%2 #>0ik +endstream +endobj +1000 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 182 +/Height 182 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 19206 +/Filter /FlateDecode +>> +stream +xgtTG5,< lc{&EF($(L0`lrP(K rVZ9G={sg|NwEַ?]ku[}] uNc36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c36c3[طxyaM&wqq- +Zq+턦 = +ss حEck7Lae0LMī;co+{7b +A^Zg )n6 ~7s>m MCgz˻BVFT:6cuDaTMXcMI C1`011SAtTwDݍbUp"5=Z ̫@"֡'N!x vMՍf&:y!rsԳrKaN`=tS[P$0OSySڦ'$CO͒D\<@[Swt~' lEv^3-#b lW Z1&,orFSao#VmJ":(nggy Ύ^Q$rb:5oTfh1iT`'v\$Y;vGw~g+no \Yj|n$Зx!4vS+P U:uJ ()S؊SxwSTG9^h/cGmV{u +'(I`K;_keA8k d-$|Iܛm>;*DlF"JapXZ +*Kg$0\3ˬdRXWyj0} +㨾rpY$'MG`tU2ԡut\츨v c|gDwŸ0ltktWz  A['I`7(=khn3*<~X-|E_)Ƞ[8B ˈNYn';@f +n +k[kaU{U8܎şgѝ;]ŘRNi0ScC5 ,c+3K1u]#pwKѩt]eDE幓mHWeN'0+q<.T/SlvXC%R5:V(d(qEJ])ȬT|$]Ζ/`Υ8[z Tk C"E; fw#Xی@Attv}1эERӭJYަh+d c-b#ݤ$bVce >!S֔a wtwI`nŃ 7 N@$,ӳ+}f3f2[ެS];a=t$0`'m8XF$:)XԮuk¹p=1~X#z{Ht4s4}Io5ʁP-!a{6dc2Uf+0Y|F0څi.ȤdVj&{z:X0_$0 fc}IZu +BᏂ@;énJoҤT!/H$>\o+J=@Y&lwXcHQBqBy +Z$n uS7 c $/ֶʬ0\ur +ڤ$yR2p#N|VX^HG`$N-,:{OB$fbhI(#6ak?fScG*:Xj¿rBWԲ~ +":W' 3 /Bб:LutjR*Э3kR|5/L/$2Ef&&0qIyxԑw]"+ǯ*|>qf03v` n}p69R+ݚܶdiFsp@ c!]Q/tJ_źV ᚏ%%f-<MG=q*1KO^1v$0L uT4&gJ w"&&1 c].5X X ңVoE}X`"?U~EߑLڐoIҚ*:~Gj>}M-U%9i =Z7ye.;.u,ٳy7\2.O`J8̛݉zˬӐ@Ivúe-S @!Nԛ8sK,-/my L vBM.Afh ) ZHעAdB+etiUL81U<>C`U,Qen8z mN;M9\{,0g#{=UcĂBq-|0%Zc$>'NI#V!ytSab:V5vGۦ-97Mg0/tv^]֘3k1zQ >u[K`? 0/i(Q2=1Go^g*88zY|">>q;E|_Ƈ_¬L&bpM2nsYڦN JEi@z Z~- a¢m[Ӗb8uY(47UvihstD +k1x5gZ'S6j[V*lEСFiAʵe !!/^ӗ{k>kaۀ")猁j]a O`$dN.xu9r7W:t`𚳩oo3l73>glr1ŷ"Ne&FG`Mc$Pԉɐ@>*lxЖe--Gb_9@H% mg!{$V젩#SI錁fcȇ[0꛳bL\QJT`=.l2Րf ⻐+3P:]=hkkGcc3N4b+ 8p^;[qs\7%߮**2bCؽ^Neuv1vMvލvX촷!C!tbld(LLKLM&0Q4R·$7KZf|i`UN*˪mfOWv[ %,PL[Y{l٨"<ޖ}L +S/MXuc *p]@XY۠uC)g^d\0/}9%㖗е1C,Ƿ+rK9'\mFjz>bqB4N>gx4N?t +':,\)H5BWӕݙ1٦cy̌ ,0=$QJv}͕r[#.xL+&; Tytxh*o9 6S +|sLQ(18Z;#`J`ec~=Bo +0j"1r +jm12-&b"myEkĐ//N(wBo1QmS $VXv<f|7`N@,׶dv>>K7K 0~i.V3]Hʺ+ 8q:;#pk .+<<p>AzAcP&.3*x-$(|(+ܫ1y$P\N8q$pHznfG?KDr,|NtN xS|L x~2'G1yDD;2BU$_ši{ˈ{-o`%7 +|j-~ i)q i{^'kt<>Σq.gfvZ/Cf4t1CJ ]ǚ&n0u/L-1ym=Vn/Ҡ'3 Lkb̶rX{ }c5XdcOz d’E^XģwdYXw s=rCFX_eͩˮv"Pta_IV.N=T Pշ+GȪnJ>5{q-'P'ȣ wo D:s1Q7jllgTʣNCB :(=mu]U.M7jQ.o@$YK:a|.*k1my!o `Va +ۤUEhł&]h rH"0r}F:JHXbպ(D _(DLX%ױio5kTcv؋ YmGhozhiav&fMDM +MM]Ds=2Uoc ;ew,8/]-|!TzHn sG6h!7{#VcWˈX˥o +|u=r%> +_M?|0.BqOD0]mD]Q)QET9Uj6TTApTh0AiPPفa;a5QDfuwZ;x +UʫTU QJ4q73sM(G?@*mtQ܂77^ѣ11obخq͚ Y(aM[x^6-k˭`&|$)S,ZK6`3<-ks?%ll:b.(ߚt|KW|T d!_`0yxahv`y#>ŝb AuR^#1L >l!/2BP<m2yAF[K l?p,~qne?( }} +;? FNWVI)x!&c$Sx)S3{F| ^p/_fs~|}%}s ?^f?sZO3j0>kn~ Clg?xz~u=}x|j>./w1yk/_1pElG GlVgDhxˇ8I'SCŌZtt+TģGzS{* 7wj}Qh3놦U,1KpTqY.$:;Z}]D8cTH$PY\qKKij&N;ĝٛd +o݁{`.qw<-m^Ą aLqTL:?Ez_쳖Z fIEc7ѣ)xA<?|#u],%$ >r2{ZjPG[776+6kxNeY! o5KG¿$4yj ˻9 V`u @ZL^!Swsp}!HY{> / >@^a#ؾL 4v*3TL˙UH%JT]{qU="v(Ȑ=]s3YgLM ⶾ_Ima?wUE^%xŠ.ycsϝ_FJyv w11(#EfZ6 +=xi%7؅4c/m8"C:HHΑO!xKX:.ƦaBc$^a 8qW2q). W7}7:p!$5(~z2B`F{Z/;^I`jn)N$G!.l8O86!wdZn[otJ%U܄&*E;k/_0 WU<@LPڲn8NpDj"o Ӻ; tMV9jnsƋC62f眆m;kA=pz < qtرc?BBv1M׆)`[N![cw\+6[  lj,:pLB<\|M^ĭ?j{h Ǜ~Gqupف5f_1y()vj[ׄ΍XQ gԔ ;oMG;0:@ +O񜳰ao#{CYk~yHsǎis-Snˬ l=KF,ډu6 +ZԯKZ_@3/ b0,C| o Eobp ]ᢴ LY!yˉ-T1q$$zjj(!kzPX)n9c+Y0i7I lº]@wڈ5;Z6l:<Јc +xv>u%oߟ|wL w%vXDe^Xط`׫znW (֑(adt]2کh$ǟ@$%}!8=M{ D ^xI6q-5wGM+vλ |^ kHb]b"aDMC$P(pᎸOXjZK hKa֎om5TE-Rm^Zh=.ﻅ>? 7}#ŗקPVE*d;UrL»՘hW5LbhAW+%/<@`@8*& -1uDʶC8z)O  _DS$!?9ϳc[Ibvwc.;~FC Pج%@CR2W+O-Ÿ `fNm;ļ~WI\7nuɛE*CK3Y`*Vb2nMB\{?} e]C<Hd3' TÚU a܄ULHRwΥZJ'.V\\)|#e oFg!"0+gQ D z\X S$:RweχI|NMU$6҇z4{,+eʃ>W7cڲ !bd01?#SV#~X163jj3v no持F]6n/2n6'u;n'`uxTLY[KJ#BWRL6iH`Lb&;e}u}VH׉"P@7tqnAHx#ijLz #l +nnIrn' +H`nޢ'-1(D)ӇX753myϖ`sZN`N>&SN+F%MMXK!U +amx 8: O_fS I`;=KprYD6XmSag353m-e^ur` Tc0yk?G2i/>zIڻ"ʯ@\ˬ ~G1}I=xz9\l5x/ GFKWqLv ae #Q%N 3%)oJ{]ߘ+Wq6 +e{1O>A v +ˍ=HK-da_ש])vxu.e!/YIZUk6O?S'چs~OJDHY @Zc cuC\Ӯ#PiJR׌˫0{3]hPj >ib2RKUVaQh)߄}`*ǁ>Hj*TO `Ԉ$GSXV Y,a7XW et%lN);T`eją^ ! J0 W0qWp$6b&1KK/#iD$8 |r !WDwG`\|%$Pn=swoIp|>8v-tJLzmS4%s$׊ R]X'p^|g ,ZH` F.,eKڎUab"VtuX’r, ˅ gq~ f[$I PFՉZRyUb[q+J0²*L\%>zc 8BשSg$&Zܥ4m^ͭAWR!E[(1ieƛH7H8GsuI)@0xW~SprR C'1j ǂ>8!98YSBM"Xȋ9 y]x]vU,14$P!QVZ,tk*nj`Ihgq[鄊}fCkZ^U5w/M$7} s=K`EM5Av_.(3̔*$y9A2nuvSfO1>zT! _)k\ -EyH`{E>F2><Vȸ.ݔB`v? 'i (NG^|AtJ ۈs/LDp߅"q6BA8שTs05٪(]ArmUF~v(n}[I +\H$pUh$VG`ha+9&#aM$5X^-G лHMZU$Nbqq +chZ!&.?,^Dk1^%N'rV*+oW#9%IpiҐί\Kǟ31$3~0$!#5X`۩__,O7{J+ERmda{Gaj7 )>Lu +n O@֬ŇOrY'1ۅ~g@$%TT\wE@vk$p)c ;x% \,&Hm%y|"} yT,Il!Yu=\zLv*L*A,ìM$p +_/) +0N+t* +'Zs存bCqG(V|tSaP% [$hHxe(XěS=sRBNs 4w@ 6mkkL#PgCd2HX 0ᅗ"xNy2d;b*EE 4g_#W!W&1B~LbՂ1tsHU`AL@ YAZ Zxod!}!Ww H4*pe SO`mZL^1P٤9nrX7e4~>ݏhwm@ܶ#2 $q$2frL; EL"&WwI` ?٘jLbqn2@\ +Dvib/' )em +o{mJ41 QLbk* xO Z1v +s6 rKX3n+]fF ;Hf]NK1YbI`$𳙹>9ߐqZ%$P|e2˹?~^r(:.1,7!d\I&'FB~Lx]Ē#q%2*M[jbM=?A`g?ՋERoԑHQJ$jpohv9% q;n?߶niS/2., +5a6{}}PZNd&/ +T{ F+\v1Rrs?ϒ@Z 틁C7SX#nJDH-sBelb^xyeƻHkjf~ILtfN3 |@eNe"Zݶ{?^R6MLCWYzgt]9J? 6)WF,($eG̹NBB]|N*1^*g82+aQ ]8v JG\|*<,(gYD c'K {Jt@ĘG41"|?'__D#٧, G4X/ A’ur1Kvҍn؅лz7+{H.QB\ KU$]2yy#$0GOU>$F[QN\UFrf:9Sb_!wZt&iUX}g#nB\f+ݪDZz2q|$Μ™sRM`܈u'jZTϙ (#̵Yt1,*YWz'0f"b8(M$9{d\r&ucա\.j2WBݽ TܴuPU]&OډybNU9pH@B>yN kEI;;llAXfJ[YFK`LW:pfz]sYP/.TL_W%+pw3UbvBbϸUOP5ho@SS [܋4•|]< X\>%7_{Yf{DZoyKSX6. SGU]ǐb5FCWe{LfIۏ"#)Yʄ;DQڱG`sjM,!PE-p&\+4cHɋ1OtLf!5Kp= 2 ]ޙŦ XᛕvUXfbKFni/!:6gE<ĉ~?qǣGȱ8eK8 ;d9; Lr&-]ՈE%%&;0}~Cɓk78); q*jM=?";B S{{$jjբ Wq.NA7 +m ?O @E!֗V1`m6f@; %yT*OԘ%Z7چ8pxv*fZV&TrMH~E`(5Kxf\K0zYƬ(|׊_ޅ3Ft'4aq|'91s&?[NVu73^X|$V叩 {>LY(kZ&N"9=['"ĔV][f%kw{(I?4ݕtH45C}|yt 7:=tex.[{%z.,9ʴhVph]6Wʈ|+Cw|:*ǯaJwW!x!Qj%=< A;9+Lm@Ҩdh՞_†,0RZ?\": T> J1|ɭQ֣}yш +$^Ę-#(u}E1F%3JӖE'jMe#Ύ! %:JA&+t>@?FĿfcVpw?]a_KQ +rCdݬuqiLr9~-}0wΖ=n=K.[Q*Bw$D싓Q/H)j D9k-0G}"̬C!e0*Z +RAU1i@N$ 6{S(6,B6h`]DQI]P- !Uqfq W*t$Y$"E$ﯲZM[P^ݬM's +I@{^)( +k>}ʉ!$谚~]j ZjɇҟIRx˨DG!L =ec$(derkh4rðucBFkBT(Ȕuz6Z0ſB-\OA&JA*0:Z'*:t":El'۳(՚TT g%Fu45Iﬕ>'s8v) ND 8 ͎u8S쇨D!\C|h9΄-VuQfbU >t(E&ERDeJF?!Ju](ELQ"fR) O:1Eqy%  EŽ+b}P-^ E(3ou h}PHxN8(+ԥhL+遛(牬(5k2u%"~J9ZPQ, S%)J>!ʁܫd_EbJ/H!8fXJ)ODB^W8iK}3EM++(&ӯ-Z1*%qb +b!a\c'p?%QQڡRF'1Q`rTe#gV]CH@A놑eplN=_[W–²f4k"EHrQj!D)lЉrH!Vdܨ44@"ОSJi JѢX։`JDQzKQ_"#gIz)$%~.W)/R*TRH-道DT<T>'r=G(JGGGR6}5e"J1ѣVfi9fA(Ag+ +{ E{E-Y!Ӷqel ԉRՂo:+] p\"v;S7c(#[.OcHĉ]>r+TEp@"j Q[Q(SN?٧+DҖ瓰fFkMiS6l僶E E9f´x\Lġ'$EH'ebvlp"EY%e:E|Z_W=U2] O}b%SizZ ɖwp\R):z]$ZqX?"Jf)J][+WE)^leIo"K}#%X`waZR􁦾MFJ!+mRKQ^E<щ@'vd–=GK([) 4EWIQAҴșU$6(\ê+?!lw7>wd7N])'܉Ԧ%Q\B)#E}i%-bL̪AFіh5U m7>GvK7d +-Uz[QVhEلڦ}ϼ-F̼n1Bj}y(T(ZQEHQk\2]@ʨH"~=/!JaFT1E+l +Q R;y蔾6: J[G*髨1yLe6 D2@h EY-y9$)JoXB1ڙܘi +endstream +endobj +1001 0 obj +<< +/Type /FontDescriptor +/FontName /DLCIUG+CMR8 +/Flags 4 +/FontBBox [-36 -250 1070 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 76 +/XHeight 431 +/CharSet (/equal/one/plus/three/two/zero) +/FontFile 1026 0 R +>> +endobj +1002 0 obj +<< +/Type /FontDescriptor +/FontName /BJOGWQ+CMMI8 +/Flags 4 +/FontBBox [-24 -250 1110 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 78 +/XHeight 431 +/CharSet (/F/i/k/m/n/t/x) +/FontFile 1027 0 R +>> +endobj +1003 0 obj +<< +/Type /FontDescriptor +/FontName /JKSUUE+CMSY6 +/Flags 4 +/FontBBox [-4 -948 1329 786] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 52 +/XHeight 431 +/CharSet (/prime) +/FontFile 1028 0 R +>> +endobj +1004 0 obj +<< +/Type /FontDescriptor +/FontName /WIRDCL+CMR6 +/Flags 4 +/FontBBox [-20 -250 1193 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 83 +/XHeight 431 +/CharSet (/one) +/FontFile 1029 0 R +>> +endobj +1005 0 obj +<< +/Type /FontDescriptor +/FontName /TWQYNY+CMR9 +/Flags 4 +/FontBBox [-39 -250 1036 750] +/Ascent 694 +/CapHeight 683 +/Descent -194 +/ItalicAngle 0 +/StemV 74 +/XHeight 431 +/CharSet (/a/c/colon/d/e/g/h/l/m/n/o/p/period/r/s/slash/t/u/w) +/FontFile 1030 0 R +>> +endobj +1006 0 obj +<< +/Type /FontDescriptor +/FontName /TMCDBM+CMSY8 +/Flags 4 +/FontBBox [-30 -955 1185 779] +/Ascent 750 +/CapHeight 683 +/Descent -194 +/ItalicAngle -14 +/StemV 46 +/XHeight 431 +/CharSet (/minus) +/FontFile 1031 0 R +>> +endobj +1007 0 obj +<< +/Type /FontDescriptor +/FontName /UJRKLY+CMEX10 +/Flags 4 +/FontBBox [-24 -2960 1454 772] +/Ascent 40 +/CapHeight 0 +/Descent -600 +/ItalicAngle 0 +/StemV 47 +/XHeight 431 +/CharSet (/braceex/braceleftbt/braceleftmid/bracelefttp/intersectiondisplay/parenleftBig/parenleftbig/parenleftbigg/parenrightBig/parenrightbig/parenrightbigg/productdisplay) +/FontFile 1032 0 R +>> +endobj +1008 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 124 +/Height 163 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 62 +/Filter /FlateDecode +>> +stream +x  o7 SL +endstream +endobj +1009 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 141 +/Height 108 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 7022 +/Filter /FlateDecode +>> +stream +xwTW$Lr$j{AEAz="AĎhI84V^N#zPD]4fYkL߽;ɝYwֳ߳A~jjjjjjjjjjjjjjjjjjj?m|{C'|5cЗYDNA7 9CKt Ǔ`nniӧL{7.^Ee]Lc]كCRdX#!<C 9|1 閃7d2Oh#C^a̼nh:`r0^m|MQWySOY)VTe%r<g!Zr +JwKotEz"' fC`5 +gtӯ^~>C"+j/қ 0apj Vajs\># ƨ0r^ZfWr~8,ڵ)F(Y,<'E7 gqR6R 2;Z=`3雝,}bS h"^r,x&YxO*>JA]%w{ +r Fq% 5,2t֟%N)fOð'ګ ;YЄro>(1g>{l ~fd6? fpQt\ԫ_]#7 `~='p >ώ9 +OaЗ0ɍ\vVvp ²xeI +ޏݎOmQde'ǕCx`h?qH00ǎ{PЁ2RG\LkX-Ka햏΅fO^]c +,_iFMდ#>ac <ܿ +ѭp'EXމڊYsP4za7?pAŗY^[߸ +z( / ^p#ɗH-1nG-7~gv?L):txУiGt cOBFݨ?cS8tVh{<A^z 7W{)DZK4Kd 3 F\- +ly2~Nq9^^Yװ? +ض4e<{p = bh1-g`Cǀ!Yl&&˃MT<{,`#z (>l@>@wn^JpSRz\06s'!pQ3wqjhKOqas<*FM!OY?.5RG)c#j.4l8%g87oi$|#5Ju;'H -ۖ5{ ۼL>alg+?BgSAY<`e9Ë\PKئ `s& .kGshS*|-g\ML ~ xa4.5"FASg5>wo2p_čWJ*sb,BBOσo86s|x?p+W؀m G^1:]H Y⋑xgQ<-Mn$5jg+F{?p]yM%%p ))XA ܀)l2n߁fE Rmǻ,^PDz{w$m.*zʤѳ~2')A3Lq/!~advq75zsiRqt(VaVuܓgxReh`^vj -V6m M<%vzf;JK?l'ಥ/8 Nl~ pX@ɦp" 5XN3t"8kٞ\TߧŠe59sv4rQ9X٘C07^DY4\V&ZhiS +-4VW܄| Yڀ9◟ĝQЎm/&\'HC؀ :EـmdUy&Ì +n)3 -n\\[bc &z!vFqg><) +S5$O>ЁIN9[sP$hq|c8'D1Hdd½ws {w-A*!8/Ur2H4;naΖ>zcnb7[}.fq>%54 +RpCwW_~2LvL}NR8 U$Ʌx0yns 7+'x]1{?Fxv<^RVG5EM˔*$?{Twu*YϬ:$WVyu8->߻nlqB3< %p:D'-&ڥI8Hzz-}g.ob62&S5J%3BB{5"6@]xy9%<֧mMڬf -G5 [GkWiJ? 8{qSտPqe`;>)S `.sJ:Z*v -‚58uuqLȤ =mrdᬨ^vjYE1 )1*/OT5}P[>lx`G>$zF'8nVEg1>MvJTxmd+.sH1:{DI-ZGYū<X \^u9]56:jIt"t8ޮo}ڳ)XZJ5є;;/ Y +7ULmV]NHc% m}.U)myf:ᆴ_(yʩxQ+F<_\甉ZfPܟB=5SkGUȉo_p֎nL Z RGX=gdŸY'0j09AO@Њ1sb$__ђ1xݴ: B98Rۢ5'~~ײ ؛ 8 2X:y̸ΩVXQK*4l#|*V}*؂Oe"Wxa>ճPqLue5RS*{;?%]x w9wϓ{EeڝmKNUK4XS% /lfHɟ+h +B-MŠ_mps6;gIDKk>>nf +^gr0YSFx?΂v>ioJ+Q4}Yw?@yq8<]sPtI?:vuZׁ7>\iorsLXmf?p/_Ajx:N +O^@# +KנM\rlx7 MWཝvp<9FNزGx pgN [ip +Y[(<_KcPg ?k^o@fk ]~KxA-H#F*z\ .7/Ĩ1va-Hkg$ &ZhujKO6Ux(`n|8=e]T6cv놾YHINCػ?i تyǯapJgࢅcssP>tt>xT :`ntBg"-8Ď{тU1w!#d~ ;Brn Nzð +ڞLU 8oĢ xH醡98Fo}Y޼v7 h~׽Z^xF`?uDrymlikUaU M\3i~U򪗐kw[NJ +o-.?_q# l,,>+sw`2gv4oJ=_O>-RCDN]oP ]N^Qa>lc|J +endstream +endobj +1010 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 108 +/Height 100 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 407 +/Filter /FlateDecode +>> +stream +x1Oqޝ$#7qp"WL1,$ _.N8r%"_NK~'w}'LXqWz}7o+f-SmBŕ޽e۞-VS[fYADϊfUlqӆjqR.5/]'_Y9SXmlbknZ:]UeY +}=9WryvL۪ʱZi˪M[nQ8Te_%ۉofz\ ܕq5:2f36[s'Z|'/kdf@ -?S~.B_pwk +endstream +endobj +1011 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 523 +/Height 528 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 560 +/Filter /FlateDecode +>> +stream +x1 /J$w0E? +endstream +endobj +1012 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 202 +/Height 107 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 7661 +/Filter /FlateDecode +>> +stream +x{xUU@DA@$@DǑet-s8zJ $Q,(:sOM#Qy.gg[:GSL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SLCDBȣMaGS.tM- Z, +~snq޳g\k&4{ yi떺'S4M=K5.*ϻczᆵ;ys 2.^A=uI z%>﯇hUgH]c9o:1׵ꭓ1Ʊ+&נҫ#(QӵۮJ8q=ݪ ;m;BY?kvyp>,j^q@_׹zsTyBκƑ5~c Ʈc_CεZuqq6^k Y?{j;aJ+v{וvRޓp@@%}IjV5HBS;e^]U~kUW,j"4o*&;$f@]YDPUtB .Xݰσ\|OH@s``3~D !BEX6j74e(+s(Wvpnׯ]0w!u 2t +tP6J[uKmj>©w{u5n84FaV(s]p5*]V.;իvg⃸yB].n(Pz؜Yq~tS=G(u t2إPP mjDChZ^˗zLVQ!rr;Mq$E#"v4 +0ཐ@g9m +^֠ /}Aϝ6^(<X)6m?LMEX7ViNp=Rs5׵g*fZ c!:m27DY9ᄊV21bm6"< tA|sD\g3ѨI;a +VU-N`cFJaw¹S,Vm&ɣ +gܱZiԭ6;>Ϩs^wal;*D .;l<Ģhz9MbU +#E:G}k#XE{EmUuv'[o/A g Bxo{˂W|W +f]\NE_ض/d":&Nv{ vFT>Ӧv u[_Z_/*Cm4U0$\..nHI~#Iy˖윂X(JGWSzVmȢL6zk: vT;(Nm,<-ʦJp}"I}O">~ykΤ$CVjXU)ʤmZXpUNtcfV< +Xv&.M ѳG?1n qo"gAQ#'HM| +x8ԫ3k*9qG( tb +5 $o*~b?!QE ?v_M7+^,jZa; Frba+TQ-nTM#4Wh ίmbժ6bPXv!¡BHPޔB*LO5 v4VmĿ,=B6[hצhժZ+8{}^ zeSk.g+Gh%MBM?{žo,>4\H@ \>;3JBQ%L 44AAaiF'P,h__߸!ˮ2g"a-( 5f'>zIժTJuT jl\s?nQ,au)9TE~ƾYWyq s̟sy#YבXmtƺZߕjϡ +i!*$}Gf69 .}"S!'pˁCd)b)R bПY7} =nm=mQ$o/%H9Sg@p_(<\'`_1iGR:ç[2e б/[fz|diX`Cֆ5XV26l+AHbcj1t9y:m۴EA;}#88q|F}vm5jI%Rbb[밞$oQj`GM'4~)kh߮= + K9_8>¥s$|o?v3r,zlh;/$ mµ/0v_[E +C+!B X&;Q/_=^}ul4 g^҈CK'l;+_~y*l4kɍB9\Mw>>xCnI&^k^ae2֊ )܃VÀ 40&>yS=Ncscr)L[~N`qasGl)-%G1YP)ه3 b̢# z`\&C0}iokRǡ)x 8)})L^zN+]-z9HL[&u.g.Lx>vG H>#fb_± +c!?*"0uI6ށ-;_*e!//(ϱy!|?ڨx/!)*%֓;6<1xf&?y +KgOH')$.夐ĥG1L$!,2V]C o*=l)..8v#~q1Qr'$O.*R&v^F)$9BDRASNRFBw=G@!H|*MXv U1"AgDU%˛o:qmVFR$yu_Κ}^#a-awGd~ +_8 {va}X!6uN: P=I<05>12)х^{d.h3E$0f*"&I  䊎[L{&G!tC3| I/BlQso +<(=Nzԣ$g.?Ը=GBR@=w&ug%+B\@c`@AX}h78Ӈބm'a9g^"lbUصI8 =Vw`ޚtHM~_š`1OW|&,|'F0$0 QSB$*r\MC1Hf^?8H) ZHKPUAXEXzX?> Q| k] (.K>;O-SY@h>xj")$,Ky3!k'm{,EEFEعj9k׋ccǻa^X=o)#ښ;{Gkf/zVAmE{j&֕6oiTBͲ^FJo +1fag S qK%9G8Ts#YM\r9˕_$a*A >=_?aNySRnPa$O.ʻ9E$qԓ,yGYa;Y aa;^z[4G%Zb-;#mwޅ5-ºۚaYj.3}rA3 gH\qeၱ*jU8A8YF&!:6MrJh F#旲?sx=Ǹ'?G% dCXĐ$/u9(zE̬<# 6[f:AomP.H(I 0RGPF=ʖ$u;N2|_H}8Mݎ:.VUaTcq/aEj&[Gl_ B2v"\at> :/ L➨H|=CMPt eRP6!mP! %Mds桁GB{h +b.N"P"2 %I䤡+ۉ>]fm!h`0,}C#Y0 e˼8hR&dclO9Gu 9 +zd?!SK9~!#ry̧qTz|:>U&-: o?{ [3p0":w@9$w톔aCP06`mXk ::> ú-U_aL]6a+s  X?`r62g\<769(v粨EٸD7\xH^|J3e :EoƂQmGoy` +?XmC6{K# J% KWY>Z" yG.ݩK?&C^kL:p,b @e܉}$uU%HcY%bdo[.vO؞G`K6HnHiv6vhIcװk{/0TL{=ƥ]^}s,MCo嵡+Bo^gNPHEx/p{0tcK\u3]^RAcaQoA .O1y;DQk~Nu}í7ϣydrغk2 J[|/}< +)d +i{.{IX[Z<13lX<rԱ|3#g!":] F&'"cY2{x8Eo\sM`Ѓ}z?t!q  u:(Dcp.7ExC$ձKd<45:98{{<4llpeo_o2ח??K8w8 +E7|5^_]I2|ޚL/dLCF`ʼ[XJ}`g,k} +p8}"_/Z +endstream +endobj +1013 0 obj +<< +/Type /XObject +/Subtype /Image +/Width 119 +/Height 190 +/BitsPerComponent 8 +/ColorSpace /DeviceGray +/Length 8221 +/Filter /FlateDecode +>> +stream +x[xU>?3! XV:,=B$bW\E]+{޽w]WA*E d9d&Dϳ?󞯝SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1SL1Ŕ*{G u].,_\*jNz\J&8FO7l^+Mt& gԮ{_?B\zox~c^9Rk}w66sc>3v=p}׊nwXh&+UkP]TXM?۫E3e黎fUc$d>USUܕ_纺f^u<͢&BӫmR:I"l6E`EXE繿??*E! kéw{5n8!V"s]q5*}R.ٝ*qqUWPiiKXk/U19TqB~O*8Q_d|Wq룢u;EnMm&.]$\a0B&3(לGC9ЌݑԜ]i6^ +ȣd@hG7SM_mZ\#f qz +м۠:pυG$@8] +˵d@}޾QbMXVѳwx{a'op:p`ݮx~rNw5eEY,FuvE:wݷ$6m&"f\HH :v,BBuU9auZwpf*fZ 6CtbUe(oډ..֭zS}8P'N:`u-Ѕk <סr٥o-|>MxoԬW䎐79V:mt[r"k,مo 63y"ɳE΢e@;Fی猁ZCvݐZ<׀G/v ۀ*V-|}j^tS]N|;pM.CFSgn=:VChYxvT؈X
cNV`[}r] 3ח1E&R" K;V}Sf=D6^5j + +h +;TZvjߚ]F2ʘRcZ\X8]ܿSl3v(/9 AlT諦]vvڍ&auNb5QX" fѲuaSݛŇ GjjKwrnkvvM nQ[(ʄ/_+/VhYU)m ؘekmgkr)ٲ^pnx D3x~5mIwVF=uM92A=Y`**Q%&w ` +bQkv`=G&mX@ުڢStV1>U,lg؝;N7^V8Nu*̪t6q'XemɶQI":&Q=;@v*\iSmDu#[_7Z_M/*Cm4U1$\..nؐ2; cE|4ѮCvN, +]%ף#FxVS,(Mk6]Ehm 6ux:9ź5/2Xg7 A[+(n~ +XZ9xPhp\GYxZԹMM10l;ɛEݓ&>e۠ER ֎I'@ e+R$^UIۚfS@N%}bRy@%M\`!'7|ECĉĭ-h'#z6M*é^ky}X_\Pyω{=jFakg\uU8a yT-6m1UgaՊ ~PvłUvP%]ePY,g +B3*5E#\ߍb}fH7y5_ZwF, +UT.\V^W;X@8t]XTiYʛ2P Zifwu6as\*оg񱪸D=-ܢֶ_;FB[4x= b\3ٕZJj s&B꺏ؽobo)FC3~rG/_.k פΌ

LlUa޺e+ś o"NI,uhקuJ]ލHOdܿvW5)m,eebƕf{EhhK#BCZ +1rum[l{Zy7 +FG׳u!m'Whu"|VQQ#>.;JVEPd%_`w + ~UNUaTW%y;87ӨITaМyY?huBkJ pX5fo޾EZS s64S4Ԛłe[keqUJ|q8ZQ">%7d&_یdw4e[;iZSNʴZ@k.P 4ϙݿNjn~gU:^bܿFܮY\MHMuZVwsBZw + y쀤Akͨ.~N~Dv980qPQ/Zb)b)/'M_عZkFڶ +iKyG2rOi?~OW)=tDCDq{'-2m.VX->Xo`/>AW4aoքƄXFo+ÆHlHRlqr >\u:u‚8rGQqږ-)C#?Kp[lHH7buI. +57ҩOI 6삮K.(*| >Cb㜛cI|Qt 5fXp<:- }p< žBп-7È_Ty[P +cR1`rgsx&f=VS/=^~Ul2 +N#s"JU8P qo|5y3+qlZ!so}xGx,S]x//U[q=x` Q1H~8R:O%N'0c1;Yˏb3GytÜbe +*%I2rrʐIɚ3#qÄ8 ; Bl%D-%7P{N=$F%I,E;q?ۏcrhΝgV4wvU,Or:@629e+B}&2DZ0a`3)6*Y{=`ekk6v,Xaʮ0zXoz'1hBNV 9e 2J~YecbgE*{%HzÈ`x+qȦ>qS?͕_~$dUfCw ^Y/>nY*Q*ɛE::ڷ6?l_ @v"\at +Z/ L㎈Hy5SMР eRPɐ6!e Cȩ 3x<4BbH{#RK8K0tJ!  e02MjB>'z*1BA ۅWb@^ag0'bC/i19#(}Nb0OUæ31oI-c8,E<)SzH {bOWl:=>U7C]:w3`L>1wx i†m> OV`=u`m|K_aL#6!藼#&1$faL c6=C!0hb&<7!9(a$屨]9]qw# tތaڙޮLj Hyo#9w3lx$d*=Nd0tO ,Cob6&dOD^DC]Pb9~L|D pY6c/?3ƹ;HثJ<Ģ##e}2Vpmy?b%% [vD-,0nތ];a뼇c+ص=xW{:fzo@߉)' $˅a 0yx@a y'{,8ґP}sԡ , )w1Y0Y%.5lݵY+=KCn)>3 +9E,2 >G&0#!==~$, @ƘoNz)6gb|yC\uUFuXT6¢sZ%w08DR"dPa\$=|K_O39C@a00K,x C,=3&"9gѓ: +텞' xa,j8^ u ϻ>FC;1mL^I a҂m8&ۆ1Ab^z 榫I8'%OG۝Gݷ܁߄߾O|Ok.Z"] Sۄ'_V"0A!ML\RD!7*˂by +dɬcXnIJԈYxvX @=.sʲdj&3hdFnAh >8e#&dRR2["Zz38˖H/.l*q)~'~Vg9d+> +endobj +1015 0 obj +<< +/S /GoTo +/D (subsection.18) +>> +endobj +1016 0 obj +<< +/S /GoTo +/D (section.28) +>> +endobj +1017 0 obj +<< +/S /GoTo +/D (subsection.99) +>> +endobj +1018 0 obj +<< +/Title +/A 1033 0 R +/Parent 936 0 R +/Prev 979 0 R +/Next 980 0 R +/First 1034 0 R +/Last 1034 0 R +/Count -1 +>> +endobj +1019 0 obj +<< +/S /GoTo +/D (subsection.108) +>> +endobj +1020 0 obj +<< +/Title +/A 1035 0 R +/Parent 980 0 R +>> +endobj +1021 0 obj +<< +/Length1 1790 +/Length2 11041 +/Length3 0 +/Length 12175 +/Filter /FlateDecode +>> +stream +xڍP.) +P,P; \(.šhqtw2|gI(HTM  *//`bbe`bbAPڀRh-v<u21 Plq09x9y,LLxb@gKS<@lrDC,-y~PP9pۂ,Mvy dhPXn +020mtK@rp~ PڂjfaBlu:K㳋)*-P4Ӏ/߁,pm!@;7K;s (!uv 6g3hlG@2_98XB 6{dLE ;#,@&p.v#3K;Sm:A,@bG>3_92_92¸3M*ۀ_ /\IB9YKq|._4qrpxk<- +2A]~v]%LB=ƇxtB?g 2܈QMO[-Xc0TX?ت%sc'3'1N>lȫ=,CU֖8-nM%U&.WE@2-,VVtgˤ +W//=s::D(+"^.{eߞ03~3IuwݸtЗ{ٲXNJ H2:C?E1/m_}6)R*=:naEu. =t8K(BKjLus ,=hITaf}Pamkmz͍`=.(aED<&~ޜF=]M0e[/2wn994W$$OO`7"yk~#/~ijHOYH8*FSˣ81eZ>-%p!uqݯG]5Ny+Nf4QEDGnm]J&-NksT$ |ƀJď^!Sfsݜ!j? ٞz'aH3!:^Ӓ{:r09U$P5r͑u<*: 8&}6f(yzn`vrkHeNK+ p6%WJQ +fC=$apmk-@j3SӥH5}MH|xMrr1y6oqޛF,Һy^6Oyzͥ_h?`̱!}<&I >0kn;&n\0<%Lޤ~k n&Im\c]VHlĢZhRY!rS]]ZܛWk؋[ujY߆*.) !HctveVF!>mI' i*x*CyhJa %pCrRMB7w򇹬t4}^ %o28muX@)^9Yd 5pZ_,2rty0 x9pY:.Q5gK<,ZLY[;j*/mK|&|vJ&|*H`wķJ](xu( 7hRB* 5>M^L菤XSfȚpEEN7L+W֌1/L~C_)1>ber!p=Xu U"ztK <;#,XIdP + Y=qjG:sZufbE~bڜwێnMG,уs#_fI%.6=t/9i=}g| T>U(sMߊQqN(Lf !$!uNٌ!S*=_݄PsUNkpRhLJ~ d\؏41QŹ%划pGޅ UgeG|*1֧EJC?4^V)}$ 2Ƙ8|Qc=SZbq2 +OEj豬Z37Ze+lVV ?wLwF#WΈ—GtE@GN+NCАcl.vL;xɶ&c: kmoE% ^*LdVEyd_s`v ] muX0ѩyzT/ v 7|N*wZZVɔd4GN[ҭrPzR/NoQ6(͗e|ٕ= &UA6LTEh6.4=B?1u%1R0koWXˠk*ۖ6L֤<>c^rB?zG$ J-P[W6[pOG_ 9v|bD8S +L ;ܔQ[n@#SYu4gcb 4-~d|F'ZaK}(:0Ю +l`"x4>SQf6+:xY8sf?6$EI/?s|rV1fe|]<ߝo*ӈj($]΢-=QkuX[󨤸 @.zQ|wiXOH.E;pJ7^|v@,UJ'Vec};K\@鑬=koCh!Qy Iy`Qhʖ8u|L*")2ޢJ oշO^i?7>g/<:6 :1%flJw~P)M9[Г42s4S2PgŮO8<E$+}r kzĂLʼ]&nag(r$bh鬫1yuN +B]:2G~c|8m`}Ǹ?Nu~(K+2pQ'tC!;iILF S|E҄-1\/?f{:sD 487=͉];wa[*2z{!Z)iٜtFC5Q$ʏwŠT_̪) cbKRd,IP4sVR~'3DdC1>Z۵G;:@د +&,3-W69gE# DE6pW>O%I/b_LV1 NA~D$zH[_vIPfG 5,$A\w>us][=(P|%V50Lq|Ix.ic]h,dL{6ʫn6XiuOvRwqI\qhe!2F_⴨U\OVc?O2,ZGn?\`3nƕtc;0d&R(˧9pq e \ѡ󡀤Dm0n˦)+$&װkGPOx +1BY2hORzH8^tqSb|># 'yy1eW%'caS/7`Rp<;gq@CcqY[!ħe6ânf"H.}΅ɩ !*\_ Ix~ytn\8%T.k)q8s|Cz~bS" Zҏp)6rJ{;Pk/[m0T5k-C9JdqK0@bkL4n乛XB [1aOj,iu^K 8N !cqj}ڏ )+x|vA;Kp"5nxw[d=˞hx Yoj ܶwS$pE?OsFn>v7I9i1FU&iV 0XI,%5{PR-"W[4/f El.U;<: %WcF!Z~Zp$J;Ae7ThIU&r2ݽҞnrKtdWv7!Pqry >ij}&MIM{]cAwaUē6 .'4d*u?MIUWG>A橸l( |_EK7XC˥ec){q! ]kfd[\T5} iRK-3G@5SUP5ME@©S6EWr]ZMYe#\8LssMKA$6_msj.ŎAje~b)y4Cڒ%yr!Ap/RхXgUxsq?#! RoͨSL-}B97PcPK\ؿ2lxZ'QVeJ;$њc/3/- j}aUinQX؃-NZ<؝r~'*+6SݿbeNj5(_#V &Bf1"!_8;jy2[\``0-k!wZWխNW~0>:[7 'twjAcn ADZR '  }<ʥlLż}CȤbp} GQYփT//,rW՞Qa'~,E󃯢v@.w2q#G ?4ș e|8;cɧ1c:ֹ~B*W$ޥo_vIwnHIF{%oIP{TGv)ѹ+%WKN<(Z=+[Y;=5W5RQ79·mW%Y<YK\ycL*glL1I9R?q{=RPqC74f%J~1ަnΟkΡW'w$,7OJ3g%vPX6;)hqC1*xo u~UIriCysёma^z+|-f7 +js`]ԏmwF":ESl=("k:Qw,:_^Ӿu'gz=fQ0-'f]6ZmP_^PWf󖠙Cӈ:N.Ֆ;|o D t3!4lT7M*¡NܺSXEv429-XySbWm>xǛs^aKI;乩bW: +¬WJR[q)H +FԅdjYtG1ӹaBWC%Y.iZsMrRXILKC\gl6_[>J sKpj.yc=D\I9Y;P~;wQ8{xG}ߍ`?U%6a$)ף"2t-FЦdm˜RNZAXw!'.JV(Q_[HF@KQ0\bPgt75+p:IjaeoU9.NT Z $#Q=hOEbKg*Gu]沈 3 -3jCN.$3rer,fJkB8៳İn)L'cA{wS7ev]1Po)hҵP?zF 7C-mGTrc* Q!Z)(lˁ\20G0RhyDZxH# +WdOvp$>kK N**f)kR)^3f5$ČAXo݆RC3wu,R50z/D pS%?!~,腜k^4zk"ѓVXY =~|J>PH4α/;e/(%/$!==.b([U]m54FL`e0TtcP5bMQ#3d )U15n^ιD[`p0ڹ{Y_dE%DicKp8-<~ RЇ쓒~' \{:HhŌy!v*ֿWjZtSCE8 #%( ȹ@x[{!X "U@8 ML<>?7G|2Œ>M+hnUbTUdjЅc X=Y9s&MЉ޸9EE==8x S|ǚ&;"y-I-&xa7 GBg)zRolKB4H1a}U9`by}#(./.ݨ(Ceܗ]^C]2HTb<3}V8R[yw#{`xBI7;b)}QI{C/nrqƓ)K |O$٨nB9/z7E&ғQ8sv:(IP+ =zڧ&'\0t_ Ò2~Y~ALxgld+?oJM'YֲKծ41Ľ +Vmq\lHCK9ɚĬ +%ln`~q >EQHŸ[AoƬ~9lfބNVFgr)bE6n{w)[T0J$;ҧ(|\Bbui#tG@R 7( +أR#ywVG iȝ,X3 )fQ-bΈb(OE+s?A յXOZӪ)lsf@)00iݕ||: \\tfK'ӑ'U4Ux]' ?=ݓQ 4KFO(QY?(rGaz9#xy?qKd0^4fnA,ѫJN|R'VO@"}5"zcχmŻ\t;M VGϥ^Rc%`6fm4Sj,8cܷ1W\GI~P}+ݶ+4ˆO5tբYDB Ce>>oA:/GtCցQdOY$w2q K3 Sѽ]7/ӷ䢬"X]jb3MY.z_9'd~?8m)oxɏS@( + mMU&pw4Gl\ XJO-=R%Sټ[3%0TX YM*lOdwSKnU eŏ:V>{> t(8A("kX+|5߰c/bHTV4=M l8]x HD#u5ǟ8hC9H B!'W'0:'6{3׹\pփB LùH]OgɆb:@q%ݠ7me/[xwS_g,}uˇ }KjhywE'Np+qQ # 6*t*~)@ep%i6'ۭ(go.o.'0(g\{6l8tI|=U|Buv7D['EY\W-9!='[I;[ئD׍<'(4<ֳswxPWN"-+hq HOh2%R7 +0ks49vWԉb3RRM~Dpc,fT&ӟ'=!liO@+=N%ւD o-}& tG{vhr(Kc.q`Ֆ$%jy_E[h3z$us!n>prU7=h݋p~`!0OS^cd K4Z k >e_vr&#cDf'[G8x5;ǔK +ؿ2ݍYSL<`E1cl 8]PIč|Ͼt8ޞF\CJmE$5[} Ɍ4̿:9ԭs]Vx#VauAyiX7_Dgg·g%2BD/)$,`Z%8%ra%73&2ʹiXE< Jw.l(JUPMxK3?F"aIdش3YZEZ1+%}ߧ=>A90עNlQFUpKaigʶ*|5:Q;2[uEh+|} +1Bi1n@Eß:dl0- v*=RB8$θ&qFc,T,W\&ly,?Ed1/ZSZ6c"?;~y lDx %k^mZ~Eb(F:C#u}S)/"T ?4I=.iʇ|ޕb8T*bX7qڵ[B 4ݯ_Hgk] AN/z󧔸Gq3< 'XEvU +*=u/X/hѾŦypA~|󗇉q^Nl[5ī +1%" WZL褙Z_8(yhce4?\lQT#,=\ъCj+hYIW曋il6OsF]oފw7)n޺: C|~F|@oO@"kmTu[^cس6ݛ?ǩ{q92qx̱PKVHKGikщ._z^ x ; zuU5G7btxV륞gJ%︲$ AߘԬ&īƣ"9a=\cZ]gN(mhhI|+~c@(;ngJ +endstream +endobj +1022 0 obj +<< +/Length1 1708 +/Length2 7932 +/Length3 0 +/Length 9053 +/Filter /FlateDecode +>> +stream +xڍP-Lqh(R;AC$8nBqJq-RHq--Nyo2vkdBO.eC0vn.a!7^cݠxȸ-apLwT/An^700K/G0@x2o7;{_&kfp3 P-AmL00''3f'tP2@'5Lz6i5 mnxu +@Y6;ݟѿ9[Z[C],`;PWy`_ (oa;޺%@^J` g'? u+ 62gg ?Y75ܽ9l keE݅STaa>.!~~>nU@sul4@/}&7791wss 0sJiHIo4 #`pss 7a'"2f+Az 5y~iW#yw距\0lB>V8;תψsv\^@ Z 0Puucn[Oֿʁ!6F`f W|Ϫ ` sB05iÛ7yyปrs8,YYZ' +լqƒ?rl +.pN_/N/\9_W_0<O<p\w-x,hꇂ,d[ ?p5fX{jkr֘ kPжj)rOϨ+Q }|07*hY +6$e~,W^&]9AKiy05#.; nL =j 0Q٘1Y6Lwf]tHh (I#Jv!2[ g(!rn!^3SN_:IrOe8S4I9/ |2e E KHK? +?$7ة=V9^^:0_ֹ"iNgNA8 QP:T %*_c^m\Yf%r󘦊Q Mh(!8?c8Pa@ >n6q;$ J0hMlR⻘c(A:͙sr5>t(I +͏l!da +INb8QXpX` G?qkkv_%Xq)u[1=OphKݖ6 :]ʓ 0'(}ig3|0@.9fvݨ?"v-/ņ #!"PEc<_̷~(]~KftƳ'Ɨ"׃\̶]~JqÄx*U|Db cY7̂9m1A_ +^5G(]P|#h|1c}T,/CwNuORΚ{[-ϗKNÛ + gF + 4TxyZWAS}1&I2v}`]]QSjeɥgO!dHYQ?!jsϵ:.ga\C)[VphO.9 ̭o>:iYez-1q +JΰO|P6/AJ!ih\bt%__umw{S 9=Ƌ#jPLv![$;s im #AKVI]?vHKcnE}y=Nv 㻞Nr'x8q 1_8Uݒ` }<[>m<]@|X4ݪ195un;󇢼G#1wuh\zwg9c5e0Bo5L!!aNj Ev{Ж̌r!Jp3sL}QTs245_rjC֗ yT)r qӵ HI{sD{0[E`VLXhy R cRX[fJ߁m,Te,>n +(f$I ?$Z׸3c%9; +ܾKc4MJ;ȺO+R)-]0PGͨ]1NtT2L# X_l[܁%JY4ށ6v0r>GO¡?tKϯH['+6Ay`3}ԵdNf44pck#!:2K}(%Jt~W*} /V 6WVճOzA*FHA`YI;a2*7vL@P ߳tBH\L8=<x$[H+c4ϠE+!'}ʞvb]rX9f#_v^Q A9 B(&?g>ޤ(G(V+pvPQN!.WxOBgYC:EeޠyYTqBgrI..U,5KnS6`BI$[*[mY,T(m?%1X&9R~`"dS̲d܍`t:"E|p1nF-'3aQetɎCq0TfnK7~iPBl'tw]5/o'bg4zPYB%Tq,v.Rll]b~<|x23OӪ)p8v8K[ +`Z9+ш'do.'/" 5iAGR%;Tzg/鎄 +Z0_J*_zT^Mu=-Cݵvhzh„$NfP(޸'~g,YgץCyh~㑔Rc3SkH*liQ srnyFi 2I.,nnQcPrNV܀s*xHrD@;'}Zpډx&E*G2mV_ mvR2`&V h.|0L[7Ǣf0Q$2ZK"଒24 ._vPMW?.XcW6ft r1@,lrXP!Wi=>@EĂ~Uأv+0e+!8 N޼W+(ŵnxYՖ+' {6o|z^y-dqlٓr.|蜜LU"Y6T~AO<>"݅Y&Ys33 +jQ +d Ad)N4Cr/Lg.jɚQ^cF;W@G(L 'D3)sYK~j3* /%4mT9\ e3- +w3na_ԕ)b5Պ=%<#k#k͌k[N;C1@ϢHCS+"cv%eͥ]<ngux*cŒ\|zcNW\3r]XU.˵߃jRfyW QZ穣Hmk},_Uzp֊IWS 9yJP>{B ֦8p7+V |=C 'H0ɗN).IyOoB%q/$_#AApWQ{t"JɝvNvjZG:!8iu9ķPX*kNrMULCwC /LWiF"=:3e7y]*TUe&GbXI2x|m:jڧ8O>H6C˸x<&l1x`?5QjkY&y`|EXQs*H䲾-ɘw)F Z~e? MeNesOz8fK>lYyH[uJ<+d h0䷄%a) ں؎<2E+ăo + Cj(rpEuKjU 69l^'Ɏ&`6Br5Gj61}'1-9#H~#,! }ejvqO q!8ɤɔx- /!uZ=K~3ڷqw&"m^{".iY{!\xo1IAq"؟]PhC+150;Y +:itQ'· +]щiȸ?`c95/% Uv` !3&d-Vk='zC\|NJa}b ;Q3hkH1WT^om=b}#q0g {mv}#xl$M՗Cb_=6^Yʅ5C={ǣ丢ixƇi6&\jlD\hl832{Ak{C%.I˥J2iw2HկU|Ҟ{jBF4+{G1e|R6 +Kud~"8}O<~_Q1޷E5= "F*9.WzGb BgMڌKF!?BEޟ\=mofާ0d6ǷTjvx}CC?O\mӾM;Wʶ:iP1Cލrq+uR}$* d753Ӿ쥧 gtZZXNK!Lb]0?i)9eYKvvT s$y". P1Q{uvI$ƶS%0?eza=PxLwgY|;rS2-N~,>?[9OS* nϏO1$ɬt&RZN̑\2rԫq`lZzpM>k6Z(1ΉI8k;\zf\7oPuWlTS}X!gVp!Ma͉/]5j-#%4^?X|S6,vMA3v|C|@LsŒZ!,tj׃z&VzJDQfo&1 +7ˁ7В݉Lgի/ũ&tT mԄ9jrQlųD =ڭ~W[_H}lU+3VxɿN_ֽ[ 2PNh 7="1y8g뫹4SO2۞d#,,lcɏ[2Bb;~~~gsh#81-'%'ٷ__1\÷&eTQ[tψRGdH'#IcG2xusZ"b>x0iXms/2|m3S'X Ԝ柋߭e<y晰d acy;2U)>T2] z~󶙗m>c+?6/:0U;'g4P|Lymu- L_\D5D'|lPrLu_gv>\wg4:FE5߽LEj-$UEm#\N;h#sf2f#-iz:Spt={ FdQ=čJll`VVBt,~ +q]n>h}?ucR)4gpl -243kO4$T mƘoWl=%OpfNMJm!G=R1Ӹ)T.ʈEYLOslKj,^l͡ v("] .\N(֌|ق.^Us4syYTyz֘`^)X&F'n> +stream +xڍP +#www N= ]Cpww'h.3gfUVWug۔j ){;FV&>8+ RRlio/q']&tyTȺX\||,,6;$n&R=4&V^^n? 'K@b}hٛX\<'3;֙\nbP9@?Hrc[X:Gfot6& ;wW;S==@<@dc0pyOg`fi(I3x0vmn@KR*;ſ:8Y:839[A0}3ٹ8Q=_k;{w;£DL]5,]A%2z#38Yx9X GĂ?Yz;;މ|-@?@7o"xVV dniOw1?},=z, +`xc)3hjZ11{7+ ~8w*-_?ڙ_A7L4> 'E}oIR66ec}]]D}M?k2tڏ.E3R SeKL=Htgb~8T@=tlM$LMXI6N. >}kcwzO[FCso oswd (`ZIb|N`D]p¦j(>uKT%Rܲ]5%؄';.-C{׸;1aɊidrqը[#Ckh}D_d)B\$%8`5򐟳~{Kc2/c475i%SO A)#b3L`!^XU6(%!eG,t<1n+"LyJ?n!yisЀ`7-k/b!Zg(ʒ H@{s"< a,,:Ɔ$L}/(_nr6{4DM/֐i"@$<*୦n{|1J[1Uj]wճ݅dY}N 9~RL4[ib&6-T4%M0KLX5Y~Z ~u$͝MM} 8_6|ۊV'%kDY,mi+/ ,aNAP&TWJg=͋\1CDv&sRNTkAvŁ#ҭ͍KqD ޮ3C I{u`y[DEi ږ^5k=V3;,/5O_ ׮5I^A!1:C?qwnTȤӜ(Y8țsM `/5[rs^[}'y{MhnigmiQc6qL_c0ͻ3f`*8!9JX㮲)$dfagW<?.eUd2 eqHP7J^omHkS.Klr!}Asjܺ`joXZ--Yt.#-#ǟφsmF C>'wUn`oͰ  BMbb\Uj>C($~$hKzt #0z"ojIdWLRĔ dNG_w;Ulx^0Կ8b$yՋe< e;[ƍ8=n +$jPQ?FHl3_ؗGbKg" nK  wOݸ!!P߼UZz iH&Pqbf|.'ph _j gHGCrzBRw pCx񞢹VϷa]b3J3m#:.9r5֜hzw"3ZB*PX5 +%0M)>=N%R-eu RH2qA?Y!80_u yPd:fN,-z%K°"$e:ب*:8=pl2{׊Ez;qH?3=\Y.{!C[5Ig>~^k[IۂxSQE UEr R:.U gc=mvn҅reJFDCP,hT*&obqI]Ddz`(ګ -J,)E?.ε|>|13ҐQYK4gSWĨ ȟ :&Da~T48t^hi%Ms75p%"k)7X0Uzsty(ѾKx5T}t4|d28eZnڈxI?.rs-┻3_`[34{>pJuk  W}w"V ]}2º C|:d +VWiVtJLf'˵>%Ț3 e>$6hihT&n!x_& Qx{+b=fj!PgF1 Gâ\CwG2k#jm8OE`稡3E4<|U WJߏ*_: +5ĀHX[1D{]ܝ=?NŤOi@' %dd}u$G}`@=4QA̭X*K4iu/,l⃠APp0&gĕNum{:0H#oF2a!5S2|۞xY^*Nf"H-r?ah!5|7VA1E0ST9~r>h_û&DࠫY`0W&7Rb>qhDjWLI8OHrZ*lO-9 mV7&3ܒ6|OIr su {Ub4O5bb)#pnfL귷L~:~ČSIHkc~ AFPA+bSu[}3L@ c[WQXc1o E]~]S|ٸS:l݃ eZƫEϷO43[y|D"sz\]ll2̗Mzh\U)@e?:n*}iwx`uhƘ.p +?&<6Of-_<J4O1qU$+칾? & k}T7 R;bOE|  vg $_V <̓/DN&u3~|?Mek53(GsW`ye jО/3۟yG0z"UJ[OcWA$uC +Cg:S-mhʱ"0>1Ǟ3X&Ne)D)yD{5fċa}W7ձ˟a,mn.a9gPxjS,pXjv&5nz-eU.aJ(/+nα$R:[I[ІN".im@SNEh:HoBϧiV9 >M*P'3ҙ\E JL7U7gr93>: =SSm`ےtw@ ;9-uGC#*Jh\7%,&֟u?r?bXiHgt?`B{QO7؝*r!bA3{$5)]N"\Sfz+hIRo)[Q}]gBG3cZI %#ܹhjv1ZBmfqIn+Z7!&rGm5TXQs Mu~8Uӱ#YClD4f71TJf%NgP v˾ 'EG4iDLƚ~NP*^uw֠1(`px?g;@3dr{kC'sQnU\PZMe=p =nYm7h~7K-v!3BobBlDȦR hvkYf5k"㶶xtaU{$1))Wo7H"a\-I3-$MXUD$d Q#ys$J/~yɭ9L~kF2r\IqXJ~Eף;GZ_hCeұXځiF>uZA=.}E\Σ :RQ~{rPឯ]},͹0ΤVp? Nd;4nB4r"K5$H-i_nsӄڬj&|,S0)Ť^dQml۵nzR_RoD}.J94/@faPz0t\xHs6]xYtܐve&cءؑǼN3OE**7ۡDhsǬ +E` VD`z$\(w>(/vZߦfD4)|ds`@>FSikvV N)E92SbYe8#ǩIЇ[.. 4Z z. tu]mI$X%yһp/BYni/}ƾ|D(7ji8? z`"vmI @Qit;!K +|IeNw\jzrzPmt&ҫ5#\s=Xf6f\A@>`~!K^Aym5Rwo҃(Ιض2)c@?hWeS:c]0@P¨hcGaH~{>OG{;Jhku~7 /3鯇6, ֱf}SlA%M=// c+PY%e]sdlP0Ӂ^1}hecG^\㕱4HNYt #fH=V$\yu@ y!0=97M獀o-c׵'er<ݥNJ]R7nB:A<O@iV~ً;#θ'̒m+ʥ_Cx~&RfU_/2+gWi^W4%bfM +/jc}/ ƕfKҙqv>7Yr*F}b oVbӆ="/S3uu9+FS~~zP:0 {*g^A/0 4@ 1 fO0P= 6MrTðFڳM<5)|A+U<=$y ]sԱ \No + %FEd8p6:h=75ٮ:Pж_Squx@Y*T=f^ѡ7PKX: JZ"ъthRxpCf r~hx[mөN*bYXПtaBsIzM90uLn7Υ3Su\jIKC}Ԭa_{8ID,Ne'Q &fClEl4&*}l eaxBYRN1F}y0GQذLj5 5B$7rZ7md=^wȒX۹Fe5e(f Cm ]5g|CWEa완I6c.?]"qiپUY ^(\3,T_&cݮUpHsm /AneqoBcڼ*1:*r Jk< :+"4/_%7VskjUh,"1즴ӏk)ϵfm b#[pcҁP(鈩/rf=#J#j3ł%&6>wqrvdO 1%Ѡ~mA~ޯF|NZ3v_TeHO}ߏ|e܀\K,Oݖd SEJڒ.g+/;vUd#uPA@ +9N_uɚ}zILzV4`L Stf%]]U2'A*)bQ)?QS'% "8L,<#Dx;Vev:mhi)Y:b&-ȼK.(.7'  +=ۉzZRtX,.^-C|,i𚩘Xu MdHyf@ExDKr$MҲM ̊uk,Ұx\;6X'_]}9fPa< CIH7 +,fdg˸Z}N%m>/{n|Ch3^`yRQ"٨,vDؤ9\s> wy1Ep#s3~˘W&j e_V+^%g²`*jwiJ#B+0[c7n_-l%4%St+4sj< S;8 /#:D_V8gA̰9uiˬxnuBL`xVk7BoYd\ ;`Tr/sOM4 b3y0O[~\#A|3AePhwY"Տ N?%.γ8 w?PuyxMU:\mzlC (M) +^ o.jDȤ>\6+ĆPe'ک.dJӲ +Io8a24p,ƽ.a.Bu9'Kv>|&YjfksP$^g_/S%0m_wxQ3)GH٬۷zP^aCÃhj.Ynt$`v9ԗ<1/5WXDWZq!.ubHs6U Kjs`}YfjsoY#+v#VDi dlpDžǿ]],ɳ>/2S7X{c|.hAeӹRbњGk5s©Sge4inWJCx' s)C&ۻBaKg +zlP^SW5ѠCfƶg6\عM!Lb۳|bHs/eTᜯ`V))F#?P kEu{V}kjٖ@>}.|svr'2<#vcSVCu WlK΂M2;9<}AXPrH`w#F.' Gn[68ڤh_#+9-ϱ”T? ,~5/s e'jr)/vWDBRiYUdŢ;1uAZ]zR[Q u #uNRdO3+2ƻn^q6:C}e}xu9$A my"Jg+5B@}7~ҡ1y˒뎄/VGӉ.4M3&y)@\c#?җx.%67ű&Uٚ*K2E@0^zi]PiUC#j am8@oNm_ۋ!dۆa"`6jK>An$&JGm6FFunTKO.;Mu*MNVi:/`i*fB;4gl+dš5L肸%6۶o=CnƘLލMb$ +߁oq3~Vnҏy{5%NgU;4tQϨ$Z8|!yە ^a:Ӑ> Nu>E'6>J{P52@}0Ǥ@a̢F,X%"ۃ=\lu;0,'Mp,Ho}}AZAUp֖ǟfk_ Ki7?BL|XPI;>P[jSVgl&rh㔍,a#1"v0Z0dU)طrx؊viޏUr$~#U-8S`<3.ߚΊbJf,x ]2q}}쇻J n P?+/ĆPW'{[}Z}zxN'|agpMK>/K/)j0U`F?V{<%TMb>eZ.?T ze)jo4}<8/A'lqյ0:rA}ZvU 1d]b=8s-)܏R@=RsZҀ ޡ4;CfSL3=*9Q*m ix"xxt :jB;0q۟|UK] ΚlG1@&RϷ܍WIGz$|+M=&If؉vs{.KLmyrb|މ7ӛGa=bi'myLmZfAf$}GޣW?NUهc~ª'o=}>N"'CM@[W©l89o J}nHg IvQ(TJp"ʒq]()M5:vkC1k2+nӌ 9A \u?ksGmmX_ͺcg#kt>gMyVKQׂ '!D3ѐTfUUMWPlU6gc!iIF.}e?~ӱ`TX|d\40]W1,*/\T,^ izGO^txğY]K9z݇?n|+ꣃ82 978݅2CG:K韣ܶK&uI' ࡒp +T1&Hbn2SSfS/Pr:Lܘ j,>} 'eJՆx_8Qx+ĈކJ>պF3F2QX1${rH.{/PՄ_4v6`[F?Ku7_2|js +}hAiBǰtZ*45n_h:%Md&nM5]ɖat+W_aV. (L~XA1vzl GRbɪ=SH2ɜn~uOÏLʾrD% d`u1[ 7ӥ?;Kӎ:d&"9xCi u05ҮhB(bE5jlF:_) +j&ݻ<[C*Y%$sBJƨymƘmH-*{ђ`'bY3;i[e #i?s5 }|sƾOyk;j."8 +vc)SO ckM;Rڔ!@l93TU"K15ii[! * |c) ֋} M琓1nبcen}ۃ(S8:+whl)"XV>ą@sZxw7ǃ8^]sQީ8. PjI+> +stream +xڍwuT- ˆ 9C7Ҍ4H2 CHtJ(%!)HwR +?ޚf>}ν޽?k } + +F"@A@顢@@@$ DaCáT9(!/ + +Acr4A1)Aq)_@$J + qHԅC 䉂٣1+JJn(<`!m}Y#aPFpأNR Se'pzP( jEy +``sECPP&YC.&W Wh;A5< HqvCnX[#:A0 AB.HL? C0ߛ + ]Q0' ŒA lOBh_S֘Hw?- ac! +USI3amkO'4 `B1?.7(rz߈XP`Fv0?1i1F(L#BAO p/a7ˊH7PH +EEwVsE$9? +ZHlX@T%m-/a ! Oap?1e1.yxG?̭oM xEa;PP$ Gy@mt`hk?u`VP % ?51o̥.A1*k/+ + (ēL$ +x[~ƴ0 }H~ %B +^b~Bq?;vE0-. o(jM<=rj8/S`r!:~yzњ +ۦn)KTBՎt>)Rtӕ V|>CT/v]4]64M-6vt_jzOGӶܫ)9+BqD)2ABB'Q!D\atIX~m~!ѕB>lr +iڎlV- !(Z +e4WiC?ˀNBVe'T,'!hIm+jAMiG$aeF.@M75{+*' +/x(I|2zO.b㖴|1+;VۇC-vvXH<S|5 } hNCo9}ltg?_I4u^}pR C賜xubpꉈw'_7hM ٪|\%{7!b#.5W^ijٶ2 +zV"ws x,@͂sIՎi@N3R{)_h`<7'o܀_ + UTذ]i|3Q|T;^wc%>r {'^6TAT*7DS]O}8ʼn 4}{pQ)oUvmKqSg_`3DFZ#%d>5*]G:T`٧3ʃj(Y ~_$>ʅr%.w;V!4@S3r2ɢ_bh].S2kOi:T"6=BVَս~Yƛoޫ'zWʖǷ4NCceКRMGS1ߍx Z#xoD?[[5x ?xcݫf2^24/oХP_:,r)x󾸟>B4;I>d;+*AN赱ܡ z;ԡnFyWϮZ')]_#q7zxA4< 33~Pt똾v dB, } H}j;-s>zH{i3^>5*ѯeD9Kjy#U˂>.TW*9 ΨE6Slۏ"ΎXQ!: n.`^%TMoOrJ8|s~-ń v@vvFj=lK486bX{wN)<ȨW늍J4EkhsFʠ}ye1۩LUe8z5>R||qN 0$]ip?d+uɂ4!08a[MJ[|~]e>Ǫ!pdoi#^2G:UxwMoh:t#'q\7&/ G :+ȍI"҄g{6Fs3%bg%gYd|t^,AAn`FIB*`F DB4;)RWeKINMK㍛ fj;pTc%%d n*`{ f9T/?('7`q%}vT/Eqp>DO0%w4s>t:[>2lح_ܫgɟ)fx;ZC+FumCGiFbBTbRXMp)wBQ Z :$.[٨}_ rp^ޕ=kmR)p@P݌n7ZZ,i26.KikGж +Iwoݻ"`hJ!04q(#.~=>ౄL-Od<5tga^qGb2kh]uumG3&UxT,{,z*^v3K05wdu^sN[IֹO|EZΛҸჽ[JN}fU9^Nffb 2d@bˉuYxZzl?6>ߨ/kŧX3toXjoc޽oi8܈wyYs̻1:w[Rܔ2J9Xo23#Ȩv:0m 4]~:GrdJwN({;:tiWXBWK='-bs +.mhN)PEONhF*_<4#Q~=+;j) ej*/i/hy[sb3#{5 +vOj`0p盆2 *r"zCr([Lw͋g(l U'P4LaVNMAbl^UP @%2tM "ak=X`F>a2Xj_M}PxЫWnX6]`lq-Ǎ}35[^4і#'T0x\KyHU^C>nx=p\jQ +7=u8Cƕ##N'}E/G[1+KbLkiA +C#w;r^)yۃnsꔫ߳8P凐I8"o=v#'yTznmFh>uA6kzᨆzO (~;ZjiL);6~"<Cy}Lb/N}p j6R-6rrhEf2VLܸL:^vbn=a,{j +wU;(v)CכVln`z(J/I5Zv"(A̟@a +>u>l/6g:=(۹Ж2UU_GSnDZ| +ʵ^JvT5l)YuX`{L?hXqT_WZmj㢥N_e/g4-Ը fVM^ǒ{_+|nR1o?"i-,\2:eHI+m+o/D?o%ԭ$f̫NN<8Rz]_'-Ka1<[GسF<ه0E_ <MUqxfr4)J 1?<H1f凑tX4NO< +RsN*v4/[0#99tZw_WorPaoh%*ѹbX oE#aZyҲd⭕pXarNB˼do- ڇwmr\ATo{BO| 8[CC!<+8PŜmUVzƮwB$UJwXv霿@dMl!x珘JWujjtBOyFd iJo={un5s/bMkܨqgk .Xx1&jIy:o(l;M+8Él{U]J2Kq.QGw>޴zA3(}7+>ݐ'ӃCeKrax^Bې z  r"-<.Ef Y{sJ]ӡ8DJLk/37UND< 5> +ߐpq7і=6423~xӛK,K|m1ҵt0"P~pZb'tM#ܽFSUm%V>1ԎW<~n}RIMf|aڝaN1>U/uWljGrɉ;Z}Sz_Xr]Dyʹ*oISz2B:T&` +io*$"KdPtq&ڞ%-D9G)/ZXq]^,(T}:N$<$3"qSkFjcԧXtl{K(UaW2FF G(|(Y\xBb]{WyV7{EAݮ"DЇH!Ն}_=nNa\7,>`7_M=Kޱ")[/5[?!*jrSF$f#Ɣ FLx}vza3nצY#K~v?b޺x]ځ;gcK 8!rJ5Osڸ_4VG6uN),}ly2A4w!:,? |C$'9G⬃<{W֎ԒTc샕<$ݼw#ERN'8ylEfQngٞeG%nNDËQr$2'N7p`&a5gveIIsFf`_ ekM@?ifeU9.e8MF4wnԒzs38EBMU4oGĠ2, F5N/@nܤ<4YUrMru !{;퍪qKsO]WɌ{6FB]Q^ T~:3_vVhM3tW,s{Xr;7$yubMnDQixROVvZ%o' kӹl`{2eUZExtbfLl+KkӀ"[%T\|Uއ CY"IOg)#֖2PSsm=ؗe~<6iL+oeGqFz늇аn NiJ 'Hw 2- %ĖݽF&,'Nr!; D3#pC< +mX=^ /%Y^y~ɬ/:⻙ШVEry.cf㛗#+~idMBC=q vuCiAtڛ^{)~7L \]K~(<2jGxĬYOhgݯyA&b)韞+x|f9oDW΂3IW[KCm#%6AiAx6"OܫyʸgUQsT_6j|6R{cE;ߛHs;pY<M{~Ӂ1xǍOyrVD,Bwo.Մ6|N7T :MEt瓅oNU}K(7ח֩ѥ趈NƓyIfF.F;?n)@bU)jξdrݰtNjβ~W"6l?(@['&x%dyzVQKy-_jw=Q2B[p{F;3>v!^5MuM e![T(wTd27K=|Β6D+$tXښm_,7؅'?RB5RCuγt)=URɊ}6}/{w%)Kki59˝iRMt@ى,@1#w&vfXI ,WJ \eV% X,dN\T$4:=;oEcwMX_'EAd+ߌ +endstream +endobj +1025 0 obj +<< +/Length1 1730 +/Length2 8572 +/Length3 0 +/Length 9649 +/Filter /FlateDecode +>> +stream +xڍP .LwK#t ] ,tHI !tI YٙY:*5M6 +HH)kjr@ 7;ȅFGvw-G!NBYHݡ2isw2 p q . PoC@lPf(@@nhtRgW;4ߏFK& ? G+ ln rf4whB, w`uwwb7wtcڈ1 dEb;@Bbe +@`K + +fh+TAN+i +9Nv+gsKK` vTeݽYNV  PsOss(ÿY8r +m>i+wkrYѰpvxـ@ P @ޖh8PrC9:CP 5f z}Wqr P1O +`'ϓ1tì N>1by-E5Ey(x|8l\@ W04oH[@y'k@O`j͠3y/oEnV$Ot=ܡ gepq`7Y7J ni=hxH q=*Rbx殮>h@q|9WjcNw J` qE5S>A//p(* ^?Hji/ZZ,A8rX9!Y[pyAh  + Ap BC~DAh" KAh^ 4?pu8&2A o% R8Ԯ&Z̋mkie=*^/ם~6V 9夋UP\YČQWVr\;L߆)[E +Bj3Ɵ{Nmf`Ȑ;ͽS]m@(ơJ!si?֧]soj%=.w#CraTŞ*g$r}!!HRht佖*K>4yos lOzӐtLB* e`v"Ϸդ Q0kZZF5{^IG`⥮"|BBMX_N[ol +)TaԈc{ +ԫʐ/8Rֺ;_dB{ 񙰼n p C9ύ5bn4dDw;e/}<9[-n_"M4ɺ|eMX]?xƋW6a@zV إ6% g{CjN5}@3?ԈEUJHODT3= ҮgnG5؀/s=ߝiXءUxwX鼞Dw>Hb3c  sza48X'}n\RT:RBX 1%+E<;ۦI)}S˴=b̒Y]-)uhonL6L"yXgf>'ܛ 6v]Z>+C* u'峻x6az֐v +uGx4&syP;Qɜ/by~]Y K%~~tIND!̥.͇_gkM .\m718T E82y'37lڢP%WO|8 q=v ݷ1Z&s]fߚoI{I$1#~wa"|P+Bv)hsELw*%x?w+/c{Tc/vK7ԔN%҆o`ω"K p:% bmZzQɘbZqZUG$:!Y4kpNGWoF1}(a5 qИOEl0\|#6(F] +qF8#>m(ֱ2v)k.]:z|`3^<> 0  w(\J ﬦ?1>pA L\dK [ćxSuGVэ"9P2l2 MχKo$#xlX:'gG=ȀeO7yN4-dH &ɟLKGT/yRzQz?petIVWBWȼG/Lkn '38Ӫ.SބŜŖO/KLiϰN;D('ɾK"A6wUτw'ܰXAۡWhKSJ߇Ҝ>2)9ċO e5He}=y[,F[}+LRm<Ѩ $Fex{$?8!6f}+O%qUy~mɼ"zۦWq.\+?Ś?#xhqEכ^gZDZ/̯ V zuƻPDcR`n"[EH.n׶,]m0(>$,u (}7k,k`z[_cdXr-4Ӽ :BnT_ͬOAQ~D/Y`ߟBe,. }zuC{ _zM^^>0D<\ me@DX[ +,{5~Sc55"R&K&hX%J W`.7Ǵ~Xp(e^]9!sZf!Q^L}k!4=e¯r}9Ft]0U%1FوB`)V}dgXzKtw-2Tf"ƶ-+H[u؅>GވWC4qm_sWC^>ЮWfl-dOWOLQin%IGK`u&_u~35ŭa8;NLt$'ƒWqgLga}ggH' 0BIl΄Pg:qAm[ 4@) @*Z* m[E(~zne{CAm`P@r߱%!8vMjvkvc=̄}G/Tq!HjwܡљuW/*˝ +o;h`wtZRfAݜvt1u(n:+ŧP9pAHB\ b0%I"}GYMG\w9|5*l]ӸFJ'KҀv J8"H)M=Kye2$gD8mwid鶕܂o;Џ`5$Y;tS*ؗˏӚ #5MR 2ĚgK8rVL4j7p!aT,`>s<VgH o=[łֲ΍Ь[ }<(?5dg|( &iP&d\LĽѽNx:a,fFcd= GW*;TNṟο‘zG4pou'+ +I0![,Ց3^p+>2̹ԉHq6Ʃ.Rq:o:7̙˱/&]YOލC&QD 2SX:FXVmjx{v_q~t:{OEZ%/[? +%8=%JuƑ(+jٮJٝ>mqe$\F|e ʫw!MnGJV#ꑢIxhw,ߪ=Ag<[\i`H[}_kzn6(#&)X|@03kYɦ64C8NeR~>@6CrQiza)\ MܰX]De GKmr>K}tB][|P@Y\?[\BMy}b@ɕSfoWH^cLqdM,#v3M7~DžSԙ#3\oiI"MLk*N"ɥ:/e +[Մg՝f/骶IǛEeobY61:A\'Ja;o[Rt"BsO()I1>֯A +Vg2p̕~DAG +W^?JM桃 0o{QelDюD (_0$罒E42<@sdQļAף a,!jND9.efSz)V&mt +8^dwlo,: K +x"Oc ީe&^+ Q+ aAD2+=/iL$|+Ļ} ؓsEWȎF]%P1r tyA?eAJƀ/e"2VW9ɱ1ƍbB9,qRM IEK%Af,&d{S=AC6TfID7[Ȍ҄v_lUWS6$~^֪ЕRWG2\n3}{X\]+4/]Lnv-LsTP~ +ac'vPj^|C.IMAIAXM0+z[hm\cdM-Fݱ>T"49,lZ1 \'l [M"$*#x +ި?v+)6.k6Gƒn2p7=oy<@c8qstX|ZfƹiMx2I,u_|"#;vl"c4 rHO!nc JhyB7TL62t$2W5`rFRJ4ʃ!eөZWHml{8){뷅 w<`5-8gcTt]$Hؖ5QG@fe7a%+%=')[U؁mU95CN/̚RG7OnaMW9QvZnu,¬v,ҚMHKuiSi *>DCfߏ؂3})C6ZNR{y!T{ N0=EjI"nO]Bag'8xꑈ8\#/ۗu應3ͺV^E/U*04_~O_dj*&G*mY:C%Nlvx1344SFX +O-10☃$D^3QLh>W3Zhp!!j,ݮvGPYM#Ǭv8N*I]Vs<$:D"AZoh)Am%wty*CNV2-c}}$ SUjvmm›@遍H5o~ (8lVO(z!lh~I7M{6(cw@׷:ۛq +΀>OU vM^.p"x.ެZPw(-{cCHE\m&ΔƤ +`l_˟ ^ӠղD}ڜ9\殐0v=$spj`#w.2*Ad=JKْۗ\usҟL4<%O/L_T5o~=~(^.e HJМ ÖOy*%jXm D"\"L*-Wּ8z⊞UtN7K ޘO&ڝR5;$i vTg˰8T3L\ lymo'OqإKS Bu6NJ`OEWNՊw<U_ɁC%"wisE,W~찏{7KN$eg^)16l]z)j=MK$HhDv<}3llض6]ktp> d InsO0`YV3,g[sޞ/XJ]]c2:㳯*`Nuuȉ`@@6C1B.rbv6JD'N~ZWeaoq2j$G\Px:n)W3IK4ZfQR1P̦̃TM<Q>/IPxFdHX,]{% ȳJ{.T k)xa6E!LA @PjGE8P~Dս@گSY/+K0}9ǻ]iU.*ZvnJ+;]8M펥>~|arVx^^(u(j䝅ݸ䫃t}l`>BDg1LIP[2*T$pJ7sG 1#MHОÜ _ za7CJ1!| +ڕN"0ru@ ң2TS 1۫ؾ;)..K' +'k&S/JOƫևB2=>YEa`^&!xa~ymP8]!>4t5NƦ\n@CT9V1(s?G%)$MMPj碋:'IJ)9_^ F-Npx?ՏSRA>Ea]h+Vi堈2Ui躱|a3GzKi51LB86OQ"> 770OAN27$>w?Lp_"< rA]֌6`ँjEM +11d%N1|edv +&A.uۑyp܎3 b15`r-\p!";޷~ +lj"b Q}4t-@p !K V¢QZKm@q';8/,mr`Y9a}I5={YmPĉ><ll,-W65?΁_QqhFڳe +jg sw֕ 7E~oWpa#{BNUn*M~+Ǽyw4 DĬ ԽAр^fy7?.s­@Ou{#]?0Zf;`dz=J?XSr3%*+2l|z{>mnM|a=/g?jρͤt_\sUcUl!2ffnpĹy#3~f,,;CgC/ݹ֒hI24rD$NU>w|@a8kQ8>ƽ)܁6G3ZwEԬg#хsaJޒbyjgS\Q țM) 'Xӧ |Slf"kM]v+lN (>p5.xr%Ŕ֖̐[HS2\Ee1`3:zyJʬQoO=Jx@jJ$YG OjD‡?m,['v2?* /*RŊ犼~L i[xJs}#>X&zbeZn-A6 +U´t5ʇmyѩi<vΏ¦`,! ] +ȋ{`(mnXWD0Vʍ$)>+%%)J1T"(D>#w9#X @1$KtN׍En.? {bXSk)F҈uّ{ז>~>0ϝ0оIZW %*qtzq5JE6ıtm킔7#_i0~8Ӥ_TZbZ + f+^<Q&om#~֪2zTCN}V>unM`2`E#(ieNU! fy|j< +qyg1% ^C9.C͟ O˥4g6x^ך+ZqTS>gHq}l'aSNLt׎>'=YOFV( +~K !@դyR +endstream +endobj +1026 0 obj +<< +/Length1 1465 +/Length2 6640 +/Length3 0 +/Length 7625 +/Filter /FlateDecode +>> +stream +xڍTTݷI.A@$f`NA AC@@7ޚ~s>qϾgƤk'g)àH> $@AK_ (_PP@ ،Apov8h7-@QI @HPP/G\hhaPM;8"ѧprbr. 8 +вF:\'ZC0[0HWI~k? F:AdEmM `Fp @ (ځ5M+?_ֶ0WkC@eM~'` h A` we9=5ߟp+C~1}JP; DO ٢oKw[0k{0;)遆@Hr~YU13zE7~PjᅟVDnaߦH53|4A}!ϕ(hdT"`uG"X&f; @bK 4xf9KfSw I^(vz0TS65a˜tG.@5K.갻k &5v УyC.[Z+0 .FfY-]yrV8E06 JHfƠɜ"8{ȬF2 F"sGzalv4ƶ=u*seEIR΄D56M"}pynҔ틹PxkΦքuJqVoZ-46XeYlTKbsj?]P:OphJVRn7%g`W=b^ ^> OneOovyO.7\32t=oGN_FL.j-:(N J̈́; `OG.X,Y=D-H]!P 굫^.Ĺ 30J83y>=\cIfW9'p W͉(= e";Xk )ٽ +-/޷?j^ú5D=!L^{I睿8W-I4!z@M(Mv1`s,2RfD"Rn twKk0H+6%VS5*bwIpW"LJR3> +N1{rXFv>ʘ!{Xn[Amwgh[aKR5ɱqd򱂒z9KsG.ZW#aQufR}VQxDQ!R Yŏkߓ!2]|dyNW$޵_M.~bήډFi˸i>a 2. Ŗ$05[5kg&\o0^fE.鐳v|X%xhkl) +Q/>A>YwC=ǴqEԛ0ň="أz7 {Ј{fٕuJn|l$ K铻1nz:'v1_LRv>\ˮwy7PFpWmZ=ҫ + Rf/b/tFA'Jӊr;gۻ$tvӮ| W "ɘ[<S^p +r08n2w +]F1O0U3Wޫif, y="=Gzϝ6UObȦxqAȊt!/ۼ>WX$JB(6(v}ib8P\9Y`$GU>Q3xzn.сv^Gߡ' Y"ku1 {& +'W_:\".l5ɽǁb48$F?S":">Htg߼_l X5|mʈxV[ک DphU_!;2iH]e ?JN87HTFS ަOr7ˁ.7*_ TZU*ڮx2~Y,zO.m4zX:&7Fx_;U0i2CubGLsԸH5#yna©-{~ 8_(=l4.n5G^XY>>63{bSR*"t\H\;L2Neۘƒ~l,C9 dG)NF>&*l +N\x 3ד߆3EA_gg%ƓxA|~>/6SoO~i1~jrئ~cr/c$1ym.gPمdҡX^:FvDye;lmR P1V"tPq򻝹ᅵ`J݅u2 Fiۜ7r}.{)*E"̯f9,3Gjrګ{G Z޿YˑRSk=>Vh0.y3=SrPWWf!v$V}_ZSϳc,_xS L,{~$\]WX|r)y˝Sy1 ˴ش5{ms>O_N7щZGݥ޲G^3+SLj㑖Т&;?;y$r|-ʰX 7'fuRW_NO)㔂mP8hԄ/MIr.aQ֨uLx:}"[DR=]j .|=>!ۄ0#nGk)ؤo4eEBP~K/G9A)IYaE4|F>Y(郋W&=4zgacgm1k}o;5hZoq8P\'J+JpUgaӟ"QP9ES][Iam*ZHyxzk5Jy 'gA9{b>SЧ$A>UF1l[ +hxOI-H=w R75w;xfzL3u\&!Ivŏ["%]I_gzEVa^SѲ)-hS^LE!>,4*4o\Jxɛr}žɓpnV>~ Klځ>6gЩwybzR*;-YIGu՝7AOqXS1O˻kH Vr(%߅.ΟK:|(kf~&M2Rê+tu٬"(A<O~ AGRC/ Jvc[[8e3V<((m̤ +he +.rz_>eLʥmdATs̮G,n':qnN C|շ*)eZC8nǞ'S6,>X5*v_쩼o5}p: Ji,z.3Uov-QBdMkU[SA%W첃HSi;qGom<=sAqʝ.΁gOys >ޱ%,b/ xVΓnM t&x=D)3^sq.^V3bо/\YOv/E.9/c]ӟTDq1~ 2Lxs= ~+<L~Daۗ~`ӚC/5ٌX&EJdxW=r3 +xLB4 dL{7hQ΢=%FH73үZҕ2稯bN*7%S'ӫl?muln[QwaNHv9>1Fi{zA5lmX *(.tT#,f`hp|D华эAqDIGr4˾qaK ͵,dR:8@zӆ`saYJx?Kcse9~@ZjE2\(ΧoSt= +of&}0(XdaLMc,q qK q5{t Za\M <SlZn-}k1&k峪_,?ՠˉ`2E&Iג8p8 &z0fJHtG6FCpϯ mъ6zsМt^`JnT4oUH&pa-+Ga&˄IN{=Q/g,z%e&ZMD )UrQ=W+nޢXŨ'Kc@Kf6e!SkQ2W]Y ZY%brQmBpYKw]I#e'c( ?҉C7(j|6{O=vشRsnJZlaoR4B3'|Ro9{@ԕ]dٝ3|.)S-7ۛrh#=BՄʂbM?ȱ!ūC|b&GX<Ǘ%It]ioaX_ZF;"9J4NqWO>o"bp'^)0?&ܶ +"6`F˩qxD;uQ༩8*Σ͠P|dh+Z6j;HSsW:9ԣvp̅ur`i_i|iY5=MU3oT8܆Z.ĔʛQ|_ɆM1>g8Pz˴SK5}ZZ?(*[5T1% =V-"TJIaz@_&ljaRGn= ~I +endstream +endobj +1027 0 obj +<< +/Length1 1497 +/Length2 7631 +/Length3 0 +/Length 8638 +/Filter /FlateDecode +>> +stream +xڍT6 RJ9 -!93t4ҍtt + +H+!H|s[3kk׽tmV0 dՕ ?ć̬rme6#puAQw69(.Nx8(XH@" +D䠞6u +C2"\}Qwk `fED]`P8@h u"`(*&nBzyy@]<w; v.C=a6߄P_xpzȿ[38;XȻ  p9@WY +Wy.wB?Pkk+:8 +j<(o +uF"Pg]C +!\QHoݲ<a{ ;Nwͭ 4-XNI>]fg= )^,T4;shD Z mB~P死$~3bToM%Z\& V +¬{DP%?;T8#o1.F|EA'|"3^D+[iX<9҂^/k[Epwn_qf{=\ZƱ%MDBnje-biϼxxݸ1ArlX_"TE}egf+^*ՈI +{8uZMHID)׆j] qP("xA ~ӺMJḣ܉FF` ҢS]AfF oGkYB? v]ZaVΒkhT[ su„E*^~R;Vxh6bBm`rѬ'prcqlo`9 W9۸[,u<hJӪؑav#!D +r,](r&Xe+_,-"&4Ns[4@m2 j;͆|R 9#~0:84hv㵕T. ɲxcl5#l~@AN"sDM8G̷ٚD߼ A*/~4ŶXo[n:='"k:=$ALyQ~N{>!knT*B\6V }y 6S<Lɀw;YQ0q^$@wv =,CK٢IdwzQĐp..O端۞tV3i:Pk޼2Gɕ1}<[ k1ֆg>jGZG B{^F=4XŜTT6D_VܲM"U^}f偭)qh&!挟~r[bv( @ +baDK:ߩڽ +S!xopn{IO)3\(Oo~;s+42||afT!y/y͈%*4QJ[5n&xE|`4-"!$S7p^e744/BQ;맇d3 +5rϜԞ_v8U_e[|ɩg"bJS&aﱳP0u8=&m}bZ.q:]e5Iur͋r1yme@0zOlR }X +#u2 y4/4WJ ̼s=֐C*Wcz7bb,ĦWIl8|t٢]ĨM7v`|!-',GyMn<}TZo~,s"UjM): P30}|KD@t{X=IoJ?&8Y$Dv-D'OFֈZ.W&k Jӡs3>j.ݡAgA}ΊkF CgǍy<]~Tf)jp'ˈɘ=姦 ӬIwop2\N)?UYm {6}8O^ҊTy'ֈL%7drd#{WjEQag ~ut)o'.)gޝ˼asݔF? f G89v 88\z=-6ݽ!rդnTH5D(+7uΝถɗ=ñYOѓ@3,rK_+ޗt.@#,QVvp=9d+ۣўE2f&JYZ\WU)8;2UƋ;lW[|(w[&¤裻1Gm +WyTu#02 =֪e9)2̖' my!DT ȄӟWC[i@q̙L]O\9bLo< "+zUJ(}Ӡ%jGfw\6hLLe0|E3\E#A[m?#OBUΙTNZѯN<zYق xg2Mc݆FFHz:#بM1jE4*:"70VmVl[5S g^YRX1Olĕ4,?9}y)oJP*7|螁i~f@@Q wa3XY&6F_+۵@NvʩĕO 6Oo/>O|iO kN qzHS뻩Gנ/`˧ +Z%Cj&oUVr1:zRy}oݸgcHʓi\Q0ņ 4teIE/)nO/ӯ6'<b\fuCWSi̍|ώsk/.c#E,rAghױ)ucWV sǙ;B=8SanR}q,_dyYšT (:?#gm3;azE2P*ػ@A3cبlq5d0Uj 7r2`Jh_X%1Ij6I"7+z!'Z Pȫt9_ +cR[&38RTg(繕<1 Lx޽~.h  1W7ƾh_ҩϯ_jߏEXxL;hZkU,,Y uN 󵣉wðӹ=Gj7B1\MYSNRHeSKKi@ +iJ_ѿXYZ +|g65{#iڠ+@M!p" #Wʢgԩ ne&P ^_qߣ. +E15ll/SYs VW;w3iÐ__ +l}%V,?wIؽyb91TYà ۈpsGhW.9,',Q)ƟxÜq0G~  NǛIT`۔lW)E }ŊQlƑi[2gO{r*q$稜*|g;5 aO b=> CFcH?TU;vNx,A6MP41c!rJmbqe +R=9W<|0)mFZw/Zuf_q{=DXQr& 4=zO&a]w`oV!x AHKI+XL59=-T) A|1?<Amw= +V1z[3ܗ넆x<DyJw1eF݁}S(H/}hq/e:jW #1.M"$?TS +j55aF<: LOI驳gӉ߳ +2"]vCi-&BmȓD0YeFi5`xK+QX%^F)2MfA }ZEµ-A&$<;IM2*,Lss2ձzwLe8զT#b[\>peВZQ/1g@8#D>n]#Ŭ +[iւӲni=7/BHLLĶQ8uP;[znb"Z=$,u1'^7\xQO5ZOQ{g {=svvlu czxp>$I(p /vqjug\$)>(2P|V箪+]x4a.ȄG>DC\ޮ)1%w4 `([IxiJOiϪ&JWHwʜ9 L4-yʘ„O9_^_qɔ *֜ l~pj0b0>XvlL'uaL^#-FKB.HĴ6bWRV+@qu~n7>Bsl75fjMz!pd#uwC 4* +^y% <0-- ?:4qj$EܲڔH\quxUҽ׈6>Q֭S{ؽ~_̕&#8^:x=J&}&>|7q6 a9fwJiZtai~A`e!8r;Hc*t̾T7͵vЕtlQZO_}(,jƩT!k8 Qtخ4xXSHUG4"z3Cdtr 7Wikq!\R<]gFVDwH>q|3l$fkydR\Uo6\?)PVDNڬ]^!I/\wlPS^:zSm{Y $~k+ 9|+y o0wiq/wrW F>SVn9?F%㽨y,@HICŢ:/ch_s:B"g(TڡJTA)wfMaWn>:^!!*bVcDWxXq~33!x>BOz%6@[k!ɓĪ9t^Ѽ3z(%7^A1˻5=! 6o?ЊrikH"bY»&Yɭ86וSjܷU#|~ۑ>\JI;A؝&Ưyv)btgx/S5>I͊pa0 }cpٱ!Jva7Q I7`J +G-M QD #s`* +rB@޷d?(A<'6Y-H& !a~>wZa)8 RDIhCEXL5 ȶOLM)^f`x߰'LmDJJ#Ux6d$ow=xt<=\ڎ$pXJJlJ'PsZo$4M~w`AT,so0&%9hF-F<f ۷}OqSOƠS|U&_RZ!dB{]u?]~JpqTZ툸&/YX(HXHӜHZGq Xև G tFfOjw' gHbe ;s׫ʠ =}i6^6KdF3mL +BZG> ͢bBtʶ\#ʇy-Itt^ɼ7ŎFxcLø;yWx8O{qUxUd_ +endstream +endobj +1028 0 obj +<< +/Length1 1393 +/Length2 5926 +/Length3 0 +/Length 6880 +/Filter /FlateDecode +>> +stream +xڍvT-ҫ4Ԑ{E!$"$:JҋtPRW +JSH)s}oFH\k/"cPàq"` Hkl) ā / +Lkp"1hPvG@q +b-XKɂ@1Ho ]D@R*c\}ܑN80XFFJw9@pG h.@' .c *+*@-a0B`8a H 0qBbč18/; a4_၆#cM+ l` ?] 0(W(v8 ]}5 ' ῀P,_"]xCj(_0w+ "]~Qʪh2BqX_SA#`csh﯅ wE*jFy 4UC8$#))!@0'_M|\_a<?W+Ot@(PO߉(` H4?aß5ݑk^{`?Owc.>߯))a~" i\dRҒw@ OCM *r0x)#(_o.W{Cj..GB+w. C#=PAPD;.$đX57npA, _Wo:3_UE0_HP +^cbw)[Q ×w_׊;OWk;wobf _r\%d/:fyش?oά8J;"?:ko"?K0䠵&d>}*%Z j% @Rp9mі\7p6tqWܭ=L4MߞF#㎔ZbX|N-~])Yŕ3ʔU%S*?Of-B'7ްPȈKy +׷W(' f,0Fyeз'\0+wܶ&KcD2U|?-t=H%릻ؤk͜ӣGI|=«;IȵVl.o6ͺ8,ez=FlTL_lyPCjQi +X})եNoﵙ''_7M9\.S8="ͺmQxbg]V]|f!K1 7$>&*s~{Sz[ gm^`%cq)4ǛTυeG)S$5QiEIIveG> V>gOp%eKFE߿^ +5e1d1-5*3Ae[@ZxWkM4}RdL✵*el+].ݕg FyVDUf=m#9|չ@-[ɮ޼BA`޻z)#\?H6YMBSJ4}׼O%]~Bx.88RU2}L^:XGic})FK<@$ / ' ֶN X^F1pPj1Y-_kLh1B,e3zGrK?]y,Ӝ٣f[‚۪ۘ NÝlfCO{TܰSV@No6\RzXWìu~P9K%L `q2!X~6OR[gzߡe+L*4oo^=|˭\jQ~(eW+8;lBדok?BadwչF)Zu eS(-p (5y2lĥV+n^ +n`Z(DY%ߚv pL8MwN竴{E :Nd^\|p%cz9ac} [M- 3nqLt1pװ*ɥbJ$%~fuM&ϛzNvR]RO k=U4+ӠC +i7v$ѥׁ: ᇽfl6 rjQq-Ʌ;~gobY/}SgDT 7uWwdL Njh-9.Aވ, ndXJ4IQMQ ׇ_j5I-puJVo]Rh1%Jv4//PDOeWs]_C#,unӯʸ@Cpu ] iX?eܥeɥl~oZM^D,P8^@{Ee7ߕ9`ŁU:VǜKƳ%6'NoMlA*m)j6OuAJ%cXRV(ʜ}!L$R' +gk&d7RpuE^yD*׈zB?Fxoƚq)5 /MxY[8l~w g69*uܾ0(" lUsw>] Ṗ.GqDױ'U}6`bF΍!w3k܃bR#-k^ȣR<™{B,3_M i/OfVF :5_^fEw2d$EDa* 3?VpΚYiC8`);r<]hه9 lfS 3| Jb~50o䟯cTY}0쨑sdZ|׶[O9ť"tu1J\wYfz5%!rt t xJFTQWl^Xy[dsN^f;8KXTĸ0Tb&oO\=PI5 +t&X%s3o +S-(!^xnC| ?q ͨP][EeT-Jd]$ztN9u9[}Ͼ+Wjlڗ#a| .p4/:aej?!VXL»|eCU=6,"<#$n=)4M)_/=Jζ &L cFiwyˀgv665caAC unG MϵG# Houq w`Ug#zHcBH/)`UlP ssvV90qᮏLb6˃`9#g sqFBVjqĐr7*n.{OAIϜkp^R1蕮`y&v3-S%;Aܡ)AþN([ˋ#ywnvS^I?Wz1B[ +Ow-(|Tly}1u5h&w%j:iLjWh-ɬVӬFf==7 cև.?t3JKoPOH-%ĉ(#6i.I(bӺ岀a֐HOIT-O 承Y<+;wtbpuBse"}1/inl'&5/҆Xjy|S:;sk~%DXnKke JS ;h? DX\`?*_fxIǚ\S&Fw+hoC\C -- ѹs:C_P)/RL(w5'h +x}rZnĈ֕R,snJ䑙K׍ Q{:ĥ` zL\DfV8_7}_dVoTF|͗ݞkzJݲLٟ7:ʨY)u\ٓ/U`#mĮܵx):[vט#t=H"qo5."fUr%^[X`Ҭw"7p_[&LB+?fO]K&MAӢ ttVh8,]GKJ{и]G2/2ƪY2WQ_|Jig[TB2M~],+7\~ 2KR ntˆJ&;w[Yn,J +.~qL@uϓ 1{ңw|\09s6±'x%MGKĜٿdU#[i{NG62ߑ& ^݈^/3M L^6Q`:= I:[m3s8L̠߰TkZGVфR)ƣ]`*/j0IJd^@AHJj­ !QbOP!QSYRu9>voDmB'V~QEo$؀9?& +W6DgËi,o45@%r-U&oS}vnh|fc5r_F9+{GZ5.>y$iۨ~>!*c浛YA+>}-Ueδw<;7l$wmq +Lc=x{{=~E9pQJv) ?X+0xVm@+qRf/r芃fuXFy!̦q/tu_^Tq aˮa>$)$sBmonCW(NY*!=!`.Gx;E\BF+ f21z4ؒ[]Pf\CX i [#.drpS +Ӫ+f?)_HyLetM0]ZSNW·mJXbxҒk[Xu8𚇷rcN ҕ͑/Tqy=sq-!̯隿{z@`fDלy6qxcfֶQŤʡvx* j| U($].isV[E\7]њnJ7V7~chd8d +r/\J 7ˎk(= Ѝ)6QvwQO2p"cn$3yFUw;6-WOƥҬ %| e7SnwlO ++:ȌlNU8#~g^?.I>V {3v9[Q|:#~"DmS~>"7gUÓpv]&F};=}Llt滕Ɏt TBϮ穸sϚAZ|Ȱ@2=@5B=m(s Îjr<{`2C^=S]Wj'kIqB:V&LTQAmR +dt,hvjI="Gɼ;L[-=8烓{8&TBI +endstream +endobj +1029 0 obj +<< +/Length1 1379 +/Length2 5945 +/Length3 0 +/Length 6881 +/Filter /FlateDecode +>> +stream +xڍWT컧S@QaF0 ƀnAB@B 4P@Ns=;g{ߧ{s06VqB:40X$P30@" hGR-a(o8!j(C83$Rr`i9 eD!p'@ySՐXee~T<`(8@Ю0\F(`ahB)ўr~~~"o$E_GLa0/ . L0w{!6C: ('pCao rtF0l ,;ܟ޿!P(.g; `/Ơ/C7!8߅C*&ߟ輡('[ 0&k Ԑ0ڛW}p :VXH?Dgg8'OQ NDH@ iY @]E7z~+ĸ<gXh,(+}Np(s#(Ü&c6 Я';w?濇+jc/*UU$ ,I`8@ww6?uHp s]` I_Qg=>|C cXm40'juf \n"[9P? p1Av {JqV)5Pӯ@P(7xM- Qs(__BPe=x\ֿ73H|ȶZ~˃ce3W>Ԥi5የ*i}};<`~#?MG_RL3vm<ws@07]` q!ݱ[-w'MVj(G,mJǁ9̜$hd04GǮ ]& Rm%X/%LWywpX3$eCcfQBzVR9E7Go!t=QX NJ#ƻ+# Jhy-xey}7FfiW ? )mZqX{-8}}e$~ dF*v'H>u2Ś샖ThzJZku;-FnZjZGYI2.OLH]] 4K/h&z$^d.{GX1{hW\5w~oͽvW59,=EkM4Dnǭۧa=[]<W*~eqy>/2{6Sr_6GJf )zu3` +V"af~qnmYLgIBѫi{k}:}́k a$yy!!y^i1$xm4\zBSJ2 27ْ[Һ1лL FVne twS m+`'*& NL3>oh9+ +)Min kfKD]ͧUczOG +0 + +~eÇ(Њ/+Cr`) Ɏan]d|k ֙ΛGZN(V[g~Ay6ukFɎ j䬴C-ԥJD8yo0ί*Sbb"cQק~r{+MUYُ\k7.Α~L,d{!>܅*ak#e_΅ęk<2,#S; i1x}#&$by6W?>q ؠ#mVCڜ?VWl[D*#iXy;o Uzo#F}v{!IrFB -e: 6y$J!IxQaQAZީ0ѽ9AҗM#lsͭ3/ނKX,kilߞRTqu$Bs=I5PQ<4~ 6pqXy{-FM+~^T[bPRڐT]~E0qgb*Oa')7ɤ3z_C< LZw`VaFzmquzms8?+/RmS)-{nܩhSQT gSܙ .',uķlEOl}%ì(_x`sJPvKt>QI/OIq$$> ۾W5-*2m^Xo粎ꁪH,.]K2vS~7}jS >ן⥨ cJo4UG|Ч6 W\u;W4$ϖY^-A]ݑqɃU]u2ߨ2XQAwbd~э?y`ձàZ)[9|?CWKw-{-­̦Fv䩦݃8l:5'2&RaQ`NbUjxY @O?dHiƶޠWM:!$ՐJ)|rW#UZ}Bvuy#i!D=QwntHvu\Z3- /d AmrJǒ7~0͹>ʷ%-x b6/#=Q?XLNiavD^ V-4,2f?Ӿ;@ʥ8,s]ڒuxRoOm®-]R 0@XԡBf-7N!lcx\T𓗸 };toUP~*[<G. + = )L)< ihˮߪ +ݍ>$X"ՒȾP!NF[g7될[fbk׊_ċ#tJ]nXJEBzT^&tVQB ssX %=N$*(sPa[e)}lIAt/>%i,| /1ӱ)61фpL%g{3c^شbxOTҍ\weϙu*73|2h/4(FWnw8f|82;xckd|5}Y< ws K,fsTzUy^y:"5^4}ysvȌN8#92^ I`GwN%.iN7S֘Mm*2)6{;om?DwUEڡM fE6ff~B2#m }nb:m޳wuj$.㒉ğvM +*GgŔggcP 4>$|Z! %V#}F'R2*;+K't<[B^cѥAXW]{!;]6_|":'%&_6XNOÚd1nzn׀cXKivWܸTloh'97G g'/dڏ)|ƅXӍ 4 +',rJ`m+|j}Tj_{ C}l)M*>"ٟc;V4T2 :LvZG E廒>&z+$c7SQP+p}w'4} S4\%=I%S| _j@{pЋI.rQ+p_ݼ!5{"` r v{BRL>J$b.G١>5^}l +gc.}Cj69=Ssi* +KT_@OJ1TlT!BkG(qcgws6#ԷK/\Xcއ)|ZliՎ r5(VTT!+sܸszv<pYiRг|P":eu?ʿ?L Y^IubKYvv1[s: m R:tLdNqMsr5zSM!Zw_!^ø\}jgu)MSzn[sMD<%ף.9WCԜ9HD*a{VTMQ#C韃* FYJM m^*Pj}}y;WۻU֞&Мj +rt;_U,'J4$U>|:LjxZT C X-?zc@h^M;"p7N*)!A7`[ѢT*v>9}]aE^l$ T͋))) qYg3 #M9 0杦@[33s!V +#P[/-LҞuU\Ajiq_!`zTbjpB\/at80n>BAyID A˗|1&&h.II]HB^BKrXșMLhg0/L|X1nam0.XSVz5* +uG+[w{fo? +endstream +endobj +1030 0 obj +<< +/Length1 1656 +/Length2 10169 +/Length3 0 +/Length 11243 +/Filter /FlateDecode +>> +stream +xڍP[-{ІwFq'hp5-\BGrܙz볶>4o4Y$ @Y؍] !`gbegD9]\A?R.@sۋ + Ptwpp8x92=@VV" tE8yll^dp1qH8]@`-%@b yWza[77'A66OOOVsGWV(3f ](ףDzN q)z(:ILWP"~~QCjl\t>fU:MF5cJ%*c1ىޣ{lBH(QآsIk :aήDoI>plm{_GTSٝ%m⬼O3tK54EE<9/?GD{]ۜp)V.T5޾HA;~j=OWWy(3C'QƋZC @@eѬ]ޏyDHoHxUb2;޻/j_0VبR{P[Q8ǟiq_^K2/?}o(4+&{3<\mvQ kuЊ%IRZD>ܽo,邾P#FKJqL>>Sm})ךْZIYZ +SNs-dqVdËlsU¤f?zMB?8 +p'[yTSv#)KIt$Sac)IƽtXk9tNJ6|X*ڶ4Dj\8ND> YQ'كmv>6~;܀]DX)&xzW8Po}S[Y!rZ$8 RN>CNMgCSg`,b&B_yH щHd,F޷+meA ZIJ15O.: +mjHFv,k^ ?`Yzgގ$=^l"Dv*[/qe-5j(8!E~ڑ8EaL@<6TBrz+(S|*zJ'E`]Rz.6[suhq|wIpNfX U,D}t\L׆iSDn!(#1w.kFWv%UAwݽ.>BWmrevvS^RZUTٴiu%uKK > X#BAt]D^W"s$G2d5YȽ_"b&(pOuM d~F& 8Ds˲2D\qnP2G|W B#G +3_$~́9꫼,T'X|?zQP;nbLtme-LzN B5-qz}V6knh&>` +Ė@̓6:6Y{Z%*5m |ņ,ՓVL77gO*o:>G,)OwİHmTNf8O^t_C!g&Wb4?0p't5$9PlHbrJ1Ú~H'mJbaaU/{$*3#e|y=:5ow@PzRq=7n^&nR]|Y |Fm)un=(PD܏ *=[Hegyeӝ3;Ϻ~XJ.Vy^A&f=Sw~8}Q\WYF6@o:.#R] +@c{siOBfR&8akt5W&^̇ru,/kN1cPLAD"Gn! +oMe'~Qchn-„\5KװVl]Qb& +dOg_C9Ɣ2!I_fNp1kIYyaUGFPqNzIl\;~//~ځw0]x2E o04,y!Y"R[小 x|I!%Of41DR[}X{Ileۣjo:\"5:cׇ0j%~oOb~L- 5@lڽڴ9InGCDŤ8t'iW -E^9|^@4P}9DžˀL)wоdh=(ȅ#-*KpXCFX~1y@jc =S:N[DOVzs,Nx/ E8y]XVt |DF|ϯEe"SV?9ɇ,q $$&h쩺уDQ0*0FQ0?HEC,F~Ƞ_fd+ƭjpAK 5`]A{6i +LgЋn?z=Quv7+`::vⱞxwŜEESeIiL59_+6rMbr,ߡ/tυ^ GZxDw Pz|ۏX|4N:m}7f= L/onpX{3.Jzb ccq{Wʼ0R" #ŻMI;)IC߷K&{Hz~vAqtVin^Ø_zg`|)PĜ4\R2|2*Xy"3z-a^jg1dJ cW9߇]'kdF}ٱy\W b +Adjnx] P 3RE-M=SM n俚PI5 NV\aѝ,G˖Ĥg毌ko2vw 2%fd4qf%y B̷YGM3%~G~TMUD3gЭ]+$b@t hN j;=jTuWs$F)gO>T\C(PQ!Fkwyr-Ono4.]sX vLx~m0Y<Ѫk̯ήD\Vžq+V(3/#04𘬾0{ })ukq)14pr;85D Y&6lD +o&1Ƭ !S:0gS=vrd N,cHAF #4PDSKV3h2ݝP9Q+mc,8ҁ v.AC;rtw2G{p"Q pFo!*prX5y<CHtKوS^8G 2y#tc~VoFD^/֢HU W|ik`V[:PQhU43^u8120|R # v1 W!$eW3+!S:Sܴ҂Vj=N%?nI$>Uƿ2ulF'J2ǫ`FXH;n~jϲ;Uu?X+ۚN Wy8 +і>l._jt#iDPw&Sw4tR]ɻsQ%3 +b<%.AR\:w '̉3oCZgq-!56<.#>:ֲl BcΥZ!'d8EOo8 h{ ( `P}%;sG%6hLέDRL vWD:XeZ)MFqUHϫ̙Dwͳ"T*>nq9ƫ \bR& +8:IYugvc ~XFq,$hc-M"IƤucZ.Ԧ$_rȒ$&1׉}փT7Ļp +Dzb9d=ݗEr5VeWԊ6?ʮ|%G^4[?KE^_.y4c*{Qas>Rļ>i~aczmK)FebQCJVϢ3}PMIC& oHAHY\W~‹lEm{[Y$T{BOjzsŌ|8 "MS7ڕKRr6~2 {v0WsʳxO7?גYDHF( % +}}kHpnY*{i,$T?C1y+h7Όq#떄"BTm̬|a%J}ڟ^FBc ~܎#*Ti!H{CxS&\)a|T}J +Fѹv jo}zbp=O^Rr/.K.̑3UXU<vʹtw*e2F4qG:35/Pnavg&n'؍]-y_jC ٍqKeuQO ՟1Ͻ&)G ^*LGؐysŸ2٠RljHQ->E?F}U'8.)B[@E}rrl\\y0噆ksu? NjW )%Tep&AjR݄pWJ"mZ~ږŴ,Ƃ݇Fs/t,&^ jYXI3԰#;2o$ܧTQkp ;S%*uJb}Kw>_>277m#HC!@f$oPt@m7oJhCلyh!C2("8l<0 ژa2F-e[ESiA FEĸ (9Zzu +'-~sǗTȦ 55e5pc2b0+N`ka2TG(6k0P+&7y'/}c㑈Fyԉ'ZVf~*H*0U15ƌj4B9c\H3gAK+Qp\0s_Gt "f,У)sʿY#֗縇"W|Z/$~VGuU@BQ5m8pp +: 7иgٿ}?sPgQTB=-ȶcH4ɬ&~1mc! OXvY$ Js-c0l,ײiz7Bt񖆂X`7+M93yנK~3vxv;w(%$a6n]'x#T6$)o,N[QYG6Xq7.oKRYLghmnӠ>Wᅤc«Mݑ!(1/@.݋Y/ ވTen[ACη;hXIw+/b%Pa}*H7n>BѤNb=,>gh<.UU_$x]gJAP +b{msIW陬2Ÿh{%o $R9:5._ĢE O_o_9.q+Ⱥr4] oZr[̽J֡Xs?K~?Z1Ʌsؾ.96dCy<+շw>>|0jUpR)a}ݯ +qv+] +ŗ8h\mE2Vs;\r]-/a?/ehW7,4 cjfP$aއ.r<$aa'=+MߕO䮽'[g&uwF7;> U5[%31^_++4kSleeNٙz0SF7"&+>?3NrFYmg[Խli~u϶%V=?ioS9gbM-sz .FsCD U |$G~ȥu̓5r@,f[9Yx(W`G2 %XSҕqB!科,DsT#^ LZ)J"|K0 > qیsbic1k$ 'hsC|*R" 7ܽS*Σd>tǰ:Jx!|`/;.8.yZG;vLR`.ٗ9\8Miťʨrzs4 9GW&'#ˡK!H?6B6ddCsS^lžI^iꗳh[0}%AZ%܍Q&Y l8zMّ퓃d(YJ<4^Zr ݝ%Zf넦"@{,C`^}_}zʧv) 5qgUH[V 6V6Oys_QQw>Ń޵N޿}*); eN:Dj]ɫhŪJ(aӰd6ASrrKH{w5rZ,=LJ?{m0VݖahW E5.W /-hY,BZc*̇| + S4i-l#C{St +-õU/GɷRtk؛NnL Bd$͞9?)&݌F 1-:iy%i[s{9IRWG|5x=ixrTzX;8`Ű ]T93U¿AxrPŇgW&uI8%չTz"Dm}mҹ l`+$ẏ-۹>Mfu;)DFS:5[#cW`!bةcˆ!hq]=[:T_I=\ibHx4N7FJLpzľm[H92,nK hڜڔ^P M&yR +QZqI7PRzItVtZ%P!Fl#׭/|xTG֞[ni!9_}Yfv:o=33OO+G-MzXKGiwMvݱ:*s$YL6s89 p| s> +stream +xڍuT6-N etctJwH0@6`QB@$DJZi DAB;x~9{v02V#4((,T30 0X cĹ < F5 ԡ8|pED`,w #Tz"@PB`"7B{(Op7s'ocs@`Y)) Y 9,oi#sC H{z"8";}HxD7# 0{@lQ.>گ߈SUE{@aYII$PZZ2Y?SQeƀ8<Ђdp2m`K[RoYE/7/ᆺ"]|C-l#=\۫塂rS\XTmGb5sMWD!X7> /^u0g[_//@B1'~x޿ 8| +1h~ qE0NuB{h9q!!\Ttފ]]9Yq *ykDqVܟqoli1L3s8djs<$1ܞ *H:fz_]^f X^UgiɜO]#y爡ݝ׫8(s{ $ʬ֩Q]axChEףa)'d_R}Eͻl{ը)Y? 4z7;8U|L̉aU<'S20*emz(ns`&#o ]&"J_ݕm҉0&y'6NHb 2 eLz"vPRޞҳ뻞[񍞳N9OΓWo|㴮(H`8|p7Ω+w0UkwED`3 +G7S P &j*'ȡC5_,67ŃKxv;Ivލ힐XPdnE  +ѷi?Uwp6kyMATXW&qx!Hcc 4c1K$+KpIE›5vI:waw+5^q V y{ʩegJ%]`r\]HsKMVoN' tݜݶ.Ec!Gom;u79z_$WZ]%c|KY$>2HEJC7UZǣϦIBN?S%}v z"v"mtG#ȓ# +S"q7N1AM['v(K ltCN*Gv%وj]Aj G5'I:j7 ~@Ї]ًLҫoܡ~>pذ㡁!J 2+y z\ aN7 [nZ! -@St2ƒ@^ek[{= ({HO[>trA;!d'!!\q@i<;&0.1\uۿsbֹǡ%h:\zF3;u#<LIi]QgEړ1_ϣB?۵HM YѮSXn[(=iJyShߟQ_BM$7R=" +n "gξW˻=VLiR;L! +9X q[vZ殪⛊9aK{Ds'+οhI8Ǩ.xyuDt]UJHfu1"jt+AxN<+nvAS{}y ,HEkw!q ʭW[I/^خE,B +J6_<1`@}\|85Rcgo2oGQk,7: +WWv#l錜Q< wR\:Jft2f»RG;/Xmz)lwt4\l ?Hjr7h9 +6H֗2MUtm:Q P}<°^y8!vufB'bo7ɝr DY [%@>sz{kԓlTDv$3߁15'Y/Ǐgi,#R"ؖYi &ܢ$>""kRjs)և'e*0[+> b".RaQ&b2S{|tx rL-*k9X+lrDrnzԘ0xM"Ԏ%@ߩݾ UڈGnϮDrKiG I:# H~?! +bTBQ w!,oi=s8+6;)832φ{%@gpV1zp0?T;_`Jý'F`Ҥ2Ki2Drǣjr|vleP(^ O`ihw\hN3OM"a[xr0\-% +%{DlYK2SQUf)W48 aSԁS풃1Az&SohArD Hň Jsy?rRO>_F4*dXc?'ΑHhLQKˁb9ߵPjdYY[;R6qqw!z>C|TnG?C'gYn!$ꎳ۶Ƌ[yzɛ2˹RzvRe[*/K,";ߔdֱxE9+o#e GLnj'QSqG?s2pX@9|n8]ayzK1jjS \2R k.aRl߮ÁmJW-_?M'd4]h6 HK2ӌʜT*pXWF=dOR0Az O}&AC17s+fM,/*Py6?%097[\ȠshĤy)q*mֳÜZuJ2Kxr7-w1CJ?iZ !RNC'CktIǩxM~ +jO=[+HPIS!]&.ɹ;o;yv;SE-]+glr!yx@1П2r^7`ACJ4H1hY]~R5tR./46u׀>Dʸ;nՔy mZiWGԥΥ'sI6釣͹,`t -ʆ0>vouKr+HR5esRAkd6Qb ƭ)}ARϥs5 z.H!J`dĀM]9aR \l>:M]8HÁK3lJ&W\R>ZoƩZ!'wE^Nn8o]oڊ=aמn96P{mWV dkƜ3.Tu}lܵg59ͪ&c0JLfX{ga%ڮڂ6^2ጏ7Ɵ :A_sqd(H$]O9"vc?ߋygCCpu5|?,aQ+i1 :N-o{0zBv`xa9wJ 7 S[y>wk_ntwؘ'd*w ^&C%ZlUqA2B nP+fތ "/z(@>xߢ㯺o:]Z:R|@7trR |7n]nxRn^Ҽ[_BFuE9N 'گqS#}Y Yjȼ[f-UeTIÄ+dIt:Nߘ7;RFgղȧ ,pᘪ[ (TNgy8R/+vy'3w?| [_zh5KF (XvƽcUen ˃W/,mc4孿ʙhT>/yeIcמ }C|IkՇw([)fUkZgc/M(2 T]%'Q wYb] Y'{bujc-a;CA|Rkh3بPyQ]8YSo\sl9i'V\ Vj6kATR ۊ%vxs[ 5#)QwN^mL*3b+n"r5ۑז=s+'k1VIp0k$9\PuTC̀^}n8V %O!E 8h3*?ZĈup?}O/]i|+ahb15K ˲P]6Tuyi5ueCpgUƪٻs} >io{; +e>|(􉻙6{OLݶ?3oQ~Kᙘh"j=h~ۭJ +endstream +endobj +1032 0 obj +<< +/Length1 1685 +/Length2 7445 +/Length3 0 +/Length 8512 +/Filter /FlateDecode +>> +stream +xڍTT6LK+)H CwHw+030 ݍA%! HK ҂t߷{g}g > !yEMe ?__tAnP8L_”@H&x +"@Q ~~?_p@ ha7|E7jgD'rv;CP0!!Ψ '> ]t9v2O(q < 6_)@ΐ?SgC HO@NP0rq@}5 ܀?@Pog wv0;- VEz! /CA@(GTu TF@]nnP_9 +*2F !O Qu0'-fc+ w>C + ""+ 7 rulQi@  ]( AaDG?֨#^s~__(aNn1c=u S?STP{|y<"@TT@: WH5- Gǟ`sn8A 4-v(WTܝ~x3O ݑЄFƐ?&Zbuw_V B j% [>^rz*"F 9AlȿqQ"".(]ZT6P7'<為`v­KO0a~Q;3`w{:PmkDUƟ%jZΫi%"D`m|6IԊ堽Ba;b3)*y_^}N|Q2XsӳF#VݥLqO^ц:OR<|g`-V88<1SX~ ])i 3S- :z=nGommA^BgxHQxqlZY^j/a1ȄMXM>Q/]z9!wl~=U\B +GhB9PV0Íe1ϚY? -k]f'hMwgq"ȾH"_GCMA9{q~KKϿ + ~>FT"6vnSLQLҴ)J#} +(;%RUMW5P} MhSgTDf07HQw)aҨyrCˀ 5ijZP"7Ѷ4 5@؟qeS;:<\夒)#;#GCfqّ:h I6MU慖\PlhH~_vɁyw2JM;6+ԫH.d9й`v3. D.fb y`vg;ޏb0\|'.%mi*Jʙ?ս0.L!zOJNЗm4;&`8ujm_JB)q/,^ +x=_Pf :A&&}M"K5L wB{ws oc`Zr2XNjzڼvӅَE;}i}H&>.r~N^ϒhYh]3 OΉ!l6jb31ztc,9$^ۄNRGrfi =[x1Ia5yp= +v.VY{A=IHlaiv5ذ*=*^">1.ZeTuMǁyt^([XxǩF~_H:^2GH{"uwiM:Fy!jdkkOx=ԑPqɀLҿ}negEoj'Sh%3D]Ȫd!1tzeJ|+Dv8B{[L0p,>>7ûuxy<ʠ +7?&~Ϋ•/~aİVÆ+.=e'Y7ږMPszc[T`G[4fûXhbrRuk' ٖ:GKǀd]o Lk4knw?5YknAqqq =2#0a"b=^Q!e)1(c,7$2à䜳7W bAԎ8nc*NNa!`0`i7͢KPzfSZms]VQgSe7dno(GZܶسx!),+^ܺNOrǬן4~R~[l2\3&k]V-qpџ+Un;hк=R_# ^`گ,+u]p&Ro *u'PnNE3K0 z+3S`Rl @#B!r5ayk;kӂ֝3^~+/\3d!fXoƚTU%}b}o3vY]-EMFغhcpC yt23g7akڲUOL@(3^I3*p`U1QڈǕ%$hH"]/cizi*__Osr\ayn YESP/a K dvM_^8Qjo%WXv9$wTۦF=}◲-m;WOGxMD2#Emq?`OZk&v3HFGͻȑƀ:]lsNA3:x1_?UJVx/mɧU,/hAUR'X/AV1/ح*!x`#1F#pۖ=;ki'Wڴx> R{oLeM0}tOK_x}id nM9p/Z' yVx_-%.GKZߖ\pIlE?ėBxعۭ?R +| 2`D:}GY+o,]y'||:g2x4x31U@Ãf.dE%H dRxdMm31b?׫m7nIX 8ǦM5 m1$kၰn,6}:oefl8iĕ:%DsD26&; + :s"@3vIWtD^Y1~袱d}xf53k$˫{xPIVR~%exkvJ+q}x5Jt +Y]wwT.[}L|y#WMJd#NkCpwaRjtۑs7QT6E'?^)bq 9 QbK"6>35:יܼ v87*B?%@>`V.v0ћEi"-mтւ4SҸzLh_k}oWS$C#k&_ʯT;_am&As) IS2 XJTr|#o fLI:8?Ԭ;.kH9QPYW3ق*%} ZZDW ${m+Iy/E{gI.m/{7Tq4[h_:}g/iPpamTcNJVOwVspv 4 P\C&" =bÉI2HVg;A%B֞G@6i+cBvxbEYcrV7^ҿmQ[u4}J_D\/ +1}핇ߐ@vsWh\"˕lq7xYX~sFCr. +$œjYN5ai>_czKm>H01y$XJ Z0C.zyㅅ-X__D`Nl>Ui`o~%ЯܰӇxWI^V,}U}#Mo@@Eflt8_w@A(m:UTu#fr.Q^FO,!UL"!rB?wvbDDQ߇KDUo6JIDGu([)7.4:b)>^"c)CwN":Zet"+q |bԜ< +"uߺ2R+tcb3gCAXgCGxQ Ll[`L^:6.eu A( cHN<#Y#IpsCY F]čmn‚q34پF24ܺp1jaVaE4Qcgry +w ~tUJg~a"6m8MToU.Y!]v ^cebPTkQ-5`?g͍i)qJy0O:|_G=.Vp<^tX-!@f@P}08iG0{)y[Y;{aRooSyg0' +zY772ygG}cþ/ǎ~n5Lߥ[=>3j_SeC-=ʆW|;<ˠj/:Tg2RxCaMCB_eG\1[iL;yym[|1FXwkJvm? j𲻚!=RQkV5HqݤiTY;j!G~DF>g,wQ}>B;D$w!k _FoăT<&}mTZɮ3D AX` [~9Zߋ "׼ifGЙw{m;KJږftjtg58|a ]qMDd֢^ny{0 +endstream +endobj +1033 0 obj +<< +/S /GoTo +/D (subsection.105) +>> +endobj +1034 0 obj +<< +/Title +/A 1036 0 R +/Parent 1018 0 R +>> +endobj +1035 0 obj +<< +/S /GoTo +/D (subsubsection.109) +>> +endobj +1036 0 obj +<< +/S /GoTo +/D (subsubsection.106) +>> +endobj +xref +0 1037 +0000000000 65535 f +0000000015 00000 n +0000000688 00000 n +0000001026 00000 n +0000001091 00000 n +0000002039 00000 n +0000002087 00000 n +0000002122 00000 n +0000000159 00000 n +0000002196 00000 n +0000002469 00000 n +0000002631 00000 n +0000002793 00000 n +0000003184 00000 n +0000003374 00000 n +0000003564 00000 n +0000003754 00000 n +0000003951 00000 n +0000004130 00000 n +0000004312 00000 n +0000004491 00000 n +0000004673 00000 n +0000004879 00000 n +0000005101 00000 n +0000005315 00000 n +0000005479 00000 n +0000005669 00000 n +0000005867 00000 n +0000006057 00000 n +0000006262 00000 n +0000006426 00000 n +0000006608 00000 n +0000006787 00000 n +0000006993 00000 n +0000007157 00000 n +0000007354 00000 n +0000007518 00000 n +0000007716 00000 n +0000007880 00000 n +0000008078 00000 n +0000008284 00000 n +0000008490 00000 n +0000008672 00000 n +0000008851 00000 n +0000009049 00000 n +0000009246 00000 n +0000009444 00000 n +0000009626 00000 n +0000009816 00000 n +0000009980 00000 n +0000010144 00000 n +0000010172 00000 n +0000010200 00000 n +0000010228 00000 n +0000010256 00000 n +0000010374 00000 n +0000010477 00000 n +0000010584 00000 n +0000010707 00000 n +0000010842 00000 n +0000010989 00000 n +0000011138 00000 n +0000011285 00000 n +0000011434 00000 n +0000011581 00000 n +0000013421 00000 n +0000013931 00000 n +0000013989 00000 n +0000014770 00000 n +0000014828 00000 n +0000016149 00000 n +0000016207 00000 n +0000016341 00000 n +0000016475 00000 n +0000016609 00000 n +0000016743 00000 n +0000016877 00000 n +0000017011 00000 n +0000017145 00000 n +0000017279 00000 n +0000017413 00000 n +0000017546 00000 n +0000017680 00000 n +0000017813 00000 n +0000017947 00000 n +0000018080 00000 n +0000018214 00000 n +0000018347 00000 n +0000018481 00000 n +0000018615 00000 n +0000018748 00000 n +0000018882 00000 n +0000019016 00000 n +0000019150 00000 n +0000019284 00000 n +0000019418 00000 n +0000019551 00000 n +0000019685 00000 n +0000019819 00000 n +0000019953 00000 n +0000020086 00000 n +0000020219 00000 n +0000020352 00000 n +0000020650 00000 n +0000020709 00000 n +0000020844 00000 n +0000020979 00000 n +0000022737 00000 n +0000022796 00000 n +0000022929 00000 n +0000023062 00000 n +0000024515 00000 n +0000024574 00000 n +0000024708 00000 n +0000024842 00000 n +0000026240 00000 n +0000026335 00000 n +0000026411 00000 n +0000026546 00000 n +0000028501 00000 n +0000028596 00000 n +0000031068 00000 n +0000031127 00000 n +0000031262 00000 n +0000032751 00000 n +0000032859 00000 n +0000034236 00000 n +0000034295 00000 n +0000034430 00000 n +0000037172 00000 n +0000037231 00000 n +0000037366 00000 n +0000037499 00000 n +0000037634 00000 n +0000037769 00000 n +0000040419 00000 n +0000040478 00000 n +0000040612 00000 n +0000040745 00000 n +0000040880 00000 n +0000041015 00000 n +0000041150 00000 n +0000041283 00000 n +0000043068 00000 n +0000043127 00000 n +0000043262 00000 n +0000043396 00000 n +0000043531 00000 n +0000043666 00000 n +0000043801 00000 n +0000045575 00000 n +0000045634 00000 n +0000048185 00000 n +0000048244 00000 n +0000048378 00000 n +0000048513 00000 n +0000050893 00000 n +0000050952 00000 n +0000051085 00000 n +0000051220 00000 n +0000051355 00000 n +0000053886 00000 n +0000053945 00000 n +0000054079 00000 n +0000054214 00000 n +0000056098 00000 n +0000056193 00000 n +0000056328 00000 n +0000056462 00000 n +0000058788 00000 n +0000058847 00000 n +0000060594 00000 n +0000060653 00000 n +0000060788 00000 n +0000063454 00000 n +0000063562 00000 n +0000066173 00000 n +0000066232 00000 n +0000066367 00000 n +0000066502 00000 n +0000066637 00000 n +0000066772 00000 n +0000069083 00000 n +0000069142 00000 n +0000070932 00000 n +0000071027 00000 n +0000071162 00000 n +0000073124 00000 n +0000073183 00000 n +0000075750 00000 n +0000075809 00000 n +0000075944 00000 n +0000076079 00000 n +0000076213 00000 n +0000077800 00000 n +0000077895 00000 n +0000079468 00000 n +0000079564 00000 n +0000079699 00000 n +0000079834 00000 n +0000079969 00000 n +0000082641 00000 n +0000082700 00000 n +0000082835 00000 n +0000082970 00000 n +0000083104 00000 n +0000083239 00000 n +0000085593 00000 n +0000085652 00000 n +0000085787 00000 n +0000085922 00000 n +0000086057 00000 n +0000086192 00000 n +0000088799 00000 n +0000088858 00000 n +0000088993 00000 n +0000089789 00000 n +0000089885 00000 n +0000091696 00000 n +0000091755 00000 n +0000091890 00000 n +0000092022 00000 n +0000092154 00000 n +0000093836 00000 n +0000093932 00000 n +0000094067 00000 n +0000096546 00000 n +0000096605 00000 n +0000096740 00000 n +0000096875 00000 n +0000097010 00000 n +0000099194 00000 n +0000099253 00000 n +0000099388 00000 n +0000101438 00000 n +0000101497 00000 n +0000101632 00000 n +0000101767 00000 n +0000103499 00000 n +0000103558 00000 n +0000105124 00000 n +0000105183 00000 n +0000105694 00000 n +0000105777 00000 n +0000105893 00000 n +0000106008 00000 n +0000106125 00000 n +0000106236 00000 n +0000106349 00000 n +0000106457 00000 n +0000106502 00000 n +0000106623 00000 n +0000106670 00000 n +0000106807 00000 n +0000106856 00000 n +0000127426 00000 n +0000152692 00000 n +0000152747 00000 n +0000152837 00000 n +0000152948 00000 n +0000153227 00000 n +0000153310 00000 n +0000153359 00000 n +0000153408 00000 n +0000153470 00000 n +0000153515 00000 n +0000153560 00000 n +0000153607 00000 n +0000153654 00000 n +0000153701 00000 n +0000153748 00000 n +0000153796 00000 n +0000153844 00000 n +0000153895 00000 n +0000153946 00000 n +0000153994 00000 n +0000154042 00000 n +0000154090 00000 n +0000154138 00000 n +0000154186 00000 n +0000154234 00000 n +0000154282 00000 n +0000154330 00000 n +0000154378 00000 n +0000154429 00000 n +0000154481 00000 n +0000154536 00000 n +0000154588 00000 n +0000154643 00000 n +0000154692 00000 n +0000154741 00000 n +0000154790 00000 n +0000154839 00000 n +0000154888 00000 n +0000154940 00000 n +0000154992 00000 n +0000155054 00000 n +0000155103 00000 n +0000155150 00000 n +0000155199 00000 n +0000155246 00000 n +0000155294 00000 n +0000155343 00000 n +0000155391 00000 n +0000155439 00000 n +0000155540 00000 n +0000181521 00000 n +0000181575 00000 n +0000181663 00000 n +0000250022 00000 n +0000250110 00000 n +0000250158 00000 n +0000250272 00000 n +0000279935 00000 n +0000347521 00000 n +0000347583 00000 n +0000347630 00000 n +0000347744 00000 n +0000347791 00000 n +0000347854 00000 n +0000347917 00000 n +0000347980 00000 n +0000348133 00000 n +0000348185 00000 n +0000348233 00000 n +0000348298 00000 n +0000348348 00000 n +0000348396 00000 n +0000348446 00000 n +0000348495 00000 n +0000348560 00000 n +0000348609 00000 n +0000348676 00000 n +0000348742 00000 n +0000348803 00000 n +0000348891 00000 n +0000349005 00000 n +0000349054 00000 n +0000349103 00000 n +0000349217 00000 n +0000349266 00000 n +0000349315 00000 n +0000349380 00000 n +0000349507 00000 n +0000349555 00000 n +0000349603 00000 n +0000349678 00000 n +0000393218 00000 n +0000393285 00000 n +0000393352 00000 n +0000393427 00000 n +0000393502 00000 n +0000393554 00000 n +0000393707 00000 n +0000423989 00000 n +0000444866 00000 n +0000444954 00000 n +0000445002 00000 n +0000445054 00000 n +0000445119 00000 n +0000445164 00000 n +0000445278 00000 n +0000445379 00000 n +0000861907 00000 n +0000861952 00000 n +0000862053 00000 n +0000862128 00000 n +0000862193 00000 n +0000862248 00000 n +0000862303 00000 n +0000862378 00000 n +0000868046 00000 n +0000868108 00000 n +0000874230 00000 n +0000874278 00000 n +0000874334 00000 n +0000874390 00000 n +0000874491 00000 n +0000874546 00000 n +0000874613 00000 n +0000874661 00000 n +0000874716 00000 n +0000874804 00000 n +0000874852 00000 n +0000874907 00000 n +0000874962 00000 n +0000875010 00000 n +0000875085 00000 n +0000875141 00000 n +0000875203 00000 n +0000914773 00000 n +0000914848 00000 n +0000914912 00000 n +0000914957 00000 n +0000915002 00000 n +0000915064 00000 n +0000954117 00000 n +0000954173 00000 n +0000954248 00000 n +0000954315 00000 n +0000954360 00000 n +0000954408 00000 n +0000954483 00000 n +0000954535 00000 n +0000954610 00000 n +0000954665 00000 n +0000954720 00000 n +0000954769 00000 n +0000954831 00000 n +0000955587 00000 n +0000956305 00000 n +0000956423 00000 n +0000956542 00000 n +0000956919 00000 n +0000957064 00000 n +0000957209 00000 n +0000957354 00000 n +0000957560 00000 n +0000957778 00000 n +0000957996 00000 n +0000958214 00000 n +0000958432 00000 n +0000958650 00000 n +0000958868 00000 n +0000959086 00000 n +0000959304 00000 n +0000959522 00000 n +0000959727 00000 n +0000959920 00000 n +0000960185 00000 n +0000960431 00000 n +0000960633 00000 n +0000960888 00000 n +0000961114 00000 n +0000961284 00000 n +0000961453 00000 n +0000961623 00000 n +0000961792 00000 n +0000961962 00000 n +0000962128 00000 n +0000962310 00000 n +0000962506 00000 n +0000962706 00000 n +0000962935 00000 n +0000963185 00000 n +0000963386 00000 n +0000963431 00000 n +0000963577 00000 n +0000963626 00000 n +0000963887 00000 n +0000964250 00000 n +0000964522 00000 n +0000967076 00000 n +0000967832 00000 n +0000968550 00000 n +0000969302 00000 n +0000970060 00000 n +0000970842 00000 n +0000971350 00000 n +0000972086 00000 n +0000972714 00000 n +0000972933 00000 n +0000979696 00000 n +0000979911 00000 n +0000980647 00000 n +0000984454 00000 n +0001003836 00000 n +0001004085 00000 n +0001004526 00000 n +0001004668 00000 n +0001004809 00000 n +0001005364 00000 n +0001005504 00000 n +0001006194 00000 n +0001006429 00000 n +0001013626 00000 n +0001014207 00000 n +0001014941 00000 n +0001015021 00000 n +0001015101 00000 n +0001022937 00000 n +0001031333 00000 n +0001031712 00000 n +0001032011 00000 n +0001032081 00000 n +0001032198 00000 n +0001032315 00000 n +0001032432 00000 n +0001032549 00000 n +0001032666 00000 n +0001033448 00000 n +0001033531 00000 n +0001034853 00000 n +0001034949 00000 n +0001035104 00000 n +0001035259 00000 n +0001035416 00000 n +0001035573 00000 n +0001035730 00000 n +0001035887 00000 n +0001036045 00000 n +0001036203 00000 n +0001036364 00000 n +0001036524 00000 n +0001036682 00000 n +0001036839 00000 n +0001036997 00000 n +0001037154 00000 n +0001037312 00000 n +0001037469 00000 n +0001037627 00000 n +0001037785 00000 n +0001037942 00000 n +0001038103 00000 n +0001038265 00000 n +0001038430 00000 n +0001038592 00000 n +0001038757 00000 n +0001038915 00000 n +0001039074 00000 n +0001039233 00000 n +0001039392 00000 n +0001039550 00000 n +0001039710 00000 n +0001039870 00000 n +0001040168 00000 n +0001040264 00000 n +0001040423 00000 n +0001040580 00000 n +0001042338 00000 n +0001042421 00000 n +0001042576 00000 n +0001042732 00000 n +0001044185 00000 n +0001044268 00000 n +0001044425 00000 n +0001044582 00000 n +0001044643 00000 n +0001044700 00000 n +0001044760 00000 n +0001044816 00000 n +0001044873 00000 n +0001044934 00000 n +0001044991 00000 n +0001045052 00000 n +0001045109 00000 n +0001045170 00000 n +0001045227 00000 n +0001045284 00000 n +0001045344 00000 n +0001045405 00000 n +0001045462 00000 n +0001045518 00000 n +0001045575 00000 n +0001045632 00000 n +0001045689 00000 n +0001045746 00000 n +0001045803 00000 n +0001045860 00000 n +0001045917 00000 n +0001045974 00000 n +0001046031 00000 n +0001046088 00000 n +0001046145 00000 n +0001046205 00000 n +0001046266 00000 n +0001046327 00000 n +0001046384 00000 n +0001046441 00000 n +0001046502 00000 n +0001046559 00000 n +0001046620 00000 n +0001046677 00000 n +0001046738 00000 n +0001046799 00000 n +0001046855 00000 n +0001046911 00000 n +0001046970 00000 n +0001047027 00000 n +0001047084 00000 n +0001047141 00000 n +0001047198 00000 n +0001047255 00000 n +0001047316 00000 n +0001047373 00000 n +0001047429 00000 n +0001047486 00000 n +0001047543 00000 n +0001047604 00000 n +0001047661 00000 n +0001047718 00000 n +0001047779 00000 n +0001047836 00000 n +0001047893 00000 n +0001047954 00000 n +0001048011 00000 n +0001048068 00000 n +0001048125 00000 n +0001048182 00000 n +0001048242 00000 n +0001048299 00000 n +0001048356 00000 n +0001048413 00000 n +0001048470 00000 n +0001048527 00000 n +0001048584 00000 n +0001048641 00000 n +0001048698 00000 n +0001048755 00000 n +0001048812 00000 n +0001048869 00000 n +0001048926 00000 n +0001048983 00000 n +0001049040 00000 n +0001049097 00000 n +0001049154 00000 n +0001049211 00000 n +0001049268 00000 n +0001049325 00000 n +0001049381 00000 n +0001049438 00000 n +0001049498 00000 n +0001049559 00000 n +0001049618 00000 n +0001049679 00000 n +0001049740 00000 n +0001049801 00000 n +0001049858 00000 n +0001049915 00000 n +0001049972 00000 n +0001050029 00000 n +0001050086 00000 n +0001050143 00000 n +0001050200 00000 n +0001050257 00000 n +0001050314 00000 n +0001050371 00000 n +0001050428 00000 n +0001050483 00000 n +0001050538 00000 n +0001050593 00000 n +0001050648 00000 n +0001050703 00000 n +0001050758 00000 n +0001050813 00000 n +0001050868 00000 n +0001050923 00000 n +0001050978 00000 n +0001051033 00000 n +0001051088 00000 n +0001051143 00000 n +0001051198 00000 n +0001051253 00000 n +0001051308 00000 n +0001051363 00000 n +0001051418 00000 n +0001051473 00000 n +0001051528 00000 n +0001051583 00000 n +0001051638 00000 n +0001051693 00000 n +0001051748 00000 n +0001051803 00000 n +0001051858 00000 n +0001051913 00000 n +0001051968 00000 n +0001052023 00000 n +0001052078 00000 n +0001052133 00000 n +0001052188 00000 n +0001052243 00000 n +0001052298 00000 n +0001052353 00000 n +0001052408 00000 n +0001052463 00000 n +0001052518 00000 n +0001052573 00000 n +0001052628 00000 n +0001052685 00000 n +0001052742 00000 n +0001052799 00000 n +0001052856 00000 n +0001052913 00000 n +0001052970 00000 n +0001053027 00000 n +0001053084 00000 n +0001053141 00000 n +0001053198 00000 n +0001053255 00000 n +0001053312 00000 n +0001053369 00000 n +0001053426 00000 n +0001053483 00000 n +0001053540 00000 n +0001053597 00000 n +0001053654 00000 n +0001053711 00000 n +0001053768 00000 n +0001053825 00000 n +0001053882 00000 n +0001053938 00000 n +0001053995 00000 n +0001054052 00000 n +0001054109 00000 n +0001054166 00000 n +0001054223 00000 n +0001054280 00000 n +0001054337 00000 n +0001054394 00000 n +0001054451 00000 n +0001054498 00000 n +0001054675 00000 n +0001054724 00000 n +0001054953 00000 n +0001055119 00000 n +0001055348 00000 n +0001055554 00000 n +0001055887 00000 n +0001056098 00000 n +0001056290 00000 n +0001056669 00000 n +0001056968 00000 n +0001057352 00000 n +0001057914 00000 n +0001058249 00000 n +0001058530 00000 n +0001058893 00000 n +0001059243 00000 n +0001059480 00000 n +0001059746 00000 n +0001059992 00000 n +0001060225 00000 n +0001060449 00000 n +0001060669 00000 n +0001060936 00000 n +0001061161 00000 n +0001061540 00000 n +0001078449 00000 n +0001091696 00000 n +0001091773 00000 n +0001091925 00000 n +0001092059 00000 n +0001092196 00000 n +0001092330 00000 n +0001092467 00000 n +0001092628 00000 n +0001092805 00000 n +0001092974 00000 n +0001093093 00000 n +0001093238 00000 n +0001093391 00000 n +0001093536 00000 n +0001093696 00000 n +0001093815 00000 n +0001093952 00000 n +0001094086 00000 n +0001094247 00000 n +0001094366 00000 n +0001094518 00000 n +0001094637 00000 n +0001094790 00000 n +0001094909 00000 n +0001095062 00000 n +0001095223 00000 n +0001095384 00000 n +0001095521 00000 n +0001095655 00000 n +0001095808 00000 n +0001095960 00000 n +0001096113 00000 n +0001096865 00000 n +0001097623 00000 n +0001098405 00000 n +0001098452 00000 n +0001098637 00000 n +0001098811 00000 n +0001098973 00000 n +0001099021 00000 n +0001099262 00000 n +0001099428 00000 n +0001099602 00000 n +0001099651 00000 n +0001099867 00000 n +0001099916 00000 n +0001100316 00000 n +0001104391 00000 n +0001104490 00000 n +0001107177 00000 n +0001107272 00000 n +0001124181 00000 n +0001137428 00000 n +0001156053 00000 n +0001181208 00000 n +0001199282 00000 n +0001211575 00000 n +0001220744 00000 n +0001236294 00000 n +0001244373 00000 n +0001254138 00000 n +0001261879 00000 n +0001270633 00000 n +0001277629 00000 n +0001284626 00000 n +0001295987 00000 n +0001302954 00000 n +0001311582 00000 n +0001311683 00000 n +0001313081 00000 n +0001313252 00000 n +0001313328 00000 n +0001313492 00000 n +0001315447 00000 n +0001315605 00000 n +0001318077 00000 n +0001318199 00000 n +0001318357 00000 n +0001319846 00000 n +0001320043 00000 n +0001321420 00000 n +0001321516 00000 n +0001321673 00000 n +0001324415 00000 n +0001324563 00000 n +0001324720 00000 n +0001324891 00000 n +0001325064 00000 n +0001325237 00000 n +0001327887 00000 n +0001328074 00000 n +0001328235 00000 n +0001328391 00000 n +0001328566 00000 n +0001328726 00000 n +0001328884 00000 n +0001329042 00000 n +0001330827 00000 n +0001330910 00000 n +0001331085 00000 n +0001331243 00000 n +0001331420 00000 n +0001331596 00000 n +0001331767 00000 n +0001333541 00000 n +0001333663 00000 n +0001336214 00000 n +0001336362 00000 n +0001336520 00000 n +0001336679 00000 n +0001339059 00000 n +0001339207 00000 n +0001339364 00000 n +0001339523 00000 n +0001339698 00000 n +0001342229 00000 n +0001342390 00000 n +0001342547 00000 n +0001342705 00000 n +0001344589 00000 n +0001344734 00000 n +0001344911 00000 n +0001345087 00000 n +0001347413 00000 n +0001347522 00000 n +0001349269 00000 n +0001349378 00000 n +0001349540 00000 n +0001352206 00000 n +0001352442 00000 n +0001355053 00000 n +0001355175 00000 n +0001355333 00000 n +0001355495 00000 n +0001355670 00000 n +0001355825 00000 n +0001358136 00000 n +0001358284 00000 n +0001360074 00000 n +0001360245 00000 n +0001360400 00000 n +0001362362 00000 n +0001362497 00000 n +0001365064 00000 n +0001365173 00000 n +0001365348 00000 n +0001365513 00000 n +0001365677 00000 n +0001367264 00000 n +0001367409 00000 n +0001368982 00000 n +0001369115 00000 n +0001369273 00000 n +0001369439 00000 n +0001369605 00000 n +0001372277 00000 n +0001372412 00000 n +0001372577 00000 n +0001372754 00000 n +0001372911 00000 n +0001373076 00000 n +0001375430 00000 n +0001375552 00000 n +0001375710 00000 n +0001375875 00000 n +0001376040 00000 n +0001376198 00000 n +0001378805 00000 n +0001378914 00000 n +0001379080 00000 n +0001379876 00000 n +0001380009 00000 n +0001381820 00000 n +0001381929 00000 n +0001382103 00000 n +0001382255 00000 n +0001382407 00000 n +0001384089 00000 n +0001384222 00000 n +0001384388 00000 n +0001386867 00000 n +0001386976 00000 n +0001387153 00000 n +0001387308 00000 n +0001387466 00000 n +0001387850 00000 n +0001388412 00000 n +0001388747 00000 n +0001388795 00000 n +0001389016 00000 n +0001389198 00000 n +0001389245 00000 n +0001389292 00000 n +0001389340 00000 n +0001389474 00000 n +0001389656 00000 n +0001389704 00000 n +0001389884 00000 n +0001389933 00000 n +0001390172 00000 n +0001390221 00000 n +0001390273 00000 n +0001390410 00000 n +0001390555 00000 n +0001390674 00000 n +0001390793 00000 n +0001391301 00000 n +0001392037 00000 n +0001392665 00000 n +0001418646 00000 n +0001487005 00000 n +0001487220 00000 n +0001487956 00000 n +0001517619 00000 n +0001585206 00000 n +0001585456 00000 n +0001585898 00000 n +0001586041 00000 n +0001586183 00000 n +0001586739 00000 n +0001586880 00000 n +0001587571 00000 n +0001631112 00000 n +0001661395 00000 n +0001682273 00000 n +0002098802 00000 n +0002104525 00000 n +0002110702 00000 n +0002150273 00000 n +0002189327 00000 n +0002207952 00000 n +0002233107 00000 n +0002251181 00000 n +0002251229 00000 n +0002251376 00000 n +0002251515 00000 n +0002251563 00000 n +0002251611 00000 n +0002251784 00000 n +0002251832 00000 n +0002251880 00000 n +0002251928 00000 n +0002252200 00000 n +0002252445 00000 n +0002254629 00000 n +0002254738 00000 n +0002254900 00000 n +0002256950 00000 n +0002257059 00000 n +0002257224 00000 n +0002257389 00000 n +0002259121 00000 n +0002259204 00000 n +0002260770 00000 n +0002260866 00000 n +0002261148 00000 n +0002261512 00000 n +0002261863 00000 n +0002262082 00000 n +0002268845 00000 n +0002269083 00000 n +0002269350 00000 n +0002273157 00000 n +0002292540 00000 n +0002292788 00000 n +0002293023 00000 n +0002293249 00000 n +0002293471 00000 n +0002293740 00000 n +0002293967 00000 n +0002294348 00000 n +0002294584 00000 n +0002301782 00000 n +0002302364 00000 n +0002303099 00000 n +0002310936 00000 n +0002319333 00000 n +0002319385 00000 n +0002319437 00000 n +0002319486 00000 n +0002319538 00000 n +0002319881 00000 n +0002319934 00000 n +0002320112 00000 n +0002332406 00000 n +0002341576 00000 n +0002357127 00000 n +0002365207 00000 n +0002374973 00000 n +0002382715 00000 n +0002391470 00000 n +0002398467 00000 n +0002405465 00000 n +0002416827 00000 n +0002423795 00000 n +0002432424 00000 n +0002432477 00000 n +0002432656 00000 n +0002432712 00000 n +trailer +<< +/Root 1 0 R +/Info 8 0 R +/ID [<296216ED329A233B6E0462DD668A99DC> <296216ED329A233B6E0462DD668A99DC>] +/Size 1037 +>> +startxref +2432768 +%%EOF diff --git a/info/Minesweeper.pdf b/info/Minesweeper.pdf new file mode 100644 index 0000000..263bba4 Binary files /dev/null and b/info/Minesweeper.pdf differ diff --git a/info/Minesweeper/Asynchronous/.classpath b/info/Minesweeper/Asynchronous/.classpath new file mode 100644 index 0000000..63b7e89 --- /dev/null +++ b/info/Minesweeper/Asynchronous/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/info/Minesweeper/Asynchronous/.gitignore b/info/Minesweeper/Asynchronous/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/info/Minesweeper/Asynchronous/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/info/Minesweeper/Asynchronous/.project b/info/Minesweeper/Asynchronous/.project new file mode 100644 index 0000000..e52acf3 --- /dev/null +++ b/info/Minesweeper/Asynchronous/.project @@ -0,0 +1,17 @@ + + + Asynchronous + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/info/Minesweeper/Asynchronous/.settings/org.eclipse.jdt.core.prefs b/info/Minesweeper/Asynchronous/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bb35fa0 --- /dev/null +++ b/info/Minesweeper/Asynchronous/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/info/Minesweeper/Asynchronous/src/Asynchronous/Asynchronous.java b/info/Minesweeper/Asynchronous/src/Asynchronous/Asynchronous.java new file mode 100644 index 0000000..0305c2a --- /dev/null +++ b/info/Minesweeper/Asynchronous/src/Asynchronous/Asynchronous.java @@ -0,0 +1,19 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package Asynchronous; + +/** + * + * This interface defines an object which can be run asynchronously + */ +public interface Asynchronous { + + public void start(); + + public void requestStop(); + + public V getResult(); + +} diff --git a/info/Minesweeper/Asynchronous/src/Monitor/AsynchMonitor.java b/info/Minesweeper/Asynchronous/src/Monitor/AsynchMonitor.java new file mode 100644 index 0000000..2a6e638 --- /dev/null +++ b/info/Minesweeper/Asynchronous/src/Monitor/AsynchMonitor.java @@ -0,0 +1,189 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package Monitor; + +import Asynchronous.Asynchronous; + +/** + * + * @author David + */ +public class AsynchMonitor { + + private class Process extends Thread { + + private final int index; + private final Asynchronous item; + + private volatile boolean started = false; + private volatile boolean completed = false; + + public Process(int index, Asynchronous item) { + super("Process " + index); + + this.index = index; + this.item = item; + this.setDaemon(true); + + } + + @Override + public void run() { + + if (started) { + System.out.println("trying to start an already running task"); + return; + } + + started = true; + + item.start(); + + completed = true; + + taskCompleted(index); + + } + + public boolean isStarted() { + return started; + } + public boolean isCompleted() { + return completed; + } + + } + + private Asynchronous[] items; + private Process[] process; + private boolean finished = false; + private boolean started = false; + private Thread initThread; + private int maxThreads = 100; + private volatile int startedCount; // volatile ensures it is updated fro other threads + + // create a monitor for the provided tasks + public AsynchMonitor(Asynchronous... items) { + + this.items = items; + this.process = new Process[items.length]; + //this.complete = new boolean[items.length]; + + for (int i=0; i < items.length; i++) { + + process[i] = new Process(i, items[i]); + + } + + } + + // kick off each of the sub tasks + public void start() throws Exception { + + if (started) { + throw new Exception("Processes already started exception"); + } + + started = true; + finished = false; + + startedCount = Math.min(maxThreads, items.length); + + // can't use started count because it might get updated by a quick finisher + int stop = startedCount; + + // start the initial processes checking that they haven't already been started + // by a quick finisher + for (int i=0; i < stop; i++) { + if (!process[i].isStarted()) { + process[i].start(); + } + } + + } + + public void setMaxThreads(int max) { + this.maxThreads = max; + } + + + public void startAndWait() throws Exception { + + try { + start(); + } catch (Exception ex) { + throw ex; + } + + suspend(); + + } + + public void suspend() { + + initThread = Thread.currentThread(); + + while (!finished) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + //System.out.println("interrupted"); + } + } + + + } + + + private synchronized void taskCompleted(int index) { + + //System.out.println("Sub task " + index + " finished"); + + //complete[index] = true; + + + // look for more to start up but domn't include the initial start ups + for (int i=startedCount; i < process.length; i++) { + if (!process[i].isStarted()) { + //System.out.println("Starting process " + i + " out of " + process.length); + startedCount = i + 1; + process[i].start(); + break; + } + } + + /* + for (Process process: process) { + if (!process.isStarted()) { + process.start(); + break; + } + } + */ + boolean allDone = true; + for (Process process: process) { + if (!process.isCompleted()) { + allDone = false; + break; + } + } + + // if we are all done then wake the requested thread + if (allDone && !finished) { + //System.out.println("All the sub tasks have completed"); + finished = true; + if (initThread != null) { + initThread.interrupt(); + } + } + + } + + public boolean isFinished() { + return finished; + } + + +} diff --git a/info/Minesweeper/Images/.project b/info/Minesweeper/Images/.project new file mode 100644 index 0000000..ed8125f --- /dev/null +++ b/info/Minesweeper/Images/.project @@ -0,0 +1,11 @@ + + + Images + + + + + + + + diff --git a/info/Minesweeper/Images/ReadMe/BruteForce_deep_analysis1.JPG b/info/Minesweeper/Images/ReadMe/BruteForce_deep_analysis1.JPG new file mode 100644 index 0000000..7436477 Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/BruteForce_deep_analysis1.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/GUI.JPG b/info/Minesweeper/Images/ReadMe/GUI.JPG new file mode 100644 index 0000000..bea2228 Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/GUI.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/Local_analysis1.JPG b/info/Minesweeper/Images/ReadMe/Local_analysis1.JPG new file mode 100644 index 0000000..853a171 Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/Local_analysis1.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/No_information_on_edge.JPG b/info/Minesweeper/Images/ReadMe/No_information_on_edge.JPG new file mode 100644 index 0000000..3a4f06c Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/No_information_on_edge.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/Probability_engine1.JPG b/info/Minesweeper/Images/ReadMe/Probability_engine1.JPG new file mode 100644 index 0000000..a1b22ca Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/Probability_engine1.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/Probability_engine2.JPG b/info/Minesweeper/Images/ReadMe/Probability_engine2.JPG new file mode 100644 index 0000000..d79d203 Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/Probability_engine2.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/Trivial_analysis1.JPG b/info/Minesweeper/Images/ReadMe/Trivial_analysis1.JPG new file mode 100644 index 0000000..4db3c5e Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/Trivial_analysis1.JPG differ diff --git a/info/Minesweeper/Images/ReadMe/Trivial_analysis2.jpg b/info/Minesweeper/Images/ReadMe/Trivial_analysis2.jpg new file mode 100644 index 0000000..fc596d9 Binary files /dev/null and b/info/Minesweeper/Images/ReadMe/Trivial_analysis2.jpg differ diff --git a/info/Minesweeper/MineSweeperSolver/.classpath b/info/Minesweeper/MineSweeperSolver/.classpath new file mode 100644 index 0000000..8004338 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/info/Minesweeper/MineSweeperSolver/.gitignore b/info/Minesweeper/MineSweeperSolver/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/info/Minesweeper/MineSweeperSolver/.project b/info/Minesweeper/MineSweeperSolver/.project new file mode 100644 index 0000000..9cd67eb --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/.project @@ -0,0 +1,17 @@ + + + MineSweeperSolver + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardState.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardState.java new file mode 100644 index 0000000..87b1458 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardState.java @@ -0,0 +1,888 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import minesweeper.gamestate.GameStateModel; +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.BoardStateCache.AdjacentSquares; +import minesweeper.solver.BoardStateCache.Cache; +import minesweeper.solver.utility.Logger; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class BoardState { + + private final static int[] DX = {0, 1, 1, 1, 0, -1, -1, -1}; + private final static int[] DY = {-1, -1, 0, 1, 1, 1, 0, -1}; + + //private AdjacentSquares[][] adjacentLocations1; + //private AdjacentSquares[][] adjacentLocations2; + + private int[][] board; + private boolean[][] revealed; + private boolean[][] confirmedMine; + private boolean[][] flagOnBoard; + + //private int[][] clearAll; + + private int[][] adjFlagsConfirmed; + private int[][] adjFlagsOnBoard; + private int[][] adjUnrevealed; + + // this holds the actions made against each location and a list of actions generated this turn + private Action[][] action; + private List actionList = new ArrayList(); + + private final GameStateModel myGame; + private final Solver solver; + private final int height; + private final int width; + + private int totalFlags = 0; + private int confirmedMinesTotal = 0; + private int numOfHidden = 0; + + private int[] unplayedMoves; + + private int testMoveBalance = 0; + + private Set livingWitnesses = new HashSet<>(); + + private final Cache cache; + + public BoardState(Solver solver) { + + this.solver = solver; + this.myGame = solver.getGame(); + this.width = myGame.getWidth(); + this.height = myGame.getHeight(); + + confirmedMine = new boolean[myGame.getWidth()][myGame.getHeight()]; + adjFlagsConfirmed = new int[myGame.getWidth()][myGame.getHeight()]; + adjUnrevealed = new int[myGame.getWidth()][myGame.getHeight()]; + revealed = new boolean[myGame.getWidth()][myGame.getHeight()]; + board = new int[myGame.getWidth()][myGame.getHeight()]; + + flagOnBoard = new boolean[myGame.getWidth()][myGame.getHeight()]; + adjFlagsOnBoard = new int[myGame.getWidth()][myGame.getHeight()]; + + action = new Action[myGame.getWidth()][myGame.getHeight()]; + + // look up the adjacent squares details + cache = BoardStateCache.getInstance().getAdjacentSquares1(myGame.getWidth(), myGame.getHeight()); + //adjacentLocations1 = cache.adjacentLocations1; + //adjacentLocations2 = cache.adjacentLocations2; + + + final int bottom = myGame.getHeight() - 1; + final int right = myGame.getWidth() - 1; + + // set up how many adjacent locations there are to each square - they are all unrevealed to start with + for (int x=0; x < width; x++) { + for (int y=0; y < height; y++) { + + int adjacent = 8; + // corners + if (x == 0 && y == 0 || x == 0 && y == bottom || x == right && y == 0 || x == right && y == bottom) { + adjacent = 3; + // the edge + } else if (x == 0 || y == 0 || x == right || y == bottom){ + adjacent = 5; + } + + adjUnrevealed[x][y] = adjacent; + + } + } + + + } + + public void process() { + + totalFlags = 0; + confirmedMinesTotal = 0; + numOfHidden = 0; + + // clear down this array, which is a lot faster then defining it fresh + for (int i=0; i < width; i++) { + for (int j=0; j < height; j++) { + adjFlagsOnBoard[i][j] = 0; + } + } + + // clear down the moves we collected last turn + actionList.clear(); + + // load up what we can see on the board + for (int i=0; i < width; i++) { + for (int j=0; j < height; j++) { + + Location location = getLocation(i, j); + + flagOnBoard[i][j] = false; // until proven otherwise + int info = myGame.query(location); + + Action act = action[i][j]; + + // if the move isn't a certainty then don't bother with it. The opening book is a certainty on the first move, but isn't really if the player plays somewhere else. + if (act != null && (!act.isCertainty() || act.getMoveMethod() == MoveMethod.BOOK)) { + action[i][j] = null; + act = null; + } + + if (info != GameStateModel.HIDDEN) { + if (info == GameStateModel.FLAG) { + totalFlags++; + flagOnBoard[i][j] = true; + + // inform its neighbours they have a flag on the board + for (int k=0; k < DX.length; k++) { + if (i + DX[k] >= 0 && i + DX[k] < width && j + DY[k] >= 0 && j + DY[k] < height) { + adjFlagsOnBoard[i + DX[k]][j + DY[k]]++; + } + } + + if (confirmedMine[i][j]) { // mine found by solver + confirmedMinesTotal++; + } else { + numOfHidden++; // flag on the board but we can't confirm it + } + + // if the board is a flag, but we are 100% sure its a clear then remove the flag + // then clear the square + if (act != null && act.getAction() == Action.CLEAR && act.isCertainty()) { + actionList.add(new Action(act, Action.FLAG, MoveMethod.CORRECTION, "Remove flag", BigDecimal.ONE, 0)); + actionList.add(act); + } + + } else { + + // if this is a new unrevealed location then set it up and inform it's neighbours they have one less unrevealed adjacent location + if (!revealed[i][j]) { + + livingWitnesses.add(location); // add this to living witnesses + //display("Location (" + i + "," + j + ") is revealed"); + + revealed[i][j] = true; + board[i][j] = info; + + for (int k=0; k < DX.length; k++) { + if (i + DX[k] >= 0 && i + DX[k] < width && j + DY[k] >= 0 && j + DY[k] < height) { + adjUnrevealed[i + DX[k]][j + DY[k]]--; + } + } + + } + + } + } else { + if ((solver.getPlayStyle().flagless || solver.getPlayStyle().efficiency) && confirmedMine[i][j]) { // if we are playing flags free then all confirmed mines are consider to be flagged + confirmedMinesTotal++; + totalFlags++; + } else { + numOfHidden++; + } + + // if we have an action against this location which we are 100% sure about then do it + if (act != null && act.isCertainty()) { + if ((solver.getPlayStyle().flagless || solver.getPlayStyle().efficiency) && act.getAction() == Action.FLAG) { + // unless the we are playing flag free and it's a flag + } else { + actionList.add(act); + } + + } + } + + } + } + + List toRemove = new ArrayList<>(); + for (Location wit: livingWitnesses) { + if (this.countAdjacentUnrevealed(wit) == 0) { + //display("Location " + wit.display() + " is now a dead witness"); + toRemove.add(wit); + } + } + livingWitnesses.removeAll(toRemove); + + + // this sorts the moves by when they were discovered + Collections.sort(actionList, Action.SORT_BY_MOVE_NUMBER); + + unplayedMoves = new int[MoveMethod.values().length]; + + // accumulate how many unplayed moves there are by method + for (Action a: actionList) { + unplayedMoves[a.getMoveMethod().ordinal()]++; + } + + getLogger().log(Level.INFO, "Moves left to play is %d", actionList.size()); + for (int i=0; i < unplayedMoves.length; i++) { + if (unplayedMoves[i] != 0) { + getLogger().log(Level.INFO, " %s has %d moves unplayed",MoveMethod.values()[i], unplayedMoves[i]); + } + } + + + } + + protected int getGameWidth() { + return width; + } + + protected int getGameHeight() { + return height; + } + + protected int getMines() { + return this.myGame.getMines(); + } + + + //public void setAction(Action a) { + // setAction(a, true); + //} + + /** + * Register the action against the location(x,y); + * Optionally add the action to the list of actions to play this turn + */ + public void setAction(Action a) { + + //display("Setting action at " + a.display()); + + if (action[a.x][a.y] != null) { + return; + } + + action[a.x][a.y] = a; + + if (a.getAction() == Action.FLAG) { + setMineFound(a); + } + + if ((solver.getPlayStyle().flagless || solver.getPlayStyle().efficiency) && a.getAction() == Action.FLAG) { + // if it is flag free or efficiency and we have discovered a mine then don't flag it + } else if (isFlagOnBoard(a) && a.getAction() == Action.FLAG) { + // if the flag is already on the board then nothing to do + } else if (isFlagOnBoard(a) && a.getAction() == Action.CLEAR) { + // if a flag is blocking the clear move then remove the flag first + actionList.add(new Action(a, Action.FLAG, MoveMethod.CORRECTION, "Remove flag", BigDecimal.ONE, 0)); + actionList.add(a); + } else { + actionList.add(a); + } + + + } + + protected boolean alreadyActioned(Location l) { + return alreadyActioned(l.x, l.y); + } + + protected boolean alreadyActioned(int x, int y) { + return (action[x][y] != null); + } + + + protected List getActions() { + return this.actionList; + } + + /** + * This will consider chords when returning the moves to play + */ + /* + protected List getActionsWithChords() { + + // if we aren't using chords or none are available then skip all this expensive processing + if (chordLocations.isEmpty() || !solver.isPlayChords()) { + return getActions(); + } + + List actions = new ArrayList<>(); + boolean[][] processed = new boolean[myGame.getWidth()][myGame.getHeight()]; + + // sort the most beneficial chords to the top + Collections.sort(chordLocations, ChordLocation.SORT_BY_BENEFIT_DESC); + + List toDelete = new ArrayList<>(); + + for (ChordLocation cl: chordLocations) { + + int benefit = 0; + int cost = 0; + + for (Location l: getAdjacentSquaresIterable(cl)) { + // flag not yet on board + if (!processed[l.x][l.y] && isConfirmedFlag(l) && !isFlagOnBoard(l)) { + cost++; + } + if (!processed[l.x][l.y] && isUnrevealed(l)) { + benefit++; + } + } + + + if (benefit - cost > 1) { + + for (Location l: getAdjacentSquaresIterable(cl)) { + // flag not yet on board + if (!processed[l.x][l.y] && isConfirmedFlag(l) && !isFlagOnBoard(l)) { + actions.add(new Action(l, Action.FLAG, MoveMethod.TRIVIAL, "Place flag", BigDecimal.ONE, 0)); + } + // flag on board in error + if (!processed[l.x][l.y] && !isConfirmedFlag(l) && isFlagOnBoard(l)) { + actions.add(new Action(l, Action.FLAG, MoveMethod.CORRECTION, "Remove flag", BigDecimal.ONE, 0)); + } + processed[l.x][l.y] = true; + } + // now add the clear all + actions.add(new Action(cl, Action.CLEARALL, MoveMethod.TRIVIAL, "Clear All", BigDecimal.ONE, 1)); + + } else { + //toDelete.add(cl); + } + } + + chordLocations.removeAll(toDelete); + + // now add the the actions that haven't been resolved by a chord play + for (Action act: actionList) { + if (!processed[act.x][act.y]) { + processed[act.x][act.y] = true; + } + actions.add(act); + } + + return actions; + } + */ + /** + * Get the probability of a mine being in this square (based upon the actions still pending) + */ + protected BigDecimal getProbability(int x, int y) { + + for (Action act: actionList) { + if (act.x == x && act.y== y) { + if (act.getAction() == Action.FLAG) { + return BigDecimal.ZERO; + } else if (act.getAction() == Action.CLEAR) { + return act.getBigProb(); + } + + } + } + + + return null; + + } + + + //protected int getActionsCount() { + // return this.actionList.size(); + //} + + /** + * Add a isolated dead tile + */ + //protected void addIsolatedDeadTile(Location loc) { + // isolatedDeadTiles.add(loc); + //} + + //public int getIsolatedDeadTileCount() { + // return this.isolatedDeadTiles.size(); + //} + + /** + * Returns and removes the first Isolated Dead Tile in the set + */ + //public Location getIsolatedDeadTile() { + // for (Location loc: isolatedDeadTiles) { + // //isolatedDeadTiles.remove(loc); + // return loc; + // } + // return null; + //} + + protected List getWitnesses(Collection square) { + return new ArrayList(getWitnessesArea(square).getLocations()); + } + + /** + * From the given locations, generate all the revealed squares that can witness these locations + */ + protected Area getWitnessesArea(Collection square) { + + Set work = new HashSet<>(10); + + for (Location loc: square) { + + for (Location adj: this.getAdjacentSquaresIterable(loc)) { + // determine the number of distinct witnesses + if (isRevealed(adj)) { + work.add(adj); + } + } + } + + return new Area(work); + + } + + /** + * From the given locations, generate an area containing all the un-revealed squares around them + */ + protected Area getUnrevealedArea(List witnesses) { + return new Area(getUnrevealedSquaresDo(witnesses)); + } + + /** + * From the given locations, generate all the un-revealed squares around them + */ + protected List getUnrevealedSquares(List witnesses) { + return new ArrayList(getUnrevealedSquaresDo(witnesses)); + } + + + private Set getUnrevealedSquaresDo(List witnesses) { + + Set work = new HashSet<>(witnesses.size() * 3); + + for (Location loc: witnesses) { + + for (Location adj: this.getAdjacentSquaresIterable(loc)) { + + if (isUnrevealed(adj)) { + work.add(adj); + } + } + + } + + return work; + } + + /** + * Return all the unrevealed Locations on the board + */ + protected List getAllUnrevealedSquares() { + + ArrayList work = new ArrayList<>(width * height); + + for (int i=0; i < width; i++) { + for (int j=0; j < height; j++) { + if (isUnrevealed(i,j)) { + work.add(getLocation(i,j)); + } + } + } + + return work; + } + + protected List getAllLivingWitnesses() { + return new ArrayList<>(livingWitnesses); + } + + + /** + * Return a list of Unrevealed Locations adjacent to this one + */ + protected List getAdjacentUnrevealedSquares(Location loc) { + + return getAdjacentUnrevealedSquares(loc, 1); + } + + /** + * Return an Area of un-revealed Locations adjacent to this one + */ + protected Area getAdjacentUnrevealedArea(Location loc) { + + return new Area(getAdjacentUnrevealedSquares(loc, 1)); + } + + + /** + * Return a list of Unrevealed Locations adjacent to this one + */ + protected List getAdjacentUnrevealedSquares(Location loc, int size ) { + + ArrayList work = new ArrayList<>(); + + for (Location a: getAdjacentSquaresIterable(loc, size)) { + if (isUnrevealed(a)) { + work.add(a); + } + } + + return work; + } + + /** + * Return the Location for this position, avoids having to instantiate one + */ + protected Location getLocation(int x, int y) { + if (x < 0 || x >= this.width || y < 0 || y >= this.height) { + return null; + } else { + return cache.getLocation(x, y); + } + + } + + + /** + * This returns the adjacent squares to a depth of size away. So (l,2) returns the 24 squares 2 deep surrounding l. + */ + protected Iterable getAdjacentSquaresIterable(Location loc, int size) { + if (size == 1) { + return getAdjacentSquaresIterable(loc); + } else { + return cache.adjacentLocations2[loc.x][loc.y]; + } + + } + + protected Iterable getAdjacentSquaresIterable(Location loc) { + return cache.adjacentLocations1[loc.x][loc.y]; + } + + + /** + * Done as part of validating Locations, must be undone using clearWitness() + */ + protected void setWitnessValue(Location l, int value) { + board[l.x][l.y] = value; + revealed[l.x][l.y] = true; + + testMoveBalance++; + + } + + /** + * Done as part of validating Locations + */ + protected void clearWitness(Location l) { + board[l.x][l.y] = 0; + revealed[l.x][l.y] = false; + + testMoveBalance--; + + } + + /** + * Method to read our own array of reveal values. + */ + protected int getWitnessValue(Location l) { + return getWitnessValue(l.x, l.y); + } + + /** + * Method to read our own array of reveal values. + */ + protected int getWitnessValue(int x, int y) { + if (isUnrevealed(x,y)) { + throw new RuntimeException("Trying to get a witness value for an unrevealed square"); + } + return board[x][y]; + } + + /** + * indicates a flag is on the board, but the solver can't confirm it + */ + protected boolean isUnconfirmedFlag(Location l) { + return isUnconfirmedFlag(l.x, l.y); + } + + /** + * indicates a flag is on the board, but the solver can't confirm it + */ + protected boolean isUnconfirmedFlag(int x, int y) { + return flagOnBoard[x][y] && !confirmedMine[x][y]; + } + + /** + * indicates a flag is on the board + */ + protected boolean isFlagOnBoard(Location l) { + return isFlagOnBoard(l.x, l.y); + } + + /** + * indicates a flag is on the board + */ + protected boolean isFlagOnBoard(int x, int y) { + return flagOnBoard[x][y]; + } + + + protected void setFlagOnBoard(Location l) { + setFlagOnBoard(l.x, l.y); + } + + protected void setFlagOnBoard(int x, int y) { + flagOnBoard[x][y] = true; + } + + protected void setMineFound(Location loc) { + + if (isConfirmedMine(loc)) { + return; + } + + confirmedMinesTotal++; + confirmedMine[loc.x][loc.y] = true; + + // if the flag isn't already on the board then this is also another on the total of all flags + if (!flagOnBoard[loc.x][loc.y]) { + totalFlags++; + } + + // let all the adjacent squares know they have one more flag next to them and one less unrevealed location + for (Location a: getAdjacentSquaresIterable(loc)) { + adjFlagsConfirmed[a.x][a.y]++; + adjUnrevealed[a.x][a.y]--; + } + + } + + protected void unsetMineFound(Location loc) { + + if (!isConfirmedMine(loc)) { + return; + } + + confirmedMinesTotal--; + confirmedMine[loc.x][loc.y] = false; + + + // if the flag isn't already on the board then this is also another on the total of all flags + if (!flagOnBoard[loc.x][loc.y]) { + totalFlags--; + } + + // let all the adjacent squares know they have one less mine next to them and one more unrevealed location + for (Location a: getAdjacentSquaresIterable(loc)) { + adjFlagsConfirmed[a.x][a.y]--; + adjUnrevealed[a.x][a.y]++; + } + + } + + /** + * Since Flag Free is a thing, we can't rely on the GameState to tell us where the flags are, + * so this replaces that. + */ + protected boolean isConfirmedMine(Location l) { + return isConfirmedMine(l.x, l.y); + } + + /** + * Since Flag Free is a thing, we can't rely on the GameState to tell us where the flags are, + * so this replaces that. + */ + protected boolean isConfirmedMine(int x, int y) { + return confirmedMine[x][y]; + } + + /** + * Returns whether the location is revealed + */ + protected boolean isRevealed(Location l) { + return isRevealed(l.x, l.y); + } + + /** + * Returns whether the location is revealed + */ + protected boolean isRevealed(int x, int y) { + return revealed[x][y]; + } + + /** + * Returns whether the location is unrevealed (neither revealed nor a confirmed flag) + */ + protected boolean isUnrevealed(Location l) { + return isUnrevealed(l.x, l.y); + } + + /** + * Returns whether the location is unrevealed (neither revealed nor a confirmed flag) + */ + protected boolean isUnrevealed(int x, int y) { + return !confirmedMine[x][y] && !revealed[x][y]; + } + + /** + * count how many confirmed flags are adjacent to this square + */ + protected int countAdjacentConfirmedFlags(Location l) { + return countAdjacentConfirmedFlags(l.x, l.y); + } + + /** + * count how many confirmed flags are adjacent to this square + */ + protected int countAdjacentConfirmedFlags(int x, int y) { + + return adjFlagsConfirmed[x][y]; + + } + + /** + * count how many flags are adjacent to this square on the board + */ + protected int countAdjacentFlagsOnBoard(Location l) { + return countAdjacentFlagsOnBoard(l.x, l.y); + } + + /** + * count how many flags are adjacent to this square on the board + */ + protected int countAdjacentFlagsOnBoard(int x, int y) { + + return adjFlagsOnBoard[x][y]; + + } + + + /** + * count how many confirmed and unconfirmed flags are adjacent to this square + */ + protected int countAllFlags(int x, int y) { + + int result = 0; + + for (int i=0; i < DX.length; i++) { + if (x + DX[i] >= 0 && x + DX[i] < width && y + DY[i] >= 0 && y + DY[i] < height) { + if (confirmedMine[x + DX[i]][y + DY[i]] || flagOnBoard[x + DX[i]][y + DY[i]]) { + result++; + } + } + } + + return result; + + } + + /** + * count how many adjacent squares are neither flags nor revealed + */ + protected int countAdjacentUnrevealed(Location l) { + + return countAdjacentUnrevealed(l.x, l.y); + + } + + /** + * count how many adjacent squares are neither confirmed flags nor revealed + */ + protected int countAdjacentUnrevealed(int x, int y) { + + return adjUnrevealed[x][y]; + + } + + /** + * count how many squares are neither confirmed flags nor revealed + */ + protected int getTotalUnrevealedCount() { + + return numOfHidden; + + } + + /** + * Returns the number of mines the solver knows the location of + */ + protected int getConfirmedMineCount() { + + return confirmedMinesTotal; + + } + + /** + * Number of flags on the board both confirmed and unconfirmed + */ + protected int getTotalFlagCount() { + return this.totalFlags; + } + + protected int getUnplayedMoves(MoveMethod method) { + return unplayedMoves[method.ordinal()]; + } + + + // check for flags which can be determined to be wrong + protected boolean validateData() { + + for (int i=0; i < width; i++) { + for (int j=0; j < height; j++) { + + // if there is an unconfirmed flag on the board but the solver + // thinks it is clear then the flag is wrong + if (isUnconfirmedFlag(i,j) && action[i][j] != null && action[i][j].getAction() == Action.CLEAR) { + getLogger().log(Level.INFO, "Flag in Error at (%d, %d) confirmed CLEAR", i, j); + return false; + } + + if (isRevealed(i,j) && getWitnessValue(i,j) != 0) { + int flags = countAllFlags(i,j); + + // if we have too many flags by a revealed square then a mistake has been made + if (getWitnessValue(i,j) < flags) { + getLogger().log(Level.INFO, "Flag in Error at witness (%d, %d) Overloads: Flags %d" ,i, j, flags); + return false; + } + } + + } + + } + + return true; + + } + + /** + * Returns true if the board is consider high mine density + * @return + */ + public boolean isHighDensity() { + + int minesLeft = getMines() - getConfirmedMineCount(); + int tilesLeft = getTotalUnrevealedCount(); + + return (minesLeft * 5 > tilesLeft * 2) && Solver.CONSIDER_HIGH_DENSITY_STRATEGY; + } + + + public int getTestMoveBalance() { + return this.testMoveBalance; + } + + protected Logger getLogger() { + return solver.logger; + } + + //protected void display(String text) { + // solver.display(text); + //} + + protected Solver getSolver() { + return solver; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardStateCache.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardStateCache.java new file mode 100644 index 0000000..4f05ac1 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BoardStateCache.java @@ -0,0 +1,134 @@ +package minesweeper.solver; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import minesweeper.structure.Location; + +public class BoardStateCache { + + private final static int[] DX = {0, 1, 1, 1, 0, -1, -1, -1}; + private final static int[] DY = {-1, -1, 0, 1, 1, 1, 0, -1}; + + protected class Cache { + + private int width; + private int height; + + protected Location[][] locations; + + protected AdjacentSquares[][] adjacentLocations1; + protected AdjacentSquares[][] adjacentLocations2; + + protected Location getLocation(int x, int y) { + return locations[x][y]; + } + + } + + // iterator for adjacent squares + protected class AdjacentSquares implements Iterable { + + private Location loc; + private final int size; + private List locations; + + AdjacentSquares(Cache cache, Location l, int width, int height, int size) { + this.loc = l; + this.size = size; + + if (size == 1) { + locations = new ArrayList<>(8); + for (int i=0; i < DX.length; i++) { + if (loc.x + DX[i] >= 0 && loc.x + DX[i] < width && loc.y + DY[i] >= 0 && loc.y + DY[i] < height) { + locations.add(cache.getLocation(loc.x + DX[i], loc.y + DY[i])); + } + + } + } else { + int startX = Math.max(0, loc.x - this.size); + int endX = Math.min(width - 1, loc.x + this.size); + + int startY = Math.max(0, loc.y - this.size); + int endY = Math.min(height - 1, loc.y + this.size); + + locations = new ArrayList<>((this.size * 2 - 1) * (this.size * 2 - 1)); + for (int i=startX; i <= endX; i++) { + for (int j=startY; j <= endY; j++) { + if (i == loc.x && j == loc.y) { + // don't send back the central location + } else { + locations.add(cache.getLocation(i,j)); + } + + } + } + } + + + } + + @Override + public Iterator iterator() { + return locations.iterator(); + } + + + } + + private static List cacheAdjSqu = new ArrayList<>(); + private static BoardStateCache me; + + + public synchronized Cache getAdjacentSquares1(int width, int height) { + + for (Cache cache: cacheAdjSqu) { + if (cache.height == height && cache.width == width) { + return cache; + } + } + + Cache cache = new Cache(); + + cache.height = height; + cache.width = width; + + cache.locations = new Location[width][height]; + + // Create a Location for each entry yon the board + for (int x=0; x < width; x++) { + for (int y=0; y < height; y++) { + cache.locations[x][y] = new Location(x,y); + } + } + + cache.adjacentLocations1 = new AdjacentSquares[width][height]; + cache.adjacentLocations2 = new AdjacentSquares[width][height]; + + // set up how many adjacent locations there are to each square - they are all unrevealed to start with + for (int x=0; x < width; x++) { + for (int y=0; y < height; y++) { + + cache.adjacentLocations1[x][y] = new AdjacentSquares(cache, cache.getLocation(x,y), width, height, 1); + cache.adjacentLocations2[x][y] = new AdjacentSquares(cache, cache.getLocation(x,y), width, height, 2); + + } + } + + cacheAdjSqu.add(cache); + + return cache; + } + + public static synchronized BoardStateCache getInstance() { + + if (me == null) { + me = new BoardStateCache(); + } + + return me; + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForce.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForce.java new file mode 100644 index 0000000..688b7d2 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForce.java @@ -0,0 +1,464 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; + +import Monitor.AsynchMonitor; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.iterator.WitnessWebIterator; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Location; + +public class BruteForce { + + //private final static BigDecimal ZERO_THRESHOLD = new BigDecimal("0.25"); + + + private final WitnessWeb web; + private final Solver solver; + private final BoardState boardState; + + + private final int mines; + private final BigInteger maxIterations; + private final int bfMaxSolutions; + + private CrunchResult crunchResult; + + private boolean hasRun = false; + private boolean certainClear = false; + + //private final List zeroLocations = new ArrayList<>(); + + private final List results = new ArrayList<>(); + + private final String scope; + + private BigInteger iterations; + + private BruteForceAnalysisModel bruteForceAnalysis; + + public BruteForce(Solver solver, BoardState boardState, WitnessWeb web, int mines, BigInteger maxIterations, int bfMaxSolutions, String scope) { + + this.solver = solver; + this.boardState = boardState; + this.maxIterations = maxIterations; + this.bfMaxSolutions = bfMaxSolutions; + this.scope = scope; + + this.web = web; + + this.mines = mines; + + } + + public void process() { + + solver.logger.log(Level.INFO, "Brute force on %d Squares with %d mines", web.getSquares().size(), mines); + + // if we have no mines to place then everything must be a clear + if (mines == 0 ) { + solver.logger.log(Level.INFO, "brute force but already found all the mines - clear all the remaining squares"); + for (Square squ: web.getSquares()) { + results.add(new CandidateLocation(squ.x, squ.y, BigDecimal.ONE, boardState.countAdjacentUnrevealed(squ), boardState.countAdjacentConfirmedFlags(squ))); + } + iterations = BigInteger.ONE; + hasRun = true; + return; + } + + // now doing this logic 'just in time' rather than always at witness web generation + web.generateIndependentWitnesses(); + + // and crunch the result if we have something to check against + if (web.getPrunedWitnesses().size() >= 0) { + + iterations = web.getIterations(mines); + + if (iterations.compareTo(maxIterations) <= 0) { + + //display("Brute Force about to process " + iterations + " iterations"); + WitnessWebIterator[] iterators = buildParallelIterators(mines, iterations); + + this.bruteForceAnalysis = new BruteForceAnalysis(solver, iterators[0].getLocations(), bfMaxSolutions, scope, solver.bfdaStartLocations()); + + + crunchResult = crunchParallel(web.getSquares(), web.getPrunedWitnesses(), true, iterators); + + // if there are too many to process then don't bother + if (this.bruteForceAnalysis != null && this.bruteForceAnalysis.tooMany()) { + this.bruteForceAnalysis = null; + } + + + int actIterations = 0; + for (WitnessWebIterator i: iterators) { + actIterations = actIterations + i.getIterations(); + } + + solver.logger.log(Level.DEBUG, "Expected iterations %d Actual iterations %d", iterations, actIterations); + + solver.logger.log(Level.INFO, "Found %d candidate solutions in the %s", crunchResult.bigGoodCandidates, scope); + + certainClear = findCertainClear(crunchResult); + if (certainClear) { + this.bruteForceAnalysis = null; + } + + hasRun = true; + + //TODO zero additional mines calculater - do we want it? + /* + if (crunchResult.bigGoodCandidates.signum() != 0) { + BigInteger hwm = BigInteger.ZERO; + int best = -1; + for (int i=0; i < crunchResult.getSquare().size(); i++) { + + Location loc = crunchResult.getSquare().get(i); + + int adjacentMines = boardState.countAdjacentConfirmedFlags(loc); + + BigDecimal prob = new BigDecimal(crunchResult.bigDistribution[i][adjacentMines]).divide(new BigDecimal(crunchResult.bigGoodCandidates), Solver.DP, RoundingMode.HALF_UP); + + if (prob.compareTo(ZERO_THRESHOLD) >= 0) { + SuperLocation zl = new SuperLocation(loc.x, loc.y, boardState.countAdjacentUnrevealed(loc), adjacentMines); + zl.setProbability(prob); + zeroLocations.add(zl); + } + if (crunchResult.bigDistribution[i][adjacentMines].compareTo(hwm) > 0) { + hwm = crunchResult.bigDistribution[i][adjacentMines]; + best = i; + } + } + + if (best != -1) { + BigDecimal prob = new BigDecimal(hwm).divide(new BigDecimal(crunchResult.bigGoodCandidates), Solver.DP, RoundingMode.HALF_UP); + boardState.display("Location " + crunchResult.getSquare().get(best).display() + " is a 'zero additional mines' with probability " + prob); + } + } + */ + + } else { + if (maxIterations.signum() != 0) { + solver.logger.log(Level.INFO, "Brute Force too large with %d iterations", iterations); + } + } + + } else { + solver.logger.log(Level.INFO, "Brute Force not performed since there are no witnesses"); + } + + } + + // break a witness web search into a number of non-overlapping iterators + private WitnessWebIterator[] buildParallelIterators(int mines, BigInteger totalIterations) { + + solver.logger.log(Level.DEBUG, "Building parallel iterators"); + + //WitnessWebIterator[] result1 = new WitnessWebIterator[1]; + //result1[0] = new WitnessWebIterator(web, mines); + //return result1; + + solver.logger.log(Level.DEBUG, "Non independent iterations %d", web.getNonIndependentIterations(mines)); + + + // if there is only one cog then we can't lock it,so send back a single iterator + if (web.getIndependentWitnesses().size() == 1 && web.getIndependentMines() >= mines || totalIterations.compareTo(Solver.PARALLEL_MINIMUM) < 0 + || web.getPrunedWitnesses().size() == 0 || solver.preferences.isSingleThread()) { + solver.logger.log(Level.DEBUG, "Only a single iterator will be used"); + WitnessWebIterator[] result = new WitnessWebIterator[1]; + result[0] = new WitnessWebIterator(web, mines); + return result; + } + + int witMines = web.getIndependentWitnesses().get(0).getMines(); + int squares = web.getIndependentWitnesses().get(0).getSquares().size(); + + BigInteger bigIterations = Solver.combination(witMines, squares); + + int iter = bigIterations.intValue(); + + solver.logger.log(Level.DEBUG, "The first cog has %d iterations, so parallel processing is possible", iter); + + WitnessWebIterator[] result = new WitnessWebIterator[iter]; + + for (int i=0; i < iter; i++) { + result[i] = new WitnessWebIterator(web, mines, i); // create a iterator with a lock first got at position i + } + + + + return result; + + } + + // process the iterators in parallel + private CrunchResult crunchParallel(List square, List witness, boolean calculateDistribution, WitnessWebIterator... iterator) { + + solver.logger.log(Level.DEBUG, "At parallel iterator processing"); + + Cruncher[] crunchers = new Cruncher[iterator.length]; + + for (int i=0; i < iterator.length; i++) { + crunchers[i] = new Cruncher(boardState, iterator[i].getLocations(), witness, iterator[i], false, bruteForceAnalysis); + } + + AsynchMonitor monitor = new AsynchMonitor(crunchers); + monitor.setMaxThreads(Solver.CORES); + try { + monitor.startAndWait(); + } catch (Exception ex) { + solver.logger.log(Level.ERROR, "Parallel processing caused an error: %s", ex.getMessage()); + ex.printStackTrace(); + } + + CrunchResult[] results = new CrunchResult[crunchers.length]; + for (int i=0; i < crunchers.length; i++) { + results[i] = crunchers[i].getResult(); + } + + CrunchResult result = CrunchResult.bigMerge(results); + + return result; + + } + + private boolean findCertainClear(CrunchResult output) { + + + // if there were no good candidates then there is nothing to check + if (output.bigGoodCandidates.signum() == 0) { + return false; + } + + // check the tally information to see if we have a square where a + // mine is never present + for (int i=0; i < output.bigTally.length; i++) { + + if (output.bigTally[i].signum() == 0) { + + return true; + + } + + } + + return false; + + } + + /* + // do the tally check using the BigInteger values + private List checkBigTally(CrunchResult output) { + + List result = new ArrayList<>(); + + // if there were no good candidates then there is nothing to check + if (output.bigGoodCandidates.compareTo(BigInteger.ZERO) == 0) { + return result; + } + + // check the tally information to see if we have a square where a + // mine is always present or never present + for (int i=0; i < output.bigTally.length; i++) { + + // if there is always a mine here then odds of clear is zero + if (output.bigTally[i].compareTo(output.bigGoodCandidates) == 0) { + + int x = output.getSquare().get(i).x; + int y = output.getSquare().get(i).y; + results.add(new CandidateLocation(x, y, BigDecimal.ZERO, boardState.countAdjacentUnrevealed(x, y), boardState.countAdjacentConfirmedFlags(x, y))); + + // if never a mine then odds of clear is one + } else if (output.bigTally[i].compareTo(BigInteger.ZERO) == 0) { + + int x = output.getSquare().get(i).x; + int y = output.getSquare().get(i).y; + results.add(new CandidateLocation(x, y, BigDecimal.ONE, boardState.countAdjacentUnrevealed(x, y), boardState.countAdjacentConfirmedFlags(x, y))); + + certainClear = true; + + } + + } + + return result; + + } + */ + + /* + public List getBestSolutions(BigDecimal freshhold) { + + if (crunchResult == null) { + return results; + } + + if (!results.isEmpty()) { + return results; + } + + List candidates = new ArrayList<>(); + + boolean ignoreBad = true; + if (crunchResult.getMaxCount() <= 1) { + ignoreBad = false; + solver.display("No candidates provide additional information"); + } + + + // Calculate the probability of a mine being in the square and store in a list + for (int i=0; i < crunchResult.bigTally.length; i++) { + + BigDecimal mine = new BigDecimal(crunchResult.bigTally[i]).divide(new BigDecimal(crunchResult.bigGoodCandidates), Solver.DP, RoundingMode.HALF_UP); + BigDecimal notMine = BigDecimal.ONE.subtract(mine); + + Location l = crunchResult.getSquare().get(i); + // ignore candidates that yield no info, unless none do or they are certainties + if (crunchResult.getBigCount()[i] > 1 || !ignoreBad || notMine.compareTo(BigDecimal.ZERO) == 0 || notMine.compareTo(BigDecimal.ONE) == 0) { + candidates.add(new CandidateLocation(l.x, l.y, notMine, boardState.countAdjacentUnrevealed(l), boardState.countAdjacentConfirmedFlags(l), crunchResult.getBigCount()[i])); + } else { + solver.display(l.display() + " clear probability " + notMine + " discarded because it reveals no further information"); + } + //candidates.add(new CandidateLocation(l.x, l.y, notMine, boardState.countAdjacentUnrevealed(l), boardState.countAdjacentConfirmedFlags(l))); + + } + + // sort the candidates into descending order by probability + Collections.sort(candidates, CandidateLocation.SORT_BY_PROB_FLAG_FREE); + + BigDecimal hwm = candidates.get(0).getProbability(); + + BigDecimal tolerence; + if (hwm.compareTo(BigDecimal.ONE) == 0) { + tolerence = hwm; + } else { + tolerence = hwm.multiply(freshhold); + } + + for (CandidateLocation cl: candidates) { + if (cl.getProbability().compareTo(tolerence) >= 0) { + results.add(cl); + } else { + break; + } + } + + boardState.display("Best Guess: " + candidates.size() + " candidates, " + results.size() + " passed tolerence at " + tolerence); + + return results; + } + */ + + public boolean hasRun() { + return this.hasRun; + } + + public boolean hasCertainClear() { + return this.certainClear; + } + + public CrunchResult getCrunchResult() { + return this.crunchResult; + } + + public BigInteger getSolutionCount() { + if (crunchResult == null) { + return BigInteger.ONE; + } + + return crunchResult.bigGoodCandidates; + } + + public BigInteger getIterations() { + return this.iterations; + } + + public int getTileCount() { + return web.getSquares().size(); + } + + + public BruteForceAnalysisModel getBruteForceAnalysis() { + return bruteForceAnalysis; + } + + /** + * Set the probability for the probabilityLocation being satisfied + * @param list + */ + /* + public List setProbabilities(List list) { + + if (!hasRun) { + return list; + } + + List output = new ArrayList<>(); + + for (ProbabilityLocation pl: list) { + for (int i=0; i < crunchResult.getSquare().size(); i++) { + if (crunchResult.getSquare().get(i).equals(pl)) { + + // get the values which are good for this location + int[] adjFlagsRequired = pl.getAdjacentFlagsRequired(); + + // count the number of solutions which have those values + BigInteger count = BigInteger.ZERO; + for (int j = 0; j < adjFlagsRequired.length; j++) { + count = count.add(crunchResult.bigDistribution[i][adjFlagsRequired[j]]); + } + + // work out the % chance of it happening or if zero chance discard the location + if (count.signum() != 0) { + BigDecimal prob = new BigDecimal(count).divide(new BigDecimal(crunchResult.bigGoodCandidates), Solver.DP, RoundingMode.HALF_UP); + pl.setProbability(prob); + boardState.display(pl.display() + " has probability " + prob); + output.add((T) pl); + } else { + boardState.display(pl.display() + " has probability zero and is being discarded"); + } + break; + } + } + } + + return output; + + } + */ + + /** + * Returns the probability that this square is not a mine + */ + public BigDecimal getProbability(int x, int y) { + + Location l = this.boardState.getLocation(x,y); + + if (crunchResult == null) { // this can happen if there are no mines left to find, so everything is a clear + for (Location loc: web.getSquares()) { // if the mouse is hovering over one of the brute forced squares + if (loc.equals(l)) { + return BigDecimal.ONE; + } + } + return BigDecimal.ZERO; + } + + + for (int i=0; i < crunchResult.getSquare().size(); i++) { + if (crunchResult.getSquare().get(i).equals(l)) { + BigDecimal prob = new BigDecimal(crunchResult.bigTally[i]).divide(new BigDecimal(crunchResult.bigGoodCandidates), Solver.DP, RoundingMode.HALF_UP); + return BigDecimal.ONE.subtract(prob); + } + } + + return BigDecimal.ZERO; + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysis.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysis.java new file mode 100644 index 0000000..2b61c53 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysis.java @@ -0,0 +1,981 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import minesweeper.gamestate.GameStateModel; +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class BruteForceAnalysis extends BruteForceAnalysisModel{ + + // used to hold all the solutions left in the game + private class SolutionTable { + + private final byte[][] solutions; + private int size = 0; + + private SolutionTable(int maxSize) { + solutions = new byte[maxSize][]; + } + + private void addSolution(byte[] solution) { + solutions[size] = solution; + size++; + }; + + private int size() { + return size; + } + + private byte[] get(int index) { + return solutions[index]; + } + + private void sortSolutions(int start, int end, int index) { + + Arrays.sort(solutions, start, end, sorters[index]); + + } + + } + + /** + * This sorts solutions by the value of a position + */ + private class SortSolutions implements Comparator { + + private final int sortIndex; + + public SortSolutions(int index) { + sortIndex = index; + } + + @Override + public int compare(byte[] o1, byte[] o2) { + return o1[sortIndex] - o2[sortIndex]; + } + + } + + /** + * A key to uniquely identify a position + */ + private class Position { + + private final byte[] position; + private int hash; + + private Position() { + position = new byte[locations.size()]; + for (int i=0; i < position.length; i++) { + position[i] = 15; + } + } + + private Position(Position p, int index, int value) { + // copy and update to reflect the new position + position = Arrays.copyOf(p.position, p.position.length); + position[index] = (byte) (value + 50); + } + + @Override + // copied from String hash + public int hashCode() { + int h = hash; + if (h == 0 && position.length > 0) { + for (int i = 0; i < position.length; i++) { + h = 31 * h + position[i]; + } + hash = h; + } + return h; + } + + @Override + public boolean equals(Object o) { + if (o instanceof Position) { + for (int i=0; i < position.length; i++) { + if (this.position[i] != ((Position) o).position[i]) { + return false; + } + } + return true; + } else { + return false; + } + } + } + + + + /** + * Positions on the board which can still reveal information about the game. + */ + private class LivingLocation implements Comparable{ + + //private int winningLines = 0; + private boolean pruned = false; + private final short index; + private int mineCount = 0; // number of remaining solutions which have a mine in this position + private int maxSolutions = 0; // the maximum number of solutions that can be remaining after clicking here + private int zeroSolutions = 0; // the number of solutions that have a '0' value here + private byte maxValue = -1; + private byte minValue = -1; + private byte count; // number of possible values at this location + + private Node[] children; + + private LivingLocation(short index) { + this.index = index; + } + + /** + * Determine the Nodes which are created if we play this move. Up to 9 positions where this locations reveals a value [0-8]. + * @param location + * @return + */ + private void buildChildNodes(Node parent) { + + // sort the solutions by possible values + allSolutions.sortSolutions(parent.startLocation, parent.endLocation, this.index); + int index = parent.startLocation; + + // skip over the mines + while (index < parent.endLocation && allSolutions.get(index)[this.index] == GameStateModel.MINE) { + index++; + } + + Node[] work = new Node[9]; + for (int i=this.minValue; i < this.maxValue + 1; i++) { + + // if the node is in the cache then use it + Position pos = new Position(parent.position, this.index, i); + + Node temp1 = cache.get(pos); + if (temp1 == null) { + + Node temp = new Node(pos); + + temp.startLocation = index; + // find all solutions for this values at this location + while (index < parent.endLocation && allSolutions.get(index)[this.index] == i) { + index++; + } + temp.endLocation = index; + + work[i] = temp; + + } else { + //System.out.println("In cache " + temp.position.key + " " + temp1.position.key); + //if (!temp.equals(temp1)) { + // System.out.println("Cache not equal!!"); + //} + //temp1.fromCache = true; + work[i] = temp1; + cacheHit++; + cacheWinningLines = cacheWinningLines + temp1.winningLines; + // skip past these details in the array + while (index < parent.endLocation && allSolutions.get(index)[this.index] <= i) { + index++; + } + } + + } + + if (index != parent.endLocation) { + System.out.println("Didn't read all the elements in the array; index = " + index + " end = " + parent.endLocation); + } + + + for (int i=this.minValue; i <= this.maxValue; i++) { + if (work[i].getSolutionSize() > 0) { + //if (!work[i].fromCache) { + // work[i].determineLivingLocations(this.livingLocations, living.index); + //} + } else { + work[i] = null; // if no solutions then don't hold on to the details + } + + } + + this.children = work; + + } + + @Override + public int compareTo(LivingLocation o) { + + // return location most likely to be clear - this has to be first, the logic depends upon it + int test = this.mineCount - o.mineCount; + if (test != 0) { + return test; + } + + // then the location most likely to have a zero + test = o.zeroSolutions - this.zeroSolutions; + if (test != 0) { + return test; + } + + // then by most number of different possible values + test = o.count - this.count; + if (test != 0) { + return test; + } + + // then by the maxSolutions - ascending + return this.maxSolutions - o.maxSolutions; + + } + + } + + /** + * A representation of a possible state of the game + */ + private class Node { + + private Position position ; // representation of the position we are analysing / have reached + + private int winningLines = 0; // this is the number of winning lines below this position in the tree + private int work = 0; // this is a measure of how much work was needed to calculate WinningLines value + private boolean fromCache = false; // indicates whether this position came from the cache + + private int startLocation; // the first solution in the solution array that applies to this position + private int endLocation; // the last + 1 solution in the solution array that applies to this position + + private List livingLocations; // these are the locations which need to be analysed + + private LivingLocation bestLiving; // after analysis this is the location that represents best play + + private Node() { + position = new Position(); + } + + private Node(Position position) { + this.position = position; + } + + private List getLivingLocations() { + return livingLocations; + } + + private int getSolutionSize() { + return endLocation - startLocation; + } + + /** + * Get the probability of winning the game from the position this node represents (winningLines / solution size) + * @return + */ + private BigDecimal getProbability() { + + return BigDecimal.valueOf(winningLines).divide(BigDecimal.valueOf(getSolutionSize()), Solver.DP, RoundingMode.HALF_UP); + + } + + /** + * Calculate the number of winning lines if this move is played at this position + * Used at top of the game tree + */ + private int getWinningLines(LivingLocation move) { + + //if we can never exceed the cutoff then no point continuing + if (Solver.PRUNE_BF_ANALYSIS && this.getSolutionSize() - move.mineCount <= this.winningLines) { + move.pruned = true; + return (this.getSolutionSize() - move.mineCount); + } + + int winningLines = getWinningLines(1, move, this.winningLines); + + if (winningLines > this.winningLines) { + this.winningLines = winningLines; + } + + return winningLines; + } + + + /** + * Calculate the number of winning lines if this move is played at this position + * Used when exploring the game tree + */ + private int getWinningLines(int depth, LivingLocation move, int cutoff) { + + int result = 0; + + int notMines = this.getSolutionSize() - move.mineCount; + + // if the max possible winning lines is less than the current cutoff then no point doing the analysis + if (Solver.PRUNE_BF_ANALYSIS && notMines <= cutoff) { + move.pruned = true; + return notMines; + } + + // we're going to have to do some work + processCount++; + if (processCount > maxProcessCount) { + return 0; + } + + move.buildChildNodes(this); + + for (Node child: move.children) { + + if (child == null) { + continue; // continue the loop but ignore this entry + } + + if (child.fromCache) { // nothing more to do, since we did it before + this.work++; + } else { + + child.determineLivingLocations(this.livingLocations, move.index); + this.work++; + + if (child.getLivingLocations().isEmpty()) { // no further information ==> all solution indistinguishable ==> 1 winning line + + child.winningLines = 1; + + } else { // not cached and not terminal node, so we need to do the recursion + + for (LivingLocation childMove: child.getLivingLocations()) { + + // if the number of safe solutions <= the best winning lines then we can't do any better, so skip the rest + if (child.getSolutionSize() - childMove.mineCount <= child.winningLines) { + break; + } + + // now calculate the winning lines for each of these children + int winningLines = child.getWinningLines(depth + 1, childMove, child.winningLines); + if (!childMove.pruned) { + if (child.winningLines < winningLines || (child.bestLiving != null && child.winningLines == winningLines && child.bestLiving.mineCount < childMove.mineCount)) { + child.winningLines = winningLines; + child.bestLiving = childMove; + } + } + + // if there are no mines then this is a 100% safe move, so skip any further analysis since it can't be any better + if (childMove.mineCount == 0) { + break; + } + + } + + // no need to hold onto the living location once we have determined the best of them + child.livingLocations = null; + + //if (depth > solver.preferences.BRUTE_FORCE_ANALYSIS_TREE_DEPTH) { // stop holding the tree beyond this depth + // child.bestLiving = null; + //} + + // add the child to the cache if it didn't come from there and it is carrying sufficient winning lines + if (child.work > 30) { + child.work = 0; + child.fromCache = true; + cacheSize++; + cache.put(child.position, child); + } else { + this.work = this.work + child.work; + } + + + } + + } + + if (depth > solver.preferences.getBruteForceTreeDepth()) { // stop holding the tree beyond this depth + child.bestLiving = null; + } + + // store the aggregate winning lines + result = result + child.winningLines; + + notMines = notMines - child.getSolutionSize(); // reduce the number of not mines + + // if the max possible winning lines is less than the current cutoff then no point doing the analysis + if (Solver.PRUNE_BF_ANALYSIS && result + notMines <= cutoff) { + move.pruned = true; + return (result + notMines); + } + + } + + return result; + + } + + /** + * this generates a list of Location that are still alive, (i.e. have more than one possible value) from a list of previously living locations + * Index is the move which has just been played (in terms of the off-set to the position[] array) + */ + private void determineLivingLocations(List liveLocs, int index) { + + List living = new ArrayList<>(liveLocs.size()); + + for (LivingLocation live: liveLocs) { + + if (live.index == index) { // if this is the same move we just played then no need to analyse it - definitely now non-living. + continue; + } + + int value; + + int valueCount[] = resetValues(0); + int mines = 0; + int maxSolutions = 0; + byte count = 0; + byte minValue = 0; + byte maxValue = 0; + + for (int j=startLocation; j < endLocation; j++) { + value = allSolutions.get(j)[live.index]; + if (value != GameStateModel.MINE) { + //values[value] = true; + valueCount[value]++; + } else { + mines++; + } + } + + // find the new minimum value and maximum value for this location (can't be wider than the previous min and max) + for (byte j=live.minValue; j <= live.maxValue; j++) { + if (valueCount[j] > 0) { + if (count == 0) { + minValue = j; + } + maxValue = j; + count++; + if (maxSolutions < valueCount[j]) { + maxSolutions = valueCount[j]; + } + } + } + if (count > 1) { + LivingLocation alive = new LivingLocation(live.index); + alive.mineCount = mines; + alive.count = count; + alive.minValue = minValue; + alive.maxValue = maxValue; + alive.maxSolutions = maxSolutions; + alive.zeroSolutions = valueCount[0]; + living.add(alive); + } + + } + + Collections.sort(living); + + this.livingLocations = living; + + } + + @Override + public int hashCode() { + return position.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (o instanceof Node) { + return position.equals(((Node) o).position); + } else { + return false; + } + } + + } + + private class ProcessedMove implements Comparable { + private final Location location; + private final int winningLines; + private final boolean pruned; + + private ProcessedMove(Location loc, int winningLines, boolean pruned) { + this.location = loc; + this.winningLines = winningLines; + this.pruned = pruned; + } + + @Override + public int compareTo(ProcessedMove o) { + + int c = o.winningLines - this.winningLines; + if (c == 0) { + if (!this.pruned && o.pruned) { + c = -1; + } else if (this.pruned && !o.pruned) { + c = 1; + } else { + c = 0; + } + } + + return c; + } + + } + + + private static final String INDENT = "................................................................................"; + + private static final BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100); + + private long processCount = 0; + private long maxProcessCount; + private long processCountExtension; + + private int movesProcessed = 0; + private int movesToProcess = 0; + + private final Solver solver; + private final int maxSolutionSize; + + //private Node top; + + private final List locations; // the positions being analysed + private final List startLocations; // the positions which will be considered for the first move + + private final List processedMoves = new ArrayList<>(); // moves which have been processed + + private final SolutionTable allSolutions; + + private final String scope; + + private Node currentNode; + private Location expectedMove; + + private final SortSolutions[] sorters; + + private int cacheHit = 0; + private int cacheSize = 0; + private int cacheWinningLines = 0; + private boolean allDead = false; // this is true if all the locations are dead + private Area deadLocations = Area.EMPTY_AREA; + + // some work areas to prevent having to instantiate many 1000's of copies of them + //private final boolean[] values = new boolean[9]; + private final int[][] valueCount = new int[2][9]; + + private Map cache = new HashMap<>(5000); + + public BruteForceAnalysis(Solver solver, List locations, int size, String scope, List startLocations) { + + this.solver = solver; + this.locations = locations; + this.maxSolutionSize = size; + this.scope = scope; + this.allSolutions = new SolutionTable(size); + //this.top = new Node(); + this.sorters = new SortSolutions[locations.size()]; + for (int i=0; i < sorters.length; i++) { + this.sorters[i] = new SortSolutions(i); + } + + this.startLocations = startLocations; + + } + + // this can be called by different threads when brute force is running on multiple threads + @Override + protected synchronized void addSolution(byte[] solution) { + + if (solution.length != locations.size()) { + throw new RuntimeException("Solution does not have the correct number of locations"); + } + + if (allSolutions.size() >= maxSolutionSize) { + if (!tooMany) { + solver.logger.log(Level.WARN, "BruteForceAnalysis solution table overflow after %d solutions found (%s)", allSolutions.size(), this.scope); + } + tooMany = true; + return; + } + + /* + String text = ""; + for (int i=0; i < solution.length; i++) { + text = text + solution[i] + " "; + } + solver.display(text); + */ + + allSolutions.addSolution(solution); + + } + + @Override + protected void process() { + + long start = System.currentTimeMillis(); + + solver.logger.log(Level.INFO, "----- Brute Force Deep Analysis starting ----"); + solver.logger.log(Level.INFO, "%d solutions in BruteForceAnalysis", allSolutions.size()); + + // create the top node + Node top = buildTopNode(allSolutions); + + int best = 0; + + if (top.getLivingLocations().isEmpty()) { + allDead = true; + best = 1; // only 1 winning line if everything is dead + } + + this.movesToProcess = top.getLivingLocations().size(); + this.maxProcessCount = solver.preferences.getBruteForceMaxNodes(); + + if (startLocations == null || startLocations.size() == 0) { + this.processCountExtension = this.maxProcessCount / 2; + } else { + this.processCountExtension = 0; + } + + + + for (LivingLocation move: top.getLivingLocations()) { + + // check that the move is in the startLocation list + if (startLocations != null) { + boolean found = false; + for (Location l: startLocations) { + if (locations.get(move.index).equals(l)) { + found = true; + break; + } + } + if (!found) { // if not then skip this move + solver.logger.log(Level.INFO, "%d %s is not a starting location", move.index, locations.get(move.index)); + continue; + } + } + + int winningLines = top.getWinningLines(move); // calculate the number of winning lines if this move is played + + if (!move.pruned) { + if (best < winningLines || (top.bestLiving != null && best == winningLines && top.bestLiving.mineCount < move.mineCount)) { + best = winningLines; + top.bestLiving = move; + } + } + + BigDecimal singleProb = BigDecimal.valueOf(allSolutions.size() - move.mineCount).divide(BigDecimal.valueOf(allSolutions.size()), Solver.DP, RoundingMode.HALF_UP); + + if (move.pruned) { + solver.logger.log(Level.INFO, "%d %s is living with %d possible values and probability %s, this location was pruned (max winning lines %d)", move.index, locations.get(move.index), move.count, percentage(singleProb), winningLines); + } else { + solver.logger.log(Level.INFO, "%d %s is living with %d possible values and probability %s, winning lines %d", move.index, locations.get(move.index), move.count, percentage(singleProb), winningLines); + } + + if (processCount < this.maxProcessCount) { + movesProcessed++; + + Location loc = this.locations.get(move.index); + processedMoves.add(new ProcessedMove(loc, winningLines, move.pruned)); + + // if we've got to half way then allow extra cycles to finish up + if (this.processCountExtension !=0 && this.movesProcessed * 2 > this.movesToProcess) { + this.maxProcessCount = this.maxProcessCount + this.processCountExtension; + this.processCountExtension = 0; + solver.logger.log(Level.INFO, "Extending BFDA cycles to %d after %d of %d moves analysed", this.maxProcessCount, this.movesProcessed, this.movesToProcess); + } + } + + } + + // sort the processed moves into best move at the top + processedMoves.sort(null); // use the comparable method to sort + + top.winningLines = best; + + currentNode = top; + + if (processCount < this.maxProcessCount) { + this.completed = true; + if (solver.isShowProbabilityTree()) { + solver.newLine("--------- Probability Tree dump start ---------"); + showTree(0, 0, top); + solver.newLine("---------- Probability Tree dump end ----------"); + } + } + + + // clear down the cache + cache.clear(); + + long end = System.currentTimeMillis(); + solver.logger.log(Level.INFO, "Total nodes in cache %d, total cache hits %d, total winning lines saved %d", cacheSize, cacheHit, this.cacheWinningLines); + solver.logger.log(Level.INFO, "process took %d milliseconds and explored %d nodes", (end - start), processCount); + solver.logger.log(Level.INFO, "----- Brute Force Deep Analysis finished ----"); + } + + /** + * Builds a top of tree node based on the solutions provided + */ + private Node buildTopNode(SolutionTable solutionTable) { + + List deadLocations = new ArrayList<>(); + + Node result = new Node(); + + result.startLocation = 0; + result.endLocation = solutionTable.size(); + + List living = new ArrayList<>(); + + for (short i=0; i < locations.size(); i++) { + int value; + + int valueCount[] = resetValues(0); + int mines = 0; + int maxSolutions = 0; + byte count = 0; + byte minValue = 0; + byte maxValue = 0; + + for (int j=0; j < result.getSolutionSize(); j++) { + if (solutionTable.get(j)[i] != GameStateModel.MINE) { + value = solutionTable.get(j)[i]; + //values[value] = true; + valueCount[value]++; + } else { + mines++; + } + } + + for (byte j=0; j < valueCount.length; j++) { + if (valueCount[j] > 0) { + if (count == 0) { + minValue = j; + } + maxValue = j; + count++; + if (maxSolutions < valueCount[j]) { + maxSolutions = valueCount[j]; + } + } + } + if (count > 1) { + LivingLocation alive = new LivingLocation(i); + alive.mineCount = mines; + alive.count = count; + alive.minValue = minValue; + alive.maxValue = maxValue; + alive.maxSolutions = maxSolutions; + alive.zeroSolutions = valueCount[0]; + living.add(alive); + } else { + if (mines == result.getSolutionSize()) { + solver.logger.log(Level.INFO, "Tile %s is a mine", locations.get(i)); + } else { + solver.logger.log(Level.INFO, "Tile %s is dead with value %d", locations.get(i), minValue); + deadLocations.add(locations.get(i)); + } + } + + } + + Collections.sort(living); + + result.livingLocations = living; + + this.deadLocations = new Area(deadLocations); + + return result; + } + + private int[] resetValues(int thread) { + for (int i=0; i < valueCount[thread].length; i++) { + valueCount[thread][i] = 0; + } + return valueCount[thread]; + } + + @Override + protected int getSolutionCount() { + return allSolutions.size(); + } + + @Override + protected long getNodeCount() { + return processCount; + } + + @Override + protected Action getNextMove(BoardState boardState) { + + LivingLocation bestLiving = getBestLocation(currentNode); + + if (bestLiving == null) { + return null; + } + + Location loc = this.locations.get(bestLiving.index); + + //solver.display("first best move is " + loc.display()); + BigDecimal prob = BigDecimal.ONE.subtract(BigDecimal.valueOf(bestLiving.mineCount).divide(BigDecimal.valueOf(currentNode.getSolutionSize()), Solver.DP, RoundingMode.HALF_UP)); + + while (boardState.isRevealed(loc)) { + int value = boardState.getWitnessValue(loc); + + currentNode = bestLiving.children[value]; + bestLiving = getBestLocation(currentNode); + if (bestLiving == null) { + return null; + } + prob = BigDecimal.ONE.subtract(BigDecimal.valueOf(bestLiving.mineCount).divide(BigDecimal.valueOf(currentNode.getSolutionSize()), Solver.DP, RoundingMode.HALF_UP)); + + loc = this.locations.get(bestLiving.index); + + } + + solver.logger.log(Level.INFO, "Solutions with mines is %d out of %d", bestLiving.mineCount, currentNode.getSolutionSize()); + for (int i=0; i < bestLiving.children.length; i++) { + if (bestLiving.children[i] == null) { + //solver.display("Value of " + i + " is not possible"); + continue; //ignore this node but continue the loop + } + + String probText; + if (bestLiving.children[i].bestLiving == null) { + probText = Action.FORMAT_2DP.format(ONE_HUNDRED.divide(BigDecimal.valueOf(bestLiving.children[i].getSolutionSize()), Solver.DP, RoundingMode.HALF_UP)) + "%"; + } else { + probText = Action.FORMAT_2DP.format(bestLiving.children[i].getProbability().multiply(ONE_HUNDRED)) + "%"; + } + solver.logger.log(Level.INFO, "Value of %d leaves %d solutions and winning probability %s", i, bestLiving.children[i].getSolutionSize(), probText); + } + + String text = " (solve " + scope + " " + Action.FORMAT_2DP.format(currentNode.getProbability().multiply(ONE_HUNDRED)) + "%)"; + Action action = new Action(loc, Action.CLEAR, MoveMethod.BRUTE_FORCE_DEEP_ANALYSIS, text, prob); + + expectedMove = loc; + + return action; + + } + + private LivingLocation getBestLocation(Node node) { + + return node.bestLiving; + + } + + + private void showTree(int depth, int value, Node node) { + + String condition; + if (depth == 0) { + condition = node.getSolutionSize() + " solutions remain"; + } else { + condition = "When '" + value + "' ==> " + node.getSolutionSize() + " solutions remain"; + } + + if (node.bestLiving == null) { + String line = INDENT.substring(0, depth*3) + condition + " Solve chance " + Action.FORMAT_2DP.format(node.getProbability().multiply(ONE_HUNDRED)) + "%"; + System.out.println(line); + solver.newLine(line); + return; + } + + Location loc = this.locations.get(node.bestLiving.index); + + BigDecimal prob = BigDecimal.ONE.subtract(BigDecimal.valueOf(node.bestLiving.mineCount).divide(BigDecimal.valueOf(node.getSolutionSize()), Solver.DP, RoundingMode.HALF_UP)); + + + String line = INDENT.substring(0, depth*3) + condition + " play " + loc.toString() + " Survival chance " + Action.FORMAT_2DP.format(prob.multiply(ONE_HUNDRED)) + "%, Solve chance " + Action.FORMAT_2DP.format(node.getProbability().multiply(ONE_HUNDRED)) + "%"; + + System.out.println(line); + solver.newLine(line); + + //for (Node nextNode: node.bestLiving.children) { + for (int val=0; val < node.bestLiving.children.length; val++) { + Node nextNode = node.bestLiving.children[val]; + if (nextNode != null) { + showTree(depth + 1, val, nextNode); + } + + } + + } + + + @Override + protected Location getExpectedMove() { + return expectedMove; + } + + private String percentage(BigDecimal prob) { + + return Action.FORMAT_2DP.format(prob.multiply(ONE_HUNDRED)); + } + + @Override + protected boolean allDead() { + return allDead; + } + + @Override + Area getDeadLocations() { + return deadLocations; + } + + @Override + protected int getMovesProcessed() { + return movesProcessed; + } + + @Override + protected int getMovesToProcess() { + return this.movesToProcess; + } + + @Override + protected Location checkForBetterMove(Location location) { + + // no moves processed + if (processedMoves.size() == 0) { + return null; + } + + ProcessedMove best = processedMoves.get(0); + + // the move is already the best + if (location.equals(best.location)) { + solver.logger.log(Level.INFO, "Tile %s (Winning %d) is best according to partial BFDA", location, best.winningLines); + return null; + } + + // if the chosen location has been processed and it isn't the best then send the best + for (ProcessedMove pm: processedMoves) { + if (pm.location.equals(location)) { + solver.logger.log(Level.INFO, "Tile %s (Winning %d pruned %b) replaced by %s (winning %d pruned %b)", location, pm.winningLines, pm.pruned, best.location, best.winningLines, best.pruned); + return best.location; + } + } + + // the chosen location hasn't been processed + return null; + } + + @Override + BigDecimal getSolveChance() { + return this.currentNode.getProbability(); + } + + @Override + List getLocations() { + return locations; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysisModel.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysisModel.java new file mode 100644 index 0000000..8bed433 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/BruteForceAnalysisModel.java @@ -0,0 +1,54 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.util.List; + +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +abstract public class BruteForceAnalysisModel { + + protected boolean completed = false; + protected boolean tooMany = false; + + abstract protected void addSolution(byte[] solution); + + abstract protected void process(); + + + protected boolean isComplete() { + return this.completed; + } + + protected boolean tooMany() { + return this.tooMany; + } + + protected boolean isShallow() { + return false; + } + + abstract protected int getSolutionCount(); + + abstract protected int getMovesProcessed(); + + abstract protected int getMovesToProcess(); + + abstract protected Location checkForBetterMove(Location location); + + abstract protected long getNodeCount(); + + abstract protected Action getNextMove(BoardState boardState); + + abstract protected Location getExpectedMove(); + + abstract protected boolean allDead(); + + abstract Area getDeadLocations(); + + abstract BigDecimal getSolveChance(); + + abstract List getLocations(); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/CrunchResult.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/CrunchResult.java new file mode 100644 index 0000000..02d3435 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/CrunchResult.java @@ -0,0 +1,222 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver; + +import java.math.BigInteger; +import java.util.List; + +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class CrunchResult { + + protected List square; + protected Location witness[]; + + protected int originalNumMines; + + // information about witnesses + protected int[] witnessGood; + protected boolean[] witnessRestFlags; + protected boolean[] witnessRestClear; + protected int currentFlags[]; + protected boolean alwaysSatisfied[]; + + //protected int[] hookMines; + + /** + * The weight is used to scale up the values so they represent the whole solution. + */ + private BigInteger weight; + protected BigInteger bigGoodCandidates = BigInteger.ZERO; + + /** + * The number of candidate solutions that put a mine in this square. + * if the value is zero a mine is never present, if equals bigGoodCandidates then a mine is always present + */ + protected BigInteger[] bigTally; + + + /** + *

bigDistribution[square][3] = 102, means 102 candidate solutions have 3 mines surrounding this square

+ */ + protected BigInteger[][] bigDistribution; + + /** + * The largest number of candidate solutions within the bigDistribution for this square. This is the maximum number of solutions that can + * remain if we choose to guess here. + */ + //private BigInteger[] bigMax; // the maximum count for each square + //private int[] bigMaxIndex; + + /** + * Number of different values this square can have + */ + private int[] bigCount; // number of different values this square can have + private int maxBigCount = 0; + + + // merge crunch results to give a single view of the situation + protected static CrunchResult bigMerge(CrunchResult... cr) { + + CrunchResult result = new CrunchResult(); + + // if all the results have the same number of original mines then store that + int originalMines = cr[0].originalNumMines; + for (CrunchResult r: cr) { + if (r.originalNumMines != originalMines) { + originalMines = 0; + break; + } + } + result.originalNumMines = originalMines; + + result.witness = cr[0].witness; + result.square = cr[0].getSquare(); + + result.setWeight(BigInteger.ONE); + + BigInteger[][] distribution; + BigInteger[] bigMax; + BigInteger[] bigCount; + if (cr[0].bigDistribution == null) { + distribution = null; + } else { + distribution = new BigInteger[result.getSquare().size()][9]; + bigMax = new BigInteger[result.getSquare().size()]; + bigCount = new BigInteger[result.getSquare().size()]; + for (int i = 0; i < result.getSquare().size(); i++) { + for (int j = 0; j < 9; j++) { + distribution[i][j] = BigInteger.ZERO; + } + } + } + + BigInteger[] tally = new BigInteger[cr[0].bigTally.length]; + BigInteger candidates = BigInteger.ZERO; + for (int i=0; i < tally.length; i++) { + tally[i] = BigInteger.ZERO; + } + for (int j=0; j < cr.length; j++) { + for (int k=0; k < tally.length; k++) { + tally[k] = tally[k].add(cr[j].getWeight().multiply(cr[j].bigTally[k])); + if (distribution != null) { + for (int l=0; l < 9; l++) { + distribution[k][l] = distribution[k][l].add(cr[j].getWeight().multiply(cr[j].bigDistribution[k][l])); + } + } + } + candidates = candidates.add(cr[j].getWeight().multiply(cr[j].bigGoodCandidates)); + } + result.bigTally = tally; + result.bigGoodCandidates = candidates; + result.bigDistribution = distribution; + + //result.calculateMinMax(); + + + // merge the witness information + result.witnessRestFlags = new boolean[cr[0].witnessRestFlags.length]; + result.witnessRestClear = new boolean[cr[0].witnessRestClear.length]; + + for (int i=0; i < result.witnessRestFlags.length; i++) { + result.witnessRestFlags[i] = true; + result.witnessRestClear[i] = true; + for (int j=0; j < cr.length; j++) { + result.witnessRestFlags[i] = result.witnessRestFlags[i] & cr[j].witnessRestFlags[i]; + result.witnessRestClear[i] = result.witnessRestClear[i] & cr[j].witnessRestClear[i]; + } + } + + // witness good information should be the same for all the merged data + result.witnessGood = cr[0].witnessGood; + + return result; + + } + + /* + protected void calculateMinMax() { + + if (this.bigDistribution == null) { + return; + } + + this.setBigCount(new int[this.getSquare().size()]); + this.setBigMax(new BigInteger[this.getSquare().size()]); + this.setBigMaxIndex(new int[this.getSquare().size()]); + + for (int i=0; i < this.getSquare().size(); i++) { + BigInteger max = BigInteger.ZERO; + int maxIndex = 0; + for (int j=0; j < this.bigDistribution[i].length; j++) { + if (this.bigDistribution[i][j].signum() != 0) { + this.bigCount[i]++; + } + if (this.bigDistribution[i][j].compareTo(max) > 0) { + max = this.bigDistribution[i][j]; + maxIndex = j; + } + } + this.getBigMax()[i] = max; + this.getBigMaxIndex()[i] = maxIndex; + } + + for (int i=0; i < this.bigCount.length; i++) { + maxBigCount = Math.max(maxBigCount, bigCount[i]); + } + + + + } + */ + + public List getSquare() { + return square; + } + + public void setSquare(List square) { + this.square = square; + } + + //public BigInteger[] getBigMax() { + // return bigMax; + //} + + //public void setBigMax(BigInteger[] bigMax) { + // this.bigMax = bigMax; + //} + + public BigInteger getWeight() { + return weight; + } + + public void setWeight(BigInteger weight) { + this.weight = weight; + } + + public int[] getBigCount() { + return bigCount; + } + + public void setBigCount(int[] bigCount) { + this.bigCount = bigCount; + } + + //public int[] getBigMaxIndex() { + // return bigMaxIndex; + //} + + //public void setBigMaxIndex(int[] bigMaxIndex) { + // this.bigMaxIndex = bigMaxIndex; + //} + + //public int getMaxCount() { + // return this.maxBigCount; + //} +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Cruncher.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Cruncher.java new file mode 100644 index 0000000..2b98ebc --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Cruncher.java @@ -0,0 +1,333 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver; + +import Asynchronous.Asynchronous; +import minesweeper.gamestate.GameStateModel; +import minesweeper.solver.constructs.WitnessData; +import minesweeper.solver.iterator.Iterator; +import minesweeper.structure.Location; + +import java.math.BigInteger; +import java.util.List; + +/** + * Performs a brute force search on the provided squares using the iterator + * + */ +public class Cruncher implements Asynchronous { + + private final BoardState boardState; + private final Iterator iterator; + private final List square; + private final List witness; + private final boolean calculateDistribution; + private final BruteForceAnalysisModel bfa; + + private final boolean[] workRestNotFlags; + private final boolean[] workRestNotClear; + + private CrunchResult result; + + + public Cruncher(BoardState boardState, List square, List witness, Iterator iterator, boolean calculateDistribution, BruteForceAnalysisModel bfa) { + + this.iterator = iterator; + this.square = square; + this.witness = witness; + this.calculateDistribution = calculateDistribution; + this.bfa = bfa; + this.boardState = boardState; + + workRestNotFlags = new boolean[witness.size()]; + workRestNotClear = new boolean[witness.size()]; + + } + + + @Override + public void start() { + + result = crunch(); + //System.out.println("Candidates = " + result.bigGoodCandidates); + result.setWeight(BigInteger.ONE); + + } + + @Override + public void requestStop() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + + @Override + public CrunchResult getResult() { + return result; + } + + + private CrunchResult crunch() { + + //display("crunching " + iterator.numberBalls + " Mines in " + square.length + " Squares with " + witness.length + " witnesses"); + + // the distribution is the number of times a square reveals as the number 0-8 + BigInteger[][] bigDistribution = null; + if (calculateDistribution) { + bigDistribution = new BigInteger[square.size()][9]; + for (int i=0; i < square.size(); i++) { + for (int j=0; j < 9; j++) { + bigDistribution[i][j] = BigInteger.ZERO; + } + } + } + + + BigInteger bign = BigInteger.ZERO; + + // determine the witness type + int[] witnessGood1 = generateWitnessType(witness, square); + + // encapsulate the witness data + final WitnessData[] witnessData = new WitnessData[witness.size()]; + for (int i=0; i < witness.size(); i++) { + WitnessData d = new WitnessData(); + d.location = witness.get(i); + d.witnessGood = witnessGood1[i]; + d.witnessRestClear = true; + d.witnessRestFlag = true; + d.currentFlags = boardState.countAdjacentConfirmedFlags(d.location); + d.alwaysSatisfied = iterator.witnessAlwaysSatisfied(d.location); + //display("Witness " + i + " location " + d.location.display() + " current flags = " + d.currentFlags + " good witness = " + d.witnessGood + " Satisified = " + d.alwaysSatisfied); + witnessData[i] = d; + } + + /* + for (int i=0; i < square.length; i++) { + display("Square " + i + " is " + square[i].display()); + } + */ + + int[] sample = iterator.getSample(); + + int[] tally = new int[square.size()]; + int candidates = 0; + + while (sample != null) { + + if (checkSample(sample, square, witnessData, bigDistribution, bfa)) { + for (int i=0; i < sample.length; i++) { + tally[sample[i]]++; + } + candidates++; + } + + sample = iterator.getSample(); + + } + + BigInteger[] bigTally = new BigInteger[square.size()]; + for (int i = 0; i < bigTally.length; i++) { + bigTally[i] = BigInteger.valueOf(tally[i]); + + } + + bign = BigInteger.valueOf(candidates); + + // store all the information we have gathered into this object for + // later analysis + CrunchResult output = new CrunchResult(); + output.setSquare(square); + output.bigDistribution = bigDistribution; + + + //output.hookMines = null; + output.originalNumMines = iterator.getBalls(); + output.bigGoodCandidates = bign; + output.bigTally = bigTally; + + // return data on the witnesses + output.witness = new Location[witnessData.length]; + output.witnessGood = new int[witnessData.length]; + output.witnessRestClear = new boolean[witnessData.length]; + output.witnessRestFlags = new boolean[witnessData.length]; + + for (int i=0; i < witnessData.length; i++) { + output.witness[i] = witnessData[i].location; + output.witnessGood[i] = witnessData[i].witnessGood; + output.witnessRestClear[i] = witnessData[i].witnessRestClear; + output.witnessRestFlags[i] = witnessData[i].witnessRestFlag; + } + + return output; + + } + + // this checks whether the positions of the mines are a valid candidate solution + protected boolean checkSample(final int[] sample, final List square, WitnessData[] witnessData, BigInteger[][] bigDistribution, BruteForceAnalysisModel bfa) { + + /* + String s= ""; + for (int i = 0; i < sample.length; i++) { + s = s + " " + sample[i]; + } + display(s); + */ + + //boolean[] workRestNotFlags = new boolean[witnessData.length]; + //boolean[] workRestNotClear = new boolean[witnessData.length]; + for (int i=0; i < witnessData.length; i++) { + workRestNotFlags[i] = false; + workRestNotClear[i] = false; + } + + // get the location of the mines + Location[] mine = new Location[sample.length]; + for (int i=0; i < sample.length; i++) { + mine[i] = square.get(sample[i]); + } + + for (int i=0; i < witnessData.length; i++) { + + if (!witnessData[i].alwaysSatisfied) { + int flags1 = witnessData[i].currentFlags; + int flags2 = 0; + + // count how many candidate mines are next to this witness + for (int j = 0; j < mine.length; j++) { + if (mine[j].isAdjacent(witnessData[i].location)) { + flags2++; + } + } + + int flags3 = boardState.getWitnessValue(witnessData[i].location); + //int flags3 = board[witnessData[i].location.x][witnessData[i].location.y]; + + // if the candidate solution puts more flags around the witness + // than it says it has then the solution is invalid + if (flags3 < flags1 + flags2) { + WitnessData d = witnessData[0]; + witnessData[0] = witnessData[i]; + witnessData[i] = d; + return false; + } + + // if this is a 'good' witness and the number of flags around it + // does not match with it exactly then the solution is invalid + if (witnessData[i].witnessGood == 0 && flags3 != flags1 + flags2) { + WitnessData d = witnessData[0]; + witnessData[0] = witnessData[i]; + witnessData[i] = d; + return false; + } + + if (flags3 != flags1 + flags2) { + workRestNotClear[i] = true; + } + if (flags3 != flags1 + flags2 + witnessData[i].witnessGood) { + workRestNotFlags[i] = true; + } + } else { + // always satisfied means flag3 = flag1 + flag2, so the checks above can be simplified to + if (witnessData[i].witnessGood != 0) { + workRestNotFlags[i] = true; + } + } + + } + + + // if it is a good candidate solution then the witness information is valid + for (int i=0; i < witnessData.length; i++) { + if (workRestNotClear[i]) { + witnessData[i].witnessRestClear = false; + } + if (workRestNotFlags[i]) { + witnessData[i].witnessRestFlag = false; + } + } + + //if it is a good solution then calculate the distribution if required + if (bfa != null && !bfa.tooMany()) { + byte[] solution = new byte[square.size()]; + + for (int i=0; i < square.size(); i++) { + + boolean isMine = false; + for (int j=0; j < sample.length; j++) { + if (i == sample[j]) { + isMine = true; + break; + } + } + + // if we are a mine then it doesn't matter how many mines surround us + if (!isMine) { + byte flags2 = (byte) boardState.countAdjacentConfirmedFlags(square.get(i)); + // count how many candidate mines are next to this square + for (Location mine1 : mine) { + if (mine1.isAdjacent(square.get(i))) { + flags2++; + } + } + solution[i] = flags2; + if (bigDistribution != null) { + bigDistribution[i][flags2] = bigDistribution[i][flags2].add(BigInteger.ONE); + } + + } else { + solution[i] = GameStateModel.MINE; + } + + } + //if (bfa != null && !bfa.tooMany()) { + bfa.addSolution(solution); + //} + } + + return true; + + } + + protected BruteForceAnalysisModel getBFA() { + return bfa; + } + + protected Iterator getIterator() { + return this.iterator; + } + + // a witness is a 'good' witness if all its adjacent free squares are also + // contained in the set of squares being analysed. A 'good' witness must + // always be satisfied for the candidate solution to be valid. + // this method returns the number of squares around the witness not being + // analysed - a good witness has a value of zero + protected int[] generateWitnessType(List witness, List square) { + + int[] result = new int[witness.size()]; + + for (int i=0; i < witness.size(); i++) { + + result[i] = 0; + for (Location l: boardState.getAdjacentUnrevealedSquares(witness.get(i))) { + boolean found = false; + for (Location squ: square) { + if (l.equals(squ)) { + found = true; + break; + } + } + if (!found) { + result[i]++; + } + } + + } + + return result; + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/EfficiencyHelper.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/EfficiencyHelper.java new file mode 100644 index 0000000..d61875c --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/EfficiencyHelper.java @@ -0,0 +1,616 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.ChordLocation; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class EfficiencyHelper { + + private static final BigDecimal MINE_THRESHOLD = BigDecimal.valueOf(1.0); // probability of mine to consider + private static final int RISK_ADVANTAGE = 2; // <= benefit - cost + private static final BigDecimal ONE_ADVANTAGE_THRESHOLD = BigDecimal.valueOf(0.9); // accept mine probability when benefit - cost = 1 + + private static final BigDecimal CLEAR_ZERO_VALUE = BigDecimal.valueOf(0.85); // clear a possible zero if chance if >= this value + + private static final BigDecimal NFE_BLAST_PENALTY = BigDecimal.valueOf(0.75); + + private static final boolean ALLOW_ZERO_NET_GAIN_CHORD = true; + private static final boolean ALLOW_ZERO_NET_GAIN_PRE_CHORD = true; + + private BoardState board; + private WitnessWeb wholeEdge; + private List actions; + private ProbabilityEngineModel pe; + + public EfficiencyHelper(BoardState board, WitnessWeb wholeEdge, List actions, ProbabilityEngineModel pe) { + + this.board = board; + this.actions = actions; + this.wholeEdge = wholeEdge; + this.pe = pe; + + } + + + public List process() { + + List result = new ArrayList<>(); + List chordLocations = new ArrayList<>(); + + // look for tiles satisfied by known mines and work out the benefit of placing the mines and then chording + for (Location loc: board.getAllLivingWitnesses()) { + + // if the witness is satisfied how many clicks will it take to clear the area by chording + if (board.getWitnessValue(loc) == board.countAdjacentConfirmedFlags(loc)) { + + List mines = new ArrayList<>(); + + // how many hidden tiles are next to the mine(s) we would have flagged, the more the better + // this favours flags with many neighbours over flags buried against cleared tiles. + Set hiddenMineNeighbours = new HashSet<>(); + for (Location adjMine: board.getAdjacentSquaresIterable(loc)) { + + if (!board.isConfirmedMine(adjMine)) { + continue; + } + + // if the flag isn't on the board we need to add it + if (!board.isFlagOnBoard(adjMine)) { + mines.add(adjMine); + } + + for (Location adjTile: board.getAdjacentSquaresIterable(adjMine)) { + if (board.isUnrevealed(adjTile)) { + hiddenMineNeighbours.add(adjTile); + } + } + } + + int cost = board.getWitnessValue(loc) - board.countAdjacentFlagsOnBoard(loc); // flags still to be placed + int benefit = board.countAdjacentUnrevealed(loc); + + if (board.getWitnessValue(loc) != 0) { // if the witness isn't a zero then add the cost of chording - zero can only really happen in the analyser + cost++; + } + + if (benefit >= cost) { + board.getLogger().log(Level.INFO, "Chord %s has reward %d and tiles adjacent to new flags %d", loc, (benefit - cost), hiddenMineNeighbours.size()); + chordLocations.add(new ChordLocation(loc.x, loc.y, benefit, cost, hiddenMineNeighbours.size(), BigDecimal.ONE, mines)); + } + } + + } + + BigDecimal oneAdvantageTest = BigDecimal.ONE.subtract(ONE_ADVANTAGE_THRESHOLD); + + // also consider tiles which are possibly mines and their benefit + for (CandidateLocation cl: pe.getProbableMines(MINE_THRESHOLD)) { + + for (Location adjTile: board.getAdjacentSquaresIterable(cl)) { + if (board.isRevealed(adjTile) && board.getWitnessValue(adjTile) - board.countAdjacentConfirmedFlags(adjTile) == 1) { // if the adjacent tile needs 1 more tile + + int cost = board.getWitnessValue(adjTile) - board.countAdjacentFlagsOnBoard(adjTile) + 1; // placing the flag and chording + int benefit = board.countAdjacentUnrevealed(adjTile) - 1; // the probable mine isn't a benefit + + if (benefit >= cost + RISK_ADVANTAGE || benefit - cost == 1 && cl.getProbability().compareTo(oneAdvantageTest) < 0) { + + List mines = new ArrayList<>(); + mines.add(cl); + Set hiddenMineNeighbours = new HashSet<>(); + for (Location adjNewFlag: board.getAdjacentSquaresIterable(cl)) { + if (board.isUnrevealed(adjNewFlag)) { + hiddenMineNeighbours.add(adjNewFlag); + } + } + + for (Location adjMine: board.getAdjacentSquaresIterable(adjTile)) { + + if (!board.isConfirmedMine(adjMine)) { + continue; + } + + // if the flag isn't on the board we need to add it + if (!board.isFlagOnBoard(adjMine)) { + mines.add(adjMine); + } + + for (Location adjNewFlag: board.getAdjacentSquaresIterable(adjMine)) { + if (board.isUnrevealed(adjNewFlag)) { + hiddenMineNeighbours.add(adjNewFlag); + } + } + } + + board.getLogger().log(Level.INFO, "Placing possible mine %s and Chording %s has reward %d and tiles adjacent to new flags %d", cl, adjTile, (benefit - cost), hiddenMineNeighbours.size()); + chordLocations.add(new ChordLocation(adjTile.x, adjTile.y, benefit, cost, hiddenMineNeighbours.size(), BigDecimal.ONE.subtract(cl.getProbability()), mines)); + } + } + } + + } + + + // sort the most beneficial chords to the top + Collections.sort(chordLocations, ChordLocation.SORT_BY_BENEFIT_DESC); + + ChordLocation bestChord = null; + BigDecimal bestNetBenefit = BigDecimal.ZERO; + for (ChordLocation cl: chordLocations) { + + if (cl.getNetBenefit().signum() > 0 || EfficiencyHelper.ALLOW_ZERO_NET_GAIN_CHORD && cl.getNetBenefit().signum() == 0 && cl.getCost() > 0) { + bestChord = cl; + bestNetBenefit = cl.getNetBenefit(); + } + + break; + } + + if (bestChord != null) { + board.getLogger().log(Level.INFO, "Chord %s has best reward of %f", bestChord, bestChord.getNetBenefit()); + } else { + board.getLogger().log(Level.INFO, "No Chord has net benefit >= 0"); + } + + /* + for (ChordLocation cl: chordLocations) { + + for (Location l: board.getAdjacentSquaresIterable(cl)) { + // flag not yet on board + if (!processed[l.x][l.y] && board.isConfirmedFlag(l) && !board.isFlagOnBoard(l)) { + result.add(new Action(l, Action.FLAG, MoveMethod.TRIVIAL, "Place flag", BigDecimal.ONE, 0)); + } + // flag on board in error + if (!processed[l.x][l.y] && !board.isConfirmedFlag(l) && board.isFlagOnBoard(l)) { + result.add(new Action(l, Action.FLAG, MoveMethod.CORRECTION, "Remove flag", BigDecimal.ONE, 0)); + } + processed[l.x][l.y] = true; + } + // now add the clear all + result.add(new Action(cl, Action.CLEARALL, MoveMethod.TRIVIAL, "Clear All", BigDecimal.ONE, 1)); + + break; + + } + */ + + Action bestAction = null; + BigDecimal highest = BigDecimal.ZERO; + + Action bestZero = null; + BigInteger bestZeroSolutions = BigInteger.ZERO; + + List emptyList = Collections.emptyList(); + + SolutionCounter currSolnCount = board.getSolver().validatePosition(wholeEdge, emptyList, null, Area.EMPTY_AREA); + if (bestNetBenefit.signum() > 0) { + highest = new BigDecimal(currSolnCount.getSolutionCount()).multiply(bestNetBenefit); + } + + // look for click then chord if the right number turns up + // or chord then chord if the right number turns up + for (Action act: actions) { + + if (act.getAction() == Action.CLEAR) { + + // find the best chord adjacent to this clear if there is one + ChordLocation adjChord = null; + for (ChordLocation cl: chordLocations) { + if (cl.getNetBenefit().signum() == 0 && !ALLOW_ZERO_NET_GAIN_PRE_CHORD) { + continue; + } + + if (cl.isAdjacent(act)) { + // first adjacent chord, or better adj chord, or cheaper adj chord, or exposes more tiles + if (adjChord == null || adjChord.getNetBenefit().compareTo(cl.getNetBenefit()) < 0 || adjChord.getNetBenefit().compareTo(cl.getNetBenefit()) == 0 && adjChord.getCost() > cl.getCost() || + adjChord.getNetBenefit().compareTo(cl.getNetBenefit()) == 0 && adjChord.getCost() == cl.getCost() && adjChord.getExposedTileCount() < cl.getExposedTileCount()) { + adjChord = cl; + } + } + } + if (adjChord == null) { + //console.log("(" + act.x + "," + act.y + ") has no adjacent chord with net benefit > 0"); + } else { + board.getLogger().log(Level.INFO, "Tile %s has adjacent chord %s with net benefit %f", act, adjChord, adjChord.getNetBenefit()); + } + + + int adjMines = board.countAdjacentConfirmedFlags(act); + int adjFlags = board.countAdjacentFlagsOnBoard(act); + int hidden = board.countAdjacentUnrevealed(act); + + int chordCost; + if (adjMines != 0) { // if the value we want isn't zero we'll need to subtract the cost of doing the chording + chordCost = 1; + } else { + chordCost = 0; + } + + //BigDecimal chordReward = BigDecimal.valueOf(hidden - adjMines + adjFlags - chordCost); // tiles adjacent - ones which are mines - mines which aren't flagged yet + BigDecimal chordReward = ChordLocation.chordReward(hidden, adjMines - adjFlags + chordCost); + + if (chordReward.compareTo(bestNetBenefit) > 0) { + + SolutionCounter counter = board.getSolver().validateLocationUsingSolutionCounter(wholeEdge, act, adjMines, Area.EMPTY_AREA); + + BigDecimal current = new BigDecimal(counter.getSolutionCount()).multiply(chordReward); + + BigDecimal prob = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(currSolnCount.getSolutionCount()), 10, RoundingMode.HALF_UP); + + // realistic expectation + BigDecimal expBenefit = current.divide(new BigDecimal(currSolnCount.getSolutionCount()), 10, RoundingMode.HALF_UP); + + board.getLogger().log(Level.INFO, "considering Clear (" + act.x + "," + act.y + ") with value " + adjMines + " and reward " + chordReward + " ( H=" + hidden + " M=" + adjMines + " F=" + adjFlags + " Chord=" + chordCost + + " Prob=" + prob + "), expected benefit " + expBenefit); + + // if we have found an 100% certain zero then just click it. + if (adjMines == 0) { + if (counter.getSolutionCount().equals(currSolnCount.getSolutionCount())) { + board.getLogger().log(Level.INFO, "Tile %s is a certain zero no need for further analysis", act); + bestZero = act; + bestZeroSolutions = currSolnCount.getSolutionCount(); + bestAction = null; + bestChord = null; + break; + + } else if (counter.getSolutionCount().compareTo(bestZeroSolutions) > 0) { + bestZero = act; + bestZeroSolutions = counter.getSolutionCount(); + } + } + + // realistic expectation + BigDecimal clickChordNetBenefit = chordReward.multiply(new BigDecimal(counter.getSolutionCount())); // expected benefit from clicking the tile then chording it + + // optimistic expectation + //BigDecimal clickChordNetBenefit = BigDecimal.valueOf(reward).multiply(new BigDecimal(currSolnCount.getSolutionCount())); // expected benefit from clicking the tile then chording it + + //if (adjMines == 0) { + // adjChord = null; + // board.getLogger().log(Level.INFO, "Not considering Chord Chord combo because we'd be chording into a zero"); + //} + + // if it is a chord/chord combo + if (adjChord != null) { + current = chordChordCombo(adjChord, act, counter.getSolutionCount(), currSolnCount.getSolutionCount()); + + if (current.compareTo(clickChordNetBenefit) < 0) { // if click chord is better then discard the adjacent chord + current = clickChordNetBenefit; + adjChord = null; + } + + } else { // or a clear/chord combo + current = clickChordNetBenefit; // expected benefit == p*benefit + } + + if (current.compareTo(highest) > 0) { + highest = current; + if (adjChord != null) { // if there is an adjacent chord then use this to clear the tile + bestChord = adjChord; + bestAction = null; + } else { + bestChord = null; + bestAction = act; + } + } + + } else { + board.getLogger().log(Level.INFO, "Not considering Tile %s", act); + } + + } + + } + + BigInteger zeroThreshold = new BigDecimal(currSolnCount.getSolutionCount()).multiply(CLEAR_ZERO_VALUE).toBigInteger(); + if (bestZero != null && bestZeroSolutions.compareTo(zeroThreshold) >= 0) { + result.add(bestZero); + + } else if (bestAction != null) { + result.add(bestAction); + + } else if (bestChord != null) { + result.clear(); + + // add the required flags if they aren't already there + for (Location adjMine: bestChord.getMines()) { + if (!board.isFlagOnBoard(adjMine)) { + result.add(new Action(adjMine, Action.FLAG, MoveMethod.TRIVIAL, "Place flag", BigDecimal.ONE, 0)); + } + } + + //for (Location adjTile: board.getAdjacentSquaresIterable(bestChord)) { + // if (board.isConfirmedFlag(adjTile) && !board.isFlagOnBoard(adjTile)) { + // result.add(new Action(adjTile, Action.FLAG, MoveMethod.TRIVIAL, "Place flag", BigDecimal.ONE, 0)); + // } + //} + + // Add the chord action + result.add(new Action(bestChord, Action.CLEARALL, MoveMethod.TRIVIAL, "Clear All", bestChord.getScale(), 1)); + } + + if (result.isEmpty()) { // return the first action + result.add(actions.get(0)); + return result; + } else { + return result; + } + + + } + + // the ChordLocation of the tile to chord, the Tile to be chorded afterwards if the value comes up good, the number of solutions where this occurs + // and the total number of solutions + // this method works out the net benefit of this play + private BigDecimal chordChordCombo(ChordLocation chord1, Location chord2Tile, BigInteger occurs, BigInteger total) { + + // now check each tile around the tile to be chorded 2nd and see how many mines to flag and tiles will be cleared + int alreadyCounted = 0; + int needsFlag = 0; + int clearable = 0; + int chordClick = 0; + for (Location adjTile: board.getAdjacentSquaresIterable(chord2Tile)) { + + if (board.isConfirmedMine(adjTile)) { + chordClick = 1; + } + + // if adjacent to chord1 + if (chord1.isAdjacent(adjTile)) { + alreadyCounted++; + } else if (board.isConfirmedMine(adjTile) && !board.isFlagOnBoard(adjTile)) { + needsFlag++; + } else if (board.isUnrevealed(adjTile)) { + clearable++; + } + } + + BigDecimal failedBenefit = chord1.getNetBenefit(); + BigDecimal secondBenefit = ChordLocation.chordReward(clearable, needsFlag + chordClick); + + // realistic expectation + BigDecimal score = failedBenefit.multiply(new BigDecimal(total)).add(secondBenefit.multiply(new BigDecimal(occurs))); + + // optimistic expectation + //BigDecimal score = failedBenefit.multiply(new BigDecimal(total)).add( BigDecimal.valueOf(secondBenefit).multiply(new BigDecimal(total))); + + BigDecimal expBen = score.divide(new BigDecimal(total), Solver.DP, RoundingMode.HALF_DOWN); + + board.getLogger().log(Level.INFO, "Chord %s followed by Chord %s: Chord 1: benefit %f, Chord2: H=%d, to F=%d, Chord=%d, Benefit=%f ==> expected benefit %f" + , chord1, chord2Tile, chord1.getNetBenefit(), clearable, needsFlag, chordClick, secondBenefit, expBen); + + return score; + + } + + + /** + * A No-flag efficiency algorithm + */ + public List processNF() { + + List result = new ArrayList<>(); + + //Set notZeros = new HashSet<>(); + + Map zeroProbs = new HashMap<>(); + + // locations next to a mine can't be zero + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + if (this.board.isConfirmedMine(i, j)) { + for (Location adjTile: board.getAdjacentSquaresIterable(this.board.getLocation(i, j))) { + if (board.isUnrevealed(adjTile)) { + zeroProbs.put(adjTile, BigDecimal.ZERO); // tiles adjacent to a mine have zero probability of being a '0' + } + } + + //notZeros.addAll(board.getAdjacentUnrevealedSquares(this.board.getLocation(i, j))); + } + } + } + + // calculate the current solution count + List emptyList = Collections.emptyList(); + SolutionCounter currSolnCount = board.getSolver().validatePosition(wholeEdge, emptyList, null, Area.EMPTY_AREA); + + + Set onEdgeSet = new HashSet<>(this.wholeEdge.getSquares()); + + Set adjacentEdgeSet = new HashSet<>(); + + BigDecimal zeroTileScore = null; + Location zeroTile = null; + + // do a more costly check for whether zero is possible, for those which haven't already be determined + for (Location tile: this.wholeEdge.getSquares()) { + + if (!zeroProbs.containsKey(tile) && !this.board.isConfirmedMine(tile)) { + SolutionCounter counter = board.getSolver().validateLocationUsingSolutionCounter(wholeEdge, tile, 0, Area.EMPTY_AREA); + + if (counter.getSolutionCount().signum() == 0) { // no solution where this is a zero + zeroProbs.put(tile, BigDecimal.ZERO); + } else if (counter.getSolutionCount().compareTo(currSolnCount.getSolutionCount()) == 0) { + board.getLogger().log(Level.INFO, "Tile %s is always zero", tile); + result.add(new Action(tile, Action.CLEAR, MoveMethod.TRIVIAL, "Certain zero (1)", BigDecimal.ONE)); + break; + } else { + + BigDecimal zeroProb = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(currSolnCount.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + zeroProbs.put(tile, zeroProb); + + BigDecimal safety = this.pe.getProbability(tile); + BigDecimal score = zeroProb.subtract(BigDecimal.ONE.subtract(safety).multiply(NFE_BLAST_PENALTY)); + + if (zeroTile == null || zeroTileScore.compareTo(score) < 0) { + zeroTile = tile; + zeroTileScore = score; + } + } + } + + // collect hidden tiles adjacent to the boundary and not on the boundary + for (Location adjTile: this.board.getAdjacentSquaresIterable(tile)) { + if (this.board.isUnrevealed(adjTile) && !onEdgeSet.contains(adjTile)) { + adjacentEdgeSet.add(adjTile); + } + } + + } + + if (!result.isEmpty()) { + return result; + } + + // do a more costly check for whether zero is possible for actions not already considered, for those which haven't already be determined + for (Action tile: this.actions) { + + if (tile.getAction() == Action.CLEAR && !zeroProbs.containsKey(tile)) { + SolutionCounter counter = board.getSolver().validateLocationUsingSolutionCounter(wholeEdge, tile, 0, Area.EMPTY_AREA); + + if (counter.getSolutionCount().signum() == 0) { // no solution where this is a zero + zeroProbs.put(tile, BigDecimal.ZERO); + } else if (counter.getSolutionCount().compareTo(currSolnCount.getSolutionCount()) == 0) { + board.getLogger().log(Level.INFO, "Tile %s is always zero", tile); + result.add(tile); + break; + } else { + + BigDecimal zeroProb = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(currSolnCount.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + zeroProbs.put(tile, zeroProb); + + BigDecimal safety = this.pe.getProbability(tile); + BigDecimal score = zeroProb.subtract(BigDecimal.ONE.subtract(safety).multiply(NFE_BLAST_PENALTY)); + + if (zeroTile == null || zeroTileScore.compareTo(score) < 0) { + zeroTile = tile; + zeroTileScore = score; + } + } + } + + // collect hidden tiles adjacent to the boundary and not on the boundary + for (Location adjTile: this.board.getAdjacentSquaresIterable(tile)) { + if (this.board.isUnrevealed(adjTile) && !onEdgeSet.contains(adjTile)) { + adjacentEdgeSet.add(adjTile); + } + } + + } + + if (!result.isEmpty()) { + return result; + } + + BigDecimal offEdgeSafety = this.pe.getOffEdgeProb(); + + // see if tiles adjacent to the boundary can be zero + for (Location tile: adjacentEdgeSet) { + SolutionCounter counter = board.getSolver().validateLocationUsingSolutionCounter(wholeEdge, tile, 0, Area.EMPTY_AREA); + + if (counter.getSolutionCount().signum() == 0) { // no solution where this is a zero + zeroProbs.put(tile, BigDecimal.ZERO); + + } else if (counter.getSolutionCount().compareTo(currSolnCount.getSolutionCount()) == 0) { + board.getLogger().log(Level.INFO, "Tile %s is always zero", tile); + result.add(new Action(tile, Action.CLEAR, MoveMethod.TRIVIAL, "Certain zero (2)", BigDecimal.ONE)); + break; + } else { + + BigDecimal zeroProb = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(currSolnCount.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + zeroProbs.put(tile, zeroProb); + + BigDecimal score = zeroProb.subtract(BigDecimal.ONE.subtract(offEdgeSafety).multiply(NFE_BLAST_PENALTY)); + + if (zeroTile == null || zeroTileScore.compareTo(score) < 0) { + zeroTile = tile; + zeroTileScore = score; + } + } + } + + if (!result.isEmpty()) { + return result; + } + + BigDecimal maxAllNotZeroProbability = BigDecimal.ZERO; + Action bestAllNotZeroAction = null; + + // see if any safe tiles are also never next to a zero + for (Action act: actions) { + + if (act.getAction() == Action.CLEAR) { + + // find the best chord adjacent to this clear if there is one + //boolean valid = true; + BigDecimal allNotZeroProbability = BigDecimal.ONE; + // if all the adjacent tiles can't be zero then we are safe to clear this tile without wasting a 3BV + for (Location adjTile: this.board.getAdjacentSquaresIterable(act)) { + if (this.board.isUnrevealed(adjTile)) { + if (zeroProbs.containsKey(adjTile)) { + allNotZeroProbability = allNotZeroProbability.multiply(BigDecimal.ONE.subtract(zeroProbs.get(adjTile))); + } else { + board.getLogger().log(Level.WARN, "Tile %s doesn't have a probability for being a zero", adjTile); + } + + } + + } + if (bestAllNotZeroAction == null || maxAllNotZeroProbability.compareTo(allNotZeroProbability) < 0) { + bestAllNotZeroAction = act; + maxAllNotZeroProbability = allNotZeroProbability; + } + + if (allNotZeroProbability.compareTo(BigDecimal.ONE) == 0) { + board.getLogger().log(Level.INFO, "Tile %s is 3BV safe because it can't be next to a zero", act); + result.add(act); + } + } + } + + if (!result.isEmpty()) { + return result; + } + + if (zeroTile != null) { + + BigDecimal prob = this.pe.getProbability(zeroTile); + if (bestAllNotZeroAction != null) { + if (maxAllNotZeroProbability.compareTo(zeroTileScore ) > 0 && zeroTileScore.compareTo(BigDecimal.ZERO) < 0) { + result.add(bestAllNotZeroAction); + } else { + result.add(new Action(zeroTile, Action.CLEAR, MoveMethod.TRIVIAL, "best zero", prob)); + } + } else { + result.add(new Action(zeroTile, Action.CLEAR, MoveMethod.TRIVIAL, "best zero", prob)); + } + } else { + if (bestAllNotZeroAction != null) { + result.add(bestAllNotZeroAction); + } + } + + // otherwise use the best tile looking for a zero + //Action action = new Action(zeroTile, Action.CLEAR, MoveMethod.TRIVIAL, "best zero", this.pe.getProbability(zeroTile)); + //result.add(action); + //board.getLogger().log(Level.INFO, "Action %s", action); + + return result; + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/FiftyFiftyHelper.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/FiftyFiftyHelper.java new file mode 100644 index 0000000..1c0c4d2 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/FiftyFiftyHelper.java @@ -0,0 +1,690 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class FiftyFiftyHelper { + + private boolean[][] PATTERNS = new boolean[][] {{true, true, true, true}, // four mines + {true, true, true, false}, {true, false, true, true}, {false, true, true, true}, {true, true, false, true}, // 3 mines + {true, false, true, false}, {false, true, false, true}, {true, true, false, false}, {false, false, true, true}, // 2 mines + {false, true, false, false}, {false, false, false, true}, {true, false, false, false}, {false, false, true, false} // 1 mine + }; + + private final static BigDecimal HALF = new BigDecimal("0.5"); + + private class Link { + + private Location tile1; + private boolean closed1 = true; + private Location tile2; + private boolean closed2 = true; + + private boolean processed = false; + + // list of locations which could prevent us being an unavoidable 50/50 + private List trouble = new ArrayList<>(); + + } + + private Set deferGuessing = new HashSet<>(); + + private BoardState board; + private WitnessWeb wholeEdge; + private Area deadLocations; + + private BigDecimal bestNonPseudo2Tile5050Probability = BigDecimal.ZERO; + private Location bestNonPseudo2Tile5050Tile1; // this represents the best tile which isn't a 2-tile pseudo 50/50 because it does support 2 mines + private Location bestNonPseudo2Tile5050Tile2; + private BigDecimal bestNonPseudo2Tilelts = BigDecimal.ZERO; + private int bestNonPseudo2TileAdjacent = 0; + + public FiftyFiftyHelper(BoardState board, WitnessWeb wholeEdge, Area deadLocations) { + + this.board = board; + this.wholeEdge = wholeEdge; + this.deadLocations = deadLocations; + + } + + public Location findUnavoidable5050(List extraMines) { + + List links = new ArrayList<>(); + + // also look for unavoidable guesses + for (Witness witness: wholeEdge.getPrunedWitnesses()) { + if (witness.getMines() == 1 && witness.getSquares().size() == 2) { + + // create a new link + Link link = new Link(); + link.tile1 = witness.getSquares().get(0); + link.tile2 = witness.getSquares().get(1); + + + board.getLogger().log(Level.INFO, "Witness %s is a possible unavoidable guess witness for %s and %s", witness, link.tile1, link.tile2); + boolean unavoidable = true; + // if every monitoring tile also monitors all the other tiles then it can't provide any information + for (Square tile: witness.getSquares()) { + for (Location adjTile: board.getAdjacentSquaresIterable(tile)) { + + // are we one of the tiles other tiles, if so then no need to check + boolean toCheck = true; + for (Square otherTile: witness.getSquares()) { + if (otherTile.equals(adjTile)) { + toCheck = false; + break; + } + } + + // if we are monitoring and not a mine then see if we are also monitoring all the other mines + if (toCheck && !board.isConfirmedMine(adjTile) && !extraMines.contains(adjTile)) { + for (Square otherTile: witness.getSquares()) { + if (!otherTile.equals(adjTile) && !adjTile.isAdjacent(otherTile)) { + //board.display("Tile " + adjTile.display() + " is not monitoring " + otherTile.display()); + board.getLogger().log(Level.DEBUG, "Tile %S can receive exclusive information from %s", tile, adjTile); + link.trouble.add(adjTile); + if (tile.equals(link.tile1)) { + link.closed1 = false; + } else { + link.closed2 = false; + } + unavoidable = false; + //break check; + } + } + } + } + } + if (unavoidable) { + Location guess = board.getSolver().getLowest(witness.getSquares(), deadLocations); + board.getLogger().log(Level.INFO, "Tile %s is an unavoidable guess", guess); + return guess; + } + + links.add(link); + } + } + + List area5050 = new ArrayList<>(); // used to hold the expanding candidate 50/50 + + // try and connect 2 or links together to form an unavoidable 50/50. Closed at both ends. + for (Link link: links) { + if (!link.processed && (link.closed1 ^ link.closed2)) { // this is the XOR operator, so 1 and only 1 of these is closed + + Location openTile; + int extensions = 0; + if (!link.closed1) { + openTile = link.tile1; + } else { + openTile = link.tile2; + } + + area5050.clear(); + area5050.add(link.tile1); + area5050.add(link.tile2); + + link.processed = true; + + boolean noMatch = false; + while (openTile != null && !noMatch) { + + noMatch = true; + for (Link extension: links) { + if (!extension.processed) { + + if (extension.tile1.equals(openTile)) { + extensions++; + extension.processed = true; + noMatch = false; + + // accumulate the trouble tiles as we progress; + link.trouble.addAll(extension.trouble); + area5050.add(extension.tile2); // tile2 is the new tile + + if (extension.closed2) { + if (extensions % 2 == 0 && noTrouble(link, area5050)) { + board.getLogger().log(Level.INFO, "Tile %s is an unavoidable guess, with %d extensions", openTile, extensions); + return board.getSolver().getLowest(area5050, deadLocations); + } else { + board.getLogger().log(Level.INFO, "Tile %s is a closed extension with %d parts", openTile, (extensions + 1)); + deferGuessing.addAll(area5050); + openTile = null; + } + } else { // found an open extension, now look for an extension for this + openTile = extension.tile2; + } + break; + } + if (extension.tile2.equals(openTile)) { + extensions++; + extension.processed = true; + noMatch = false; + + // accumulate the trouble tiles as we progress; + link.trouble.addAll(extension.trouble); + area5050.add(extension.tile1); // tile 1 is the new tile + + if (extension.closed1) { + if (extensions % 2 == 0 && noTrouble(link, area5050)) { + board.getLogger().log(Level.INFO, "Tile %s is an unavoidable guess, with %d extensions", openTile, extensions); + return board.getSolver().getLowest(area5050, deadLocations); + } else { + board.getLogger().log(Level.INFO, "Tile %s is a closed extension with %d parts", openTile, (extensions + 1)); + deferGuessing.addAll(area5050); + openTile = null; + } + + } else { // found an open extension, now look for an extension for this + openTile = extension.tile1; + } + + break; + } + + } + + } + + } + + } + } + + /* This makes results worse, preumaby because some non-50/50s are getting through + // try and find a circular unavoidable 50/50. Not closed. + for (Link link: links) { + if (!link.processed && !link.closed1 && !link.closed2) { // not processed and open at both ends + + Location openTile; + Location startTile; + int extensions = 0; + startTile = link.tile1; + openTile = link.tile2; + + area5050.clear(); + area5050.add(link.tile1); + area5050.add(link.tile2); + + link.processed = true; + + boolean noMatch = false; + while (openTile != null && !noMatch) { + + noMatch = true; + for (Link extension: links) { + if (!extension.processed && !extension.closed1 && !extension.closed2) { // a circular 50/50 must have links open at both ends + + if (extension.tile1.equals(openTile)) { + + extension.processed = true; + noMatch = false; + + // accumulate the trouble tiles as we progress; + link.trouble.addAll(extension.trouble); + area5050.add(extension.tile2); // tile2 is the new tile + + if (extension.tile2.equals(startTile)) { + if (extensions % 2 == 0 ) { // && noTrouble(link, area5050) + board.getLogger().log(Level.WARN, "Tile %s is an unavoidable circular 50/50 guess, with %d extensions", openTile, extensions); + return board.getSolver().getLowest(area5050); + } else { + board.getLogger().log(Level.INFO, "Tile %s is a circular extension with %d parts", openTile, (extensions + 1)); + deferGuessing.addAll(area5050); + openTile = null; + } + } else { // not closed the loop, so keep going + extensions++; + openTile = extension.tile2; + } + break; + } + if (extension.tile2.equals(openTile)) { + extension.processed = true; + noMatch = false; + + // accumulate the trouble tiles as we progress; + link.trouble.addAll(extension.trouble); + area5050.add(extension.tile1); // tile 1 is the new tile + + if (extension.tile1.equals(startTile)) { + if (extensions % 2 == 0 ) { // && noTrouble(link, area5050) + board.getLogger().log(Level.WARN, "Tile %s is an unavoidable circular 50/50 guess, with %d extensions", openTile, extensions); + return board.getSolver().getLowest(area5050); + } else { + board.getLogger().log(Level.INFO, "Tile %s is a circular extension with %d parts", openTile, (extensions + 1)); + deferGuessing.addAll(area5050); + openTile = null; + } + + } else { // not closed the loop, so keep going + extensions++; + openTile = extension.tile1; + } + + break; + } + + } + + } + + } + + } + } + */ + + board.getLogger().log(Level.INFO, "%d locations set to defered guessing", deferGuessing.size()); + return null; + + } + + private boolean noTrouble(Link link, List area) { + + // each trouble location must be adjacent to 2 tiles in the extended 50/50 + top: for (Location tile: link.trouble) { + + for (Location tile5050: area) { + if (tile.equals(tile5050)) { + continue top; //if a trouble tile is part of the 50/50 it isn't trouble + } + } + + + int adjCount = 0; + for (Location tile5050: area) { + if (tile.isAdjacent(tile5050)) { + adjCount++; + } + } + if (adjCount % 2 != 0) { + board.getLogger().log(Level.DEBUG, "Trouble Tile %s isn't adjacent to an even number of tiles in the extended candidate 50/50, adjacent %d of %d", tile, adjCount, area.size()); + return false; + } + } + + + return true; + + } + + public boolean isDeferGuessing(Location l) { + return deferGuessing.contains(l); + } + + /** + * Looks for pseudo-50/50s (which may be real 50/50s since we don't check any further) + */ + public Location process(ProbabilityEngineModel pe) { + + board.getLogger().log(Level.INFO, "Starting search for 50/50s"); + + int minesLeft = board.getMines() - board.getConfirmedMineCount(); + + + // horizontal 2x1 + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight(); j++) { + + // need 2 hidden tiles + if (!board.isUnrevealed(i, j) || !board.isUnrevealed(i + 1, j)) { + continue; + } + + if (isPotentialInfo(i-1, j-1) || isPotentialInfo(i-1, j) || isPotentialInfo(i-1, j+1) + || isPotentialInfo(i+2, j-1) || isPotentialInfo(i+2, j) || isPotentialInfo(i+2, j+1)) { + continue; // this skips the rest of the logic below this in the for-loop + } + + Location tile1 = this.board.getLocation(i, j); + Location tile2 = this.board.getLocation(i + 1, j); + + //board.getLogger().log(Level.INFO, tile1 + " and " + tile2 + " is candidate 50/50"); + + if (minesLeft > 1) { + // see if the 2 tiles can support 2 mines + List mines = new ArrayList<>(); + mines.add(tile1); + mines.add(tile2); + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, null, Area.EMPTY_AREA); + if (counter.getSolutionCount().signum() == 0) { + board.getLogger().log(Level.INFO, "%s and %s can't have 2 mines, guess immediately", tile1, tile2); + return tile1; + } else { + BigDecimal notPseudo = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + BigDecimal pseudo = BigDecimal.ONE.subtract(notPseudo); + board.getLogger().log(Level.INFO, "%s and %s are not both mines %f of the time", tile1, tile2, pseudo); + + if (pseudo.compareTo(bestNonPseudo2Tile5050Probability) > 0 + || pseudo.compareTo(bestNonPseudo2Tile5050Probability) == 0 && board.countAdjacentUnrevealed(tile1) < bestNonPseudo2TileAdjacent) { + bestNonPseudo2Tile5050Probability = pseudo; + bestNonPseudo2Tile5050Tile1 = tile1; + bestNonPseudo2Tile5050Tile2 = tile2; + bestNonPseudo2TileAdjacent = board.countAdjacentUnrevealed(bestNonPseudo2Tile5050Tile1); + } + } + + + } else { + board.getLogger().log(Level.INFO, "%s and %s can't have 2 mines since not enough mines left in the game, guess immediately", tile1, tile2); + return tile1; + } + + } + } + + // vertical 1x2 + for (int i=0; i < board.getGameWidth(); i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + // need 2 hidden tiles + if (!board.isUnrevealed(i, j) || !board.isUnrevealed(i, j + 1)) { + continue; + } + + if (isPotentialInfo(i - 1, j - 1) || isPotentialInfo(i, j - 1) || isPotentialInfo(i + 1, j - 1) + || isPotentialInfo(i - 1, j + 2) || isPotentialInfo(i, j + 2) || isPotentialInfo(i + 1, j + 2)) { + continue; // this skips the rest of the logic below this in the for-loop + } + + Location tile1 = this.board.getLocation(i, j); + Location tile2 = this.board.getLocation(i, j + 1); + + //board.getLogger().log(Level.INFO, tile1 + " and " + tile2 + " is candidate 50/50"); + + if (minesLeft > 1) { + // see if the 2 tiles can support 2 mines + List mines = new ArrayList<>(); + mines.add(tile1); + mines.add(tile2); + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, null, Area.EMPTY_AREA); + if (counter.getSolutionCount().signum() == 0) { + board.getLogger().log(Level.INFO, "%s and %s can't have 2 mines, guess immediately", tile1, tile2); + return tile1; + } else { + BigDecimal notPseudo = new BigDecimal(counter.getSolutionCount()).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + BigDecimal pseudo = BigDecimal.ONE.subtract(notPseudo); + board.getLogger().log(Level.INFO, "%s and %s are not both mines %f of the time", tile1, tile2, pseudo); + + if (pseudo.compareTo(bestNonPseudo2Tile5050Probability) > 0 + || pseudo.compareTo(bestNonPseudo2Tile5050Probability) == 0 && board.countAdjacentUnrevealed(tile1) < bestNonPseudo2TileAdjacent) { + bestNonPseudo2Tile5050Probability = pseudo; + bestNonPseudo2Tile5050Tile1 = tile1; + bestNonPseudo2Tile5050Tile2 = tile2; + bestNonPseudo2TileAdjacent = board.countAdjacentUnrevealed(tile1); + } + } + + } else { + board.getLogger().log(Level.INFO, "%s and %s can't have 2 mines since not enought mines left in the game, guess immediately", tile1, tile2); + return tile1; + } + + } + } + + if (bestNonPseudo2Tile5050Probability.signum() > 0) { + board.getLogger().log(Level.INFO, "%s is the best 2 tile non-Pseudo5050 at %f", bestNonPseudo2Tile5050Tile2, bestNonPseudo2Tile5050Probability); + + List mines = new ArrayList<>(); + List noMines = new ArrayList<>(); + mines.add(bestNonPseudo2Tile5050Tile1); + noMines.add(bestNonPseudo2Tile5050Tile2); + SolutionCounter counter1 = board.getSolver().validatePosition(wholeEdge, mines, noMines, Area.EMPTY_AREA); + + mines.clear(); + noMines.clear(); + mines.add(bestNonPseudo2Tile5050Tile2); + noMines.add(bestNonPseudo2Tile5050Tile1); + SolutionCounter counter2 = board.getSolver().validatePosition(wholeEdge, mines, noMines, Area.EMPTY_AREA); + + BigDecimal prob5050 = new BigDecimal(counter1.getSolutionCount().add(counter2.getSolutionCount())).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + bestNonPseudo2Tilelts = BigDecimal.ONE.subtract(prob5050.multiply(HALF)); + board.getLogger().log(Level.INFO, "%s and %s form a 50/50 %f of the time giving long term safety of %f", bestNonPseudo2Tile5050Tile1, bestNonPseudo2Tile5050Tile1, prob5050, this.bestNonPseudo2Tilelts); + } + + /* + // box 2x2 + Location[] tiles = new Location[4]; + + List mines = new ArrayList<>(); + List noMines = new ArrayList<>(); + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + // need 4 hidden tiles + if (!board.isUnrevealed(i, j) || !board.isUnrevealed(i, j + 1) || !board.isUnrevealed(i + 1, j) || !board.isUnrevealed(i + 1, j + 1)) { + continue; + } + + // need the corners to be flags or off the board + if (isPotentialInfo(i - 1, j - 1) || isPotentialInfo(i + 2, j - 1) || isPotentialInfo(i - 1, j + 2) || isPotentialInfo(i + 2, j + 2)) { + continue; // this skips the rest of the logic below this in the for-loop + } + + tiles[0] = new Location(i, j); + tiles[1] = new Location(i + 1, j); + tiles[2] = new Location(i, j + 1); + tiles[3] = new Location(i + 1, j + 1); + + board.getLogger().log(Level.INFO, "%s %s %s %s is candidate box pseudo-50/50", tiles[0], tiles[1], tiles[2], tiles[3]); + + // keep track of which tiles are risky - once all 4 are then not a pseudo-50/50 + int riskyTiles = 0; + boolean[] risky = new boolean[4]; + + // check each tile is in the web and that at least one is living + boolean okay = true; + boolean allDead = true; + for (int l = 0; l < 4; l++) { + if (!this.deadLocations.contains(tiles[l])) { + allDead = false; + } else { + riskyTiles++; + risky[l] = true; // since we'll never select a dead tile, consider them risky + } + if (!this.wholeEdge.isOnWeb(tiles[l])) { + board.getLogger().log(Level.DEBUG, "%s has no witnesses, so nothing to check", tiles[l]); + okay = false; + break; + } + } + if (!okay || allDead) { + continue; + } + + + int start; + if (minesLeft > 3) { + start = 0; + } else if (minesLeft == 3) { + start = 1; + } else if (minesLeft == 2) { + start = 5; + } else { + start = 9; + } + + for (int k = start; k < PATTERNS.length; k++) { + + mines.clear(); + noMines.clear(); + + boolean run = false; + // allocate each position as a mine or noMine + for (int l = 0; l < 4; l++) { + if (PATTERNS[k][l]) { + mines.add(tiles[l]); + if (!risky[l]) { + run = true; + } + } else { + noMines.add(tiles[l]); + } + } + + // only run if this pattern can discover something we don't already know + if (!run) { + board.getLogger().log(Level.DEBUG, "Pattern %d skipped", k); + continue; + } + + // see if the position is valid + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, noMines, Area.EMPTY_AREA); + + // if it is then mark each mine tile as risky + if (counter.getSolutionCount().signum() != 0) { + board.getLogger().log(Level.DEBUG, "Pattern %d is valid", k); + for (int l = 0; l < 4; l++) { + if (PATTERNS[k][l]) { + if (!risky[l]) { + risky[l] = true; + riskyTiles++; + } + } + } + if (riskyTiles == 4) { + break; + } + } else { + board.getLogger().log(Level.DEBUG, "Pattern %d is not valid", k); + } + } + + // if not all 4 tiles are risky then send back one which isn't + if (riskyTiles != 4) { + for (int l = 0; l < 4; l++) { + // if not risky and not dead then select it + if (!risky[l] && !deadLocations.contains(tiles[l])) { + board.getLogger().log(Level.INFO, "%s %s %s %s is pseudo 50/50 - " + tiles[l].toString() + " is not risky", tiles[0], tiles[1], tiles[2], tiles[3]); + return tiles[l]; + } + + } + } + } + } + */ + + // can't create a 2x2 50/50 if only 1 tile left + if (minesLeft < 2) { + return null; + } + + // box 2x2 + Location[] tiles = new Location[4]; + List mines = new ArrayList<>(); + List noMines = new ArrayList<>(); + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + // need 4 hidden tiles + if (!board.isUnrevealed(i, j) || !board.isUnrevealed(i, j + 1) || !board.isUnrevealed(i + 1, j) || !board.isUnrevealed(i + 1, j + 1)) { + continue; + } + + // need the corners to be flags or off the board + if (isPotentialInfo(i - 1, j - 1) || isPotentialInfo(i + 2, j - 1) || isPotentialInfo(i - 1, j + 2) || isPotentialInfo(i + 2, j + 2)) { + continue; // this skips the rest of the logic below this in the for-loop + } + + tiles[0] = this.board.getLocation(i, j); + tiles[1] = this.board.getLocation(i + 1, j); + tiles[2] = this.board.getLocation(i, j + 1); + tiles[3] = this.board.getLocation(i + 1, j + 1); + + board.getLogger().log(Level.INFO, "%s %s %s %s is candidate box pseudo-50/50", tiles[0], tiles[1], tiles[2], tiles[3]); + + mines.clear(); + noMines.clear(); + + mines.add(tiles[0]); + mines.add(tiles[3]); + noMines.add(tiles[1]); + noMines.add(tiles[2]); + + // see if the position is valid + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, noMines, Area.EMPTY_AREA); + + for (Location t: tiles) { + if (!this.deadLocations.contains(t)) { + Box b = pe.getBox(t); + if (b != null) { + board.getLogger().log(Level.INFO, "Tile %s has tally %d, new board has solutions %d", t, b.getTally(), counter.getSolutionCount()); + + if (b.getTally().compareTo(counter.getSolutionCount()) == 0) { + board.getLogger().log(Level.INFO, "%s %s %s %s is pseudo 50/50 - %s is not risky", tiles[0], tiles[1], tiles[2], tiles[3], t); + return t; + } + + } else { + board.getLogger().log(Level.INFO, "Tile %s is not on the boundary", t); + } + + } + } + } + } + + return null; + + } + + public BigDecimal getBestNonPseudo2Tile5050Probability() { + return this.bestNonPseudo2Tile5050Probability; + } + + public Location getBestNonPseudo2Tile() { + return this.bestNonPseudo2Tile5050Tile1; + } + + public BigDecimal getLongTermSafety() { + return bestNonPseudo2Tilelts; + } + // returns whether the tile is still valid even if it has no witnesses + /* + private boolean isExempt(Location l) { + + // if not test mode then no exemption + if (!board.getSolver().preferences.isTestMode()) { + return false; + } + + // if the tile is in a corner then it is exempt + if ((l.x == 0 || l.x == board.getGameWidth() - 1) && (l.y == 0 || l.y == board.getGameHeight() - 1)) { + return true; + } + + return false; + + } + */ + + // returns whether there information to be had at this location; i.e. on the board and either unrevealed or revealed + private boolean isPotentialInfo(int x, int y) { + + if (x < 0 || x >= board.getGameWidth() || y < 0 || y >= board.getGameHeight()) { + return false; + } + + if (board.isConfirmedMine(x, y)) { + return false; + } else { + return true; + } + + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LocationEvaluator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LocationEvaluator.java new file mode 100644 index 0000000..ab0a7c4 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LocationEvaluator.java @@ -0,0 +1,19 @@ +package minesweeper.solver; + +import java.util.Collection; +import java.util.List; + +import minesweeper.solver.constructs.EvaluatedLocation; +import minesweeper.structure.Action; +import minesweeper.structure.Location; + +public interface LocationEvaluator { + + abstract public Action[] bestMove(); + abstract public List getEvaluatedLocations(); + abstract public void evaluateLocations(); + abstract public void showResults(); + + abstract public void evaluateOffEdgeCandidates(List allUnrevealedSquares); + abstract public void addLocations(Collection tiles); +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelper.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelper.java new file mode 100644 index 0000000..f514f34 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelper.java @@ -0,0 +1,672 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class LongTermRiskHelper { + + private final static BigDecimal APPROX_THRESHOLD = new BigDecimal("0.01"); + + private class Result { + private final BigInteger influence; + private final List enablers; // these are mines which needed to form the outer part of the 50/50 + + private Result(BigInteger influence, List enablers) { + this.influence = influence; + this.enablers = enablers; + } + } + + private final BoardState board; + private final WitnessWeb wholeEdge; + private final ProbabilityEngineModel currentPe; + + // the number of solutions that come from 50/50s for each tile + // this is only an approximation based on the most common types of 50/50 + private BigInteger[][] influence5050s; + private BigInteger[][] influenceEnablers; + private Location pseudo; + + final List mines = new ArrayList<>(); + final List notMines = new ArrayList<>(); + + public LongTermRiskHelper(BoardState board, WitnessWeb wholeEdge, ProbabilityEngineModel pe) { + + this.board = board; + this.wholeEdge = wholeEdge; + this.currentPe = pe; + + influence5050s = new BigInteger[board.getGameWidth()][board.getGameHeight()]; + influenceEnablers = new BigInteger[board.getGameWidth()][board.getGameHeight()]; + + } + + /** + * Scan whole board looking for tiles heavily influenced by 50/50s + */ + public Location findInfluence() { + + checkFor2Tile5050(); + + checkForBox5050(); + + if (pseudo != null) { + board.getLogger().log(Level.INFO, "Tile %s is a 50/50, or safe", pseudo); + } + + return pseudo; + + } + + /** + * Get the 50/50 influence for a particular tile + */ + public BigInteger findInfluence(Location tile) { + + final int minesLeft = board.getMines() - board.getConfirmedMineCount(); + + BigInteger influence = BigInteger.ZERO; + + Location tile1, tile2, tile3; + + // 2-tile 50/50 + tile1 = board.getLocation(tile.x - 1, tile.y); + + BigInteger influence1 = BigInteger.ZERO; + influence1 = maxNotNull(BigInteger.ZERO, getHorizontal(tile, 4, 4, minesLeft)); + influence1 = maxNotNull(influence1, getHorizontal(tile1, 4, 4, minesLeft)); + + influence = influence.add(influence1); + + tile2 = board.getLocation(tile.x, tile.y - 1); + + BigInteger influence2 = BigInteger.ZERO; + influence2 = maxNotNull(influence2, getVertical(tile, 4, 4, minesLeft)); + influence2 = maxNotNull(influence2, getVertical(tile2, 4, 4, minesLeft)); + + influence = influence.add(influence2); + + // 4-tile 50/50 + tile3 = board.getLocation(tile.x - 1, tile.y - 1); + + BigInteger influence4 = BigInteger.ZERO; + influence4 = maxNotNull(influence4, getBoxInfluence(tile, 5, 5, minesLeft)); + influence4 = maxNotNull(influence4, getBoxInfluence(tile1, 5, 5, minesLeft)); + influence4 = maxNotNull(influence4, getBoxInfluence(tile2, 5, 5, minesLeft)); + influence4 = maxNotNull(influence4, getBoxInfluence(tile3, 5, 5, minesLeft)); + + influence = influence.add(influence4); + + board.getLogger().log(Level.INFO, "Tile %s base influence tally %d", tile, influence); + + // enablers also get influence as playing there also removes the 50/50 risk, so consider that as well as the 50/50 + if (influenceEnablers[tile.x][tile.y] != null) { + influence = influence.add(influenceEnablers[tile.x][tile.y]); + } + + BigInteger maxInfluence; + Box box = currentPe.getBox(tile); + if (box == null) { + maxInfluence = currentPe.getOffEdgeTally(); + } else { + maxInfluence = box.getTally(); + } + + // 50/50 influence P(50/50)/2 can't be larger than P(mine) or P(safe) + BigInteger other = currentPe.getSolutionCount().subtract(maxInfluence); + maxInfluence = maxInfluence.min(other); + + influence = influence.min(maxInfluence); + + return influence; + + } + + private void checkFor2Tile5050() { + + final int minMissingMines = 2; + final int maxMissingMines = 2; + + board.getLogger().log(Level.INFO, "Checking for 2-tile 50/50 influence"); + + final int minesLeft = board.getMines() - board.getConfirmedMineCount(); + + // horizontal 2x1 + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight(); j++) { + + Location tile1 = board.getLocation(i, j); + Location tile2 = board.getLocation(i + 1, j); + + Result result = getHorizontal(tile1, minMissingMines, maxMissingMines, minesLeft); + + if (result != null) { + BigInteger influenceTally = addNotNull(BigInteger.ZERO, result); + BigDecimal influence = new BigDecimal(influenceTally).divide(new BigDecimal(currentPe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + board.getLogger().log(Level.INFO, "%s and %s have horiontal 2-tile 50/50 influence %f", tile1, tile2, influence); + + addInfluence(influenceTally, result.enablers, tile1, tile2); + if (pseudo != null) { // if we've found a pseudo then we can stop here + return; + } + } + + + + } + } + + // vertical 2x1 + for (int i=0; i < board.getGameWidth(); i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + Location tile1 = board.getLocation(i, j); + Location tile2 = board.getLocation(i, j + 1); + + Result result = getVertical(tile1, minMissingMines, maxMissingMines, minesLeft); + + if (result != null) { + + BigInteger influenceTally = addNotNull(BigInteger.ZERO, result); + BigDecimal influence = new BigDecimal(influenceTally).divide(new BigDecimal(currentPe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + board.getLogger().log(Level.INFO, "%s and %s have vertical 2-tile 50/50 influence %f", tile1, tile2, influence); + + addInfluence(influenceTally, result.enablers, tile1, tile2); + if (pseudo != null) { // if we've found a pseudo then we can stop here + return; + } + } + + } + } + } + + private Result getHorizontal(final Location subject, final int minMissingMines, final int maxMissingMines, final int minesLeft) { + + if (subject == null) { + return null; + } + + int i = subject.x; + int j = subject.y; + + if (i < 0 || i + 1 >= board.getGameWidth()) { // need 1 extra space to the right + return null; + } + + // need 2 hidden tiles + if (!isHidden(i, j) || !isHidden(i + 1, j)) { + return null; + } + + List missingMines = getMissingMines(board.getLocation(i-1, j-1), board.getLocation(i-1, j), board.getLocation(i-1, j+1), + board.getLocation(i+2, j-1), board.getLocation(i+2, j), board.getLocation(i+2, j+1)); + + // only consider possible 50/50s with less than 3 missing mines or requires more mines then are left in the game (plus 1 to allow for the extra mine in the 50/50) + if (missingMines == null || missingMines.size() + 1 > maxMissingMines || missingMines.size() + 1 > minesLeft) { + return null; + } + + Location tile1 = subject; + Location tile2 = board.getLocation(i + 1, j); + + BigDecimal approxChance = calculateApproxChanceOf5050(missingMines, tile1); + + board.getLogger().log(Level.INFO, "Evaluating candidate 50/50 - %s %s - approx chance %f", tile1, tile2, approxChance); + + // if the estimate chance is too low then don't consider it + if (missingMines.size() + 1 > minMissingMines && approxChance.compareTo(APPROX_THRESHOLD) < 0) { + return null; + } + + mines.clear(); + notMines.clear(); + + // add the missing Mines and the mine required to form the 50/50 + mines.addAll(missingMines); + mines.add(tile1); + notMines.add(tile2); + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, notMines, Area.EMPTY_AREA); + + return new Result(counter.getSolutionCount(), missingMines); + + } + + private Result getVertical(final Location subject, final int minMissingMines, final int maxMissingMines, final int minesLeft) { + + if (subject == null) { + return null; + } + + int i = subject.x; + int j = subject.y; + + if (j < 0 || j + 1 >= board.getGameHeight()) { // need 1 extra space below + return null; + } + + // need 2 hidden tiles + if (!isHidden(i, j) || !isHidden(i, j + 1)) { + return null; + } + + List missingMines = getMissingMines(board.getLocation(i-1, j-1), board.getLocation(i, j - 1), board.getLocation(i + 1, j - 1), + board.getLocation(i - 1, j + 2), board.getLocation(i, j + 2), board.getLocation(i + 1, j + 2)); + + // only consider possible 50/50s with less than 3 missing mines or requires more mines then are left in the game (plus 1 to allow for the extra mine in the 50/50) + if (missingMines == null || missingMines.size() + 1 > maxMissingMines || missingMines.size() + 1 > minesLeft) { + return null; + } + + Location tile1 = board.getLocation(i, j); + Location tile2 = board.getLocation(i, j + 1); + + BigDecimal approxChance = calculateApproxChanceOf5050(missingMines, tile1); + + board.getLogger().log(Level.INFO, "Evaluating candidate 50/50 - %s %s - approx chance %f", tile1, tile2, approxChance); + + // if the estimate chance is too low then don't consider it + if (missingMines.size() + 1 > minMissingMines && approxChance.compareTo(APPROX_THRESHOLD) < 0) { + return null; + } + + mines.clear(); + notMines.clear(); + + // add the missing Mines and the mine required to form the 50/50 + mines.addAll(missingMines); + mines.add(tile1); + notMines.add(tile2); + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, notMines, Area.EMPTY_AREA); + + return new Result(counter.getSolutionCount(), missingMines); + + } + + private void checkForBox5050() { + + final int minMissingMines = 2; + final int maxMissingMines = 2; + + int minesLeft = board.getMines() - board.getConfirmedMineCount(); + + board.getLogger().log(Level.INFO, "Checking for 2-tile 50/50 influence: Mines left %d", minesLeft); + + // box 2x2 + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + Location tile1 = board.getLocation(i, j); + Location tile2 = board.getLocation(i, j + 1); + Location tile3 = board.getLocation(i + 1, j); + Location tile4 = board.getLocation(i + 1, j + 1); + + Result result = getBoxInfluence(tile1, minMissingMines, maxMissingMines, minesLeft); + + if (result != null) { + + BigInteger influenceTally = addNotNull(BigInteger.ZERO, result); + + BigDecimal influence = new BigDecimal(influenceTally).divide(new BigDecimal(currentPe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + board.getLogger().log(Level.INFO, "%s %s %s %s have box 4-tile 50/50 influence %f", tile1, tile2, tile3, tile4, influence); + + addInfluence(influenceTally, result.enablers, tile1, tile2, tile3, tile4); + if (pseudo != null) { // if we've found a pseudo then we can stop here + return; + } + } + + } + } + + } + + private Result getBoxInfluence(final Location subject, final int minMissingMines, final int maxMissingMines, final int minesLeft) { + + if (subject == null) { + return null; + } + + int i = subject.x; + int j = subject.y; + + if (j < 0 || j + 1 >= board.getGameHeight() || i < 0 || i + 1 >= board.getGameWidth()) { // need 1 extra space to the right and below + return null; + } + + // need 4 hidden tiles + if (!isHidden(i, j) || !isHidden(i, j + 1) || !isHidden(i + 1, j) || !isHidden(i + 1, j + 1)) { + return null; + } + + List missingMines = getMissingMines(board.getLocation(i - 1, j - 1), board.getLocation(i + 2, j - 1), board.getLocation(i - 1, j + 2), board.getLocation(i + 2, j + 2)); + + // only consider possible 50/50s with less than 3 missing mines or requires more mines then are left in the game (plus 1 to allow for the extra mine in the 50/50) + if (missingMines == null || missingMines.size() + 2 > maxMissingMines || missingMines.size() + 2 > minesLeft) { + return null; + } + + Location tile1 = board.getLocation(i, j); + Location tile2 = board.getLocation(i, j + 1); + Location tile3 = board.getLocation(i + 1, j); + Location tile4 = board.getLocation(i + 1, j + 1); + + BigDecimal approxChance = calculateApproxChanceOf5050(missingMines, tile1, tile4); + + board.getLogger().log(Level.INFO, "Evaluating candidate 50/50 - %s %s %s %s - approx chance %f", tile1, tile2, tile3, tile4, approxChance); + + // if the estimate chance is too low then don't consider it + if (missingMines.size() + 2 > minMissingMines && approxChance.compareTo(APPROX_THRESHOLD) < 0) { + return null; + } + + mines.clear(); + notMines.clear(); + + // add the missing Mines and the mine required to form the 50/50 + mines.addAll(missingMines); + mines.add(tile1); + mines.add(tile4); + notMines.add(tile2); + notMines.add(tile3); + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, notMines, Area.EMPTY_AREA); + + board.getLogger().log(Level.INFO, "Candidate 50/50 - %s %s %s %s influence %d", tile1, tile2, tile3, tile4, counter.getSolutionCount()); + + return new Result(counter.getSolutionCount(), missingMines); + + } + + private BigDecimal calculateApproxChanceOf5050(List missingMines, Location... other) { + + BigDecimal result = BigDecimal.ONE; + + for (Location tile: missingMines) { + result = result.multiply(BigDecimal.ONE.subtract(this.currentPe.getProbability(tile))); + } + + for (Location tile: other) { + result = result.multiply(BigDecimal.ONE.subtract(this.currentPe.getProbability(tile))); + } + + return result; + + } + + private BigInteger addNotNull(BigInteger influence, Result result) { + + if (result == null) { + return influence; + } else { + return function(influence, result.influence); + } + + } + + private BigInteger maxNotNull(BigInteger influence, Result result) { + + if (result == null) { + return influence; + } else { + return influence.max(result.influence); + } + + } + + private void addInfluence(BigInteger influence, List enablers, Location... tiles) { + + List pseudos = new ArrayList<>(); + + // the tiles which enable a 50/50 but aren't in it also get an influence + + if (enablers != null) { + + //BigInteger influence2 = influence.multiply(BigInteger.valueOf(2)).divide(BigInteger.valueOf(3)); + + for (Location loc: enablers) { + + // store the influence + if (influenceEnablers[loc.x][loc.y] == null) { + influenceEnablers[loc.x][loc.y] = influence; + } else { + influenceEnablers[loc.x][loc.y] = function(influenceEnablers[loc.x][loc.y],influence); + } + + } + } + + + for (Location loc: tiles) { + + Box b = currentPe.getBox(loc); + BigInteger mineTally; + if (b == null) { + mineTally = currentPe.getOffEdgeTally(); + } else { + mineTally = b.getTally(); + } + // If the mine influence covers the whole of the mine tally then it is a pseudo-5050 + //if (influence.compareTo(mineTally) == 0 && pseudo == null) { + // if (!currentPe.getDeadLocations().contains(loc)) { // don't accept dead tiles + // //board.getLogger().log(Level.INFO, "Tile %s is a 50/50, or safe", loc); + // pseudo = loc; + // } + //} + if (influence.compareTo(mineTally) == 0 && pseudo == null) { + if (!currentPe.getDeadLocations().contains(loc)) { // don't accept dead tiles + //board.getLogger().log(Level.INFO, "Tile %s is a 50/50, or safe", loc); + pseudos.add(loc); + } + } + // store the influence + if (influence5050s[loc.x][loc.y] == null) { + influence5050s[loc.x][loc.y] = influence; + } else { + //influences[loc.x][loc.y] = influences[loc.x][loc.y].max(influence); + influence5050s[loc.x][loc.y] = function(influence5050s[loc.x][loc.y],influence); + } + + } + + if (pseudos.size() == 3) { + pickPseudo(pseudos); + } else if (!pseudos.isEmpty()) { + pseudo = pseudos.get(0); + } + + + } + + private void pickPseudo(List locations) { + + int maxX = 0; + int maxY = 0; + + for (Location loc: locations) { + maxX = Math.max(maxX, loc.x); + maxY = Math.max(maxY, loc.y); + } + + int maxX1 = maxX - 1; + int maxY1 = maxY - 1; + + int found = 0; + // see if this diagonal exists in the pseudo candidates + for (Location loc: locations) { + if (loc.x == maxX && loc.y == maxY || loc.x == maxX1 && loc.y == maxY1) { + found++; + } + } + + // if the 2 diagonals exist then choose the pseudo from those, other wise choose the pseudo from the other diagonal + if (found == 2) { + pseudo = board.getLocation(maxX, maxY); + } else { + pseudo = board.getLocation(maxX - 1, maxY); + } + + } + + + + /** + * Get how many solutions have common 50/50s at this location + */ + /* + public BigInteger get5050Influence(Location loc) { + + BigInteger result = BigInteger.ZERO; + + if (influence5050s[loc.x][loc.y] != null) { + result = result.add(influence5050s[loc.x][loc.y]); + } + + if (influenceEnablers[loc.x][loc.y] != null) { + result = result.add(influenceEnablers[loc.x][loc.y]); + } + + return result; + } + */ + + /** + * Return all the locations with 50/50 influence + */ + public List getInfluencedTiles(BigDecimal threshold) { + + BigInteger cuttoffTally = threshold.multiply(new BigDecimal(currentPe.getSolutionCount())).toBigInteger(); + + List result = new ArrayList<>(); + + for (int i=0; i < board.getGameWidth(); i++) { + for (int j=0; j < board.getGameHeight(); j++) { + + BigInteger influence = BigInteger.ZERO; + + if (influence5050s[i][j] != null) { + influence = influence.add(influence5050s[i][j]); + } + + if (influenceEnablers[i][j] != null) { + influence = influence.add(influenceEnablers[i][j]); + } + + + if (influence.signum() !=0 ) { // if we are influenced by 50/50s + + Location loc = board.getLocation(i,j); + + if (!currentPe.getDeadLocations().contains(loc)) { // and not dead + + Box b = currentPe.getBox(loc); + BigInteger mineTally; + if (b == null) { + mineTally = currentPe.getOffEdgeTally(); + } else { + mineTally = b.getTally(); + } + + BigInteger safetyTally = currentPe.getSolutionCount().subtract(mineTally).add(influence); + + if (safetyTally.compareTo(cuttoffTally) > 0) { + board.getLogger().log(Level.INFO, "Tile %s has influence %d cutoff %d", loc, safetyTally, cuttoffTally); + result.add(loc); + } + + } + } + + } + } + + return result; + } + + // should we add or use max? Make a single place to change. + private BigInteger function(BigInteger a, BigInteger b) { + return a.add(b); + } + + // given a list of tiles return those which are on the board but not a mine + // if any of the tiles are revealed then return null + private List getMissingMines(Location... tiles) { + + List result = new ArrayList<>(); + + for (Location loc: tiles) { + + // if out of range don't return the location + if (loc == null) { + continue; + } + + // if the tile is revealed then we can't form a 50/50 here + if (board.isRevealed(loc)) { + return null; + } + + // if the location is already a mine then don't return the location + if (board.isConfirmedMine(loc) || isMineInPe(loc.x, loc.y)) { + continue; + } + + result.add(loc); + } + + return result; + } + + + + // returns whether there information to be had at this location; i.e. on the board and either unrevealed or revealed + private boolean isPotentialInfo(int x, int y) { + + if (x < 0 || x >= board.getGameWidth() || y < 0 || y >= board.getGameHeight()) { + return false; + } + + if (board.isConfirmedMine(x, y) || isMineInPe(x, y)) { + return false; + } else { + return true; + } + + } + + // not a certain mine or revealed + private boolean isHidden(int x, int y) { + + if (board.isConfirmedMine(x, y)) { + return false; + } + + if (board.isRevealed(x, y)) { + return false; + } + + //if (isMineInPe(x, y)) { + // return false; + //} + + return true; + + } + + + private boolean isMineInPe(int x, int y) { + for (Location loc: this.currentPe.getMines()) { + if (loc.x == x && loc.y == y) { + return true; + } + } + return false; + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelperOld.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelperOld.java new file mode 100644 index 0000000..71db766 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/LongTermRiskHelperOld.java @@ -0,0 +1,569 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class LongTermRiskHelperOld { + + private boolean[][] PATTERNS = new boolean[][] {{true, false, false, true}, {false, true, true, false}}; // 2 ways to make a 50/50 in a box + + private class Risk5050 { + + private Location poi; + private List area; + private List livingArea = new ArrayList<>(); + + private Risk5050(Location poi, Location... locs) { + this.poi = poi; + this.area = Arrays.asList(locs); + + for (Location loc: locs) { + if (!deadLocations.contains(loc)) { + livingArea.add(loc); + } + } + + } + + } + + + private final static BigDecimal HALF = new BigDecimal("0.5"); + + private final BoardState board; + private final WitnessWeb wholeEdge; + private final ProbabilityEngineModel currentPe; + private final Area deadLocations; + private final List fifty; + + private BigDecimal currentLongTermSafety; + + private Risk5050 worstBox5050; + private BigDecimal box5050Safety = BigDecimal.ONE; + + private BigDecimal twoTileSafety; + + private List risk5050s = new ArrayList<>(); + + public LongTermRiskHelperOld(BoardState board, WitnessWeb wholeEdge, ProbabilityEngineModel pe) { + + this.board = board; + this.wholeEdge = wholeEdge; + this.currentPe = pe; + this.deadLocations = pe.getDeadLocations(); + this.fifty = currentPe.getFiftyPercenters(); + + // sort into location order + fifty.sort(null); + + } + + public void findRisks() { + + checkFor2Tile5050(); + + //checkForBox5050(); + + this.currentLongTermSafety = this.box5050Safety.multiply(this.twoTileSafety); + + } + + public void checkFor2Tile5050() { + + BigDecimal longTermSafety = BigDecimal.ONE; + + for (int i=0; i < fifty.size(); i++) { + + Location tile1 = fifty.get(i); + Location tile2 = null; + + Location info = null; + Risk5050 risk = null; + + for (int j=i+1; j < fifty.size(); j++) { + tile2 = fifty.get(j); + + // tile2 is below tile1 + if (tile1.x == tile2.x && tile1.y == tile2.y - 1) { + info = checkVerticalInfo(tile1, tile2); + + if (info == null) { // try extending it + + Location tile3 = getFifty(tile2.x, tile2.y + 2); + Location tile4 = getFifty(tile2.x, tile2.y + 3); + + if (tile3 != null && tile4 != null) { + info = checkVerticalInfo(tile1, tile4); + if (info != null) { + risk = new Risk5050(info, tile1, tile2, tile3, tile4); + } + } + + } else { + risk = new Risk5050(info, tile1, tile2); + } + + break; + } + + // tile 2 is right of tile1 + if (tile1.x == tile2.x - 1 && tile1.y == tile2.y) { + info = checkHorizontalInfo(tile1, tile2); + + if (info == null) { // try extending it + + Location tile3 = getFifty(tile2.x + 2, tile2.y); + Location tile4 = getFifty(tile2.x + 3, tile2.y); + + if (tile3 != null && tile4 != null) { + info = checkHorizontalInfo(tile1, tile4); + if (info != null) { + risk = new Risk5050(info, tile1, tile2, tile3, tile4); + } + } + + } else { + risk = new Risk5050(info, tile1, tile2); + } + + break; + } + + } + + // if the 2 fifties form a pair with only 1 remaining source of information + if (risk != null) { + risk5050s.add(risk); // store the positions of interest + + BigDecimal safety = BigDecimal.ONE.subtract(BigDecimal.ONE.subtract(currentPe.getProbability(info)).multiply(HALF)); + board.getLogger().log(Level.INFO, "Seed %d - %s %s has 1 remaining source of information - tile %s %f", board.getSolver().getGame().getSeed(), tile1, tile2, info, safety); + longTermSafety = longTermSafety.multiply(safety); + } + + } + + if (longTermSafety.compareTo(BigDecimal.ONE) != 0) { + board.getLogger().log(Level.INFO, "Seed %d - Total long term safety %f", board.getSolver().getGame().getSeed(), longTermSafety); + } + + + this.twoTileSafety = longTermSafety; + + } + + private boolean isFifty(int x, int y) { + + return (getFifty(x, y) != null); + + } + + private Location getFifty(int x, int y) { + + for (Location loc: fifty) { + if (loc.x == x && loc.y == y) { + return loc; + } + } + + return null; + + } + + public List get5050Breakers() { + List breakers = new ArrayList<>(); + + if (board.getSolver().preferences.considerLongTermSafety()) { + for (Risk5050 risk: risk5050s) { + breakers.addAll(risk.livingArea); + breakers.add(risk.poi); + } + } + + + return breakers; + } + + public BigDecimal getLongTermSafety() { + return this.currentLongTermSafety; + } + + public BigDecimal getLongTermSafety(Location candidate, ProbabilityEngineModel pe) { + + BigDecimal longTermSafety = null; + + if (board.getSolver().preferences.considerLongTermSafety()) { + + // if there is a possible box 50/50 then see if we are breaking it, otherwise use that as the start safety + if (worstBox5050 != null) { + + if (worstBox5050.poi.equals(candidate) || pe.getProbability(worstBox5050.poi).compareTo(BigDecimal.ONE) == 0) { + //board.getLogger().log(Level.INFO, "%s has broken 50/50", candidate); + longTermSafety = BigDecimal.ONE; + } else { + for (Location loc: worstBox5050.area) { + if (loc.equals(candidate)) { + //board.getLogger().log(Level.INFO, "%s has broken 50/50", candidate); + longTermSafety = BigDecimal.ONE; + break; + } + } + } + + + if (longTermSafety == null) { + longTermSafety = this.box5050Safety; + } + + } else { + longTermSafety = BigDecimal.ONE; + } + + + for (Risk5050 risk: this.risk5050s) { + BigDecimal safety = null; + + // is the candidate part of the 50/50 - if so it is being broken + for (Location loc: risk.area) { + if (loc.equals(candidate)) { + safety = BigDecimal.ONE; + break; + } + } + + if (safety == null) { + if (risk.poi.equals(candidate)) { + safety = BigDecimal.ONE; + } else { + safety = BigDecimal.ONE.subtract(BigDecimal.ONE.subtract(pe.getProbability(risk.poi)).multiply(HALF)); + } + } + + longTermSafety = longTermSafety.multiply(safety); + } + } else { + longTermSafety = BigDecimal.ONE; + } + + return longTermSafety; + + } + + + // returns the location of the 1 tile which can still provide information, or null + private Location checkVerticalInfo(Location tile1, Location tile2) { + + Location info = null; + + final int top = tile1.y - 1; + final int bottom = tile2.y + 1; + + final int left = tile1.x - 1; + + if (isPotentialInfo(left, top)) { + if (board.isRevealed(left, top)) { + return null; + } else { + info = new Location(left, top); + } + } + + if (isPotentialInfo(left + 1, top)) { + if (board.isRevealed(left + 1, top)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 1, top); + } + + if (isPotentialInfo(left + 2, top)) { + if (board.isRevealed(left + 2, top)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 2, top); + } + + if (isPotentialInfo(left, bottom)) { + if (board.isRevealed(left, bottom)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left, bottom); + } + + if (isPotentialInfo(left + 1, bottom)) { + if (board.isRevealed(left + 1, bottom)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 1, bottom); + } + + if (isPotentialInfo(left + 2, bottom)) { + if (board.isRevealed(left + 2, bottom)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 2, bottom); + } + + return info; + + } + + // returns the location of the 1 tile which can still provide information, or null + private Location checkHorizontalInfo(Location tile1, Location tile2) { + + Location info = null; + + final int top = tile1.y - 1; + + final int left = tile1.x - 1; + final int right = tile2.x + 1; + + if (isPotentialInfo(left, top)) { + if (board.isRevealed(left, top)) { + return null; + } else { + info = new Location(left, top); + } + } + + if (isPotentialInfo(left, top + 1)) { + if (board.isRevealed(left, top + 1)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left, top + 1); + } + + if (isPotentialInfo(left, top + 2)) { + if (board.isRevealed(left, top + 2)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left, top + 2); + } + + if (isPotentialInfo(right, top)) { + if (board.isRevealed(right, top)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(right, top); + } + + if (isPotentialInfo(right, top + 1)) { + if (board.isRevealed(right, top + 1)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(right, top + 1); + } + + if (isPotentialInfo(right, top + 2)) { + if (board.isRevealed(right, top + 2)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(right, top + 2); + } + + return info; + + } + + private void checkForBox5050() { + + // box 2x2 + Location[] tiles = new Location[4]; + + BigDecimal maxProbability = BigDecimal.ZERO; + Risk5050 worst5050 = null; + + List mines = new ArrayList<>(); + List noMines = new ArrayList<>(); + for (int i=0; i < board.getGameWidth() - 1; i++) { + for (int j=0; j < board.getGameHeight() - 1; j++) { + + // need 4 hidden tiles + if (!board.isUnrevealed(i, j) || !board.isUnrevealed(i, j + 1) || !board.isUnrevealed(i + 1, j) || !board.isUnrevealed(i + 1, j + 1)) { + continue; + } + + tiles[0] = new Location(i, j); + Location info = checkBoxInfo(tiles[0]); + + // need the corners to be flags or off the board + if (info == null) { + continue; // this skips the rest of the logic below this in the for-loop + } + + tiles[1] = new Location(i + 1, j); + tiles[2] = new Location(i, j + 1); + tiles[3] = new Location(i + 1, j + 1); + + BigInteger solutions = BigInteger.ZERO; + + for (int k = 0; k < PATTERNS.length; k++) { + + mines.clear(); + noMines.clear(); + + mines.add(info); // the missing mine + + // allocate each position as a mine or noMine + for (int l = 0; l < 4; l++) { + if (PATTERNS[k][l]) { + mines.add(tiles[l]); + } else { + noMines.add(tiles[l]); + } + } + + // see if the position is valid + SolutionCounter counter = board.getSolver().validatePosition(wholeEdge, mines, noMines, Area.EMPTY_AREA); + + // if it is then mark each mine tile as risky + if (counter.getSolutionCount().signum() != 0) { + board.getLogger().log(Level.DEBUG, "Pattern %d is valid with %d solutions", k, counter.getSolutionCount()); + solutions = solutions.add(counter.getSolutionCount()); + + } else { + board.getLogger().log(Level.DEBUG, "Pattern %d is not valid", k); + } + } + + BigDecimal probability = new BigDecimal(solutions).divide(new BigDecimal(this.currentPe.getSolutionCount()), 6, RoundingMode.HALF_UP); + + board.getLogger().log(Level.INFO, "%s %s %s %s is box 50/50 %f of the time", tiles[0], tiles[1], tiles[2], tiles[3], probability); + + if (probability.compareTo(maxProbability) > 0) { + maxProbability = probability; + worst5050 = new Risk5050(info, tiles[0], tiles[1], tiles[2], tiles[3]); + board.getLogger().log(Level.INFO, "%s %s %s %s is box 50/50 is new worst 50/50", tiles[0], tiles[1], tiles[2], tiles[3]); + } + + } + } + + this.worstBox5050 = worst5050; + this.box5050Safety = BigDecimal.ONE.subtract(maxProbability.multiply(HALF)); + + } + + // returns the location of the 1 tile which can still provide information for a 2x2 box, or null + private Location checkBoxInfo(Location tileTopLeft) { + + Location info = null; + + final int top = tileTopLeft.y - 1; + final int left = tileTopLeft.x - 1; + + if (isPotentialInfo(left, top)) { + if (board.isRevealed(left, top)) { + return null; + } else { + info = new Location(left, top); + } + } + + if (isPotentialInfo(left, top - 3)) { + if (board.isRevealed(left, top - 3)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left, top - 3); + } + + if (isPotentialInfo(left + 3, top)) { + if (board.isRevealed(left + 3, top)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 3, top); + } + + if (isPotentialInfo(left + 3, top + 3)) { + if (board.isRevealed(left + 3, top + 3)) { // info is certain + return null; + } else { + if (info != null) { // more than 1 tile giving possible info + return null; + } + } + info = new Location(left + 3, top + 3); + } + + return info; + + } + + // returns whether there information to be had at this location; i.e. on the board and either unrevealed or revealed + private boolean isPotentialInfo(int x, int y) { + + if (x < 0 || x >= board.getGameWidth() || y < 0 || y >= board.getGameHeight()) { + return false; + } + + if (board.isConfirmedMine(x, y) || isMineInPe(x, y)) { + return false; + } else { + return true; + } + + } + + private boolean isMineInPe(int x, int y) { + for (Location loc: this.currentPe.getMines()) { + if (loc.x == x && loc.y == y) { + return true; + } + } + return false; + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineFast.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineFast.java new file mode 100644 index 0000000..f9186f9 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineFast.java @@ -0,0 +1,1616 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.LinkedLocation; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.utility.Logger; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +/** + * This class uses a non iterative approach to calculating probabilities for each {@link minesweeper.solver.constructs.Box Box}. It is driven by a {@link minesweeper.solver.WitnessWeb witness web}. + * + * @author David + * + */ +public class ProbabilityEngineFast extends ProbabilityEngineModel { + + private int[][] SMALL_COMBINATIONS = new int[][] {{1}, {1,1}, {1,2,1}, {1,3,3,1}, {1,4,6,4,1}, {1,5,10,10,5,1}, {1,6,15,20,15,6,1}, {1,7,21,35,35,21,7,1}, {1,8,28,56,70,56,28,8,1}}; + + private static final boolean CHECK_FOR_DEAD_LOCATIONS = true; + + private class MergeSorter implements Comparator { + + int[] checks; + + private MergeSorter() { + checks = new int[0]; + } + + + private MergeSorter(List boxes) { + + checks = new int[boxes.size()]; + + for (int i=0; i < boxes.size(); i++) { + checks[i] = boxes.get(i).getUID(); + } + + } + + + @Override + public int compare(ProbabilityLine p1, ProbabilityLine p2) { + + int c = p1.mineCount - p2.mineCount; + + if (c != 0) { + return c; + } + + for (int i=0; i < checks.length; i++) { + int index = checks[i]; + + //BigInteger c1 = p1.mineBoxCount[index].divide(p1.solutionCount); + //BigInteger c2 = p2.mineBoxCount[index].divide(p2.solutionCount); + // + //c = c1.compareTo(c2); + + c = p1.allocatedMines[index] - p2.allocatedMines[index]; + + if (c != 0) { + return c; + } + + } + + return 0; + } + + } + + // used to hold a viable solution + private class ProbabilityLine implements Comparable { + private int mineCount = 0; + private BigInteger solutionCount = BigInteger.ZERO; + private BigInteger[] mineBoxCount = new BigInteger[boxCount]; + + private int[] allocatedMines = new int[boxCount]; // this is the number of mines originally allocate to a box + + private BigInteger[] hashCount = new BigInteger[boxCount]; + private BigInteger hash = new BigInteger(30, new Random()); + + { + for (int i=0; i < mineBoxCount.length; i++) { + mineBoxCount[i] = BigInteger.ZERO; + hashCount[i] = BigInteger.ZERO; + } + } + + private ProbabilityLine() { + this(BigInteger.ZERO); + } + + private ProbabilityLine(BigInteger solutionCount) { + this.solutionCount = solutionCount; + } + + + @Override + // sort by the number of mines in the solution + public int compareTo(ProbabilityLine o) { + return this.mineCount - o.mineCount; + } + } + + // used to hold what we need to analyse next + private class NextWitness { + + private Witness witness; + private List newBoxes = new ArrayList<>(); + private List oldBoxes = new ArrayList<>(); + + private NextWitness(Witness w) { + + this.witness = w; + + for (Box b: w.getBoxes()) { + if (b.isProcessed()) { + oldBoxes.add(b); + } else { + newBoxes.add(b); + } + } + + } + + } + + // information about the boxes surrounding a dead candidate + private class DeadCandidate { + + private Location candidate; + private Box myBox; + private boolean isAlive = false; + private List goodBoxes = new ArrayList<>(); + private List badBoxes = new ArrayList<>(); + + private boolean firstCheck = true; + private int total; + + } + + private long duration; + + private List workingProbs = new ArrayList<>(); // as we work through an independent set of witnesses probabilities are held here + private List heldProbs = new ArrayList<>(); + + //private BigDecimal[] boxProb; + private BigInteger[] hashTally; + private boolean offEdgeBest = true; + private BigDecimal offEdgeSafety; + private BigInteger offEdgeTally; + private BigDecimal bestProbability; + //private BigDecimal cutoffProbability; + + //when set to true indicates that the box has been part of this analysis + private boolean[] mask; + + private List linkedLocations = new ArrayList<>(); + private List contraLinkedLocations = new ArrayList<>(); + //private List dominatedTiles = new ArrayList<>(); + private List mines = new ArrayList<>(); // certain mines we have found + + // list of locations which are potentially dead + private List deadCandidates = new ArrayList<>(); + + // Edges which can be processed independently converted to Cruncher class, ready to be processed + private List isolatedEdges = new ArrayList<>(); + + final private BoardState boardState; + private final Logger logger; + final private WitnessWeb web; + final private int boxCount; + final private List witnesses; + final private List boxes; + final private int minesLeft; // number of mines undiscovered in the game + final private int squaresLeft; // number of squares undiscovered in the game and off the web + private Area deadLocations; + private boolean allDead = true; + + private int independentGroups = 0; + private int recursions = 0; + private boolean canDoDeadTileAnalysis; + + private BigInteger finalSolutionsCount; + private int clearCount; + private int livingClearCount; + final private List emptyBoxes = new ArrayList<>(); + + // these are the limits that can be on the edge + final private int minTotalMines; + final private int maxTotalMines; + + //final private Set mineCounts = new HashSet<>(); + final private Map mineCounts = new HashMap<>(); + + public ProbabilityEngineFast(BoardState boardState, WitnessWeb web, int squaresLeft, int minesLeft) { + this(boardState, web, squaresLeft, minesLeft, boardState.getLogger()); + + } + public ProbabilityEngineFast(BoardState boardState, WitnessWeb web, int squaresLeft, int minesLeft, Logger logger) { + + this.boardState = boardState; + this.logger = logger; + this.web = web; + this.minesLeft = minesLeft; + this.squaresLeft = squaresLeft - web.getSquares().size(); + this.deadLocations = Area.EMPTY_AREA; + + this.minTotalMines = Math.max(0, minesLeft - this.squaresLeft); //we can't use so few mines that we can't fit the remainder elsewhere on the board + this.maxTotalMines = minesLeft; // we can't use more mines than are left in the game + + //solver.display("Total mines " + minTotalMines + " to " + maxTotalMines); + + web.generateBoxes(); + + this.witnesses = web.getPrunedWitnesses(); + this.boxes = web.getBoxes(); + + this.boxCount = boxes.size(); + + //this.boxProb = new BigDecimal[boxCount]; + this.hashTally = new BigInteger[boxCount]; + + for (Witness w: witnesses) { + w.setProcessed(false); + } + + for (Box b: boxes) { + b.setProcessed(false); + } + + } + + // run the probability engine + public void process() { + + long startTime = System.currentTimeMillis(); + + if (CHECK_FOR_DEAD_LOCATIONS) { + determineCandidateDeadLocations(); + } + + // if we compress the probability lines before the edge is completely processed we can't use the data to look for dead tiles + canDoDeadTileAnalysis = true; + + // create an initial solution of no mines anywhere + heldProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // add an empty probability line to get us started + workingProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // create an empty mask - indicating no boxes have been processed + mask = new boolean[boxCount]; + + NextWitness witness = findFirstWitness(); + + while (witness != null) { + + // mark the new boxes as processed - which they will be soon + for (Box b: witness.newBoxes) { + mask[b.getUID()] = true; + } + + //System.out.println("Processing " + witness.witness.getLocation().display()); + + workingProbs = mergeProbabilities(witness); + + witness = findNextWitness(witness); + + } + + + calculateBoxProbabilities(); + + /* + for (Box b: boxes) { + solver.display("Box " + b.getUID() + " has probability " + boxProb[b.getUID()]); + } + */ + + duration = System.currentTimeMillis() - startTime; + } + + private List crunchByMineCount(List target, MergeSorter sorter) { + + if (target.isEmpty()) { + return target; + } + + // sort the solutions by number of mines + Collections.sort(target, sorter); + + List result = new ArrayList<>(); + + ProbabilityLine current = null; + + + for (ProbabilityLine pl: target) { + + /* + String show = pl.mineCount + " : " + pl.solutionCount + " : "; + for (int i=0; i < pl.mineBoxCount.length; i++) { + show = show + pl.mineBoxCount[i] + " "; + } + boardState.display(show); + */ + + if (current == null) { + current = pl; + } else if (sorter.compare(current, pl) != 0) { + result.add(current); + current = pl; + } else { + //boardState.display("Combining"); + combineProbabilities(current, pl); + } + + } + + result.add(current); + + logger.log(Level.DEBUG, "%d Probability Lines compressed to %d", target.size(), result.size()); + + return result; + + } + + + // calculate how many ways this solution can be generated and roll them into one + private void combineProbabilities(ProbabilityLine npl, ProbabilityLine pl) { + + /* + BigInteger solutions = BigInteger.ONE; + for (int i = 0; i < pl.mineBoxCount.length; i++) { + solutions = solutions.multiply(BigInteger.valueOf(SMALL_COMBINATIONS[boxes.get(i).getSquares().size()][pl.mineBoxCount[i].intValue()])); + } + + npl.solutionCount = npl.solutionCount.add(solutions); + */ + npl.solutionCount = npl.solutionCount.add(pl.solutionCount); + npl.hash = npl.hash.add(pl.hash); + + for (int i = 0; i < pl.mineBoxCount.length; i++) { + if (mask[i]) { // if this box has been involved in this solution - if we don't do this the hash gets corrupted by boxes = 0 mines because they weren't part of this edge + //npl.mineBoxCount[i] = npl.mineBoxCount[i].add(pl.mineBoxCount[i].multiply(solutions)); + npl.mineBoxCount[i] = npl.mineBoxCount[i].add(pl.mineBoxCount[i]); + npl.hashCount[i] = npl.hashCount[i].add(pl.hashCount[i]); + + //if (pl.mineBoxCount[i].signum() == 0) { + // npl.hashCount[i] = npl.hashCount[i].subtract(pl.hash); // treat no mines as -1 rather than zero + //} else { + // npl.hashCount[i] = npl.hashCount[i].add(pl.mineBoxCount[i].multiply(pl.hash)); + //} + } + } + + + + } + + // this combines newly generated probabilities with ones we have already stored from other independent sets of witnesses + private void storeProbabilities() { + + List result = new ArrayList<>(); + + //if (workingProbs.isEmpty()) { + // solver.display("working probabilites list is empty!!"); + // return; + //} + + //if (CHECK_FOR_DEAD_LOCATIONS) { + // checkCandidateDeadLocations(); + //} + + // crunch the new ones down to one line per mine count + //List crunched = crunchByMineCount(workingProbs); + + List crunched = workingProbs; + + if (crunched.size() == 1) { // if the size is one then the number of mines in the area is fixed + checkEdgeIsIsolated(true); + } else { + /* + boolean deferedGuessing = true; + for (ProbabilityLine pl: crunched) { + if (!pl.solutionCount.equals(BigInteger.ONE)) { + deferedGuessing = false; + break; + } + } + if (deferedGuessing && checkEdgeIsIsolated(false)) { + logger.log(Level.INFO, "Seed %s Defered guess found", boardState.getSolver().getGame().getSeed()); + for (int i=0; i < mask.length; i++) { + if (mask[i]) { + this.boxes.get(i).setDeferGuessing(); + } + } + } + */ + } + + + //solver.display("New data has " + crunched.size() + " entries"); + + for (ProbabilityLine pl: crunched) { + + for (ProbabilityLine epl: heldProbs) { + + if (pl.mineCount + epl.mineCount <= maxTotalMines) { + + ProbabilityLine npl = new ProbabilityLine(pl.solutionCount.multiply(epl.solutionCount)); + npl.mineCount = pl.mineCount + epl.mineCount; + npl.hash = epl.hash.add(pl.hash); + + //npl.solutionCount = pl.solutionCount.multiply(epl.solutionCount); + + for (int i=0; i < npl.mineBoxCount.length; i++) { + + BigInteger w1 = pl.mineBoxCount[i].multiply(epl.solutionCount); + BigInteger w2 = epl.mineBoxCount[i].multiply(pl.solutionCount); + npl.mineBoxCount[i] = w1.add(w2); + + npl.hashCount[i] = epl.hashCount[i].add(pl.hashCount[i]); + + } + result.add(npl); + + } + + } + + } + + // sort into mine order + Collections.sort(result); + + heldProbs.clear(); + + // if result is empty this is an impossible position + if (result.isEmpty()) { + return; + } + + // and combine them into a single probability line for each mine count + int mc = result.get(0).mineCount; + ProbabilityLine npl = new ProbabilityLine(); + npl.mineCount = mc; + + for (ProbabilityLine pl: result) { + if (pl.mineCount != mc) { + heldProbs.add(npl); + mc = pl.mineCount; + npl = new ProbabilityLine(); + npl.mineCount = mc; + } + npl.solutionCount = npl.solutionCount.add(pl.solutionCount); + npl.hash = npl.hash.add(pl.hash); + + for (int i = 0; i < pl.mineBoxCount.length; i++) { + npl.mineBoxCount[i] = npl.mineBoxCount[i].add(pl.mineBoxCount[i]); + + npl.hashCount[i] = npl.hashCount[i].add(pl.hashCount[i]); + } + } + + heldProbs.add(npl); + + /* + for (Box b: boxes) { + System.out.print(b.getSquares().size() + " "); + } + System.out.println(""); + for (ProbabilityLine pl: heldProbs) { + System.out.print("Mines = " + pl.mineCount + " solutions = " + pl.solutionCount + " boxes: "); + for (int i=0; i < pl.mineBoxCount.length; i++) { + System.out.print(" " + pl.mineBoxCount[i]); + } + System.out.println(""); + } + */ + + + } + + // here we expand the localised solution to one across the whole board and + // sum them together to create a definitive probability for each box + private void calculateBoxProbabilities() { + + //BigInteger[] tally = new BigInteger[boxCount]; + for (int i=0; i < hashTally.length; i++) { + //tally[i] = BigInteger.ZERO; + hashTally[i] = BigInteger.ZERO; + } + + // total game tally + BigInteger totalTally = BigInteger.ZERO; + + // outside a box tally + BigInteger outsideTally = BigInteger.ZERO; + + // calculate how many mines + for (ProbabilityLine pl: heldProbs) { + + if (pl.mineCount >= minTotalMines) { // if the mine count for this solution is less than the minimum it can't be valid + + if (mineCounts.put(pl.mineCount, pl.solutionCount) != null) { + logger.log(Level.ERROR, "Duplicate mines in probability Engine (merging probability lines not working?)"); + } + + BigInteger mult = Solver.combination(minesLeft - pl.mineCount, squaresLeft); //# of ways the rest of the board can be formed + + outsideTally = outsideTally.add(mult.multiply(BigInteger.valueOf(minesLeft - pl.mineCount)).multiply(pl.solutionCount)); + + // this is all the possible ways the mines can be placed across the whole game + totalTally = totalTally.add(mult.multiply(pl.solutionCount)); + + for (Box b: this.boxes) { + BigInteger contribution = mult.multiply(pl.mineBoxCount[b.getUID()]).divide(BigInteger.valueOf(b.getSquares().size())); + + // the 50/50 component doesn't count + //if (pl.solutionCount.compareTo(BigInteger.valueOf(2)) == 0 && pl.mineBoxCount[b.getUID()].compareTo(BigInteger.ONE) == 0 && b.getSquares().size() == 1) { + // contribution = BigInteger.ZERO; + //} + + BigInteger tally = b.getTally().add(contribution); + b.setTally(tally); + + } + + for (int i=0; i < hashTally.length; i++) { + //tally[i] = tally[i].add(mult.multiply(pl.mineBoxCount[i]).divide(BigInteger.valueOf(boxes.get(i).getSquares().size()))); + hashTally[i] = hashTally[i].add(pl.hashCount[i]); + } + } + + } + + logger.log(Level.INFO, "Total Candidate solutions found %d", totalTally); + + for (Box b: this.boxes) { + if (totalTally.signum() != 0) { + if (b.getTally().compareTo(totalTally) == 0) { // a mine + b.setSafety(BigDecimal.ZERO); + for (Square squ: b.getSquares()) { // add the squares in the box to the list of mines + mines.add(squ); + deadLocations = deadLocations.remove(squ); // a definite mine can't be dead + } + } else if (b.getTally().signum() == 0) { // safe + b.setSafety(BigDecimal.ONE); + allDead = false; + //for (Square squ: b.getSquares()) { + // deadLocations = deadLocations.remove(squ); // a safe tile can't be dead + //} + } else { + b.setSafety(BigDecimal.ONE.subtract(new BigDecimal(b.getTally()).divide(new BigDecimal(totalTally), Solver.DP, RoundingMode.HALF_UP))); + } + + } else { + b.setSafety(BigDecimal.ZERO); + } + } + + // avoid divide by zero + if (squaresLeft != 0 && totalTally.signum() != 0) { + offEdgeTally = outsideTally.divide(BigInteger.valueOf(squaresLeft)); + offEdgeSafety = BigDecimal.ONE.subtract(new BigDecimal(outsideTally).divide(new BigDecimal(totalTally), Solver.DP, RoundingMode.HALF_UP).divide(new BigDecimal(squaresLeft), Solver.DP, RoundingMode.HALF_UP)); + } else { + offEdgeSafety = BigDecimal.ZERO; + offEdgeTally = BigInteger.ZERO; + } + + finalSolutionsCount = totalTally; + + // determine how many clear squares there are + if (totalTally.signum() > 0) { + + for (Box b: this.boxes) { + if (b.getTally().signum() == 0) { + clearCount = clearCount + b.getSquares().size(); + + for (Square sq: b.getSquares()) { + if (!deadLocations.contains(sq)) { + livingClearCount++; + } + } + + if (b.getSquares().size() > 0) { + emptyBoxes.add(b); + } + } + } + + } + + // see if we can find a guess which is better than outside the boxes + BigDecimal hwm = offEdgeSafety; + + offEdgeBest = true; + + for (Box b: boxes) { + boolean living = false; + for (Square squ: b.getSquares()) { + if (!deadLocations.contains(squ)) { + living = true; + break; + } + } + //BigDecimal prob = boxProb[b.getUID()]; + BigDecimal prob = b.getSafety(); + + if (living && prob.signum() != 0) { // if living and not a mine + allDead = false; + } + + if (living || prob.compareTo(BigDecimal.ONE) == 0) { // if living or 100% safe then consider this probability + + if (hwm.compareTo(prob) <= 0) { + offEdgeBest = false; + hwm = prob; + } + } + } + + bestProbability = hwm; + + //solver.display("probability off web is " + outsideProb); + + + } + + + private void addLinkedLocation(List list, Box box, Box linkTo) { + + top:for (Square s: box.getSquares()) { + + for (LinkedLocation ll: list) { + if (s.equals(ll)) { + ll.incrementLinks(linkTo.getSquares()); + continue top; + } + } + + list.add(new LinkedLocation(s.x, s.y, linkTo.getSquares())); + } + + } + + private List mergeProbabilities(NextWitness nw) { + + List newProbs = new ArrayList<>(); + + for (ProbabilityLine pl: workingProbs) { + + int missingMines = nw.witness.getMines() - countPlacedMines(pl, nw); + + if (missingMines < 0) { + // too many mines placed around this witness previously, so this probability can't be valid + } else if (missingMines == 0) { + newProbs.add(pl); // witness already exactly satisfied, so nothing to do + } else if (nw.newBoxes.isEmpty()) { + // nowhere to put the new mines, so this probability can't be valid + } else { + newProbs.addAll(distributeMissingMines(pl, nw, missingMines, 0)); + } + + } + + // flag the last set of details as processed + nw.witness.setProcessed(true); + for (Box b: nw.newBoxes) { + b.setProcessed(true); + } + + //boardState.display("Processed witness " + nw.witness.display()); + + //if we haven't compressed yet and we are still a small edge then don't compress + if (newProbs.size() < 100 && canDoDeadTileAnalysis) { + return newProbs; + } + + // about to compress the line + canDoDeadTileAnalysis = false; + + List boundaryBoxes = new ArrayList<>(); + for (Box box: boxes) { + boolean notProcessed = false; + boolean processed = false; + for (Witness wit: box.getWitnesses()) { + if (wit.isProcessed()) { + processed = true; + } else { + notProcessed = true; + } + if (processed && notProcessed) { + //boardState.display("partially processed box " + box.getUID()); + boundaryBoxes.add(box); + break; + } + } + } + //boardState.display("Boxes partially processed " + boundaryBoxes.size()); + + MergeSorter sorter = new MergeSorter(boundaryBoxes); + + newProbs = crunchByMineCount(newProbs, sorter); + + return newProbs; + + } + + // this is used to recursively place the missing Mines into the available boxes for the probability line + private List distributeMissingMines(ProbabilityLine pl, NextWitness nw, int missingMines, int index) { + + recursions++; + if (recursions % 10000 == 0) { + logger.log(Level.WARN, "Probability Engine recursion exceeding %d iterations", recursions); + } + + List result = new ArrayList<>(); + + // if there is only one box left to put the missing mines we have reach this end of this branch of recursion + if (nw.newBoxes.size() - index == 1) { + // if there are too many for this box then the probability can't be valid + if (nw.newBoxes.get(index).getMaxMines() < missingMines) { + return result; + } + // if there are too few for this box then the probability can't be valid + if (nw.newBoxes.get(index).getMinMines() > missingMines) { + return result; + } + // if there are too many for this game then the probability can't be valid + if (pl.mineCount + missingMines > maxTotalMines) { + return result; + } + + // otherwise place the mines in the probability line + + //pl.mineBoxCount[nw.newBoxes.get(index).getUID()] = BigInteger.valueOf(missingMines).multiply(pl.solutionCount); + //pl.mineCount = pl.mineCount + missingMines; + //result.add(pl); + + result.add(extendProbabilityLine(pl, nw.newBoxes.get(index), missingMines, true)); + return result; + } + + + // this is the recursion + int maxToPlace = Math.min(nw.newBoxes.get(index).getMaxMines(), missingMines); + + for (int i=nw.newBoxes.get(index).getMinMines(); i <= maxToPlace; i++) { + ProbabilityLine npl = extendProbabilityLine(pl, nw.newBoxes.get(index), i, false); + + result.addAll(distributeMissingMines(npl, nw, missingMines - i, index + 1)); + } + + return result; + + } + + // create a new probability line by taking the old and adding the mines to the new Box + private ProbabilityLine extendProbabilityLine(ProbabilityLine pl, Box newBox, int mines, boolean reuseLine) { + + int combination = SMALL_COMBINATIONS[newBox.getSquares().size()][mines]; + + ProbabilityLine result; + if (combination == 1 && reuseLine) { + result = pl; + result.mineCount = result.mineCount + mines; + } else { + BigInteger newSolutionCount = pl.solutionCount.multiply(BigInteger.valueOf(combination)); + + result = new ProbabilityLine(newSolutionCount); + + result.mineCount = pl.mineCount + mines; + result.hash = pl.hash; + + // copy the hash values + System.arraycopy(pl.hashCount, 0, result.hashCount, 0, pl.mineBoxCount.length); + + // copy the probability array + if (combination == 1) { + System.arraycopy(pl.mineBoxCount, 0, result.mineBoxCount, 0, pl.mineBoxCount.length); + } else { + BigInteger multiplier = BigInteger.valueOf(combination); + for (int i=0; i < pl.mineBoxCount.length; i++) { + result.mineBoxCount[i] = pl.mineBoxCount[i].multiply(multiplier); + } + } + + result.allocatedMines = pl.allocatedMines.clone(); + } + + + result.mineBoxCount[newBox.getUID()] = BigInteger.valueOf(mines).multiply(result.solutionCount); + result.allocatedMines[newBox.getUID()] = mines; + + if (mines == 0) { + result.hashCount[newBox.getUID()] = result.hash.negate(); // treat no mines as -1 rather than zero + } else { + result.hashCount[newBox.getUID()] = BigInteger.valueOf(mines).multiply(result.hash); + } + + return result; + } + + /* + // counts the number of mines already placed + private int countPlacedMines(ProbabilityLine pl, NextWitness nw) { + + int result = 0; + + for (Box b: nw.oldBoxes) { + result = result + pl.mineBoxCount[b.getUID()].intValue(); + } + + return result; + } + */ + + // counts the number of mines already placed + private int countPlacedMines(ProbabilityLine pl, NextWitness nw) { + + BigInteger result = BigInteger.ZERO; + + for (Box b: nw.oldBoxes) { + result = result.add(pl.mineBoxCount[b.getUID()]); + } + + BigInteger[] divide = result.divideAndRemainder(pl.solutionCount); + if (divide[1].signum() != 0) { + logger.log(Level.WARN, "Min Box Count divide has non-zero remainder &d", divide[1]); + } + + + return divide[0].intValue(); + } + + // return any witness which hasn't been processed + private NextWitness findFirstWitness() { + + for (Witness w: witnesses) { + if (!w.isProcessed()) { + return new NextWitness(w); + } + } + + // if we are here all witness have been processed + return null; + + } + + + // look for the next witness to process + private NextWitness findNextWitness(NextWitness prevWitness) { + + int bestTodo = 99999; + Witness bestWitness = null; + + // and find a witness which is on the boundary of what has already been processed + for (Box b: boxes) { + if (b.isProcessed()) { + for (Witness w: b.getWitnesses()) { + if (!w.isProcessed()) { + int todo = 0; + for (Box b1: w.getBoxes()) { + if (!b1.isProcessed()) { + todo++; + } + } + if (todo == 0) { + return new NextWitness(w); + } else if (todo < bestTodo) { + bestTodo = todo; + bestWitness = w; + } + } + } + } + } + + if (bestWitness != null) { + return new NextWitness(bestWitness); + } + + // if we are down here then there is no witness which is on the boundary, so we have processed a complete set of independent witnesses + + independentGroups++; + + // since we have calculated all the mines in an independent set of witnesses we can crunch them down and store them for later + + // before we crunch everything down check for dead tiles + if (CHECK_FOR_DEAD_LOCATIONS) { + checkCandidateDeadLocations(canDoDeadTileAnalysis); + //checkEdgeIsDead(); + } + + // if we haven't compressed yet then do it now + if (canDoDeadTileAnalysis) { + MergeSorter sorter = new MergeSorter(); + workingProbs = crunchByMineCount(workingProbs, sorter); + } else { + canDoDeadTileAnalysis = true; + } + + /* + // display the probability lines + for (ProbabilityLine pl: workingProbs) { + + String display = "Mines=" + pl.mineCount + " Weight=" + pl.solutionCount; + for (int i=0; i < pl.allocatedMines.length; i++) { + //display = display + " " + boxes.get(i).getSquares().size() + "(" + pl.allocatedMines[i] + ") "; + + String show; + if (this.mask[i]) { + show = pl.mineBoxCount[i].toString(); + } else { + show = "-"; + } + + display = display + " " + boxes.get(i).getSquares().size() + "(" + show + ") "; + + } + + boardState.getLogger().log(Level.INFO, display); + + } + */ + + // get an unprocessed witness + NextWitness nw = findFirstWitness(); + + storeProbabilities(); + + // reset the working array so we can start building up one for the new set of witnesses + workingProbs.clear(); + workingProbs.add(new ProbabilityLine(BigInteger.ONE)); + + + // count how many tiles where on this edge + int totalTiles = 0; + for (int i=0; i < mask.length; i++) { + if (mask[i]) { + Box b = this.boxes.get(i); + totalTiles = totalTiles + b.getSquares().size(); + } + } + // and store that information in the box + for (int i=0; i < mask.length; i++) { + if (mask[i]) { + Box b = this.boxes.get(i); + b.setEdgeLength(totalTiles); + } + } + + // reset the mask indicating that no boxes have been processed + mask = new boolean[boxCount]; + + // return the next witness to process + return nw; + + } + + public BigDecimal getProbability(Location l) { + + for (Box b: boxes) { + if (b.contains(l)) { + //return boxProb[b.getUID()]; + return b.getSafety(); + } + } + + return offEdgeSafety; + } + + /** + * The probability of a mine being in a square not considered by this process + */ + protected BigDecimal getOffEdgeProb() { + return offEdgeSafety; + } + + /** + * The number of solutions where an off edge tile is a mine + */ + protected BigInteger getOffEdgeTally() { + return offEdgeTally; + } + + /** + * The probability of the safest witnessed tile + * @return + */ + protected BigDecimal getBestOnEdgeProb() { + return bestProbability; + } + + + protected boolean isBestGuessOffEdge() { + return this.offEdgeBest; + } + + /** + * true if a 100% certain move has been found + * @return + */ + protected boolean foundCertainty() { + return (bestProbability.compareTo(BigDecimal.ONE) == 0); + } + + + @Override + protected List getBestCandidates(BigDecimal freshhold, boolean excludeDead) { + + List best = new ArrayList<>(); + + //solver.display("Squares left " + this.squaresLeft + " squares analysed " + web.getSquares().size()); + + // if the outside probability is the best then return an empty list + BigDecimal test; + //if (offEdgeBest) { + // solver.display("Best probability is off the edge " + bestProbability + " but will look for options on the edge only slightly worse"); + // //test = bestProbability.multiply(Solver.EDGE_TOLERENCE); + // test = bestProbability.multiply(freshhold); + //} else + + if (bestProbability.compareTo(BigDecimal.ONE) == 0){ // if we have a probability of one then don't allow lesser probs to get a look in + test = bestProbability; + } else { + test = bestProbability.multiply(freshhold); + } + + logger.log(Level.INFO, "Best probability is %f, cutoff freshhold is %f", bestProbability, test); + + /* + for (int i=0; i < boxProb.length; i++) { + if (boxProb[i].compareTo(test) >= 0 ) { + for (Square squ: boxes.get(i).getSquares()) { + boolean isDead = deadLocations.contains(squ); + if (!isDead || !excludeDead || boxProb[i].compareTo(BigDecimal.ONE) == 0) { // if not a dead location or 100% safe then use it + best.add(new CandidateLocation(squ.x, squ.y, boxProb[i], boardState.countAdjacentUnrevealed(squ), boardState.countAdjacentConfirmedFlags(squ), isDead, this.boxes.get(i).doDeferGuessing())); + } else { + logger.log(Level.INFO, "Candidate Location %s is ignored because it is dead", squ); + } + } + } + } + */ + + for (Box b: this.boxes) { + if (b.getSafety().compareTo(test) >= 0 ) { + for (Square squ: b.getSquares()) { + boolean isDead = deadLocations.contains(squ); + if (!isDead || !excludeDead || b.getSafety().compareTo(BigDecimal.ONE) == 0) { // if not a dead location or 100% safe then use it + best.add(new CandidateLocation(squ.x, squ.y, b.getSafety(), boardState.countAdjacentUnrevealed(squ), boardState.countAdjacentConfirmedFlags(squ), isDead, b.doDeferGuessing())); + } else { + logger.log(Level.INFO, "Candidate Location %s is ignored because it is dead", squ); + } + } + } + } + + // sort in to best order + best.sort(CandidateLocation.SORT_BY_PROB_FLAG_FREE); + + return best; + + } + + @Override + protected BigDecimal getBestNotDeadSafety() { + + // see if we can do better than off edge + BigDecimal safest = this.offEdgeSafety; + + for (Box b: this.boxes) { + if (b.getSafety().compareTo(safest) > 0 ) { + for (Square squ: b.getSquares()) { + boolean isDead = deadLocations.contains(squ); + if (!isDead) { // if not a dead location then use it + safest = b.getSafety(); + } else { + //logger.log(Level.INFO, "Candidate Location %s is ignored because it is dead", squ); + } + } + } + } + + + return safest; + + } + + /** + * Return locations which are exactly 50% chance of being a mine + */ + @Override + protected List getFiftyPercenters() { + + List picks = new ArrayList<>(); + + BigDecimal test = new BigDecimal("0.5"); + + for (Box b: this.boxes) { + if (b.getSafety().compareTo(test) == 0 ) { + for (Square squ: b.getSquares()) { + picks.add(squ); + } + } + } + + return picks; + + } + + @Override + /** + * Return locations which are within the threshold of being a mine + */ + protected List getProbableMines(BigDecimal freshhold) { + + List best = new ArrayList<>(); + + // if the outside probability is the best then return an empty list + BigDecimal test = BigDecimal.ONE.subtract(freshhold); + + /* + for (int i=0; i < boxProb.length; i++) { + if (boxProb[i].signum() != 0 && boxProb[i].compareTo(test) <= 0 ) { + for (Square squ: boxes.get(i).getSquares()) { + boolean isDead = deadLocations.contains(squ); + best.add(new CandidateLocation(squ.x, squ.y, boxProb[i], boardState.countAdjacentUnrevealed(squ), boardState.countAdjacentConfirmedFlags(squ), isDead, this.boxes.get(i).doDeferGuessing())); + } + } + } + */ + + for (Box b: this.boxes) { + if (b.getSafety().signum() != 0 && b.getSafety().compareTo(test) <= 0 ) { + for (Square squ: b.getSquares()) { + boolean isDead = deadLocations.contains(squ); + best.add(new CandidateLocation(squ.x, squ.y, b.getSafety(), boardState.countAdjacentUnrevealed(squ), boardState.countAdjacentConfirmedFlags(squ), isDead, b.doDeferGuessing())); + } + } + } + + // sort in to best order + best.sort(CandidateLocation.SORT_BY_PROB_FLAG_FREE); + + logger.log(Level.INFO, "There are %d tiles with a chance of being a mine >= %f", best.size(), freshhold); + + return best; + + } + + + private void checkCandidateDeadLocations(boolean checkPossible) { + + boolean completeScan; + if (squaresLeft == 0) { + completeScan = true; // this indicates that every box has been considered in one sweep (only 1 independent edge) + for (int i=0; i < mask.length; i++) { + if (!mask[i]) { + completeScan = false; + break; + } + } + if (completeScan) { + logger.log(Level.DEBUG, "This is a complete scan"); + } else { + logger.log(Level.DEBUG, "This is not a complete scan"); + } + } else { + completeScan = false; + logger.log(Level.DEBUG, "This is not a complete scan because there are squares off the edge"); + } + + + for (DeadCandidate dc: deadCandidates) { + + if (dc.isAlive) { // if this location isn't dead then no need to check any more + continue; + } + + // only do the check if all the boxes have been analysed in this probability iteration + int boxesInScope = 0; + for (Box b: dc.goodBoxes) { + if (mask[b.getUID()]) { + boxesInScope++; + } + } + for (Box b: dc.badBoxes) { + if (mask[b.getUID()]) { + boxesInScope++; + } + } + if (boxesInScope == 0) { + continue; + } else if (boxesInScope != dc.goodBoxes.size() + dc.badBoxes.size()) { + logger.log(Level.DEBUG, "Tile %s has some boxes in scope and some out of scope so assumed alive", dc.candidate); + dc.isAlive = true; + continue; + } + + //if we can't do the check because the edge has been compressed mid process then assume alive + if (!checkPossible) { + logger.log(Level.DEBUG, "Tile %s was on compressed edge so assumed alive", dc.candidate); + dc.isAlive = true; + continue; + } + + boolean okay = true; + int mineCount = 0; + line: for (ProbabilityLine pl: workingProbs) { + + // ignore probability lines where the candidate is a mine + //if (pl.mineBoxCount[dc.myBox.getUID()].compareTo(BigInteger.valueOf(dc.myBox.getSquares().size())) == 0) { + if (pl.allocatedMines[dc.myBox.getUID()] == dc.myBox.getSquares().size()) { + logger.log(Level.DEBUG, "Location %s is a mine on this Probability line %d", dc.candidate, pl.allocatedMines[dc.myBox.getUID()]); + mineCount++; + continue line; + } else { + logger.log(Level.DEBUG, "Location %s is not a mine on this Probability line %d", dc.candidate, pl.allocatedMines[dc.myBox.getUID()]); + } + + if (completeScan && pl.mineCount != minesLeft) { + continue; + } + + // all the bad boxes must be zero + for (Box b: dc.badBoxes) { + + BigInteger requiredMines; + //int requiredMines; + if (b.getUID() == dc.myBox.getUID()) { + requiredMines = BigInteger.valueOf(b.getSquares().size() - 1).multiply(pl.solutionCount); + } else { + requiredMines = BigInteger.valueOf(b.getSquares().size()).multiply(pl.solutionCount); + } + + if (pl.mineBoxCount[b.getUID()].signum() != 0 && pl.mineBoxCount[b.getUID()].compareTo(requiredMines) != 0) { + logger.log(Level.DEBUG, "Tile %s is not dead because a bad box is neither empty nor full of mines", dc.candidate); + okay = false; + break line; + } + } + + //BigInteger tally = BigInteger.ZERO; + int tally = 0; + // the number of mines in the good boxes must always be the same + for (Box b: dc.goodBoxes) { + //tally = tally.add(pl.mineBoxCount[b.getUID()]); + tally = tally + pl.allocatedMines[b.getUID()]; + } + //boardState.display("Location " + dc.candidate.display() + " has mine tally " + tally); + if (dc.firstCheck) { + dc.total = tally; + dc.firstCheck = false; + } else { + if (dc.total != tally) { + logger.log(Level.DEBUG, "Tile %s is not dead because the sum of mines in good boxes is not constant. Was %d now %d. Mines in probability line %d", dc.candidate, dc.total, tally, pl.mineCount); + okay = false; + break; + } + } + } + + // if a check failed or this tile is a mine for every solution then it is alive + if (!okay || mineCount == this.workingProbs.size()) { + dc.isAlive = true; + } else { + // add the dead locations we found + deadLocations = deadLocations.add(dc.candidate); + //logger.log(Level.INFO, "%s is dead", dc.candidate); + } + + } + + } + + /* + // an edge is dead if every tile on the edge is dead + private boolean checkEdgeIsDead() { + + // For each box on this edge check each of the tiles in it, if any are alive then the edge is alive + for (int i = 0; i < this.mask.length; i++) { + if (this.mask[i]) { + for (Square tile: boxes.get(i).getSquares()) { + if (!deadLocations.contains(tile)) { + return false; + } + } + } + } + + boardState.display("The following area is dead - all guesses in the area are equal"); + for (int i = 0; i < this.mask.length; i++) { + if (this.mask[i]) { + for (Square tile: boxes.get(i).getSquares()) { + boardState.display("Location " + tile.display()); + boardState.addIsolatedDeadTile(tile); + } + } + } + + return true; + } + */ + + // an edge is isolated if every tile on it is completely surrounded by boxes also on the same edge + // (we have already established this area has a fixed number of mines) + private boolean checkEdgeIsIsolated(boolean equalMines) { + + Set edgeTiles = new HashSet<>(); + Set edgeWitnesses = new HashSet<>(); + + boolean everything = true; + + // load each tile on this edge into a set + for (int i = 0; i < this.mask.length; i++) { + if (this.mask[i]) { + edgeTiles.addAll(boxes.get(i).getSquares()); + edgeWitnesses.addAll(boxes.get(i).getWitnesses()); + } else { + everything = false; + } + } + + // if this edge is everything then it isn't an isolated edge - this is wrong because it doesn't allow for off edge tiles + //if (everything) { + // logger.log(Level.DEBUG, "Not enclosed because the edge is everything"); + // return false; + //} + + + // check whether every tile adjacent to the tiles on the edge is itself on the edge + for (int i = 0; i < this.mask.length; i++) { + if (this.mask[i]) { + for (Square tile: boxes.get(i).getSquares()) { + if (!edgeTiles.containsAll(boardState.getAdjacentUnrevealedSquares(tile))) { + logger.log(Level.DEBUG, "Not enclosed because a tile's adjacent tiles isn't on the edge: %s", tile); + return false; + } + } + } + } + + if (equalMines) { + logger.log(Level.INFO, "Enclosed Edge with equal mines found"); + } else { + logger.log(Level.INFO, "Enclosed Edge with unequal mines found"); + return true; + } + + // an enclosed edge with a known number of mines can be solved independently from the main board + + List tiles = new ArrayList<>(edgeTiles); + List witnesses = new ArrayList<>(edgeWitnesses); + int mines = workingProbs.get(0).mineCount; + + // build a web of the isolated edge and use it to build a brute force + WitnessWeb isolatedEdge = new WitnessWeb(boardState, witnesses, tiles); + BruteForce bruteForce = new BruteForce(boardState.getSolver(), boardState, isolatedEdge, mines, boardState.getSolver().preferences.getBruteForceMaxIterations(), + boardState.getSolver().preferences.getBruteForceMaxSolutions(), "Isolated Edge"); + + isolatedEdges.add(bruteForce); + + return true; + } + + private void determineCandidateDeadLocations() { + + // for each square on the edge + for (Square loc: web.getSquares()) { + + List boxes = getAdjacentBoxes(loc); + + if (boxes == null) { // this happens when the square isn't fully surrounded by boxes + continue; + } + + DeadCandidate dc = new DeadCandidate(); + dc.candidate = loc; + dc.myBox = getBox(loc); + + for (Box box: boxes) { + + boolean good = true; + for (Square square: box.getSquares()) { + if (!square.isAdjacent(loc) && !square.equals(loc)) { + good = false; + break; + } + } + if (good) { + dc.goodBoxes.add(box); // a good adjacent box is where all its Tiles are adjacent to the candidate + } else { + dc.badBoxes.add(box); // otherwise it is a bad box + } + + } + + // if the tile has no boxes adjacent to it then it is already dead (i.e. surrounded by mines and witnesses only) + //if (boardState.getSolver().isTestMode() && dc.goodBoxes.isEmpty() && dc.badBoxes.isEmpty()) { + if (dc.goodBoxes.isEmpty() && dc.badBoxes.isEmpty()) { + // add the dead locations we found + //Set newDead = new HashSet<>(); + //newDead.add(dc.candidate); + deadLocations = deadLocations.add(dc.candidate); + //logger.log(Level.INFO, "Tile %s is dead since it is isolated", dc.candidate); + } else { + deadCandidates.add(dc); + } + + } + + for (DeadCandidate dc: deadCandidates) { + logger.log(Level.DEBUG, "%s is candidate dead with %d good boxes and %d bad boxes", dc.candidate, dc.goodBoxes.size(), dc.badBoxes.size()); + } + + } + + @Override + Box getBox(Location l) { + + for (Box b: boxes) { + if (b.contains(l)) { + return b; + } + } + + return null; + } + + private List getAdjacentBoxes(Location loc) { + + List result = new ArrayList<>(); + + //int sizeOfBoxes = 0; + + // get each adjacent location + for (Location adjLoc: boardState.getAdjacentUnrevealedSquares(loc)) { + + // find the box it is in + boolean boxFound = false; + for (Box box: web.getBoxes()) { + if (box.contains(adjLoc)) { + boxFound = true; + // is the box already included? + boolean found = false; + for (Box oldBox: result) { + if (box.getUID() == oldBox.getUID()) { + found = true; + break; + } + } + // if not add it + if (!found) { + result.add(box); + //sizeOfBoxes = box.getSquares().size(); + } + } + } + + // if a box can't be found for the adjacent square then the location can't be dead + if (!boxFound) { + return null; + } + + } + + // if the area in the boxes does not agree with the area around the target location then the boxes overspill the area + //if (boardState.countAdjacentUnrevealed(loc) != sizeOfBoxes) { + // return null; + //} + + + return result; + + } + + + /** + * The number of ways the mines can be placed in the game position + * @return + */ + protected BigInteger getSolutionCount() { + return finalSolutionsCount; + } + + /** + * The number of locations which are definitely clears + * @return + */ + protected int getClearCount() { + return clearCount; + } + + /** + * The number of locations which are definitely clears and also living + * @return + */ + @Override + protected int getLivingClearCount() { + return livingClearCount; + } + + /** + * The boxes which contain no mines + * @return + */ + @Override + protected List getEmptyBoxes() { + return emptyBoxes; + } + + /** + * The duration to do the processing in milliseconds + * @return + */ + protected long getDuration() { + return this.duration; + } + + /** + * How many independent groups we encountered in the processing + * @return + */ + protected long getIndependentGroups() { + return this.independentGroups; + } + + protected List getLinkedLocations() { + return this.linkedLocations; + } + + // get the dead locations provided to the probability engine with any new ones dicovered + protected Area getDeadLocations() { + return this.deadLocations; + } + + // Are all the tiles on the perimeter dead + protected boolean allDead() { + return this.allDead; + } + + // returns the number of additional mines surrounding this location + protected int getDeadValueDelta(Location l) { + + for (DeadCandidate dc: deadCandidates) { + if (dc.candidate.equals(l)) { + if (!dc.isAlive) { + return dc.total; + } else { + logger.log(Level.WARN, "Request for Tile %s Dead value delta but it isn't dead!", l); + return 0; + } + } + } + + logger.log(Level.WARN, "Request for Tile %s Dead value delta but isn't dead", l); + return 0; + } + + protected List getIsolatedEdges() { + return isolatedEdges; + } + + /** + * If this tile is a linked Location return the number of links it has, otherwise return 0 + * @param tile + * @return + */ + protected LinkedLocation getLinkedLocation(Location tile) { + for (LinkedLocation ll: linkedLocations) { + if (ll.equals(tile)) { + return ll; + } + } + + return null; + + } + + /** + * Returns a list of the locations of certain mines + */ + protected List getMines() { + return this.mines; + } + + protected List getContraLinkedLocations() { + return this.contraLinkedLocations; + } + + protected Map getValidMineCounts() { + return mineCounts; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineModel.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineModel.java new file mode 100644 index 0000000..4b5c49c --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProbabilityEngineModel.java @@ -0,0 +1,42 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.List; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.LinkedLocation; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +abstract public class ProbabilityEngineModel { + + abstract public void process(); + + abstract protected long getDuration(); + abstract protected long getIndependentGroups(); + abstract Box getBox(Location l); + abstract public BigDecimal getProbability(Location l); + abstract protected List getBestCandidates(BigDecimal freshhold, boolean excludeDead); + abstract protected List getProbableMines(BigDecimal freshhold); + abstract protected List getFiftyPercenters(); + abstract protected BigInteger getSolutionCount(); + abstract protected BigDecimal getBestOnEdgeProb(); + abstract protected BigDecimal getOffEdgeProb(); + abstract protected BigInteger getOffEdgeTally(); + abstract protected boolean foundCertainty(); + abstract protected Area getDeadLocations(); + abstract boolean allDead(); + abstract protected int getDeadValueDelta(Location l); + abstract protected List getMines(); + abstract protected List getLinkedLocations(); + abstract protected LinkedLocation getLinkedLocation(Location tile); + abstract protected List getIsolatedEdges(); + abstract protected boolean isBestGuessOffEdge(); + abstract protected int getLivingClearCount(); + abstract protected List getEmptyBoxes(); + + abstract protected BigDecimal getBestNotDeadSafety(); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProgressEvaluator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProgressEvaluator.java new file mode 100644 index 0000000..2b38f12 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/ProgressEvaluator.java @@ -0,0 +1,535 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.EvaluatedLocation; +import minesweeper.solver.constructs.LinkedLocation; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class ProgressEvaluator implements LocationEvaluator { + + //private final static Comparator SORT_ORDER = EvaluatedLocation.SORT_BY_PROGRESS_PROBABILITY; // this works well + private final static Comparator SORT_ORDER = EvaluatedLocation.SORT_BY_WEIGHT; // trying this + //private final static Comparator SORT_ORDER = EvaluatedLocation.SORT_BY_FIXED_CLEARS_PROGRESS; // trying this + + private final static int[][] OFFSETS = {{2, 0}, {-2, 0}, {0, 2}, {0, -2}}; + + private final static int[][] OFFSETS_ALL = {{2,-2}, {2,-1}, {2,0}, {2,1}, {2,2}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-1,2}, {0,2}, {1,2}, {-1,-2}, {0,-2}, {1,-2}}; + + private final BoardState boardState; + private final WitnessWeb wholeEdge; + private final ProbabilityEngineModel pe; + private final Solver solver; + + private final Set tileOfInterest = new HashSet<>(); + + private List evaluated = new ArrayList<>(); + private EvaluatedLocation best; + private boolean certainProgress = false; + + public ProgressEvaluator(Solver solver, BoardState boardState, WitnessWeb wholeEdge, ProbabilityEngineModel pe) { + + this.boardState = boardState; + this.wholeEdge = wholeEdge; + this.pe = pe; + this.solver = solver; + + } + + /** + * Look for off edge positions which are good for breaking open new areas + */ + public void evaluateOffEdgeCandidates(List allUnrevealedSquares) { + + //int minesLeft = boardState.getMines() - boardState.getConfirmedFlagCount(); + // || allUnrevealedSquares.size() - minesLeft < 6 + + // if there are only a small number of tiles off the edge then consider them all + if (allUnrevealedSquares.size() - wholeEdge.getSquares().size() < 30) { + for (Location tile: allUnrevealedSquares) { + if (!wholeEdge.isOnWeb(tile)) { + tileOfInterest.add(new CandidateLocation(tile.x, tile.y, pe.getOffEdgeProb(), 0, 0)); + } + } + //evaluateLocations(tileOfInterest); + return; + } + + int[][] offsets; + if (boardState.isHighDensity()) { + offsets = OFFSETS_ALL; + } else { + offsets = OFFSETS; + } + + // look for potential super locations + for (Location tile: wholeEdge.getOriginalWitnesses()) { + + //boardState.display(tile.display() + " is an original witness"); + + for (int[] offset: offsets) { + + int x1 = tile.x + offset[0]; + int y1 = tile.y + offset[1]; + if ( x1 >= 0 && x1 < boardState.getGameWidth() && y1 >= 0 && y1 < boardState.getGameHeight()) { + + CandidateLocation loc = new CandidateLocation(x1, y1, pe.getOffEdgeProb(), 0, 0); + if (boardState.isUnrevealed(loc) && !wholeEdge.isOnWeb(loc)) { // if the location is un-revealed and not on the edge + //boardState.display(loc.display() + " is of interest"); + tileOfInterest.add(loc); + } + + } + } + } + + + + // look for potential off edge squares with not many neighbours and calculate their probability of having no more flags around them + for (Location tile: allUnrevealedSquares) { + + int adjMines = boardState.countAdjacentConfirmedFlags(tile); + int adjUnrevealed = boardState.countAdjacentUnrevealed(tile); + + if ( adjUnrevealed > 1 && adjUnrevealed < 4 && !wholeEdge.isOnWeb(tile) && !tileOfInterest.contains(tile)) { + + tileOfInterest.add(new CandidateLocation(tile.x, tile.y, pe.getOffEdgeProb(), 0, 0)); + + } + + } + + //evaluateLocations(tileOfInterest); + + } + + @Override + public void addLocations(Collection tiles) { + tileOfInterest.addAll(tiles); + + } + + + /** + * Evaluate a set of tiles to see the expected number of clears it will provide + */ + public void evaluateLocations() { + + for (Location tile: tileOfInterest) { + evaluateLocation(tile); + } + + } + + /** + * Evaluate a tile to see the expected number of clears it will provide + */ + public void evaluateLocation(Location tile) { + + //if (best != null & !this.solver.preferences.isExperimentalScoring()) { + // if (tile.getProbability().multiply(Solver.PROGRESS_MULTIPLIER).compareTo(best.getWeighting()) <= 0) { + // boardState.getLogger().log(Level.INFO, "%s is ignored because it can not do better than the best", tile); + // return; + // } + //} + + //EvaluatedLocation evalTile = doEvaluateTile(tile); + EvaluatedLocation evalTile = doFullEvaluateTile(tile); + + + if (evalTile != null) { + if (best == null || evalTile.getWeighting().compareTo(best.getWeighting()) > 0) { + best = evalTile; + } + evaluated.add(evalTile); + } + } + + /** + * Evaluate this tile and return its EvaluatedLocation + */ + /* + private EvaluatedLocation doEvaluateTile(Location tile) { + + //long nanoStart = System.nanoTime(); + //boardState.display(tile.display() + " is of interest as a superset"); + + EvaluatedLocation result = null; + + List superset = boardState.getAdjacentUnrevealedSquares(tile); + int minesGot = boardState.countAdjacentConfirmedFlags(tile); + + //boardState.display("----"); + + int minMines = minesGot; + int hits = 0; + + for (Location loc: boardState.getAdjacentSquaresIterable(tile, 2)) { + + if (boardState.isRevealed(loc) && boardState.countAdjacentUnrevealed(loc) != 0) { // if the location is revealed then see if we are a super set of it + + boolean supersetOkay = true; + //boolean subSetIncludesMe = false; // does the subset contain the Tile we are considering + for (Location adj: boardState.getAdjacentSquaresIterable(loc)) { + if (boardState.isUnrevealed(adj)) { + boolean found = false; + + if (adj.equals(tile)) { // if the subset contains me that's okay + found = true; + //subSetIncludesMe = true; + + } else { // otherwise check the superset + for (Location test: superset) { + if (adj.equals(test)) { + found = true; + break; + } + } + } + if (!found) { + supersetOkay = false; + break; + } + } + } + if (supersetOkay) { + int minesNeeded = boardState.getWitnessValue(loc) - boardState.countAdjacentConfirmedFlags(loc); + int value = minesNeeded + minesGot; + //boardState.display(tile.display() + " is a superset of " + loc.display() + " value " + value); + hits++; + if (minMines < value) { + minMines = value; + } + } + + } + } + + // if we aren't a superset square then just see what the chances that this square is already fully satisfied. + if (hits == 0) { + boardState.display(tile.display() + " is not a superset"); + hits = 1; + } else { + boardState.display(tile.display() + " is a superset " + hits + " times"); + } + + int maxMines = Math.min(minMines + hits - 1, minesGot + superset.size()); + + BigDecimal probThisTile = pe.getProbability(tile); + LinkedLocation linkedLocation = pe.getLinkedLocation(tile); + int linkedTiles; + if (linkedLocation != null) { + linkedTiles = linkedLocation.getLinksCount(); + } else { + linkedTiles = 0; + } + + + // work out the expected number of clears if we clear here to start with (i.e. ourself + any linked clears) + //BigDecimal expectedClears = BigDecimal.valueOf(1 + linkedTiles).multiply(probThisTile); + //BigDecimal expectedClears = BigDecimal.ZERO; + BigDecimal expectedClears = probThisTile; + + //boardState.display(tile.display() + " has " + linkedTiles + " linked tiles"); + + BigDecimal progressProb = BigDecimal.ZERO; + + boolean found = false; + + for (int i = minMines; i < maxMines + 1; i++) { + //int clears = solver.validateLocationUsingLocalCheck(tile, i); + //if (clears > 0) { + + SolutionCounter counter = solver.validateLocationUsingSolutionCounter(wholeEdge, tile, i, pe.getDeadLocations()); + BigInteger sol = counter.getSolutionCount(); + int clears = counter.getClearCount(); + + if (sol.signum() != 0 && clears > linkedTiles) { + //if (sol.signum() != 0) { + + found = true; + BigDecimal prob = new BigDecimal(sol).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + boardState.display(tile.display() + " with value " + i + " has " + clears + " clears with probability " + prob.toPlainString()); + + // expected clears is the sum of the number of mines cleared * the probability of clearing them + expectedClears = expectedClears.add(BigDecimal.valueOf(clears - linkedTiles).multiply(prob)); + + progressProb = progressProb.add(prob); + } else { + if (sol.signum() == 0) { + boardState.display(tile.display() + " with value " + i + " with probability zero"); + if (!found && i == maxMines && maxMines != 8) { // if we haven't found a possible match yet keep going + maxMines++; + } + } else { + found = true; + boardState.display(tile.display() + " with value " + i + " only has linked clears"); + } + + } + + //} else { + // boardState.display(tile.display() + " with value " + i + " fails local check"); + //} + } + + //if (linkedTiles > 0) { + // progressProb = probThisTile; + //} + + + + //if (expectedClears.compareTo(BigDecimal.ZERO) > 0) { + result = new EvaluatedLocation(tile.x, tile.y, probThisTile, progressProb, expectedClears, linkedTiles, null, BigDecimal.ZERO, this.solver.preferences.isExperimentalScoring()); + + if (linkedLocation != null) { + boardState.display("Considering with " + linkedLocation.getLinkedLocations().size() + " linked locations"); + top: for (Location link: linkedLocation.getLinkedLocations()) { + boardState.display("Linked with " + link.display()); + for (EvaluatedLocation e: evaluated) { + if (e.equals(link)) { + boardState.display("Found link in evaluated" + link.display()); + e.merge(result); + result = null; + break top; + } + } + } + } + //} + + //long nanoEnd = System.nanoTime(); + + //boardState.display("Duration = " + (nanoEnd - nanoStart) + " nano-seconds"); + + return result; + + } + */ + + /** + * Evaluate this tile and return its EvaluatedLocation + */ + private EvaluatedLocation doFullEvaluateTile(Location tile) { + + long nanoStart = System.nanoTime(); + //boardState.display(tile.display() + " is of interest as a superset"); + + EvaluatedLocation result = null; + + List superset = boardState.getAdjacentUnrevealedSquares(tile); + int minesGot = boardState.countAdjacentConfirmedFlags(tile); + + //boardState.display("----"); + + int minMines = minesGot; + int maxMines = minesGot + superset.size(); + + BigDecimal probThisTile = pe.getProbability(tile); + + // work out the expected number of clears if we clear here to start with (i.e. ourself + any linked clears) + //BigDecimal expectedClears = BigDecimal.valueOf(1 + linkedTiles).multiply(probThisTile); + //BigDecimal expectedClears = BigDecimal.ZERO; + + //TODO is this correct? + BigDecimal expectedClears = probThisTile; + + BigDecimal maxValueProgress = BigDecimal.ZERO; + BigDecimal progressProb = BigDecimal.ZERO; + + Area deadLocations = pe.getDeadLocations(); + + BigDecimal probThisTileLeft = probThisTile; + + List commonClears = null; + for (int i = minMines; i <= maxMines; i++) { + + // calculate the weight + BigDecimal bonus = BigDecimal.ONE.add(progressProb.add(probThisTileLeft).multiply(Solver.PROGRESS_VALUE)); + BigDecimal weight = probThisTile.multiply(bonus); + + // if the remaining safe component for the tile can now never reach the best if if 100% safe for all future values then abandon analysis + if (best != null && weight.compareTo(best.getWeighting()) < 0) { + result = new EvaluatedLocation(tile.x, tile.y, probThisTile, weight, expectedClears, 0, commonClears, maxValueProgress); + result.setPruned(); + return result; + } + + SolutionCounter counter = solver.validateLocationUsingSolutionCounter(wholeEdge, tile, i, deadLocations); + + BigInteger sol = counter.getSolutionCount(); + int clears = counter.getLivingClearCount(); + + // keep track of the maximum probability across all valid values + if (sol.signum() != 0) { + + if (commonClears == null) { + commonClears = counter.getEmptyBoxes(); + } else { + commonClears = mergeEmptyBoxes(commonClears, counter.getEmptyBoxes()); + } + + BigDecimal prob = new BigDecimal(sol).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + + maxValueProgress = maxValueProgress.max(prob); // mini-max + //maxValueProgress = maxValueProgress.add(prob.multiply(prob)); // sum of prob^2 = expected solution space left + + boardState.getLogger().log(Level.INFO, "%s with value %d has %d living clears with probability %f", tile, i, clears, prob); + + // expected clears is the sum of the number of mines cleared * the probability of clearing them + expectedClears = expectedClears.add(BigDecimal.valueOf(clears).multiply(prob)); + + if (clears != 0) { + progressProb = progressProb.add(prob); + } + + // reduce the remaining safe probability + probThisTileLeft = probThisTileLeft.subtract(prob); + + } else { + boardState.getLogger().log(Level.INFO, "Tile %s with value %d is not valid", tile, i); + } + + } + + if (!commonClears.isEmpty()) { + solver.logger.log(Level.DEBUG, "%s has certain progress if survive", tile); + certainProgress = true; + } + + // calculate the weight + BigDecimal bonus = BigDecimal.ONE.add(progressProb.multiply(Solver.PROGRESS_VALUE)); + BigDecimal weighting = probThisTile.multiply(bonus); + + result = new EvaluatedLocation(tile.x, tile.y, probThisTile, weighting, expectedClears, 0, commonClears, maxValueProgress); + + long nanoEnd = System.nanoTime(); + + solver.logger.log(Level.DEBUG, "Duration %d nano-seconds", (nanoEnd - nanoStart)); + + return result; + + } + + public void showResults() { + + evaluated.sort(SORT_ORDER); + + solver.logger.log(Level.INFO, "--- evaluated locations ---"); + for (EvaluatedLocation el: evaluated) { + solver.logger.log(Level.INFO, "%s", el); + } + + } + + private List mergeEmptyBoxes(List boxes1, List boxes2) { + + if (boxes1.size() == 0) { + return boxes1; + } + + if (boxes2.size() == 0) { + return boxes2; + } + + List result = new ArrayList<>(); + for (Box b1: boxes1) { + for (Box b2: boxes2) { + if (b1.equals(b2)) { + result.add(b1); + break; + } + } + } + + return result; + } + + + // find a move which 1) is safer than the move given and 2) when move is safe ==> the alternative is safe + private EvaluatedLocation findAlternativeMove(EvaluatedLocation move) { + + if (move.getEmptyBoxes() == null) { + return null; + } + + // if one of the common boxes contains a tile which has already been processed then the current tile is redundant + for (EvaluatedLocation eval: evaluated) { + if (eval.getProbability().subtract(move.getProbability()).compareTo(BigDecimal.valueOf(0.001d)) > 0) { // the alternative move is at least a bit safer than the current move + for (Box b: move.getEmptyBoxes()) { // see if the move is in the list of empty boxes + for (Location l: b.getSquares()) { + if (l.equals(eval)) { + return eval; + } + } + } + } + } + + return null; + + } + + @Override + public Action[] bestMove() { + + if (evaluated.isEmpty()) { + return new Action[0]; + } + + // for high density board guess safety and then minimax probability of tile value + if (boardState.isHighDensity() && !certainProgress) { + solver.logger.log(Level.INFO, "High density evaluation being used"); + evaluated.sort(EvaluatedLocation.SORT_BY_SAFETY_MINIMAX); + } else { + // other wise weigh safety and progress + evaluated.sort(SORT_ORDER); + } + + EvaluatedLocation evalLoc = evaluated.get(0); + + // see if this guess has a strictly better guess + if (solver.preferences.isDoDomination()) { + EvaluatedLocation alternative = findAlternativeMove(evalLoc); + + if (alternative != null) { + solver.logger.log(Level.INFO, "Replacing %s ...", evalLoc); + solver.logger.log(Level.INFO, "... with %s", alternative); + evalLoc = alternative; + } + } + + + Action action = new Action(evalLoc, Action.CLEAR, MoveMethod.PROBABILITY_ENGINE, "", evalLoc.getProbability()); + + // let the boardState decide what to do with this action + boardState.setAction(action); + + Action[] result = boardState.getActions().toArray(new Action[0]); + + //display("Best Guess: " + action.asString()); + + return result; + + } + + @Override + public List getEvaluatedLocations() { + return evaluated; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/RolloutGenerator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/RolloutGenerator.java new file mode 100644 index 0000000..61c2b8b --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/RolloutGenerator.java @@ -0,0 +1,741 @@ +package minesweeper.solver; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; + +import Asynchronous.Asynchronous; +import Monitor.AsynchMonitor; +import minesweeper.gamestate.GameStateModel; +import minesweeper.gamestate.GameStateModelViewer; +import minesweeper.gamestate.GameStateReader; +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.settings.SettingsFactory; +import minesweeper.solver.settings.SettingsFactory.Setting; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.solver.settings.SolverSettings; +import minesweeper.structure.Action; +import minesweeper.structure.Location; + +/** + * This class determines the possible distribution of mines along the edge and the number of ways that can be done + * + */ +public class RolloutGenerator { + + private int[][] SMALL_COMBINATIONS = new int[][] {{1}, {1,1}, {1,2,1}, {1,3,3,1}, {1,4,6,4,1}, {1,5,10,10,5,1}, {1,6,15,20,15,6,1}, {1,7,21,35,35,21,7,1}, {1,8,28,56,70,56,28,8,1}}; + + // used to hold a viable solution + private class ProbabilityLine implements Comparable { + private int mineCount = 0; + private BigInteger solutionCount = BigInteger.ZERO; + private int[] allocatedMines = new int[boxCount]; // this is the number of mines originally allocate to a box + private int weight; // all lines normalized to sum to 1 million + + + private ProbabilityLine() { + this(BigInteger.ZERO); + } + + private ProbabilityLine(BigInteger solutionCount) { + this.solutionCount = solutionCount; + } + + @Override + // sort by the number of mines in the solution + public int compareTo(ProbabilityLine o) { + return this.mineCount - o.mineCount; + } + } + + // used to hold what we need to analyse next + private class NextWitness { + + private Witness witness; + private List newBoxes = new ArrayList<>(); + private List oldBoxes = new ArrayList<>(); + + private NextWitness(Witness w) { + + this.witness = w; + + for (Box b: w.getBoxes()) { + if (b.isProcessed()) { + oldBoxes.add(b); + } else { + newBoxes.add(b); + } + } + + } + + } + + private long duration; + + private List workingProbs = new ArrayList<>(); // as we work through an independent set of witnesses probabilities are held here + + //when set to true indicates that the box has been part of this analysis + private boolean[] mask; + + final private BoardState boardState; + final private WitnessWeb web; + final private int boxCount; + final private List witnesses; + final private List boxes; + final private int minesLeft; // number of mines undiscovered in the game + final private int tilesOfEdge; // number of squares undiscovered in the game and off the web + + final private List offWebTiles; + final private List revealedTiles = new ArrayList<>(); + final private List placedMines = new ArrayList<>(); + + private int recursions = 0; + + // these are the limits that can be on the edge + final private int minTotalMines; + final private int maxTotalMines; + + private int totalWeight = 0; + + private boolean valid = true; + + public RolloutGenerator(BoardState boardState, WitnessWeb web, int squaresLeft, int minesLeft) { + + this.boardState = boardState; + this.web = web; + this.minesLeft = minesLeft; + this.tilesOfEdge = squaresLeft - web.getSquares().size(); + + this.minTotalMines = Math.max(0, minesLeft - this.tilesOfEdge); //we can't use so few mines that we can't fit the remainder elsewhere on the board + this.maxTotalMines = minesLeft; // we can't use more mines than are left in the game + + boardState.getLogger().log(Level.DEBUG, "Total mines %d to %d", minTotalMines, maxTotalMines); + + web.generateBoxes(); + + this.witnesses = web.getPrunedWitnesses(); + this.boxes = web.getBoxes(); + + this.boxCount = boxes.size(); + + for (Witness w: witnesses) { + w.setProcessed(false); + } + + for (Box b: boxes) { + b.setProcessed(false); + } + + // all tile ... + Set offWeb = new HashSet<>(boardState.getAllUnrevealedSquares()); + + // ... minus those on the edge + for (Location tile: web.getSquares()) { + offWeb.remove(tile); + } + + offWebTiles = new ArrayList<>(offWeb); + + boardState.getLogger().log(Level.INFO, "Total tiles off web %d", offWebTiles.size()); + + int width = boardState.getGameWidth(); + int height = boardState.getGameHeight(); + + for (int x=0; x < width; x++) { + for (int y=0; y < height; y++) { + if (boardState.isRevealed(x, y)) { + revealedTiles.add(boardState.getLocation(x,y)); + } + if (boardState.isConfirmedMine(x,y)) { + placedMines.add(boardState.getLocation(x,y)); + } + } + } + + boardState.getLogger().log(Level.INFO, "Total tiles revealed %d", revealedTiles.size()); + boardState.getLogger().log(Level.INFO, "Total mines placed %d", placedMines.size()); + } + + /** + * Run the Rollout generator + */ + public void process() { + + if (!web.isWebValid()) { // if the web is invalid then nothing we can do + boardState.getLogger().log(Level.INFO, "Web is invalid - exiting the Rollout generator processing"); + valid = false; + return; + } + + long startTime = System.currentTimeMillis(); + + // add an empty probability line to get us started + workingProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // create an empty mask - indicating no boxes have been processed + mask = new boolean[boxCount]; + + NextWitness witness = findFirstWitness(); + + while (witness != null) { + + // mark the new boxes as processed - which they will be soon + for (Box b: witness.newBoxes) { + mask[b.getUID()] = true; + } + + //System.out.println("Processing " + witness.witness.getLocation().display()); + + workingProbs = mergeProbabilities(witness); + + witness = findNextWitness(witness); + + } + + // have we got a valid position + if (!workingProbs.isEmpty()) { + calculateBoxProbabilities(); + } else { + valid = false; + } + + + duration = System.currentTimeMillis() - startTime; + } + + + // here we calculate the total number of candidate solutions left in the game + private void calculateBoxProbabilities() { + + boardState.getLogger().log(Level.INFO, "showing %d probability Lines...", workingProbs.size()); + + // total game tally + BigInteger totalTally = BigInteger.ZERO; + + // outside a box tally + BigInteger outsideTally = BigInteger.ZERO; + + BigInteger hcf = null; + + // calculate how many solutions are in each line / Highest common divisor + for (ProbabilityLine pl: workingProbs) { + + if (pl.mineCount >= minTotalMines) { // if the mine count for this solution is less than the minimum it can't be valid + + BigInteger mult = Solver.combination(minesLeft - pl.mineCount, tilesOfEdge); //# of ways the rest of the board can be formed + + pl.solutionCount = pl.solutionCount.multiply(mult); + + totalTally = totalTally.add(pl.solutionCount); + + if (hcf == null) { + hcf = pl.solutionCount; + } else { + hcf = hcf.gcd(pl.solutionCount); + } + + } + } + + BigInteger million = BigInteger.valueOf(1000000); + + // display the lines with a weight as a part of 1,000,000 + for (ProbabilityLine pl: workingProbs) { + + if (pl.mineCount >= minTotalMines) { // if the mine count for this solution is less than the minimum it can't be valid + + pl.weight = pl.solutionCount.multiply(million).divide(totalTally).intValue(); + + totalWeight = totalWeight + pl.weight; + + String display = "Mines=" + pl.mineCount + " Weight=" + pl.weight; + for (int i=0; i < pl.allocatedMines.length; i++) { + + display = display + " " + boxes.get(i).getSquares().size() + "(" + pl.allocatedMines[i] + ") "; + + } + + boardState.getLogger().log(Level.INFO, display); + + } + } + + + } + + + + private List mergeProbabilities(NextWitness nw) { + + List newProbs = new ArrayList<>(); + + for (ProbabilityLine pl: workingProbs) { + + int missingMines = nw.witness.getMines() - countPlacedMines(pl, nw); + + if (missingMines < 0) { + // too many mines placed around this witness previously, so this probability can't be valid + } else if (missingMines == 0) { + newProbs.add(pl); // witness already exactly satisfied, so nothing to do + } else if (nw.newBoxes.isEmpty()) { + // nowhere to put the new mines, so this probability can't be valid + } else { + newProbs.addAll(distributeMissingMines(pl, nw, missingMines, 0)); + } + + } + + //solver.display("Processed witness " + nw.witness.display()); + + // flag the last set of details as processed + nw.witness.setProcessed(true); + for (Box b: nw.newBoxes) { + b.setProcessed(true); + } + + return newProbs; + + + } + + // this is used to recursively place the missing Mines into the available boxes for the probability line + private List distributeMissingMines(ProbabilityLine pl, NextWitness nw, int missingMines, int index) { + + recursions++; + if (recursions % 10000 == 0) { + boardState.getLogger().log(Level.WARN, "Probability Engine recursion exceeding %d iterations", recursions); + } + + List result = new ArrayList<>(); + + // if there is only one box left to put the missing mines we have reach this end of this branch of recursion + if (nw.newBoxes.size() - index == 1) { + // if there are too many for this box then the probability can't be valid + if (nw.newBoxes.get(index).getMaxMines() < missingMines) { + return result; + } + // if there are too few for this box then the probability can't be valid + if (nw.newBoxes.get(index).getMinMines() > missingMines) { + return result; + } + // if there are too many for this game then the probability can't be valid + if (pl.mineCount + missingMines > maxTotalMines) { + return result; + } + + // otherwise place the mines in the probability line + result.add(extendProbabilityLine(pl, nw.newBoxes.get(index), missingMines)); + return result; + } + + + // this is the recursion + int maxToPlace = Math.min(nw.newBoxes.get(index).getMaxMines(), missingMines); + + for (int i=nw.newBoxes.get(index).getMinMines(); i <= maxToPlace; i++) { + ProbabilityLine npl = extendProbabilityLine(pl, nw.newBoxes.get(index), i); + + result.addAll(distributeMissingMines(npl, nw, missingMines - i, index + 1)); + } + + return result; + + } + + // create a new probability line by taking the old and adding the mines to the new Box + private ProbabilityLine extendProbabilityLine(ProbabilityLine pl, Box newBox, int mines) { + + int combination = SMALL_COMBINATIONS[newBox.getSquares().size()][mines]; + + BigInteger newSolutionCount = pl.solutionCount.multiply(BigInteger.valueOf(combination)); + + ProbabilityLine result = new ProbabilityLine(newSolutionCount); + + result.mineCount = pl.mineCount + mines; + + result.allocatedMines = pl.allocatedMines.clone(); + + result.allocatedMines[newBox.getUID()] = mines; + + return result; + } + + // counts the number of mines already placed + private int countPlacedMines(ProbabilityLine pl, NextWitness nw) { + + int result = 0; + + for (Box b: nw.oldBoxes) { + result = result + pl.allocatedMines[b.getUID()]; + } + + return result; + } + + // return any witness which hasn't been processed + private NextWitness findFirstWitness() { + + for (Witness w: witnesses) { + if (!w.isProcessed()) { + return new NextWitness(w); + } + } + + // if we are here all witness have been processed + return null; + + } + + + // look for the next witness to process + private NextWitness findNextWitness(NextWitness prevWitness) { + + int bestTodo = 99999; + Witness bestWitness = null; + + // and find a witness which is on the boundary of what has already been processed + for (Box b: boxes) { + if (b.isProcessed()) { + for (Witness w: b.getWitnesses()) { + if (!w.isProcessed()) { + int todo = 0; + for (Box b1: w.getBoxes()) { + if (!b1.isProcessed()) { + todo++; + } + } + if (todo == 0) { + return new NextWitness(w); + } else if (todo < bestTodo) { + bestTodo = todo; + bestWitness = w; + } + } + } + } + } + + if (bestWitness != null) { + return new NextWitness(bestWitness); + } + + // if we are down here then there is no witness which is on the boundary, so we have processed a complete set of independent witnesses + + // get an unprocessed witness + NextWitness nw = findFirstWitness(); + + // return the next witness to process + return nw; + + } + + /** + * The duration to do the processing in milliseconds + * @return + */ + protected long getDuration() { + return this.duration; + } + + public boolean isValid() { + return valid; + } + + public int getWidth() { + return boardState.getGameWidth(); + } + + public int getHeight() { + return boardState.getGameHeight(); + } + + public synchronized GameStateModelViewer generateGame(long seed) { + return generateGame(seed, null); + } + + public synchronized GameStateModelViewer generateGame(long seed, Location safeTile) { + + GameStateModelViewer result; + + int width = boardState.getGameWidth(); + int height = boardState.getGameHeight(); + int mineCount = this.minesLeft; + + Random rng = new Random(seed); + + int edge = (int) (rng.nextDouble()*totalWeight); + //boardState.display("Random number is " + edge); + + int soFar = 0; + ProbabilityLine line = null; + for (ProbabilityLine pl: workingProbs) { + soFar = soFar + pl.weight; + if (soFar > edge) { + line = pl; + break; + } + } + + mineCount = mineCount - line.mineCount; + + List mines = new ArrayList<>(placedMines); // start with the mines we have already placed + + for (int i=0; i < line.allocatedMines.length; i++) { + + if (line.allocatedMines[i] == 0) { // if no mines here nothing to do + + } else if (line.allocatedMines[i] == boxes.get(i).getSquares().size()) { // if the box is full of mines then all tile in the box are mines + for (Square tile: boxes.get(i).getSquares()) { + mines.add(tile); + } + + } else { // shuffle the tiles in the box and take the first ones as the mines + + // in order to make this repeatable with the same seed, we can't shuffle the underlying data. So create a copy. + List boxTiles = new ArrayList<>(boxes.get(i).getSquares()); + + Collections.shuffle(boxTiles, rng); + + int toGet = line.allocatedMines[i]; + for (int j=0; j < toGet; j++) { + if (safeTile == null || !boxTiles.get(j).equals(safeTile)) { // don't place a mine in the safe tile + mines.add(boxTiles.get(j)); + } else { + toGet++; // if this mine is no good then we need to look for an extra one + } + } + } + + } + + + // in order to make this repeatable with the same seed, we can't shuffle the underlying data. So create a copy. + List owt = new ArrayList<>(offWebTiles); + + Collections.shuffle(owt, rng); + + int toGet = mineCount; + for (int j=0; j < toGet; j++) { + if (safeTile == null || !owt.get(j).equals(safeTile)) { // don't place a mine in the safe tile + mines.add(owt.get(j)); + } else { + toGet++; // if this mine is no good then we need to look for an extra one + } + } + + if (mines.size() != this.minesLeft) { + System.out.println("Logic error: Mines generated " + mines.size() + " does not equal mines left " + this.minesLeft); + } + + result = GameStateReader.loadMines(width, height, mines, revealedTiles); + + /* + // show the board + for (int y=0; y < height; y++) { + for (int x=0; x < width; x++) { + + int tile = result.privilegedQuery(new Location(x,y) , true); + + if (tile == GameStateModel.MINE) { + System.out.print("M"); + + } else if (tile == GameStateModel.HIDDEN) { + System.out.print("."); + + } else { + System.out.print(tile); + } + } + System.out.println(); + } + */ + + return result; + + } + + public class Adversarial implements Comparable> { + public final T original; + public int wins; + public int played; + private Adversarial(T original) { + this.original = original; + } + @Override + public int compareTo(Adversarial o) { + return o.wins - this.wins; + } + } + + public class RolloutWork implements Asynchronous { + + private final Adversarial player; + private final int plays; + + public RolloutWork(Adversarial player, int plays) { + this.player = player; + this.plays = plays; + } + + + @Override + public void start() { + int wins = playGames(player.original, plays); + player.wins = player.wins + wins; + player.played = player.played + plays; + } + + @Override + public void requestStop() { + // TODO Auto-generated method stub + + } + + @Override + public Boolean getResult() { + return true; + } + + } + + public List> adversarial(List candidates) { + + List> players = new ArrayList<>(); + + for (T candidate: candidates) { + players.add(new Adversarial(candidate)); + } + + int check = players.size(); + + final int plays = 200; + + while (check > 1) { + + RolloutWork[] workers = new RolloutWork[check]; + + for (int i=0; i < check; i++) { + Adversarial player = players.get(i); + + workers[i] = new RolloutWork(player, plays); + + } + + AsynchMonitor monitor = new AsynchMonitor(workers); + monitor.setMaxThreads(6); + try { + monitor.startAndWait(); + } catch (Exception e) { + e.printStackTrace(); + } + + Collections.sort(players); + if (check > 4) { + check = check * 3 / 4; + } else { + check--; + } + + } + + for (Adversarial player: players) { + boardState.getLogger().log(Level.INFO, "%s had %d wins out of %d", player.original, player.wins, player.played); + } + + return players; + + } + + private int playGames(Location startLocation, int count) { + + int wins = 0; + + Random seeder = new Random(); + + SolverSettings preferences = SettingsFactory.GetSettings(Setting.TINY_ANALYSIS).setTieBreak(false); + + int steps = 0; + int maxSteps = count; + + while (steps < maxSteps) { + + steps++; + + GameStateModel gs = generateGame(seeder.nextLong()); + + Solver solver = new Solver(gs, preferences, false); + + gs.doAction(new Action(startLocation, Action.CLEAR)); + int state = gs.getGameState(); + + boolean win; + if (state == GameStateModel.LOST || state == GameStateModel.WON) { // if we have won or lost on the first move nothing more to do + win = (state == GameStateModel.WON); + } else { // otherwise use the solver to play the game + win = playGame(gs, solver); + } + + if (win) { + wins++; + } + + } + + return wins; + + } + + private boolean playGame(GameStateModel gs, Solver solver) { + + int state; + + play: while (true) { + + Action[] moves; + try { + solver.start(); + moves = solver.getResult(); + } catch (Exception e) { + System.out.println("Game " + gs.showGameKey() + " has thrown an exception! "); + e.printStackTrace(); + return false; + } + + if (moves.length == 0) { + System.err.println("No moves returned by the solver for game " + gs.showGameKey()); + return false; + } + + // play all the moves until all done, or the game is won or lost + for (int i=0; i < moves.length; i++) { + + gs.doAction(moves[i]); + + state = gs.getGameState(); + + if (state == GameStateModel.LOST || state == GameStateModel.WON) { + break play; + } + } + } + + if (state == GameStateModel.LOST) { + return false; + } else { + return true; + } + + } + + @Override + public String toString() { + return this.getWidth() + "x" + this.getHeight() + "/" + (this.minesLeft + this.placedMines.size()); + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SecondarySafetyEvaluator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SecondarySafetyEvaluator.java new file mode 100644 index 0000000..7df2ba4 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SecondarySafetyEvaluator.java @@ -0,0 +1,635 @@ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.Solver.RunPeResult; +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.EvaluatedLocation; +import minesweeper.solver.utility.Logger; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +public class SecondarySafetyEvaluator implements LocationEvaluator { + + //private final static BigDecimal PROGRESS_CONTRIBUTION = new BigDecimal("0.1"); // was 0.1 + private final static BigDecimal EQUALITY_THRESHOLD = new BigDecimal("0.0001"); + + private final static BigDecimal FIFTYFIFTY_SCALE = new BigDecimal("0.9"); + + private final static Comparator SORT_ORDER = EvaluatedLocation.SORT_BY_WEIGHT; + + private final static int[][] OFFSETS = {{2, 0}, {-2, 0}, {0, 2}, {0, -2}}; + + private final static int[][] OFFSETS_ALL = {{2,-2}, {2,-1}, {2,0}, {2,1}, {2,2}, {-2,-2}, {-2,-1}, {-2,0}, {-2,1}, {-2,2}, {-1,2}, {0,2}, {1,2}, {-1,-2}, {0,-2}, {1,-2}}; + + private final BoardState boardState; + private final WitnessWeb wholeEdge; + private final ProbabilityEngineModel pe; + private final Solver solver; + private final BruteForceAnalysisModel incompleteBFA; + //private final FiftyFiftyHelper fiftyFiftyHelper; + + private final Set tileOfInterestOff = new HashSet<>(); + private final Set tileOfInterestOn = new LinkedHashSet<>(); + //private final List tileOfInterestOn = new ArrayList<>(); + + //private final LongTermRiskHelperOld ltrHelperOld; + private final SpaceCounter spaceCounter; + + private final LongTermRiskHelper ltrHelper; + + private final BigDecimal progressContribution; + private final static BigDecimal essrContribution = new BigDecimal("0.02"); + + private List evaluated = new ArrayList<>(); + private EvaluatedLocation best; + private boolean certainProgress = false; + + public SecondarySafetyEvaluator(Solver solver, BoardState boardState, WitnessWeb wholeEdge, ProbabilityEngineModel pe, BruteForceAnalysisModel incompleteBFA, LongTermRiskHelper ltr) { + + this.boardState = boardState; + this.wholeEdge = wholeEdge; + this.pe = pe; + this.solver = solver; + this.incompleteBFA = incompleteBFA; + this.progressContribution = solver.preferences.getProgressContribution(); + + //this.fiftyFiftyHelper = fiftyFiftyHelper; + + // look for long term risks and then use this to compare what impact the short term risks have on them + //this.ltrHelperOld = new LongTermRiskHelperOld(boardState, wholeEdge, pe); + //this.ltrHelperOld.findRisks(); + + // find major 50/50 influence on the board - wip + this.ltrHelper = ltr; + + this.spaceCounter = new SpaceCounter(boardState, 8); + + } + + /** + * Look for off edge positions which are good for breaking open new areas + */ + public void evaluateOffEdgeCandidates(List allUnrevealedSquares) { + + + //int minesLeft = boardState.getMines() - boardState.getConfirmedFlagCount(); + // || allUnrevealedSquares.size() - minesLeft < 6 + + // if there are only a small number of tiles off the edge then consider them all + if (allUnrevealedSquares.size() - wholeEdge.getSquares().size() < 30) { + for (Location tile: allUnrevealedSquares) { + if (!wholeEdge.isOnWeb(tile)) { + tileOfInterestOff.add(new CandidateLocation(tile.x, tile.y, pe.getOffEdgeProb(), 0, 0)); + } + } + //evaluateLocations(tileOfInterest); + return; + } + + int[][] offsets; + if (boardState.isHighDensity()) { + offsets = OFFSETS_ALL; + } else { + offsets = OFFSETS; + } + + // look for potential super locations + for (Location tile: wholeEdge.getOriginalWitnesses()) { + + //boardState.display(tile.display() + " is an original witness"); + + for (int[] offset: offsets) { + + int x1 = tile.x + offset[0]; + int y1 = tile.y + offset[1]; + if ( x1 >= 0 && x1 < boardState.getGameWidth() && y1 >= 0 && y1 < boardState.getGameHeight()) { + + CandidateLocation loc = new CandidateLocation(x1, y1, pe.getOffEdgeProb(), boardState.countAdjacentUnrevealed(x1, y1), boardState.countAdjacentConfirmedFlags(x1, y1)); + if (boardState.isUnrevealed(loc) && !wholeEdge.isOnWeb(loc)) { // if the location is un-revealed and not on the edge + //boardState.display(loc.display() + " is of interest"); + tileOfInterestOff.add(loc); + } + + } + } + } + + + + // look for potential off edge squares with not many neighbours and calculate their probability of having no more flags around them + for (Location tile: allUnrevealedSquares) { + + int adjMines = boardState.countAdjacentConfirmedFlags(tile); + int adjUnrevealed = boardState.countAdjacentUnrevealed(tile); + + if ( adjUnrevealed > 1 && adjUnrevealed < 4 && !wholeEdge.isOnWeb(tile) && !tileOfInterestOff.contains(tile)) { + + tileOfInterestOff.add(new CandidateLocation(tile.x, tile.y, pe.getOffEdgeProb(), boardState.countAdjacentUnrevealed(tile), boardState.countAdjacentConfirmedFlags(tile))); + + } + + } + + } + + @Override + public void addLocations(Collection tiles) { + tileOfInterestOn.addAll(tiles); + + } + + /** + * Evaluate a set of tiles to see the expected number of clears it will provide + */ + public void evaluateLocations() { + + BigDecimal threshold = pe.getBestNotDeadSafety().multiply(Solver.PROB_ENGINE_HARD_TOLERENCE); + for (Location loc: ltrHelper.getInfluencedTiles(threshold)) { + if (!tileOfInterestOff.contains(loc)) { // if we aren't in the other set then add it to this one + tileOfInterestOn.add(loc); + } + } + + /* + for (Location loc: ltrHelperOld.get5050Breakers()) { + if (!tileOfInterestOff.contains(loc)) { // if we aren't in the other set then add it to this one + tileOfInterestOn.add(loc); + } + } + */ + + List defered = new ArrayList<>(); + List notDefered = new ArrayList<>(); + + for (Location tile: tileOfInterestOn) { + if (this.spaceCounter.meetsThreshold(tile)) { + notDefered.add(tile); + } else { + defered.add(tile); + } + } + + for (Location tile: tileOfInterestOff) { + if (this.spaceCounter.meetsThreshold(tile)) { + notDefered.add(tile); + } else { + defered.add(tile); + } + } + + if (!notDefered.isEmpty()) { + for (Location tile: notDefered) { + evaluateLocation(tile); + } + } else { + for (Location tile: defered) { + evaluateLocation(tile); + } + } + + } + + /** + * Evaluate a tile to see the expected number of clears it will provide + */ + private void evaluateLocation(Location tile) { + + EvaluatedLocation evalTile = doFullEvaluateTile(tile); + + if (evalTile != null) { + if (best == null || evalTile.getWeighting().compareTo(best.getWeighting()) > 0) { + best = evalTile; + } + evaluated.add(evalTile); + } + } + + private EvaluatedLocation doFullEvaluateTile(Location tile) { + + // find how many common tiles + SolutionCounter counter1 = solver.validatePosition(wholeEdge, Collections.emptyList(), Arrays.asList(tile), Area.EMPTY_AREA); + + int linkedTilesCount = 0; + + boolean dominated = false; + boolean linked = false; + for (Box box: counter1.getEmptyBoxes()) { + if (box.contains(tile)) { // if the box contains the tile to be processed then ignore it + + } else { + if (box.getSquares().size() > 1) { + dominated = true; + linkedTilesCount = linkedTilesCount + box.getSquares().size(); + } else { + linked = true; + linkedTilesCount++; + } + } + } + + solver.logger.log(Level.INFO, "%s has %d linked tiles and dominated=%b", tile, linkedTilesCount, dominated); + + EvaluatedLocation result; + + + if (dominated) { + BigDecimal probThisTile = pe.getProbability(tile); // this is both the safety, secondary safety and progress probability. + + BigDecimal bonus = BigDecimal.ONE.add(probThisTile.multiply(this.progressContribution)); + BigDecimal weight = probThisTile.multiply(bonus); + + BigDecimal expectedClears = BigDecimal.valueOf(counter1.getLivingClearCount()); // this isn't true, but better than nothing? + + result = new EvaluatedLocation(tile.x, tile.y, probThisTile , weight, expectedClears, 0, counter1.getEmptyBoxes(), probThisTile); + + } else { + result = doFullEvaluateTile(tile, linkedTilesCount); + } + + //result = doFullEvaluateTile(tile, 0); + + return result; + } + + + /** + * Evaluate this tile and return its EvaluatedLocation + */ + private EvaluatedLocation doFullEvaluateTile(Location tile, int linkedTilesCount) { + + long nanoStart = System.nanoTime(); + + EvaluatedLocation result = null; + + List superset = boardState.getAdjacentUnrevealedSquares(tile); + int minesGot = boardState.countAdjacentConfirmedFlags(tile); + + int minMines = minesGot; + int maxMines = minesGot + superset.size(); + + Box tileBox = pe.getBox(tile); + + BigInteger safetyTally; + + int tilesOnEdge; + BigDecimal safetyThisTile; + if (tileBox == null) { + safetyThisTile = pe.getOffEdgeProb(); + tilesOnEdge = 1; + safetyTally = pe.getSolutionCount().subtract(pe.getOffEdgeTally()); //number of solutions this tile is safe + + } else { + safetyThisTile = tileBox.getSafety(); + tilesOnEdge = tileBox.getEdgeLength(); + safetyTally = pe.getSolutionCount().subtract(tileBox.getTally()); //number of solutions this tile is safe + } + + BigDecimal fiftyFiftyInfluence; + if (this.solver.preferences.considerLongTermSafety()) { + BigDecimal tally = new BigDecimal(ltrHelper.findInfluence(tile)).multiply(FIFTYFIFTY_SCALE); + fiftyFiftyInfluence = new BigDecimal(safetyTally).add(tally).divide(new BigDecimal(safetyTally), Solver.DP, RoundingMode.HALF_UP); + } else { + fiftyFiftyInfluence = BigDecimal.ONE; + } + + // work out the expected number of clears if we clear here to start with (i.e. ourself + any linked clears) + BigDecimal expectedClears = BigDecimal.ZERO; + + BigDecimal maxValueProgress = BigDecimal.ZERO; + BigDecimal secondarySafety = BigDecimal.ZERO; + BigDecimal progressProb = BigDecimal.ZERO; + BigDecimal ess = BigDecimal.ONE.subtract(safetyThisTile); // expect solution space = p(mine) + sum[ P(n)*p(n) ] + + BigDecimal safetyThisTileLeft = safetyThisTile; + + int validValues = 0; + List commonClears = null; + for (int i = minMines; i <= maxMines; i++) { + + // calculate the weight + BigDecimal bonus = BigDecimal.ONE.add(progressProb.add(safetyThisTileLeft).multiply(this.progressContribution)); + //BigDecimal weight = secondarySafety.add(safetyThisTileLeft).multiply(bonus).multiply(fiftyFiftyInfluence); + BigDecimal weight = secondarySafety.add(safetyThisTileLeft.multiply(fiftyFiftyInfluence)).multiply(bonus); + + // if the remaining safe component for the tile can now never reach the best if 100% safe for all future values then abandon analysis + if (best != null && weight.compareTo(best.getWeighting()) < 0) { + result = new EvaluatedLocation(tile.x, tile.y, safetyThisTile, weight, expectedClears, 0, commonClears, maxValueProgress); + result.setPruned(); + return result; + } + + RunPeResult peResult = solver.runProbabilityEngine(wholeEdge, tile, i); + ProbabilityEngineModel counter = peResult.pe; + + BigInteger sol = counter.getSolutionCount(); + int clears = counter.getLivingClearCount(); + + + // keep track of the maximum probability across all valid values + if (sol.signum() != 0) { + + validValues++; + + if (commonClears == null) { + commonClears = counter.getEmptyBoxes(); + } else { + commonClears = mergeEmptyBoxes(commonClears, counter.getEmptyBoxes()); + } + + BigDecimal prob = new BigDecimal(sol).divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + + maxValueProgress = maxValueProgress.max(prob); // mini-max + + ess = ess.add(prob.multiply(prob)); // sum of p^2 + + // expected clears is the sum of the number of mines cleared * the probability of clearing them + expectedClears = expectedClears.add(BigDecimal.valueOf(clears).multiply(prob)); + + + BigDecimal nextMoveSafety = counter.getBestNotDeadSafety(); + + //BigDecimal lts = this.ltrHelperOld.getLongTermSafety(tile, counter); + //BigDecimal lts = BigDecimal.ONE; + + solver.logger.log(Level.INFO, "%s with value %d has %d living clears with probability %f, secondary safety %f, 50/50 influence %f and %d tiles on edge", tile, i, clears, prob, nextMoveSafety, fiftyFiftyInfluence, tilesOnEdge); + + secondarySafety = secondarySafety.add(prob.multiply(nextMoveSafety).multiply(fiftyFiftyInfluence)); + + if (clears > linkedTilesCount) { + //BigDecimal modProb; + //if (clears == linkedTilesCount + 1) { + // modProb = prob.multiply(BigDecimal.valueOf(0.8)); + //} else { + // modProb = prob; + //} + //modProb = prob.multiply(BigDecimal.valueOf(clears - linkedTilesCount)); + + progressProb = progressProb.add(prob); + } + + // reduce the remaining safe probability + safetyThisTileLeft = safetyThisTileLeft.subtract(prob); + + } else { + solver.logger.log(Level.DEBUG, "%s with value %d is not valid", tile, i); + } + + } + + if (commonClears != null && !commonClears.isEmpty()) { + solver.logger.log(Level.DEBUG, "%s has certain progress if survive", tile); + certainProgress = true; + } + + // expected solution space reduction + BigDecimal essr = BigDecimal.ONE.subtract(ess); + + // calculate the weight + BigDecimal bonus = BigDecimal.ONE.add(progressProb.multiply(this.progressContribution)); + + //bonus = bonus.add(essr.multiply(this.essrContribution)); + + BigDecimal weight = secondarySafety.multiply(bonus); + + result = new EvaluatedLocation(tile.x, tile.y, safetyThisTile, weight, expectedClears, 0, commonClears, maxValueProgress); + + // if the tile is dead then relegate it to a deferred guess + if (validValues == 1) { + solver.logger.log(Level.INFO, "%s is discovered to be dead during secondary safety analysis", tile); + result.setDeferGuessing(true); + } + + if (!this.spaceCounter.meetsThreshold(result)) { + result.setDeferGuessing(true); + } + + long nanoEnd = System.nanoTime(); + + solver.logger.log(Level.DEBUG, "Duration %d nano-seconds", (nanoEnd - nanoStart)); + + return result; + + } + + + /** + * recursively calculate a tile's safety to the required depth + */ + private BigDecimal calculateSafety(Location tile, WitnessWeb currWeb, ProbabilityEngineModel currPe, int depth) { + + + int minMines = boardState.countAdjacentConfirmedFlags(tile); + int maxMines = minMines + boardState.countAdjacentUnrevealed(tile); + + // work out the expected number of clears if we clear here to start with (i.e. ourself + any linked clears) + BigDecimal secondarySafety = BigDecimal.ZERO; + + for (int value = minMines; value <= maxMines; value++) { + + + // make the move + boardState.setWitnessValue(tile, value); + + // create a new list of witnesses + List witnesses = new ArrayList<>(currWeb.getPrunedWitnesses().size() + 1); + witnesses.addAll(currWeb.getPrunedWitnesses()); + witnesses.add(tile); + + Area witnessed = boardState.getUnrevealedArea(witnesses); + + WitnessWeb newWeb = new WitnessWeb(boardState, witnesses, witnessed.getLocations(), Logger.NO_LOGGING); + + int unrevealed = boardState.getTotalUnrevealedCount() - 1; // this is one less, because we have added a witness + + int minesLeft = boardState.getMines() - boardState.getConfirmedMineCount(); + + ProbabilityEngineModel counter = new ProbabilityEngineFast(boardState, newWeb, unrevealed, minesLeft); + + counter.process(); + + BigInteger sol = counter.getSolutionCount(); + int clears = counter.getLivingClearCount(); + + // keep track of the maximum probability across all valid values + if (sol.signum() != 0) { + + BigDecimal prob = new BigDecimal(sol).divide(new BigDecimal(currPe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + + List bestCandidates = counter.getBestCandidates(BigDecimal.ONE, true); + + BigDecimal safety; + if (bestCandidates.size() == 0 ) { + safety = counter.getOffEdgeProb(); + } else { + + if (depth == 1) { + safety = bestCandidates.get(0).getProbability(); + } else { + safety = calculateSafety(bestCandidates.get(0), newWeb, counter, depth - 1); + } + } + + solver.logger.log(Level.INFO, "%s with value %d has %d living clears with probability %f and secondary safety %f", tile, value, clears, prob, safety); + + secondarySafety = secondarySafety.add(prob.multiply(safety)); + + } else { + solver.logger.log(Level.DEBUG, "%s with value %d is not valid", tile, value); + } + + + // undo the move + boardState.clearWitness(tile); + + } + + return secondarySafety; + + } + + + + public void showResults() { + + evaluated.sort(SORT_ORDER); + + solver.logger.log(Level.INFO, "--- evaluated locations ---"); + for (EvaluatedLocation el: evaluated) { + solver.logger.log(Level.INFO, "%s", el); + } + + } + + private List mergeEmptyBoxes(List boxes1, List boxes2) { + + if (boxes1.size() == 0) { + return boxes1; + } + + if (boxes2.size() == 0) { + return boxes2; + } + + List result = new ArrayList<>(); + for (Box b1: boxes1) { + for (Box b2: boxes2) { + if (b1.equals(b2)) { + result.add(b1); + break; + } + } + } + + return result; + } + + + // find a move which 1) is safer than the move given and 2) when move is safe ==> the alternative is safe + private EvaluatedLocation findAlternativeMove(EvaluatedLocation move) { + + if (move.getEmptyBoxes() == null) { + return null; + } + + // if one of the common boxes contains a tile which has already been processed then the current tile is redundant + for (EvaluatedLocation eval: evaluated) { + if (eval.getProbability().subtract(move.getProbability()).compareTo(EQUALITY_THRESHOLD) > 0) { // the alternative move is at least a bit safer than the current move + for (Box b: move.getEmptyBoxes()) { // see if the move is in the list of empty boxes + for (Location l: b.getSquares()) { + if (l.equals(eval)) { + return eval; + } + } + } + } + } + + return null; + + } + + @Override + public Action[] bestMove() { + + if (evaluated.isEmpty()) { + return new Action[0]; + } + + // for high density board guess safety and then minimax probability of tile value + if (boardState.isHighDensity() && !certainProgress) { + solver.logger.log(Level.INFO, "High density evaluation being used"); + evaluated.sort(EvaluatedLocation.SORT_BY_SAFETY_MINIMAX); + } else { + // other wise weigh safety and progress + evaluated.sort(SORT_ORDER); + } + + EvaluatedLocation evalLoc = evaluated.get(0); + + // see if this guess has a strictly better guess + if (solver.preferences.isDoDomination()) { + EvaluatedLocation alternative = findAlternativeMove(evalLoc); + + if (alternative != null) { + solver.logger.log(Level.INFO, "Replacing %s ...", evalLoc); + solver.logger.log(Level.INFO, "... with %s", alternative); + evalLoc = alternative; + } + } + + // check whether the chosen move is dominated by a partially complete BFDA + if (incompleteBFA != null) { + Location better = incompleteBFA.checkForBetterMove(evalLoc); + if (better != null) { + EvaluatedLocation bfdaBetter = null; + for (EvaluatedLocation evl: evaluated) { + if (evl.equals(better)) { + bfdaBetter = evl; + break; + } + } + if (bfdaBetter == null) { + solver.logger.log(Level.INFO, "Unable to find %s in the Evaluated list", better); + } else { + evalLoc = bfdaBetter; + solver.logger.log(Level.INFO, "Tile %s", evalLoc); + } + } + } + + Action action = new Action(evalLoc, Action.CLEAR, MoveMethod.PROBABILITY_ENGINE, "", evalLoc.getProbability()); + + // let the boardState decide what to do with this action + boardState.setAction(action); + + Action[] result = boardState.getActions().toArray(new Action[0]); + + //display("Best Guess: " + action.asString()); + + return result; + + } + + @Override + public List getEvaluatedLocations() { + return evaluated; + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SolutionCounter.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SolutionCounter.java new file mode 100644 index 0000000..104b577 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SolutionCounter.java @@ -0,0 +1,1009 @@ +package minesweeper.solver; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +/** + * This class uses a non iterative approach to calculating the number of candidate solution in the game. It is driven by a {@link minesweeper.solver.WitnessWeb witness web}. + * + */ +public class SolutionCounter { + + private int[][] SMALL_COMBINATIONS = new int[][] {{1}, {1,1}, {1,2,1}, {1,3,3,1}, {1,4,6,4,1}, {1,5,10,10,5,1}, {1,6,15,20,15,6,1}, {1,7,21,35,35,21,7,1}, {1,8,28,56,70,56,28,8,1}}; + + private static final boolean CHECK_FOR_DEAD_LOCATIONS = false; + + private class MergeSorter implements Comparator { + + int[] checks; + + private MergeSorter() { + checks = new int[0]; + } + + private MergeSorter(List boxes) { + + checks = new int[boxes.size()]; + + for (int i=0; i < boxes.size(); i++) { + checks[i] = boxes.get(i).getUID(); + } + + } + + + @Override + public int compare(ProbabilityLine p1, ProbabilityLine p2) { + + int c = p1.mineCount - p2.mineCount; + + if (c != 0) { + return c; + } + + for (int i=0; i < checks.length; i++) { + int index = checks[i]; + + c = p1.allocatedMines[index] - p2.allocatedMines[index]; + + if (c != 0) { + return c; + } + + } + + return 0; + } + + } + + // used to hold a viable solution + private class ProbabilityLine implements Comparable { + private int mineCount = 0; + private BigInteger solutionCount = BigInteger.ZERO; + private BigInteger[] mineBoxCount = new BigInteger[boxCount]; + private int[] allocatedMines = new int[boxCount]; // this is the number of mines originally allocate to a box + + { + for (int i=0; i < mineBoxCount.length; i++) { + mineBoxCount[i] = BigInteger.ZERO; + } + } + + private ProbabilityLine() { + this(BigInteger.ZERO); + } + + private ProbabilityLine(BigInteger solutionCount) { + this.solutionCount = solutionCount; + } + + @Override + // sort by the number of mines in the solution + public int compareTo(ProbabilityLine o) { + return this.mineCount - o.mineCount; + } + } + + // used to hold what we need to analyse next + private class NextWitness { + + private Witness witness; + private List newBoxes = new ArrayList<>(); + private List oldBoxes = new ArrayList<>(); + + private NextWitness(Witness w) { + + this.witness = w; + + for (Box b: w.getBoxes()) { + if (b.isProcessed()) { + oldBoxes.add(b); + } else { + newBoxes.add(b); + } + } + + } + + } + + // information about the boxes surrounding a dead candidate + private class DeadCandidate { + + private Location candidate; + private Box myBox; + private boolean isAlive = false; + private List goodBoxes = new ArrayList<>(); + private List badBoxes = new ArrayList<>(); + + private boolean firstCheck = true; + private int total; + + } + + private long duration; + + private List workingProbs = new ArrayList<>(); // as we work through an independent set of witnesses probabilities are held here + private List heldProbs = new ArrayList<>(); + + //when set to true indicates that the box has been part of this analysis + private boolean[] mask; + + final private BoardState boardState; + final private WitnessWeb web; + final private int boxCount; + final private List witnesses; + final private List boxes; + final private int minesLeft; // number of mines undiscovered in the game + private int squaresLeft; // number of squares undiscovered in the game and off the web + + private int independentGroups = 0; + private int recursions = 0; + + private BigInteger finalSolutionsCount; + private int clearCount; + private int livingClearCount; + final private List emptyBoxes = new ArrayList<>(); + + // these are the limits that can be on the edge + private int minTotalMines; + final private int maxTotalMines; + + final private Map mineCounts = new HashMap<>(); + + // list of locations which are potentially dead + private List deadCandidates = new ArrayList<>(); + private Area deadLocations = Area.EMPTY_AREA; + private boolean canDoDeadTileAnalysis; + + private boolean valid = true; + + public SolutionCounter(BoardState boardState, WitnessWeb web, int squaresLeft, int minesLeft) { + + this.boardState = boardState; + this.web = web; + this.minesLeft = minesLeft; + this.squaresLeft = squaresLeft - web.getSquares().size(); + + this.minTotalMines = Math.max(0, minesLeft - this.squaresLeft); //we can't use so few mines that we can't fit the remainder elsewhere on the board + this.maxTotalMines = minesLeft; // we can't use more mines than are left in the game + + //solver.display("Total mines " + minTotalMines + " to " + maxTotalMines); + + web.generateBoxes(); + + this.witnesses = web.getPrunedWitnesses(); + this.boxes = web.getBoxes(); + + this.boxCount = boxes.size(); + + for (Witness w: witnesses) { + w.setProcessed(false); + } + + for (Box b: boxes) { + b.setProcessed(false); + } + + } + + /** + * Run the solution counter + */ + public void process(Area deadLocations) { + + if (!web.isWebValid() || !this.valid) { // if the web is invalid then nothing we can do + boardState.getLogger().log(Level.INFO, "Web is invalid - skipping the SolutionCounter processing"); + finalSolutionsCount = BigInteger.ZERO; + return; + } + + long startTime = System.currentTimeMillis(); + + // if we compress the probability lines before the edge is completely processed we can't use the data to look for dead tiles + canDoDeadTileAnalysis = CHECK_FOR_DEAD_LOCATIONS; + + if (CHECK_FOR_DEAD_LOCATIONS) { + determineCandidateDeadLocations(); + } else { + this.deadLocations = deadLocations; + } + + // create an initial solution of no mines anywhere + heldProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // add an empty probability line to get us started + workingProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // create an empty mask - indicating no boxes have been processed + mask = new boolean[boxCount]; + + NextWitness witness = findFirstWitness(); + + while (witness != null) { + + // mark the new boxes as processed - which they will be soon + for (Box b: witness.newBoxes) { + mask[b.getUID()] = true; + } + + //System.out.println("Processing " + witness.witness.getLocation().display()); + + workingProbs = mergeProbabilities(witness); + + witness = findNextWitness(witness); + + } + + // have we got a valid position + if (!heldProbs.isEmpty()) { + calculateBoxProbabilities(); + } else { + finalSolutionsCount = BigInteger.ZERO; + clearCount = 0; + livingClearCount = 0; + } + + + duration = System.currentTimeMillis() - startTime; + } + + private List crunchByMineCount(List target, MergeSorter sorter) { + + if (target.isEmpty()) { + return target; + } + + // sort the solutions by number of mines + Collections.sort(target, sorter); + + List result = new ArrayList<>(); + + ProbabilityLine current = null; + + for (ProbabilityLine pl: target) { + + if (current == null) { + current = pl; + } else if (sorter.compare(current, pl) != 0) { + result.add(current); + current = pl; + } else { + combineProbabilities(current, pl); + } + + } + + result.add(current); + + return result; + + } + + + // calculate how many ways this solution can be generated and roll them into one + private void combineProbabilities(ProbabilityLine npl, ProbabilityLine pl) { + + npl.solutionCount = npl.solutionCount.add(pl.solutionCount); + + for (int i = 0; i < pl.mineBoxCount.length; i++) { + if (mask[i]) { + npl.mineBoxCount[i] = npl.mineBoxCount[i].add(pl.mineBoxCount[i]); + } + + } + + } + + // this combines newly generated probabilities with ones we have already stored from other independent sets of witnesses + private void storeProbabilities() { + + List result = new ArrayList<>(); + + // if there are no lines to store then we don't have a valid position + if (workingProbs.isEmpty()) { + //solver.display("working probabilites list is empty!!"); + heldProbs.clear(); + return; + } + + List crunched = workingProbs; + + //solver.display("New data has " + crunched.size() + " entries"); + + for (ProbabilityLine pl: crunched) { + + for (ProbabilityLine epl: heldProbs) { + + if (pl.mineCount + epl.mineCount <= maxTotalMines) { + + ProbabilityLine npl = new ProbabilityLine(pl.solutionCount.multiply(epl.solutionCount)); + npl.mineCount = pl.mineCount + epl.mineCount; + + for (int i=0; i < npl.mineBoxCount.length; i++) { + + BigInteger w1 = pl.mineBoxCount[i].multiply(epl.solutionCount); + BigInteger w2 = epl.mineBoxCount[i].multiply(pl.solutionCount); + npl.mineBoxCount[i] = w1.add(w2); + + } + result.add(npl); + + } + + } + + } + + // sort into mine order + Collections.sort(result); + + heldProbs.clear(); + + // if result is empty this is an impossible position + if (result.isEmpty()) { + return; + } + + // and combine them into a single probability line for each mine count + int mc = result.get(0).mineCount; + ProbabilityLine npl = new ProbabilityLine(); + npl.mineCount = mc; + + for (ProbabilityLine pl: result) { + if (pl.mineCount != mc) { + heldProbs.add(npl); + mc = pl.mineCount; + npl = new ProbabilityLine(); + npl.mineCount = mc; + } + npl.solutionCount = npl.solutionCount.add(pl.solutionCount); + + for (int i = 0; i < pl.mineBoxCount.length; i++) { + npl.mineBoxCount[i] = npl.mineBoxCount[i].add(pl.mineBoxCount[i]); + } + } + + heldProbs.add(npl); + + + } + + // here we calculate the total number of candidate solutions left in the game + private void calculateBoxProbabilities() { + + // total game tally + BigInteger totalTally = BigInteger.ZERO; + + // outside a box tally + BigInteger outsideTally = BigInteger.ZERO; + + boolean[] emptyBox = new boolean[boxCount]; + for (int i=0; i < emptyBox.length; i++) { + emptyBox[i] = true; + } + + // calculate how many mines + for (ProbabilityLine pl: heldProbs) { + + if (pl.mineCount >= minTotalMines) { // if the mine count for this solution is less than the minimum it can't be valid + + if (mineCounts.put(pl.mineCount, pl.solutionCount) != null) { + System.out.println("Duplicate mines in probability Engine"); + } + + BigInteger mult = Solver.combination(minesLeft - pl.mineCount, squaresLeft); //# of ways the rest of the board can be formed + + outsideTally = outsideTally.add(mult.multiply(BigInteger.valueOf(minesLeft - pl.mineCount)).multiply(pl.solutionCount)); + + // this is all the possible ways the mines can be placed across the whole game + totalTally = totalTally.add(mult.multiply(pl.solutionCount)); + + for (int i=0; i < emptyBox.length; i++) { + if (pl.mineBoxCount[i].signum() != 0) { + emptyBox[i] = false; + } + } + } + } + + // determine how many clear squares there are + if (totalTally.signum() > 0) { + for (int i=0; i < emptyBox.length; i++) { + if (emptyBox[i]) { + clearCount = clearCount + boxes.get(i).getSquares().size(); + + for (Square sq: boxes.get(i).getSquares()) { + if (!deadLocations.contains(sq)) { + livingClearCount++; + } + } + + if (boxes.get(i).getSquares().size() > 0) { + emptyBoxes.add(boxes.get(i)); + } + } + } + } + + //solver.display("Game has " + clearCount + " clears available"); + finalSolutionsCount = totalTally; + + //solver.display("Number of solutions is " + finalSolutionsCount); + + + } + + + + private List mergeProbabilities(NextWitness nw) { + + List newProbs = new ArrayList<>(); + + for (ProbabilityLine pl: workingProbs) { + + int missingMines = nw.witness.getMines() - countPlacedMines(pl, nw); + + if (missingMines < 0) { + // too many mines placed around this witness previously, so this probability can't be valid + } else if (missingMines == 0) { + newProbs.add(pl); // witness already exactly satisfied, so nothing to do + } else if (nw.newBoxes.isEmpty()) { + // nowhere to put the new mines, so this probability can't be valid + } else { + newProbs.addAll(distributeMissingMines(pl, nw, missingMines, 0)); + } + + } + + //solver.display("Processed witness " + nw.witness.display()); + + // flag the last set of details as processed + nw.witness.setProcessed(true); + for (Box b: nw.newBoxes) { + b.setProcessed(true); + } + + //if we haven't compressed yet and we are still a small edge then don't compress + if (newProbs.size() < 50 && canDoDeadTileAnalysis) { + return newProbs; + } + + // about to compress the line + canDoDeadTileAnalysis = false; + + List boundaryBoxes = new ArrayList<>(); + for (Box box: boxes) { + boolean notProcessed = false; + boolean processed = false; + for (Witness wit: box.getWitnesses()) { + if (wit.isProcessed()) { + processed = true; + } else { + notProcessed = true; + } + if (processed && notProcessed) { + //boardState.display("partially processed box " + box.getUID()); + boundaryBoxes.add(box); + break; + } + } + } + //solver.display("Boxes partially processed " + boundaryBoxes.size()); + + MergeSorter sorter = new MergeSorter(boundaryBoxes); + + newProbs = crunchByMineCount(newProbs, sorter); + + return newProbs; + + + } + + // this is used to recursively place the missing Mines into the available boxes for the probability line + private List distributeMissingMines(ProbabilityLine pl, NextWitness nw, int missingMines, int index) { + + recursions++; + if (recursions % 10000 == 0) { + boardState.getLogger().log(Level.WARN, "Probability Engine recursion exceeding %d iterations", recursions); + } + + List result = new ArrayList<>(); + + Box box = nw.newBoxes.get(index); + + // if there is only one box left to put the missing mines we have reach this end of this branch of recursion + if (nw.newBoxes.size() - index == 1) { + // if there are too many for this box then the probability can't be valid + if (box.getMaxMines() < missingMines) { + return result; + } + + // if there are too few for this box then the probability can't be valid + if (box.getMinMines() > missingMines) { + return result; + } + // if there are too many for this game then the probability can't be valid + if (pl.mineCount + missingMines > maxTotalMines) { + return result; + } + + // otherwise place the mines in the probability line + result.add(extendProbabilityLine(pl, box, missingMines)); + return result; + } + + // this is the recursion + int maxToPlace = Math.min(box.getMaxMines(), missingMines); + + for (int i=box.getMinMines(); i <= maxToPlace; i++) { + ProbabilityLine npl = extendProbabilityLine(pl, box, i); + + result.addAll(distributeMissingMines(npl, nw, missingMines - i, index + 1)); + } + + + return result; + + } + + // create a new probability line by taking the old and adding the mines to the new Box + private ProbabilityLine extendProbabilityLine(ProbabilityLine pl, Box newBox, int mines) { + + // reduce the number of tile which can have mines by the number we know are empty + int modifiedTilesCount = newBox.getSquares().size() - newBox.getEmptyTiles(); + + //int combination = SMALL_COMBINATIONS[newBox.getSquares().size()][mines]; + int combination = SMALL_COMBINATIONS[modifiedTilesCount][mines]; + + BigInteger newSolutionCount = pl.solutionCount.multiply(BigInteger.valueOf(combination)); + + ProbabilityLine result = new ProbabilityLine(newSolutionCount); + + result.mineCount = pl.mineCount + mines; + + // copy the probability array + if (combination == 1) { + System.arraycopy(pl.mineBoxCount, 0, result.mineBoxCount, 0, pl.mineBoxCount.length); + } else { + BigInteger multiplier = BigInteger.valueOf(combination); + for (int i=0; i < pl.mineBoxCount.length; i++) { + if (mask[i]) { + result.mineBoxCount[i] = pl.mineBoxCount[i].multiply(multiplier); + } + } + } + + result.allocatedMines = pl.allocatedMines.clone(); + + result.mineBoxCount[newBox.getUID()] = BigInteger.valueOf(mines).multiply(newSolutionCount); + result.allocatedMines[newBox.getUID()] = mines; + + return result; + } + + // counts the number of mines already placed + private int countPlacedMines(ProbabilityLine pl, NextWitness nw) { + + BigInteger result = BigInteger.ZERO; + + for (Box b: nw.oldBoxes) { + result = result.add(pl.mineBoxCount[b.getUID()]); + } + + BigInteger[] divide = result.divideAndRemainder(pl.solutionCount); + if (divide[1].signum() != 0) { + System.out.println("Min Box Count divide has non-zero remainder " + divide[1]); + } + + return divide[0].intValue(); + } + + // return any witness which hasn't been processed + private NextWitness findFirstWitness() { + + for (Witness w: witnesses) { + if (!w.isProcessed()) { + return new NextWitness(w); + } + } + + // if we are here all witness have been processed + return null; + + } + + + // look for the next witness to process + private NextWitness findNextWitness(NextWitness prevWitness) { + + int bestTodo = 99999; + Witness bestWitness = null; + + // and find a witness which is on the boundary of what has already been processed + for (Box b: boxes) { + if (b.isProcessed()) { + for (Witness w: b.getWitnesses()) { + if (!w.isProcessed()) { + int todo = 0; + for (Box b1: w.getBoxes()) { + if (!b1.isProcessed()) { + todo++; + } + } + if (todo == 0) { + return new NextWitness(w); + } else if (todo < bestTodo) { + bestTodo = todo; + bestWitness = w; + } + } + } + } + } + + if (bestWitness != null) { + return new NextWitness(bestWitness); + } + + // if we are down here then there is no witness which is on the boundary, so we have processed a complete set of independent witnesses + + independentGroups++; + + // since we have calculated all the mines in an independent set of witnesses we can crunch them down and store them for later + + // before we crunch everything down check for dead tiles + if (CHECK_FOR_DEAD_LOCATIONS) { + checkCandidateDeadLocations(canDoDeadTileAnalysis); + //checkEdgeIsDead(); + } + + + // if we haven't compressed yet then do it now + if (canDoDeadTileAnalysis) { + MergeSorter sorter = new MergeSorter(); + workingProbs = crunchByMineCount(workingProbs, sorter); + } else { + canDoDeadTileAnalysis = true; + } + + // get an unprocessed witness + NextWitness nw = findFirstWitness(); + + // only crunch it down for non-trivial probability lines unless it is the last set - this is an efficiency decision + //if (workingProbs.size() > 0 || nw == null) { + storeProbabilities(); + + // reset the working array so we can start building up one for the new set of witnesses + workingProbs.clear(); + workingProbs.add(new ProbabilityLine(BigInteger.ONE)); + + // reset the mask indicating that no boxes have been processed + mask = new boolean[boxCount]; + //} + + // if the position is invalid exit now + if (heldProbs.isEmpty()) { + return null; + } + + // return the next witness to process + return nw; + + } + + private void checkCandidateDeadLocations(boolean checkPossible) { + + boolean completeScan; + if (squaresLeft == 0) { + completeScan = true; // this indicates that every box has been considered in one sweep (only 1 independent edge) + for (int i=0; i < mask.length; i++) { + if (!mask[i]) { + completeScan = false; + break; + } + } + if (completeScan) { + display("This is a complete scan"); + } else { + display("This is not a complete scan"); + } + } else { + completeScan = false; + display("This is not a complete scan because there are squares off the edge"); + } + + + for (DeadCandidate dc: deadCandidates) { + + if (dc.isAlive) { // if this location isn't dead then no need to check any more + continue; + } + + // only do the check if all the boxes have been analysed in this probability iteration + int boxesInScope = 0; + for (Box b: dc.goodBoxes) { + if (mask[b.getUID()]) { + boxesInScope++; + } + } + for (Box b: dc.badBoxes) { + if (mask[b.getUID()]) { + boxesInScope++; + } + } + if (boxesInScope == 0) { + continue; + } else if (boxesInScope != dc.goodBoxes.size() + dc.badBoxes.size()) { + display("Location " + dc.candidate.toString() + " has some boxes in scope and some out of scope so assumed alive"); + dc.isAlive = true; + continue; + } + + //if we can't do the check because the edge has been compressed mid process then assume alive + if (!checkPossible) { + display("Location " + dc.candidate.toString() + " was on compressed edge so assumed alive"); + dc.isAlive = true; + continue; + } + + boolean okay = true; + int mineCount = 0; + line: for (ProbabilityLine pl: workingProbs) { + + if (completeScan && pl.mineCount != minesLeft) { + continue; + } + + // ignore probability lines where the candidate is a mine + //if (pl.mineBoxCount[dc.myBox.getUID()].compareTo(BigInteger.valueOf(dc.myBox.getSquares().size())) == 0) { + if (pl.allocatedMines[dc.myBox.getUID()] == dc.myBox.getSquares().size()) { + //boardState.display("Location " + dc.candidate.display() + " I'm a mine on this Probability line"); + mineCount++; + continue line; + } + + + // all the bad boxes must be zero + for (Box b: dc.badBoxes) { + + BigInteger requiredMines; + //int requiredMines; + if (b.getUID() == dc.myBox.getUID()) { + requiredMines = BigInteger.valueOf(b.getSquares().size() - 1).multiply(pl.solutionCount); + } else { + requiredMines = BigInteger.valueOf(b.getSquares().size()).multiply(pl.solutionCount); + } + + if (pl.mineBoxCount[b.getUID()].signum() != 0 && pl.mineBoxCount[b.getUID()].compareTo(requiredMines) != 0) { + display("Location " + dc.candidate.toString() + " is not dead because a bad box is neither empty nor full of mines"); + okay = false; + break line; + } + } + + //BigInteger tally = BigInteger.ZERO; + int tally = 0; + // the number of mines in the good boxes must always be the same + for (Box b: dc.goodBoxes) { + //tally = tally.add(pl.mineBoxCount[b.getUID()]); + tally = tally + pl.allocatedMines[b.getUID()]; + } + //boardState.display("Location " + dc.candidate.display() + " has mine tally " + tally); + if (dc.firstCheck) { + dc.total = tally; + dc.firstCheck = false; + } else { + if (dc.total != tally) { + display("Location " + dc.candidate.toString() + " is not dead because the sum of mines in good boxes is not constant. Was " + + dc.total + " now " + tally + ". Mines in probability line " + pl.mineCount); + okay = false; + break; + } + } + } + + // if a check failed or this tile is a mine for every solution then it is alive + if (!okay || mineCount == this.workingProbs.size()) { + dc.isAlive = true; + } else { + // add the dead locations we found + deadLocations = deadLocations.add(dc.candidate); + display(dc.candidate.toString() + " is dead"); + } + + } + + } + + private void determineCandidateDeadLocations() { + + // for each square on the edge + for (Square loc: web.getSquares()) { + + List boxes = getAdjacentBoxes(loc); + + if (boxes == null) { // this happens when the square isn't fully surrounded by boxes + continue; + } + + DeadCandidate dc = new DeadCandidate(); + dc.candidate = loc; + dc.myBox = getBox(loc); + + for (Box box: boxes) { + + boolean good = true; + for (Square square: box.getSquares()) { + if (!square.isAdjacent(loc) && !square.equals(loc)) { + good = false; + break; + } + } + if (good) { + dc.goodBoxes.add(box); // a good adjacent box is where all its Tiles are adjacent to the candidate + } else { + dc.badBoxes.add(box); // otherwise it is a bad box + } + + } + + // if the tile has no boxes adjacent to it then it is already dead (i.e. surrounded by mines and witnesses only) + if (dc.goodBoxes.isEmpty() && dc.badBoxes.isEmpty()) { + deadLocations = deadLocations.add(dc.candidate); + display(dc.candidate.toString() + " is dead since it has no open tiles around it"); + } else { + deadCandidates.add(dc); + } + + } + + for (DeadCandidate dc: deadCandidates) { + display(dc.candidate.toString() + " is candidate dead with " + dc.goodBoxes.size() + " good boxes and " + dc.badBoxes.size() + " bad boxes"); + } + + } + + private List getAdjacentBoxes(Location loc) { + + List result = new ArrayList<>(); + + //int sizeOfBoxes = 0; + + // get each adjacent location + for (Location adjLoc: boardState.getAdjacentUnrevealedSquares(loc)) { + + // find the box it is in + boolean boxFound = false; + for (Box box: web.getBoxes()) { + if (box.contains(adjLoc)) { + boxFound = true; + // is the box already included? + boolean found = false; + for (Box oldBox: result) { + if (box.getUID() == oldBox.getUID()) { + found = true; + break; + } + } + // if not add it + if (!found) { + result.add(box); + } + } + } + + // if a box can't be found for the adjacent square then the location can't be dead + if (!boxFound) { + return null; + } + + } + + return result; + + } + + private Box getBox(Location l) { + + for (Box b: boxes) { + if (b.contains(l)) { + return b; + } + } + + return null; + } + + private void display(String text) { + //solver.display(text); + } + + // forces a box to contain a tile chich isn't a mine. If the location isn't in a box false is returned. If the box can't support zero mines false is returned. + public boolean setMustBeEmpty(Location loc) { + Box box = getBox(loc); + + if (box == null) { // if the tile isn't on the edge then adjust the off edge values + this.squaresLeft--; + //this.minTotalMines++; + this.minTotalMines = Math.max(0, minesLeft - this.squaresLeft); //we can't use so few mines that we can't fit the remainder elsewhere on the board + + //this.valid = false; + //return false; + //} else if (box.getMinMines() != 0) { + // this.valid = false; + // return false; + } else { + box.incrementEmptyTiles(); + } + + return true; + } + + + /** + * The number of ways the mines can be placed in the game position + * @return + */ + protected BigInteger getSolutionCount() { + return finalSolutionsCount; + } + + /** + * The number of locations which are definitely clears + * @return + */ + protected int getClearCount() { + return clearCount; + } + + /** + * The number of locations which are definitely clears and also living + * @return + */ + protected int getLivingClearCount() { + return livingClearCount; + } + + /** + * The boxes which contain no mines + * @return + */ + protected List getEmptyBoxes() { + return emptyBoxes; + } + + /** + * The duration to do the processing in milliseconds + * @return + */ + protected long getDuration() { + return this.duration; + } + + /** + * How many independent groups we encountered in the processing + * @return + */ + protected long getIndependentGroups() { + return this.independentGroups; + } + + protected Map getValidMineCounts() { + return mineCounts; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Solver.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Solver.java new file mode 100644 index 0000000..109c864 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/Solver.java @@ -0,0 +1,2150 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import Asynchronous.Asynchronous; +import minesweeper.gamestate.GameStateModel; +import minesweeper.gamestate.MoveMethod; +import minesweeper.solver.RolloutGenerator.Adversarial; +import minesweeper.solver.coach.CoachModel; +import minesweeper.solver.coach.CoachSilent; +import minesweeper.solver.constructs.CandidateLocation; +import minesweeper.solver.constructs.EvaluatedLocation; +import minesweeper.solver.constructs.InformationLocation; +import minesweeper.solver.constructs.WitnessData; +import minesweeper.solver.iterator.Iterator; +import minesweeper.solver.iterator.SequentialIterator; +import minesweeper.solver.settings.PlayStyle; +import minesweeper.solver.settings.SolverSettings; +import minesweeper.solver.settings.SolverSettings.GuessMethod; +import minesweeper.solver.utility.Binomial; +import minesweeper.solver.utility.Logger; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.solver.utility.ProgressMonitor; +import minesweeper.structure.Action; +import minesweeper.structure.Area; +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class Solver implements Asynchronous { + + + public final static String VERSION = "1.05"; + + + // used to hold valid moves which are about to be passed out of the solver + private class FinalMoves { + + Action[] result = new Action[0]; + int suppressedFlags = 0; // number of place flag moves suppressed because of playing Flag Free + boolean moveFound = false; // this is set to true if a move is found, even if it is suppressed + + private FinalMoves(Action...actions) { + result = actions; + moveFound = (actions.length > 0); + } + + } + + private class LoopCheck implements Runnable { + + private boolean finished = false; + + @Override + public void run() { + + int countDown = 100; + + while (countDown > 0 && !finished) { + try { + Thread.sleep(20); + } catch (InterruptedException e) { + } + countDown--; + } + + if (!finished) { + System.out.println(myGame.showGameKey() + " might be looping"); + } + + } + + public void finishedOkay() { + finished = true; + } + + } + + + public final static int DP = 20; + + public final static BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100); + + + final static BigDecimal OFF_EDGE_TOLERENCE = new BigDecimal("0.95"); // was 0.98 --- consider off edge tiles which if they are above the threshold of the best on edge tile + final static boolean PRUNE_BF_ANALYSIS = true; + final static boolean CONSIDER_HIGH_DENSITY_STRATEGY = false; + + public final static BigDecimal PROGRESS_VALUE = new BigDecimal("0.20"); // how much 100% Progress is worth as a proportion of Safety + final static BigDecimal PROB_ENGINE_HARD_TOLERENCE = new BigDecimal("0.90"); // consider tiles on the edge with a threshold of this from the best value + final static BigDecimal PROGRESS_MULTIPLIER = BigDecimal.ONE.add(PROGRESS_VALUE); + //final static BigDecimal OFF_EDGE_TOLERENCE = BigDecimal.ONE.subtract(PROGRESS_VALUE); // consider off edge tiles which if they are above the threshold of the best on edge tile + + final static BigDecimal PROB_ENGINE_TOLERENCE = BigDecimal.ONE.subtract(PROGRESS_VALUE).max(PROB_ENGINE_HARD_TOLERENCE); + //final static BigDecimal PROB_ENGINE_TOLERENCE = new BigDecimal("0.85"); // for experimental tiebreak + + // won't play the book opening on start if false + //protected final static boolean PLAY_OPENING = true; + + /** + * If the number of iterations is less than this then process sequential else go parallel + */ + final static BigInteger PARALLEL_MINIMUM = new BigInteger("10000"); + + final static int CORES = Runtime.getRuntime().availableProcessors(); + + + // a binomial coefficient generator which allows up to (choose n from 1000000) and builds a cache of everything up to (choose n from 100) + static Binomial binomialEngine = new Binomial(1000000, 500); + + + protected final SolverSettings preferences; + protected final Logger logger; + + // the class that knows the real board layout, which squares have been revealed and where the flags are + private final GameStateModel myGame; + + // a class which can be used to display the summary information generated by the solver + private final CoachModel coachDisplay; + + // a class which holds the solves current view of the board + private final BoardState boardState; + private ProbabilityEngineModel pe; + private BruteForce bf; + + private BruteForceAnalysisModel bruteForceAnalysis; + private LocationEvaluator evaluateLocations; + + private BigDecimal offEdgeProb; + + private List bfdaStartLocations = null; + + private List allWitnesses; + private Area allWitnessedSquares; + private Area deadLocations; + + + // work areas + private boolean[] workRestNotFlags; + private boolean[] workRestNotClear; + + + private Location overriddenStartLocation; + + private final boolean interactive; + + private FinalMoves answer; + + private PlayStyle playStyle = PlayStyle.FLAGGED; + + // used to indicate that the solver shouldn't bother placing flags on the board + // this is considered expert tactics because it reduces the number of mouse actions. + //private boolean flagFree = false; + + // playing chords will make the solver run slower, but should result in less moves + // it is suggested to play chords if playing an external boarding using mouse controller and you wish to look impressive + //private boolean playChords = false; + + // Shows the best tree in sysout from Brute Force Deep analysis + private boolean showProbabilityTree = false; + + // won't play the book opening on start if false + private boolean playOpening = true; + + private boolean early5050Check = false; + + // If we are only interested in the win rate we can cheat when we encounter isolated edges + // if there is x chance of surviving the edge then + private boolean winRateOnly = false; + private BigDecimal winValue = BigDecimal.ONE; + + /** + * Start the solver without a coach display + */ + public Solver(GameStateModel myGame, SolverSettings preferences, boolean interactive) { + this(myGame, preferences, new CoachSilent(), interactive); + } + + /** + * Start the solver with a coach display + * @param myGame + * @param preferences + * @param interactive + */ + public Solver(GameStateModel myGame, SolverSettings preferences, CoachModel coachDisplay, boolean interactive) { + + this.myGame = myGame; + this.interactive = interactive; + this.preferences = preferences.lockSettings(); + + if (this.interactive) { + this.logger = new Logger(Level.INFO, "Solver"); + } else { + this.logger = new Logger(Level.ERROR, "Solver"); + } + + this.overriddenStartLocation = preferences.getStartLocation(); + + this.boardState = new BoardState(this); + boardState.process(); + + logger.log(Level.INFO, "Running with %d Cores", CORES); + logger.log(Level.INFO, "Max memory available to JVM %d", Runtime.getRuntime().maxMemory()); + logger.log(Level.INFO, "Free Memory available to JVM %d", Runtime.getRuntime().freeMemory()); + logger.log(Level.INFO, "Solving game %s", myGame.showGameKey()); + + this.coachDisplay = coachDisplay; + + List witnesses = new ArrayList<>(500); + for (int x=0; x < myGame.getWidth(); x++) { + for (int y=0; y < myGame.getHeight(); y++) { + Location l = boardState.getLocation(x,y); + if (myGame.query(l) != GameStateModel.FLAG && myGame.query(l) != GameStateModel.HIDDEN) { + witnesses.add(l); + } + } + } + logger.log(Level.DEBUG, "Found %d witnesses already in the game", witnesses.size()); + + } + + + // Start of Asynchronous methods + @Override + public void start() { + + LoopCheck check = new LoopCheck(); + + Thread checkThread = new Thread(check); + checkThread.start(); + + int loopSafe = 0; + + answer = newProcess(); + while (answer.moveFound && answer.result.length == 0) { + if (loopSafe++ >= 5) { + this.logger.log(Level.WARN, "LOOPSAFE check!! - exiting the processing after %d iterations", loopSafe); + break; + } + logger.log(Level.DEBUG, "There are no moves provided ( %d have been supressed) - rerunning the solver", answer.suppressedFlags ); + answer = newProcess(); + } + + check.finishedOkay(); + + } + + @Override + public void requestStop() { + } + + @Override + public Action[] getResult() { + return answer.result; + } + // end of Asynchronous methods + + public BigDecimal getWinValue() { + return this.winValue; + } + + /** + * Return a list of Tiles which were considered when picking a guess + * @return + */ + public List getEvaluatedLocations() { + if (evaluateLocations == null) { + return null; + } else { + return evaluateLocations.getEvaluatedLocations(); + } + } + + /** + * Return an Area containing locations which are determined to be dead + * @return + */ + public Area getDeadLocations() { + if (deadLocations == null) { + return null; + } else { + return deadLocations; + } + } + + /** + * True indicates the solver shouldn't place flags + * @param flagFree + */ + + //public void setFlagFree(boolean flagFree) { + // this.flagFree = flagFree; + //} + + //public boolean isFlagFree() { + // return this.flagFree; + //} + + /** + * True indicates the solver should play the opening move at the start + * @param flagFree + */ + public void setPlayOpening(boolean playOpening) { + this.playOpening = playOpening; + } + + /** + * Use this to override the default start location (which depends on the game type being played) + * @param startLocation + */ + //public void setStartLocation(Location startLocation) { + // overriddenStartLocation = startLocation; + //} + + /** + * Sets the solver play style + */ + public void setPlayStyle(PlayStyle playStyle) { + this.playStyle = playStyle; + } + + public PlayStyle getPlayStyle() { + return this.playStyle; + } + + + public void setShowProbabilityTree(boolean showTree) { + this.showProbabilityTree = showTree; + } + + public boolean isShowProbabilityTree() { + return this.showProbabilityTree; + } + + public void setBFDAStartLocations(List start) { + this.bfdaStartLocations = start; + } + + List bfdaStartLocations() { + return bfdaStartLocations; + } + + private FinalMoves newProcess() { + + FinalMoves fm = doNewProcess(); + + if (fm.result.length > 0) { + newLine("---------- Recommended Move ----------"); + newLine(fm.result[0].toString()); + newLine("---------- Analysis Ended -----------"); + } + + if (boardState.getTestMoveBalance() != 0) { + this.logger.log(Level.ERROR, "Test moves are not being set and reset in pairs!! Balance = %d", boardState.getTestMoveBalance()); + + } + + return fm; + } + + + private FinalMoves doNewProcess() { + + this.logger.log(Level.INFO, "--- Starting Analysis ---"); + + Action[] result = null; + + FinalMoves fm = new FinalMoves(); + + long time1 = System.currentTimeMillis(); + + coachDisplay.clearScreen(); + pe = null; + bf = null; + evaluateLocations = null; + deadLocations = null; + + if (myGame.getGameState() == GameStateModel.LOST) { + topLine("The game has been lost, so no further analysis is possible"); + if (myGame.supports3BV()) { + newLine("3BV value " + myGame.getTotal3BV()); + newLine("3BV solved " + myGame.getCleared3BV()); + newLine("Action Count " + myGame.getActionCount()); + double eff = ((10000 * myGame.getCleared3BV()) / myGame.getActionCount()) / 100d; + newLine("Efficiency is " + eff + "%"); + } + return fm; + } + + if (myGame.getGameState() == GameStateModel.WON) { + topLine("The game has been won, so no further analysis is required"); + if (myGame.supports3BV()) { + newLine("3BV value " + myGame.getTotal3BV()); + newLine("3BV solved " + myGame.getCleared3BV()); + newLine("Action Count " + myGame.getActionCount()); + double eff = ((10000 * myGame.getTotal3BV()) / myGame.getActionCount()) / 100d; + newLine("Efficiency is " + eff + "%"); + } + return fm; + } + + // query the game State object to get the current board position + boardState.process(); + + // being asked to start the game + if (myGame.getGameState() == GameStateModel.NOT_STARTED && playOpening) { + + if (myGame.safeOpening()) { + offEdgeProb = BigDecimal.ONE; + } else { + offEdgeProb = BigDecimal.ONE.subtract(BigDecimal.valueOf(myGame.getMinesLeft()).divide(BigDecimal.valueOf(myGame.getHidden()), Solver.DP, RoundingMode.HALF_UP)); + } + + fm = guess(null); + + newLine("This is the first move"); + newLine("Note: if you aren't accepting guesses nothing will happen!"); + newLine("---------- Recommended Move ----------"); + newLine(fm.result[0].toString()); + newLine("---------- Analysis Ended -----------"); + + return fm; + } + + // are we walking down a brute force deep analysis tree? + if (bruteForceAnalysis != null) { + Location expectedMove = bruteForceAnalysis.getExpectedMove(); + if (bruteForceAnalysis.isShallow() || expectedMove == null) { // if the analysis was shallow then don't rely on it + bruteForceAnalysis = null; + } else { + if (expectedMove != null && !boardState.isRevealed(expectedMove)) { // we haven't played the recommended move - so the analysis is probably useless + this.logger.log(Level.INFO, "The expected Brute Force Analysis move %s wasn't played", expectedMove ); + bruteForceAnalysis = null; + } else { + if (myGame.query(expectedMove) != 0) { + Action move = bruteForceAnalysis.getNextMove(boardState); + if (move != null) { + this.logger.log(Level.INFO, "Brute Force Deep Analysis move is %s", move); + newLine("-------- Brute Force Deep Analysis Tree --------"); + newLine(move.toString()); + newLine("-------- Brute Force Deep Analysis Tree---------"); + return new FinalMoves(move); + } + } else { + this.logger.log(Level.INFO, "After a zero the board can be in an unexpected state, so cancelling Brute Force Analysis moves"); + bruteForceAnalysis = null; + } + + } + } + } + + int unrevealed = boardState.getTotalUnrevealedCount(); + + allWitnesses = boardState.getAllLivingWitnesses(); + allWitnessedSquares = boardState.getUnrevealedArea(allWitnesses); + + + newLine("----------- Game Situation -----------"); + newLine("There are " + allWitnesses.size() + " witness(es)"); + newLine("There are " + allWitnessedSquares.size() + " square(s) witnessed, out of " + unrevealed); + + if (unrevealed == 0) { + newLine("Nothing to analyse!"); + //return fm; + } + + // are the flags in the correct place? + if (coachDisplay.analyseFlags() && boardState.getTotalFlagCount() > 0) { + //newLine("---------- Flag Analysis -----------"); + if (boardState.getConfirmedMineCount() == boardState.getTotalFlagCount()) { + coachDisplay.setOkay(); + newLine("All " + boardState.getTotalFlagCount() + " flags have been confirmed as correct"); + } else { + newLine((boardState.getTotalFlagCount() - boardState.getConfirmedMineCount()) + " flags can not be confirmed as correct"); + if (boardState.validateData()) { + coachDisplay.setWarn(); + } else { + newLine("At least 1 flag is definitely wrong!"); + coachDisplay.setError(); + } + } + } else { + coachDisplay.setOkay(); + } + + int totalMinesConfirmed = boardState.getConfirmedMineCount(); + + // Build a web of all the witnesses still useful and all the un-revealed tiles adjacent to them + WitnessWeb wholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations()); + + int obvious = 0; + int lessObvious = 0; + + obvious = findTrivialActions(wholeEdge.getPrunedWitnesses()); + + long time2 = System.currentTimeMillis(); + + lessObvious = findLocalActions(wholeEdge.getPrunedWitnesses()); + + long time3 = System.currentTimeMillis(); + + // output some text describing the results + + int displayObvious = obvious + boardState.getUnplayedMoves(MoveMethod.TRIVIAL); + int displayLessObvious = lessObvious + boardState.getUnplayedMoves(MoveMethod.LOCAL); + + newLine("----------- Basic Analysis -----------"); + newLine("There are " + displayObvious + " trivial moves found in " + (time2 - time1) + " milliseconds"); + newLine("There are " + displayLessObvious + " locally certain moves found in " + (time3 - time2) + " milliseconds"); + + this.logger.log(Level.INFO, "There are %d trivial / locally discoverable certain moves", (displayObvious + displayLessObvious)); + + if (this.playStyle.efficiency || early5050Check) { + + fm = new FinalMoves(new Action[0]); + + // we can't do the probability engine if extra mines have been found ... so return empty and try again + if (boardState.getConfirmedMineCount() != totalMinesConfirmed) { + fm.moveFound = true; + } else { + fm.moveFound = false; // otherwise push on to the probability engine + } + + } else { + fm = new FinalMoves(boardState.getActions().toArray(new Action[0])); + + if (obvious + lessObvious > 0) { // in flag free mode we can find moves which we don't play + fm.moveFound = true; + } + } + + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + if (interactive) { // can be expensive to do this, so only if we are actually going to display it + BigInteger comb = combination(minesLeft, unrevealed); + this.logger.log(Level.INFO, "Combinations: choose %d from %d gives %d", minesLeft, unrevealed, comb); + } + + // leave at this point if we have got something to do + if (fm.moveFound) { + return fm; + } + + // If no trivial, local, or unavoidable guess then use the probability engine + + + // find (some) dead locations on the board - these can be ignored when looking for a good guess + deadLocations = Area.EMPTY_AREA; + + this.logger.log(Level.INFO, "----- Starting probability engine -----"); + + pe = new ProbabilityEngineFast(boardState, wholeEdge, unrevealed, minesLeft); + pe.process(); + + // get the new deadLocations with any found by the probability engine + deadLocations = pe.getDeadLocations(); + + offEdgeProb = pe.getOffEdgeProb(); + + if (offEdgeProb.compareTo(BigDecimal.ONE) > 0) { + this.logger.log(Level.ERROR, "Game %s has probability off edge of %f", myGame.showGameKey(), offEdgeProb); + } else { + this.logger.log(Level.INFO, "Probability off edge is %f", offEdgeProb); + } + + this.logger.log(Level.INFO, "All Dead %b and dead locations %d", pe.allDead(), deadLocations.size() ); + // if all the locations are dead then just use any one (unless there is only one solution) + if (pe.allDead() && deadLocations.size() != 0) { + if (pe.getSolutionCount().compareTo(BigInteger.ONE) == 0) { + this.logger.log(Level.INFO, "Only one solution left"); + } else { + this.logger.log(Level.INFO, "All locations are dead"); + } + + if (winRateOnly) { + BigDecimal chance = BigDecimal.ONE.divide(new BigDecimal(pe.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + fm = identifyLocations(deadLocations.getLocations(), chance); + if (fm != null) { + return fm; + } + } + + // if there are no squares next to a witness then just guess + if (allWitnessedSquares.getLocations().isEmpty()) { + return guess(wholeEdge); + } + + // pick any tile since they're all dead + Location picked = null; + for (Location tile: allWitnessedSquares.getLocations()) { // get any tile + if (pe.getProbability(tile).signum() != 0) { + picked = tile; + break; + } + } + + + CandidateLocation cl = new CandidateLocation(picked.x, picked.y, pe.getProbability(picked), 0, 0); + Action a = cl.buildAction(MoveMethod.GUESS); + // let the boardState decide what to do with this action + boardState.setAction(a); + + result = boardState.getActions().toArray(new Action[0]); + + fm = new FinalMoves(result); + return fm; + } + + // fetch the best candidates from the edge. If high density only get the best tiles + List bestCandidates; + if (boardState.isHighDensity()) { + bestCandidates = pe.getBestCandidates(BigDecimal.ONE, true); + //} else if (preferences.isExperimentalScoring()) { + // bestCandidates = pe.getBestCandidates(BigDecimal.valueOf(0.8d), true); + } else { + bestCandidates = pe.getBestCandidates( PROB_ENGINE_TOLERENCE, true); + } + + List allUnrevealedSquares = null; + + BigDecimal offEdgeCutoff = pe.getBestOnEdgeProb().multiply(Solver.OFF_EDGE_TOLERENCE); + + this.logger.log(Level.INFO, "Off edge threshold is %f", offEdgeCutoff); + + // are clears off the edge within the permitted cut-off? + boolean addOffEdgeOptions = (offEdgeProb.compareTo(offEdgeCutoff) > 0); + + this.logger.log(Level.INFO, "Probability Engine processing took %d milliseconds", pe.getDuration()); + this.logger.log(Level.INFO, "----- Probability engine finished -----"); + + newLine("------ Probability Engine Analysis ------"); + newLine("There are " + pe.getIndependentGroups() + " independent edges on the board"); + newLine("Probability Engine processing took " + pe.getDuration() + " milliseconds"); + + if (pe.getSolutionCount().bitLength() < 40) { + newLine("There are " + pe.getSolutionCount() + " candidate solutions remaining"); + } + + boolean certainClearFound = pe.foundCertainty(); + + // look for unavoidable 50/50 here if we are doing early checks + // -7317529077410525620 + if (early5050Check) { + FiftyFiftyHelper fiftyFiftyHelper = null; + if (preferences.isDo5050Check()) { + fiftyFiftyHelper = new FiftyFiftyHelper(boardState, wholeEdge, deadLocations); + Location findFifty = fiftyFiftyHelper.findUnavoidable5050(pe.getMines()); + + if (findFifty != null) { + Action a = new Action(findFifty, Action.CLEAR, MoveMethod.UNAVOIDABLE_GUESS, "Fifty-Fifty", pe.getProbability(findFifty)); + fm = new FinalMoves(a); + + newLine("--------- Unavoidable Guess ---------"); + newLine("An unavoidable guess has been found - playing now to save time"); + this.logger.log(Level.DEBUG, "Fifty/Fifty found in game %s : %s", myGame.showGameKey(), fm.result[0] ); + return fm; + } + } + } + + + // if there are no certain moves then process any Isolated non-dead edges we have found + if (!certainClearFound && !pe.getIsolatedEdges().isEmpty()) { + this.logger.log(Level.INFO, "Processing an Isolated edge"); + newLine("--------- Isolated Area ---------"); + newLine("An isolated area has been found which can be processed separately"); + + // get the smallest isolated area to solve + BruteForce cruncher = null; + for (BruteForce c: pe.getIsolatedEdges()) { + if (cruncher == null || c.getTileCount() < cruncher.getTileCount()) { + cruncher = c; + } + } + + // determine all possible solutions + cruncher.process(); + + if (cruncher.hasRun()) { + + // determine best way to solver them + BruteForceAnalysisModel bfa = cruncher.getBruteForceAnalysis(); + if (bfa != null) { + bfa.process(); + + // if after trying to process the data we can't complete then abandon it + if (!bfa.isComplete()) { + this.logger.log(Level.INFO, "%s Abandoned the Brute Force Analysis after %d steps", myGame.showGameKey(), bfa.getNodeCount() ); + bfa = null; + + } else { // otherwise try and get the best long term move + + //TODO + if (winRateOnly) { + fm = identifyLocations(bfa.getLocations(), bfa.getSolveChance()); + if (fm != null) { + return fm; + } + } + + bruteForceAnalysis = bfa; // by setting this we will walk the tree until completed in subsequent solver calls + + newLine("Built probability tree from " + bruteForceAnalysis.getSolutionCount() + " solutions in " + bruteForceAnalysis.getNodeCount() + " steps"); + Action move = bruteForceAnalysis.getNextMove(boardState); + if (move != null) { + this.logger.log(Level.INFO, "%s Brute Force Analysis: %s", myGame.showGameKey(), move); + //newLine("Brute Force Analysis move is " + move.asString()); + fm = new FinalMoves(move); + return fm; + } else { + if (bruteForceAnalysis.allDead()) { + this.logger.log(Level.INFO, "All Brute Force Analysis moves are dead"); + + // otherwise pick one of the ones on the edge + Location picked = getLowest(bruteForceAnalysis.getDeadLocations().getLocations(), Area.EMPTY_AREA); + + if (picked != null) { + fm = new FinalMoves(new Action(picked, Action.CLEAR, MoveMethod.GUESS, "", pe.getProbability(picked))); + return fm; + } + + } + this.logger.log(Level.WARN, "Game %s Brute Force Analysis: no move found!", myGame.showGameKey()); + } + } + } else { + this.logger.log(Level.WARN, "Game %s Brute Force analysis class is null", myGame.showGameKey()); + } + + } else { + this.logger.log(Level.INFO, "Game %s Brute Force did not run", myGame.showGameKey()); + } + } + + + if (bestCandidates.isEmpty()) { + newLine("The probability engine found no candidate moves on the edge"); + newLine("Probability off the edge is " + Action.FORMAT_2DP.format(offEdgeProb.multiply(ONE_HUNDRED)) + "%"); + } else { + newLine("The probability engine found " + bestCandidates.size() + " candidate moves on the edge"); + } + + BigDecimal safeDensity = BigDecimal.valueOf( (double) (unrevealed - minesLeft) / (double) unrevealed); + this.logger.log(Level.INFO, "Safe density %f", safeDensity); + BigDecimal safeDensity3 = new BigDecimal(pe.getSolutionCount()).multiply(safeDensity).multiply(safeDensity).multiply(safeDensity); + this.logger.log(Level.INFO, "BFDA Solution value %f", safeDensity3); + + // do brute force if the number of candidate solutions is not greater than the allowable maximum + //boolean doBruteForce = (pe.getSolutionCount().compareTo(BigInteger.valueOf(preferences.getBruteForceMaxSolutions())) <= 0); + boolean doBruteForce = (pe.getSolutionCount().compareTo(BigInteger.valueOf(preferences.getBruteForceMaxSolutions())) <= 0) + || (safeDensity3.compareTo(BigDecimal.valueOf(preferences.getBruteForceVariableSolutions())) <= 0); + + //boolean certainFlagFound = !pe.getMines().isEmpty(); + + BruteForceAnalysisModel incompleteBFA = null; // this is used to carry forward an analysis run which didn't complete + + // Probability engine says there are few enough candidate solutions to do a Brute force deep analysis - so lets try + if (doBruteForce && !certainClearFound) { + this.logger.log(Level.INFO, "----- Brute Force starting -----"); + newLine("----------- Brute Force Analysis -----------"); + + allUnrevealedSquares = boardState.getAllUnrevealedSquares(); + + WitnessWeb wholeBoard = new WitnessWeb(boardState, wholeEdge.getPrunedWitnesses(), allUnrevealedSquares); + + bf = new BruteForce(this, boardState, wholeBoard, minesLeft, preferences.getBruteForceMaxIterations(), pe.getSolutionCount().intValue(), "Game"); + + bf.process(); + + if (bf.hasRun()) { + newLine("Found " + bf.getSolutionCount() + " candidate solutions from " + bf.getIterations() + " iterations"); + + // Interpret the brute force data if we have some + this.bruteForceAnalysis = bf.getBruteForceAnalysis(); + if (!bf.hasCertainClear() && bruteForceAnalysis != null) { // if we haven't found some 100% clears and we can do a deeper analysis + + bruteForceAnalysis.process(); + + // if all the locations are dead then just use any one + if (bruteForceAnalysis.allDead()) { + this.logger.log(Level.INFO, "Brute force deep analysis has detected that all locations are dead"); + // if there are no squares next to a witness then just guess + if (allWitnessedSquares.getLocations().isEmpty()) { + return guess(wholeEdge); + } + + // otherwise pick one of the ones on the edge + Location picked = null; + for (Location l: allWitnessedSquares.getLocations()) { + if (pe.getProbability(l).signum() != 0) { // pick a tile which isn't a mine + picked = l; + break; + } + } + if (picked != null) { + CandidateLocation cl = new CandidateLocation(picked.x, picked.y, pe.getProbability(picked), 0, 0); + Action a = cl.buildAction(MoveMethod.GUESS); + // let the boardState decide what to do with this action + boardState.setAction(a); + + result = boardState.getActions().toArray(new Action[0]); + + fm = new FinalMoves(result); + return fm; + } + + } + + + // if after trying to process the data we can't complete then abandon it + if (!bruteForceAnalysis.isComplete()) { + this.logger.log(Level.INFO, "Game %s Abandoned the Brute Force Analysis after %d steps, %d of %d moves analysed", + myGame.showGameKey(), bruteForceAnalysis.getNodeCount(), bruteForceAnalysis.getMovesProcessed(), bruteForceAnalysis.getMovesToProcess()); + incompleteBFA = bruteForceAnalysis; // remember the incomplete analysis + bruteForceAnalysis = null; + + } else { // otherwise try and get the best long term move + + deadLocations = bruteForceAnalysis.getDeadLocations(); + + // do win rate only + if (winRateOnly) { + fm = identifyLocations(bruteForceAnalysis.getLocations(), bruteForceAnalysis.getSolveChance()); + if (fm != null) { + return fm; + } + } + + newLine("Built probability tree from " + bruteForceAnalysis.getSolutionCount() + " solutions in " + bruteForceAnalysis.getNodeCount() + " steps"); + Action move = bruteForceAnalysis.getNextMove(boardState); + if (move != null) { + this.logger.log(Level.DEBUG, "Brute Force Analysis move: %s", move); + fm = new FinalMoves(move); + } else { + this.logger.log(Level.WARN, "Game %s Brute Force Analysis: no move found!", myGame.showGameKey()); + } + } + } + + // if we didn't find a BFDA move (too many solutions or too many nodes searched) + if (!fm.moveFound) { + + if (bestCandidates.isEmpty()) { + newLine("Brute Force didn't find any moves...?"); + } else if (bestCandidates.get(0).getProbability().compareTo(BigDecimal.ONE) == 0) { + newLine("There are " + bestCandidates.size() + " certain moves"); + } else { + newLine("There are no certain moves, so use the best guess"); + } + } + + } else { + newLine("Brute Force rejected - too many iterations to analyse"); + } + this.logger.log(Level.INFO, "----- Brute Force finished -----"); + } + + // look for unavoidable 50/50 + FiftyFiftyHelper fiftyFiftyHelper = null; + if (!certainClearFound && !fm.moveFound && !early5050Check) { + if (preferences.isDo5050Check()) { + fiftyFiftyHelper = new FiftyFiftyHelper(boardState, wholeEdge, deadLocations); + Location findFifty = fiftyFiftyHelper.findUnavoidable5050(pe.getMines()); + + if (findFifty != null) { + Action a = new Action(findFifty, Action.CLEAR, MoveMethod.UNAVOIDABLE_GUESS, "Fifty-Fifty", pe.getProbability(findFifty)); + fm = new FinalMoves(a); + + newLine("--------- Unavoidable Guess ---------"); + newLine("An unavoidable guess has been found - playing now to save time"); + this.logger.log(Level.DEBUG, "Fifty/Fifty found in game %s : %s", myGame.showGameKey(), fm.result[0] ); + return fm; + } + } + } + + // look for pseudo 50-50 guess + LongTermRiskHelper ltr = null; + if (!certainClearFound && !fm.moveFound) { + ltr = new LongTermRiskHelper(boardState, wholeEdge, pe); + if (preferences.isDo5050Check()) { + //Location findFifty = fiftyFiftyHelper.process(pe); + + Location findFifty = ltr.findInfluence(); + + if (findFifty != null) { + Action a = new Action(findFifty, Action.CLEAR, MoveMethod.UNAVOIDABLE_GUESS, "Fifty-Fifty", pe.getProbability(findFifty)); + fm = new FinalMoves(a); + + newLine("--------- Unavoidable Guess ---------"); + newLine("An unavoidable guess has been found - playing now to save time"); + this.logger.log(Level.DEBUG, "Fifty Fifty %s : %s", myGame.showGameKey(), fm.result[0]); + return fm; + } + } + } + + // evaluate positions + if (preferences.getGuessMethod() == GuessMethod.SECONDARY_SAFETY_PROGRESS) { + evaluateLocations = new SecondarySafetyEvaluator(this, boardState, wholeEdge, pe, incompleteBFA, ltr); + } else { + evaluateLocations = new ProgressEvaluator(this, boardState, wholeEdge, pe); + } + + // if we have few enough solutions do an adversarial rollout + if (!fm.moveFound && !certainClearFound && !pe.isBestGuessOffEdge() && pe.getSolutionCount().compareTo(BigInteger.valueOf(preferences.getRolloutSolutions())) < 0) { + + this.logger.log(Level.INFO, "Doing adversarial rollout"); + + long nanoStart = System.nanoTime(); + WitnessWeb arWholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations()); + + RolloutGenerator rolloutGenerator = new RolloutGenerator(boardState, arWholeEdge, unrevealed, minesLeft); + rolloutGenerator.process(); + + List> rolloutResult = rolloutGenerator.adversarial(bestCandidates); + + fm = new FinalMoves(rolloutResult.get(0).original.buildAction(MoveMethod.ROLLOUT)); + + long nanoEnd = System.nanoTime(); + + this.logger.log(Level.INFO, "Adversarial rollout took %f milli seconds", + (nanoEnd - nanoStart) / 1000000 ); + + } + + // if we haven't got a move from the BFDA + if (!fm.moveFound) { + + // no certain moves and we aren't doing tiebreaks + if (!certainClearFound && !preferences.isDoTiebreak()) { + + // if off edge is better than on edge + if (pe.isBestGuessOffEdge()) { + fm = guess(wholeEdge); + } else { + // take the first move + if (bestCandidates.size() != 0) { + for (CandidateLocation cl: bestCandidates) { + Action move = cl.buildAction(MoveMethod.PROBABILITY_ENGINE); + // let the boardState decide what to do with this action + boardState.setAction(move); + break; + } + } else { + for (CandidateLocation cl: pe.getBestCandidates(BigDecimal.ZERO, false)) { // get the best guess even if dead + Action move = cl.buildAction(MoveMethod.PROBABILITY_ENGINE); + // let the boardState decide what to do with this action + boardState.setAction(move); + break; + } + + } + + Action[] moves = boardState.getActions().toArray(new Action[0]); + fm = new FinalMoves(moves); + } + return fm; + } else if (addOffEdgeOptions && !certainClearFound) { // evaluate the off edge moves + this.logger.log(Level.INFO, "Adding the off edge super locations to the candidate moves"); + + if (allUnrevealedSquares == null) { // defer this until we need it, can be expensive + allUnrevealedSquares = boardState.getAllUnrevealedSquares(); + } + + this.logger.log(Level.DEBUG, "About to evaluate best candidates -->"); + evaluateLocations.addLocations(bestCandidates); + evaluateLocations.evaluateOffEdgeCandidates(allUnrevealedSquares); + evaluateLocations.evaluateLocations(); + + this.logger.log(Level.DEBUG, "<-- Done"); + + evaluateLocations.showResults(); + + Action[] moves = evaluateLocations.bestMove(); + fm = new FinalMoves(moves); + + } else if (certainClearFound) { // if there is only one solution or the solutions are certainties + // bestCandidates.size() == 1 || certainClearFound + // register all the moves + for (CandidateLocation cl: bestCandidates) { + Action move = cl.buildAction(MoveMethod.PROBABILITY_ENGINE); + // let the boardState decide what to do with this action + boardState.setAction(move); + + } + + // if all the off edge tiles are safe add them into the board state + if (pe.getOffEdgeProb().compareTo(BigDecimal.ONE) == 0) { + int mineCountClears = 0; + for (Location loc: boardState.getAllUnrevealedSquares()) { + if (!allWitnessedSquares.contains(loc)) { + boardState.setAction(new Action(loc, Action.CLEAR, MoveMethod.PROBABILITY_ENGINE, "", BigDecimal.ONE)); + mineCountClears++; + } + } + //if (mineCountClears > 0 && boardState.getMines() - boardState.getConfirmedFlagCount() > 8) { + // this.logger.log(Level.ALWAYS, "Seed %s has large mine count", myGame.getSeed()); + //} + } + + // if we have a certain clear then also register all the mines + if (certainClearFound) { + this.logger.log(Level.INFO, "Found %d mines using the probability engine", pe.getMines().size()); + for (Location loc: pe.getMines()) { + // let the boardState decide what to do with this action + boardState.setAction(new Action(loc, Action.FLAG, MoveMethod.PROBABILITY_ENGINE, "", BigDecimal.ONE)); + } + + } + + if (this.playStyle.efficiency) { + EfficiencyHelper eff = new EfficiencyHelper(boardState, wholeEdge, boardState.getActions(), pe); + if (this.playStyle.flagless) { + fm = new FinalMoves(eff.processNF().toArray(new Action[0])); + } else { + fm = new FinalMoves(eff.process().toArray(new Action[0])); + } + + } else { + fm = new FinalMoves(boardState.getActions().toArray(new Action[0])); + } + + + } else { // evaluate which of the best candidates to choose + this.logger.log(Level.DEBUG, "About to evaluate best candidates -->"); + evaluateLocations.addLocations(bestCandidates); + evaluateLocations.evaluateLocations(); + this.logger.log(Level.DEBUG, "<-- Done"); + + evaluateLocations.showResults(); + + Action[] moves = evaluateLocations.bestMove(); + fm = new FinalMoves(moves); + + } + + // if still no move then guess + if (!fm.moveFound) { + newLine("No certain, or high probability moves found, guess away from a witness"); + fm = guess(wholeEdge); + } + } + + + return fm; + + } + + /** + * Identify which tiles are safe and which are mines by cheating + */ + private FinalMoves identifyLocations(Collection locs, BigDecimal value) { + + FinalMoves fm; + + if (locs.isEmpty()) { + System.err.println("Nothing to identify"); + } + + List acts = this.myGame.identifyLocations(locs); + if (acts != null) { + for (Action a: acts) { + this.boardState.setAction(a); + } + + this.winValue = this.winValue.multiply(value); + + //fm = new FinalMoves(acts.toArray(new Action[0])); + fm = new FinalMoves(this.boardState.getActions().toArray(new Action[0])); + } else { + fm = null; + } + + return fm; + } + + /** + * Returns the tile with the lowest hash code. This results in a consistent tile being returned. + */ + protected T getLowest(Collection targets, Area deadLocations) { + + T lowest = null; + T lowestLiving = null; + + for (T tile: targets) { + if (lowest == null || lowest.hashCode() > tile.hashCode()) { + lowest = tile; + } + if (deadLocations != null && !deadLocations.contains(tile)) { + if (lowestLiving == null || lowestLiving.hashCode() > tile.hashCode()) { + lowestLiving = tile; + } + } + } + + if (lowestLiving != null) { + return lowestLiving; + } else { + return lowest; + } + + + } + + + /** + * This method will find the number of solutions which satisfy the constraints on the board + */ + public BigInteger getSolutionCount() throws Exception { + + // query the game State object to get the current board position + boardState.process(); + + int unrevealed = boardState.getTotalUnrevealedCount(); + + List allWitnesses = boardState.getAllLivingWitnesses(); + Area allWitnessedSquares = boardState.getUnrevealedArea(allWitnesses); + + // Build a web of all the witnesses still useful and all the un-revealed tiles adjacent to them + WitnessWeb wholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations()); + + if (!wholeEdge.isWebValid()) { + this.logger.log(Level.WARN, "Web is invalid"); + throw new Exception("Board is invalid"); + } + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + this.logger.log(Level.INFO, "Mines left=%d, Unrevealed=%d, Witnesses=%d, Witnessed tiles=%d", minesLeft, unrevealed, allWitnesses.size(), allWitnessedSquares.size()); + + SolutionCounter counter = new SolutionCounter(boardState, wholeEdge, unrevealed, minesLeft); + counter.process(Area.EMPTY_AREA); + + return counter.getSolutionCount(); + + } + + /** + * This method will rollout generator which can be used to construct random boards from this position + */ + public RolloutGenerator getRolloutGenerator() throws Exception { + + // query the game State object to get the current board position + boardState.process(); + + int unrevealed = boardState.getTotalUnrevealedCount(); + + List allWitnesses = boardState.getAllLivingWitnesses(); + Area allWitnessedSquares = boardState.getUnrevealedArea(allWitnesses); + + // Build a web of all the witnesses still useful and all the un-revealed tiles adjacent to them + WitnessWeb wholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations()); + + if (!wholeEdge.isWebValid()) { + this.logger.log(Level.WARN, "Web is invalid"); + throw new Exception("Board is invalid"); + } + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + this.logger.log(Level.INFO, "Mines left=%d, Unrevealed=%d, Witnesses=%d, Witnessed tiles=%d", minesLeft, unrevealed, allWitnesses.size(), allWitnessedSquares.size()); + + RolloutGenerator generator = new RolloutGenerator(boardState, wholeEdge, unrevealed, minesLeft); + generator.process(); + + return generator; + + } + + /** + * This method will find use the probability engine to get all the unrevealed tiles chance of being a mine + */ + public Map runTileAnalysis(ProgressMonitor pm) throws Exception { + + Map result = new HashMap<>(); + + // query the game State object to get the current board position + boardState.process(); + + int unrevealed = boardState.getTotalUnrevealedCount(); + + List allWitnesses = boardState.getAllLivingWitnesses(); + Area allWitnessedSquares = boardState.getUnrevealedArea(allWitnesses); + + // Build a web of all the witnesses still useful and all the un-revealed tiles adjacent to them + WitnessWeb wholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations(), Logger.NO_LOGGING); + + if (!wholeEdge.isWebValid()) { + this.logger.log(Level.WARN, "Web is invalid"); + throw new Exception("Board is invalid"); + } + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + this.logger.log(Level.INFO, "Mines left=%d, Unrevealed=%d, Witnesses=%d, Witnessed tiles=%d", minesLeft, unrevealed, allWitnesses.size(), allWitnessedSquares.size()); + + int maxProgress = boardState.getGameWidth() * boardState.getGameHeight() + 1; + pm.SetMaxProgress("Processing", maxProgress); + int progress = 0; + + ProbabilityEngineModel pe = new ProbabilityEngineFast(boardState, wholeEdge, unrevealed, minesLeft, Logger.NO_LOGGING); + pe.process(); + + // if the tile is flagged and we agree there is a mine there then mark it as discovered + for (Location mine: pe.getMines()) { + //if (boardState.isFlagOnBoard(mine)) { + boardState.setMineFound(mine); + + InformationLocation il = new InformationLocation(mine.x,mine.y); + il.setSafety(BigDecimal.ZERO); + il.calculate(); + result.put(il, il); + //} + } + + System.out.println(pe.getMines().size()); + //this.logger.log(Level.INFO, "Mines found=%d", pe.getMines().size()); + + // if we found some mines then recalculate the witness web + if (pe.getMines().size() > 0) { + boardState.process(); + + unrevealed = boardState.getTotalUnrevealedCount(); + + allWitnesses = boardState.getAllLivingWitnesses(); + allWitnessedSquares = boardState.getUnrevealedArea(allWitnesses); + + minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + // Build a web of all the witnesses still useful and all the un-revealed tiles adjacent to them + wholeEdge = new WitnessWeb(boardState, allWitnesses, allWitnessedSquares.getLocations(), Logger.NO_LOGGING); + + //pe = new ProbabilityEngineFast(boardState, wholeEdge, unrevealed, minesLeft, Logger.NO_LOGGING); + //pe.process(); + } + + + pm.setProgress(++progress); + + LongTermRiskHelperOld ltr = new LongTermRiskHelperOld(boardState, wholeEdge, pe); + ltr.findRisks(); + + if (pe.getSolutionCount().signum() == 0) { + throw new Exception("This board has no solutions"); + } else { + for (int i=0; i < boardState.getGameWidth(); i++) { + for (int j=0; j < boardState.getGameHeight(); j++) { + if (boardState.isUnrevealed(i,j)) { + + InformationLocation il = new InformationLocation(i,j); + + il.setSafety(pe.getProbability(il)); + + doFullEvaluateTile(wholeEdge, pe, il, ltr); + + il.calculate(); + + result.put(il, il); + } + pm.setProgress(++progress); + } + } + } + + return result; + + } + + private void doFullEvaluateTile(WitnessWeb wholeEdge, ProbabilityEngineModel probEngine, InformationLocation tile, LongTermRiskHelperOld ltr) { + + List superset = boardState.getAdjacentUnrevealedSquares(tile); + int minesGot = boardState.countAdjacentConfirmedFlags(tile); + + int minMines = minesGot; + int maxMines = minesGot + superset.size(); + + //boardState.getLogger().log(Level.ALWAYS, tile + " ==> " + minMines + " - " + maxMines); + + // expected number of clears if we clear here to start with is 1 x our own probability + //BigDecimal expectedClears = tile.getProbability(); + + //boardState.display(tile.display() + " has " + linkedTiles + " linked tiles"); + + BigDecimal progressProb = BigDecimal.ZERO; + BigDecimal secondarySafety = BigDecimal.ZERO; + BigDecimal longTermSafety = BigDecimal.ZERO; + + for (int i = minMines; i <= maxMines; i++) { + + //SolutionCounter counter = validateLocationUsingSolutionCounter(wholeEdge, tile, i, probEngine.getDeadLocations()); + ProbabilityEngineModel counter = runProbabilityEngine(wholeEdge, tile, i).pe; + + BigInteger sol = counter.getSolutionCount(); + int clears = counter.getLivingClearCount(); + + if (sol.signum() != 0) { + + BigDecimal prob = new BigDecimal(sol).divide(new BigDecimal(probEngine.getSolutionCount()), Solver.DP, RoundingMode.HALF_UP); + + List bestCandidates = counter.getBestCandidates(BigDecimal.ONE, true); + + BigDecimal safety; + if (bestCandidates.size() == 0 ) { + safety = counter.getOffEdgeProb(); + } else { + safety = bestCandidates.get(0).getProbability(); + } + + this.logger.log(Level.INFO, "Tile %s value %d has %d living clears with probability %f and secondary safety %f", tile, i, clears, prob, safety); + + longTermSafety = longTermSafety.add(prob.multiply(ltr.getLongTermSafety(tile, counter))); // add all the weighted long term safety values together + + secondarySafety = secondarySafety.add(prob.multiply(safety)); + + if (clears != 0) { + progressProb = progressProb.add(prob); + } + + // store the information + tile.setByValue(i, clears, prob); + + } else { + this.logger.log(Level.INFO, "Tile %s value %d with probability zero", tile, i); + } + + } + + tile.setSecondarySafety(secondarySafety); + + if (tile.getSafety().signum() != 0) { + longTermSafety = longTermSafety.divide(tile.getSafety(), Solver.DP, RoundingMode.HALF_UP); + } else { + longTermSafety = BigDecimal.ZERO; + } + + tile.setLongTermSafety(longTermSafety); + + } + + + + private int findTrivialActions(List witnesses) { + + int count = 0; + + for (Location loc: witnesses) { + + if (isObviousClear(loc)) { + //boolean accepted = boardState.setChordLocation(loc); + + for (Location l: boardState.getAdjacentSquaresIterable(loc)) { + if (boardState.isUnrevealed(l)) { + if (!boardState.alreadyActioned(l)) { + count++; + boardState.setAction(new Action(l, Action.CLEAR, MoveMethod.TRIVIAL, "", BigDecimal.ONE)); + + } + + } + } + + } else if (isObviousFlag(loc)) { + for (Location l: boardState.getAdjacentSquaresIterable(loc)) { + if (boardState.isUnrevealed(l)) { + if (!boardState.alreadyActioned(l)) { + count++; + + boardState.setAction(new Action(l, Action.FLAG, MoveMethod.TRIVIAL, "", BigDecimal.ONE)); + //boardState.setFlagConfirmed(l); + } + + } + } + } + } + + + + return count; + + } + + + private boolean isObviousClear(Location loc) { + + //if (boardState.isRevealed(x,y) && boardState.getWitnessValue(x,y) != 0) { + int flags = boardState.countAdjacentConfirmedFlags(loc); + + // if we have all the flags and there is something to clear + if (boardState.getWitnessValue(loc) == flags && boardState.countAdjacentUnrevealed(loc) > 0) { + return true; + } + //} + + return false; + + } + + + private boolean isObviousFlag(Location loc) { + + //if (boardState.isRevealed(x,y) && boardState.getWitnessValue(x,y) != 0) { + int flags = boardState.countAdjacentConfirmedFlags(loc); + int free = boardState.countAdjacentUnrevealed(loc); + + // if we only have space for the flags and there is some space + if (boardState.getWitnessValue(loc) == flags + free && free > 0) { + return true; + } + //} + + return false; + + } + + private int findLocalActions(List witnesses) { + + int count = 0; + + List square; + List witness; + + for (Location loc: witnesses) { + + int flags = boardState.countAdjacentConfirmedFlags(loc); + int free = boardState.countAdjacentUnrevealed(loc); + + // if there are still some flags to find and there are + // too many places for it to be obvious ... + if (free > 0 && boardState.getWitnessValue(loc) > flags && boardState.getWitnessValue(loc) < flags + free) { + + // get the un-revealed squares + square = boardState.getAdjacentUnrevealedSquares(loc); + + // now get the witnesses + witness = boardState.getWitnesses(square); + + // and crunch the result + if (witness.size() > 1) { + + CrunchResult output = crunch(square, witness, new SequentialIterator(boardState.getWitnessValue(loc) - flags, square.size()), false, null); + count = count + checkBigTally(output, MoveMethod.LOCAL, ""); + count = count + checkWitnesses(output, MoveMethod.LOCAL, ""); + + } + + } + + + } + + return count; + + } + + + /** + * Checks whether this location can have the value using a localised check. Returns number squares which can be cleared. -1 means impossible situation + */ + /* + protected int validateLocationUsingLocalCheck(Location superLocation, int value) { + + int clearCount = 0; + + int minesToFit = value - boardState.countAdjacentConfirmedFlags(superLocation); + + if (minesToFit == 0) { + return boardState.countAdjacentUnrevealed(superLocation); + //return true; + } else if (minesToFit < 0) { + return -1; + //return false; + } + + // make the move + boardState.setWitnessValue(superLocation, value); + + // get the un-revealed squares + List square = boardState.getAdjacentUnrevealedSquares(superLocation); + + // now get the witnesses + List witnesses = boardState.getWitnesses(square); + + // and crunch the result + try { + if (witnesses.size() > 1) { + + //display(i + " " + j + " board " + board[i][j] + " flags = " + flags + " free = " + free); + + CrunchResult output = crunch(square, witnesses, new SequentialIterator(boardState.getWitnessValue(superLocation) - boardState.countAdjacentConfirmedFlags(superLocation), square.size()), false, null); + + + if (output.bigGoodCandidates.signum() > 0) { + for (int i=0; i < output.bigTally.length; i++) { + if (output.bigTally[i].signum() == 0) { + Location l = output.getSquare().get(i); + if (!boardState.alreadyActioned(l)) { + clearCount++; + } + } + + } + display(superLocation.display() + " Clear count = " + clearCount); + return clearCount; + //return true; + } else { + return -1; + //return false; + } + + } else { + return -1; + //return false; + } + } finally { + boardState.clearWitness(superLocation); + } + + + } + */ + + /** + * Checks whether this location can have the value using the solution counter + */ + protected SolutionCounter validateLocationUsingSolutionCounter(WitnessWeb wholeEdge, Location superLocation, int value, Area deadLocations) { + + // make the move + boardState.setWitnessValue(superLocation, value); + + // create a new list of witnesses + List witnesses = new ArrayList<>(wholeEdge.getPrunedWitnesses().size() + 1); + witnesses.addAll(wholeEdge.getPrunedWitnesses()); + witnesses.add(superLocation); + + Area witnessed = boardState.getUnrevealedArea(witnesses); + + WitnessWeb edge = new WitnessWeb(boardState, witnesses, witnessed.getLocations(), Logger.NO_LOGGING); + + int unrevealed = boardState.getTotalUnrevealedCount() - 1; // this is one less, because we have added a witness + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + SolutionCounter counter = new SolutionCounter(boardState, edge, unrevealed, minesLeft); + counter.process(deadLocations); + + // undo the move + boardState.clearWitness(superLocation); + + return counter; + + } + + /** + * Checks whether this board state is valid + */ + protected SolutionCounter validatePosition(WitnessWeb wholeEdge, List mines, List noMines, Area deadLocations) { + + // add the mines + for (Location mine: mines) { + boardState.setMineFound(mine); + } + + Area witnessed = boardState.getUnrevealedArea(wholeEdge.getPrunedWitnesses()); + + WitnessWeb edge = new WitnessWeb(boardState, wholeEdge.getPrunedWitnesses(), witnessed.getLocations(), Logger.NO_LOGGING); + + int unrevealed = boardState.getTotalUnrevealedCount() - mines.size(); // this is less, because we have added some mines. + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + SolutionCounter counter = new SolutionCounter(boardState, edge, unrevealed, minesLeft); + + //System.out.println("Unrevealed " + unrevealed + ", witnessed " + witnessed.size() + ", minesLeft " + minesLeft); + + // add the no mines + if (noMines != null) { + for (Location noMine: noMines) { + if (!counter.setMustBeEmpty(noMine)) { + this.logger.log(Level.WARN, "%s failed to set Must Be Empty", noMine); + } + } + } + + + counter.process(deadLocations); + + // remove the mines + for (Location mine: mines) { + boardState.unsetMineFound(mine); + } + + return counter; + + } + + + class RunPeResult { + ProbabilityEngineModel pe; + boolean found5050 = false; + } + + /** + * Runs the probability engine for a position with one extra witness than where we currently are + */ + protected RunPeResult runProbabilityEngine(WitnessWeb wholeEdge, Location location, int value) { + + // make the move + boardState.setWitnessValue(location, value); + + // create a new list of witnesses + List witnesses = new ArrayList<>(wholeEdge.getPrunedWitnesses().size() + 1); + witnesses.addAll(wholeEdge.getPrunedWitnesses()); + witnesses.add(location); + + Area witnessed = boardState.getUnrevealedArea(witnesses); + + WitnessWeb edge = new WitnessWeb(boardState, witnesses, witnessed.getLocations(), Logger.NO_LOGGING); + + int unrevealed = boardState.getTotalUnrevealedCount() - 1; // this is one less, because we have added a witness + + int minesLeft = myGame.getMines() - boardState.getConfirmedMineCount(); + + RunPeResult result = new RunPeResult(); + result.pe = new ProbabilityEngineFast(boardState, edge, unrevealed, minesLeft); + + result.pe.process(); + + // looking for created 50/50s doesn't seem to help the win rate + /* + Location findFifty = new FiftyFiftyHelper(boardState, wholeEdge, deadLocations).findUnavoidable5050(result.pe.getMines()); + + if (findFifty != null) { + //this.logger.log(Level.WARN, "Fifty/Fifty created in game %s : %s", myGame.showGameKey(), findFifty ); + result.found5050 = true; + } + */ + + // undo the move + boardState.clearWitness(location); + + return result; + + } + + protected CrunchResult crunch(final List square, final List witness, Iterator iterator, boolean calculateDistribution, BruteForceAnalysisModel bfa) { + + this.logger.log(Level.DEBUG, "Crunching %d Mines in %d Tiles with %d Witnesses", iterator.getBalls(), square.size(), witness.size()); + + // the distribution is the number of times a square reveals as the number 0-8 + BigInteger[][] bigDistribution = null; + if (calculateDistribution) { + bigDistribution = new BigInteger[square.size()][9]; + for (int i=0; i < square.size(); i++) { + for (int j=0; j < 9; j++) { + bigDistribution[i][j] = BigInteger.ZERO; + } + } + } + + BigInteger bign = BigInteger.ZERO; + + + // determine the witness type + int[] witnessGood1 = generateWitnessType(witness, square); + + // encapsulate the witness data + final WitnessData[] witnessData = new WitnessData[witness.size()]; + for (int i=0; i < witness.size(); i++) { + WitnessData d = new WitnessData(); + d.location = witness.get(i); + d.witnessGood = witnessGood1[i]; + d.witnessRestClear = true; + d.witnessRestFlag = true; + d.currentFlags = boardState.countAdjacentConfirmedFlags(d.location); + d.alwaysSatisfied = iterator.witnessAlwaysSatisfied(d.location); + witnessData[i] = d; + } + + /* + for (int i=0; i < square.length; i++) { + display("Square " + i + " is " + square[i].display()); + } + */ + + int[] sample = iterator.getSample(); + + int[] tally = new int[square.size()]; + int candidates = 0; + + // define work areas + workRestNotFlags = new boolean[witnessData.length]; + workRestNotClear = new boolean[witnessData.length]; + + while (sample != null) { + + if (checkSample(sample, square, witnessData, bigDistribution, bfa)) { + for (int i=0; i < sample.length; i++) { + tally[sample[i]]++; + } + candidates++; + } + + sample = iterator.getSample(); + + } + + BigInteger[] bigTally = new BigInteger[square.size()]; + for (int i = 0; i < bigTally.length; i++) { + bigTally[i] = BigInteger.valueOf(tally[i]); + } + + bign = BigInteger.valueOf(candidates); + + // store all the information we have gathered into this object for + // later analysis + CrunchResult output = new CrunchResult(); + output.setSquare(square); + output.bigDistribution = bigDistribution; + + output.originalNumMines = iterator.getBalls(); + output.bigGoodCandidates = bign; + output.bigTally = bigTally; + + // return data on the witnesses + output.witness = new Location[witnessData.length]; + output.witnessGood = new int[witnessData.length]; + output.witnessRestClear = new boolean[witnessData.length]; + output.witnessRestFlags = new boolean[witnessData.length]; + + for (int i=0; i < witnessData.length; i++) { + output.witness[i] = witnessData[i].location; + output.witnessGood[i] = witnessData[i].witnessGood; + output.witnessRestClear[i] = witnessData[i].witnessRestClear; + output.witnessRestFlags[i] = witnessData[i].witnessRestFlag; + } + + return output; + + } + + // this checks whether the positions of the mines are a valid candidate solution + protected boolean checkSample(final int[] sample, final List square, WitnessData[] witnessData, BigInteger[][] bigDistribution, BruteForceAnalysisModel bfa) { + + /* + String s= ""; + for (int i = 0; i < sample.length; i++) { + s = s + " " + sample[i]; + } + display(s); + */ + + for (int i=0; i < witnessData.length; i++) { + workRestNotFlags[i] = false; + workRestNotClear[i] = false; + } + + + // get the location of the mines + Location[] mine = new Location[sample.length]; + for (int i=0; i < sample.length; i++) { + mine[i] = square.get(sample[i]); + } + + for (int i=0; i < witnessData.length; i++) { + + if (!witnessData[i].alwaysSatisfied) { + int flags1 = witnessData[i].currentFlags; + int flags2 = 0; + + // count how many candidate mines are next to this witness + for (int j = 0; j < mine.length; j++) { + if (mine[j].isAdjacent(witnessData[i].location)) { + flags2++; + } + } + + int flags3 = boardState.getWitnessValue(witnessData[i].location); + + // if the candidate solution puts more flags around the witness + // than it says it has then the solution is invalid + if (flags3 < flags1 + flags2) { + WitnessData d = witnessData[0]; + witnessData[0] = witnessData[i]; + witnessData[i] = d; + return false; + } + + // if this is a 'good' witness and the number of flags around it + // does not match with it exactly then the solution is invalid + if (witnessData[i].witnessGood == 0 && flags3 != flags1 + flags2) { + WitnessData d = witnessData[0]; + witnessData[0] = witnessData[i]; + witnessData[i] = d; + return false; + } + + if (flags3 != flags1 + flags2) { + workRestNotClear[i] = true; + } + if (flags3 != flags1 + flags2 + witnessData[i].witnessGood) { + workRestNotFlags[i] = true; + } + } else { + // always satisfied means flag3 = flag1 + flag2, so the checks above can be simplified to + if (witnessData[i].witnessGood != 0) { + workRestNotFlags[i] = true; + } + } + + } + + // if it is a good candidate solution then the witness information is valid + for (int i=0; i < witnessData.length; i++) { + if (workRestNotClear[i]) { + witnessData[i].witnessRestClear = false; + } + if (workRestNotFlags[i]) { + witnessData[i].witnessRestFlag = false; + } + } + + //if it is a good solution then calculate the distribution if required + if (bfa != null && !bfa.tooMany()) { + byte[] solution = new byte[square.size()]; + + for (int i=0; i < square.size(); i++) { + + boolean isMine = false; + for (int j=0; j < sample.length; j++) { + if (i == sample[j]) { + isMine = true; + break; + } + } + + // if we are a mine then it doesn't matter how many mines surround us + if (!isMine) { + byte flags2 = (byte) boardState.countAdjacentConfirmedFlags(square.get(i)); + // count how many candidate mines are next to this square + for (Location mine1 : mine) { + if (mine1.isAdjacent(square.get(i))) { + flags2++; + } + } + solution[i] = flags2; + if (bigDistribution != null) { + bigDistribution[i][flags2] = bigDistribution[i][flags2].add(BigInteger.ONE); + } + + } else { + solution[i] = GameStateModel.MINE; + } + + } + bfa.addSolution(solution); + } + + return true; + + } + + + // a witness is a 'good' witness if all its adjacent free squares are also + // contained in the set of squares being analysed. A 'good' witness must + // always be satisfied for the candidate solution to be valid. + // this method returns the number of squares around the witness not being + // analysed - a good witness has a value of zero + protected int[] generateWitnessType(List witness, List square) { + + int[] result = new int[witness.size()]; + + for (int i=0; i < witness.size(); i++) { + + result[i] = 0; + for (Location l: boardState.getAdjacentUnrevealedSquares(witness.get(i))) { + boolean found = false; + for (Location squ: square) { + if (l.equals(squ)) { + found = true; + break; + } + } + if (!found) { + result[i]++; + } + } + + } + + return result; + + } + + + // do the tally check using the BigInteger values + private int checkBigTally(CrunchResult output, MoveMethod method, String comment) { + + int result=0; + + // if there were no good candidates then there is nothing to check + if (output.bigGoodCandidates.signum() == 0) { + return 0; + } + + // check the tally information to see if we have a square where a + // mine is always present or never present + for (int i=0; i < output.bigTally.length; i++) { + + if (output.bigTally[i].compareTo(output.bigGoodCandidates) == 0) { + Location l = output.getSquare().get(i); + + if (!boardState.alreadyActioned(l)) { + result++; + + boardState.setAction(new Action(l, Action.FLAG, method, comment, BigDecimal.ONE)); + + } + + } else if (output.bigTally[i].signum() == 0) { + Location l = output.getSquare().get(i); + if (!boardState.alreadyActioned(l)) { + result++; + + boardState.setAction(new Action(l, Action.CLEAR, method, comment, BigDecimal.ONE)); + //display("clear found at " + x + " " + y); + } + } + + } + + return result; + + } + + + // in some cases we learn more about the other witnesses during the crunch + // this only happens for local search. + private int checkWitnesses(CrunchResult output, MoveMethod method, String comment) { + + int result = 0; + + // check the witnesses to see if they have discovered something + for (int i=0; i < output.witnessRestFlags.length; i++) { + if (output.witnessGood[i] != 0) { + if (output.witnessRestFlags[i]) { + //display("**** CheckWitnesses has found a FLAG " + output.witness[i].display()); + result = result + restKnown(output.witness[i], output.getSquare(), Action.FLAG, method, comment); + } + if (output.witnessRestClear[i]) { + //display("**** CheckWitnesses has found a CLEAR " + output.witness[i].display()); + result = result + restKnown(output.witness[i], output.getSquare(), Action.CLEAR, method, comment); + } + } + } + + return result; + + } + + + + private int restKnown(Location witness, List square, int action, MoveMethod method, String comment) { + + int result=0; + + for (Location l: boardState.getAdjacentSquaresIterable(witness)) { + + // find all the unflagged and unrevealed squares + if (!boardState.isRevealed(l) && !boardState.isConfirmedMine(l)) { + + boolean found = false; + for (Location k: square) { + if (l.equals(k)) { + found = true; + break; + } + } + + if (!found && !boardState.alreadyActioned(l)) { + + Action act; + if (action == Action.FLAG) { + act = new Action(l, Action.FLAG, method, comment, BigDecimal.ONE); + //boardState.setFlagConfirmed(act); + } else { + act = new Action(l, Action.CLEAR, method, comment, BigDecimal.ONE); + } + result++; + + boardState.setAction(act); + //display("Discovered witness information at " + x1 + " " + y1); + } + + } + + } + + + return result; + + } + + /** + * Find the best guess off the edge + * @return + */ + private FinalMoves guess(WitnessWeb wholeEdge) { + + Action action = null; + + this.logger.log(Level.INFO, "Picking a guess"); + + // get the starting move if we are at the start of the game + if (myGame.getGameState() == GameStateModel.NOT_STARTED && playOpening) { + if (overriddenStartLocation != null) { + action = new Action(overriddenStartLocation, Action.CLEAR, MoveMethod.BOOK, "", offEdgeProb); + } else { + action = new Action(myGame.getStartLocation(), Action.CLEAR, MoveMethod.BOOK, "", offEdgeProb); + } + } + + + // if there is no book move then look for a guess off the edge + if (action == null) { + List list = new ArrayList<>(); + + + for (int i=0; i < myGame.getWidth(); i++) { + for (int j=0; j < myGame.getHeight(); j++) { + // if we are an unrevealed square and we aren't on the contour + // then store the location + if (boardState.isUnrevealed(i,j)) { + Location l = this.boardState.getLocation(i, j); + // if we aren't on the edge and there are some adjacent squares + if ((wholeEdge == null || !wholeEdge.isOnWeb(l))) { + list.add(new CandidateLocation(l.x, l.y, offEdgeProb, boardState.countAdjacentUnrevealed(l), boardState.countAdjacentConfirmedFlags(l))); + } + + } + } + } + + // sort into most favourable order + //Collections.sort(list, CandidateLocation.SORT_BY_PROB_FLAG_FREE); + Collections.sort(list, CandidateLocation.SORT_BY_PROB_FREE_FLAG); + + if (list.isEmpty()) { + return new FinalMoves(); + } + + // ... and pick the first one + action = list.get(0).buildAction(MoveMethod.GUESS); + + } + + // this will check there isn't a flag blocking the move + boardState.setAction(action); + + return new FinalMoves(boardState.getActions().toArray(new Action[0])); + + } + + public BigDecimal getProbability(int x, int y) { + + if (boardState.isConfirmedMine(x, y)) { + return BigDecimal.ZERO; + } else if (bf != null && bf.hasRun()) { + return bf.getProbability(x, y); + } else if (pe != null) { + return pe.getProbability(this.boardState.getLocation(x,y)); + } else { + return boardState.getProbability(x, y); + } + + } + + protected void topLine(final String s) { + + coachDisplay.clearScreen(); + coachDisplay.writeLine(s); + + } + + protected void newLine(final String s) { + + coachDisplay.writeLine(s); + + } + + + protected void display(String text) { + + if (interactive) { + displayAlways(text); + } + + } + + protected void displayAlways(String text) { + + System.out.println(text); + + } + + public void kill() { + + this.logger.log(Level.DEBUG, "Killing the Solver Object"); + + coachDisplay.kill(); + + } + + /** + * calculate the number of distinct ways mines can be placed in squares + */ + public static BigInteger combination(int mines, int squares) { + + try { + return binomialEngine.generate(mines, squares); + } catch (Exception e) { + System.out.println("Error calculating the binomial coefficient"); + e.printStackTrace(); + //throw new RuntimeException("Error calculating the binomial coefficient", e); + return BigInteger.ONE; + } + + } + + public GameStateModel getGame() { + return myGame; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SpaceCounter.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SpaceCounter.java new file mode 100644 index 0000000..61bb004 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/SpaceCounter.java @@ -0,0 +1,126 @@ +package minesweeper.solver; + +import java.util.ArrayList; +import java.util.List; + +import minesweeper.structure.Location; + +public class SpaceCounter { + + protected final static int[] DX = {0, 1, 1, 1, 0, -1, -1, -1}; + protected final static int[] DY = {-1, -1, 0, 1, 1, 1, 0, -1}; + + private final BoardState board; + private final int threshold; + + private final byte[][] data; + private final int width; + private final int height; + + + public SpaceCounter(BoardState board, int threshold) { + + this.board = board; + this.threshold = threshold; // an area is considered large if greater than or equal to the threshold + this.height = this.board.getGameHeight(); + this.width = this.board.getGameWidth(); + + this.data = new byte[this.width][this.height]; + + } + + + public boolean meetsThreshold(Location loc) { + + boolean large = false; + + + if (data[loc.x][loc.y] != 0) { + large = (data[loc.x][loc.y] == 1); + + } else { + + int index = 0; + + List tiles = new ArrayList<>(); + + tiles.add(loc); + + data[loc.x][loc.y] = -1; + + top: while (tiles.size() != index) { + + Location m = tiles.get(index); + + for (int j=0; j < DX.length; j++) { + final int x1 = m.x + DX[j]; + final int y1 = m.y + DY[j]; + + if (x1 >= 0 && x1 < this.width && y1 >= 0 && y1 < this.height) { + if (this.board.isUnrevealed(x1, y1)) { + if (data[x1][y1] == 0) { // unprocessed tile + data[x1][y1] = -1; + tiles.add(this.board.getLocation(x1, y1)); + + } else if (data[x1][y1] == 1) { // if we meet a tile which is already in a large area, we are in a large area + large = true; + break top; + + } else { // something has gone wrong since we can't encounter a small area + //this.board.getLogger().log(Level.ERROR, "Space counter encountered an area below threshold"); + } + + } else if (this.board.isRevealed(x1, y1)) { // if he board is revealed then see if we can hop over the tile into more open space + + for (int k=0; k < DX.length; k++) { + final int x2 = x1 + DX[k]; + final int y2 = y1 + DY[k]; + if (x2 >= 0 && x2 < this.width && y2 >= 0 && y2 < this.height) { + if (this.board.isUnrevealed(x2, y2)) { + if (data[x2][y2] == 0) { // unprocessed tile + data[x2][y2] = -1; + tiles.add(this.board.getLocation(x2, y2)); + + } else if (data[x2][y2] == 1) { // if we meet a tile which is already in a large area, we are in a large area + large = true; + break top; + + } + } + } + + + } + } + + } + } + + if (tiles.size() >= this.threshold) { + large = true; + break; + } + + index++; + + } + + // record the area if it exceeds the threshold + if (large) { + for (Location l: tiles) { + data[l.x][l.y] = 1; + } + } + + } + + if (large) { + return true; + } else { + return false; + } + + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/WitnessWeb.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/WitnessWeb.java new file mode 100644 index 0000000..011e46c --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/WitnessWeb.java @@ -0,0 +1,373 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import minesweeper.solver.constructs.Box; +import minesweeper.solver.constructs.Square; +import minesweeper.solver.constructs.Witness; +import minesweeper.solver.utility.Logger; +import minesweeper.solver.utility.Logger.Level; +import minesweeper.structure.Location; + +/** + * A witness web is a construct which holds the connectivity information of the game. + */ +public class WitnessWeb { + + final private List prunedWitnesses = new ArrayList<>(); // the de-duplicated witnesses + final private List originalWitnesses; // the witnesses passed into this web + final private List squares = new ArrayList<>(); + + final private List boxes = new ArrayList<>(); + + final private List independentWitness = new ArrayList<>(); + private final Logger logger; + + private int independentMines; + private BigInteger independentIterations = BigInteger.ONE; + private int remainingSquares; + + private BoardState boardState; + + private int pruned = 0; + + private int webNum = 0; + + private boolean validWeb = true; // if the web contains contradictions it is invalid + + private List solutions = new ArrayList<>(); + + public WitnessWeb(BoardState boardState, List allWit, Collection allSqu) { + this(boardState, allWit, allSqu, boardState.getLogger()); + } + + public WitnessWeb(BoardState boardState, List allWit, Collection allSqu, Logger logger) { + + //long nanoStart = System.nanoTime(); + + this.logger = logger; + this.boardState = boardState; + this.originalWitnesses = allWit; + + // create squares for all the Square locations provided + for (Location squ: allSqu) { + squares.add(new Square(squ)); + } + + // create witnesses for all the Witness locations provided + // and attach adjacent Squares + List adjSqu; + for (Location wit: originalWitnesses) { + // calculate how many mines are left to find + //int mines = gs.query(wit) - solver.countConfirmedFlags(wit); + int mines = boardState.getWitnessValue(wit) - boardState.countAdjacentConfirmedFlags(wit); + + adjSqu = new ArrayList<>(); + for (Square squ: squares) { + if (squ.isAdjacent(wit)) { + adjSqu.add(squ); + } + } + if (mines > adjSqu.size() || mines < 0) { + validWeb = false; + return; + } + addWitness(new Witness(wit, mines, adjSqu)); + } + + // this sorts the witnesses by the number of iterations around them + Collections.sort(prunedWitnesses, Witness.SORT_BY_ITERATIONS_DESC); + + // now attach non-pruned witnesses to adjacent Squares + for (Witness wit: prunedWitnesses) { + //System.out.println("Witness " + wit.getLocation().display() + " has " + wit.getSquares().size() + " squares"); + for (Square squ: squares) { + if (squ.isAdjacent(wit)) { + squ.addWitness(wit); + } + } + //solver.display(wit.getLocation().display() + " has " + wit.getMines() + " Mines to find " + wit.getSquares().size() + " adjacent squares"); + } + + + //long nanoEnd = System.nanoTime(); + + //boardState.display("Created witness web in " + (nanoEnd - nanoStart) + " nano-seconds"); + + } + + + private void setWeb(Square squ, int num) { + + if (squ.getWebNum() != 0 && squ.getWebNum() != num) { + System.err.println("Square already assigned to a different web!!!!"); + } + + // if the square is already part of this web then no more to do here + if (squ.getWebNum() == num) { + return; + } + + // claim this square + squ.setWebNum(num); + + // claim all the Witnesses around this square and + // recursively claim all the other squares around those witnesses + for (Witness w: squ.getWitnesses()) { + w.setWebNum(num); + for (Square s: w.getSquares()) { + setWeb(s, num); + } + } + + } + + private void addWitness(Witness wit) { + + // if the witness is a duplicate then don't store it + for (Witness w: prunedWitnesses) { + if (w.equivalent(wit)) { + if (boardState.getWitnessValue(w) - boardState.countAdjacentConfirmedFlags(w) != boardState.getWitnessValue(wit) - boardState.countAdjacentConfirmedFlags(wit)) { + logger.log(Level.WARN, "%s and %s share unrevealed squares but have different mine totals!", w, wit); + validWeb = false; + } + pruned++; + return; + } + } + + prunedWitnesses.add(wit); + + } + + /** + * Generate boxes of tiles which all share the same witnesses. These are used in the probability engine and must have the same probability. + */ + public void generateBoxes() { + + int boxCount = 0; + // put each square in a box + for (Square squ: squares) { + boolean found = false; + // see if the square fits an existing box + for (Box b: boxes) { + if (b.fitsBox(squ)) { + b.addSquare(squ); + found = true; + break; + } + } + // if not create a new box for it + if (!found) { + boxes.add(new Box(squ, boxCount)); + boxCount++; + } + } + + + int minesLeft = boardState.getMines() - boardState.getConfirmedMineCount(); + for (Box b: boxes) { + b.calculate(minesLeft); + //b.display(); + } + + } + + /** + * Generate independent witnesses which can be used by the brute force iteration processing + */ + public void generateIndependentWitnesses() { + + remainingSquares = this.squares.size(); + + // find a set of witnesses which don't share any squares (there can be many of these, but we just want one to use with the brute force iterator) + for (Witness w: prunedWitnesses) { + if (w.getMines() == 0) { + continue; + } + + boolean okay = true; + for (Witness iw: independentWitness) { + if (w.overlap(iw)) { + okay = false; + break; + } + } + if (okay) { + remainingSquares = remainingSquares - w.getSquares().size(); + independentIterations = independentIterations.multiply(Solver.combination(w.getMines(), w.getSquares().size())); + independentMines = independentMines + w.getMines(); + independentWitness.add(w); + } + } + + } + + + /** + * Returns the number of mines around the independent witnesses. The number of mines in any solution can't be less than this. + * @return + */ + public int getMinesPlaced() { + + return independentMines; + + } + + /** + * The locations on the edge + */ + public List getSquares() { + return squares; + } + + /** + * The deduplicated witnesses in this web + */ + public List getPrunedWitnesses() { + return prunedWitnesses; + } + + /** + * The witnesses passed into this web + */ + public List getOriginalWitnesses() { + + return originalWitnesses; + + } + + public List getIndependentWitnesses() { + + return independentWitness; + + } + + + public List getBoxes() { + return this.boxes; + } + + + // how many iterations will be required to process this web with the provided number of mines + public BigInteger getIterations(int mines) { + + // if too many or too few mines then no work needs to be done + if (mines < independentMines || mines > independentMines + remainingSquares) { + return BigInteger.ZERO; + } + + BigInteger result = independentIterations.multiply(Solver.combination(mines - independentMines, remainingSquares)); + + return result; + + } + + /** + * The number of ways the non-independent squares and mines can be arranged + * @param mines + * @return + */ + public BigInteger getNonIndependentIterations(int mines) { + + // if too many or too few mines then no work needs to be done + if (mines < independentMines || mines > independentMines + remainingSquares) { + return BigInteger.ZERO; + } + + BigInteger result = Solver.combination(mines - independentMines, remainingSquares); + + return result; + + } + + + + //public int getSharedSquares() { + // return remainingSquares; + //} + + public int getIndependentMines() { + return independentMines; + } + + /* + public List getSubWebs() { + + List result = new ArrayList<>(); + + if (webNum == 1) { + result.add(this); + } else { + for (int i=0; i < webNum; i++) { + result.add(createSubWeb(i+1)); + } + } + + return result; + + } + + + // create a WitnessWeb from a sub web of this one + private WitnessWeb createSubWeb(int n) { + + if (n < 1 || n > webNum ) { + System.err.println("requesting sub-web " + n + " of ( 1 to " + webNum + ")"); + } + + List wit = new ArrayList(); + List squ = new ArrayList(); + + for (Witness w: prunedWitnesses) { + if (w.getWebNum() == n) { + wit.add(w); + } + } + for (Square s: squares) { + if (s.getWebNum() == n) { + squ.add(s); + } + } + + WitnessWeb result = new WitnessWeb(boardState, wit, squ); + + return result; + + } + */ + + // if the location passed is a square in the web then return true; + public boolean isOnWeb(Location l) { + + for (Square s: squares) { + if (s.equals(l)) { + return true; + } + } + + return false; + + } + + public void addSolution(CrunchResult e) { + solutions.add(e); + } + + public List getSolutions() { + return solutions; + } + + public boolean isWebValid() { + return validWeb; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkController.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkController.java new file mode 100644 index 0000000..8464266 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkController.java @@ -0,0 +1,430 @@ +package minesweeper.solver.bulk; + +import java.math.BigDecimal; +import java.util.Random; + +import minesweeper.gamestate.GameStateModel; +import minesweeper.solver.bulk.BulkRequest.BulkAction; +import minesweeper.solver.settings.PlayStyle; +import minesweeper.solver.settings.SolverSettings; + +abstract public class BulkController implements Runnable { + + /* + public enum PlayStyle { + FLAGGED(false, false), + NO_FLAG(true, false), + EFFICIENCY(true, true); + + public final boolean flagless; + public final boolean useChords; + + private PlayStyle(boolean flagless, boolean useChords) { + this.flagless = flagless; + this.useChords = useChords; + } + + } + */ + + private final int gamesToPlay; + private final int workers; + private final SolverSettings solverSettings; + private final int bufferSize; + private final BulkRequest[] buffer; + private final BulkWorker[] bulkWorkers; + + private final static int REPORT_INTERVAL = 200; + private final static int DEFAULT_BUFFER_PER_WORKER = 1000; + + private volatile int waitingSlot = -1; // this is the next slot we are waiting to be returned + private volatile int nextSlot = 0; // this is the next slot to be dispatched + + private volatile int nextSequence = 1; + private volatile int waitingSequence = 0; + private volatile int reportInterval = REPORT_INTERVAL; + private final Random seeder; + private volatile boolean finished = false; + private volatile BulkEvent event; + private volatile BulkEvent finalEvent; + + private Thread mainThread; + private long startTime; + private long endTime; + + private BulkListener eventListener; + private GamePostListener postGameListener; + private GamePreListener preGameListener; + + private volatile int failedToStart = 0; + private volatile int wins = 0; + private volatile int guesses = 0; + private volatile int noGuessWins = 0; + private volatile BigDecimal totalGamesValue = BigDecimal.ZERO; + + private volatile int totalActions = 0; + private volatile long total3BV = 0; + private volatile long total3BVSolved = 0; + private volatile BigDecimal fairness = BigDecimal.ZERO; + private volatile int currentWinStreak = 0; + private volatile int bestWinStreak = 0; + private volatile int currentMastery = 0; + private volatile int bestMastery = 0; + + private volatile boolean[] mastery = new boolean[100]; + + private PlayStyle playStyle = PlayStyle.NO_FLAG; + + public BulkController(Random seeder, int gamesToPlay, SolverSettings solverSettings, int workers) { + this(seeder, gamesToPlay, solverSettings, workers, DEFAULT_BUFFER_PER_WORKER); + } + + public BulkController(Random seeder, int gamesToPlay, SolverSettings solverSettings, int workers, int bufferPerWorker) { + this.seeder = seeder; + this.gamesToPlay = gamesToPlay; + this.workers = workers; + this.bulkWorkers = new BulkWorker[this.workers]; + this.solverSettings = solverSettings; + + this.bufferSize = bufferPerWorker * this.workers; + this.buffer = new BulkRequest[bufferSize]; + } + + public void registerEventListener(BulkListener listener) { + this.eventListener = listener; + + } + + public void registerPostGameListener(GamePostListener listener) { + this.postGameListener = listener; + } + + public void registerPreGameListener(GamePreListener listener) { + this.preGameListener = listener; + } + + /** + * Set the play style + */ + public void setPlayStyle(PlayStyle playStyle) { + this.playStyle = playStyle; + } + + public PlayStyle getPlayStyle() { + return this.playStyle; + } + + + public void setReportInterval(int reportInterval) { + this.reportInterval = reportInterval; + } + + /** + * Start the number of workers and wait for them to complete. If you don't want your main thread paused then run this on a separate thread. + */ + @Override + public void run() { + + + this.startTime = System.currentTimeMillis(); + + // remember the current thread so we can wake it when completed + mainThread = Thread.currentThread(); + + for (int i=0; i < workers; i++) { + bulkWorkers[i] = new BulkWorker(this, solverSettings); + new Thread(bulkWorkers[i], "worker-" + (i+1)).start(); + } + + while (!finished) { + try { + Thread.sleep(10000); + //System.out.println("Main thread waiting for bulk run to complete..."); + } catch (InterruptedException e) { + //System.out.println("Main thread wait has been interrupted"); + + // process the event and then set it to null + if (event != null) { + if (eventListener != null) { + eventListener.intervalAction(event); + } + event = null; + } + } + } + + this.endTime = System.currentTimeMillis(); + //System.out.println("Finished after " + getDuration() + " milliseconds"); + + } + + /** + * Request each of the workers to stop and then stop the run + */ + public void stop() { + + for (BulkWorker worker: bulkWorkers) { + worker.stop(); + } + + // create a final event + finished = true; + + this.event = createEvent(); + this.finalEvent = this.event; + + // set the process to finished and wake the main thread + mainThread.interrupt(); + + } + + /** + * When the process is finished you can get the final results from here + */ + public BulkEvent getResults() { + return this.finalEvent; + } + + /** + * Returns true when the bulk run is completed or been stopped + */ + public boolean isFinished() { + return finished; + } + + /** + * returns how log the bulk run took in milliseconds, or how long it has been running depending if it has finished ot not + * @return + */ + public long getDuration() { + + if (startTime == 0) { // not started + return 0; + } else if (finished && endTime != 0) { // finished + return endTime - startTime; + } else { + return System.currentTimeMillis() - startTime; // in flight + } + + } + + private void processSlots() { + + boolean doEvent = false; + BulkEvent bulkEvent = null; + + // process all the games which have been processed and are waiting in the buffer + while (buffer[waitingSlot] != null) { + + BulkRequest request = buffer[waitingSlot]; + + int masteryIndex = request.sequence % 100; + + if (request.gs.getGameState() == GameStateModel.WON) { + wins++; + + totalGamesValue = totalGamesValue.add(request.gameValue); + + //System.out.println(request.gs.getSeed() + " has 3BV " + request.gs.getTotal3BV() + " and actions " + request.gs.getActionCount()); + + if (request.guesses == 0) { + noGuessWins++; + } + + currentWinStreak++; + if (currentWinStreak > bestWinStreak) { + bestWinStreak = currentWinStreak; + } + + // if we lost 100 games ago then mastery is 1 more + if (!mastery[masteryIndex]) { + mastery[masteryIndex] = true; + currentMastery++; + if (currentMastery > bestMastery) { + bestMastery = currentMastery; + } + } + + double efficiency = 100 * ((double) request.gs.getTotal3BV() / (double) request.gs.getActionCount()); + + + } else { + + if (!request.startedOkay) { + failedToStart++; + } + + currentWinStreak = 0; + + // if we won 100 games ago, then mastery is now 1 less + if (mastery[masteryIndex]) { + mastery[masteryIndex] = false; + currentMastery--; + } + } + + // accumulate the total actions taken + totalActions = totalActions + request.gs.getActionCount(); + + // accumulate 3BV in the game and how much was solved + total3BV = total3BV + request.gs.getTotal3BV(); + total3BVSolved = total3BVSolved + request.gs.getCleared3BV(); + + // accumulate total guesses made + guesses = guesses + request.guesses; + + fairness = fairness.add(request.fairness); + + // clear the buffer and move on to the next slot + buffer[waitingSlot] = null; + waitingSlot++; + waitingSequence++; + + // recycle the buffer when we get beyond the top + if (this.waitingSlot >= bufferSize) { + this.waitingSlot = this.waitingSlot - bufferSize; + } + + // if we have run and processed all the games then wake the main thread + if (waitingSequence == gamesToPlay) { + //System.out.println("All games played, waking the main thread"); + + finished = true; + + this.finalEvent = createEvent(); + bulkEvent = this.finalEvent; + + doEvent = true; + //mainThread.interrupt(); + + // provide an update every now and again, do that on the main thread + } else if (this.reportInterval != 0 && waitingSequence % this.reportInterval == 0) { + bulkEvent = createEvent(); + doEvent = true; + } + + if (postGameListener != null) { + postGameListener.postAction(request); + } + + } + + // if we have an event to do then interrupt the main thread which will post it + if (doEvent) { + if (this.event == null) { + this.event = bulkEvent; + mainThread.interrupt(); + } else { + System.out.println("Event suppressed because earlier event is still in progress"); + } + } + + } + + private BulkEvent createEvent() { + + BulkEvent event = new BulkEvent(); + event.setGamesToPlay(gamesToPlay); + event.setGamesPlayed(waitingSequence); + event.setGamesWon(wins); + event.setTotalGamesValue(totalGamesValue); + + event.setTotalGuesses(guesses); + event.setNoGuessWins(noGuessWins); + if (guesses != 0) { + event.setFairness(fairness.doubleValue() / guesses); + } else { + event.setFairness(0); + } + + event.setMastery(bestMastery); + event.setWinStreak(bestWinStreak); + event.setTotalActions(totalActions); + event.setFailedToStart(failedToStart); + event.setTotal3BV(total3BV); + event.setTotal3BVSolved(total3BVSolved); + + long duration = getDuration(); + + long timeLeft; + if (waitingSequence != 0) { + timeLeft = ((duration * gamesToPlay) / waitingSequence) - duration; + } else { + timeLeft = 0; + } + + event.setTimeSoFar(duration); + event.setEstimatedTimeLeft(timeLeft); + + event.setFinished(finished); + + return event; + + } + + /** + * Returns the last request and gets the next + */ + protected synchronized BulkRequest getNextRequest(BulkRequest request) { + + if (request != null) { + buffer[request.slot] = request; + + // if this is the slot we are waiting on then process the games which are in the buffer - this is all synchronised so nothing else arrives will it happens + if (request.slot == waitingSlot) { + processSlots(); + } + } + + // if we have played all the games or we have been stopped then tell the workers to stop + if (nextSequence > gamesToPlay || finished) { + return BulkRequest.STOP; + } + + // if the next sequence is a long way ahead of the waiting sequence then wait until we catch up. Tell the worker to wait. + if (nextSequence > waitingSequence + bufferSize - 2) { + System.out.println("Buffer is full after " + nextSequence + " games dispatched"); + return BulkRequest.WAIT; + } + + // otherwise dispatch the next game to be played + //GameSettings gameSettings = GameSettings.EXPERT; + //GameType gameType = GameType.STANDARD; + //SolverSettings settings = SettingsFactory.GetSettings(Setting.SMALL_ANALYSIS).setExperimentalScoring(true); + + BulkRequest next = new BulkRequest(); + next.action = BulkAction.RUN; + next.sequence = this.nextSequence; + next.slot = this.nextSlot; + next.gs = getGameState(Math.abs(seeder.nextLong() & 0xFFFFFFFFFFFFFl)); + + if (this.preGameListener != null) { + preGameListener.preAction(next.gs); + } + + if (next.gs.getGameState() == GameStateModel.LOST) { + next.startedOkay = false; + } + + // roll onto the next sequence + this.nextSequence++; + this.nextSlot++; + + // if this is the first request then initialise the waiting slot + if (waitingSlot == -1) { + waitingSlot = 0; + } + + // recycle the buffer when we get beyond the top + if (this.nextSlot >= bufferSize) { + this.nextSlot = this.nextSlot - bufferSize; + } + + return next; + + } + + abstract protected GameStateModel getGameState(long seed); + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkEvent.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkEvent.java new file mode 100644 index 0000000..2d67def --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkEvent.java @@ -0,0 +1,131 @@ +package minesweeper.solver.bulk; + +import java.math.BigDecimal; + +public class BulkEvent { + + private int gamesToPlay; + private int gamesPlayed; + private int gamesWon; + private int noGuessWins; + private int totalActions; + + private BigDecimal totalGamesValue; + + private long total3BV; + private long total3BVSolved; + + private int totalGuesses; + private double fairness; + + private int winStreak; + private int mastery; + + private int failedToStart; // this is when the game didn't survive the start sequence + + private long timeSoFar; + private long estimatedTimeLeft; + + private boolean isFinished = false; + + public int getFailedToStart() { + return failedToStart; + } + public int getGamesToPlay() { + return gamesToPlay; + } + public int getGamesPlayed() { + return gamesPlayed; + } + public int getGamesWon() { + return gamesWon; + } + public int getNoGuessWins() { + return noGuessWins; + } + public int getTotalGuesses() { + return totalGuesses; + } + public double getFairness() { + return fairness; + } + public int getWinStreak() { + return winStreak; + } + public int getMastery() { + return mastery; + } + public int getTotalActions() { + return totalActions; + } + + public long getTotal3BV() { + return total3BV; + } + public long getTotal3BVSolved() { + return total3BVSolved; + } + + protected void setFailedToStart(int failedToStart) { + this.failedToStart = failedToStart; + } + protected void setGamesToPlay(int gamesToPlay) { + this.gamesToPlay = gamesToPlay; + } + protected void setGamesPlayed(int gamesPlayed) { + this.gamesPlayed = gamesPlayed; + } + protected void setGamesWon(int gamesWon) { + this.gamesWon = gamesWon; + } + protected void setNoGuessWins(int noGuessWins) { + this.noGuessWins = noGuessWins; + } + protected void setTotalGuesses(int totalGuesses) { + this.totalGuesses = totalGuesses; + } + protected void setFairness(double fairness) { + this.fairness = fairness; + } + protected void setWinStreak(int winStreak) { + this.winStreak = winStreak; + } + protected void setMastery(int mastery) { + this.mastery = mastery; + } + protected void setTotalActions(int actions) { + this.totalActions = actions; + } + public long getTimeSoFar() { + return timeSoFar; + } + public long getEstimatedTimeLeft() { + return estimatedTimeLeft; + } + protected void setTimeSoFar(long timeSoFar) { + this.timeSoFar = timeSoFar; + } + protected void setEstimatedTimeLeft(long estimatedTimeLeft) { + this.estimatedTimeLeft = estimatedTimeLeft; + } + public boolean isFinished() { + return isFinished; + } + protected void setFinished(boolean isFinished) { + this.isFinished = isFinished; + } + protected void setTotal3BV(long total3bv) { + total3BV = total3bv; + } + protected void setTotal3BVSolved(long total3bvSolved) { + total3BVSolved = total3bvSolved; + } + public BigDecimal getTotalGamesValue() { + return totalGamesValue; + } + public void setTotalGamesValue(BigDecimal totalGamesValue) { + this.totalGamesValue = totalGamesValue; + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkListener.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkListener.java new file mode 100644 index 0000000..f6beafb --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkListener.java @@ -0,0 +1,10 @@ +package minesweeper.solver.bulk; + +public abstract class BulkListener { + + /** + * This is run at regular intervals and should be used to provide any out put that is needed + */ + abstract public void intervalAction(BulkEvent event); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkPlayer.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkPlayer.java new file mode 100644 index 0000000..f665545 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkPlayer.java @@ -0,0 +1,42 @@ +package minesweeper.solver.bulk; + +import java.util.Random; + +import minesweeper.gamestate.GameFactory; +import minesweeper.gamestate.GameStateModel; +import minesweeper.settings.GameSettings; +import minesweeper.settings.GameType; +import minesweeper.solver.settings.SolverSettings; + +public class BulkPlayer extends BulkController { + + protected final GameType gameType; + protected final GameSettings gameSettings; + //private List preActions; + + /** + * Use the bulk controller to play games from the beginning + */ + public BulkPlayer(Random seeder, int gamesToPlay, GameType gameType, GameSettings gameSettings, SolverSettings solverSettings, int workers) { + super(seeder, gamesToPlay, solverSettings, workers); + this.gameType = gameType; + this.gameSettings = gameSettings; + + } + + public BulkPlayer(Random seeder, int gamesToPlay, GameType gameType, GameSettings gameSettings, SolverSettings solverSettings, int workers, int bufferPerWorker) { + super(seeder, gamesToPlay, solverSettings, workers, bufferPerWorker); + this.gameType = gameType; + this.gameSettings = gameSettings; + } + + protected GameStateModel getGameState(long seed) {; + + GameStateModel gs = GameFactory.create(gameType, gameSettings, seed); + + return gs; + + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRequest.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRequest.java new file mode 100644 index 0000000..56b3ecc --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRequest.java @@ -0,0 +1,44 @@ +package minesweeper.solver.bulk; + +import java.math.BigDecimal; + +import minesweeper.gamestate.GameStateModel; + +public class BulkRequest { + + protected final static BulkRequest WAIT = new BulkRequest() { + { + action = BulkAction.WAIT; + } + }; + + protected final static BulkRequest STOP = new BulkRequest() { + { + action = BulkAction.STOP; + } + }; + + public enum BulkAction { + STOP, + WAIT, + RUN; + } + + protected BulkAction action; + protected int sequence; // the sequence number for this request + protected int slot; // the slot the request is to be store in the buffer + protected GameStateModel gs; + protected int guesses = 0; + protected BigDecimal fairness = BigDecimal.ZERO; + protected BigDecimal gameValue = BigDecimal.ONE; + protected boolean startedOkay = true; + + public GameStateModel getGame( ) { + return this.gs; + } + + public int getGuesses() { + return this.guesses; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRollout.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRollout.java new file mode 100644 index 0000000..0648b59 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkRollout.java @@ -0,0 +1,47 @@ +package minesweeper.solver.bulk; + +import java.util.Random; + +import minesweeper.gamestate.GameStateModel; +import minesweeper.solver.RolloutGenerator; +import minesweeper.solver.settings.SolverSettings; +import minesweeper.structure.Action; +import minesweeper.structure.Location; + +public class BulkRollout extends BulkController { + + protected final RolloutGenerator generator; + protected final Location safeTile; + protected final Location startTile; + + /** + * Use the bulk controller to play games from the beginning + */ + public BulkRollout(Random seeder, int gamesToPlay, RolloutGenerator generator, Location startTile, boolean safeStart, SolverSettings solverSettings, int workers) { + super(seeder, gamesToPlay, solverSettings, workers); + + this.generator = generator; + this.startTile = startTile; + + if (safeStart) { + this.safeTile = startTile; + } else { + this.safeTile = null; + } + + } + + + protected GameStateModel getGameState(long seed) { + + GameStateModel gs = generator.generateGame(seed, safeTile); + + // play the start tile and return the game + gs.doAction(new Action(startTile, Action.CLEAR)); + + return gs; + + } + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkWorker.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkWorker.java new file mode 100644 index 0000000..b590549 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/BulkWorker.java @@ -0,0 +1,142 @@ +package minesweeper.solver.bulk; + +import java.math.BigDecimal; + +import minesweeper.gamestate.GameStateModel; +import minesweeper.solver.Solver; +import minesweeper.solver.bulk.BulkRequest.BulkAction; +import minesweeper.solver.settings.SolverSettings; +import minesweeper.structure.Action; + +public class BulkWorker implements Runnable { + + private boolean stop = false; + private final BulkController controller; + private final SolverSettings solverSettings; + + protected BulkWorker(BulkController controller, SolverSettings solverSettings) { + this.controller = controller; + this.solverSettings = solverSettings; + } + + @Override + public void run() { + + //System.out.println(Thread.currentThread().getName() + " is starting"); + + BulkRequest request = controller.getNextRequest(null); + + while (!stop) { + + if (request.action == BulkAction.STOP) { + stop = true; + break; + + } else if (request.action == BulkAction.WAIT) { // wait and then ask again + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + + request = controller.getNextRequest(null); + } else { + + //System.out.println("Playing game sequence " + request.sequence); + // play the game + playGame(request); + + // return it to the controller + request = controller.getNextRequest(request); + + } + + } + + //System.out.println(Thread.currentThread().getName() + " is stopping"); + + } + + private void playGame(BulkRequest request) { + + int state; + + // if the game is won or lost already then nothing to do. This can be the case since we don't know what state the Game State model is in. + if (request.gs.getGameState() == GameStateModel.WON || request.gs.getGameState() == GameStateModel.LOST) { + return; + } + + Solver solver = new Solver(request.gs, this.solverSettings, false); + solver.setPlayStyle(controller.getPlayStyle()); + //solver.setFlagFree(controller.getPlayStyle().flagless); + //solver.setPlayChords(controller.getPlayStyle().useChords); + + int loopCounter = 0; + + play: while (true) { + + loopCounter++; + if (loopCounter % 1000 == 0) { + System.err.println("Game " + request.gs.showGameKey() + " is looping"); + break play; + } + + Action[] moves; + try { + solver.start(); + moves = solver.getResult(); + } catch (Exception e) { + System.err.println("Game " + request.gs.showGameKey() + " has thrown an exception!"); + e.printStackTrace(); + return; + } + + if (moves.length == 0) { + System.err.println(request.gs.getSeed() + " - No moves returned by the solver"); + return; + } + + // play all the moves until all done, or the game is won or lost + for (int i=0; i < moves.length; i++) { + + BigDecimal prob = moves[i].getBigProb(); + + if (prob.compareTo(BigDecimal.ZERO) <= 0 || prob.compareTo(BigDecimal.ONE) > 0) { + System.err.println("Game (" + request.gs.showGameKey() + ") move with probability of " + prob + "! - " + moves[i].toString()); + } + + boolean result = request.gs.doAction(moves[i]); + + state = request.gs.getGameState(); + + // only monitor good guesses (brute force, probability engine, zonal, opening book and hooks) + if (state == GameStateModel.STARTED || state == GameStateModel.WON) { + if (!moves[i].isCertainty() ) { + request.guesses++; + //request.fairness = request.fairness + 1d; + request.fairness = request.fairness.add(BigDecimal.ONE).subtract(prob); + } + } else { // otherwise the guess resulted in a loss + if (!moves[i].isCertainty()) { + request.guesses++; + //request.fairness = request.fairness - prob.doubleValue() / (1d - prob.doubleValue()); + request.fairness = request.fairness.subtract(prob); + } + } + + if (state == GameStateModel.LOST && moves[i].isCertainty()) { + System.err.println("Game (" + request.gs.showGameKey() + ") lost on move with probability = " + prob + " :" + moves[i].toString()); + } + + if (state == GameStateModel.LOST || state == GameStateModel.WON) { + break play; + } + } + } + + request.gameValue = solver.getWinValue(); + } + + protected void stop() { + stop = true; + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePostListener.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePostListener.java new file mode 100644 index 0000000..452f631 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePostListener.java @@ -0,0 +1,18 @@ +package minesweeper.solver.bulk; + +/** + * The "postAction" method is run after each game finishes + */ +public abstract class GamePostListener { + + /** + * This is run after each game finishes + */ + abstract public void postAction(BulkRequest request); + + /** + * Place the results you want to show here + */ + abstract public void postResults(); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePreListener.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePreListener.java new file mode 100644 index 0000000..ed9063e --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/bulk/GamePreListener.java @@ -0,0 +1,12 @@ +package minesweeper.solver.bulk; + +import minesweeper.gamestate.GameStateModel; + +public abstract class GamePreListener { + + /** + * This is run before each game starts + */ + abstract public void preAction(GameStateModel game); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachModel.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachModel.java new file mode 100644 index 0000000..1d7f58f --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachModel.java @@ -0,0 +1,20 @@ +package minesweeper.solver.coach; + +public interface CoachModel { + + + abstract public void clearScreen(); + + abstract public void writeLine(String text); + + abstract public void setOkay(); + + abstract public void setWarn(); + + abstract public void setError(); + + abstract public void kill(); + + abstract public boolean analyseFlags(); + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachSilent.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachSilent.java new file mode 100644 index 0000000..2cf0670 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/coach/CoachSilent.java @@ -0,0 +1,40 @@ +package minesweeper.solver.coach; + +/** + * A implementation of the CoachModel class which does nothing + * @author David + * + */ +public class CoachSilent implements CoachModel { + + + @Override + public void clearScreen() { + } + + @Override + public void writeLine(String text) { + } + + @Override + public void setOkay() { + } + + @Override + public void setWarn() { + } + + @Override + public void setError() { + } + + @Override + public void kill() { + } + + @Override + public boolean analyseFlags() { + return false; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Box.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Box.java new file mode 100644 index 0000000..230d89d --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Box.java @@ -0,0 +1,296 @@ +package minesweeper.solver.constructs; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import minesweeper.structure.Location; + +/** + * A Box contains all the squares that share the same witnesses. A consequence of this is that they + * must have the same probability of being a mine. + * @author David + * + */ + +public class Box { + + final private List adjWitnesses; + final private List squares = new ArrayList<>(); + + private int maxMines; + private int minMines; + final private int uid; // this is a sequential count given to each box as it is created; 0, 1, 2, etc + + private boolean processed = false; + + private boolean dominated = false; + + // defer guessing is set when the box is part of a enclosed edge where knowing the + // number of mines left will solve the edge + private boolean deferGuessing = false; + + // this is used to indicate how many tiles in the box must not contain mine. + private int emptyTiles = 0; + + private int edgeLength; + private BigDecimal safety; + private BigInteger tally = BigInteger.ZERO; + + public Box(Square square, int uid) { + + this.uid = uid; + + adjWitnesses = square.getWitnesses(); + squares.add(square); + + // connect this box to all the adjacent witnesses + for (Witness w: adjWitnesses) { + w.addBox(this); + } + + } + + + /** + * Once all the squares have been added we can do some calculations + */ + public void calculate(int minesLeft) { + + maxMines = Math.min(squares.size(), minesLeft); // can't have more mines then there are squares to put them in or mines left to discover + minMines = 0; + + for (Witness adjWit: adjWitnesses) { + // can't have more mines than the lowest constraint + if (adjWit.getMines() < maxMines) { + maxMines = adjWit.getMines(); + } + + // if an adjacent witness has all it's tiles in this box then we need at least that many tiles in the box + if (this.squares.size() > 1 && adjWit.getMines() > minMines) { + boolean subset = true; + int adjWitMinMines = adjWit.getMines(); // the minimum number of mines left if we assume every outside tile contains a mine + for (Square square: adjWit.getSquares()) { + if (!this.contains(square)) { + subset = false; + adjWitMinMines--; + if (adjWitMinMines <= minMines) { // worse then our current minimum + break; + } + } + } + minMines = Math.max(minMines, adjWitMinMines); + //System.out.println("Tile " + w + " places " + w.getMines() + " in a box"); + + } + + // this has a small improvement on time, but (for some reason) has a small -ve impact on win rate. Need to investigate more. + // must be at least this many mines in the box. + //int workMin = w.getMines() - (w.getSquares().size() -this.squares.size()); // mines left for this witness - tiles adjacent not in the box (where the mines could be) + //if (workMin > minMines) { + // minMines = workMin; + //} + + // this seems tohave no impact on time or win rate + // if the witness only has 1 adjacent box - i.e. us then the minimum number of mines must also be set + //if (w.getBoxes().size() == 1) { + // minMines = w.getMines(); + //} + } + + } + + + + /** + * A Square fits the Box if they have the same witnesses + * @param square + * @return + */ + public boolean fitsBox(Square square) { + + // they can't share the same witnesses if they have different number of them + if (adjWitnesses.size() != square.getWitnesses().size()) { + return false; + } + + //check that each witness of the candidate square is also a witness for the box + for (Witness w: square.getWitnesses()) { + boolean found = false; + for (Witness boxWitness: adjWitnesses) { + if (w.equals(boxWitness)) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + + return true; + + } + + public boolean contains(Location l) { + + for (Square squ: squares) { + if (squ.equals(l)) { + return true; + } + } + + return false; + + } + + @Override + public boolean equals(Object obj) { + + if (!(obj instanceof Box)) { + return false; + } + + Box box = (Box) obj; + + // to be equal they must have the same number of squares + if (this.squares.size() != box.squares.size()) { + return false; + } + + for (Square sq1: this.squares) { + boolean found = false; + for (Square sq2: box.squares) { + if (sq1.equals(sq2)) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + + return true; + + } + + + /** + * Add this square to the box + * @param square + */ + public void addSquare(Square square) { + squares.add(square); + } + + /** + * Get witness that are adjacent to this box + */ + public List getWitnesses() { + return this.adjWitnesses; + } + + /** + * Get squares that are in this box + */ + public List getSquares() { + return this.squares; + } + + public boolean isProcessed() { + return this.processed; + } + public void setProcessed(boolean processed) { + this.processed = processed; + } + public int getUID() { + return this.uid; + } + + public int getMaxMines() { + return this.maxMines; + } + public int getMinMines() { + return this.minMines; + } + + public void setDominated() { + this.dominated = true; + } + + public boolean isDominated() { + return this.dominated; + } + + public void setDeferGuessing() { + this.deferGuessing = true; + } + + public boolean doDeferGuessing() { + return this.deferGuessing; + } + + public int getEmptyTiles() { + return emptyTiles; + } + + public void setEdgeLength(int length) { + this.edgeLength = length; + } + + public int getEdgeLength() { + return this.edgeLength; + } + + public void setSafety(BigDecimal safety) { + this.safety = safety; + } + + public BigDecimal getSafety() { + return this.safety; + } + + public void setTally(BigInteger tally) { + this.tally = tally; + } + + public BigInteger getTally() { + return this.tally; + } + + public void incrementEmptyTiles() { + this.emptyTiles++; + // can't have more mines than there are squares to put them + if (this.maxMines > this.squares.size() - this.emptyTiles) { + this.maxMines = this.squares.size() - this.emptyTiles; + + if (this.maxMines < this.minMines) { + System.out.println("Illegal Mines: max " + maxMines + " min " + minMines); + } + } + } + + public void display() { + + System.out.print("Box Witnesses: "); + for (Witness w: adjWitnesses) { + System.out.print(w.toString()); + } + System.out.println(""); + + System.out.print("Box Squares: "); + for (Square squ: squares) { + System.out.print(squ.toString()); + } + System.out.println(""); + System.out.println("Mines: max " + maxMines + " min " + minMines); + + } + + + + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/CandidateLocation.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/CandidateLocation.java new file mode 100644 index 0000000..506d3b2 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/CandidateLocation.java @@ -0,0 +1,140 @@ +package minesweeper.solver.constructs; + +import java.math.BigDecimal; +import java.util.Comparator; + +import minesweeper.gamestate.MoveMethod; +import minesweeper.structure.Action; +import minesweeper.structure.Location; +public class CandidateLocation extends Location { + + private final BigDecimal prob; + private String description = ""; + private final int adjSquares; + private final int adjFlags; + private final boolean dead; // Whether the tile is dead + private final boolean deferGuessing; // Whether the tile is not a good idea to guess + + public CandidateLocation(int x, int y, BigDecimal prob, int adjSquares, int adjFlags) { + this(x, y, prob, adjSquares, adjFlags, false, false); + + } + + public CandidateLocation(int x, int y, BigDecimal prob, int adjSquares, int adjFlags, boolean dead, boolean deferGuessing) { + super(x,y); + + this.prob = prob; + this.adjSquares = adjSquares; + this.adjFlags = adjFlags; + this.dead = dead; + this.deferGuessing = deferGuessing; + + } + + public BigDecimal getProbability() { + return this.prob; + } + + public boolean isDead() { + return this.dead; + } + + public void setDescription(String desc) { + this.description = desc; + } + + public void appendDescription(String desc) { + if (this.description != "") { + this.description = this.description + " " + desc; + } else { + this.description = desc; + } + + } + + public String getDescription() { + return this.description; + } + + public boolean getDeferGuessing() { + return this.deferGuessing; + } + + public Action buildAction(MoveMethod method) { + + String comment = description; + + if (prob.compareTo(BigDecimal.ZERO) == 0) { // the best move is to place a flag + return new Action(this, Action.FLAG, method, comment, BigDecimal.ONE); + } else { + return new Action(this, Action.CLEAR, method, comment, prob); + } + + } + + /** + * This sorts by highest probability of not being a mine then the number of adjacent flags, unrevealed squares and finally Location order + */ + static public final Comparator SORT_BY_PROB_FLAG_FREE = new Comparator() { + @Override + public int compare(CandidateLocation o1, CandidateLocation o2) { + + int c = 0; + + c = -o1.prob.compareTo(o2.prob); // highest probability first + if (c == 0) { + if (o1.deferGuessing && !o2.deferGuessing) { + c = -1; + } else if (!o1.deferGuessing && o2.deferGuessing) { + c = 1; + } else { + c = -(o1.adjFlags - o2.adjFlags); // highest number of flags 2nd + if (c == 0) { + c= o1.adjSquares - o2.adjSquares; // lowest adjacent free squares + if (c == 0) { + c = o1.sortOrder - o2.sortOrder; // location order + } + } + } + } + + return c; + + } + }; + + /** + * This sorts by highest probability of not being a mine then the number unrevealed squares (lowest first), then of adjacent flags (highest first) ,and finally Location order + */ + static public final Comparator SORT_BY_PROB_FREE_FLAG = new Comparator() { + @Override + public int compare(CandidateLocation o1, CandidateLocation o2) { + + int c = -o1.prob.compareTo(o2.prob); // highest probability first + if (c == 0) { + int a1, a2; + if (o1.adjSquares == 0) { + a1 = 9; + } else { + a1 = o1.adjSquares; + } + if (o2.adjSquares == 0) { + a2 = 9; + } else { + a2 = o2.adjSquares; + } + c= a1 - a2; // lowest adjacent free squares (except zero treated as 9) + if (c == 0) { + c = -(o1.adjFlags - o2.adjFlags); // highest number of flags + if (c == 0) { + c = o1.sortOrder - o2.sortOrder; // location order + } + } + } + + return c; + + } + }; + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/ChordLocation.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/ChordLocation.java new file mode 100644 index 0000000..9f919a3 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/ChordLocation.java @@ -0,0 +1,108 @@ +package minesweeper.solver.constructs; + +import java.math.BigDecimal; +import java.util.Comparator; +import java.util.List; + +import minesweeper.structure.Location; + +public class ChordLocation extends Location { + + private final int benefit; + private final int cost; + private final int exposedTiles; + private final BigDecimal netBenefit; + private final BigDecimal scale; + private final List mines; + + public ChordLocation(int x, int y, int benefit, int cost, int exposedTiles, BigDecimal scale, List mines) { + super(x, y); + + this.benefit = benefit; + this.cost = cost; + this.exposedTiles = exposedTiles; + + this.netBenefit = chordReward(benefit, cost).multiply(scale); + //this.netBenefit = chordReward(benefit, cost); + + this.scale = scale; // probability of being a mine + this.mines = mines; + } + + public int getBenefit() { + return this.benefit; + } + + public int getCost() { + return this.cost; + } + + public BigDecimal getNetBenefit() { + return this.netBenefit; + } + + public int getExposedTileCount() { + return this.exposedTiles; + } + + public List getMines() { + return this.mines; + } + + public BigDecimal getScale() { + return this.scale; + } + + static public final BigDecimal chordReward(int benefit, int cost) { + + BigDecimal netBenefit; // benefit as a ratio of the cost + + /* + if (cost == 0) { + netBenefit = BigDecimal.valueOf(benefit); + } else { + netBenefit = BigDecimal.valueOf(benefit - cost).divide(BigDecimal.valueOf(cost), 10, RoundingMode.HALF_UP); // benefit as a ratio of the cost + } + */ + + /* + if (cost == 0) { + netBenefit = BigDecimal.valueOf(benefit); + } else { + netBenefit = BigDecimal.valueOf(benefit).divide(BigDecimal.valueOf(cost), 10, RoundingMode.HALF_UP); // benefit as a ratio of the cost + } + */ + + netBenefit = BigDecimal.valueOf(benefit - cost); // absolute benefit without regard for the cost + + return netBenefit; + + } + + static public final Comparator SORT_BY_BENEFIT_DESC = new Comparator() { + @Override + public int compare(ChordLocation o1, ChordLocation o2) { + + int c = o2.netBenefit.compareTo(o1.netBenefit); + + if (c==0) { + c = o2.exposedTiles - o1.exposedTiles; + } + + if (c==0) { + c = o2.scale.compareTo(o1.scale); + } + + return c; + + //if (o2.netBenefit == o1.netBenefit) { + // return o2.exposedTiles - o1.exposedTiles; + //} else { + // return o2.netBenefit.compareTo(o1.netBenefit); + //} + + } + }; + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/EvaluatedLocation.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/EvaluatedLocation.java new file mode 100644 index 0000000..1ab5847 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/EvaluatedLocation.java @@ -0,0 +1,144 @@ +package minesweeper.solver.constructs; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Comparator; +import java.util.List; + +import minesweeper.gamestate.MoveMethod; +import minesweeper.structure.Action; +import minesweeper.structure.Location; + +public class EvaluatedLocation extends Location { + + private final BigDecimal safeProbability; + private BigDecimal weight; + private final BigDecimal maxValueProgress; + private String description = ""; + private BigDecimal expectedClears; + private final int fixedClears; //number of tiles which are clears regardless of what value is revealed + private List emptyBoxes; + private boolean pruned = false; + private boolean deferGuessing = false; + + public EvaluatedLocation(int x, int y, BigDecimal safeProbability, BigDecimal weight, BigDecimal expectedClears, int fixedClears, + List emptyBoxes, BigDecimal maxValueProgress) { + super(x,y); + + this.safeProbability = safeProbability; + this.weight = weight.setScale(8, RoundingMode.UP); // give a slight bump up, so those coming later have to be actually better + this.expectedClears = expectedClears; + this.fixedClears = fixedClears; + this.maxValueProgress = maxValueProgress; + this.emptyBoxes = emptyBoxes; + + } + + public BigDecimal getProbability() { + return this.safeProbability; + } + + public BigDecimal getWeighting() { + return this.weight; + } + + public BigDecimal getMaxValueProgress() { + return maxValueProgress; + } + + public List getEmptyBoxes() { + return emptyBoxes; + } + + + public Action buildAction(MoveMethod method) { + + String comment = description; + + return new Action(this, Action.CLEAR, method, comment, safeProbability); + + } + + public void setPruned() { + this.pruned = true; + } + + public void setDeferGuessing(boolean deferGuessing) { + this.deferGuessing = deferGuessing; + } + + public boolean isDeferGuessing() { + return this.deferGuessing; + } + + @Override + public String toString() { + + String prunedString; + if (this.pruned) { + prunedString = " ** Pruned"; + } else { + prunedString = ""; + } + + return super.toString() + " Fixed clears is " + fixedClears + " expected clears is " + expectedClears.toPlainString() + + ", final weight is " + weight + ", maximum tile value prob is " + maxValueProgress + ", defer guessing " + deferGuessing + prunedString; + + } + + /** + * This sorts by ... + */ + static public final Comparator SORT_BY_WEIGHT = new Comparator() { + @Override + public int compare(EvaluatedLocation o1, EvaluatedLocation o2) { + + + int c = 0; + + if (c == 0) { + if (o1.deferGuessing && !o2.deferGuessing) { + c = 1; + } else if (!o1.deferGuessing && o2.deferGuessing) { + c = -1; + } + } + + if (c == 0) { + c = -o1.weight.compareTo(o2.weight); // tile with the highest weighting + } + + if (c == 0) { + c = -o1.expectedClears.compareTo(o2.expectedClears); // then highest expected number of clears + } + + return c; + + } + }; + + static public final Comparator SORT_BY_SAFETY_MINIMAX = new Comparator() { + @Override + public int compare(EvaluatedLocation o1, EvaluatedLocation o2) { + + + int c = 0; + + c = -o1.safeProbability.compareTo(o2.safeProbability); // safest tiles + + if (c == 0) { + c = o1.maxValueProgress.compareTo(o2.maxValueProgress); // then lowest max value ... the Minimax; + } + + // go back to the weight option + if (c == 0) { + c = SORT_BY_WEIGHT.compare(o1, o2); + } + + return c; + + } + }; + + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/InformationLocation.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/InformationLocation.java new file mode 100644 index 0000000..bc5a550 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/InformationLocation.java @@ -0,0 +1,151 @@ +package minesweeper.solver.constructs; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; + +import minesweeper.solver.Solver; +import minesweeper.structure.Location; + +public class InformationLocation extends Location { + + //public final static BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100); + + public class ByValue { + + public final int value; + public final int clears; + public final BigDecimal probability; + + private ByValue(int value, int clears, BigDecimal prob) { + this.value = value; + this.clears = clears; + this.probability = prob; + } + + } + + + private BigDecimal safety; + private BigDecimal expectedClears; + private BigDecimal progressProbability; + private BigDecimal weighting; + private BigDecimal expectedSolutionSpaceReduction; + private BigDecimal mTanzerRatio; + private BigDecimal secondarySafety; + + private BigDecimal longTermSafety; + //private BigDecimal poweredRatio; + + + private List byValues; + + public InformationLocation(int x, int y) { + super(x, y); + } + + public void calculate() { + + BigDecimal expClears = BigDecimal.ZERO; + BigDecimal progProb = BigDecimal.ZERO; + BigDecimal ess = BigDecimal.ONE.subtract(this.safety); // expect solution space = p(mine) + sum[ P(n)*p(n) ] + BigDecimal powerClears = BigDecimal.ZERO; + + + if (byValues == null) { + return; + } + + for (ByValue bv: byValues) { + + //essr = essr.add(bv.probability.multiply(BigDecimal.ONE.subtract(bv.probability))); // sum of p(1-p) + ess = ess.add(bv.probability.multiply(bv.probability)); // sum of p^2 + + if (bv.clears != 0) { + progProb = progProb.add(bv.probability); + expClears = expClears.add(bv.probability.multiply(BigDecimal.valueOf(bv.clears))); + //powerClears = powerClears.add(bv.probability.multiply(new BigDecimal(Math.pow(1.15d, bv.clears)))); + } + + } + + this.expectedClears = expClears; + this.progressProbability = progProb; + this.expectedSolutionSpaceReduction = ess; + + BigDecimal bonus = BigDecimal.ONE.add(progressProbability.multiply(Solver.PROGRESS_VALUE)); + + this.weighting = this.safety.multiply(bonus); + + if (this.safety.compareTo(BigDecimal.ONE) != 0) { + this.mTanzerRatio = this.progressProbability.divide(BigDecimal.ONE.subtract(safety), 4, RoundingMode.HALF_DOWN); + } + + //if (this.prob.compareTo(BigDecimal.ONE) != 0) { + // this.poweredRatio = powerClears.divide(BigDecimal.ONE.subtract(prob), 4, RoundingMode.HALF_DOWN); + //} + + } + + public BigDecimal getSafety() { + return this.safety; + } + + public void setSafety(BigDecimal prob) { + this.safety = prob; + } + + public void setByValue(int value, int clears, BigDecimal prob) { + if (byValues == null) { + byValues = new ArrayList<>(); + } + + byValues.add(new ByValue(value, clears, prob)); + + } + + public void setSecondarySafety(BigDecimal safety2) { + this.secondarySafety = safety2; + } + + public void setLongTermSafety(BigDecimal lts) { + this.longTermSafety = lts; + } + + public BigDecimal getSecondarySafety() { + return this.secondarySafety; + } + + public BigDecimal getLongTermSafety() { + return this.longTermSafety; + } + + public List getByValueData() { + return this.byValues; + } + + public BigDecimal getExpectedClears() { + return expectedClears; + } + + public BigDecimal getProgressProbability() { + return progressProbability; + } + + public BigDecimal getWeighting() { + return weighting; + } + + public BigDecimal getExpectedSolutionSpaceReduction() { + return this.expectedSolutionSpaceReduction; + } + + public BigDecimal getMTanzerRatio() { + return this.mTanzerRatio; + } + + //public BigDecimal getPoweredRatio() { + // return this.poweredRatio; + //} +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/LinkedLocation.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/LinkedLocation.java new file mode 100644 index 0000000..bea26d2 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/LinkedLocation.java @@ -0,0 +1,47 @@ +package minesweeper.solver.constructs; + +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import minesweeper.structure.Location; + +public class LinkedLocation extends Location { + + private Set partners = new HashSet<>(); + + private int links = 0; + + public LinkedLocation(int x, int y, List partner) { + super(x, y); + + incrementLinks(partner); + + } + + public void incrementLinks(List partner) { + + for (Location p: partner) { + if (partners.add(p)) { + links++; + } + } + } + + public int getLinksCount() { + return links; + } + + public Set getLinkedLocations() { + return partners; + } + + static public final Comparator SORT_BY_LINKS_DESC = new Comparator() { + @Override + public int compare(LinkedLocation o1, LinkedLocation o2) { + return o2.links - o1.links; + } + }; + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Square.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Square.java new file mode 100644 index 0000000..f227922 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Square.java @@ -0,0 +1,45 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.constructs; + +import java.util.ArrayList; +import java.util.List; + +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class Square extends Location { + + private final List witnesses = new ArrayList<>(); + + private int webNum = 0; + + + public Square(Location loc) { + super(loc.x, loc.y); + + } + + public void addWitness(Witness wit) { + witnesses.add(wit); + } + + public List getWitnesses() { + return witnesses; + } + + + public int getWebNum() { + return webNum; + } + + public void setWebNum(int webNum) { + this.webNum = webNum; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Witness.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Witness.java new file mode 100644 index 0000000..da2dbb9 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/Witness.java @@ -0,0 +1,143 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.constructs; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +import minesweeper.solver.Solver; +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class Witness extends Location { + + private final int minesToFind; // the number of mines left to find + + private final int iterations; + + private int webNum = 0; + + private final List squares; + + private final List boxes = new ArrayList<>(); + + private boolean processed = false; + + public Witness(Location loc, int mines, List adjSqu) { + super(loc.x, loc.y); + + this.minesToFind = mines; + squares = adjSqu; + + this.iterations = Solver.combination(mines, squares.size()).intValue(); + + } + + public List getSquares() { + return this.squares; + } + + public int getMines() { + return minesToFind; + } + + public void addSquare(Square squ) { + + squares.add(squ); + + } + + public void addBox(Box box) { + boxes.add(box); + } + + public List getBoxes() { + return this.boxes; + } + + public int getWebNum() { + return webNum; + } + + public boolean isProcessed() { + return this.processed; + } + public void setProcessed(boolean processed) { + this.processed = processed; + } + + + public void setWebNum(int webNum) { + this.webNum = webNum; + } + + // if two witnesses have the same Squares around them they are equivalent + public boolean equivalent(Witness wit) { + + // if the number of squares is different then they can't be equal + if (squares.size() != wit.getSquares().size()) { + return false; + } + + // if the locations are too far apart they can't share the same squares + if (Math.abs(wit.x - this.x) > 2 || Math.abs(wit.y - this.y) > 2) { + return false; + } + + for (Square l1: squares) { + boolean found = false; + for (Square l2: wit.getSquares()) { + if (l2.equals(l1)) { + found = true; + break; + } + } + if (!found) { + return false; + } + } + + return true; + } + + public boolean overlap(Witness w) { + + // if the locations are too far apart they can't share any of the same squares + if (Math.abs(w.x - this.x) > 2 || Math.abs(w.y - this.y) > 2) { + return false; + } + + boolean result = false; + + top: for (Square s: w.squares) { + for (Square s1: this.squares) { + if (s.equals(s1)) { + result = true; + break top; + } + } + } + + return result; + + } + + /** + * This sorts by the number of iterations around this witness descending + */ + static public final Comparator SORT_BY_ITERATIONS_DESC = new Comparator() { + @Override + public int compare(Witness o1, Witness o2) { + + return -(o1.iterations - o2.iterations); + + } + }; + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/WitnessData.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/WitnessData.java new file mode 100644 index 0000000..7c15bb4 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/constructs/WitnessData.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.constructs; + +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class WitnessData { + + public Location location; + public boolean witnessRestFlag = true; + public boolean witnessRestClear = true; + public int witnessGood; + public int currentFlags; + public boolean alwaysSatisfied; + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/Iterator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/Iterator.java new file mode 100644 index 0000000..f24d8d5 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/Iterator.java @@ -0,0 +1,49 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.iterator; + +import minesweeper.structure.Location; + +/** + * + * @author David + */ +abstract public class Iterator { + + final int numberBalls; + final int numberHoles; + + public Iterator(int n, int m) { + + this.numberBalls = n; + this.numberHoles = m; + + } + + + public int[] getSample(int start) { + return null; + } + + public int[] getSample() { + return getSample(numberBalls - 1); + } + + public int getBalls() { + return numberBalls; + } + + public int getHoles() { + return numberHoles; + } + + // if this is true then the checkSample logic can ignore this witness + // This is used by the WitnessWebIterator since the IndependentWitnesses + // must always be satisified. + public boolean witnessAlwaysSatisfied(Location l) { + return false; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/RandomIterator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/RandomIterator.java new file mode 100644 index 0000000..7a8d075 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/RandomIterator.java @@ -0,0 +1,65 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.iterator; + +/** + * + * @author David + */ +public class RandomIterator extends Iterator { + + int max; + int count=0; + + int[] shuffle; + + int[] sample; + + public RandomIterator(int n, int m, int max) { + super(n,m); + + this.max = max; + + shuffle = new int[m]; + + for (int i=0; i < shuffle.length; i++) { + shuffle[i] = i; + } + + sample = new int[n]; + + } + + @Override + public int[] getSample() { + + if (count >= max) { + return null; + } + count++; + + int top = shuffle.length -1; + + // create a random sample + for (int i=0; i < sample.length; i++) { + + int e = (int) Math.floor(Math.random()*top); + + sample[i] = shuffle[e]; + + // swap shuffle[e] to the top off the array + shuffle[e] = shuffle[top]; + shuffle[top] = sample[i]; + + // reduce top by 1 so, shuffle[e] can't be picked again + top--; + + } + + return sample; + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/SequentialIterator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/SequentialIterator.java new file mode 100644 index 0000000..9f63d70 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/SequentialIterator.java @@ -0,0 +1,75 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.iterator; + +/** + * + * @author David + */ +public class SequentialIterator extends Iterator { + + final private int[] sample; + + private boolean more = true; + + private int index; + + + // a sequential iterator that puts n-balls in m-holes once in each possible way + public SequentialIterator(int n, int m) { + super(n,m); + + sample = new int[n]; + + index = n - 1; + + for (int i=0; i < sample.length; i++) { + sample[i] = i; + } + + // reduce the iterator by 1, since the first getSample() will increase it + // by 1 again + sample[index]--; + + } + + + + @Override + public int[] getSample(int start) { + + if (!more) { + System.err.println("trying to iterate after the end"); + return null; + } + + index = start; + + // add on one to the iterator + sample[index]++; + + // if we have rolled off the end then move backwards until we can fit + // the next iteration + while (sample[index] >= numberHoles - numberBalls + 1 + index) { + if (index == 0) { + more = false; + return null; + } else { + index--; + sample[index]++; + } + } + + // roll forward + while (index != numberBalls - 1) { + index++; + sample[index] = sample[index-1] + 1; + } + + return sample; + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/WitnessWebIterator.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/WitnessWebIterator.java new file mode 100644 index 0000000..bb88a5a --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/iterator/WitnessWebIterator.java @@ -0,0 +1,227 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper.solver.iterator; + +import java.util.ArrayList; +import java.util.List; + +import minesweeper.solver.WitnessWeb; +import minesweeper.solver.constructs.Witness; +import minesweeper.structure.Location; + +/** + * + * @author David + */ +public class WitnessWebIterator extends Iterator { + + private int[] sample; + + private List location; + + private SequentialIterator[] cogs; + private int[] squareOffset; + private int[] mineOffset; + + private int iterationsDone = 0; + + final private int top; + final private int bottom; + + private boolean done = false; + + private WitnessWeb web; + + public WitnessWebIterator(WitnessWeb web, int mines) { + this(web, mines, -1); + } + + + // create an iterator which is like a set of rotating wheels + public WitnessWebIterator(WitnessWeb web, int mines, int rotation) { + super(mines, web.getSquares().size()); + + this.web = web; + + // if we are setting the position of the top cog then it can't ever change + if (rotation == -1) { + bottom = 0; + } else { + bottom = 1; + } + + int indSquares = 0; + int indMines = 0; + + cogs = new SequentialIterator[web.getIndependentWitnesses().size() + 1]; + squareOffset = new int[web.getIndependentWitnesses().size() + 1]; + mineOffset = new int[web.getIndependentWitnesses().size() + 1]; + int cogi = 0; + + List loc = new ArrayList<>(); + + // create an array of locations in the order of independent witnesses + for (Witness w: web.getIndependentWitnesses()) { + squareOffset[cogi] = indSquares; + mineOffset[cogi] = indMines; + //System.out.println(w.getMines() + " mines in " + w.getSquares().size() + " tiles"); + cogs[cogi] = new SequentialIterator(w.getMines(), w.getSquares().size()); + //System.out.println("Cog has " + cogs[cogi].numberBalls + " mines and " + cogs[cogi].numberHoles + " squares"); + cogi++; + + indSquares = indSquares + w.getSquares().size(); + indMines = indMines + w.getMines(); + + loc.addAll(w.getSquares()); + //for (Square s: w.getSquares()) { + // loc.add(s); + //} + } + + //System.out.println("Mines left = " + (mines - indMines)); + //System.out.println("Squares left = " + (web.getSquares().length - indSquares)); + + // the last cog has the remaining squares and mines + + //add the rest of the locations + for (Location l: web.getSquares()) { + boolean skip = false; + for (Location m: loc) { + if (l.equals(m)) { + skip = true; + break; + } + } + if (!skip) { + loc.add(l); + } + } + + location = loc; + + // if there are more mines left then squares then no solution is possible + // if there are not enough mines to satisfy the minimum we know are needed + if (mines - indMines > web.getSquares().size() - indSquares + || indMines > mines) { + done = true; + top = 0; + return; + } + + // if there are no mines left then no need for a cog + if (mines > indMines) { + squareOffset[cogi] = indSquares; + mineOffset[cogi] = indMines; + cogs[cogi] = new SequentialIterator(mines - indMines, web.getSquares().size() - indSquares); + top = cogi; + } else { + top = cogi - 1; + } + + sample = new int[mines]; + + // if we are locking and rotating the top cog then do it + if (rotation != -1) { + for (int i=0; i < rotation; i++) { + cogs[0].getSample(); + } + } + + // now set up the initial sample position + for (int i=0; i < top; i++) { + int[] s = cogs[i].getSample(); + for (int j=0; j < s.length; j++) { + sample[mineOffset[i] + j] = squareOffset[i] + s[j]; + } + } + + /* + for (int i=0; i < sample.length; i++) { + System.out.print(sample[i] + " "); + } + System.out.println(""); + */ + } + + + @Override + public int[] getSample(int start) { + + // now we are running in parallel we need to ensure that this code isn't being run by more than 1 thread at a time + //synchronized (this) { + + if (done) { + return null; + } + int index = top; + + int[] s = cogs[index].getSample(); + + while (s == null && index != bottom) { + index--; + s = cogs[index].getSample(); + } + + if (index == bottom && s == null) { + done = true; + return null; + } + + for (int j=0; j < s.length; j++) { + sample[mineOffset[index] + j] = squareOffset[index] + s[j]; + } + index++; + while (index <= top) { + cogs[index] = new SequentialIterator(cogs[index].getBalls(), cogs[index].getHoles()); + s = cogs[index].getSample(); + for (int j=0; j < s.length; j++) { + sample[mineOffset[index] + j] = squareOffset[index] + s[j]; + } + index++; + } + + /* + for (int i: sample) { + System.out.print(i + " "); + } + System.out.println(); + */ + + iterationsDone++; + + return sample; + + //return Arrays.copyOf(sample, sample.length); + + //} + + } + + public List getLocations() { + return location; + } + + public int getIterations() { + return iterationsDone; + } + + // if the location is a Independent witness then we know it will always + // have exactly the correct amount of mines around it since that is what + // this iterator does + @Override + public boolean witnessAlwaysSatisfied(Location l) { + + for (Witness w: web.getIndependentWitnesses()) { + if (w.equals(l)) { + return true; + } + } + + return false; + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/PlayStyle.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/PlayStyle.java new file mode 100644 index 0000000..235f64f --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/PlayStyle.java @@ -0,0 +1,16 @@ +package minesweeper.solver.settings; + +public enum PlayStyle { + FLAGGED(false, false), + NO_FLAG(true, false), + EFFICIENCY(false, true), + NO_FLAG_EFFICIENCY(true, true); + + public final boolean flagless; + public final boolean efficiency; + + private PlayStyle(boolean flagless, boolean efficiency) { + this.flagless = flagless; + this.efficiency = efficiency; + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SettingsFactory.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SettingsFactory.java new file mode 100644 index 0000000..a3b0986 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SettingsFactory.java @@ -0,0 +1,126 @@ +package minesweeper.solver.settings; + +import java.math.BigInteger; + +public class SettingsFactory { + + public enum Setting { + NO_BRUTE_FORCE, + TINY_ANALYSIS, + SMALL_ANALYSIS, + LARGE_ANALYSIS, + VERY_LARGE_ANALYSIS, + MAX_ANALYSIS; + } + + final static public SolverSettings GetSettings(Setting setting) { + + if (setting == Setting.SMALL_ANALYSIS) { + return smallAnalysis(); + } else if (setting == Setting.TINY_ANALYSIS) { + return tinyAnalysis(); + } else if (setting == Setting.LARGE_ANALYSIS) { + return largeAnalysis(); + } else if (setting == Setting.NO_BRUTE_FORCE) { + return noBruteForce(); + } else if (setting == Setting.VERY_LARGE_ANALYSIS) { + return veryLargeAnalysis(); + } else if (setting == Setting.MAX_ANALYSIS) { + return maxAnalysis(); + } + + return smallAnalysis(); + + } + + + private static SolverSettings noBruteForce() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 0; + settings.bruteForceVariableSolutions = 0; + settings.bruteForceMaxNodes = 0; + settings.bruteForceTreeDepth = 10; + settings.bruteForceMaxIterations = BigInteger.ZERO; + + return settings; + }; + + private static SolverSettings tinyAnalysis() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 40; + settings.bruteForceVariableSolutions = 15; + settings.bruteForceMaxNodes = 150000; + settings.bruteForceTreeDepth = 10; + settings.bruteForceMaxIterations = new BigInteger("1000000"); // 5 million + + return settings; + }; + + /** + * Does trivial, Local and Probability Engine searches. + * Does a small brute force search with a 400 solution deep analysis. + * This is suitable for bulk runs. + */ + private static SolverSettings smallAnalysis() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 400; + settings.bruteForceVariableSolutions = 250; + settings.bruteForceMaxNodes = 300000; + settings.bruteForceTreeDepth = 10; + settings.bruteForceMaxIterations = new BigInteger("10000000"); // 10 million + + return settings; + }; + + + /** + * Does trivial, Local and Probability Engine searches. + * Does a large brute force search with a 4000 solution deep analysis. + * This is probably not suitable for bulk runs. + */ + private static SolverSettings largeAnalysis() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 4000; + settings.bruteForceVariableSolutions = 2000; + settings.bruteForceMaxNodes = 20000000; // 20 million + settings.bruteForceTreeDepth = 10; + settings.bruteForceMaxIterations = new BigInteger("10000000"); // 10 million + + return settings; + }; + + private static SolverSettings veryLargeAnalysis() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 40000; + settings.bruteForceVariableSolutions = 20000; + settings.bruteForceMaxNodes = 200000000; // 200 million + settings.bruteForceTreeDepth = 3; + settings.bruteForceMaxIterations = new BigInteger("50000000"); // 50 million + + return settings; + }; + + private static SolverSettings maxAnalysis() { + + SolverSettings settings = new SolverSettings(); + + settings.bruteForceMaxSolutions = 200000; + settings.bruteForceVariableSolutions = 100000; + settings.bruteForceMaxNodes = 2000000000; // 2000 million + settings.bruteForceTreeDepth = 3; + settings.bruteForceMaxIterations = new BigInteger("500000000"); // 500 million + + return settings; + }; + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SolverSettings.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SolverSettings.java new file mode 100644 index 0000000..eaa4f44 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/settings/SolverSettings.java @@ -0,0 +1,210 @@ +package minesweeper.solver.settings; + +import java.math.BigDecimal; +import java.math.BigInteger; + +import minesweeper.structure.Location; + + +public class SolverSettings { + + private final static BigDecimal PROGRESS_CONTRIBUTION = new BigDecimal("0.052"); + + public enum GuessMethod { + SAFETY_PROGRESS("Safety with progress"), + SECONDARY_SAFETY_PROGRESS("Secondary safety with progress"); + + public final String name; + + private GuessMethod(String name) { + this.name = name; + } + } + + protected BigDecimal progressContribution = PROGRESS_CONTRIBUTION; + protected int bruteForceVariableSolutions = 200; + protected int bruteForceMaxSolutions = 400; + protected int bruteForceMaxNodes = 50000; + protected int bruteForceTreeDepth = 50; + protected BigInteger bruteForceMaxIterations = new BigInteger("50000000"); // 50 million + + protected boolean doTiebreak = true; + protected int rolloutSolutions = 0; + protected boolean doDomination = true; + protected boolean do5050Check = true; + protected boolean doLongTermSafety = true; + protected boolean testMode = false; + protected Location startLocation; + protected GuessMethod guessMethod = GuessMethod.SECONDARY_SAFETY_PROGRESS; + + protected boolean singleThread = false; + + private boolean locked; + + public SolverSettings lockSettings() { + locked = true; + + return this; + } + + public SolverSettings setTieBreak(boolean doTiebreak) { + + if (!locked) { + this.doTiebreak = doTiebreak; + } + + return this; + } + + public SolverSettings setDomination(boolean doDomination) { + + if (!locked) { + this.doDomination = doDomination; + } + + return this; + } + + public SolverSettings setRolloutSolutions(int rolloutSolutions) { + + if (!locked) { + this.rolloutSolutions = rolloutSolutions; + } + + return this; + } + + public SolverSettings set5050Check(boolean check) { + + if (!locked) { + this.do5050Check = check; + } + + return this; + } + + public SolverSettings setLongTermSafety(boolean isLongTermSafety) { + + if (!locked) { + this.doLongTermSafety = isLongTermSafety; + } + + return this; + } + + public SolverSettings setTestMode(boolean isTestMode) { + + if (!locked) { + this.testMode = isTestMode; + } + + return this; + } + + /** + * Only use a single thread when running the solver + */ + public SolverSettings setSingleThread(boolean singleThread) { + + if (!locked) { + this.singleThread = singleThread; + } + + return this; + } + + public SolverSettings setGuessMethod(GuessMethod guessMethod) { + + if (!locked) { + this.guessMethod = guessMethod; + } + return this; + } + + public SolverSettings setStartLocation(Location start) { + + // this can be changed + this.startLocation = start; + return this; + } + + public SolverSettings setProgressContribution(BigDecimal contribution) { + if (contribution == null) { + this.progressContribution = PROGRESS_CONTRIBUTION; + } else { + this.progressContribution = contribution; + } + return this; + } + + public int getBruteForceMaxSolutions() { + return bruteForceMaxSolutions; + } + + public int getBruteForceVariableSolutions() { + return bruteForceVariableSolutions; + } + + public int getBruteForceMaxNodes() { + return bruteForceMaxNodes; + } + + public int getBruteForceTreeDepth() { + return bruteForceTreeDepth; + } + + public BigInteger getBruteForceMaxIterations() { + return bruteForceMaxIterations; + } + + public boolean isDoTiebreak() { + return doTiebreak; + } + + public boolean isDoDomination() { + return doDomination; + } + + public boolean isDo5050Check() { + return this.do5050Check; + } + + public boolean considerLongTermSafety() { + return this.doLongTermSafety; + } + + public boolean isTestMode() { + return testMode; + } + + public boolean isSingleThread() { + return singleThread; + } + + /* + public boolean isExperimentalScoring() { + return this.experimentalScoring; + } + */ + + public int getRolloutSolutions() { + return this.rolloutSolutions; + } + + public boolean isLocked() { + return locked; + } + + public GuessMethod getGuessMethod() { + return guessMethod; + } + + public Location getStartLocation() { + return this.startLocation; + } + + public BigDecimal getProgressContribution() { + return this.progressContribution; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/BigDecimalCache.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/BigDecimalCache.java new file mode 100644 index 0000000..b84eb1b --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/BigDecimalCache.java @@ -0,0 +1,25 @@ +package minesweeper.solver.utility; + +import java.math.BigDecimal; + +public class BigDecimalCache { + + private static BigDecimal[] cache = new BigDecimal[4000]; + static { + for (int i=0; i < cache.length; i++) { + cache[i] = BigDecimal.valueOf(i); + } + } + + + public static BigDecimal get(int i) { + + if (i < cache.length) { + return cache[i]; + } else { + return BigDecimal.valueOf(i); + } + + + } +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Binomial.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Binomial.java new file mode 100644 index 0000000..c7eb630 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Binomial.java @@ -0,0 +1,143 @@ +package minesweeper.solver.utility; +import java.math.BigInteger; + +public class Binomial { + + private final int max; + private final PrimeSieve ps; + + private final BigInteger[][] binomialLookup; + private final int lookupLimit; + + public Binomial(int max, int lookup) { + + this.max = max; + + ps = new PrimeSieve(this.max); + + if (lookup < 10) { + lookup = 10; + } + this.lookupLimit = lookup; + + final int lookup2 = lookup / 2; + + binomialLookup = new BigInteger[lookup + 1][lookup2 + 1]; + + for (int total = 1; total <= lookup; total++) { + for (int choose = 0; choose <= total / 2; choose++) { + try { + binomialLookup[total][choose] = generate(choose, total); + //System.out.println("Binomial " + total + " choose " + choose + " is " + binomialLookup[total][choose]); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + } + + } + + + public BigInteger generate(int k, int n) throws Exception { + + if (n == 0 && k == 0) { + return BigInteger.ONE; + } + + if (n < 1 || n > max) { + throw new Exception("Binomial: 1 <= n and n <= max required, but n was " + n + " and max was " + max); + } + + if (0 > k || k > n) { + throw new Exception("Binomial: 0 <= k and k <= n required, but n was " + n + " and k was " + k); + } + + int choose = Math.min(k, n-k); + + if (n <= lookupLimit && binomialLookup[n][choose] != null) { + return binomialLookup[n][choose]; + } else if (choose < 125) { + return combination(choose, n); + } else { + return combinationLarge(choose, n); + } + + } + + private static BigInteger combination(int mines, int squares) { + + BigInteger top = BigInteger.ONE; + BigInteger bot = BigInteger.ONE; + + int range = Math.min(mines, squares - mines); + + // calculate the combination. + for (int i = 0; i < range; i++) { + top = top.multiply(BigInteger.valueOf(squares - i)); + bot = bot.multiply(BigInteger.valueOf(i+1)); + } + + BigInteger result = top.divide(bot); + + return result; + + } + + + private BigInteger combinationLarge(int k, int n) throws Exception { + + if ((k == 0) || (k == n)) return BigInteger.ONE; + + int n2 = n / 2; + + if (k > n2) { + k = n - k; + } + + int nk = n - k; + + int rootN = (int) Math.floor(Math.sqrt(n)); + + BigInteger result = BigInteger.ONE; + + + for (int prime : ps.getPrimesIterable(2, n)) { + + if (prime > nk) { + result = result.multiply(BigInteger.valueOf(prime)); + continue; + } + + if (prime > n2) { + continue; + } + + if (prime > rootN) { + if (n % prime < k % prime) { + result = result.multiply(BigInteger.valueOf(prime)); + } + continue; + } + + int r = 0, N = n, K = k, p = 1; + + while (N > 0) { + r = (N % prime) < (K % prime + r) ? 1 : 0; + if (r == 1) + { + p *= prime; + } + N /= prime; + K /= prime; + } + if (p > 1) { + result = result.multiply(BigInteger.valueOf(p)); + } + } + + return result; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Logger.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Logger.java new file mode 100644 index 0000000..e62c3ab --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Logger.java @@ -0,0 +1,69 @@ +package minesweeper.solver.utility; + +public class Logger { + + /** + * Nothing gets logged + */ + public final static Logger NO_LOGGING = new Logger(Level.NONE); + + public enum Level { + DEBUG(1), + INFO(2), + WARN(3), + ERROR(4), + ALWAYS(90), + NONE(99); + + private int value; + private Level(int value) { + this.value = value; + } + } + + private final String logName; + private final Level logLevel; + private final String prefix; + + public Logger(Level level) { + this(level, ""); + } + + public Logger(Level level, String logName) { + this.logLevel = level; + this.logName = logName; + if (this.logName.isEmpty()) { + this.prefix = " "; + } else { + this.prefix = " " + this.logName + " "; + } + + } + + public void log(Level level, String format, Object... parms) { + + if (level.value < logLevel.value) { + return; + } + + String output; + try { + output = String.format(format, parms); + + } catch (Exception e) { // if it goes wrong show the unformated information + StringBuilder sb = new StringBuilder(); + sb.append(format); + sb.append(" Parms:"); + for (Object parm: parms) { + sb.append("["); + sb.append(parm); + sb.append("]"); + } + output = sb.toString(); + } + + System.out.println(level + prefix + output); + + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/PrimeSieve.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/PrimeSieve.java new file mode 100644 index 0000000..c5c44c6 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/PrimeSieve.java @@ -0,0 +1,109 @@ +package minesweeper.solver.utility; +import java.util.Iterator; + +public class PrimeSieve { + + // iterator for prime numbers + private class Primes implements Iterable, Iterator { + + private int index = 0; + private int stop; + private int nextPrime; + + private Primes(int start, int stop) { + this.index = start; + this.stop = stop; + this.nextPrime = findNext(); + } + + @Override + public Iterator iterator() { + return this; + } + + @Override + public boolean hasNext() { + return (nextPrime != -1); + } + + @Override + public Integer next() { + + int result = nextPrime; + nextPrime = findNext(); + + return result; + } + + private int findNext() { + + int next = -1; + while (index <= stop && next == -1) { + if (!composite[index]) { + next = index; + } + index++; + } + + return next; + + } + + } + + + private final boolean[] composite; + private final int max; + + public PrimeSieve(int n) { + + if (n < 2) { + max = 2; + } else { + max = n; + } + + composite = new boolean[max + 1]; + + final int rootN = (int) Math.floor(Math.sqrt(n)); + + for (int i=2; i < rootN; i++) { + + // if this is a prime number (not composite) then sieve the array + if (!composite[i]) { + int index = i + i; + while (index <= max) { + composite[index] = true; + index = index + i; + } + } + } + + } + + + + public boolean isPrime(int n) throws Exception { + if (n <= 1 || n > max) { + throw new Exception("Test value " + n + " is out of range 2 - " + max); + } + + return !composite[n]; + } + + protected Iterable getPrimesIterable(int start, int stop) throws Exception { + + if (start > stop) { + throw new Exception("start " + start + " must be <= to stop " + stop); + } + if (start <= 1 || start > max) { + throw new Exception("Start value " + start + " is out of range 2 - " + max); + } + if (stop <= 1 || stop > max) { + throw new Exception("Stop value " + stop + " is out of range 2 - " + max); + } + + return new Primes(start, stop); + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/ProgressMonitor.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/ProgressMonitor.java new file mode 100644 index 0000000..f7197d4 --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/ProgressMonitor.java @@ -0,0 +1,27 @@ +package minesweeper.solver.utility; + +public class ProgressMonitor { + + private String step; + private int maxProgress; + private int progress; + + public void SetMaxProgress(String step, int max) { + this.step = step; + this.maxProgress = max; + this.progress = 0; + } + + public int getMaxProgress() { + return this.maxProgress; + } + + public void setProgress(int progress) { + this.progress = progress; + } + + public int getProgress() { + return this.progress; + } + +} diff --git a/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Timer.java b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Timer.java new file mode 100644 index 0000000..4d2735c --- /dev/null +++ b/info/Minesweeper/MineSweeperSolver/src/minesweeper/solver/utility/Timer.java @@ -0,0 +1,116 @@ +package minesweeper.solver.utility; + +import java.text.DecimalFormat; +import java.text.NumberFormat; + +public class Timer { + + private final static NumberFormat FORMAT = new DecimalFormat("###0.000"); + + private long start; + private boolean running = false; + private long duration = 0; + private final String label; + + public Timer(String label) { + + this.label = label; + + } + + public Timer start() { + if (running) { // if already started then ignore + return this; + } + start = System.nanoTime(); + running = true; + return this; + } + + public Timer stop() { + if (!running) { // if not running then ignore + return this; + } + running = false; + duration = duration + System.nanoTime() - start; + return this; + } + + /** + * Return the duration in milliseconds + * @return + */ + public double getDuration() { + + long result; + + if (running) { + result = duration + System.nanoTime() - start; + } else { + result = duration; + } + + double milli = (double) result / 1000000d; + + return milli; + } + + static public String humanReadable(long ms) { + + long milliseconds = ms % 1000; + long rem = (ms - milliseconds) / 1000; + long seconds = rem % 60; + rem = (rem - seconds) / 60; + long minutes = rem % 60; + long hours = (rem - minutes) /60; + + String result; + if (hours > 0) { + result = hours(hours) + " " + minutes(minutes); + } else if (minutes > 0) { + result = minutes(minutes) + " " + seconds(seconds); + } else if (seconds > 0){ + result = seconds(seconds); + } else { + result = "< 1 second"; + } + + return result; + } + + static private String hours(long hours) { + if (hours == 1) { + return "1 hour"; + } else { + return hours + " hours"; + } + } + + static private String minutes(long minutes) { + + if (minutes == 0) { + return ""; + } else if (minutes == 1) { + return "1 minute"; + } else { + return minutes + " minutes"; + } + } + + static private String seconds(long seconds) { + + if (seconds == 0) { + return ""; + } else if (seconds == 1) { + return "1 second"; + } else { + return seconds + " seconds"; + } + } + + @Override + public String toString() { + return label + " " + FORMAT.format(getDuration()) + " milliseconds"; + } + +} diff --git a/info/Minesweeper/Minesweeper/.classpath b/info/Minesweeper/Minesweeper/.classpath new file mode 100644 index 0000000..6942185 --- /dev/null +++ b/info/Minesweeper/Minesweeper/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/info/Minesweeper/Minesweeper/.gitignore b/info/Minesweeper/Minesweeper/.gitignore new file mode 100644 index 0000000..4a95481 --- /dev/null +++ b/info/Minesweeper/Minesweeper/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/build/ diff --git a/info/Minesweeper/Minesweeper/.project b/info/Minesweeper/Minesweeper/.project new file mode 100644 index 0000000..71598cb --- /dev/null +++ b/info/Minesweeper/Minesweeper/.project @@ -0,0 +1,23 @@ + + + Minesweeper + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + org.eclipse.jdt.core.javanature + + diff --git a/info/Minesweeper/Minesweeper/.settings/org.eclipse.jdt.core.prefs b/info/Minesweeper/Minesweeper/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..bb35fa0 --- /dev/null +++ b/info/Minesweeper/Minesweeper/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/info/Minesweeper/Minesweeper/build.fxbuild b/info/Minesweeper/Minesweeper/build.fxbuild new file mode 100644 index 0000000..394e5ac --- /dev/null +++ b/info/Minesweeper/Minesweeper/build.fxbuild @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Animator.java b/info/Minesweeper/Minesweeper/src/minesweeper/Animator.java new file mode 100644 index 0000000..4ff0b1c --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Animator.java @@ -0,0 +1,88 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper; + +import javafx.application.Platform; + +/** + * + * @author David + */ +public class Animator implements Runnable{ + + private Thread animator; + + private ScreenController scon; + + private boolean stopped = false; + private long gameTime = 0; + + public Animator(ScreenController scon) { + + this.scon = scon; + + // start animating the display pane - see the run method + animator = new Thread(this, "Animator"); + + } + + public void start() { + + animator.start(); + + } + + public void stop() { + + stopped = true; + + } + + + @Override + public void run() { + + long timeDiff, sleep, timeDelay; + + timeDelay = 50; + + gameTime = System.currentTimeMillis(); + + while (!stopped) { + + Platform.runLater(new Runnable() { + @Override public void run() { + scon.updateTime(); + scon.moveCheck(); + scon.highlightMove(); + } + }); + + + // calculate how long the work took + timeDiff = System.currentTimeMillis() - gameTime; + + // pause for the ramainder of timeDelay + sleep = timeDelay - timeDiff; + + if (sleep < 0) { + sleep = 2; + } + + try { + Thread.sleep(sleep); + } catch (InterruptedException e) { + System.out.println("interrupted"); + } + + gameTime += timeDelay; + + } + + System.out.println("Animator thread stopped"); + + } + +} diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Custom.fxml b/info/Minesweeper/Minesweeper/src/minesweeper/Custom.fxml new file mode 100644 index 0000000..d4ae1ca --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Custom.fxml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/CustomController.java b/info/Minesweeper/Minesweeper/src/minesweeper/CustomController.java new file mode 100644 index 0000000..3114b0a --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/CustomController.java @@ -0,0 +1,230 @@ +package minesweeper; + +import java.io.IOException; +import java.net.URL; +import java.util.ResourceBundle; + +import javafx.event.ActionEvent; +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Node; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.TextField; +import javafx.scene.layout.AnchorPane; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.Window; +import javafx.stage.WindowEvent; +import minesweeper.coach.HelperController; +import minesweeper.gamestate.GameStateModel; +import minesweeper.settings.GameSettings; + +public class CustomController { + + @FXML + private AnchorPane window; + + @FXML private TextField heightText; + @FXML private TextField widthText; + @FXML private TextField minesText; + @FXML private TextField gameCodeText; + + + private Stage stage; + private Scene scene; + + private int height; + private int width; + private int mines; + private GameSettings gameSettings; + + private long gameCode; + + private static CustomController custom; + + private boolean wasCancelled = false; + + /** + * Initializes the controller class. + */ + /* + @Override + public void initialize(URL url, ResourceBundle rb) { + + System.out.println("Entered Custom Control initialize method"); + } + */ + + @FXML + void initialize() { + System.out.println("Entered Custom Control initialize method"); + + if (heightText == null) { + System.out.println("heightText is null"); + } + + } + + @FXML + private void handleOkayButton(ActionEvent event) { + + this.mines = StringToInteger(minesText.getText(), 1, 20000, this.mines); + this.width = StringToInteger(widthText.getText(), 2, 200, this.width); + this.height = StringToInteger(heightText.getText(), 2, 200, this.height); + + try { + this.gameCode = Long.parseLong(gameCodeText.getText()); + } catch (NumberFormatException e) { + this.gameCode = 0; + } + + if (mines > width * height - 1) { + mines = width * height - 1; + } + + gameSettings = GameSettings.create(width, height, mines); + + stage.close(); + + } + + @FXML + private void handleCancelButton(ActionEvent event) { + + wasCancelled = true; + stage.close(); + + } + + + public static CustomController launch(Window owner, GameStateModel game) { + + + + // if we have already created it then show it and return + if (custom != null) { + //custom.stage.show(); + custom.wasCancelled = false; + return custom; + } + + if (CustomController.class.getResource("Custom.fxml") == null) { + System.out.println("Custom.fxml not found"); + } + + // create the helper screen + FXMLLoader loader = new FXMLLoader(CustomController.class.getResource("Custom.fxml")); + + Parent root = null; + try { + root = (Parent) loader.load(); + } catch (IOException ex) { + System.err.println(ex.getMessage()); + } + + custom = loader.getController(); + + //helperController = loader.getController(); + + if (custom == null) { + System.out.println("Custom is null"); + } + + if (root == null) { + System.out.println("Root is null"); + } + + custom.scene = new Scene(root); + + custom.stage = new Stage(); + + custom.stage.setScene(custom.scene); + custom.stage.setTitle("Custom board"); + + custom.stage.getIcons().add(Graphics.getMine()); + + custom.stage.setResizable(false); + + custom.stage.initOwner(owner); + custom.stage.initModality(Modality.WINDOW_MODAL); + + custom.width = game.getWidth(); + custom.height = game.getHeight(); + custom.mines = game.getMines(); + + custom.widthText.setText(String.valueOf(custom.width)); + custom.heightText.setText(String.valueOf(custom.height)); + custom.minesText.setText(String.valueOf(custom.mines)); + + //Stage st = Minesweeper.getStage(); + //custom.stage.setX(st.getX()+ st.getWidth()); + //custom.stage.setY(st.getY()); + + custom.stage.setOnCloseRequest(new EventHandler() { + + @Override + public void handle(WindowEvent event) { + System.out.println("Entered OnCloseRequest handler"); + custom.wasCancelled = true; + + } + + }); + + + return custom; + } + + private int StringToInteger(String text, int min, int max, int dflt) { + + int val = dflt; + try { + val = Integer.parseInt(text); + } catch (NumberFormatException e) { + } + + val = Math.max(val, min); + val = Math.min(val, max); + + return val; + + } + + + public static CustomController getCustomController() { + return custom; + } + + public Stage getStage() { + return this.stage; + } + + public GameSettings getGameSettings() { + return this.gameSettings; + } + + + public int getMines() { + return this.mines; + } + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + + public long getGameCode() { + return this.gameCode; + } + + public boolean wasCancelled() { + return wasCancelled; + } + +} diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Graphics.java b/info/Minesweeper/Minesweeper/src/minesweeper/Graphics.java new file mode 100644 index 0000000..a56bd9b --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Graphics.java @@ -0,0 +1,83 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper; + +import javafx.scene.image.Image; + +/** + * + * @author David + */ +public class Graphics { + + public static final double SIZE = 50; + + + private static final Image button; + private static final Image mineBang; + private static final Image flag; + private static final Image[] number = new Image[9]; + private static final Image mine; + + + static { + + button = clean(new Image(Graphics.class.getResource("resources/ms_button.png").toExternalForm(), SIZE, SIZE, true, true)); + mineBang = clean(new Image(Graphics.class.getResource("resources/ms_mine_bang.png").toExternalForm(), SIZE, SIZE, true, true)); + flag = clean(new Image(Graphics.class.getResource("resources/ms_flag.png").toExternalForm(), SIZE, SIZE, true, true)); + mine = clean(new Image(Graphics.class.getResource("resources/ms_mine.png").toExternalForm(), SIZE, SIZE, true, true)); + + number[0] = clean(new Image(Graphics.class.getResource("resources/ms_zero.png").toExternalForm(), SIZE, SIZE, true, true)); + number[1] = clean(new Image(Graphics.class.getResource("resources/ms_one.png").toExternalForm(), SIZE, SIZE, true, true)); + number[2] = clean(new Image(Graphics.class.getResource("resources/ms_two.png").toExternalForm(), SIZE, SIZE, true, true)); + number[3] = clean(new Image(Graphics.class.getResource("resources/ms_three.png").toExternalForm(), SIZE, SIZE, true, true)); + number[4] = clean(new Image(Graphics.class.getResource("resources/ms_four.png").toExternalForm(), SIZE, SIZE, true, true)); + number[5] = clean(new Image(Graphics.class.getResource("resources/ms_five.png").toExternalForm(), SIZE, SIZE, true, true)); + number[6] = clean(new Image(Graphics.class.getResource("resources/ms_six.png").toExternalForm(), SIZE, SIZE, true, true)); + number[7] = clean(new Image(Graphics.class.getResource("resources/ms_seven.png").toExternalForm(), SIZE, SIZE, true, true)); + number[8] = clean(new Image(Graphics.class.getResource("resources/ms_eight.png").toExternalForm(), SIZE, SIZE, true, true)); + + + } + + static public Image getNumber(int c) { + + return number[c]; + + } + + static public Image getMineBang() { + + return mineBang; + + } + + static public Image getMine() { + + return mine; + + } + + static public Image getFlag() { + + return flag; + + } + + static public Image getButton() { + + return button; + + } + + // in case we want to do some image manipulation + static private Image clean(Image image) { + + return image; + + } + + +} diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Minesweeper.java b/info/Minesweeper/Minesweeper/src/minesweeper/Minesweeper.java new file mode 100644 index 0000000..472f70f --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Minesweeper.java @@ -0,0 +1,247 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper; + +import java.io.File; +import java.util.Optional; + +import javafx.application.Application; +import javafx.application.Platform; +import javafx.event.EventHandler; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.ButtonType; +import javafx.stage.Stage; +import javafx.stage.WindowEvent; +import minesweeper.gamestate.GameFactory; +import minesweeper.gamestate.GameStateModel; +import minesweeper.gamestate.GameStateModelViewer; +import minesweeper.gamestate.GameStateReader; +import minesweeper.gamestate.GameStateStandardWith8; +import minesweeper.gamestate.msx.GameStateX; +import minesweeper.gamestate.msx.ScreenScanner; +import minesweeper.settings.GameSettings; +import minesweeper.settings.GameType; +import minesweeper.solver.Solver; + +/** + * + * @author David + */ +public class Minesweeper extends Application { + + public final static String VERSION = "1.04b"; + + public static final String TITLE = "Minesweeper coach (" + VERSION + ") Solver version " + Solver.VERSION; + + private static GameStateModelViewer myGame; + private static GameSettings gameSettings; + + private static Stage myStage = null; + + private static ScreenController myController; + + + @Override + public void start(Stage stage) throws Exception { + + myStage = stage; + + // this creates a hard game on start-up + createNewGame(ScreenController.DIFFICULTY_EXPERT, GameType.STANDARD, null); + + System.out.println("creating root"); + + FXMLLoader loader = new FXMLLoader(getClass().getResource("Screen.fxml")); + + Parent root = (Parent) loader.load(); + + + myController = loader.getController(); + + System.out.println("root created"); + + Scene scene = new Scene(root); + + stage.setScene(scene); + stage.setTitle(TITLE); + + stage.getIcons().add(Graphics.getMine()); + + stage.setX(50); + stage.setY(50); + + stage.setWidth(1000); + stage.setHeight(650); + + stage.show(); + + //stage.setResizable(false); + + myController.newGame(ScreenController.DIFFICULTY_EXPERT); + + stage.setOnHidden(null); + + // actions to perform when a close request is received + stage.setOnCloseRequest(new EventHandler() { + @Override + public void handle(WindowEvent event) { + System.out.println("Minesweeper window has received a close request"); + //event.consume(); + myController.kill(); + Platform.exit(); + } + }); + + } + + // use the difficulty set in the menu system + static public GameStateModel newGame() { + + return createNewGame(myController.getDifficulty(), myController.getGameType(), null); + + } + + // force a difficulty setting + static public GameStateModel createNewGame(int difficulty, GameType gameType, File fileSelected) { + + long gameCode = 0; + gameSettings = GameSettings.EXPERT; + + switch (difficulty) { + case ScreenController.DIFFICULTY_BEGINNER: + gameSettings = GameSettings.BEGINNER; + break; + case ScreenController.DIFFICULTY_ADVANCED: + gameSettings = GameSettings.ADVANCED; + break; + case ScreenController.DIFFICULTY_EXPERT: + gameSettings = GameSettings.EXPERT; + break; + case ScreenController.DEFER_TO_MINESWEEPERX: + ScreenScanner scanner = new ScreenScanner("Minesweeper X"); + if (!scanner.isValid()) { + + System.out.println("MinsweeperX not found"); + Alert alert = new Alert(AlertType.ERROR, "MinesweeperX can't be found: ensure it is maximised and unobstructed"); + Optional result = alert.showAndWait(); + if (result.isPresent() && result.get() == ButtonType.OK) { + return myGame; // old game + } + + } + myGame = new GameStateX(scanner); + System.out.println("X = " + myGame.getWidth() + " Y =" + myGame.getHeight()); + break; + case ScreenController.DIFFICULTY_FILE: + GameStateModelViewer game; + try { + game = GameStateReader.load(fileSelected); + myGame = game; + } catch (Exception e) { + Alert alert = new Alert(AlertType.ERROR, e.getLocalizedMessage()); + Optional result = alert.showAndWait(); + return null; + } + break; + case ScreenController.DIFFICULTY_CUSTOM: + CustomController custom = CustomController.getCustomController(); + gameSettings = custom.getGameSettings(); + gameCode = custom.getGameCode(); + + break; + default: + gameSettings = GameSettings.EXPERT; + } + + // if we are shadowing minesweeperX then we don't need to do any more + if (difficulty == ScreenController.DEFER_TO_MINESWEEPERX || difficulty == ScreenController.DIFFICULTY_FILE) { + return myGame; + } + + + myGame = GameFactory.create(gameType, gameSettings, gameCode); + //myGame = new GameStateStandardWith8(gameSettings); + + /* + switch (gameType) { + case GameType.: + + if (gameCode == 0) { + myGame = new GameStateEasy(gameSettings); + } else { + myGame = new GameStateEasy(gameSettings, gameCode); + } + break; + case ScreenController.GAMETYPE_NORMAL: + if (gameCode == 0) { + myGame = new GameStateStandard(gameSettings); + } else { + myGame = new GameStateStandard(gameSettings, gameCode); + } + break; + case ScreenController.GAMETYPE_HARD: + if (gameCode == 0) { + myGame = new GameStateHard(gameSettings); + } else { + myGame = new GameStateHard(gameSettings, gameCode); + } + break; + default: + if (gameCode == 0) { + myGame = new GameStateStandard(gameSettings); + } else { + myGame = new GameStateStandard(gameSettings, gameCode); + } + } + */ + + return myGame; + + } + + + static public GameStateModelViewer getGame() { + return myGame; + } + + static public void playGame(GameStateModelViewer gs) { + myGame = gs; + myController.newGame(gs); + } + + + static public GameSettings getGameSettings() { + return gameSettings; + } + + static public Stage getStage() { + + return myStage; + + } + + @Override + public void stop() { + + myController.stop(); + + } + + /** + * The main() method is ignored in correctly deployed JavaFX application. + * main() serves only as fallback in case the application can not be + * launched through deployment artifacts, e.g., in IDEs with limited FX + * support. NetBeans ignores main(). + * + * @param args the command line arguments + */ + public static void main(String[] args) { + launch(args); + } +} diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Rotator.java b/info/Minesweeper/Minesweeper/src/minesweeper/Rotator.java new file mode 100644 index 0000000..3a53832 --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Rotator.java @@ -0,0 +1,56 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package minesweeper; + +import javafx.scene.Node; + +/** + * + * @author David + */ +public class Rotator implements Runnable { + + private Thread rotator; + + Node object; + + + public Rotator(Node object) { + + this.object = object; + + rotator = new Thread(this, "Rotator"); + + } + + public void start() { + + rotator.start(); + + } + + @Override + public void run() { + + for (int i=0; i < 360; i=i+20) { + + this.object.setRotate(i); + + try { + Thread.sleep(20); + } catch (InterruptedException e) { + System.out.println("interrupted"); + } + + + } + + this.object.setRotate(0); + + } + + + +} diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Screen.css b/info/Minesweeper/Minesweeper/src/minesweeper/Screen.css new file mode 100644 index 0000000..c93d096 --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Screen.css @@ -0,0 +1,47 @@ +/* + Document : Screen + Created on : 29-Nov-2013, 15:48:32 + Author : David + Description: + Purpose of the stylesheet follows. +*/ + +.root { + + -fx-background-color: linear-gradient(GREEN, DARKGREEN); + + -fx-background-color: linear-gradient(#61a2b1, #2A5058); +} + +.menu-bar { + + -fx-background-color: linear-gradient(#61a2b1, #2A5058); + +} + + +#myPane { + + -fx-border-color: black; + -fx-border-width: 1; + -fx-border-style: solid outside; + +} + +#scoreLabel { + + -fx-border-color: black; + -fx-border-width: 1; + -fx-border-style: solid outside; + -fx-border-radius: 15; + +} + +#timeLabel { + + -fx-border-color: black; + -fx-border-width: 1; + -fx-border-style: solid outside; + -fx-border-radius: 15; + +} \ No newline at end of file diff --git a/info/Minesweeper/Minesweeper/src/minesweeper/Screen.fxml b/info/Minesweeper/Minesweeper/src/minesweeper/Screen.fxml new file mode 100644 index 0000000..b73c3af --- /dev/null +++ b/info/Minesweeper/Minesweeper/src/minesweeper/Screen.fxml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +