diff --git a/ZRCola/ZRCola.rc b/ZRCola/ZRCola.rc index f911595..b4847a9 100644 Binary files a/ZRCola/ZRCola.rc and b/ZRCola/ZRCola.rc differ diff --git a/ZRCola/ZRCola.vcxproj b/ZRCola/ZRCola.vcxproj index f150196..c2d8aaf 100644 --- a/ZRCola/ZRCola.vcxproj +++ b/ZRCola/ZRCola.vcxproj @@ -183,7 +183,7 @@ - + Designer @@ -195,6 +195,9 @@ + + + diff --git a/ZRCola/ZRCola.vcxproj.filters b/ZRCola/ZRCola.vcxproj.filters index 08882f2..66efdc9 100644 --- a/ZRCola/ZRCola.vcxproj.filters +++ b/ZRCola/ZRCola.vcxproj.filters @@ -128,7 +128,7 @@ Resource Files - + Resource Files @@ -166,4 +166,9 @@ Resource Files\Localization + + + Resource Files + + \ No newline at end of file diff --git a/ZRCola/ZRCola.fbp b/ZRCola/res/ZRCola.fbp similarity index 98% rename from ZRCola/ZRCola.fbp rename to ZRCola/res/ZRCola.fbp index 8d96890..a1835f7 100644 --- a/ZRCola/ZRCola.fbp +++ b/ZRCola/res/ZRCola.fbp @@ -235,7 +235,7 @@ wxID_SELECTALL wxITEM_NORMAL Select &All - m_menuSelectAll + m_menuItemSelectAll none Ctrl+A @@ -254,7 +254,7 @@ wxID_CHARACTER_SELECTOR wxITEM_NORMAL Find C&haracter... - m_menuCharSelect + m_menuItemCharSelect none F8 @@ -344,6 +344,31 @@ separator4 none + + + 0 + 1 + Toggle ZRCola character (De)composition + wxID_COMPOSITION_MENU + wxITEM_CHECK + &ZRCola (De)composition + m_menuItemComposition + protected + + + + + + + + Tra&nslation + m_menuTranslationSeq + protected + + + separator5 + none + 0 @@ -808,6 +833,27 @@ + + Load From Icon Resource; composition.ico; [24; 24] + 0 + wxID_COMPOSITION_TOOLBAR + wxITEM_CHECK + ZRCola (De)composition + m_toolComposition + protected + Toggle ZRCola character (De)composition + ZRCola (De)composition + + + + + + + + + + + 1 1 diff --git a/ZRCola/res/composition.ico b/ZRCola/res/composition.ico new file mode 100644 index 0000000..7aac6c5 Binary files /dev/null and b/ZRCola/res/composition.ico differ diff --git a/ZRCola/res/composition.pdf b/ZRCola/res/composition.pdf new file mode 100644 index 0000000..3a42af9 --- /dev/null +++ b/ZRCola/res/composition.pdf @@ -0,0 +1,1960 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[6 0 R 5 0 R 29 0 R 28 0 R 53 0 R 52 0 R 87 0 R 88 0 R 123 0 R 122 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + send_composed + + + 2018-09-17T16:01:47+02:00 + 2018-09-17T16:01:47+02:00 + 2018-09-17T12:45:32+02:00 + Adobe Illustrator CC 22.1 (Windows) + + + + 168 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACoAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYql3mTX9O8u+X9R13UmK2OmW8l1ccePIrEpbigYqC7U4qK7nbFXin/Q6X5Vf 9W7W/wDpHtf+ynFU78mf85Q+RvOPmSz8vaJpGtS396/EM1vbCONBu8srC4YqiDdjT5AnbFXsOKux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV4N/zmN5tGlflnBoUTgXPmG7SN0I3NtakTyF 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 + + + + uuid:aa477c5f-9a13-42a2-b953-4b581aac207c + xmp.did:35e54d3e-3b72-b64e-b190-cd9f01f3e85f + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:90b7133f-c10f-4b85-b13f-a73182ef0b28 + xmp.did:B13BAFECD823E611BE55E9A6A1E7218A + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:27F6B5FE44FAE5119915E2DE099E2805 + 2016-04-04T11:09:54+02:00 + Adobe Illustrator CS5 + / + + + saved + xmp.iid:35e54d3e-3b72-b64e-b190-cd9f01f3e85f + 2018-09-17T12:45:32+02:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + + Print + False + True + 1 + + 99.998389 + 99.998389 + Millimeters + + + + + ZRCola + ZRCola + Regular + Open Type + Version 2.01 December 8, 2017 + False + ZRCola_Re.otf + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + PANTONE 7535 U + SPOT + 100.000000 + CMYK + 0.000000 + 3.000000 + 15.000001 + 20.000000 + + + PANTONE 1788 U + SPOT + 100.000000 + LAB + 62.352940 + 62 + 33 + + + PANTONE 1795 U + SPOT + 100.000000 + LAB + 56.078430 + 53 + 29 + + + PANTONE 7622 U + SPOT + 100.000000 + LAB + 48.627453 + 32 + 15 + + + PANTONE 7621 U + SPOT + 100.000000 + LAB + 51.764706 + 41 + 21 + + + PANTONE 199 U + SPOT + 100.000000 + LAB + 55.686275 + 60 + 23 + + + PANTONE 1925 U + SPOT + 100.000000 + LAB + 58.039215 + 63 + 20 + + + PANTONE 1935 U + SPOT + 100.000000 + LAB + 51.372547 + 54 + 16 + + + PANTONE Red 032 U + SPOT + 100.000000 + LAB + 60.000000 + 66 + 35 + + + PANTONE Bright Red U + SPOT + 100.000000 + LAB + 61.568626 + 66 + 50 + + + PANTONE Strong Red U + SPOT + 100.000000 + LAB + 50.980392 + 64 + 12 + + + PANTONE Warm Red U + SPOT + 100.000000 + LAB + 65.490196 + 61 + 39 + + + PANTONE Bright Orange U + SPOT + 100.000000 + LAB + 67.843140 + 57 + 63 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + Adobe PDF library 9.90 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>/XObject<>>>/Thumb 131 0 R/TrimBox[0.0 0.0 283.46 283.46]/Type/Page>> endobj 125 0 obj <>stream +HAK1+QMfCwk/.6E mAb=l$<cwbgz+7o2'x`42F>}vHvν3qG(zƄiFnQ=TL!9tϬ}-umcgZa/.o޼m^H!%aK.RrO|eMlNP dQ9@5׳&Ȧ,OS +endstream endobj 126 0 obj <> endobj 131 0 obj <>stream +8;YPh5n_*Y#g5kh$n$:nhcZY[;FTEZ*`bqS).SI*C]3W#E.iVT'%XoI1`&/D@A-+. +eABO*3:&"dJgssV"/@\@54Gd+!e^M[R +I8*Ir`bP31U8IT'+IO`99>@@g#)5=;cm-!f?Pq0r<1sF-]*)sSn"<7s*F?hW9nZhe +N^4:Kk:tTO)dT+0&_*EV6uQZGfDao\lIL^Occ9Yu6*OHu~> +endstream endobj 132 0 obj [/Indexed/DeviceRGB 255 133 0 R] endobj 133 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 130 0 obj <>>>/Subtype/Form>>stream +0.114 0.459 0.737 RG +30 w 4 M 0 j 0 J []0 d +/GS0 gs +q 1 0 0 1 168.0918 208.0005 cm +0 0 m +-25.27 9.572 -54.911 4.184 -75.258 -16.163 c +-102.933 -43.838 -102.933 -88.708 -75.258 -116.382 c +-47.583 -144.058 -2.713 -144.058 24.962 -116.382 c +S +Q +0.114 0.459 0.737 rg +q 1 0 0 1 185.71 246.0523 cm +0 0 m +25.68 -85.982 l +-61.629 -65.238 l +h +f +Q + +endstream endobj 134 0 obj <> endobj 129 0 obj <> endobj 123 0 obj <> endobj 122 0 obj <> endobj 137 0 obj [/View/Design] endobj 138 0 obj <>>> endobj 135 0 obj [/View/Design] endobj 136 0 obj <>>> endobj 120 0 obj <> endobj 121 0 obj <> endobj 141 0 obj <> endobj 142 0 obj <>stream +H|yPW\팢Q}1Cxk1DzxGb#Zb/^1F#Q㱬+ZePk5gJb L0hFah_@WA{Jj\Wr32ž4nљ D ݳI>ۑW8P/~]n9<]뽫@)$brIΒx]xe' +Jr33ēxW^Z=LՐ|fyF^VuI-uUw+^/+t&}1FG40!s"[Ccj)N/"ݮ  iH_҉T1мn)ВU>zGAi;c^i:*Q۫Jd:]FV#o"[{7DE?Db h26xD  1x C<` P p@Fb~xc0|c&bdLTixIHF +ӑ31 cbcґAƿ NAaq_$N4kT÷8 pWYXEc֢,3`5b rTd*1}[n:\ 'W XnکaT<7.B|OGS8ۘf0.43qM3Tl +evM3(vlħ؆;P2&3܅qP[B_[봇[ #Kh_JTHv$6uUu m +mO:>__ߤo7D* 5!@Q)E}H- +B + ֩ḱ!IOYt=G5=!-tg 3If3+fsb1cdVء46Aɞ`/U/}u"^ٸQn7K\r|n ;}r8?|ߗh>O,>wooQ|TAżӼn,=,D[, +!%V'#$ +Ita0_v BpV*',ZYXY/ZZYoXo[lI4[vVkc&vp1Q/-Gcb_<)^5Еrp|r3DKiRJG:,[=_I,x +==󞻞{M{}u{_/߷wאpqFG[ M3N6kjdVSOr|X>'ke[}S+gJ?e@)S*k?NJj>*QǫYJuZ:k]խ"@fRڲLpr0=(95x:x)V*OCT  M /;<ή+0_L̗tzPna8b2_gD*#WQ7bm4>4CO/ u>AF˄L<33)e*}!S4Zba>Öv?~^fkl+ pfn(7|:[-Vsse\51k"{x+1?|>_Wy1u7Nbt%͖, tK1_̧*xŚ`h=J_V[k;6v\j^ǤƂEۉy8IOSf1(]vfW늫w3ܛݷ?﫯P/>%HR.9R*KRT+I?{h 拈y=^xb>[JyEo[s|m hHo(jAb7U6UːÉ8y\J;3|\'&ONYؕRũT*:ETdjJjjWjQj&H - ?k `QpK$x&X%滷6?m %_-PM\iN&^G iIBh) V j]V]ZSZ=գ=jUcW]Pvkխn[aLꞺ7ĖV||޹Y({ ?awVQR\$n 7BpE8)4 CW)@Hx[xK.l6 +:TO'|9?/GR/!̧F^Çsnp.p\ wwɽͽmp Zn)w1n77j\5Wɹn44W sNg 'S݁MՁ@e DٸcACc__,^e G_cG>Vrv[gyl4ɆrmQ/io~}}}Oŷ÷7mmʶχ>+S.3QR{=n'&3W6 +7`4oUL13 d"-ҷtWKGȨ7o+z]IK_JӃL?Jk(:Xa`;jg[okUg+ ٔ6†]YoYYLO kd=l=֒7mWisFҒKaliSe-+,/[fZI2ҒgY-_f||y9 Vs 8fZLgL'Miho j65zj꩙I[t'~p#9#8I?'q{ZG؝yl~jZAx%rY'75"2"2#D}k]]ѵNNZtguח &^:@&B\ބfmGNloBc089D%T$ 4((K +Ǻn) + Ux CGEiEy n@#~A?7x0=t)1xIsk˻ġ8Z28\-vHM{"b۠-z)G՛^ Pj%Gl")-n0RF +t;`pH)i%)y\?O<'I`c!,yQrUQ $)+E}S( CEi4kBgdTJCfh#iQQ)rQEY"]!WMj:!2Q&H&Z,ے֨fa1gPSAی7}j@vxvEO^%u}PgPs|gI$ѦN ++2$?iS6y9-}TnH^_pl4D}?yyc&1Q/PK%*"镵DPHsvg/tJL)8\"=O}|jR~]rjDQEܡ񱂊*Y=PJS,s2-fcBL)%#ר3ҡ;[!`0$#֤d >6O"!]syqꈘȄY%Uf6Rʴe1O:5Om)2VV04,NRE(޸@LY2pc$5\wyJtגUaӲeVs5ֲw] ma +']׿l}еK{̒\ +f"y.*!f1W K ^NHh  j P +X^@#qkhb2D1(0Fi;I_Dp *`{R`^DK0#qא8D \"YIxSB/AP.X`3ʃJ/B9ʃ@X(G0<c C]ma^%ۂO+*JlBۀ(@_¶lr)zhu AdJ6!FrUhUMyZFdrV`xA^q.yސCC )1bs!COt!-º^A`K(=Y~|ߛFZK>(y~c auk;b7!K>ys~|xc5q7VS^IO9MR<`;лDZW韴OrRfrUw|GNs?,KViH˔yNBJgmi31sKD*e7 _jb)y"YlďJ}*qrLi9s3g¾zJ.<1)*{>m_sgz-Rk퐿EJ8Gu)/.%J,rXb k;r|w2V;x<"-&,36_D$+qK>2wy5:}_Kdn + Ku c~lr*.sG9XKuCx =q bY +}7vXZYW;Fǡw{>؎\Om!˼+S˹\:I{_ɹw{1O8898ȵMrlbƌMv+nwǮZb(dq`z> #Ei>a/4Y!9!^roc0 SXA<:D}M :d+~=I*qڜSorMMO'VI;/:Se)z{K\r-kYu[.Y8;m:\G8/{vGˌÊO>)p $&+{F4s8sF{ L͚rMSb;Q~@~]sỊ~ͦ~d;M_ȉcw`]s,Lskmb TnLsp4{0c5+Oz2ȧsY{2*P;:ʳ StpB_;>E]\kn?ɒy +9|ݫN*#n,)M>y7d](:V@2܉wcK#/Mlxeux'O{2KTpݬ>2s&IݟoA=J⟲ij|^PZJaS\o猃M2DnWw3$JdܠD7xMNo6(+<Ԕ(h$šqۥĽ(^xT}a.BLkm-6|9kfB0W ȧWÍѷqVكV{;޵3%ʤnu_г{r*r5J{e;C&&'E^lPܝgE-Æڂ'>.F5g.N:>eHY?'&)⒣]5AT\)Cs<n\}~>b*?9 =wz꣣sJ2N)葫q ~G{R.4HoAZ|f# +1bdslyws1Y֡J[ش [|{Ye޷k>m_ _J* ɩV, J =O ZG&*Jw}pOd W =U 6w6BjS# C=W}Xc7ʦAdܝ +:(:jp:eN +pn}SRx;e"rZ~ֈA+xˤYYdS.cHm:GM Wᔇ^XϠw .ezRϲƄA t=3z*.{ :S lSVHVTzQktA +EsWbgSx(y1M1bT$n22lTL6tN#urfl%A&ﴯ-VozPMь8ۯ\M[&O3<.`6⡱ՀWBlP@($.cjsӴFmK.s>g,> +Mmև!Noc+XqZC+K,E.6|XWV>vhsإ8+(^@S_W@g~+}ܖv\u,WIK[F>ڨmRc 8\ɛ r;І>Ħ+R_vZ6Mw`;JĻw ǺC˘?(2pupLQљwch3hi^ Uo=-URF.țXWaCE<)1طӛ*ZO Ӽ;܃{ľ\K} +`]#T9 cu֓ov7Kesk˞k/]dk7kRVsTK[m5 +c+^ɽ;(-$_Uf\4Զ/^^ތ4̪K?rܱXEWd 5\ m9$.$&o'GZI["¾lqzSs67]^^ xX)YXxQס6Kވ19^ ׻JǍqOZKr= ;p_#yRdXYwq\ipƝ乙H?$ߪM[@kd +n2;[9݌pq nil9˻+G{ܥjo oy>lwn[rYnI̮~.F"yo#gs39+%)ֱ?ź!vwq'-k>e֩\B 8%8$#UR`Eޕ*,㎣K]ސYQh&ޖz3FhQ!Q6o~;n*vTOJRc5OzeTc说]h(vz +3ء8)҇5}w@!o\pj1/?rc4 e~+~UHK|>&oygQ6jA7ܓ$4͔%2^4^3 1>yۻ%O~*Pw֮AKL;73ez@Qi-wus9ZSړ8^[_0;"Oɥ5͟ 9 6osZ͸;H)qw^YA/n m9~BM3~#+is؀oXQg\ +賒27h$LJ5 hX2k9ƭyn k7iΡY)6D8 +@uvHԙ k5%.-;'%QiжU;zN5]'+G㔇hS m);*U9D]/Qx D/gC 7.KuY;KT܋0> +O0'1ˊw QP`4z}0>78itB5CJZ\nyyKyYk\F{oC}O:c^!Y2@k)^Iq.)&KL˕t{od=DZvߔp8=}ռ&E鍈lA{|l0Iuue + aűGY7Sm2)2iY@IeH< +0E;BY)|^ g$jU6N̉_DvoΡuP"WKrIW*JjW*V Дs !SMR 21aeA\F/1 +H,1r>s+>s9<5!5 0no`wokY9[R`sΩx6o_Հ/xqo.&垻2cr mip`T{ɝ(o0W>Ȑܡ|1$UbQKL9Az=ÀX#oH:B&ݠֲdSS +I}N]=\ &~/*ڭJ6JЯݚtꀑkB[:uc9N }ʈodDGkwF;ѷX+UrjGؓʊ9jtΙI kƖo?1!v!]f#1Y!6oh@GSRN Uu\ՔG`cﲞF}B{3~Vtc|mC +>|Z(C2$FAf3?cC_qmowvNZֆRrBج1㫃=!;` ڹ'TK[OvH"#JUf|o5pww_L˅̳ "o?>GMmhjm}r{6G.UӸydh;n`/x׀_2.JJ"XgU?' ^N9&6qo[xO/3ϙ'ӈ҈}FΌy#qkam-6"7 ;YB:`Q{xOMC Q!#?C-o97[<A%=5uo-{ed]bO5 о4h_!D_ HMSk&mi?K%0XI*^gl61/Cb_m糴R';~sq֫н +o5i >` 6X63uPNLP7g}y;'[/W>?ܭWy,آe5E|ɿ]AUjs's>sm!ג&X6)"2v7 +7pigz_K5$渠lW5N1vtQۄ}xa;i$Z2窪)ysYښT4gGL"M>YYigZjf[}\# aW]go*=5OX=B&7f5KהZݴ;#X^% 7exT܉ -UuG_fH/c[;")|lS~z8X/h5?9ﻑiSHc6#/H=N~du껐WcbH9K|ڿjMOC]N(o@>Ӟ1|mv/37mr@vq? (/O~%͓׀s~{~Qv{XNQ򯁙ܯ-]=b_{4c-ؗt: :r9~2CrPTߕF^5?4!rB{\r&8 "{%Fl(W]H/#'?5-\eK+x9r]{& sIڂoGlVkӫV5N-$c!Mq؆D.4ſga~`/eZUr'14VMӫ Im."ie+E+lEl.U-RZY +E ER"vITR٬93ν$~2<3g }?|+2 +w I_-?;Uܕȶ/43}GvcR:YNYcXӄ=J(G|Tj s-{+-&΃PAIT}S:7X1.wγEUGϾq]ug?h+0kY W3Whw]^^s: ո_?+J[an']M?/?*J%r` +=ԃ^ ?vML^Fs˱BKSBJJ^'ψ!/+8a%)CaԲj O"aHv?iQk Τdb;7'چ}uX 94=4b,ռsMNEu3DK {*atbIdEv<)[ҧƛ Nsg7g>Z͎"J<= +c}OuX~Xco܁.|9hNtlӄ+8W:x52/}++TPۇ7^:h0"aj{)}6KLD? gRy**rONY'c}UFSV:[SEߵz\ڵFk\gk;:Dzo*M]Yfu[Ɯ\f2}>HK\ ox[s'~ II-qBH{죥H&z4՘ Rx/Ѵ >ܩ&iw=Rٯ޽wV fws_ +ېi#R)$ӥ@ǀm}TU>lgwAh^m]P4R%FZ{<(ٷ7b|*`{gNQ;|ԝP\wQ}r@$U$ UOD7֓'esP}(ˀ}O·'\FÐa>98yf]|u> s rrޭv&]KkiwiѽJ_$4~0Ma8v%jM+ ruds@\^=[:p/QszTHoRx+p,Lʫ8P?&WjŚf,A̷ӌ_ KxA_rI.mpӗԩ[m8E7)3ic8m!u0.ԇ)L" Z`t0i&6.eR(oS:n }%?Ơ@C7CzRԕɗ.L`nVـԃغ53\ȑTe~Qqgfvv1IZmzqmFim.ڨD  +"R"A|)5B+ "R XQ)X4m;sf2;d/s̙Μ94 +P{-[6gg$=H~Jo{=_oF}m{Rr|NU{땐9ߪx~sb7s~(3u7׮f۰J3|!E"IC+"&t1XrYRfa .1a.""k$c\Af]f>,kFK.֍Cβhc~AȜ-{MfpeɖmY}~QdRe>K++Q7뼓?Ƶ.ub~} +sf!MyiRٜs%< ko~ͱ#lQ׸j%y ;,RߊyϽ77;+j;l;<63fACQ`ӟ~r7MoF+^{m⿆ +{0~ܯ1ctx%g59Os=۟D GJy^#a{~`Ckcߋ>z>'9@ E`>N/.=7M"9콌[6'nCK|IX|qF 5cVCvdY)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJ)RJj~pp 8xֶqq+{ٺ[r^`𠭻lumgkw,޴nk7ؼaMcmy`;:؄u,7!r vViOqvFQo$P[[' +endstream endobj 139 0 obj [143 0 R] endobj 140 0 obj <>stream +H\j0 ~ +CN&0 rh7[ m琷&͏O<6 0#BQwUn;$$:g0D5nΙV=^7rH>:u{ݒN2(hp8IW3!ȂZ}35!EW06:H&(j@r5ׯoT?oCxdROU],<"څӕX[ 0+1rk +endstream endobj 143 0 obj <> endobj 144 0 obj <> endobj 145 0 obj <> endobj 146 0 obj <>stream +Hj`Q0؁@ +endstream endobj 147 0 obj <>stream +HW{lS9^A'v1cW qhҐ]H q#P:h׬@;iBA;mE]VZ: 1$`*K~ؔ`ѮLZЗ9}H!DB?+^ya(kuN?R&CWO\Iʍ᪃W`I>~a1"=e}>݆5M7ݱrn8@3wo.eYD޹ןg*5d~c הI#vk~XxQ+c:iƸ9-Wv?TKdj/+~KyIX'Kk&G +FhBKmEQm#T8B/^T4BJXVQBL0Է!sgYXj .+R3 *q*Q9!B&M q"F--rien?Cu{BaS[0O]SwS8$()OQ}((O}0i9UP2r2 U[d~ +M&MjC 4U\VRm{-䶸VVtSjffxg)V%jd+:ڰh++׵2oYhrVٞ;o:y}ǖ;ukcG~p`,/K uJB˘=5{ReEWǮ;\wǩ+|z[Śc=Jc/*;mQ<>Vٸ^a 6ѫϜYnc[Ê귮f V%/}8+&?|K0j4[*twW<ě1ي՝#f'-fc9SX(&=SN;sJgTW{1$?ݽrU՜YwmەWӼuUpu{`vpֱ~o19e m>HGJsY\#s?P|{}ȿ[XURΚGc[&5G<GW'NvH>D/m|ILd? x6DBVA&e -Z;a̿<_ +hOBH Y B! `g:M[;IZ@aV/Q\71Zۓbv9ҮςI7m';p"Ă,vO%,HG#w 1 IƞjVa,8 & $H)>>`=:7h83)i?Nwcw [&l{VgP^ Φ +TvS!;E4CC}ƗEn!rcßbrWE,dƉxxQ;X,Ƌq +܂ X/0^qb'=dzc/I%o+wPU\£q%EplEލm; +È"xTSNHhP"~T??#~؄EģKQߊYY7@ҁUE.&|LC11V2Ǣu/j/qUԼIZJS"κܤ|"R? +ĵtCw!~)]If&P4wUT`@|,Dl;Ѽ|T9aЋhrśp$j};V# I4]2}&=E4Q=>g">jy>t|@Ag >סw9\o _7˾zwW'hH%a5E2'EȞ9b|nVV=5#okUԉxC6"U>G|'{TR QgaF^=El#|WqM*@v";uÆ<ԇΣVv\ +l9! LfO4 /)C3Ul1$aMcPS!G~o&oz}CwTy^qWn(CW +XRb08׸g#]c!̒9JL #5ns1su?l1sp}o&ߜyys6:̓u뫜JeVV~VrPV2!k[ϸzM^zIbw2ok5wRbT+!>9Ku;o3dE:ጣvJ̑/x*(JyÊOd֧7% 3"eBn`;lg/ž;KACR C φ._%:/}Dײ=Q{KCޏm81AOYZ^=X;"=`=TdHEL~nS`_Fg|3A!ȡ8)`?l]/֔=?oX~sq\"& 8_`|v%\R +?Lܦ|8m^~ړ:xl |6PթXP P lπaPnl$S_ l<9QVę*\N+^|q½_W32+*7~)rxOY~ٽ s"Yr"9A %[cd1\L6ڛd q V1xؠ<ğS2AQɌF3Ayj3;̀EyS?Ś|]aX +*A]#qƼ|j{ ܨe۹)6u)֖yB{|yX^'\G>YJo 6V|D( +vArw=3w)6\}?kySܓS(RiwClSJwoA+/@ 4uI$Pk%"-hoR_r̿MK IvKb*`^E|L5=ix-lHPZLuz:o}cmROmVHՈ_x_ZyjܩR{d ^}Qn%GPeW-9U-6;RWuj&2,ۭ y+k&y)2(٠yL\rZͻF*Yn@a_^t* +b㉷^v',9`FTH7s,ӹu^3\GB KA3׫p*"/%;Ay14x+ap go#^XG==x$2@:f-=r=> lS6H/+*A#v\XHl2J jSY0>iy +lH!=IçPA,toz^ )6<ꏪ|Pr\ uLxbO_I) -8I[,ϗO}y*`+ko)[ s V8%⪏& eB}9i3 7V5+4~G oxj\vpl31*s&I>q\Kbؠ@߈bX!{;A Jq0H9k~tvbRNb졼[mRYd.k^ +tvzm] rrxP-MgoXpAR󪰏rGc +xM|jOW!rFyUV99g_9z+ƾGLKVԜ qʜRsk RIҲd [qv +98mK^5Snync"x(e`h^#iJa!ieN#Vx;s1gA|6>yR{ ]OJQ2-gn nR{J/;yad(,)YmZa ːM'3\> ?GS>v(υyWuTc;+5pc!A?%3<.~F\9J)NIrb8Ÿd6+%ppl8T w+pzmWJ&U~;"uzXWS]"'{}5LVǟw*:Է40fP !95P6#-0Èh1X!b-sqf1iױF cc:H٭3-}}W-s9x9GBdN T1я-&{q]7TOт̑j^1)k&99l\'{lqsTU,kkVWz;Z(sQf$ Z^\ Nj7 +c~a7<6Lx+Ͳ[Y^h-rKtIq'#%b|boԯ"3"9YNkgg}LvF,+$iyN$;ܱ689V[)Z%QiYGrl|D|~qOfi*2gtq,mRK=%˘κciBtcuN;|YCܴ\*]$k=yZd8K-^Nؙv6F7\(,4͔rM z\{sXN?A" 9"*mL)`ZEhACgf-\<]}HkU;lBFaDd|ج-K +5|ڠrhXe3^RgR5sK[e:#E=U;ECMRӉZ|{D?Fжze(i-}g,7ψI= [97ފFeyHVa Kr!0e 1F="Eh#d:#C:r|E]%"\3 ۃ.|{Z39wNHxF&(knpO.ĿK[|rI9㔩we1;*+V1Dx'QvZקźDTV8hJLh`U[M>̹ a@Y(^8pO)9cqV"(L~W ug2y>}A]5&\Gp?GX^dGZtkGL}ނKuHlUj'Π_[չ7bxʺ.vQ{qY3ڡ<_"?nF/1v.w\iUۣ{ab4x=Rac2c?1 +9=]a6W @?׆ actX-UaC>1b>} 0#62Χ?昬dHD]`[kgO!=S{/қo Ѿo%! +mkyըw#4 pNNXn^̻j O_La*B?޼+}?,/?7'EWgr atT]9eGƧ\%e +pS8/yts]{e?T`UɫQ3(K@I)bw+*0=~׈Z!KD@M/yn1ư'2(ͨϓo(Tc(Oļ!mċbR]޹_X]oOI.hRN+~ʺfi!^;`羝4%hgy8](1a{lΎ2u4{ǐ[j"4 ]JQDv!΍u#4 w#{.Ĕ +(X$Thb| +O̧A7-YMWMڧG ||{*$}KֿUڣR1i2ӥI3oC0ߖ?X_ƗWk3hV+7%WцIYƵ>3@RlzYWӍ`v'REYGOԄ҉@,K/ *WG=⭎Iɶz9Y̧9c<~}tMWJ)KYXZr) %P\S 44]: Y:IW:֥f"#kW4ltA J231N .dFy=}[??~991=#f܃Gޕ RqY\ ~xOd3ZN^5A?GFĈ{_^m +o +&q~z>C3cPq/AKR>a?'2M>2CzX_U╥qߍ%{,X<7WHeP~8k+qu:>c {!MYb=d][[MKbs&tl 3?L7"RneI3fAKhþg5srlui1NqWTwV1>b-bQa?֘uRov'(]я^εZ4=qY2RiL.^DJ)2XKXu^-Rfܖ +(4zKeQoRse+}C"Mɡ`2.+ͲH[(اu$2(E +jW|2_dBZEQq16{})ĕ۴R߱,r} {0 +e%.,Y R`.'͸#nm=-ic{3GlӶJ#'gH YT9wmn>T#D'^=uJ~ +>Cۑqy|P1K:4?R7f_'GMO%q_wdvOc zL~N$1}'Nc7~)i0Km51s%gJBY*r_Auž^S{eAy̙o?|`y$f\dkb${d;vNȟ vCqI7d2)Mfe:c?zk݈G0?po6L8bQwVF9+l0Dht#{W[^퓨Ydi5}XާfAOrÍ1J7)ŽXm\Q_F114@l /yμzTJƦ +Dɔ +lT};qm0DeoIFUrmi3+GEeyJk?}-TAƬ>;+/`"e`.0Io"WNxNJY4.7 D:B;I^o8g1O3gi52Q[- 2E˞:mz9eg9Y-ƟPhhX5:OJG75YȟxK~ r$=(Y8M:{* “ XO×aw# +fMv!t+^-n zƯӯQpsTC&, s_J_+1$u퍻;0-޺?xÎ?,7$/qKYqK +3tǼu8{mRγ%ï}I|Z R??ۭ>⣇4D[<2@*/JjY՞*P_(ǟs)ګ>Cmq>`2q@ۣ6FE)!]YH}~©Ro6hKRʢ._훎l WQ)N6ɫ27mvs {=#z{eD=,_}'>C>Ӊ tMXH#G<SdXO׏(f`x}7CoXˎϹcdc}sC[ެg]}{4LFuc⯷ ׇ +S碗~}xߩ}B_W}cM~;OloK{wEFj<`ҭC^/e9y~{@*{TjL͙vc>KScQyK"}REJD\@P_v[1XR%v}aʱ~H&uG\F+(YwΉX w某?,|y*{\] @?ж[K>)EDyʍ2l9zc`$(b,^6͊a+IVZ>*M{~Q:2r)#w"2}:m0W +_3>.#]J8(jY8mD f#ʓ--q;_{'_w+:CCԤck/1"i$C%'u؏ !1q_ˏbܥ6( +ǝ`uN46/7Đ;vU BYm<:s$#[vtJu_V_[TXqe-7f&N46Zur7Q2s.a?m6nѨqv3&$xdA|![ Av^ 4㛝6F׌ 0& =$}}ؽG)^RЪbʭc\g"&Z#㻢,CV62f+%E&e1FxuYgV -ڜM5{p"1ûҨ,*18̀~5_rǸOg oƼQb2(gy=k'}N=UF ڍT:җlY: ~`O %\`jtYة5^y՚w~Zm낏9|qJN5HGqKN2G+IU$p8u5Rdۯߑz.p0b^;d9?h+}(=zmT-L1F_?A}{(%~2RS !BYU?Fݾ +)URɹANt_moR YܝIw[j-m)s ;FnIR}G3v39R1p. a6[_p251vli؇f0~ٍ=>@؈dm9пžEghQ|4Ci1[ ubRf#lj@=q)*@,Sn}CN3 ZlBnj$2u + w0ԏxuL;} [kП-2ߗbYnC>fM}l:qju?$I~$r>AoZ_Rrn'P+7 +a)YQ{ +9G҇WпkCΐxJ6uePn`mF)C@~i'iu0_`5p\Vrbx1 o+#B95 a!V>rr NqGP~\cSe|HNԏ 4qRRw ]Zn,۽EK9(raש>Bs gvR3na#~ۊE{{_8c:>A51{j˽wXs=8=v]og)& uzOXe/lc'YŮ~ yT7KA@yWbD6@ C_!/O8xIњc0~^ J _E)&oarV;N!7 1d~rˍ%lزjC})ZrjKETRx=zPDEiyg8KWb !$zq/Ǵ7[VO(-Lc-1Fk r$2?6Ƽ9k\s=wa5א'KMoQY3U~Wېsd8%'%'ylN;stڪ),~89#YD,طe~]}DHέyl 8 zv/b^Mfij&Gy(=ץOhUn6IqV`5KnH7MAVE*ACQ/* =x "R}7fw27#*zTGyqku+wHye*-^~}srf9;f|jkʩo.3V<>o䜐{뭨1vI + +zh^˛=@ηw/a}*龂}>u"{b4%y>W>}p̻uzɀCN~'4+""""""""""""""""""""""""""""""3`S#0L 8+ic\> endobj 127 0 obj <> endobj 148 0 obj <> endobj 149 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 22.1.0 +%%For: (Simon Rozman) () +%%Title: (composition.pdf) +%%CreationDate: 9/17/2018 4:01 PM +%%Canvassize: 16383 +%%BoundingBox: 47 -297 249 13 +%%HiResBoundingBox: 47.29296875 -296.3759765625 248.427734375 12.916015625 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 312 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%CMYKCustomColor: 0 0.029999999329448 0.150000005960464 0.200000002980232 (PANTONE 7535 U) +%%RGBCustomColor: 0.993420004844666 0.365878283977509 0.377458333969116 (PANTONE 1788 U) +%%+ 0.868353605270386 0.345968157052994 0.342261672019959 (PANTONE 1795 U) +%%+ 0.935583412647247 0.31299814581871 0.424418985843658 (PANTONE 1925 U) +%%+ 0.807047545909882 0.292104095220566 0.384382575750351 (PANTONE 1935 U) +%%+ 0.894339025020599 0.303843021392822 0.381168574094772 (PANTONE 199 U) +%%+ 0.75023090839386 0.357102602720261 0.351393848657608 (PANTONE 7621 U) +%%+ 0.662457346916199 0.360956877470017 0.358936190605164 (PANTONE 7622 U) +%%+ 1 0.449287891387939 0.196464270353317 (PANTONE Bright Orange U) +%%+ 1 0.329869985580444 0.251254558563232 (PANTONE Bright Red U) +%%+ 0.985742032527924 0.313544929027557 0.343336343765259 (PANTONE Red 032 U) +%%+ 0.848328232765198 0.222398862242699 0.409370511770248 (PANTONE Strong Red U) +%%+ 1 0.405679285526276 0.36485093832016 (PANTONE Warm Red U) +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 0 -283.459999999999 283.459999999999 0 +%AI3_TemplateBox: 142.5 -142.5 142.5 -142.5 +%AI3_TileBox: -155.907786865235 -562.70509765625 439.412220458984 279.214885253907 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 1 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 2 +%AI17_Begin_Content_if_version_gt:17 1 +%AI9_OpenToView: -399 173 1.5 3222 1819 18 1 0 97 246 0 0 0 1 1 1 1 1 0 1 +%AI17_Alternate_Content +%AI9_OpenToView: -399 173 1.5 3222 1819 18 1 0 97 246 0 0 0 1 1 1 1 1 0 1 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 27 +%%PageOrigin:-164 -538 +%AI7_GridSettings: 28.3465003967285 10 28.3465003967285 10 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 150 0 obj <>stream +%%BoundingBox: 47 -297 249 13 +%%HiResBoundingBox: 47.29296875 -296.3759765625 248.427734375 12.916015625 +%AI7_Thumbnail: 84 128 8 +%%BeginData: 8949 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FDFCFFFDFCFFFDFCFFFD63FFA87D527D7D7D527DA8FD4BFF52FD07 +%F8A8FD4BFFFD07F8FD4CFF7DFD06F8A8FD4CFF52FD05F87DFD4DFFFD05F8 +%52FD4DFFA8FD04F852FD4EFF7DF8F8F827FD4FFF27F8F827A8FD4EFFA8F8 +%F8F8A8FD4FFF7DF8F8A8FD50FF27F87DFD29FFA8A9FD26FF5252FD29FFA8 +%8584FD50FFA8845A84A9FD4EFFAF857E857EAFFD25FFA8FFA8FFA8FD23FF +%A8857E847E8584FD22FFA87D2727F827F827F827527DA8FD1DFFAF857E85 +%84857E85FD20FFA827FD0DF852FD1BFFA8847E847E847E845AAFFD1EFF7D +%FD05F87D7DA87D52FD06F827FD0BFFAFFFA9AFA9AFA9FFAFFD06FFA98485 +%7E8584857E85A9FD1DFF52FD04F827FD06FFA8FD06F852FD05FFA8A98484 +%7E857E845A845A845A857E8484A9A8845A857E847E857E847E85FD1CFF7D +%FD05F8FD08FFA8FD06F8A8FFA8A984857E8584857E8584857E8584857E85 +%84857E8584857E8584857E8584857EFD1CFFFD05F852FD09FF27FD05F852 +%84845A847E847E847E847E847E847E847E847E847E847E847E847E847E84 +%7E847E8484FD1AFF7DFD05F852FD09FF7DFD05F82785848584857E858485 +%7E8584857E8584857E8584857E8584857E8584857E8584857EA9FD1AFF7D +%FD05F852FD09FFA8FD05F8277E847E857E847E857E847E857E847E857E84 +%7E857E847E857E847E857E847E857E847EFD1AFF7DFD05F827FD09FFA8FD +%06F88584857E8584857E8584857E8584857E8584857E8584857E8584857E +%8584857E858485A8FD19FFA8FD05F852FD08FF8484FD05F8275A857E847E +%847E847E847E847E847E847E847E847E847E847E847E847E847E847E845A +%A9FD1AFF52F8F8F827A8FD07FF84858427FD04F8008584857E8584857E85 +%84857E8584857E8584857E8584857E8584857E8584857E85848584FD1BFF +%7D527DA8FD07FF84855A53FD05F8277E857E847E857E847E857E847E857E +%847E857E847E857E847E857E847E857E847E857E84A8FD24FF7E7E2800FD +%06F805857E8584857E8584857E8584857E8584857E8584857E8584857E85 +%84857E8584857E857EA9FD22FFAF2E05FD09F8277E847E847E847E847E84 +%5A847E847E847E847E847E847E847E847E847E847E847E847E847EFD20FF +%A87DFD04F800535927FD04F80585848584857E8584857E8584857E858485 +%7E8584857E8584857E8584857E8584857E858485AFFD1DFFA827FD04F827 +%53858584FD05F8277E847E857E847EA9A8FFFFAF7E847E857E847E857E84 +%7E857E847E857E847E857E847E857EA9FD1CFF52FD04F8277E84857E857E +%FD06F88584857EA9A9FD05FF7E8584857E8584857E8584857E8584857E85 +%84857E8584857E8584FD1AFF7D27FD04F852857E857E847E84FD05F8275A +%8584FD07FF7E847E847E847E847E847E847E847E847E847E847E847E847E +%845A84A9FD18FF7DFD04F8277EA9848584857EA97E27FD04F800A9AFFD07 +%FF84857E8584857E8584857E8584857E8584857E8584857E8584857E857E +%AFFD17FF7DFD05F85A857E847E857E847E84FD05F827A8FD07FF7E857E84 +%7E857E847E857E847E857E847E857E847E857E847E857E847E8484FD16FF +%A8FD05F853A97E8584857E8584857E27FD04F827FD07FF84857E8584857E +%8584857E8584857E8584857E8584857E8584857E8584857E85FD16FF27FD +%05F8857E847E847E847E847E7EFD05F827FD06FF7E845A845A847E847E84 +%7E847E847E847E847E847E847E847E847E847E847E845AAFFD14FFA8FD05 +%F85385857E8584857E8584857E27FD05F8FD07FFAFAF84A984857E858485 +%7E8584857E8584857E8584857E8584857E8584857E85A9FD14FF52FD05F8 +%2E857E847E857E847E857E84FD05F827FD0AFFA9FFA8A97E857E847E857E +%847E857E847E857E847E857E847E857E847E85FD14FF7DFD05F853858584 +%857E8584857E858400FD05F8FD0FFFA9AFA8857E857E857E8584857E8584 +%857E8584857E8584857EFD14FF52FD05F800857E847E847E847E84847EFD +%06F8A8FD13FFA8A984845A847E845A847E847E847E847E847E8484FD13FF +%7DFD06F859A984857E858485857DFD07F8FD04FF527DFD13FFA9A984857E +%857E8584857E8584857EA9FD13FF7DFD06F8005AA97E847E855A28FD08F8 +%7DFFFF52F87DFD16FFA8AF84847E847E847E857E847EFD05FFA8A87DA87D +%A8A8FD08FFFD07F8275385847E2827F8F85227FD05F8277D52F827A8FD1B +%FFA8A984857E858485A8FD04FF7DFD05F87DFD08FF52FD09F800FD04F87D +%FFFD0AF8A8FD1FFFA8A984855A84FD04FF27FD04F827FD0AFF27FD0BF827 +%7EFFFF52FD08F8A8FD25FFA9FD04FF27FD04F8A8FD0AFF8427FD09F82E7E +%FFFFFF7DFD06F827A8FD2AFFA8FD04F852FD0BFFAF5A52FD05F800277E85 +%85AFFFFFFF52FD04F87DFD2CFF7DF8F8F827FD0CFF84847E8459532E595A +%857E847EFD05FFA8A87DFD2EFF52F8F8F8A8FD0CFFA97E85848585A98585 +%848584A9FD36FF27F8F87DFD0DFF84847E857E847E857E847E84A8FD35FF +%A8F8F827FD0EFFA984857E8584857E8584857EAFFD35FF7DF8F8A8FD0EFF +%7E847E847E847E847E847E84A8FD35FF52F852FD0FFFA984857E8584857E +%8584857EAFFD35FF27F8FD10FF7E857E847E857E847E857E84A8FD35FF52 +%A8FD10FFA97E8584857E8584857E857EAFFD47FF84847E847E847E847E84 +%7E8484FD47FFAF7E8584857E8584857E8584A9FD47FFA8847E857E847E85 +%7E847E857EFD48FF7E857E8584857E8584857E85A9FD46FFA8847E847E84 +%7E847E847E845AA9FD47FF84857E8584857E8584857E8584FD47FFA97E84 +%7E857E847E857E847E84A8FD1EFFA82727FD04F8277DFD06FFA827FD11F8 +%7DFD05FFA98584857E8584857E8584857E85FD1CFFA827FD09F852FD06FF +%FD12F87DFD06FF7E847E847E847E847E847E845AA9FD1AFF7DFD04F87D7D +%7D27FD04F827FD04FFA8FD08F827FD09F87DFD06FFAF7E857E8584857E85 +%84857E8584FD19FFA827F8F8F8A8FD04FF52FD04F87DFD04FFFD08F87D7D +%FD08F87DFD06FFA8857E847E857E847E857E847E8484FD18FF52F8F8F852 +%FD06FFFD05F8FD04FFFD08F8A8A8FD08F87DFD07FF848584857E8584857E +%8584857E85A9FD17FFFD04F87DFD06FF7DFD04F8A8FFFFFFFD07F852FFFF +%27FD07F87DFD07FFAF5A847E847E847E847E847E845A84A8FD15FF7DFD04 +%F87DFD06FF7DFD04F87DFFFFA827FD06F87DFFFFA8FD07F87DFD08FFA984 +%857E8584857E8584857E858485A9FD14FF7DFD04F87DFD06FFA8FD04F87D +%FFFFFFFD07F8FD04FF27FD06F87DFD08FFA8847E847E857E847E857E847E +%857E84A8FD13FF7DFD04F87DFD04FFA8845AFD04F87DFFFFA827FD05F852 +%FD04FF52FD06F87DFD09FF848584857E8584857E8584857E85848584FD12 +%FFA8FD04F8A8FFFFFFA8858484FD04F852FFFFFFFD06F8A8FD05FFFD06F8 +%7DFD0AFF7E847E847E847E847E847E847E847E847EFD12FF27F8F827FFFF +%FF84845A857EFD04F87DFFFFA8FD06F8FD06FF52FD05F87DFD0BFF7E857E +%8584857E8584857E8584857E8584A9AFFD10FF7D7DFFFFAF848584A98559 +%FD04F87CFFFFFFFD05F852FD06A852FD05F87DFD0BFFA97E847E857E847E +%857E847E857E847E857E8484FD11FFA8845A8584855327FD05F87DFFFFFF +%FD12F87DFD0CFFA97E857E8584857E8584857E8584857E8584857EA9A8AF +%A9FD07FFA9FFA9857E858485847E27FD07F852FFFFFFFD12F87DFD0CFFA8 +%847E847E847E847E847E847E847E847E847E845A845A847E8584847E857E +%845A847E847E855928F8F8F8275300F8F8F85284FFA827FD11F87DFD0EFF +%857E8584857E8584857E8584857E8584857E8584857E8584857E8584857E +%85848584A95300F8F805598585FD04F852A984FFFD12F87DFD0EFFA9845A +%857E847E857E847E857E847E857E847E857E847E857E847E857E847E8584 +%8427F8F8F8288584855AFD04F8538484A827FD11F87DFD10FF857E858485 +%7E8584857E8584857E8584857E8584857E8584857E858485848405F8F8F8 +%59A984858484FD04F82EA9AFFFFD12F87DFD10FFAF845A847E847E847E84 +%7E847E847E847E847E847E847E847E847E847E84FD04F853857E847E855A +%FD04F852AFFFA8FD12F87DFD12FFAF84857E8584857E8584857E8584857E +%8584857E8584857E8584A928F8F8F82EAF84857E858484FD04F876FFFFFF +%FD12F87DFD14FF7E847E857E847E857E847E857E847E857E847E857E847E +%8559FD04F8847E857E847E857EFD04F87DFFFFFFFD12F87DFD15FFA9857E +%8584857E8584857E8584857E8584857E858485842EF8F8F85285857E8584 +%857E84FD04F87DFFFFFFFD12F87DFD16FFA9A95A847E847E847E847E847E +%847E847E847E847E84FD04F82E857E845A847EA9A8FD04F87DFFFFA827FD +%11F87DFD19FFA9857E8584857E8584857E8584857E8584855905F8F8F859 +%85857E85A8FFFFFFFD04F87DFFFFFFFD12F87DFD1BFFAF84857E845A857E +%847E857E847E858459FD04F82EA984A9A9FFFFFFA827F8F8F87DFFFFA827 +%FD11F87DFD1FFFA9A97E8584857E857E857E8559FD04F852FD08FFFD04F8 +%52FFFFFFFD12F87DFD22FFA8FFA8A984A9A8A9A9A8FD05F8FD07FF27FD04 +%F852FFFFA8FD12F87DFD2CFF27FD04F852FD05FF27FD05F827FFFF27FD12 +%F87DFD2CFF27FD05F852FFA87DF8F827FD05F85227FD13F87DFD2CFF7DFD +%07F827F8F827FFFD07F85227FD11F87DFD2CFFA8FD09F827FFFF27FD05F8 +%27A827FD11F87DFD2DFFA8FD07F852FFFFFF52FD05F8A8FFFD12F87DFD2E +%FF7D27FD04F852FD05FF27F8F827A8FFA87D527D527D527D527D527D527D +%527D527D52A8FD30FFA87DA8FD08FFA8A8FDFCFFFDFCFFFDFCFFFDFCFFFD +%FCFFFDFCFFFDFCFFFD16FFFF +%%EndData + +endstream endobj 151 0 obj <>stream +%AI12_CompressedDataxy\ǵ?"jxhh&QU]FHd,$E2*(S"Ơɳ?>٫?=WnW#/^{5~_|r yw<u]W?/_~O~;髗߼z-|g_Z[x?qpү}z/o<_/E$^ë]G]H}ެ +=jƇUגKvB1qUy~˻~͛^7_'?ݽx꯻Ëۧ>[xu;ۻgwy[x}g}w0/7n@w/~Hݽ} - %= ԝrO =^\* ( hs!/>94ò+27SKXr-kͮ#֔[}5ښscq9TՕ +QB(TX?>TWL>T,*V=RHɷrK穪檚. ]qCՃwPG Bq1'ovuZT RH>U-躃ջP\1"S+7a-OURS<6:ir>u0?\Wh\ImV{|/pVsP}W_}E%P[Yt)>$K\Oww .XL=1c`kJ0 ?(9k Z7P!rOИ|EXٌ>{W8ځ+Ҩ[,i/.mq(}X:Ke_}#dmN߼Mէp,Їу|W +F#`W0.Nq +6&؋U5U,/o_ ܿ~)9~#D@ Q7/noRo_uΘW/޽Y+~{gsi_8C[o_<Wo^;7wzGF׸0dJiWZTM_{}8?BDgv2X˧p,}!xc#__?6N`8hvޝѬ#>P +Z"-.8N[wma|^J}CB ؟/^}%?37?^{5׷=>{ +d7=7w4K94W_ݽOm勻o~ǟ=+8w_} 1)sHwb$=G~ԷݾK-2w=CY5_~u+Aov|sO߽~}w[/|2}'^}͋o>/>}s֟5;ay| N߾o[ۻOu8w\2Tug{O=秞OMF>NO_j|oX>` }K;gO_wW5'} +:#`?vDWϿwTٿ߽}Z-) \<}`-hP +g>B8F^wOC}%t~T_^f?}q{Mg NOoaVG?~PaZL}PSo-N7V;9zoôx '(o~woիVϭ3A+ۗ~L/>NUV^r} y` wWٷε3̹6Y;B 0 |[O;6*A?{؛hp|wl׷'?UfRcsѣhuG5oDWl W8ID|wUz :@)[oD _AwFR=CJkȩ;ߋϠi@nLݿ|qx}7Mgv]mz[wd ە]evN_l:txSdl;82뱉t\ +:[@U SmKPθۻv'Z=t<싯h{GO&6R@{ZC?@?|)D} `|Ԉ}E$xe͞LS:Y.Vzk=m7,>?II +7K7o, U)?4|s.8R8b]JX)yUҪ Ejexatpsnz*|J vppҹ 0D Ϊv(gYs-7tI§!Gg5{9; +p~`cqs2 CN.e`ANp~(5`8AxQrr8йH'dE'p&|G𲖕XU/&H=yVѧTOD +Z@m5h7pS@W) SBtBPECh"żLфͷ"BԸ&,E fT5(# +U}UP|԰Kd$>k[s1s<(ZyO"aTZL0dꦆOq_\|}I7]jp6^yƽ v@NXtMUn ݰ KZMpjd/aoBPrnҲx|Z}M~l-ʰӦ@qݪ@=L;lR<a2,2ag0 6Lauif!Ș32tlҿ7ُțțțțM/~>"o>"o>"o>"o>"o>"o>"o>"o>"oL>țțțțțț`odl7hl7k +VV8T3cq܌'֧h *6GW"i(Rzc8^-'P^JeJUΞD&kW-[I9-oOq%]%VzY`ig72G" ]—IU;jnj;_D}!~Gp_cx3ݯbH1+ti;h]mK/jtlK/~PޠqI({njHVaBNAC&[Գg[֖KemQI:G>[[v6sp( %حh,_ c:@m|.[r+o_.8,LJǭomyt55c7Ő-tA}\{eƘfҦ'f/NS1?. _na +lMY%}.%93uYOe/>JBk8SH>>q?9rE#B"w qVak QHsHnf`c>Pl섊wbՈ$lQN +> 4v%D6v*Y +N#P6əhe/456\&>uzΗ,~O Σءƽ8dbd6'78cڥ }Ƶdj13}B.[wCZcq6 _'L?5V~zSN]nS`YΔx<Pg{ԋ- Πϗxrfq@({QWQ EA\8 q@\/#" Kҝm"u۱-})P {[-罽#dY{aˇ(\ebaopja]CuwP2:i=}"%u +tOZ̾wNKN}B˄&2( +0 DŞ!F0Cn0kzEL%/"U PcHŽlAK ^4-.k6}D!ZF qBsЈ ++ڌ&e5j~Oh2*QVn$%h"?ɚ8 +h2y3##=n̫sc74z#-ˈސ R :"5Q9NeLAڢ"5#r3b짝+PY:]֞ +ەxs>؆{ $vM`!]Ay.dC{`Bmg|*hV i6!5l<9?Y3~٫/%?<[bWV"Jz +0^eS`z6j%bTw[ t"-GHk/XI?Μݦ;Mov6}mDJ-w^Y7ҟ_x +BZU+.jr#9sd߾{JH; u82(2g_Β}v;BUn9Y7d:˨Қ<'YvȴC=NyS~w/xNKU1*egj72`jƫ:Ц3e8?Wfm5gHʁ>zl-Z@Oy1zTUt*2k ?I[Zl@2B$wkiP148Z8t1P8ZX [eNv[UP]d]A͞yTQGDjMhΜ*yS7PFޝ$kuΓ@)Bc7\"x  y'պ# K"O{\VsZpZu)h2s ֲ4gȒȍJ/yjHKTfRkY2FO ~7 *8Y|:|aD~GϘrKrNU7ÍwlSsbdder2 ȡLe=ÃGȿ,qɧNV搁9ⰱ/N6Fr6n-S8܏".+ <Wpd1x4>+ +]z2AYȊFy$ȹ,AL7PѨd9JAS=F~F4/H~QT$(eh=юF|?7@ A*s:@[ g |WaiGs-n'zچvIClk.e 5 KV5*aðeJeRWl,م^qȅxR#H (7z"K*3ټЋPL˲?SָՑKV +SbJU7,Vۣ?M$IՈPRм7ڎeӛ:_8SH;heW0ȳEזr̰Z.el""..|ˈse:{%%emG)'"Y696tWDWz-S*eq3_<| uFo(p/|C5~q HN5w3/AU B9e@6IYj@e5ppF0l58$AXJ".+aRI#~MWUryX +OjӊD8B @8?LK|ُg,Oy=$vNcX#3 v}Bc\n,y^U,1#r7e?P'Ŝ?Z{ո0ĺ^Ғ evR4,PN{@|=,&lár@C+4T{ֵmM[oѝ5y )׉鴧fXZlhL$*+LE.t5QJBSI"v pЅhp :*X =/ =gDI\^"gj%Ulƥ *xBnj1MæU,lz:.P5'''{-F| txϦq|jNحM*ޛ̡ρM/#r'8c}ei7pnΙ\gi; +A c@rJnW0Eu +Ƨh Wl<ۜ"%uo|18\B=Y8},ϑL~7>.]-= >2h:cT ˲=e:k w(2m2w*Enټlgs2ԛ =3b7E(eƹeg.`Y6Cp$V"AEYa7'C)s2^F~Έ>g!g-lĚ3B +7 4} &e-CdU~6蟬?BlDU7d$3OԃUXD[y`_7,3 +"o>]-+x>ϫf{՜#+rsWﺼNQˬ̈́./BqSu3u utXZlVswN |N);H=w9=nrMbwo[.j ʹua?{dLpPL,ioy)Bӕ{g2_jy8U*iJk>efnAMbhķѸ \/(:ۣ ,mJn=K)to5ѻ2Ia+(5qS&gF5Ny\Yp/!֠gdV^3EUd;2gIV[6-sp(⅙g|cEy͎mqu{,;^{g#ĩEx&y-(6{Dfݿرĩ}[mF@r>lo5v=fj:.{gD1Tw^еnT}؃";N޻#|m1?i8E]/%fg>dD/?ϞEcѤqЈ؞no m)hh6\/oYcխ=˻y,-k+찵oY-JU&,XHC:J[ 6 6vXf}ew?cu'Ks*eS(z37^UԸwcc/dz'{n){ݙkFŽt8;%>1X.8q̝s4HmDdԶ!FITz|^o;<{Mn;rf Y[:6aqPדkeD\h2k]M4]QcOͰ(7A7N;㱋3E<]w: .n-v}{K;vگ#>{N]`Οҗv*عA;##/xvV[ E t_5qG6j!gPKvM*6 TC5зhkJ.јltd/79~NPO_?Gfg>٧o޽Onzw/ IWҮ+^k<{?w;PKݳK[=-/i':{&}B/1]fjͮ/*dR9Ak +GżD̻?>~•"paRu} +[}ׯ\&WU9ްpZ?Q %rWLatOݺ#~K~U-;(8sʡCZâC^٬C:#[7?5jJjEJa`ѝлjstЕW-ytK$Xr5t#!J[)X'ҕ"Z./ F f_n邑n-vKWj,z%F;fny Hň=dt~zՀb~8~JbhWpP`,`]C FeD^dDV"]S]\Eo*4} xQ> p{Mg9{ uTiҮ~Wz7A)Q;;y-[bVr[v/^J%#Jw]wھmWm/:潶xh[C?a[Ce!y2tήh+f(q+ 0Ba6罢DPZn8mg+Kw> !JEKFh% mtޕKK6diuWs TҤ]j3o4J{%!ju^1l(D7ؕM{H*ѿ疌(ݱwi]Un{,F euȆ]={jhC:~?\Tq@maC蛦Qi4HO1mWEԳizпTaQCS7㙯JeKFCezҶxSeT[rc?Ss>ƁF/edVy{7ї=D|5H pU KKQ40AAjЗ]\og4&[ Q%iTCb6 Vky/\ZxlW.A_.Q%”oۦ+5leKM :ۦ}Ĩ}tB se/r<-Xr2N$5`*Wi4P[64yʠ*~ߢ˓| *WtI&FʻԶ2(9˜>1 >ļ0G*t=Fy,ro6^\r0*HM.z{OW}uOX1N[b"uRW*,_ j>`'b3X-⠧!xCfto_GdхS\ W-(D}db9hOc]#EJzisw`2=P{G +"0ƾ5fT U֦}."=UXY7I Ul.d1ᩖ6f+.iU쫈 P#~Q*B8?ܼR@o`53ED4Bnt)Č왹sBcx(_*#-QHG i$<$AD_F G, FѢJ b$&P:t] +%QTUI|kS>1TX6k7Lty 2Kƹ+,"l  ,1=ʠTǖ &&PB#7@SxPfQ15nJ)vw%Of`%&VTHI\5Gv>a4=]e6D1]̩Ū5d>μ"9&T牧I ((5,Oeᨢ YI җ*~p="Y# ҃4ġn0k@ȩEL-$DZG!t4G>^RV]@ˣ +utrr͎wkpc]Җ#Сv|kDGKL +ɉPyt.OZ`Hp2H&g pweCtx z |S)4LSua[~Zt19xF9-ԹQxR::@v + +GkSRc.LSLS}1tZgO2U^*m|YQF08#j%1 \c| +1jCj@zPT@kbRANJf>8qNv"0f܎ + + hNFSIi֊ s*gD, += 7AT.f"*:6L<4&d04=E0*%]k`XJ7jUUaǒ1dUl~Tqa[/T ǚr"SgabBĀQz'ӱ-0jD^B-W&bg#9ĉj"cY4j:,&.Fy~&UZ[?y1 ^Q+5if (%14wcSS|ߋH[z>-Mr:/#RAF(F!O-E7i 6sߝ}a;c@B%i,P v#XcY˰UAyXFd"ye^+lŠ\tKobDPt$A <:٢63/"bb*YLsL̅l&hB}oYPDD/b6Vq |N ⮂=:B(LSZVaPN(D#n&YU;R&&$ &p+]AV33Y'=!+\SUbr$yǍis\D)DY~'Zz1n&8+C +p76Qm +,>UװQO\1D@| ?1g_0LBqG+,ĊËI0Eya 2l@&΋ ZfCjiro' RkY6u$>a"Ճ=FsE-|Ӱ;A){׆=$5'Txu%bMDɱot[u$[olljI 6-t@gxc ۠mg}"ӣxAecW]ܪomX;OȔO~TBXaT:kZN*8LY'7jYm^:O>۫_‹{v ; ,UxІ"ɤcEb7"Tq*d5_{7<-n]#\=%׺Tłs$6)SioKU?|` Cg`qr@f;!4_/8$ZΏC5qu͕ e3# +C 5 tXU:}W[0V +5Gg#[;; Sfx79v! @dJ"X"Y8I*=݈lZ!'M[jc'`iuE0xKNk2Tܥb2S&8O6:n0։Xe^2q^f&=,;;\2H#.(`f1aIt%'nc^ٕb'Pjxh!/4 Rrpr@YG!*C<GN۽GM =r/Ab"6jHj4|3xa<9T Wlh.ˈ٩G@JǴ|Ja VHA$.$[Zq<ᔛ: vG ݋JCOe YFbX-:J`>$`}X +<̃7ihdb vBpIz ܄SDBڨ] 'J/aȮd $ +bHu%٘U3nX(C76Tŏ ,&o20rIq^,]{!/uលygK :1 Q\0NUSe"–.fKY\✮6u\6+S4Ԧٽ87 n +IIԸnQ"ΈtCE#8mGՓT*5f6䪇63[DIJUUZr $cʎAZ rݎAA4oՇwTTqh(TYc5' IżW*VU,^B?a.Xexp@9Kx6&f@+B::+ȟ  E;8u#=K%M]}c5qRXY$Dl`bjZCAly9UOGbS~h3t7?>"6yKJ*hm1OJ +NL7w~j;&TbJ/f#D³Lc+Mxd=D4TI9Mc I\AՌq],~@FeQ=P -z2AJ@H,yNe'(yF~fyVg!`H +V*#CC"} % uJ$#ُ֯gnX5b.J1t0+=Q3d% $1d!LCk*: DOurM(?Qz +`UatA^_u?DXq}f6IWO<=Q:[_6v1}NX! DL)н5HBxy/<Gjc,]U\y{F1Qphi*f78щ|hOı@BO{>MtL™*-cdK1!A9J1A^gfKwFb5C[yi8 N$d>Ub,(]`Lz%:%ŒbhcTbTx5`e2BKWI36Y[tΔp/'xňM ^ =i6tnD JL eSx׀3wl0Lu=eI&eh5lK}#[(XzM=>8 zcS$٫ǭJÅ5ع6S,fQ>cVF'Q65xMbX;+*aU +jշ#f}N$c宍݊v;aA-n +l51 b+50:yb82!%N¶}Lk`nG2ϓg%#='eb4fCGQkP:ha)2P&*ᰩ3j`EףP+zE< +_@} +8 :#,=d>f")z,eE)yTt;3`"}LH  ,%y*}"< ,D.E{~Lt%Y}$~&S9Irl`$#2ї-f1.3UsSJ te+Tz2Qgz8艃ӍJ +`#xbD0y%Lfrh8¢Ћ_ LmP$̹aJ G"3KmGSa)M+O޾ωD2,fckHo'\S)oFZD/S +NQiE!%E0,ۺ8 U&zmt8gupz!#Gө %0G/BkQzEOrF^Ol\3F,!LK풌RBc\!,ZYЧ'z!HZ%vOμf]A<4ܞYu-BEe0&\('(>IBlj3p%=D8׉8l\3eje^4V>omC?KtA_(BeJLa20+mA|'2Kcf6& Hfh! s،q hoL!u( و-BL#>y|!>F{I9x.Q8la#79pu2H鮈Ǒ2i|TxG$!ꛠȋT+ 3p7@EEo(ahNk:+]Vl SVpQs|*CC 3 v C0QeB˅Q)sdD)/Qv)X{A}Lƙ +҈E19wZ@Ec~* 㣴$E)TL%yWRd:H8@: $ ]OsMwDqځ➧(2g$ + (ZMT">i~ q$N0;P5%fnD%Nr:td,^GlT,*<)qU&o+5!Pd06!.٫*i`~d"[< g0 mjގƓ)]k}d\mj;x4VZ_āLT7g3+9 )Oz3}3Ԯ:\G洦yEMi߭er'_/?E}DЗMo2e܀ H\/?jl]5=&0CE{/}~kZ)QdA|7|l?Č5kNY}z':b+o57;@I#QM5w@lq|=!F!E^oh@qDr-|DIeUK9J_{dQ%uUBotgA4T‰YA4q.lMӒAzӴ;7M\K=}4&CĺiL}4:ճnzonl,lDz6M2.衆 !ud{ L ZAn]Tp}z.G=4Z*z6بizQY/AKbݶ8؎5<؎r"s" +1UθV֢\xtf-Mͱ}S=f[u8,rE;VP5x&|%~.|AROs?kBǭ6/V"[;+I6[펡|kZޔtuY2еMә tlLtk:1MK|ܭS'3_u\wUzsO=D=t>qu^WBzug"9egb߾4Jtrdcr ,C'c k&1EQQ@+c_vҶ}M=ߑm,[0p.f6]ֲۙmq h/58_$nf`Q;WGhYE^r@ Y9NG^%]TWR: 0^9)Pt>%ʆ< D{55G\t,ۂXS!CGApTF8}2LLcNcLf8ɷ 5hY0;·Z$;B@䪫#O~%Gi +*QE s2کW$[tupGt InQ.yK2g٦qɨ&*&Ai-kdpxu8z%$.N TǼ#=CP]UD?ٹnuk*wJ8)d#$&zŧTA'Ivr3 Bֻ\?"7 VJpE`- }!SS9$B{dH蓗Jku<9QL|d13" 3 +*F m\r,]C@!ICȼ oXP{9l|tfo6sPYBk[SD_۞̝Ԩ$+{i DOCq|!A\/'_QT5U^nz4#in?ABs0@QUSEz <'k-~풳ixwHaHxף֐L x +݊M]>nKN M&^:("<Ga1ܴ(a$--Yޮ'@-/ȑj0_9pɺ(-Y%`Mj%t#1k 7A8)ZS'6[D䤡p^br`d81YjslVVģ<&#pL"m 䚁F[&0ق>8P @Ǥ q ȵm/ՐvǛ7caz{YIQ'δ;bQ'46ŁhotLrXB)< +H^NiVXG`7_b$m1sՄ +!H;ʊetWG=4#>6(Ss#1)PHi/7YDT8C{@l]gJ(EkryM,q|+!J"Eql[PnjN%lh yj'ONTqKNi +r@ 䅣Kto'IYd"Jƽgkiʛ2-^SOF'='YqDwnjЗ룞ḰfWMeƕ]e}{{9iѓ[x9eg|۷wzo_=_>t=sז9*_wiݿ7{w*y$W18֤ȹs'sg]C748 *;KSO;X <(pm|/, #ȁwWk+ G]|= QD2ԻXP>baQkk&H3sj)K[zcn! 8RBlx.ȅ5{qas%(:蔜Z=rQW\ ?($Xg5[褄xducP  +j c==N)τۙtTKP:G@o9}rƜƛ D.ѓqGiB҇qU`B2bzׁ$@fDܳB>@x"(?n= +%X";᭠ha"]ՉQ!uE΀Ń+ +UTyRK +g8yj[6X K'[>٪ yb)߱I?ٚGLTle8m$L-L ]^XDz!&)ғAe+13D?G>h s/gpo\x#"/"6/D"DD TN\Þ¦ cN$tbIKt*) '"R q&u\ez0HD9[V'=+޿g]S۾Jje"L )k(,oaʞB!EXv>$%#N%fh%T_LVѻ>2/WXymk>΍"w;̽I4ut%.+Vil%KwL6R{'377wl4'1G2.HفNq.Lva]Z(qBdd5^$f?,Q~v=d/V$\ +cZJĊgIϼ=Jт+\)]BDL;F_|)'Ӛ*z=J H7%*NzsMb'ZJ{e̤)O:IʘI7ID|MoJq~p"&m% =jH4<4:9TXاu5K&"jObp5)R3kڨhBkn kM@S+ۺU|{յ&צC|?%&fhyit9BXnek-E6qF5;4-IBξ$!"dEu\XX(| -dZ1[7҄3J"Mv ]Yw5s2ʳ/1b('#{oq {0,Ǿ$6< bIlqѰX_gyND,1ZR2YٍVW7g}Θ_[-1 WL"v,}YV*qu.k>ygh6Lr.ck/N#h)<}Q;L3[@8="0= DWq\6v|نK01lGVZðDp&wg'*n%XR81\ H7XM סV;ժC2*e,W%L7SzmG(?Ě`aong!~*:PM϶?qZUӡ04yq1 0 d(H8^$BfX_V2b,(] USAU*1W{>-1$֥\ W?;yx1$01[|=܉B?} #1-qb: ݉y|45)^RbVq";Nd2^k< yХFʙE%z]MtC=4ȕhbK !9p11]VD2%#<DI^؃3w0bK^];ѳḆMW#waBTeKnْ@fO^ݺJ ;E"<ڃ .|1Uan`$ q0]^SD`dǙmJ.T01~cMɲ!UMZ?UD* +1i*~=Mf~>&F3iC/=/BTjMq!)"!w4䍉&TVLf ν aNϓ&_zrEgbw,BL&odA]\3VqA:I<8{[d eG3(bD &9JT#O453'ZJ[;_2Y]~ltS9Eb,ȋz l(MSK'@BW&zE.A}K iTG>Et0ZnI5(CX9O+WisgTOhD"%g ŧAتzEnLx26zXJ% *v~QL1]Ss]޴{4uنS1n (MDKKB$p&r)m!M]n1\[E9} +nc@hKTMG"L , Z7{FmJL,ɔj ޽*b/jrj9.&1[vң6l'#\z1+D"OxPٹgyq5T̨%"T QFLI%9[[=\8:M;V#`?CàPy`bf8]jpgh0iV!DWl Gp47la-exbJC^ħ@pZVѧRA VB=Hc 0 Mx~N 0?01L1{$2LCxLG5!n2d552u +@I?_qwR F&T6=;pc׊<ܚ&`H3=^RV׌!+jo`=1ej~7\-irY3cr-F1[$}rX]J 7XFOZ\\.P-vxHpܥHs x=DR@""k r48שƣqgF#ׄ:*zU/d,iD.)L 0!PG:\CNz4ƌHMkBh)r-⃫bFL;,RXW%Õ>$&㲤P[E)P|F`ZVoAཎ=sF=84G }&ONWP$sh>OѺ@*=H]CQDZ=4 dNqiC bns@bSEXk2) ANK &I "UjHfwW] XwfbWMch}8KCb-6tm *;n=-y"rf|%d`qrF\څ\WSzDHl4>!l'@T0IϑRc PX<J=$өzZ4azs6ԏ.A~Ǡclbd*;% -!_˞ +RL%Y\7OP--ɘT}hq@?:g0;q|' +AXgsNX8pe61; ?+8910va5`u+#h*uD>s5`FjI;20:Md,:@ީ0Gq$!*-H?t3qJ0kE5s'hU$/@>^CvTϗ)ԫʙٝBB<*u7:d0[,Bk:82kxzqʿHH5F .%^-#]BXg^\L<6H'+~eȄESK02!  `+!]Zs3@/Hx5)EnĈe|>=ḻG0h9c^7KnZ:0 { o6X4P5c ss:^Ȍv80BM@!٠cMc1@~V4֜xl3# +`@"(W7|mRf KʒZB2mdAIJnYbj[L:NBf\bajP׭Xv7U^-4|~I千ka3x;'"=lN4}LU.rwp0 +yFHE?Z0%CD nqgL{͌tF[p +;(W_'qB_ARW7Xģ7/F R#Iz gDqQ_B`AS{1P`b< E_`Lkn6,*MS6< 8I?ֈN"B)l=7 +&>MR 5BС4u +Hg:cZȨ_+A#^HpWoz`8@q8@؊CvPa49sL⇓=of-ߋs ]s<0+ ;hZfrS [/Ĭ! a6ZpuTSD +>rED%^':*B1)&Ďs +<M"xhPZ C1=q: 3r0}ơ!Rc?gVJ9AcPE ?UVfG=TxpC19Ne)>l T ADj.*ל48R1 4ڌ&+,%Xa4o~ +L:vS./ :nM +$`=@/ʆ[Iy]o /A¤ "j ug+aUT$|p=;3܌^tt8-o(HMH4tB"X0!C듡ͅ8]7fkhjK{6>Zt)=5'~+Hn`kqМ-ބ̥a j!;]ZHFIH"&))<wp"11DOMZϦ"ө&,ATB;N+s+I 4*,bU ^5OU˘d@V;Adߦ !F{ mS":Jy h L=[:>HאRd[ av+сL';4{q^ u۩Bprg|7j +vy`WYAafwh=M`퇆FvW4v(7|l11qΘ)b]!j@:^FTRwĒ 18.։}UTP{qɓer S0Rvɀwl%dh%(kOyS;*F3xN ̼EH ]n,(3NO#T ZeGhLY@llm8-V}db45/Hqy(AX f;R3 +Z ͇z2VXhjA/\h3*Ef -pޒOJ0O43q PE\c'J\ `BT%L0W"Z^QRx8AC0RX1+^ $ !F9AѲAok1܍K*ĤC#QCV>NZުu8$9la$1#6Sr7$}0OLAx +M,f(^%`vsnJG^yY*yR12hW R=W7!B!;pQĕw'\RV$ /H>@Zn$&d +NgVgIGNMՄ*tcН)tݼ^,h5fJupR +vBH,/Q13gUo( \`'ƆaT,j` ؛2iyJ! >̣S& +UvgSx΅2poqz~^GW Dr'BB +UYՉq<\p$l`#\p*d#9B<m S7_]6 AF2*ClQ$>eIZcu\frCB҅Q&h!۩uLGRQz0_&$>xPP+ƫ!(Z"C(g+2 [,iQ]ԢFDsZ:5XX2"RDi*NJvrD81fЀ97Y}Pqm`̓r*&1mOY-0<]4>HqH%1WVX:P~wfeDB0AE,AM%H^91xւ =..uFYH2.RQMP5û'Ȩ_æL,HEc2?v~v_G +G,Vh&}Z}FAY _eр krcU<6m2l _fآ> f'Fκ` +;n F "]e{ [Hm&<IdA7ov_G.R0UzzB[f޽E :{ 5FSRьP~˳+Z0j;ש1VZ":L>M&Ԅ%b4dpCܫa"( ({3)F ҍ4S{HV$~- 40--NR9AC2,vQ&2z +h)AɃ@Yw?Aqkj0LqD C/el8qS(?ݰI +yuG31" R$ݿ'B TS=Su3ɎmxvEYVK.D515(z׊ry>:H+!bPQ%pRmV ?#׌TfǠ +y6zG;hqR3 |ڟ 4jR2 [mGĮ~LjC#kS^S޼}p:dDiNhu`N;lм8:pbB)V }""Hu"+npδkD{:4N*RgYx@"S;<6FR:kVVy 7%Ve :U54@+d8PV= HU ysl)pV/E-tA٣mibQRPҚ"U=-xނxcs5 kMf*IJX^K5} [IfTB/*hgs118#[rXEKҀ0Y@_7-rJVp*m/  ֳE#@,@3 +#2ݺ;BL|*(=1zM n=SҲIǿ +|b@(Q9LEP/0B2yBmj)WۗňڰGށD^U %fOrH #ό(;Si9cu&" Z؍. 8D wcIep"*S\peID;qK=8EnH +!rD"xU?/[fdЋ̱J{eOB h 1rTHo8]1, ~x tߧ*uD_ʀ]gldBGXǞ-CA.@n5,&xq-⨲OQvMu)o̯ h6&vw*γlqA0JW%{"J4#UH4շr\JgHpo)rN% +Դ,g!bbŀ8y⇮Z G  vxx .p$ +gNBB:JTSU+x uuZ2Hު :Ԓ_ͣl V¶)cOi) ~?tQ[1=<- %zV 5*vL+Q C)Dtl ŞÊ]X=G*2WTbEl܃퐕4^ujuyGV Iٴs† A:zD3j{vq̂ +JOtg 7ZyI=&2$c+=[#[0hòm.xGm6KN@CT9$к{擟ʔ43C$ESuQ Tl7a{շB=K"S.TC ۣ/jt3ij>$icJ0{J?v\Ev?ePd TpV1:(h|1YZ5N VV"`=qȥКWu%Uc2GV$_R!e5 ?9i-^|jp/R8C.Ȃj[>PVI)\D?dS.?8C*"|F K3Sn,a|&6$;2(k̮S=Θ/c5iۼ:.aCV#e[RM #NRCvdiJ'k`#I'AaWL XX.gU`&-تQi\heHHe ԜF}JM&F]6ϝT}bPkZ-NlC6^^50N ZͭuQw#=yKɸXnMD MaJK4"]$%Ax:*|SF}Ah3Ed[p]nbw9bhJ;bcVbhy!Qi]QU>EI*ӈDR-lS"jcWRq- 9Ds[]JC_!M u%D19 ɴMdLU!YH3t)#f); +'hh{ "&jq#Z B?{"z aP ;),J\C+ש7bOíВX'< [9*NE|-Oyt +-|M}Y)1(d*L"VR*{"NGDKpXkOݼ%*·T!WrсsdC(R `=(L7 jP'WHqIԦ!RATZlAb;R@_ Uf֥@NKB%0EJbjXCIy,=ʗu`}t@tխD iAvhR֐BXc(FAK)k4[_'MeCuQaUţ+N8 15YGDVb&%b 1dIt<5 u]=&>I\_C^P6PI.G@{8I`tEe)pfF6$TVERDrdQhŠd1YJ K8A:*yoL(!:º@쌖OS%YFDf/: +%44wUAI8TC8qe@!f_ն?)38GYZj=Z2JjzX!fԺJlVܷॱqQpc\h+܎EWHGi/NVeUUQus96%BiqOMu(D&Kȸ(f^ɇ +BB 81"Т7P@sV 9No#G10(^AaIBR@!:9Je.YCa%|Q&%bWh]ip㴐RPx Gm؈;j[)'cpNi*\U3Bfvy!"ʤ"Z\t&,?@Vf H#SC'_W%N=TlaC8VCN +~sإ=M" +ZQusd9` wE%bKE\ pj{aqfK0N@>a` C7g\hOnu㩇Ie͆MBFl +w~ :~{N8A `j5@`hT@#8R400D=@A q=,&aI:]?fӬw! +D<_}LH!)B<}V{m4i}}* +?+7='}i #Qy& 䝄}ewI>T#c4fʟi#Y)Nmd0hYW H$nIc׸S%(&V1ڑeN9dFe !& +%_Jua煑Dt2B#a@P`ڻ!l%; ̮dGG|#GY 9*d>S-:n@C_K"W6)APX_J5N4PgbݨzJ;1a +*Qj(NC-1B)*%H|1ʊ=h9'r(yRH m^GcL>jw.=hꡁd46-͒_b2b2)&fhaaxquOуsPX/T)du1h^e^k46V^x`1ތ0޺@eA>NUXZ|i:9&T6E*2)ކe%i՛*,v3+C8tHutF*Ȅ@o5uؗժA*sPt566",!<y-Lh7&\"$f065T+Y5уq grql3V(˩~@zBkgXSCIp c:{F@r7 GXt8,݈tRHCrGtn)\MbbXG)Va0usKIB#¯bܾ/ q6ĻbߩzÊv;xK5芈*/ы99ikެ8<&ɞ=);4(c>oY(H0aѵ0bz+H3x*i^ǫ>CLucأhlvbtH}F#ٴځ>&9ӌ&t s)!؀W VGc@TtgDMuX#Iu09F2l7FGX[ +4;t庸l`dhh 7MKHDM:n+xj̬1 0`Zއ-MB@IN\Vp:ɪ6Ħ>R-fFT2tDws*w`tрHJ" DdPDFiH8[2ENc x? 考!Ch*nxT"el$TlXZլ&VЄXv3ϠJΨ& &sx MMHꍻl)t8ȣ,1+N1Ċo(Q2׾sJ@Ð {0fP"e{Ds Cy솯a_VkHdaMvM1ĨkרxV36fq5 8S(8k N=iN+pUI@"<$#:`IHIdo4vh;9maj(}U,Dk"lHf/jP!Hjr:>,*ft0f$0%Jhw.w kś +PB^^Bf44"LѴ g(0\ +<rxG_O:CNVkVaIxiКVX]1Њ%k%pՒ(Tu~χCGݭd5 M.M}Uu4Z5} eM< lI]0tZksew*=ZC NBV`Q帩FbRS*޼f ![1!*" +!{Yj삹~j#njq)d[mRm;azۺPR27<} hԃ -..aM ӿʈNV$!]0TXy0ȩ쌬;VkHuTi+Iǥ"ؕ(hś rDA T({"6 T|qlRfNmh\,KttDiSIqӲ#͕"åi[MQʖ.]@ 8=!]c:μi ̤!ǏH_gusMedpzV/i. + *kȆaeP|ovUC]1R-QЌ/|PeY#˷>Tꅳ].ng"jFhN^n:jZ@Tf".22 @X^d2^Al +=@C0 'X3!zXTdc:E.[Nc QnB<g:.ؔ<xHֱp-ٳ$DAv`{z`.#bpXR +BqCA]:2 g5u [{?%*D>7pb5uw+YV':vx 7V*[6c`-ҿN71pq-#D8JáhCҁ"Aa@t1h0C0u83QxJa9Ш e:O:BKНD-w8Ԉ:d+) +c8pzEy6t  *rQ?iԈcbsQ"[ +r(]!'!b\A>y.GՑj24YelQBiG~kv*Q,GAA^~"v3 0|vd\t 2DGRy>=]og|"Zq['NϼN y_SeBfb1C7`i88?ÜϒsQ:Dxܴ2_a[%(׌s+"MYw >̩Hm,:M0,֕:v,?jԀ?.d& Tgu +g 5Z 098VG4zul(xҬ}8z'spP +lpAJ%$Z4oF4QbTa ZM`#.e`2z0"[1ͺ KlķX 5?g~l`rU&D>E[BuZ;;~ ۉ5Hb gA~h8٢ +ͼk`Vuyd71PaQ9[V&1wKa}rGevB]L7Rq[NٝtW0 GaFkapG|0b8/ bW +<Փ2D5=wp:Mg{ jW`FF\~܉:qjc*#T*Lf&77Z*O7䰖5>Ye81"e[S(~71ɬ2貖]qV~c3;p؎_ k&nvHQS&ڭ]ܒ"`.UӃ#+ROl+Ѩ8g }"}9k>Jx55ԣĈxǗ z: +69F  +SPrd؆NEBXH/vC f"I;^\)Ne@D+]GA VņgR&`I3Z,tTN: bDD˒ Rb]V" +q$S'` igQ +Y 'o5pDOO>ꫀn_<܆G3g`B \aD l0i%oK1cͨ}ɂkO8 x&,̎ьg-ʙS'pփB #qց/*X \0Ycpt9A]i-U۸ ځ; Ni~kdTMٜNB܎Vga7)*JԚ n*("JӨ$@zDeOD}5~bGJ%)YYe'u*b[0d',d7XU+1L4 >Qfu-)lUfg u2!(9uS3,''Q҅Hg=zFjjΛҳk8ELt =,+Z59fSF]8(%F5XI1PEB_4h^PC| \I{Hroxb@M6Hu&ESF!hC29qZ:ò"M.#6=з7":a"a +S3='0P-5<0V>20f>XrWB׼ +?oc/L7Gzb!5Qf $ 2 u8{|5#=Q]'1]r73)ŵĒ3P,L1L`{u'HU%;O}ljԇJf!. '<\QbUpMQ'=\OHI9e`'1'mBdD[V! +@/ V~Vw|[*ڃ[*;ALd(!AM{ HSzm31hBlSfdz*k|HJdSffzMH[51Fdwsv$^V1k#UD[F]LUi3=, (iޚpş5\|J61q0HVrLX3e+M/ ڃ>#UJ9";-9f;tĚ24駠kzAER𕪳:|DG{`(#'` c1k/ +7J(݊LH .@men[I& ˄uH xglѳlə@P/ Dbݧ/!W 'b/v<8(fNf=P(7˞$ _NY#+Xr%[Ovh8qKA+ pz)딥P ++ 'ZDCKdŪ`b!!VDQb3Ť)dؕ.*(ں +&Ifz9X J !nqY2Sƽp&39Ѷ@}q"u B)^K6Qd5^ +)B؂%Rw2gHEXHѓE21Kc貇d,# ^Y,ˀ,2!'Q˟dYXTeMřop20{Ҋ!a-EsN_,p-!'s>g6Bx[4, +b]9hkB6fc\W7kI%nBדDc +?K : +wWgEN7wYu=n҈ +zl> ġ [£HnQ K!Kw됍CLP S(nzVr9^z x2ZlBl6Z?K5Itdl~e!uJd A|Bl|rQe?\X"h,,E$$>K \WRT^W:d-nRid͂*1(iqHʯ^ 2}Y&|y5J'ecw5u%H}TjTl 6r7l]Z/ .I,•XcwQ vprL/.{&Iv<6r)D_Y|&u`Q. +11p Ph,H9)@ɛ/\;mLVryk$C(4m,w,|(z|j,9QĜel#V<Q-4+εF**Ȳ,ʉnܲJ.!e+M U +3s,)UASPsK Im.- 1vdMzvf\Q^AWLlq}(RZL]"5$*+g~ب+f vz[̡Xm +WOBd7-DG聝z|)g'%S*4o̞V6=hM퀑=̓ jr*S 03GŵIbmD/qZqD~_ؼ&._vdNfZ2C102, c^x*ѝKw%&X7fTfnhDIQ=ifkE#E]+؋ejU L-s2dYL6c/D 0uZ#w5ȭJ&*nMi|E1mM%qfQ1]9D1E 1:,~NUfzRс]2`\O7vv9e|' A8(U4س,Ldxysv-oxu;s÷gNo?~sr':?]}|ii{C1`e+?[o>¯=K&G5'ܯ֞g_}}NL_?7mm0֟;1Gx<1ثnoO9Ӫ?8ۀhk[HwkO˓g9oήN78w~y/'d7lkon\{7g\l6'b9BgkOQ~S9,}##&_9ߞݜ^߬A;qί8+r(5ִ>~sszo>?`~Lo7]iJ=>~zࣽдCz^{=C7ñWCdYߋ?_+{Et^+wGE)_g}}g"LY5drgm4B=׊A?[ĵ׷/?= ksնfśGľFS٦7_\}"s=Q~r]\/7x^nq" +~' t'+ܼ:9=bc꯶u/HRpkQ}h|J~I/oa ;lnӸ,ś}˭Mw]_=yَ_(b^Emo4Q&sYtKǶfu=L/;)r=sʻuvŲ$qo6Ol:\~WfwbFرVfvAZ&n0ܜ~}yv|_ߪ]y@-Ynzr7ڊu|utvNZ_g;?(\wⓛGm5r?ȵMmW\/B9yyf'wQ-~qh\ oꇝԓpc7wr= Een fcM6eG{Tx'*Ɨ((;I4w;8@#>#av369p;. e/?7;8iw}}ruuvFlg{[~>=NGѯq?n 0.0]y*7Sqyt~NI"D9dgvElp=zvn0[<[zu}Iǝֶ̿b ٬=՟mk7g,f?ۗ/oDۚy'~/5"ftrh:/fO n/7ۚ[˾28n{XJXƛ-^mb|-kG'W'ۅv}öGz*G`j;fxM6eG{ԙ qW#NI;`vq݊HLD3FNoDSG$#I?_D"6a>T#vQG$=Q.x?"NoDS1nSv1jݜlsgws<ٖuP_|ʨO_lhzơ6_O *' @j7aeu~Ğ>Fvzlplpl-lp}aL3O)nm~n_߭NPvyQ6 ~-=-.zq>cy~6훳oNn? +bɶyZ1vw#"=[ v<1&Ά;y;Xh_"5j{ +&IOML{ΥXq};AhrqǖT+ݭח^>=˛GO@0םʾF} uG&2#3z2E5e=c2EחgQo[N.ɿxwn;k1]ӽs~={9wL?w{/&ޒ{>6us!h;mjۻ|՛gGWtm..[{_}}48<%{w[6(mVacG[RܼZ4 ';+[xަ{OJMqW툛{cޘ7&?d,˄?cch^}usvv"͞}_]닳ۏn^~t}sr[i-g6M?Wion)b[6X}zFc۶G*@XcMڛZv۳EQ\.:&t0-7:N{7:N{NjbZ7:팆7:TFIj?{Sg-@yb`Ϟo"SGt G0OF{t"o3/V&iK:_Osc]+ٕx=Tێ>@ʃko9Cm{xw6GSϾ>yyݾ{>:i;#~!ᗏpИw6H_z}vKfl~Gy_x"g<}E{q4>uގ# _=S'[\`rߝ$dTokj>? -JMiI #eoy&jΛdڳ3l0Ifoٛd^?k}$so&IdnO6{^ӟ5hKP-ݞߞ>bYQ/6@_Ѷ^ߜ7gWw~nt/'d7lk뛉w Cɲ> /H~cO}po?{d6x<`Ot KH:ޜ? Pnyl{Mp~.|by}wJ!z+Y(7e,poU~Vx$}sdrv#o ~ý/>vq^}U*WEUѽ*UKv[]{M jd^{]t뢻˯nN6`tO_Ydrgn4B}Z(OT3 bv<jwkX,YOWŢ^_\Ǘ'|t oONoM߯oͷu&ym6p#[Ubj_3>sKS:|t}䱊+n0~&`d)^ݶfieNO6)W~9ͫӳ 'JNj"m\@-*Ì],>dkl7ϔN}~f`[mP\?(9K(SZd2f*Jd~I[{Idg%wkX}&_>}c\˽Hɶ$%Y"LoNd%ELً`On ^}k#MWf7 葀#p+3ۛחgJyc#μ;'ixW|o?u)=@ʃ[6}1~ .;b'ǻw!zH7޵=N>' n#Mܕ˯_?ҷh_:'tmljϮR6L/[$&ag}8e\VBڼBմ;;+oP~%yϧf:/bE|8XIr{?7ˮh['{sud?/;qGs9l5/W딠ys5eW8$L/1硽PǏ/..=ydz}QlsV]tLDW]zalCr/~o$_^_,cY~>هi~-[@_˟k}wt;x-A=Cñ4:-]//jr!.YX^B|FMBC;H/z-/}|{;p/s5 Z_.W~eX.E>awɅP_/ܩŹ-ߙEֳ3۲%ooTw_}|닕"o_~Lus;uE?9)=?yz].Bv!UeKC-5TkvWsזJ omI 7MZRu5xS +1|~y/Ba9EȽ/R+1q+^T3v#̡ǃ/_AjȅL9xi,MZ+^Z]ĴrЖ/>x /B.~eheYTA/_ӿ>`r}XUjqoxi~-;ܗc[5:?˪-wݽH%.3uӼb/mrK;G|w^^&n' YDq˚x:/| e9/U:MOQth;y#s#>]-iB9EJ/έGο@^Y8 i-ذ-= d͐E:U]U=] $tFed9kYs{[/C;Pm?/+B';r!q<-C-"3إ6NPjh{8u=%Zzx_/;{ ͵ChzXX8!!keIn~*%GmGU+8EV3~S'D>_؛fֈWʧ *#q#!;4I +),`(2DPmB@N9e{QƦ Ieb-"o赽;VkJߐGyc_ͫ{kb=cah ^-їb?PqG]U=^܇8V8_n'kЇq<=DfI݄ d0NL1n\]fOJ +aCKqE0؜VfM4#*_|bޖ0?AxƇ#Ԡ#13B^-ח6Hbw|r^/[d z.͞hcbӈOZ‡z +fh8xK*G d R>-Q!ñzTQ$K%Gך0'<Ωp=ji|-b UF,cX{B}ְ!]\1iX؄0[B[50O8Y'~j@5!0"Ũ2l⃅BPEݎSYKa/A '$؏hGBJ +:.^qu)|'GzX6֑*Ő TLRh lɒ~1‹HDYlqb:pW$zE~&y!:qNlB P~Xjl{ק&xc7My%\M1 G{);YFn8`ܩgqbϚ+2>TLOlWܺyJbQWs4 lg!//nԧ$YGG,+> 0f|ÇtT"ljOOiIZ ZPsAk?|_7A['zmZe ^ّxρ/"ToXoֺ(a✇;vfWNkcVk|+nBvcఁ6FLydx(uO!4[ĥUL.FFP98)q\'7xwX˝uϦ?+CkQY> 'ڬSFG+NCZ /גeYylt=nMN +eV3@heUݔ/kOf' XO6D?HK.l{5=ّ~؄=ꥶcњu9_²!\?a"=393![ޗE X9aaJ^/G9PNbrJMRso+y:(OӫtTQU+Rr4~lv=Ԯkӟz~߰eC4N5kxk ܲa[g|2*rw-t*WNO_Ri^?Բ3:oO_x~h|x,u VfbKHonϗ^~o_rY׶vccɜߨဌ$s5ןzokڛC8>BB)F,;;m +YXyޜRt+B~砭VB0J)@v>]͉΅ބsiUO:CR.#2/S%?A:-|IWDQ&KWfc:m|:f'R|liI/m=٪ YÆ^fCH>'osBt%WJҚ6Hyľ>ow˚L R\lXXTkՋXl<:+pt9ُu S{vpg1 j@یr{kjAW|G=jq=6M9?w޶^S٘oOAONԺ[%b݉O +fɡjs`H-zetBy+ JLJW7|sk$oJ"T$P$!j=|J뺔kPYZ~r_ׯ=zï~*/%,?{_g_8yNI>g7\⣟~NRмϚr_˨ÝcݾCAaKiW BȦ$}9a_o"66;,59~/#;dMbR547ʣr#4X8@Gp~$nq풢 ί&3,CxCav?!7^*?dtY`lGW^bx&9ʮO;+Pa k뮗5s:ʱ-{)Ѕ.?a2UKHk#AfRl"Vbzz/OܯJIe g^daqe +^a/æs@,].~9[+TueMluВ5ύo%SKϢd]mtYp,PHxY׺:gCW1Q;|08=z4/˟_`qPu :0)XzX/=g~] TnÒ|y~MNx0:v]Vݏz9Bpzk|x?O:rZ0NDkCXoJ_K5#g/oRU'1\֏P\דRfNO{y@VvnB[w0t#--D~ʼm]Rdl7$nJ.!ߡ# \>~<$o!GsO{ئcGOPC]qFxN둞Pat/nՅpS(w=K-q6q aCI Cyl/0h}R&['ÖwMeFq@XX%Tӣ6.3#&i4$e. |lxI{e_wZ2b1CUXFA7 y^s)nlHOO%'{}ߑpNs4^ +0uz|ī{(֞rkD0?II-!FuWȟ?Mӟer[-ފ) %<AY}~Xź2 mڇĶyi6Hx7%bϖmDkb% ePhafc\({U*׿wq+~/LB!*+E6>Ih U M75@%%e_a241%6[ZncV%f!Bvw[-]54.BsVWʹ{C+~D,|\lBӲǽ.c-gJBz]mq9v _1cVX̌j N(pf_fli6nsךB {(q,)|p}?+qT,fLVYm2e2\/`qW:zS\IK]ކXpлWV2ShmaYz? _ApJiu~W 4IH!4`^+%*taS٩.TRj08 +ؠ6;ZpEb!yJ \%2jgBEݙKZLTͲOZ\P8gVђ뾕VHRV_2xXD&EFRV -~C@0t$GC;AC9΁I3j2.@W0wA7%IJ[]4o@,TƅxM#+TR\F oJ1,R.ZD7g hhg\2dpy$l +S m_T+K +ZA^MjcxNIJfChQK`S0uP{H: /hæ%C(1r`ۓ>Z +ִ~`}'N?c)>>V[ F!U`R%!(U~h5@#).< QޯȜS&m Gdْ, MXyYp<$YH^ {Yx %]IXӇkqmiHq!Vsa0v=jD`^i3Mي$b/NCRƼn,C8aO%tTv{[U5/tnو؂B2ntZ\&v BƍG]OJo^樵drKhHN M #6AJSh]0vċvQ@d}E6 M%_(5naH>1T_`S~50Ǵ#!sZ%T%euHAz\r(ӨU2Nʯp]BE#Q^@v1\S?SNB%\[(5BbkĆdzUPt6Nvj,[`bVtg1zlVR2 dn^ xmβ!J;B_5̖ JˢnsI8ESfwn&IAGcоn9K.pԴ/wÏ~_aipgu(F*1Lʤ#f xF^j'b(-)PrR p1}wRH'9ܧFĒȑg7BIP-6ldd rB!Y-@C.-UqƱK΃qEJx4Vwwr` E-'N)fײ-R|0"9ۣHcҮ+KlքyjG5 HNCk\ ^tpTh!$-ŬE|:v7CSg(K Mh:trl* ʋ. e SWT]I*).F&{х92Sva,&P^(qp~٢JeQu@˷?z Pi ϏZ7+Թ2gcD$((X4}crɛo9-[<-]MoX‚qF)锆jMt*&>7IL!['ƢT@qpBI̴meűr.ɦ/>w28% 퓾TbA#Rr\'hD|FyQQr\&S7yhJK(*5D01I %l0! ݘ1~s4҃;_eCf?Z1348 eEY;]HSzDd  b;C.7@.07tBvq0S +j5xP7qhVakˋH-+'T"- +endstream endobj 152 0 obj <>stream +O8х2*ݖ;n̰bY銦kiaDP71=l@k-_cmP]!㊑^@ -L%yUlڊh۰6w=(`i_BDFg1=qYDLC7.+NVhJXa5Ln) %xpq=qA]`B|z$w`$hKtatk_m[΃M)vNGS$&7/AщSgcNEfא! @T/(BUęn=~ |B[A> Se-BtyH|jEB +1OS-D`tq!R>:PUUA^G15rWssi^%}G\SFD<7cpcq(_սI Й7 +q6ׅ|PL؇kHPo-BE0Ȯ˃>NΞt{ HD#Gs4K-9ZFJ}Y4@ 7BAt (7QȮe**҆GS٧jڕl^tYR3b;[VsY au[w^hhͶ?J|DՋ3zd1($~ ݒ2(AAp*ky5TU$)ʂqp8(@)݇a%EbG'߅4(`6qk#~ʧyᇁ Ga?LjTupkq*&6XȆ!|Ԥ.' +P"AXTnֺg6| ' +/gXF1ώ?Ӫ\b$MrOK +V1[M*T-%1oEdOء+kXCE#$š]SD\DP=f@..zEl/L몧w< y,MODX\TWȍQ +;NG` 5 Քvr b=+L[HBr 8*.a`OI[vJaD洠Of,kXg:4Ɣ*% V\uv"L6HᏚ vfsR +Ƕ1-Th,l{OPP V.hBvY +\%<FpdH3F +/v3PK R +1@X824l&y|9D?IB|!JB0aP\5lVI$:S䝹ʅPJKR{5 < GȺ ۩d v-vD[uΠc #kƤa6 ,תiT.6|\z䝩Sr +OX̔ZlAjbq2\07m0- }x>}_w ˎcRT*  `<6]NK.876SxaTL +~9eXj$v@F<mdٱq8gRg&aqR6K_/2ȑ6Ben|8 so-Ȼq&MNYK-av9۹OkH'k:h\~$@m*xqSD3Ek`u['?p1Ϥy.~ [Hb yJ΢_4C ODX*) U X̡~ ?"!.ԉ H|אW!MwySMN$|HmA0OjF~ h "EMFbp,BXB=踇{RJ@ O8O"U$ۣU"h!T@Ou,;ej:0`'b}]]1P_F,QE0.aOEq¢ b0){ZOf^>:=> 92Xbu$ġZ63d_a{]w9\nƶx\pwP;"y5"ylD;@KciaS0]M*p +=m^!IX DbE!ʧ35/uȱVAo[݆mLT|w i9X&?_@/t~xh$tnoJ\"#K 4"~U:K g]D9Ab<) xS>80YS2qhyNI8ʅǙTnՇx_>iBoêLiНddʋ6MS>Um`7Q#_  +-dTMg7u'SPLSk8S}2%$DAq| +ugLH5ՓJ񮎣qєHU>裿.v& Q=e(yg}qS S  93<H0J(r[v3NMPqg`0f5mhy2ׅW'+g[C*S]Nn('蒣 O sN3L1T;_h6?N,KO.!Bλ$.u60B3=)/=!~X!y+c^Yx3YYyQIaXz֕'"OJdT=V=M%FءLE*'5b){* +h9JWD oֆ؅V +DYB]D2#K 3pԋ5Rr26S{=U57ԡ$Abc˲Aۉa+WN)| F`zo~~|Z&=@>ݜFE5kO4)sO%Tq7ҳ&UuYvD ?b|]ơ%YF,[Ct]1D3U*kVcFZA,gTneNkFg#_ \p z02#W1D5d +GYBT}6Gs壤IGaʊ˟T"vP1R ԍ$(3Ni֙z};.*,mr'X]F`>:]G_$m4a!V&+ m3ww2v!ꚉbUCk^PaJ&3Et <7{݉]͓N ax1ʩFNbcH(@KW9%TZKDP'mXE֫q?ڑ͂D_c\X2Rqut;!M \|9rff>s $PEDܐo@/k&@r21 +J3#0lh9+UX6*1.pInAa)ʧ^œ&6Ǽ `sPCYQ3Yt|c8xI(]w'PKsιPì< {`bG&պ pʄ1T9=!Q fˈ4 0Hb(av W +3+& +եh(BJhu0K=F +C"|k21g kSCvC?NW긳vHۃvW>*̓W(Q-U%SU%qD5MlEN~ 0g\^IӏdV Ƽ0Bi3ػvK)ac5 aueBt^7Fa2gj$[:MQR&3|E-jrsCTւ^ _QݶΌJ I3Ɛ65H$fU (1Hx"3$RL֩m` +D -.aTuJ]la)f8XvL "F) +Cxk2$)4â=( +z94EJG޵6ev[LڢZE˨*" H$R7!l:06Ru?Yj>9;*!C iI.B?niqUV2DUͱV^~M& +48Ν#| brwgѽ C> (e-XZ(Hea"PiMA3V,KgI,AC,ÞtЪ#%5A'Hm0.uB-9^\"a!ʡ~4-0V3k(V"[~*XfK,N]Jp0b;!M - iEKGSꬓ-Ĵo<]*мqHmC=EEEjS IxF6xG .qoh!n6O5`N?T"qn~CtαpىnF(G4,W´'(x:N;'#MDͬsUpIQC7>&TJ:uA(żZ0 h8D)6;G/d0`8žmrV;}8:Y"쮞R9niE3í/@ +wAKpa¡eϑ"*A&xg*~*C +5ޚ+ʤӉo.XJIq`Sga<}qp$IYvk~CT']T'> +11%ۇ*Iڅ+*K56i. x"0<(#% !gW>[AoVWwVHWZYmx*)"mdwc0d!PYz 'DQYf. +<&%O}P,F8B{<$cUa(YZޚP'i[uS!`մ<#C/Fx5!DුG1˨bqr{Ex.xF}h2 IӈQEV *y:ß>d IWOê@^(~ L:S0:Ll[M=u!F8<*tǹt1TR},K8P:*ߧXrI}tbwL-APl'eY>@:,t "^^ݡ:jEɰ ML8|u.vgLC~"W4> /Џ)XxQt|]ijNsY3d玉Μo|QM{xDD;%1fQ8DVãՉffX s9OQ0ӜJ^5(l-`4js(aQ_zѣ( +m9\\Q}t4Jv| +k VU@j_,`~ r $?TTݳz~8OO%o.e 6ԄA{\Q^!$]Q{9Akhj:zq"ڽk@cjTP)%u5NQDG^ &5wB1H:`Ѯش8EKI-[4]5@M6b8bfʘ\Ï4"8[[ˊY #vnoc;i<_*8'-j-\ PT{_lC5J[HIyꘙh*6?݉IC q$W+]~]2Of%^ds34?xdNQ"Nu&!qZ'm;7 +!PgMjCeť1/8&ssOT@&޳QtF\v ^ 3ܓNB'F'k&1O~ְ$Hڕv?\ P:ؚF`KYH*GM]װ !V3 aB t+ O8'2 Py^/BPEnV +u7T:m]|$pNa28[o >yp„K"' `FnF ~-|[#Em@oB!H#/(Rf*rJwZe~,HzTJ<!22F̀ēK^$2(L埧cz%\q %- nDA}@=}&Ok Oe0 >\4܂H"P?<80xTLk4ir:ˡ)dd'aCɣ~L9bBݫ˟!Pe5M4*܎-Nv}$?akFq0c?H1Jwɥ\Rm@7g SVӳEeSDqǦes|BicnH7}4U%8iIR {>:ɭF#3^e\)!럜=|Ɵz(O>.~B oOщs^~o?o_'Ϳo9G~_~ϿO~k:>T=~W˱otNn?:'+Mxgu4ȌeԀ֮{Ä$;]Ia@.Jvoq#*kjʦvse.%2sc=, %yG & GLhq ͺFZV@bw5f,ՏaSKb Rr +Ugqury֍L9B߷:ΰ|sG+\ G G~!mJQng.H36{'n k#ɲȵ5N`(u7k_OuVCN5+$Tdq:km{~&𽼮 +AuddvQ\#UKAe@Hߦ9c,Br!VY=4d*/8-HȈw<5pp eyᛢVSCQVx-Xk۴x%JCQӜZ@T=Fs{|]'uU(G"⮦{7Ԩ`B:UmbȔ;4&L|!$ +!B rkkpIыEDhNXM 8d`{^ͶD-n0MSo {0v03 g@k?U3Ƃ×W+O~Yp8Q1RNJȄL;b+Ud4Ntb B&AΦ;db]8R ;Dy~A1)f8Xg(ҽQcߚB 1S̐1n JTF%QQ PnA(|`ԭwA UX2PKsN TKfΒa4oTV<*=N@(CNCd `]b`ET@IB7zDG)T@' + N5ޚW~hjiH"He%DW4 +2W !sASFHNӷβGp5p_Fc=H`'/TܫYZu]dη +ܴ-İ +\; +EogFzbJ]_$zjy ]n :" 1Xmd* +6ʚ^tf̀\8yȈC.F +9W@(Zuf b"q՘tqcF35gLR@)j+l|9ic-vjE[Ͳ9=#/q" +-)q݅ sqaYɇgkQ+w쿚5RƠ-#}?^-d9FyPgA0Rџcz*K>YdtiP(OBM;2oHR->}V6HS]M黼ToNN?Y"[0HI&CG'N+Nafh(N^ +>nP݀2P1 i6Gm8KHJSq5 +ioX,g|7'IӁQsYӘ;}~ ˡ@F=pHʢ̬гɳDLuȢ !=R7Hh`pQ+32~[ӘI +C@8oPC_Uw5,MΌ#,2é;/œ0@B2Ѝ?YT%k,(f6M+LW:iX oHHi~s y nTiuVj]hI@r l)we>#S>c>cΠ?gešj\M7LD]gQ +@xD`"]ܪ qTSik/V<#rTF{A80QBhU@Z[zfnHEvx `~7Y׍bBj8\c:`aR&7do4*'/t6EE{fNPUcZP:XEzfA4|jr|k.m4<K/9N)=R"Vߛ)xukĥy ru|wNRsFb8xzhHVB[-T% +ʃҋe<:ɶr| $ m[.z'[Αh#3*Gre:.H#7K],@)vr]6P +.[YH` *t1PZ]%GNlnSVg)iozN_+yۗ]u,W@ +.05'c'D]fѓ!)/\%y)'hh<*aOзOfW'+O`W0u>Ծ܋}u|qtpE̠[Fڟ w eYcpfqxk2c~3ج_IվȖI8B75UWҽi|pLM~"W.SVۖuMpg,̊5tAjY$BMRMy?}GN'wĩ:Ic tze}A6_G֭ {Ю]l,áyU_MByUMPǀj (Lr54 KKf'1"F(55iT(j혆H0N5m[ .FN[z͎z g5NmVSHvOE\iN/ -HO$` CpK \E slQׯh XchLx\2.P4.ZjB٢h裲<mvMiqsK܎b +@$wVi^:P :(2< 6]P=mS*eqŃs8Hs,O$%v=q f3Sb`T2ڝ4ia3Du]W.l2§qTua̧:|G BpčZKt|A&QiqI+ܮ9>^ +Kn(f%%8!JtqS-%w*Iy(0DdY͠bLCx+q<` kSW0n4gK'?MzPoU##F/Qvc\VL7dQFCq=ve &c}r%5Yz rcR1\#GQfh. +=bR)ng=-iZ1u! u w/kp7/,AtZ4C/DpBv 9bsKtV/-K8긊Xhl>zMdPӭ}ͮ~4P@UTxZc> pfY{^7|lvvWAт/Zڷv%3Rn*:hUmiZ)MխS7eviE&J49Kآ蜌f>^d:k@ bh`@S*<[sEA~.ߑpL +kaZ$d[L=8gf8"œPCOwc|`\ѹs/Ւc}QOA3{(dPzzR]Lg/x"-9u5pȷ`etC2Ky!؏@L͸z-c|-Ef[jp8aK4[# 8Tñ4E9*9cPrw͏)EĻj-4GӁVH)Dڌ(T`gnzJ"uQ"U5<hgN$tYMWՑ(:ӌ?ߪK1C rK׮s7`dɾaDV(ju'2tTKG&mV]Pfl8Zuuޟ~o%4KBCBૺRͲt7Tjh  +A'#8s郒aV򻚋-24b>Nug-WZt)nv!/J;в!2h^B5("ƄPM6#J֝vzM=Pﴳ)Zk༿1 xSz8GQqE)ǔ +A;K9SVI"ԗY]!$D9͡'1̝_Lɿ/PrHaQwo@z@?r6<#GlVV~t# Jg)$|ǭH/r%uN}/r_1?o NԟK;!RS8r_Ɛ\Ũ5(v5SM8blBPi"4sWvQ(XoM2 &I's2v,Bsv\H WI]v {@z5%M&bIU?!Hdlw:oml&IygCy +g|KUTި* KW%`Oע#ҕ>diwFi=СeP2db@sW#Nդ3N+[trK +! bRshVTꝯi FrlL+MpB-\[T-9KH:Fc@ !͊'5M :+lӸ8O~W pjp/[6}4GB Ne;!0ŶgH" AwDق;+AYӤʔ֪]4VZm"]ݺKxԨD2UV]Lb"6ΏO'7{_Y̜;RY\!Q{ H^% 3PY35J~Ag_2]R"Pq: <ۺFJG-$v8Aqt!sw8[p/ Xy"yn yeK;Ztsᄿ@o4v ~6 T5M =I\./ly8|ǜ$gG 1I)aY 9Ev *09> 5n[.x++Y\7ꄮ }Ug;ld>W-I~oeP7nV.6d9UR?J F^z0 6!dTrl]L]'0$4o!pIlrWہ( zWf\J6ģVaS;ܪ[XN{%O3B5FdQc,z+<AƢRFc2r1SՆ11ϒ%zrEGd\GҬ]Kw+ӕxyTm?vjWT‡A9S^im^a`Lo['@vicKnWT8~(_ȡD&KOAy뻍LZ5/%->,Rj @x3L־F2Jj{ ciKã034D4 S.YlxTKc| MŨJrYOIQ,0uMsghTɟ +S䇳7 FI2B{YJh0a<(Bhe/)dYH֠UGۄ6^[ˑ4`oK:*֩ilʳ^dm)wl!HAX!Р ϰMCMV; eGɾ};T1H{Tݫ{@AUn:c#Q*SW#4F*оۅ;)/"Qg{mhRhlFޜ.Ҝ.#iX+}Zi=ضmpHWOFhJdd>?xsYѠN/zpbN2:XռdNlw^Z +b'm[mp)|VP}S#B>ɐA]ZV }? vz"#Ohtq* +N +¼F wT`DIEyUŋ3nJwNU2븒+؃#{ZQBl\j̨'ܾ 0I]Fd/ 'ƃnr֔uVbDuzىR 4|40}쩄IR3OwCP2^g{ݵѴ; +Gj0Q|(E4X1Z)\Ud6m3$mxUm2zS +!*uGVt]5o&;,MF"!s't1eűk$]jz@N,(tdt9N#^I 9bea`)+ 17bntP;l+*сݻƃZ>B/mvˁQ֡}(Vv-d7rhq-rI|(mxo/XꁰdwŠ !Eq,iJDRjW>iЇuu4p $hX@7`뼳F ?( `z$Ol:8h} '?ߒi[7wUGHhE*FAE#3nx*gf'7Rws7;pZCl%~3T‘f G^N 2CFhvoLrI~(ewKRQ!`޳7[j>yXt^ݧ}? \ .J5aI-(b-# KߛNB=/u UodKRïPmrK'k^ykUOf]W5~<IS֮CC8D(Dy`lVs X%tM*ܾU$TmxhdOX-^6+!>T{<0]@BmBCt_>>\{4>B=ۺ."fe?; s "#w$>J_s:BXzcxB4RF qʄCmWCLc~վj4@xa,6 g*!v[Զ[и[5ݫrm6^04eй#nc(GF;ndu=l娞|(}O{jLt%$aKg>} $(}n*5䰍ige|&5cG?pt n1o+/u%Z2&ἦJ:} F8_H<λjԭQhe>s^GCH +Sʬ=*W6Vֱ58|^ X駅v ϩ%@6^SDܪ F{/k8K" RZSb+ty٭Fko I)YD=Ʒ3-RzM95T08\ԲO# gw DWZL4eL xI Wma]/4-C 'b)g%81E7"KEΜ*ʽEiʛܛVk:](-pf~J -A<2e9.K--5 W56eikNM]L2)8Ɛ&`zbWgrjvUlvJoS0\9t#ˆôǐ í,;cKw[48ÚT4K@mS؎.)m}sFʙi qpXhJ( v?WV@uoaKz.שPfSFuFAPj56OJEVŠ'\3KUe4۬YšP)|KoACq|fE}B&g`_Qg'mC_YgChMQZNΆ9UY[/Df[ƞ2ӮQƤCnϭkX⌾#|n}Tl;},Llz$dJSDlvjv#ϥb:j56V;:&n-3n ޸Z)" Y?J^3cb44vc_$ n>xd`;&S#s!_F}MXu2 ^rqRR`Y:+s-rL}{ײiR ǡhu:ppP98V %imzVM$$cՍQrYP_7Uꐘy |Zy+۟Bl>~1o?)z5z8~a=D B9ƪO;CgVCds_&1}d+dO=$p3?+R!5^F;$YSj@٢.ğy35B:`kag?̈́^[κ-pwJиH)]yHvmJEM̋"PIF}RC{J5O!!$VfRfO+ .B@u,ۺy6[DR4?6|M)/ ݟtJfrҼĆsvmyYJGEIdF0CI~7dsƷsLO +ċJxR2>x]q)#ЍqF׀טfFMÍ pq) b;BN3^>g;:TjM{0a.)a~,+AGѶͪ&.)CWt?V4)`uXC͒,gQCKwl2>*-6t'BE= +1{(e;㋁Zv_TPz {7=*QPm4lJST-{>i`c?,w"7LN--SoןU-:e;#vl%I,|&4k$gehwc19 +dɜ;vFPo +p[whnPjҕ9{^fPA(óU}p@,CS)2D*'53s@D¸}Q|q83րIPZvjokOFR=o#yk4^"92j䪑azOMQm|HyJmG{jX.Ra_lP\Hw=Z٣.1D]/cAy +Py6/dAqA 5ëT!Wy8n|E] +o!ڜa|sμ9֞-J}t1~Rؘ0má7hBv(?uV,'2P Z.6~l-Q@dKGq+Ú8p)Uk<4XQrNe&К@&M]rXxeb?b)$}yLҤ~ָ$ a1D (UD.v0C"È\ꪎ8JgQtV墕UjnP&P+WF<(W /w]zmL弽W(|ݝ[CT55Sz-T-wA/$\”ª!BDUf%po9ZkX=S.tr,f)vaMe`ʝQKoXI> +W'+E g +)(lF&UR=̕6x=woGfJ1J 0?ב<x\S V߰E 7qFb˦ϖؼ+(:R$zt wEK%ji-4B܇;5Z? ̅;,/^Sb{$R$4s 20QvO.tHZ*g*9 !7nW>.U2JJC͋{8/K k[[=3/':\(a-!GHcZŸ wˆ(I?}K^}r4= +F&rRFU7opr$~F\э֯CEJ(^U7ADmO}ϘB1"/HPީZTZ"0OxCس09UdZpu)0O> ٟ-#{HCzJ@I^BR"'40quppH:WtfNv +}s +pYk>yyjU\;zAکTσ) &v!(W6\H{/j\؋^od: 6_ҪoqP4N=+:4?Kl0@yʉ)q:YKOrT\.U_6u`H_`B'V$&P\+?V]KP@K~+he6KtU5?@hLQ_V} h*_W~P@UK>x#Іpͳl^nHy%؄9"gCFh"ڷƓY_׫F9Wf +0Ȉ7ayyqo:>/a.5)%%.q,!)6uR)Rת%FJS&y76JSbIyw0n Whyq哱iYđs0ݿ2%1뱭9)wI <1.b£2G(Ic%^Ӱ 69IaNO9V&@<.AK.9ƌS k!|4f$Ho~%Îhr(^]9pCVz3l>^S=9cb+vlP3q2_iLΈOI֐KTUPhw(o(7A~Rc7c}wl|9>'qFw ?dsT]ϫ2ӍiC5;n GURw,?0M9h; E\~#A [Ӕ92}Eb/_Q?jLN +LwYKq0+:IԒ+̋P^,AX?}LA]>iAۤMg9*9T̆ fu%h}MB +rY%vJCثW{L;h!&4Uv"̈́Pd'S|ZQ;͚ĠN'76Q۰`{{Jc\NBƓӎ0i +RyyW= +j +pwiۿxFߒ<ٽٟoU#6eÕU(O\:{Qj}TΤs(Jud"'0*ՆNʷhضzEwZ!h\rWS+Z;bumR\➺pY{_H^}X/Dx LvM o \n +cIA[˸Bh[ \\F*H+uyQ?h⌦ /DVf\$ǘ~];H>@&s5F ;!eQvpjm =&m]0='UyI4b '`oER$\>{ڼ1u +>oVFbFqRVDBD$$VG~"w')8U:vJ#*?P}&̴ߦ%.ª2ޱ$ *5_d +lChЖ_I 8kDj?{9sYZ? +$fr9,l]7RX鳎E&_jk$u`FtGPKG¯uTmeDvNw4htlHh|ogo' u|ӕ"Hƺ2x :F1޿ V4*N2V+sbؼϗ;Q9N|*N&Aqsj}#;Wmgt3wvU XV"4P`a?-(#ْ:jV@'>!wphmR(U%M {#1 !҇_z* Z:m-mEdž4\z[ue29r /}iv-GҎ=˰Ed;2_> Hu#rYC,Xt BT"QV&l |މ>n:@mi-+ޅc6$>г%T보:~ꌧ_c,@swS +7ˆ4. CFD-\'WYj&C٨HP9D)mAQtp.CE Tc/7_! +Q5h^KU*`)"# ' 10I3-c`RvFB6D<)= _f t-tШJQ$_ J3rrg5X7}j=ׇQY ;D +BvvMrxD9$8/1b`.$m qeHC49gmy&l\G#/4g}U})rY 8 2 zd.ƶ׈ +puU +233G6!C 5\~_^?r4ݰ5mjπ(u݅KpiZa~eݗ.0Q:LfDiAWTI1dƭ3.Xvx `(|}q.wؽz/ebT,f+QV-R4~@z܇-E(݂u笜PCz*5JX[bIIC>G `"@fNd5aK#-8\B0|((-$2@.N'F>sنHf~a +8)&o +ۻ.>H[*x?P>h˄ nӅhaO>LKBNuT%.͉?>иJ~iI^Ƞ6 7ӡJrHKl\<}fXy:i{s~g=yXUmPNEHJ0jt=d-XP'4HG%}{jCBsJ`E,d+qea@48SM*|(6P3 mM!` pqyݹ҉U$qF%mi#7sXVx2rtu~x-$z?ŝ:|1tgp2J]AC۶뾣yQAfM Y$ӏa>{>|L=,t$3 @Say߉<\\Rڪ_ƮK.*^hI +{:u`{2^V_)/Y6`:Q[%g:ed|塏R:K(VpsEHB_NՅvKt3Ilp-Ʊ>-i(GmüO(ƒuӈ +-I@"-2i9}fGO#4HVwiB H#4BA>CE-WBt2})A8e(Jr&2xpt~Ӳ lnC땖~y{m+9 %il+ŅH12[ ? 2O͆xA"u-agdDwp6^ITUdnG[7M`œx@7"t;y~fݡ!v^FaCsn޽Yd}ag=y Thگ`/Vdh-2j7* oi2sl1",W +mS=6SQ1/u// .1Kǫcm&mZd?Iﮓ5~:TP6rpЈvW~9W`_--iw$ȳxak=n2_ +ɦG#46現vz%b1 b49/hhҥ{!/aȫRޭ7)5Y|nǰg5I*V'@'LB;dϷgy-J\Ƌ(*z۶2͞A+qls +>Y@ +e*.#g +翟5ꜦpJJ[ަuBd/+qX?iMe//MpZ\m%MIE 3i;_"?"ù? 9V, U"U 's?-b7 +,ImEx@;Qxr`Z"A0"դ'TtOqih 2uɆz%D.bkۻe_RQ2f\/0=!1mjLY97z6mQpv*?<Io#xۤ4؍>]4{qoxt,%Ûdc@br/%!ߙ3Zr4jZF^=X:K0~\w0l#jnta_뼡OaSFj +Β3U-RA"zTip߶\RjmOz(eǻSk*|~Hgq"O3D -͕6},HCF=4yۖ&[柷DG8Iug|͉]96鸧YS=D?L`3?g~;gcC~T,m +H`V~:ylO )j +ʙP %BMKgVbIXҠn"4 <@i;5v5 uZwxzNA$|Rv`%XSnNQWC-.4]ݼ@h+l~iqJC)ƶ0vZf׺/ov*>ʙN#l*st'qFQ +%luFo~8J!Snt8{d(P]e+a5_N-J*Y],: d0orsQz漶8g%oGض݈wY+-H@_Y0&*mezƒq6}P\x =}X_'ŨCo_9Xw 6IæeV*wE<S\wf#'w}j ,Kg D^0?b!ZW& # 5U-\܃B"0S#IC]^>eBS.-A0h x@ ^0gMz;Rp.JA /1Puc-߆ݴoF`7x'(0.8/x& :US2@,93ًYCLRjqk,wo;[pҿa~Gϛçe+JOJ,7)ʄٔnaJ!(1,bsLSnP"^m{ *ޭV+$ +LOΤڠ$ +{QaP7Sl|misxиO*U#D iDl ZDӨiVi9 ԨA::-Fw㒃B:UD:,=AD͖9ܦ5"nwĽԮ@ywmn^2c#pib{B8זY3cp1WtRO[w[~ Iğbѯ8~]-jKX(Uc #%wbdi$n`{?)4YBMR\l㾆A!0P9(&@/CAqmݖB0=.Pϳf4R`lRZ܉^1?%\׃?]8Vv= +m**eCH`BpquO_)(6Hqwn+Y5Oʹ`%/=F$׵aݾh|I7DEsqG+_E0I,SBI9N}4%C94BB̥3+cZ"uaLF3Ӭ&ޞTv=Kv0„09 5"UȥK`Ugj稤p,1C8Qyԍj;"*I*1wS쁀[ >VFvBFT^DjdeP1jgyH~;laܖP_BEP`⁉{S-Nj)p@mA1W5Xf- +:S(=jb.?Gt*wO'W8M $7P +<̬d&XI1m?6{_oWt9HK3` &Zet䣰ǡ BD)>0,ƺ;B4 +@_/,e(Xf_o*Kd6\R!*@fF'tlE J^ヨ=PɆ֊ _)nK’ 8#&aJ{JZ隀>WO|Nlg= Xa[PJxˈ!ԑC +NLű+|'SqBnP>zqQWyMiO/(6әHtUB)l@%ĞwЬI%8d?s/}j]%`%;"+#/^.#t>E ^="҅MvD_H%"c\V`Cjn?>Վf/9\(`'O<9iTVj9HQ?)N(t?ng0x"d7=.&da4pXd2]A?o`-w-O=%:LSTu>U+%ri!3:#vsOy1 +ͲJxxx% \o:ܧ-2@vB%f =Kǎ%rhe هTÀ"iwɽTG0qAl˻G:2rӾøgӇ : +nq)S;=MK[\^R/rf5nEs!' 4]euBݭw]UHܨr)A}(DX>p?Y8UpWte."쬐]XkPbdb+\?'QiXE" + 0"aj0T4iU^3IE].3ѩQhAX7}Y^@)\9~(W> :̓ܛi?'!P3D +o(䟵Bf %M%pWo /*S{yXa bLްϸ R[ i9lW SnGtl l3[fTgPgM g9ݞ>ֱegS\/~ZP&ueH=٬ 3˚M58{ӳգJhZ䳷-=q|s1w]Aw׸g`]I}X9)lwǮzp?eX@@&Wft+fT|+]p!sG[6DmMWփ(Gpr{7&E eHS@lgEY4<#zߞhI/t3==@P*:z%]&K؄PL0z҂je_dT#Q%HVQv~P: eM,~/zp`a\l ++{1$1pis!j"gU'Ւ\TKOGç'fǡίP>҂>rbP +~tFFJp7.Bm:Guz9-ѯ؛?5mK}sTTCT\~'ڔH~QF'ˌ(Si~ϻ +74rTǚ.`ݣܒ|@xm0Lf(ǁtKyBv@g-m1,ߐKr?)E}B{w赕G6ȕ2'MZ+CALX:#ly"Q$\AN}aIAhV*T ˵ʼn<1T, }ٽ3?$E*Q@{K]5Ǐw 0QD3ur׶q8৙4 +uTJ;˴-+b񏊌ta@gTB@3\/yUT%뎤:|=v$HW2JHϑ؅1qq/U;'^&#23HdU`_ 0Q$_>EBK)ۚ_x&AnŹ5W~I LHB޼ fzݶf~*.ž.K{]' q#B>vF[9.JN63?'g怃f&U38jS4g U?KK(ce] j|-">/Y&> tNSCo.{N.ȕ5IIOu7?oD\mH婯7*mnBWdR ũtzٝugDןIٕ)GssB|jKW +kYXKLC0 ac)ռ-()"Q2C^mVsu╕~֞}ĵKғyS,`/2жQt;ɼ^LbRHbA1^:M/fD033樆noMVN8'S9Q 4o,!o,h-d Z eSz1o]Pg( +41@-%dJ{YbX0,oo`*ܭD.Y.u9 *v#AgDyܞl~؀FEˮ[*}61!k9E_Mm9!{GZCQZ042QRDJMĔ| +F C {gqA%n_̓A;i@!3P\4\AWd` ɟ!Es "A3aFJE8osDf-sb*΋paˠA4(N=0xIu44Fj@&>@k䮰h7rS-M5|i |3|:|){,njo6Pއ eY=܇TulZF2*XvUM_:ߎC 62sSBG~a$\ OgsvAvnM>2 c V Mìp;A0ٶwȢ,ƠA" Ѷ0@ؙ:d' דwSw.i(Pv(5[VVK*3o~ej:s^ _Rij.dg0:B ,HQ +V58~/8o{2ӏ;SH0=s v*IWT +dUv}*빬 dU49x eu\AjǪ+`'H"+ */ v?Q +"} .zl@l SM]Gc+_ BpY_d/gT*ױ=z}n, y;]96p0Y~ reiWQl܈5qK֑Ԇsݻ#;zVڴ˳m? ?S8Ǜ.ΏqDZRx+E_oeC.!#iK +EW$35?Sp)9=tRNQ rRn%}\AKAS:V|LQ/=1~R}[xo; "YLĩی1eL^`yvo?g2Pl-؄W+j60cRbn0cPO"OB_d%a|$G#İnCrrGIDGC<*&̕\Ȱe4pj_(cQ2#7:NHYо-F5Z$rc6byzM +'1Tяt}ysU>|/!znms|V3$1IQIȡ Ay~nG0(V6ɹ^ -I$^hS^IW|뺿muWb>}dxPڑ,XG@̆2G \\Ae snG.oehPaI9mUv>;iD1 ﴅKvU6sNsʸZ#|> -L%M $U(#/rYTalzw /"퐰8Bٳd^6(ٽSǽYO7d,HN&=zf qyNA4ZDoy=ƌCn>x&?YreBeSf^#ZYpV +;/Eסet3΢`Yr.O t + CC%`5FF@ +ĦEs\]<,w)7P|~;7B84 +<+Yi% +S%WOU3q}=4)o+yzZ^mVd34ǭXۆ(S1]<}6_9Iޭ̭R}Rp** @ ugX*LLI\Z_PNz"b poG16.?RFƻ}n&++t"01)H;4_Ȳץka#󐬆51x2h˰Uǖ>.jM/]h^X1>N[?٩.1e%Erq`BT^;攸a ( :S2Q= K}LAR+- =o\9_*Ð`ĺ0*9s+mDԟJm3\?=x03=VOL{iV׃*14r|/ %Yzc@Mw mI-4cLRmS9ǿqS"^1+*R% `nq@t\TCD(l+,|C]<xU^MS(W~D3]'Jȱ4Σȅs(%AbJ%PgC2PUC~陠y ikܸi>*ͰXQ +|QʸA$0_" VBnCm_HNa4˸O 4(ns**08,Ӌڰ{F}U)0Y䰎\ ̙ +{.M:`t!$K>jWSX̷Vf04ʖoyPܰ(]'cOfR+Xʕ >&␼R0 W'CќOpJ5onn g%BhSwa?K^6}I+E k'W)9%6Z0k jz0@ގ&Zʦ+{VOVp>ӣU>,FrAj]~]L[zgf?`| +O 1УRͬĻ<c]+WVf ݁jΛx)#XS m٬WT]}Ҟn_Np9Cܚn?SW<%u ԏsky  U5Up/xlܤhq[l%;nUF@ӣ[9GJ $H5hd~uXȓf%pSRǝk` +51bCuwLg WgӒL9C h} .&˝Ag2(}z!uAĶ$N-==\䷜#LYAA2^,Go߰<~/Rc;a};a|7kA1HyǛ?D"$)( zD z(/jODOM{{ 2F$!Mƙ?srczTKt뗓 e= b3^@52z3,I)aFW etHˊ*HNM kȓH}Sߠ>N誎'Ds,!!hKTh %JU>$=s RBSNhωz ^Ic`X OV J2R>_f6aE2島NOIaB;fӴ'ā5M̹.*)0zŦNJ$]ü߲pP2I_3z!Lb"y _p' N7'6C1m-2^}˜B'MqPX2|l ݧ|VgN9 c@:ƒK?JOEēbDPowoezct:8%~qx¿_wMTy;< i)e| +S(?scKcQ"=8kN2ݟg pxep :~ h-ۍ+ӞYzG!i4]f{ /l*Z?4mGr:k;fyfM%%b# >)s><(IPX(p0cxX:Vz#ކtܻS$&xEK}3%pWLH\z .g,-B{Q gm5eeAkT$zE1ub3\i yA5Q3-7:M#3|7 +\zk$ip_9s-tDu⑩av{*1e#nbؕdGM [x`hiwՃBxo8JN'-7r4>?q39ril''_8p 6-uz0|jIE|ccFʙd.x7~S^4iFN;Xw OsY6}'PX吗bʯF>!?m`ʇabӔJYQ߸T_|IV=E^z_Ey2yW*DAq#X RΡ&^{>q7:O}^GDHtT} AV|h{Ox>G5 gkQxT%aH\~ƹKo(k(%nqm>"N.\uW)YiIչPtXC{J)'ӀX@B䥅=:ِE{3<yŶ1}WK٬= 9K~i:6튰ȁE*@h! ߿RNȻWZʤc!\ߗ慎ٵL/a `:;$)\@A9e?Ü1 IPv>9 (g;f[ֻRM'.hA"}W{ꉍɽ9 tJb-X bgPNC#lRd(M-X)\Hm&EU #F?N'^HpYQu<W`EQcY?xՄTdzVu0(+|s2?bkD,`x$:ymS ZH^#gGz7pA|X`?C"O@OIzTO0N)wrxK>Iu O^ɷK̷R奰`jBdTP7,Vk25Rf=)jF~:$\pQJ{3;S%]L5nS8 8v!o6+Q[Ks3JJKTKU3>d New M72|im?S(O: SdAVb%dKR+0 CHTOUxEz+O{2Lw8)qb)BL]8d VNO`"٩H-}(|SjB&HEioYKR2TlI98YSlRjf54Y\5S,VXr0/+}F6z'}jFl!1gV.gD>K.`7D7`_(g/IBv^T=[!b!@v^2WhF[!"\K_(ͦD[vI![<ߔYtXK`\7vS>u~`w@M]:SL|:@)C(ay9ۤb [~0JIi#~-.(;P}c6#T'C} +9LV\SO72KtIۣFd b^2Rab-3 Ļ`{qN#~ ckA{544{DpnqZbx8o41<m1d +u>?Jfɬ3uquH<(jihjsސ$t0A!E3:J:F#-|IMB+Ĵr)GbX"K-EFx 鼂s,M+&<8si2_sI'TD = bqZi՜uQS=\F@>yJ|^ϤM' L]3B0pz:_+I!=,MpPu;_dO7-,QV +"l|jڄ2/ػF>4;n$)42DQyyP C'5OF迥hi fdpݟՈ?RS +zM(ᝩ\Vz"u+qJ!?(]o`8]nR?xNvE)\|_[C/ÑXuFLyhoPS"VXlԎ|1 ZvICvp>N҃ ?edٍ5zUQ+4 {KL q#`$ v>`14HA@ftRl1kPƐo/GdfUTiٕv7ò>`cb8:0 ¡>@hcf8Voe%%2ZC>G(X1#:NeP*2SJvG1ѬpuXni3`zsGs=:rA4 +GD:UlX!{B!UDH5 B< iO<7yyJM.^h|\QyO0_+ U""wlXEL@^=$}m +T咺 &yc Y`͎6W yD -WČz "r*pj H PGh+Я\^$gk)UВ[ #P T bTȐ3fJWk 3xr3FčB[&rݜ.W$p@'ܸ3kX.@8T2;"7]?9r #6ENɹ9\U孮׺lPucյ՘VhX4g坕#qVc~1ˎ>Eo4**/&)/ie +#9m.85nWjSXk1b' +"Fz 2Dcw"`7a,&'b4TcS&q 8 oǽ8 +[Cی{$y3W )>/]qܔ5SaAVXc3}LSY җ$h,aq(;;@pBP&$bYKD.!RN͍7=VF8} /'sKf ~I?Գ՛8ĪStc]Eo;+Eu@'T' d^:hu1r +#dgic>ŭ f@xL Lz PSۣ;otwCa%k~!%HH(M4/RL7$]qo$#82+ Ytq4 mVbi=2(:>)6kʧm 5!)Of!~=DzU!gZkVOGK,sA7{D|>Gg!JQ-~"T6>CR >/%B'J+קyUFU;IDXCE?G{k=ֿ܌RTsxz6 /Un\s$D$msߪ@e'GjDnX:j 3ms󰰙 Oc9Nأ/9+>ءG833NNh|O v"v|1X]y ohx wbd;r3ݚGʏ&畵MGJXRjt9ϳ{9<$ttgU\T391Ǣ=v_YE$_6 A8/↰Wr=Mߕ\ڇ UBHZ;Gq!qSR=ݻd k#^zd4HCUR. w"RWuV駘.CzIgA<apxO1H d1)(/P**ɥv%րǍ`$љtqy t +i-H]AUFWuʍ*8QꆚKRS SsJ?%bSyEav-PfS6?h׹| +4ololT.#OQ&M@8 \䦂uK$|DE-v k%j@s 2<>^rY7!xgϯ._!f˗/_P|]QWO7wO޿?wsAzy݇7?_~GӱDm*7r&{dP&j*oH3L֏009.kO*/"f1חy\U;omʪ)KJII?S땴ݩeD +mPYc2WjlR8:Tms+H 5i])rbI!5hY] Jt{Q8H"s\JKǜ 4hܗêY&H&f;h~2a~AjBT{yZBZFOEvej˳Ȁ^xuOנn.dR`NlP24ʀ)kꌀ%PېC5}fix=N1U*CN? +ݦ%j:u.*!E*='yRq>a!9D &ȑBڡnUr +$֊*:1?SЏ#ѨB +ly\AwsüURrȤvcFd`EUM|:kIZd FBp8% ZX[HlFyg;8ޓԕbχe0Y;G> B͔,3g6D +PCĺp٨7-XHgr2 o)9!C-@vnퟁ +356aduڸwHq]qFd0 L~zs@rLQA&^t$ j*IRh*?>uv%qCx]H|C%zs :ƹ"*]]-XA + 4giXRU 0F$rk*8MM/^O : +jtlMJ06-_c2eZUm[\S(ڍBHk+cjL) +tZC F]H߃Z5Vl7iHCڮ&bvޖȊbY4P͒)GHJN+q"D%e!87o@V@@jưQhDSOe ]}*\], [5MSHd.GΡj4Ѹ"Zz8*S%h侢n~h[π8iZz:zH5$h;]T_XPbƳR鉵wIML06YY+AOʨ#ՎL4jrP [4̘e)"(qˇ53yg J=FsDfZKz-*0Yhc"l'Oflj9NZih|hݲ])$ZLyBVJr8ؑjqeYXa48[Z䁝o;͇oĻ;dMψ_; +R|OǏ΁.̠`MAF+=yxs9ӆq=֬6p)aw9Wk/8;V A@e1g }@f%WPn%F?w\89R㍾ƧqiSOWS@qB"su+;SŽ(ec"e3G9CcaIeƷ"PyHb;s#u\oew5HP,8+pᲰݢ'vZ:_98Ojs:c%1h#LuðBw]dxAA@)g7ӬtֹZk/Lݢh^VSy1U^6A_ `<XAh A6kʍ@s!Ǯd,%ִQI#F:^#Yb!;= m3 YaѴtȞ5;=TWv*TPF٫6ϲ8 \r7""cŗ>`V+- +k2`T/@؛(  a@=#୮=Cs,-*"70YJQ|^]CpC]D_Z#&32)aHST"(K[卵ZÓ ~0S(֩ٴ+=aV7ajXMw=2:b.-!&ZbDLѯ.g:6mWC67܂6VjeTk@|<1\Ac;dYZ7F)Q1 Up2<Ryx;m"<'gSHXskÉpќW"hT +i4V*bٖ8ks=Gf ~QЍD>-z-*c>l= +CB||֐JLhaeNmBrPYԱܰcjGi9\ +ID\UtrQyD䕼Ax,rFRjVvpŽ:Gn\?vU(j^Z +i-ƦVO8π.c{ǰGwm֐ +R"4|qh$ͺqn%pn8:\9ao&Å#fUM>o4a`9}R+9ԼČ*Uq+ z@0*)͆ 1_0mA!+NF|.Ҫ0ZD+ݸiRn* 90;v1O&_D{IMJݶ{)gO `h zE]mrlj +g6S\C9 >)4]ɞOqyMpQk2|4ў^1"P>o .n35nr +C\9bx͠f36powH˩$&3)]=C},j`%duua5,`:Z4$V_sj;Gg9{^mIOVvgߦX3c]53ѿ!\SlϚ; 9&LδLn>bӴ˂"Pm$0{qm-dd>E~4.Sfrx0n.BDzɼLȂ^?m#.nϐy 0®-b77W΋v*laECJUң$r;C7V[-nD:\v?:*ڜ>-ךZxQ\se\~9YN+v3i\$*0BDAx4F%|V9$1"t 5tiVzކGgA7mp@6!|Ĥ +ͶyC)r+wtaZTE5<ֹ2] fDžR :G- BMC;g3͸Yh Cb9VnCR5|)Oi8f9-~f'boӁEyUM$V%,"{v + `_k1Ũp%߃߻a@춐8E/Kw15$2܀zv%Vaoy#8͘ر/{]EDkMsĹo:GΊa-V|%X`ۃx qVg5y OpE +zS"F(_]k!1T!J6maEPmSeBdqG5'ZUA(KPJA-%dT\00ʑLcE 5!4} I[b +(RBHȴUIOKGgoA7(R9spך0٫_- Ѥ^/"U N2;׶ MâͥcvjB hy^XssRNkYrcOIo8-u՚RΪppk$OT#F+; ,umF25X$nhUrW<[*ɣ81ΖٞQayml|#x)s:>B PC'0!:ى38zib)i7=F6t+=pžh-#)6\bgb7oxY܇* +1yQ@˳#{jU$j2-BCP+tګB=D,H< XK8l lx#h5"@݄.RD B8ejy4:I_]1(7O}sMSIKeUI#{'O:/`ӷMC[pru~!Bꅜ4ǛLWM +C/ \@!x14$XAB}6c*/+(3ڐc1 HĊ^R!JcSL݄2JQqЊ s 6T'-R +NMa `l=̖YuzJB3kG!TI$2e*:8VnW(6QC;EtPmq֍k#<`H"qz TpXeW}YpUM볯چMZ7[!Tr%$YyFKWc@UbԌp kV"lTِ|K2ssQxװ H6RfIA֞>σg#wŽտm@|js~TU +` %[o2DXP5ۚC0؈@d/M,}ljͧ>ׁHlj_5-NJ["BWpژJ;#0nkhr$MGRY8z!߻0 +"Ќp*/-s=v'WGđFmCVlUd&@k%u \)`8|\3 +s:GXy{Cv:jp}˞hYkJ.ŪOʥܫ^-]<)_ԍ''ZVӆ(ſ\G#ʥZ$dDePqHrY8ǀNSKi%xjm}~'ݗOo0SoIb,?K)+/=koZ"Qhi|F<eڰ굘 5&AșZ+IF0iWrXƱ; ulUIXL&HQJL#1:[Wm{=aveώK>"*IPژu5@: 7bWdpmiv'Ϙ !iԅT ` '3OI05 3PA Tɔe i]+׊?ι0+(T)BYv@)O*iJkYo.s'01k6hL")9@%|)?De~䩫*-J R$p +$X"zˤ*ԛ)52(S* +kPMzHqi-Y$>wT (b*xW)䬥eLST \tG( + }^ i#z(nHWRK6[|jp[n^ &\k‰]>Lh3<4uHРccs=(z H@op&B~M(L'^[a}3Yči&  %5go>M_>\_@1uOLS,n+ՓboV΄^JuAqIK"&4n yDeA<= ++- xI2#Ю[봇>`"%X:XtB)4FZ4 Ÿ'TρER? 'Q)n"z@͕@dtHoـڙ~B 'iT +$Ɍ~0);:P%)}Fvh^Ax~[I`j-V^y%9LT9.6M`~.BԅpUGc&Z.@ub%dB |U7o 2n:<3YQQ٩dv横454 5Sm'SH;P*aeiQTLfЀkTNYYm Y(񠺯5@>4AސS*Xp%@_ٓZ&b%ZeibaĿɐ}v֢^ډ^u[ 6 +pTp%٬ +tՉRڐ#8JL(y8ᮀ ԍW1p vv%LsԃjeS~-$ԗoJ*-+ovSC) =LCZ\vz5>ZHWXJ6&^{yҬ %{HQ`7?-؇n|DTe\( +4 /1ȑba*rHP$8ܘ0 44,KA.Kć. ,Ke7͔ MFPP]Z:R) xù00^ dC6lrӍ?FC T9FuH1{IC|&zA<[K]uA [tߎjX7𢅦5Ɍ!q>f{FFVs͈aaU<&WImw$r NLptȒ,xn>Yx,nAw>^-14 +N*3Q9Q7ؐPZ~|zяgmfk J\3jh bEąDf_986S!Sf YĚgW?d[w(|UdNűTELԳQN8<G8YǸ(agTm&)˨30QSBp0798DWaEWNN)f43un[O[A'8 :H i%d]5cGjPH BlWG0HitP6ìҙ(?M$շSr3X̠sF0teUBIԩ0p୨Epg2lI6A&AS)U+O[&,&& Y&#;ĕׅB/pD'Pȕ=F5ƒomc(ҥ0XF^ ƚgyB +.¹l@ S MT`[ъ)>Yp]*-OATKa**7XW xt~zMQG+*kt4+x}3$^#<&2 lIX٧ok~QfHwkWϬ,PHu"4=\:$e1sF8#!rЂPZS _Q)!0T3 +`68Ebp`8%h&GJM뤇A{32w3RÕb5{̌vM})f0ߞy-'<Cax΢(jY*(Mpӈg||uMxԙ>[^%ů%PS$Q Gˮs628$z,ɢ$()b.f`"Q.U1) TN5)F +! *SI\qXi%4 `~^Lƶ[QBQ+MɀykWlKiV)Q551hH憎a^W-d[u. 3;"*1Lw +dY;g$,,Ğ!; j Zhʬ:r׷l)~=9uHL9Gӿ@k7![&ehu^U *IG&!b"q-x~pC|cqܯVKh9".6`T5jpXX&"d1vXvVbꯩR aX3:$(:h^voln C㽩HXHIJl`QSP IBeZXcm.\grUkk@+=)8BG4 uC ־Oif`d尅, ޾vjxXr@`+a\ x GCB3;5c3-$ڂ_ul +FAH$ĴI6Skګ-%gEEb~Bɉ~ m:<(H蒆C_Na8S@VBe2FW4.S2P(u4Jg [T_g#t5%P=\ +2͐Et + ! +HӨMQ>sF?Ffꖚ+d$ζMak3=X֜"fYaG]#ǀW (1jAz?nVS}*YS{:a+% ڊVhMQI+irM9$sRfcOzCj/#hBiG++8r`u(&pY X ' 7miiQ[())VLͿ֟V˾|0]SzB:Oe@S9kC+BB0_!:m':mH֑ cPfGx:bZl9lӮKCx AAIF\v>ìƟ?q +Tk:)6p^q#{Y]:Y3bo?}i%2YlȞ[j<]y4%`Xj9 9VP\JލoƳa}O*zGB)4q{$! A6#^M)4=Q-̂7.gDIofs8vQofXfp~:<99Mjy cY؝H*f58!sK5F@NV3T)hgotac?L#ڜ Qwjy@/ky͡m*ST0ځ9M;P35{ň?Av^95k 4lv!l:D  _gD%qzFkc>egDՃJ>@**I=lBR VG%:\^|m!VHw{6 +ttNuIݿlT9=YX7pN/,I9 Mk1M@7r]I:g =c˥h=Т7z弜W~Ρ[UgYZa-OOoZx0 +g!FE}T;793#uHP}E n lIa4&?bY-yx䨃d%xz -֛.Բ2[#?|#0`s1pz +$}ӸdrDI/G:2W yWB*-w)m:B&yCȖ:ix}\ESD3xYFoލZf! MVGHHeW #"}Qcp#F66) .V}uV OulZ-ۈH1[ +Uae<drx(T=b9b}f71}a8q>ZKJeRqpL+,wDbiHy +"z'Ɗ@.VDKWK,= I 76m16J&)>Mx\2-qV/J=}b;k#xBžR@=mT9KAc8$їХ'nͣjG5% *I>,!~='_EN]m-,pViZ~ +eRkm|rܮĔy-^ 92£d>~@kGSi^ifIU|5E5ܐ`-Rӟ~tn4"4w*~tX7O࡞Nh]:U`,J~ E˒]ρ *ia:6"J,(:Q@ ޹2ZlX\|?~'0X\%{,6!%M8*i5@9nWb J]bqM~J`sU4 q6q:*tߢ%C&Y#ONzNmj039^X7bsF^h`Iҩ*9HХ$C7*h~Tg'P1d%g(ڍn7q;yUlܦ<.l,ۑ(oޒ'_'}< Ȑ7eۋ@)zTC& '0QLdP;Br"3`U_5Vr7 H`]˜Jµ,P#{\|7#zѾvÉߥ +R1j xdEN;9s>1|hQ0C%*geßaDF큁§#U2{$ D+[ O,,ttΚ"AMʤ1N}[j&nf h|yyԨL^_Ց( >^&RbwT]NbO%bUVˍ딯#C7zDscF5QQ0*=ˈ@A:Pcmse;:r_ڹ]\xkѸZ7[ 6vHsMaP +Ktfa4 #YKۣ31KmHVH+B4-E̕1{Cb_ +@64_ Z$70QY,S+X9Q @RVF@$n2q5Rҿdz[vjW !"s$ҫd82OoڦńY#35&Hӌ dKte~!lr}}Pěz.&S5Y$A*rE*z7%Iz56p5FKP閿>y[/:/G"o秉JDmn {}җȩ2l%/;U@|$C+w&ӻLhD% J2+h-XǪGL㨙茇Ox m|K>[ufhS](P]6c5!먱4+U_g4.G֭Aj[rnj͕zyfJA\J.V\e-Js)Ny;u4hd0h)-<_8}0qfӦLJf8x#@18P-Bf0vEeDָлPU-WF [8l=>Ksc|H$Ry=Z$͟>:aYL)K闹-q)=>-:%g79'G 愶5bq? 3x9aw8/?r7-NChB3""{X9\i%-3`fN%`5re& ' AҲ`2D !-mt¤1 dZS\);AA&\ܞ- Y^`-8 vc`d*o!l.wU7, P +?AsסυRC$UohݪUZͪiƫ\}IQ"=ϊn~s 0%o31dN0N!SÛN ~U@Hq B@"C)r m5`U%NYA'e2lTwӎ2Hv2V?Q խ"t-|VbG>1% Hː{qxYܩ.=|ͯ3@q<>y.^FLz^7Kب+*l:UH=bpQb4ؙSm&/}f챖VfvlS!00|@9'edb0ZI&vԎ 7גpӭ?Rp7}H amovDͥgI!^!Sئc~gݭv-vhZ~֋5YZDi2uQ:I? qbn.{ 2ee䧇v +`\3B/Ť|R+o5a:(:2< 4۸A^,qiU¸F3];*R)Q\+j}jj‚ˌ@,jMo<RעB8k?)m)77UK=־e/U;|n olm\ٿ|P0iTO3&*6wƾBMETnpAaFyDy N34jf[vRVhfǓl"0cNR;Rj`ts< 6[ǝ6+ss۬£~}1\BJy>YG{ͻ9iEÿa6) _9n}^[ msST28~P0p5KtO~ȥIuEi0p/-|q= ]F%4?g|aYDР Lm!`ԫ,Gu%Q X#o +KS; ɿ T +endstream endobj 153 0 obj <>stream +Md-z ۶]O4JwWѺ[&怚Y>b_#\HSMڪAM&M1iAԤ쉯(B= i-V]AzkAJS&TE66 +QG^8`y$ d[0+y !93j k0BzTy\۬ RKFT,P~CEޏ\quיY8Yu@̋"j?X59w̛6X>*sU=t&t_g5Pj_pxhRfP\J +EZqþ/8 -%spyl8/;LEY$vN|O/jRq*-3Aϑ(*-4Dg-(A-aj!a~z5q8]B}5t.h7};pkZ#c2C4 v1L;"&F \5q6i_lߨ7ҞYm J4Ej2[iϮ}r_'cEk'O 89ms>ng5ԘYF)v`%-Rn᳤ ^6Ay@,E4ǥXnF XowH;2YޭBg8I5{DTKh(v$ONZ#q[U,eǀ5~=B1ݥn7^87ʅ;:}B[@I_&nj|M@-z>#+4^lj*š# !UPzcA.1`'.W oA ^7"7*djCg{`[-=Gd…u*܄=7`i(ƥێ8;;mmHuLۡϘ-C{ZTTȱ#Zkiuե)|ţa3b89g^)}ѬVn] 餞NVj#HCaXMԜ԰6[3rJ|mUjΣnU>"bOw 5KooeGU涙62d2Sf9,:J6[BSX2"LuצKu7Bz4=I5#ۂF[PUrBe <֪EMo頵ku ޒuiƊR@Wn| [MAyhՖ 2wm0aavyz?|3}LeMaY8yu"5~\ +k?roנn_KE7@K F)V+jIjH +1rxsN ^fx!Sj; @9KA0Z9EΰjY[ƫĝy8ZxW/ .5 +>gM%{t\{-Kc"tR?I( c6g}RDEnom$u !9i|HhBm#N!/-1}Nש .Aq;ӱELC%lNu Q\aRۙq_ +LTFXSKZ(yl;O:4 C@aa2H^PJNEpe-ޔ$kLܨy\Bȁ<jM6`&"9uYKFW0 lٝT'QFt> H-CVuu>m!n*֧szB-iXG|=#!6GvJ!^ݟ=@s6@"Ujϱ4;:24NFj,PilQԡ.⮀A^AkGd 5U詗8.TB-";;#%">ZV2 +eV cHo|h}+|)p(h}ΣX{.*jA.]-DksvV3ZGU7ٰր#I{}ew&5Ў1>fzu86xlevP&2 {iH[&ZmYb:pI-|n\=JJF3Wfn3p 6Ht}D$_M[F7Y+QHz:H7i~pKIFڌ Ҫ=.fcǕGҘj?ʼn dQYtpQ4/dJ|GR_;wֹΖ<ݫ82wo_$SϡhPT6=h?ji4$/OAeҮN0 WKK 6|pV#xyfD(zvFi8fXZ(酲{"PSJMGAnQjɕYi;q6v +ԤF"M0UK5s̄{v=n*I.^)Si0DږS%z{hׯ#zRA +]89;Haݪ:@-n!3|D6…Z-Ƈ*S[̙ZFdRLǻ^5RQKdER?f\?'`+@K2-ղ3u34I=a^B^=SnRNcnsgd^nD(roψP~{8+^YsW^at@j'&X5WDɍ;JBWr#5:D09 +Ev{JB|t=@:;[z@ l U%X#wQ ,`u3y"ͫ5⸎<%'yK_%t[X3nO$*MA/d&h\|) O_P4>) \cPqnDVZ.zF'_i V&GʃJE{%r7R(LOO:s4ƒP61!މz;2aRΏ4xIJzPN:ySKRK-OoiF[u@8@ꝱ=HGE+\5Vuׯ N4VRQFQxqZl HuF5MYZov֩JxJ1з"NeEρ)DT>t6p }DSG_T(t%JUMi65T sg"^+*hխx!%xbH,bVڤY< +%\s5-_YPq$gtA\ݧ)(/;`(z;5yם|&TgMBqMFڶ6gS;u + "z$!nqTRQE|K=QBUofd* HUO + +WV$THǰ{u \rn>ё^ +Xc1'zH' 1uf=:z't"uAC)u]gN:&&Qe(u|uIfp^sj@;a4nBDk#F0o(xZ&^$=lK80W3Eڂ|@ReJ- p}ZOFVVEq/H`aDZsW(u2%4/ +!*zWt)0xQWj<etV)PPze& +"hɩ)qcY}4F<̡6&g(N PS9ȝ>j:g6jC QWގU6DuE͖L:0D`;pEѐ7 }d;uQ*UwMתS]*a)oc +gn7FO] !g0H:u8vq-Kg[s\; f5j>*gǴt2D8'CdղLn?кl,a@EH?dFA N7 {s3蒩TmU 1'i%p_C?|})Bmb0mVˬY xLƲQ!PnNAi+&42U'V}:YOsC"]=۫ Z?6NŲˢ,whٲӨq8WZ(*\#sJ)\“3W oofCA,QU¦jٶtW E41J4l1Ҋ](f ՎރkgڙqMrn3-8NS !bHruz٧q`eQ FIW=\)=iA])oɍ+;OUe7X=8܃~^} 54 %;\S K}y +$4CF7_X02gf= ݞtZ iI#Yc/[&JG({*(ԚgsՃ$ZEf6S\9O{&>֍6G 'Bʶٔ0|fDn[R<[-{yQ*xuHYǃJM< q3R9_۶|1֬:N-a#@(FG^Rd +-(2p^}< o]% F|S1g?Z-*L7.lE nOv=QrL~RSEͼkMU-պލ:H M؞-^ †>u+L0? G@ Bws\uG}O11CtJJ4 >Ue*o:m52-YԲ-sehCJ#DEbRK0^JQOY$*,\ =*s/_#Huڪքɐ6&U#1hsPryP(ֱĶhIYfkheW+<%0x@,7>?YI_d^߻!MD,N[SB(l޲L}9Z6륭J`\[@1l%Br;@W)8-B-^i~})mSw̪\SDOGMiFn <1+,UC`K5LJMUQE6\YK'zf pGglO~ |׿wx뇿_7?l)~}v u 1T\\ڽd}n_mjo~wO7=5/>7ۿwx^|߾;pտW}څwߺg/iw}x?ٵakޭ7?Cs\\m=LJJGR9MkC~caW4ݐo<߮S^6З0E?raPķ>`]MT(Mwn~޴g?*gХpoU#g:kյЯ g엞| +Cb;^Pzʮ,f8`8 },$W[zFg]QoP +nX,TVd&\90IJq`>ۅ&%]>|eGDP5>–BGZdBK \o%:gV5G+Z?|nhB;wT-N\e(8 +%וf~8 @g?wPM~,0E#)(hlJX sj{#-曅oO:FRL*DJ&ƛvq: Ħ$|CS˯@7R8uaKc K/ +HUɨ_Hd`' wkS-YJHrbL)_fi.&S +9 +|2'YސJfϼmʡ +QuP)I GKaeY9*M*,^z U Tmr]$y5TJP;(d\AJ=(|)J2.ՇtT`^v÷U7<3|4; 猗&x"ڙ Y{B"d>!BR8CXV6뚸U` +u*tqa.SDH%ʼmiiUOƢ_ArǸإ S#h*Y #M-ꭲr?Ɏo>4hf{Ql1 n/FIZ"VV5M-zc_={*"43H"H|_f{[r{#ƚo}Ϫcmxg49jY (Zi,<ɏm*v*X;%+`|4!^QfC ceTP/knNWO*)_cei#asTàvtmTZ.rD!Z8*oIaRXuv(IKu{aС3>Rr]F)1'g[-SV#F\#Ԣnh9YOy:VPWO$OmYvIWȝ4rJ3$qǮǶR>FHR`(Icm[q xҫ n.GS-hNi|m.^h{ƌb0 +C<;frZ&Fi`UuAb'G Dn4غ8z&ǹ;[Jэ*)=xcHi3>&H@H?5%NJmn.U-`ҐCԅ&@n-#$ZbP= M3QzQ + +ט ‘z9S@_Lրf-n`y& +>Y R Lʒ';+ԟu7Z[, SP,9ɚ +"ڶyGU۸k2!F% UuШuu!R_#D#6\LM*3VNn(' i{7|`kDy(Y~dD֕]#;h7jb'' .`F +x%[E(ĘvSUm믠w`GDP[l7U$P)pffKS-JI##k>-|ID-qPTMn;(ȪA:"c7Q܄V$b]Ȕ4I|DM'*b]ED OҎiNcqZS0Z oN0 Ǿ/&QrD>85q$u+r ݡTD%*E*{LfT;Ɯ(ro43zZMO! kq>]E[H#Ɉ)h/㖵j)RkѨl\!L\Π~RnjvZp|gˈkZOel0>! Nȹ7JzhIqϫcGPѠѓhwR\P:2%::,JJTglZk+jҺ$\Hr +FwnXkS #.&EPf#>:* cK_޳di~?:A`tOH 8GIĆߪ<#h{CӡrW$uQňĥP#3cU.";O`!;tSYW"C *tpb9ɜ[Sbm(>yJu$Z$,dd,tJ$LѣBr HY+OL?q|${&/gŘ'tWoPG.b)7xs+#Sѣ+z߉Ʌ@${X IQJ"Of.ByTx/ЅL TB O݋ݨ>/0'F9kuR `'-*c!&CC1U~ԸXڗz%P&Ød5SvDDfLY$U$g9>U +ʟǕ?"sW'JDw?S`/)ȋjNLH.+ *cU)*ICbdw#Jr+ӉL3y#d[0$?qHUmM1PU!Sa_^3L9~b#)VO^(?+=:Ā/+PB8^Bvtl?@ZE8]DuiYZ!UP4iNպ$%&/g3To4 +&@9.eRܨޟ2fJyD=t{ s(CP5K3 go1n9Fe X݋KNJ`!  i0W41Ek'Ëvpe T3|+*MRL$;v7K!fi78R4+(EWaDA$^#9vLO*Փ΋w\4d7"{ ^)Pb u|2=K ~`CxQJ6$EOS9[ gL(⎶Ð7?)))Ώ<NJ% + !Tz + +L4IA<1xf\H00J9fs(9gvZ|{K,d?͌&(JK$A)@ !WҾ."41r `$BdN4| +RML@fSFzTՊGKk^] 7.$nzF(%)P@,r7̅Bra Is5].JX,=dL!נA(߄H0&ܷ(!b +i)dқ[fW(Ǩ,J3҅>.xǨ&U KrhGi]B=yM,RI@QP7w!XaPu^uI$xA+Qe…'\,}E$)G@ JƔ@̜#zm!\ɉPU&AT73юK A:WDdR"xgD &Bp#b*/䎁ņGi" *@S˨bMS)z3H<7 +A@:m*͝rbټφmekSB S f)E$xmd>Zjߥ0[A)Ղ,wi@?iPEl{,sD)R V4Ѿ:XL_NWٺz2LG!gθy +8:/N%J} +Ԍ)}áK8N*JOX^Z%;N@ +n +z2Vix/{^xS8a‘;uXs!h!@ե O9tт)HBCecw$w.4*~g64PXąF= +]ȣǙϤr02z>o9GШЗEfC> l=#(XمFszJ3Mj3 {(!hNܤN׋HSA5[F=FuiS::6*IG9wSV~1TW cTo(TiGYNew2u"T%<QuRc B31bgMָt5*E p =\ksdap-ɋjױI 24.5]&kԸ; ezVk?ch&dSFH6[b%dՕu/r^Ck :e2&$%Lr*g@.H5Wk +ݩD4n5}U$zt.2F +*Q]/AbF뷙5Ebu YM5j"l>ȧ/ uXl@@SU1Q7!ڜO}2"lw.x}Ok)̈́ $Y UdzpL}MVb̼]QRx3fRB2RȬTJ$PdbBPB|Q ܱϽ% Mf 1JCE';ΑJFO ])3dX? +i9"hTg3QT E'ExaKOpK JnF5pPgT 3D(,N󬘪v"27GjƎrf8w@\|'ĺr1 + 'L2]I X=H%&j4E OlRYZ#e2I9q%|bXPc&^A<¼tUՔ-gG]V! ų2THXCϤI錓0,4XbbݨR9#ȩXGZg נH)|K 3MҮ;ܡqcϏB`FH2ɬ:)&BQVRƒ9RW[K]!XU;F AwfEʍYy'Ea + G;~ AT=K+X-XpD#_El=%ua,{]p)2!Z~e(92<@S@Pt$ +V?E |'|c>T;"< 8ħUv=9+uZ' =O0M +xT Id"uYH."!~6y 8 MH `zdSw*fSΩbJ;,DT`X!3?2Zfo_EtF5tK>Tc{٨"޴c-Yjmo.ȯ W^6N(O +;G];X³U5\3QE(9d @ibUbF ұp^X77J/́堙IVN@-VyQfT=PU4PUߐ8f[r]ǒ$b-C<kVlkȡƇZRb=Lۅoy;;=@#vd4|FPFWH0GNbnEhq=mVRUTkdD;9O lWHAU1-͋ +(M̪? #dž,E3ޣ.0C-7<{zMl.o/7K@\ + #%h1軌2Z㘞^t%XSQFMQuw$A(—~1+ͨ }DTBw8QF̫_v1e%%.KK\rxP.qY]Ⲕܥad.q9*wR%.G.qY]Ⲙe%%:$.KK\]Ⲕe1wi>zMr,.q9*w)hhs(kFs,.qY]rT%.KK\]Ⲕe)wQKACe)wQK\r,.q1*w:wbr(.qQ]2 wkgr(.񠰃]⢔E)wQK٧HLrE)wRKACd΋ň%.JK\sE)wR/9PK\rPN JNbT%.JK\]⢔RG. URR^E)wRr,.qY]rT%.KK\]Ⲕe)wQKv0K\rx!09g!o0~$WŤ){%VJp1+ЂW4JP0+| +Q~ZM<Ö[+x%=2^`'XbW R0~+QF\Yz%ZJ+x%#XJ z%TJz%^ /fW84r蕠)+A+!j|h+ax%-1^ oWa0 +J C+{%MyznW"]0(.!@+A[z%qz%M(z%䥼!%M\Jx#M蕰R9Af}S8,5b+^sM +z/ j +dBL9F0SEY|U}U0 MiX03ZU$kI>hu5ZjR_h^11. ,Qq-xjCH)$9QfWʤSW+ea~^r/ a/ԂR5AWʴ Yz?eBSo˾!%Hm_K'Ch,eJ.9I!UH'a@X^fIj3KB(rX8Ū,1ơ2u +5 ՝bs,ɴwwQ4V;+tO/PBqk*ɃEgLb)wZ p}(]q|Hph$L5Y! u!ۛ a7?]:;\\Ϻ݄{t)/sgNLӎK<4p+ ǔiJ2ƞ]ۙb7. 1ˮe٭ʹw;hf"Ҁj,bYQVe UrU[xB(ngWV=p|s19qoӒ݁|GI;O{fhr:0FYG "yyu /ehݩnpdN0E-/ +k2fEQ蠖Un#Κ.z/]Un.$/N֕ IW*Bm4"Ў1v1F*(E鰹GZ>ŇjvLy0c: \ Vc҈.T-F" 6o_Ivr9r:0/"^A0,Z( +/_x\xoFpf`A)>w`֗ZPP y|LL-X*Vkыx,5#Fq"LE#u&(9ʑuzJ'֑O#K +^|0΂-W&=d,nFd$1)1H7yYl] ) @=rU.dJv_]p_r {DZ((DPR@LU,}J˖TU'= +XUGGՃ6Q XU!TGĐAjX ."s˒ (fgKw 5س҅ 3uTT[Jqb5:Y Ï6LٛAX_,A)A8 慾$ f{ظL'R)ZX̖orQK=`BU +No4>\ѥs]ᄀ^HaV) (,6:đql?JpA< 8c-ӄdH^ƝBH^^ /u ,W"ޭG0׎{B5qL`"·r +lHhST"~jv9cϐmL4S"Ҳ7 +^|T9QyK9Fc|V aJ;aEDKX߸(Z43$kcLv@tQ)QzBJf^O<4^ +Djf6Elz6>~l:.{#%:7%jF2Q廊0ZL/-2%\DAv,M؈[݌R"zO+`(^Mt'ԬQy +iiOR'/=] +1 3ֿЖصY5/]94na1HbI MJFW?L-2Ib43ULPc{?Ŧ؏z=Ji$hL%殎qj7IkicWmnl!{ɮ([k~5_\{iE?zЃFNWF"}\15/y,Q!OnLm ,Pu` `@Y`KHU`B)S7 Å +c -!Q{F| 4:b"q;E4i9 J D#1xW,GC-ptRP{F| $4b" A;k +6+Qq>ނ}>&ruT3ٵ Ivz<#GOHmՓ>OKfݓF6"2l" +#IQ/$bɴ 2I:"M&Al{bo<;#BIw Z22/E: ?T[{si^_#y@|ӵq|jH2 r#2sn IR>*=In#ܡv#Z(ވco}\\u05_<P%ĕڱ2PWZ8FgX_2,060*2"b4i.l7a~Zx>6|oۭ~tezgg[BmMW;vifWuC'LMW^_qid&?=v=75_G߶ڧͽ/3UmtZtpTyZfONJrn뽣־n XJo8_?NWy#>v۪>F|Vɋ=?0@ z2WLko~]6OL{Ъh5PGtQ t_@ ]hcT0#Wj}8&}iyf>-+Tk#W*/:IQ*_yxH^Wf$Hi%kz$WjTDT5NnČT U;?{oƝ\`4U?kn>wl>Re@ZIߋ1 Wio!V.4>j|&Tر_6v\\| Gݮ\a9[j>qdF΁nKCi)w(MMs㚫GnCNE5Qi%\tY4^-LNvoVtO;{M @Cw jlTtMEnEXT(J8)_r,L0F40+u*_=T\ʻQ_6<ܭ?)o0QeSѠ~d K^IZc5ɾ?7~Sr3y'j]WkupVM[~d_nRnq^ +i(LLG,|1hl6 +8Q[tFQQymOukf@}yr,f)NG l`Nx]DAS))%`Tce5Ճ@|5 SW / D~כ<Z \, bej5_#Vk_g8Ow⵱obd.)wR*Ip +j5G;T:9#|1ʘZ=3賈-7;fFPx $i\LsD%= ivޙ ɝ̒=Y$ќ0I2Iљ0_Nno7&'1 9VO+3&}K򝱱eYᕘx!a<=N㿚=N*9EY]I?]!( sr'qqrn0 B$N~`X3zA8kQ(8acX˯AudA +ч&qmn:anw;OYTq>FwYYۭ~wگ.4mΦ+hlO[ivi< +m S DSU;v]GN16;O߈ OFDw>҂=)ps6ʔ5t<oOK/&bLeLu]^D7愥e&,zO# JTQ8[= &o V}xtFY:nGs4s\bΰGh+4@!M i:s6WW'bD\@g]9jǘyhqEԨajDy.W"vZ[Ŀ M4dXhh4=Ѵd5ar_jy~.?_N. M`J4I%Y<:AQ,E%:) ];3P43!׾LyݷgNWe?f:qę̄~38O3PmFEr霞,w{ bN5}Z`nn:5 Z}{zi{Vg(EQf9每ک +ݓ5a}<7i +tЛ|䯓>xv34;UQ?5\Y;G r?83)B><.O"Id/aL;GF +K_uCu]w{sp~ V|6 yi7Jj[Hi5>-uz~u_^3KHR6gi,#`t=$Be,grmۍ+M-Sjx~\)[{ aH'D,M#P.$f5*Hy>3Չ8$zILgz_xə{fgVV6astZO +oȽǁ\i0`/|:iپdw ͑XdFoXQ]?vV= DЧgVvpnNkM8[vs8l*lOB)gJ" Re%iK$D H3nF!li= lڟWGa>@`D qqPQs&4 ĩ90,w8췜` +H#l M !~XxSOKA5TgHY1]so$^]y )}D$_gK-UO[V1!rh$cV` 6*@2EbeN[o Zˋ%ޔjӦG^=@b„rS#'ʺieLdqvx-,i9jFei@7ts +N`8JLDl/}<oQ |Y S5AqXk*/h^lŃ þI:s*s:xIxr>:LxI)0GN*"q +.Ÿd`&dB& gֱr!!e $ͳDjB(L# METp[B@*<ƴC!?EcHq yƸ}4 sc`]F2$54ҡB72˳z(8W ?/P|$3ᑞJdB8@` NsCJB1QX%LKx[K*@" >|>%mF|@Ϣ2_et-=TJF-$,qpjSc 0R\͸|$xcx%#r);Rwf1"vEAe "+1NzX9/'B4K0 Krl1 UWp[,*H"R;ehdIMDF8Q<&4bTSrDtz"ŀ(Z˄H8.(hNzj$ w R9Cme@uGDx$IH\k籒WN8@\CEl9B#3\b u Tuh: @jix&x\)XԔ@B)b& `)0.i``.Ok'q +T +V!S +ĹӒH Q#> ;7" τ2}B!iL8R$1PAJh2@$XBj84{{B3$7`!@`~Ah!2 +X 4+|Gv*f }e0NA 5i pqJI~$󤣙HcNnnUg #AU%se#KpLJ Z`,5-7RKO6WN#сS4&7%é1p ▕x(GG~igGۚZѬ <7Th2V}uWvCղuAm0nJNvB7P>lڨvw^G*=i ?1 O 6 Llwj%Wy# { +]Q$@eqR;$}|kS૙ +?@$H%sP%$ErOJDaΠ f:0&7h.&NOpt-sPRA+Z5XiJa'֔:6E6OL +lXs jdd@+P F!rgHR1J0$h4hP\SC(ټb y4C΂ɰqa>I0tvHPyx:(bD`r^1wPMY +D &Goے{ ;At"Cm1VaDTټb@ro$PqAchD:$WÍ +> X4̧C> +#ڧ 3hTK€K6N+t )#dIep2AМ$#fţ*ḥ0dBԐ4NiUX9800\a?[lGp1{Ⱍ%=e)HT0o +&1$5p^6*cH`)s>`XM,Ѹ}1R?)Md#("wF9 dBE=\A`/h"ἃMbdJBl!nRα#qв璣CK̤mC&N,=1z1ʉAP@bY:A^2qѦ? ^a]sH<Ȁ_$=ԣ"i)9b&^i̛0`<1$r#fbV\$+ g130+ ܔw,X.9tGg~=I.8FI7@7GWAncv?|\"X'XD˥'sNbTR9jjh$@$Έn0'̀G:u'jGKmhN¢A~#f0*Pr5'NvV3H_`9GAQ1Ĥ$0] Ul6$hK ˒7 -%pc 3AW~gb`*^"/z#ÀՈ , B0E! oX+%S٪L>RYOgL.Fk0 %e1"[*ߑyjSGE;u:Ca]!5^yRTvzxPy?[f,`0^4;ÕƧS˧%0yV8iw\}8N: n~(^Vovt+S3|ܝ,~E0Kvz6=Z,]Sҝ#vM=Xhl\h$G;kzB'"{Log A{`)P`4Կi} 8_f֝GXJ+2vGMt<\hMY\uF8wSaZnXϓy&2oZՑ)1~+عb>{vzCC6~ -?F ^^㟡s(G9?<'s=*9fuA}-3VPN{ɰi+[&D畧Qe>6pVl{>ՌFsxZ?lVӞ@Qk7 m7v/[0OM8،jZ>z*۶znQ4Θ<+dn̕ )^>0i:X>upL. Smky zݡOdB5o_hQoEI}pTuR=v-Zg^̽:?+  j +u$e}is;1n ׹G,aJpta D&1C~ǝqxak{SfA5+?FkXk[CC,lxr[}>dH^yFU#{vw7Xv] [ 뺡)&ȓvZ nu4C8:⫲6KKނ1{Mb|o>lf5R!Ǎbt/a,cz^kw!YZ7,vn{3]U؊ٳ!X |cD,h9l58wMƝ3a +O֭82?lӅZm'|iHߤG]# gcq{ Wkf|pmxٸ#Gbg5~|~i10N (XGw<mt+T.1:wnF Suj]pxa0_4b]:[zlt${0lߚ8EĐwtMuꁄE?ڹ&)i i~,wzc 8) +GNsyAL㶏Fgb(O(iw; 4& e>e{ؽ®02'EO}!Si0RPȱhg|7!f.O !k ~B_g˞ +?oNCg+|ϧ}E:tp,VYg} Fo4FJN1JCmQ| rY3AZ=ڞWQwΡar߅n Ro(|SFK%NjcʼnO;iv瑺!]ݛk O(mKo;<9Cu{p0F'Jوݟ@\ Κ~1خ;wl7 pLOA!+;T^{{g^tF)M]pTA̙PfoQ &ϟ`g4ALu<=gMؿ./g 7f=3;:ǀW {58/ushj{ZE8C}Ņ9Uнza(i&M, Ϟq>a}5opP=Z>5ٶ\gbtsL:kákǦj8 }؆qXd,>2nƒo'iYz=y"*!V ?Kr?|i ̠띎 9,s6 +xq30K-WyTm3G2߱VF5!Q5L=F7D_}iߏJkZd6Ƈ%'ABfR#y+4Lw۴ј#u.Gipwm[ "wPyXƴB)lm96Ap{fy@k\xlԱ @|iuN6b~gWYև俟y~?G@nHwm/UӲ.3<0mc>k;}h?hb3Hǭhor9h&K!Dh &_ʮ=Xήcz/C縒BS5s6yC8f3k,nhyfD󢯲šKaZAxy{_>onՖOv<^2;ukU\O^vtw~?fV6,ZwZ7jngޟV7vn~L/}|0ݗ['3]HOk f_y^٘_s +Mj u NMXܵãAzwv5}_aQeՇs{mɏOa 0JmRS7Ui|[k[k+-3^vKuȴm$3QW>n׾ 've{:dv[>k7w탣[هdfH镃[oH՗#<-{ʞ8zU}qcY}ξ9øbxZ[|Ȧz}`%k7/L./OHnFPzk6eE5э{z;AlwDÜox|XQsQ/0 FiMvLFa"줋n,j@j5x?n.B?>6iK=$(ꐋÄ5zu3 +;W|Tuw vWE4D>8tyVsm5LH7c x{e_24(|2 FUcx%VqV\8|}NZ؟}unܖ[Ї]QGFL ρO47[}._yfw}w#m^Bi}:4?ђp!jއ:'[]/?jo]=b-jɌ0wW^.>~ZZ?zS6Oǐí掯̼"s⡩M?P:{'{,T|tvɓ5IOvgesic !γiqZׅP}[ݟ]%|3-Ympy{SHz|;h}Ywf+y{{ԶR|6]xC +tyG X.@rŨPpqʰ,΂Gz^8j5p\WA_yRKn{Knמ0$U9z#P*D'+_Һ<Σe{c =SEn&lIr۞vrlƙ67Wh9{}ivwu/ggacl[<fïl&_zq%&Xo-rf!y3`l{Pv]q4i#ܪǁ%W^ҵn_[[7LwY|kiO9yzFh?k4woFVћo?l6,a,e-G/ĝww?^盽ڣ8ElJ>VOvVUYkKݞ^4耸^[4}/-},z>sN a%Wǣ۟5}Ԟ䠷cToH$y'9v~ʳ7<`-v[VBwT~].tyo+ 1'mjreW!~5>yj/=yXi䳆9 ZY~tM am;7UjmtHaԘ^dV?}xekaG'o2uA{ o[fCZoz j.ƫՏ{@c`zu&z_Ss`2kK^\Y?iɗooVwgx!FW`n6j xΨg7}vήϮ<"qR/oeW\91=Xq|x%nQXsn]=\}XK~ݧ_n= +lumۣͣ30wjvlfcyvx:}ˀMJVݑk ov_,)ҵȖGJy~lG;PnN/}FU4~)~2b>I{k_-7SF~ve`swu(BA ygZWs)rjl 9Y@iktoݣۈdEwӇi=XH$E%quuۤO~Z9x>@!kkkKۏc|:Iŕ7׮.y<\zO1*Mutѵ*/ea#7_}cw+:@s/7^zOo7xcdRt*k/㣕o4Av`6x{Wѐ8q6 ŷ3ٿ +_5xi~(v?5\fC ϭM={^ 6.^T毢 SYǍFŇY`ѻU4.->?Zj̭_Ԁ?mmI-ýz;Px#ZhսUd0[T&5m)osr%G?sglW"7Aw7m'w^؃4״ĨM}?rڇ e-әN,GՋwWhIOcuh]"f3CwN^^q{0*Dq+9. ֫(3Umt5}/0tU b֯wܩ|zzfzޚs +tۯQC4?W=v*FoﻶّpZq"C 6 `6`™37ُNFR}73kӍJ*JT "4C0:F(?ºBv~zhӟ7Zv6."4ьBm ع;h<8̞R(i>&׼Z7Ini6g_Pޕw fy3B9:P0<槽'Ls0kX=">QaT-mh)٭TI4Wda {MN!8N>2$EӲZ'E{7`fR st=7ԃw] ˍ;syъ\f IR d ge)p޸/k[iqck)7q͛`MDo8KA2RO<Q>=OD=l._{ODU(̗Pr8݊P<6T+UIm"`mayjgOlRN#?>@5:YW^y<L,۝TqBOE"՗*=z"S=v?>7d_oA +vR<^F;.Tw_QL +sB5w0hT{B%zG +r7!2yɏ>=&SmqLuz"[`uwFR?Tϳ*J//G5*;AB))<BdTjhpИJuvppSvZBBQtEh}*?Yv]j_Y#'뭚^i -~i{@ff:fTeޣO5DQbp6oeݐjxUCBX Qu7P=!R NYӅYfRcMֽ=VwuQUȨLޝ _F;unU[/4iZ=EPCS0j xR65e# 磤n[U-D}7 9HԧL~D}r_jZ>dFwR靖}=]>QIlqA>-CϤ][)OcUkN{,O!D}>|sh|F+cA;S\m-?_(* ib˨:لwewxSܛwP n2'sR<8 +a0'z<a+#r{Hzv|? E2}PT5i]*: +Q9L5yPd `[T9Jo4别cT[pϠ:Uax6NJ֍C +TـBixUzC=rG+ t9sL33o?٩wD1yѲSToҋȦߨTXI&gK? ct@2S-+M +0npk`rh:ݺB {Wա8녳tۡBɼ(Uc >J󻡎2_c}`䓻9cpJP E{R) *|̗ {HhSfAϭo`4 +oJN0\"̘aii Nˠb鱴e[%ԝdMe`<.$W [Fnrx)<6_#I=Woҭ̣z> =cgg3ֆ4= +Rqk ƶcJZ}q40m2ͬݜ3mjJHVN,]Y,glTUt`u{otf}dw{3wvV"AL=dwGӘ @ +TeS'{}`Dvdu@=Qr~ P*y?:8<*kTS&y? +l+LPJb(!CXD+}m6uD'G=YQ+n[7k& +t}eCsc}Zn[IyV&IuTWv>'=\ ܗ#j6?I!p\;0V>2Q[n+[ sdm5Kkn85*pl@3gBۆ̇MP"JC-Ek+Z65ı"I LFg*p:XA-M)L׭l?))Ǔ|[nQC]lxsvSvˑ}n-vӒ,Ơ`k̀-h70snζM8Zꁠq'uV#px9T-V;ǡ\~ ojr\ c°;7[GN˛PA8h߱qĈ,bcă:7p]w+!, 8AKpYLWLlcc\8tq8gNTp&p>6ł.:|.3tq}8V|&O6б|Jc p>6OC8)Dv780 ECsu.W϶ܵ0yeg4Tj> ~,-cD +VcV6ܙBKe\xOH!5veĊ={蓋ib ܆vsvЍcNRLȆt'`#ńL5 (vܽ YGI籅9/!;4kjc~0yb)Eh^OKV MȨ_2d=9}yg2Wsb m_(0Nu>_(9xTo[3Kkpf7<fk9.^X`-fc my|S#͞C)ɼ *f'ύ)L09w7 0Phq4L4;Ď3W1tawkN Tg殸I%c@z[mIҋye*1,|B-.H\wH/I/ȂX=;De-eըkXf,)N6Kb+7H0%9&Y-l;VEm~ܬr潱~l .ig{oO:Y '@h?>t佁.UJЀ2q\Vں {Ã,tb'^"aH gH'i.Gi}BFtמv<͚WidA=i}Q`lwFZCHUL[ߦ M7:m"ДlMZ  +]̳TpS̳I2^ҶCUp:2I2< # +9# Vڏ6GiTvyZǵ9@Qf<-.u[-okh +zH G򚦁)]lmE! +gLύɼnG[2R=kϟu2Hi \nst[[)biؙrBۚ6gJ>V:F ,##.jhemkR&!wlpsC\uyAcwCd$Z]@>ѷ${ ߖ@d!nms,le+ YؐEm0{U f*U3~_=WJ(Q0Na:0שZawgC/h)+ef E ~񽽿{dY`IIz~hT.v6jBX>vW[>{#n P^>5ʹ7LTܟ-a9{Wx%tu8\Rkz%Z,^3><ؕ;Qy=Rm=<KH{,rgb9LOFm7K6ێugWhcJc +/msMed'VN}6>)g}6N}C [UT/%r6}$1bk[1S\.3qdBnGP +Q}ʚ>jw>be>;6/k>,-`isRëdlGBE6[72[P}Dfg˴H>LP};m>Mj9IoGB}`z&cqXYgEΞT3k_GCu3;5|Z}g浚[gorl +09Xxx,d˳6m^+.J(gW'0tQjVS(aTlGln92MExόv4sPbgms%f +6,z9lb97)2J)8;!+GqBZQ[ϵz9Z$6OZ"QΝJlmZ8f .O-۷+a6-;} [#=3FIj;qhJBT}X!MX˭V%W_Le$ +HMq&3"sH +j7e"H]s) +ll7F$x{g$r_ņofTn67?l c?V%vܓYCXuv +pYPx M箬Z{j֢[a:hh( UrA K9Km }z#A(r;GLJMMݹq3DN<5FRuRښm?lYZN{4E0~ v}st8S 7/5ģD2PCL]${NG9Tg }OR-zL{+1 gA|Hɼ,KD {qͧ{L{y'ʓlfWϞ%֝2&,Crl1l4vsQ1`⮁9Е.,djMg{0;F(ls\#[w6S ?UEp2 2A&;xyY|쾸7<-nk >Ua<<ݢ!0sV?'7Uy2K;ddf״ V b(M=OU42jeE$c`btdܓ84*,1rO[= +TB~|E +(E 2VteV7,bD2M"Ze'g"\lh +t@z('u'JH=Lqw>LX#J]-g>2Än*8Y6&[>N`0 ߩh_Kaխ] +~x-< ^'UrYCOOv4nѯqn&40;+y8go[j!-4@5-ܞۗ&0 :!nD-n]ʁ{d,cik # ޮà$jVﻳl8Z32˯lsCyD*K-DzByHήa'SGZXI { +]a,Vh~NB^_-VbKuM9-Vhb&  +M^Bv+ΰQwnªbipLXЉ4#>ICví(W[]P396.xR6im4~.ڡ Iõ,YuC~) U-x -sょBuZv{`-r-ls=|RRpye3S,r*- !r9,&'5泙4tmx"QByZXݑiT}?ϩyyq[@^FpKU/nbc"%p=8*FWSpnܵrոZW XydNZwҘ@]~JTXgVBd ݅#G$z$1&J:Ϟ| ?8/ˑrI:OvBKo&|z?EA<*|""xkgBF{VCD{P qڧƘ PXiw\+/7`wl]+V ))_zZ +SZ!]x%O JColZg3zT}{xۑ 6䋧4 +ۃR0{9=q*F7DxTh/bE`M +X8:ųE.&,2? Amwy6k2 2J^ZQ_1~*dߜ;py^[)Cp?FsXLʢ4fФDuXDϗo>~5 +j$JZ٣2mh$~ק-:(Lm2"pkPO. +T'=G.Zgԇbtt@{IŠ>OGwPT9=a䳀$*E>{aƯڬ: wAE$qW-rmB_3QGrA*B@3A[ SN*uTj+_qY"l@4ZzrUݵ0TI–ƭ{c9|5m|$tL18/Tۏ@BwŷyQ|;^5 +u1H2M uǤrܐ|#+WA'uCj(JFE??:ȷaE +X*q<"x?-F)6mupwtˈbPu*&t /6WX*m Tɡ~ j~ +EB Ai,{0uۤfzf$j ,hU7h CRI㰌>(Ru(&:7y_=]CR}~e@5B*r?I^#ɉˑz"q@ENj=c|x}iAZxhLp +qAR>;&/ &2㏘ĀD~]ׂƄI_3w >tm0?Lh;Mt^>؆@gJH$B tBɁ6H^ZhnlhiU^GLP ù@X'52j ^i1;P~274t&6\Plǽݍ7΄Y5.ikh;ɱF;g>-@:C +7)S +GcΧgwbdoi/˦98ۙmF:]R'hޞ]'рsyk٤}bu?vؤ)t&ZN(|3/Tskq/vJ'n<U Û),d}GMyR/B#.GCɍZ n!E&/ppFdD; +_p 8MIƑC, 4G=#h%ېx r}'2t&C?ƞV<Ҿ6r9PfCHZ&՟yz|ҎmatLoe&]tj7M,~5U9\TST S|Q:+޿g1M^#W >+J59ozӑ`0Et oKD"ޱO^%2[-GN2Wbm_Rësn6>mxpxp|N2PJŃ|:F~ %lȑM*nv0~z7_J!|FT2F' 'iRz^xrS<>YVˇr2uuYB@s.?>R +&2'b5`\,G$Ps5o$&z:Kj`FJDb#L \-z5E=E'Tdri(z*]JwGX'^&I%q\HPHGɍ0nJ]%B%N|&xc]y< *Ibܝ#gAYɜOCgȎa(T+Mvwu$V>53xL]̩FJ_*]l2 YNjhZ=H]YۮPjȉ/"UTo~vxۣ;e|ǂX=7V|AemV}8&%5.r:%O`=i`#+`é AI>ϟR~m,[!<CńHS,Z\H+WY_R@r-&h (l@kfަIa0MD[=( +8XPL{C4BcKM0bB_k85ͱAKģ0#60`y7כ־; /1zlJوE*\g}JK*XƁrsU i!^|Tpu#@?J`݌|a뮡QeآSmԴ5PӝI[CdK02BuxZLԧfn¥))Qo/,-)$A}z`w7JjOݻ~W>A=L3ko#,r50:jAQ@9 |>|al~$Bx2+JOgŇ>/dc1EC_{x!ZhdyPUfE;0}W0i‹Ծg1B YxJH^L:-6jOL!t:[lnY*c|4#'5C@ºWOTu<.PJ#)OaLF?JؒAanipiA\GLeO5j&S0WүFFNHrXGI!ADn?kts'bkb2NOwg;Nܡ ,6451nJX炙%} YR1HTcߊo3D>=:.4ߓO(jCMHY Hlѣ}z1sj@Lҋ[xh(.Gdha."xĊxzi`XVor'@ m({w*W Io6NJw(sy~~Аm*e +j*P'M'bM?Jތ:iWӬNf,NշzP4Hc=`-Tg@UPWc3 k ͒fbW #_EXɼ +tZvE"AK! 8EKe8]aǼ4RLKB Fq:PNuiaJ*ibMIzj_# +vVS>?Eb[;* X<2 yMC}ѼX=-ɇr$ +SuXփ3r>9=|5 (P'/9wOmf.nZm+JyIKI]?AI*ϕMS%  +7%#oBD0[:%ȅT|0W:);iIhmJ/1#O웇̾dݒv/z{~@_ G_!d&,й%ySٔsZJr"bQ&E}sPdӾӾ"_】2Ԏ𜏵h3CR"f{OÊNI DZBZ4#wA,Nʒ%Ne(SC4b0vgdEM|8If>٤T&`h0,JŸ&UYR?Iho0BIR^ gRx @ZGr/syS & }]uZdtwxtiK@8 M"j`["aj%S_-{P{]ϦVfֈ1I[SacI|z74aIw@VJ4I[K" 7h4mToYiQvx [1{Fvv…_ S 6x!qH5TY#NhN7Z#Փ~e#F56/m L#aM'"yPoFb;bݗG'HEcFhDx(C9(gr^8+'`\ IGo#Υ_ޠo,Tƕ8C1uq~J:tB*v#&o °=?hyz>N6%4y]~\.ߙPZ~rOU +O|xOv;X蓂 +|?!OIwɕ4գgdgz>SfN%P h9{SK: IwR +C(T)a[5cRW#۪} 8/YYХ* 0J-#+tΕ+rNQ4Sbb/Bb]7-[*кnB2)Al6H^6]L\tڶegm$h&/2uĄ+y9˸Uz.lI^&e.LIIޏ2P(!yPNFA AW]mR>Hû(c{kvZ]3iQνf`O*"sjUQUF x9~=7dob 2zgxmк`DDi?`># <2kBW}в:`w ?lI\],zy^ƯYUk7IFF9 q s,E>ivUWA5fjd`E+BMɲ{f4+iF4[8h'),5QןjrԭU9ϗ[z HÈVTR+8ʉ`r)D?RPTPFU,3ե@"T; H9"o"lE[=5E[Nێ-ˡpCE[|5E[jxuK0S]5U/)$-$i[S]T,m.][Q]TB߶z Ӷz˥I%E[.eALե7n}0\&9lda)'䫁tb5Z]"|+jOUOZxG~u4(Q *6g! C> endobj 5 0 obj <> endobj 29 0 obj <> endobj 28 0 obj <> endobj 53 0 obj <> endobj 52 0 obj <> endobj 87 0 obj <> endobj 88 0 obj <> endobj 102 0 obj [/View/Design] endobj 103 0 obj <>>> endobj 100 0 obj [/View/Design] endobj 101 0 obj <>>> endobj 67 0 obj [/View/Design] endobj 68 0 obj <>>> endobj 65 0 obj [/View/Design] endobj 66 0 obj <>>> endobj 40 0 obj [/View/Design] endobj 41 0 obj <>>> endobj 38 0 obj [/View/Design] endobj 39 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 124 0 obj [122 0 R 123 0 R] endobj 154 0 obj <> endobj xref +0 155 +0000000004 65535 f +0000000016 00000 n +0000000279 00000 n +0000051780 00000 n +0000000007 00000 f +0000282419 00000 n +0000282349 00000 n +0000000009 00000 f +0000051831 00000 n +0000000010 00000 f +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000020 00000 f +0000283731 00000 n +0000283762 00000 n +0000283615 00000 n +0000283646 00000 n +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000030 00000 f +0000282559 00000 n +0000282488 00000 n +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000035 00000 f +0000000036 00000 f +0000000037 00000 f +0000000042 00000 f +0000283499 00000 n +0000283530 00000 n +0000283383 00000 n +0000283414 00000 n +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000046 00000 f +0000000047 00000 f +0000000048 00000 f +0000000049 00000 f +0000000050 00000 f +0000000051 00000 f +0000000054 00000 f +0000282700 00000 n +0000282629 00000 n +0000000055 00000 f +0000000056 00000 f +0000000057 00000 f +0000000058 00000 f +0000000059 00000 f +0000000060 00000 f +0000000061 00000 f +0000000062 00000 f +0000000063 00000 f +0000000064 00000 f +0000000069 00000 f +0000283267 00000 n +0000283298 00000 n +0000283151 00000 n +0000283182 00000 n +0000000070 00000 f +0000000071 00000 f +0000000072 00000 f +0000000073 00000 f +0000000074 00000 f +0000000075 00000 f +0000000076 00000 f +0000000077 00000 f +0000000078 00000 f +0000000079 00000 f +0000000080 00000 f +0000000081 00000 f +0000000082 00000 f +0000000083 00000 f +0000000084 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000282770 00000 n +0000282843 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000283033 00000 n +0000283065 00000 n +0000282915 00000 n +0000282947 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000054727 00000 n +0000054858 00000 n +0000054418 00000 n +0000054344 00000 n +0000283847 00000 n +0000052315 00000 n +0000052619 00000 n +0000086291 00000 n +0000086177 00000 n +0000054230 00000 n +0000053639 00000 n +0000052685 00000 n +0000053074 00000 n +0000053124 00000 n +0000054166 00000 n +0000054609 00000 n +0000054641 00000 n +0000054491 00000 n +0000054523 00000 n +0000071581 00000 n +0000071608 00000 n +0000055017 00000 n +0000055266 00000 n +0000071918 00000 n +0000072088 00000 n +0000072158 00000 n +0000072421 00000 n +0000072512 00000 n +0000086367 00000 n +0000086603 00000 n +0000089024 00000 n +0000098199 00000 n +0000163789 00000 n +0000229379 00000 n +0000283882 00000 n +trailer +<]>> +startxref +284076 +%%EOF diff --git a/ZRCola/res/zrcolagui.cpp b/ZRCola/res/zrcolagui.cpp new file mode 100644 index 0000000..4fbf90b --- /dev/null +++ b/ZRCola/res/zrcolagui.cpp @@ -0,0 +1,1243 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 8 2018) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" + +#include "zrcolachrgrid.h" + +#include "zrcolagui.h" + +// Using the construction of a static object to ensure that the help provider is set +// wx Manages the most recent HelpProvider passed to ::Set, but not the previous ones +// If ::Set gets called more than once, the previous one is returned and should be deleted +class wxFBContextSensitiveHelpSetter +{ +public: +wxFBContextSensitiveHelpSetter() +{ +wxSimpleHelpProvider* help = new wxSimpleHelpProvider(); +wxHelpProvider* old = wxHelpProvider::Set( help ); +if (old != 0){ +delete old; +} +} +}; + +static wxFBContextSensitiveHelpSetter s_wxFBSetTheHelpProvider; +/////////////////////////////////////////////////////////////////////////// + +wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxFrame( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxSize( 150,150 ), wxDefaultSize ); + m_mgr.SetManagedWindow(this); + m_mgr.SetFlags(wxAUI_MGR_DEFAULT); + + m_menubar = new wxMenuBar( 0 ); + m_menuProgram = new wxMenu(); + wxMenuItem* m_menuItemExit; + m_menuItemExit = new wxMenuItem( m_menuProgram, wxID_EXIT, wxString( _("E&xit") ) + wxT('\t') + wxT("Alt+F4"), _("Quit this program"), wxITEM_NORMAL ); + m_menuProgram->Append( m_menuItemExit ); + + m_menubar->Append( m_menuProgram, _("&Program") ); + + m_menuEdit = new wxMenu(); + wxMenuItem* m_menuItemEditCut; + m_menuItemEditCut = new wxMenuItem( m_menuEdit, wxID_CUT, wxString( wxEmptyString ) , wxEmptyString, wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemEditCut->SetBitmaps( wxIcon( wxT("edit_cut.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemEditCut->SetBitmap( wxIcon( wxT("edit_cut.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemEditCut ); + + wxMenuItem* m_menuItemEditCopy; + m_menuItemEditCopy = new wxMenuItem( m_menuEdit, wxID_COPY, wxString( wxEmptyString ) , wxEmptyString, wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemEditCopy->SetBitmaps( wxIcon( wxT("edit_copy.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemEditCopy->SetBitmap( wxIcon( wxT("edit_copy.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemEditCopy ); + + wxMenuItem* m_menuItemEditPaste; + m_menuItemEditPaste = new wxMenuItem( m_menuEdit, wxID_PASTE, wxString( wxEmptyString ) , wxEmptyString, wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemEditPaste->SetBitmaps( wxIcon( wxT("edit_paste.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemEditPaste->SetBitmap( wxIcon( wxT("edit_paste.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemEditPaste ); + + m_menuEdit->AppendSeparator(); + + wxMenuItem* m_menuItemSelectAll; + m_menuItemSelectAll = new wxMenuItem( m_menuEdit, wxID_SELECTALL, wxString( _("Select &All") ) + wxT('\t') + wxT("Ctrl+A"), _("Select all text"), wxITEM_NORMAL ); + m_menuEdit->Append( m_menuItemSelectAll ); + + m_menuEdit->AppendSeparator(); + + wxMenuItem* m_menuItemCharSelect; + m_menuItemCharSelect = new wxMenuItem( m_menuEdit, wxID_CHARACTER_SELECTOR, wxString( _("Find C&haracter...") ) + wxT('\t') + wxT("F8"), _("Display character search to select character to insert into text"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemCharSelect->SetBitmaps( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemCharSelect->SetBitmap( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemCharSelect ); + + m_menuEdit->AppendSeparator(); + + wxMenuItem* m_menuItemSendDestination; + m_menuItemSendDestination = new wxMenuItem( m_menuEdit, wxID_SEND_DESTINATION, wxString( _("&Send Composed") ) + wxT('\t') + wxT("F5"), _("Send composed text to source window"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemSendDestination->SetBitmaps( wxIcon( wxT("send_destination.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemSendDestination->SetBitmap( wxIcon( wxT("send_destination.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemSendDestination ); + + wxMenuItem* m_menuItemCopyDestinationAndReturn; + m_menuItemCopyDestinationAndReturn = new wxMenuItem( m_menuEdit, wxID_COPY_DESTINATION_AND_RETURN, wxString( _("Copy Composed and &Return") ) + wxT('\t') + wxT("Ctrl+F5"), _("Copy composed text to clipboard and return focus to source window"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemCopyDestinationAndReturn->SetBitmaps( wxIcon( wxT("copy_destination_and_return.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemCopyDestinationAndReturn->SetBitmap( wxIcon( wxT("copy_destination_and_return.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemCopyDestinationAndReturn ); + + wxMenuItem* m_menuItemSendSource; + m_menuItemSendSource = new wxMenuItem( m_menuEdit, wxID_SEND_SOURCE, wxString( _("Send &Decomposed") ) + wxT('\t') + wxT("F6"), _("Send decomposed text to source window"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemSendSource->SetBitmaps( wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemSendSource->SetBitmap( wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemSendSource ); + + wxMenuItem* m_menuItemCopySourceAndReturn; + m_menuItemCopySourceAndReturn = new wxMenuItem( m_menuEdit, wxID_COPY_SOURCE_AND_RETURN, wxString( _("Copy Decomposed and Re&turn") ) + wxT('\t') + wxT("Ctrl+F6"), _("Copy decomposed text to clipboard and return focus to source window"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemCopySourceAndReturn->SetBitmaps( wxIcon( wxT("copy_source_and_return.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemCopySourceAndReturn->SetBitmap( wxIcon( wxT("copy_source_and_return.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemCopySourceAndReturn ); + + wxMenuItem* m_menuItemSendAbort; + m_menuItemSendAbort = new wxMenuItem( m_menuEdit, wxID_SEND_ABORT, wxString( _("Abort (De)composition") ) + wxT('\t') + wxT("Esc"), _("Abort composition and return focus to source window"), wxITEM_NORMAL ); + #ifdef __WXMSW__ + m_menuItemSendAbort->SetBitmaps( wxIcon( wxT("send_abort.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) + m_menuItemSendAbort->SetBitmap( wxIcon( wxT("send_abort.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 16, 16 ) ); + #endif + m_menuEdit->Append( m_menuItemSendAbort ); + + m_menuEdit->AppendSeparator(); + + m_menuItemComposition = new wxMenuItem( m_menuEdit, wxID_COMPOSITION_MENU, wxString( _("&ZRCola (De)composition") ) , _("Toggle ZRCola character (De)composition"), wxITEM_CHECK ); + m_menuEdit->Append( m_menuItemComposition ); + + m_menuTranslationSeq = new wxMenu(); + wxMenuItem* m_menuTranslationSeqItem = new wxMenuItem( m_menuEdit, wxID_ANY, _("Tra&nslation"), wxEmptyString, wxITEM_NORMAL, m_menuTranslationSeq ); + m_menuEdit->Append( m_menuTranslationSeqItem ); + + m_menuEdit->AppendSeparator(); + + wxMenuItem* m_menuSettings; + m_menuSettings = new wxMenuItem( m_menuEdit, wxID_SETTINGS, wxString( _("&Settings...") ) , _("Open program configuration dialog"), wxITEM_NORMAL ); + m_menuEdit->Append( m_menuSettings ); + + m_menubar->Append( m_menuEdit, _("&Edit") ); + + m_menuView = new wxMenu(); + wxMenuItem* m_menuItemToolbarEdit; + m_menuItemToolbarEdit = new wxMenuItem( m_menuView, wxID_TOOLBAR_EDIT, wxString( _("&Edit Toolbar") ) , _("Toggle edit toolbar"), wxITEM_CHECK ); + m_menuView->Append( m_menuItemToolbarEdit ); + + wxMenuItem* m_menuItemToolbarCompose; + m_menuItemToolbarCompose = new wxMenuItem( m_menuView, wxID_TOOLBAR_TRANSLATE, wxString( _("&Compose Toolbar") ) , _("Toggle compose toolbar"), wxITEM_CHECK ); + m_menuView->Append( m_menuItemToolbarCompose ); + + m_menuView->AppendSeparator(); + + wxMenuItem* m_menuItemPanelChrGrps; + m_menuItemPanelChrGrps = new wxMenuItem( m_menuView, wxID_PANEL_CHRGRPS, wxString( _("Character Catalo&g") ) , _("Toggle character catalog panel"), wxITEM_CHECK ); + m_menuView->Append( m_menuItemPanelChrGrps ); + + m_menubar->Append( m_menuView, _("&View") ); + + m_menuHelp = new wxMenu(); + wxMenuItem* m_menuHelpInstructions; + m_menuHelpInstructions = new wxMenuItem( m_menuHelp, wxID_HELP_INSTRUCTIONS, wxString( _("&Instructions...") ) + wxT('\t') + wxT("F1"), _("Open a web site with product instructions"), wxITEM_NORMAL ); + m_menuHelp->Append( m_menuHelpInstructions ); + + wxMenuItem* m_menuHelpShortcuts; + m_menuHelpShortcuts = new wxMenuItem( m_menuHelp, wxID_HELP_SHORTCUTS, wxString( _("Keyboard &Shortcuts...") ) , _("Open a list of keyboard shortcuts"), wxITEM_NORMAL ); + m_menuHelp->Append( m_menuHelpShortcuts ); + + m_menuHelp->AppendSeparator(); + + wxMenuItem* m_menuHelpReqChar; + m_menuHelpReqChar = new wxMenuItem( m_menuHelp, wxID_HELP_REQCHAR, wxString( _("&Request a new character...") ) , _("Submit a request to ZRC to add a new character"), wxITEM_NORMAL ); + m_menuHelp->Append( m_menuHelpReqChar ); + + wxMenuItem* m_menuHelpUpdate; + m_menuHelpUpdate = new wxMenuItem( m_menuHelp, wxID_HELP_UPDATE, wxString( _("Check for &Updates...") ) , _("Check online for product update"), wxITEM_NORMAL ); + m_menuHelp->Append( m_menuHelpUpdate ); + + m_menuHelp->AppendSeparator(); + + wxMenuItem* m_menuHelpAbout; + m_menuHelpAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About...") ) , wxEmptyString, wxITEM_NORMAL ); + m_menuHelp->Append( m_menuHelpAbout ); + + m_menubar->Append( m_menuHelp, _("&Help") ); + + this->SetMenuBar( m_menubar ); + + m_toolbarEdit = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT ); + m_toolEditCut = m_toolbarEdit->AddTool( wxID_CUT, _("Cut"), wxIcon( wxT("edit_cut.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Cut"), _("Cut selection"), NULL ); + + m_toolEditCopy = m_toolbarEdit->AddTool( wxID_COPY, _("Copy"), wxIcon( wxT("edit_copy.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Copy"), _("Copy selection"), NULL ); + + m_toolEditPaste = m_toolbarEdit->AddTool( wxID_PASTE, _("Paste"), wxIcon( wxT("edit_paste.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Paste"), _("Paste selection"), NULL ); + + m_toolbarEdit->Realize(); + m_mgr.AddPane( m_toolbarEdit, wxAuiPaneInfo().Name( wxT("toolbarEdit") ).Top().Caption( _("Edit") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() ); + + m_toolbarTranslate = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT ); + m_toolCharSelect = m_toolbarTranslate->AddTool( wxID_CHARACTER_SELECTOR, _("Find Character"), wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Find Character"), _("Display character search to select character to insert into text"), NULL ); + + m_toolSendDestination = m_toolbarTranslate->AddTool( wxID_SEND_DESTINATION, _("Send Composed"), wxIcon( wxT("send_destination.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Composed"), _("Send composed text to source window"), NULL ); + + m_toolSendSource = m_toolbarTranslate->AddTool( wxID_SEND_SOURCE, _("Send Decomposed"), wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL ); + + m_toolComposition = m_toolbarTranslate->AddTool( wxID_COMPOSITION_TOOLBAR, _("ZRCola (De)composition"), wxIcon( wxT("composition.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 24, 24 ), wxNullBitmap, wxITEM_CHECK, _("ZRCola (De)composition"), _("Toggle ZRCola character (De)composition"), NULL ); + + wxArrayString m_toolTranslationSeqChoices; + m_toolTranslationSeq = new wxChoice( m_toolbarTranslate, wxID_ANY, wxDefaultPosition, wxSize( 250,-1 ), m_toolTranslationSeqChoices, 0 ); + m_toolTranslationSeq->SetSelection( 0 ); + m_toolbarTranslate->AddControl( m_toolTranslationSeq ); + m_toolbarTranslate->Realize(); + m_mgr.AddPane( m_toolbarTranslate, wxAuiPaneInfo().Name( wxT("toolbarCompose") ).Top().Caption( _("Compose") ).PinButton( true ).Dock().Resizable().FloatingSize( wxSize( -1,-1 ) ).LeftDockable( false ).RightDockable( false ).Row( 0 ).Layer( 1 ).ToolbarPane() ); + + m_panelChrCat = new wxZRColaCharacterCatalogPanel( this ); + + m_mgr.AddPane( m_panelChrCat, wxAuiPaneInfo() .Name( wxT("panelChrGrp") ).Left() .Caption( _("Character Catalog") ).PinButton( true ).Dock().Resizable().FloatingSize( wxDefaultSize ).Row( 1 ).BestSize( wxSize( 150,200 ) ).MinSize( wxSize( 100,100 ) ).Layer( 1 ) ); + + m_panel = new wxZRColaComposerPanel( this ); + + m_mgr.AddPane( m_panel, wxAuiPaneInfo() .Name( wxT("composerPanel") ).Center() .Caption( _("(De)Composer") ).CaptionVisible( false ).CloseButton( false ).PaneBorder( false ).Dock().Resizable().FloatingSize( wxDefaultSize ).Floatable( false ) ); + + m_statusBar = this->CreateStatusBar( 1, wxSTB_SIZEGRIP, wxID_ANY ); + + m_mgr.Update(); + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( wxZRColaFrameBase::OnClose ) ); + this->Connect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) ); + this->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) ); + m_toolTranslationSeq->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnTranslationSeqChoice ), NULL, this ); +} + +wxZRColaFrameBase::~wxZRColaFrameBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( wxZRColaFrameBase::OnClose ) ); + this->Disconnect( wxEVT_ICONIZE, wxIconizeEventHandler( wxZRColaFrameBase::OnIconize ) ); + this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaFrameBase::OnIdle ) ); + m_toolTranslationSeq->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaFrameBase::OnTranslationSeqChoice ), NULL, this ); + + m_mgr.UnInit(); + +} + +wxZRColaComposerPanelBase::wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) +{ + wxBoxSizer* bSizerMain; + bSizerMain = new wxBoxSizer( wxVERTICAL ); + + m_splitterSource = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE ); + m_splitterSource->SetSashGravity( 1 ); + m_splitterSource->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterSourceOnIdle ), NULL, this ); + m_splitterSource->SetMinimumPaneSize( 5 ); + + m_panelSourceEdit = new wxPanel( m_splitterSource, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerSourceEdit; + bSizerSourceEdit = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* bSizerSourceEdit2; + bSizerSourceEdit2 = new wxStaticBoxSizer( new wxStaticBox( m_panelSourceEdit, wxID_ANY, _("Decomposed Text") ), wxVERTICAL ); + + m_source = new wxTextCtrl( bSizerSourceEdit2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); + m_source->SetFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_source->SetMinSize( wxSize( 100,25 ) ); + + bSizerSourceEdit2->Add( m_source, 1, wxEXPAND, 5 ); + + + bSizerSourceEdit->Add( bSizerSourceEdit2, 1, wxEXPAND, 5 ); + + + m_panelSourceEdit->SetSizer( bSizerSourceEdit ); + m_panelSourceEdit->Layout(); + bSizerSourceEdit->Fit( m_panelSourceEdit ); + m_panelSourceHex = new wxPanel( m_splitterSource, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerSourceHex; + bSizerSourceHex = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* bSizerSourceHex2; + bSizerSourceHex2 = new wxStaticBoxSizer( new wxStaticBox( m_panelSourceHex, wxID_ANY, _("Decomposed Unicode Dump") ), wxVERTICAL ); + + m_sourceHex = new wxTextCtrl( bSizerSourceHex2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); + m_sourceHex->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + + bSizerSourceHex2->Add( m_sourceHex, 1, wxEXPAND, 5 ); + + + bSizerSourceHex->Add( bSizerSourceHex2, 1, wxEXPAND, 5 ); + + + m_panelSourceHex->SetSizer( bSizerSourceHex ); + m_panelSourceHex->Layout(); + bSizerSourceHex->Fit( m_panelSourceHex ); + m_splitterSource->SplitVertically( m_panelSourceEdit, m_panelSourceHex, -5 ); + bSizerMain->Add( m_splitterSource, 50, wxALL|wxEXPAND, 5 ); + + m_splitterDestination = new wxSplitterWindow( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D|wxSP_LIVE_UPDATE ); + m_splitterDestination->SetSashGravity( 1 ); + m_splitterDestination->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterDestinationOnIdle ), NULL, this ); + m_splitterDestination->SetMinimumPaneSize( 5 ); + + m_panelDestinationEdit = new wxPanel( m_splitterDestination, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerDestinationEdit; + bSizerDestinationEdit = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* bSizerDestinationEdit2; + bSizerDestinationEdit2 = new wxStaticBoxSizer( new wxStaticBox( m_panelDestinationEdit, wxID_ANY, _("Composed Text") ), wxVERTICAL ); + + m_destination = new wxTextCtrl( bSizerDestinationEdit2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); + m_destination->SetFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_destination->SetMinSize( wxSize( 100,25 ) ); + + bSizerDestinationEdit2->Add( m_destination, 1, wxEXPAND, 5 ); + + + bSizerDestinationEdit->Add( bSizerDestinationEdit2, 1, wxEXPAND, 5 ); + + + m_panelDestinationEdit->SetSizer( bSizerDestinationEdit ); + m_panelDestinationEdit->Layout(); + bSizerDestinationEdit->Fit( m_panelDestinationEdit ); + m_panelDestinationHex = new wxPanel( m_splitterDestination, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerDestinationHex; + bSizerDestinationHex = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* bSizerDestinationHex2; + bSizerDestinationHex2 = new wxStaticBoxSizer( new wxStaticBox( m_panelDestinationHex, wxID_ANY, _("Composed Unicode Dump") ), wxVERTICAL ); + + m_destinationHex = new wxTextCtrl( bSizerDestinationHex2->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); + m_destinationHex->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + + bSizerDestinationHex2->Add( m_destinationHex, 1, wxEXPAND, 5 ); + + + bSizerDestinationHex->Add( bSizerDestinationHex2, 1, wxEXPAND, 5 ); + + + m_panelDestinationHex->SetSizer( bSizerDestinationHex ); + m_panelDestinationHex->Layout(); + bSizerDestinationHex->Fit( m_panelDestinationHex ); + m_splitterDestination->SplitVertically( m_panelDestinationEdit, m_panelDestinationHex, -5 ); + bSizerMain->Add( m_splitterDestination, 50, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizerMain ); + this->Layout(); + bSizerMain->Fit( this ); + m_timerSave.SetOwner( this, wxID_TIMER_SAVE ); + + // Connect Events + m_source->Connect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnSourcePaint ), NULL, this ); + m_source->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaComposerPanelBase::OnSourceText ), NULL, this ); + m_sourceHex->Connect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnSourceHexPaint ), NULL, this ); + m_destination->Connect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnDestinationPaint ), NULL, this ); + m_destination->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaComposerPanelBase::OnDestinationText ), NULL, this ); + m_destinationHex->Connect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnDestinationHexPaint ), NULL, this ); + this->Connect( wxID_TIMER_SAVE, wxEVT_TIMER, wxTimerEventHandler( wxZRColaComposerPanelBase::OnSaveTimer ) ); +} + +wxZRColaComposerPanelBase::~wxZRColaComposerPanelBase() +{ + // Disconnect Events + m_source->Disconnect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnSourcePaint ), NULL, this ); + m_source->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaComposerPanelBase::OnSourceText ), NULL, this ); + m_sourceHex->Disconnect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnSourceHexPaint ), NULL, this ); + m_destination->Disconnect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnDestinationPaint ), NULL, this ); + m_destination->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaComposerPanelBase::OnDestinationText ), NULL, this ); + m_destinationHex->Disconnect( wxEVT_PAINT, wxPaintEventHandler( wxZRColaComposerPanelBase::OnDestinationHexPaint ), NULL, this ); + this->Disconnect( wxID_TIMER_SAVE, wxEVT_TIMER, wxTimerEventHandler( wxZRColaComposerPanelBase::OnSaveTimer ) ); + +} + +wxZRColaCharacterCatalogPanelBase::wxZRColaCharacterCatalogPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxPanel( parent, id, pos, size, style, name ) +{ + wxBoxSizer* bSizer; + bSizer = new wxBoxSizer( wxVERTICAL ); + + wxArrayString m_choiceChoices; + m_choice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceChoices, 0 ); + m_choice->SetSelection( 0 ); + m_choice->SetToolTip( _("Select category to display") ); + + bSizer->Add( m_choice, 0, wxALL|wxEXPAND, 5 ); + + m_grid = new wxZRColaCharGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + + // Grid + m_grid->CreateGrid( 0, 0 ); + m_grid->EnableEditing( false ); + m_grid->EnableGridLines( false ); + m_grid->EnableDragGridSize( false ); + m_grid->SetMargins( 0, 0 ); + + // Columns + m_grid->EnableDragColMove( false ); + m_grid->EnableDragColSize( false ); + m_grid->SetColLabelSize( 0 ); + m_grid->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_grid->EnableDragRowSize( false ); + m_grid->SetRowLabelSize( 0 ); + m_grid->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_grid->SetDefaultCellBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); + m_grid->SetDefaultCellFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_grid->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_grid->SetMinSize( wxSize( 35,35 ) ); + + bSizer->Add( m_grid, 1, wxALL|wxEXPAND, 5 ); + + m_show_all = new wxCheckBox( this, wxID_ANY, _("Show &All"), wxDefaultPosition, wxDefaultSize, 0 ); + m_show_all->SetToolTip( _("Toggle display of less frequent characters") ); + + bSizer->Add( m_show_all, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizer ); + this->Layout(); + bSizer->Fit( this ); + + // Connect Events + m_choice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnChoice ), NULL, this ); + m_grid->Connect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridClick ), NULL, this ); + m_grid->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridKeyDown ), NULL, this ); + m_show_all->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnShowAll ), NULL, this ); +} + +wxZRColaCharacterCatalogPanelBase::~wxZRColaCharacterCatalogPanelBase() +{ + // Disconnect Events + m_choice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnChoice ), NULL, this ); + m_grid->Disconnect( wxEVT_GRID_CELL_LEFT_CLICK, wxGridEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridClick ), NULL, this ); + m_grid->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharacterCatalogPanelBase::OnGridKeyDown ), NULL, this ); + m_show_all->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( wxZRColaCharacterCatalogPanelBase::OnShowAll ), NULL, this ); + +} + +wxZRColaCharSelectBase::wxZRColaCharSelectBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerColumns; + bSizerColumns = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerLeft; + bSizerLeft = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerBrowse; + sbSizerBrowse = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("&Browse") ), wxVERTICAL ); + + m_search = new wxSearchCtrl( sbSizerBrowse->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + #ifndef __WXMAC__ + m_search->ShowSearchButton( true ); + #endif + m_search->ShowCancelButton( true ); + m_search->SetToolTip( _("Full or partial terms from Unicode character description (in English) to search for") ); + + sbSizerBrowse->Add( m_search, 0, wxALL|wxEXPAND, 5 ); + + m_search_more = new wxHyperlinkCtrl( sbSizerBrowse->GetStaticBox(), wxID_ANY, _("Search Options"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_search_more->SetToolTip( _("Shows/hides additional search options") ); + + sbSizerBrowse->Add( m_search_more, 0, wxALL|wxEXPAND, 5 ); + + m_search_panel = new wxPanel( sbSizerBrowse->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + m_search_panel->Hide(); + + wxBoxSizer* sbSizerSearch; + sbSizerSearch = new wxBoxSizer( wxVERTICAL ); + + wxArrayString m_categoriesChoices; + m_categories = new wxCheckListBox( m_search_panel, wxID_ANY, wxDefaultPosition, wxSize( -1,60 ), m_categoriesChoices, 0 ); + m_categories->SetToolTip( _("List of Unicode character categories to search in") ); + + sbSizerSearch->Add( m_categories, 0, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* bSizerCategoriesCtrl; + bSizerCategoriesCtrl = new wxBoxSizer( wxHORIZONTAL ); + + m_categoriesAll = new wxHyperlinkCtrl( m_search_panel, wxID_ANY, _("All"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_categoriesAll->SetToolTip( _("Select all categories") ); + + bSizerCategoriesCtrl->Add( m_categoriesAll, 0, wxALL, 5 ); + + m_categoriesNone = new wxHyperlinkCtrl( m_search_panel, wxID_ANY, _("None"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_categoriesNone->SetToolTip( _("Clear category selection") ); + + bSizerCategoriesCtrl->Add( m_categoriesNone, 0, wxALL, 5 ); + + m_categoriesInvert = new wxHyperlinkCtrl( m_search_panel, wxID_ANY, _("Invert"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_categoriesInvert->SetToolTip( _("Invert category selection") ); + + bSizerCategoriesCtrl->Add( m_categoriesInvert, 0, wxALL, 5 ); + + + sbSizerSearch->Add( bSizerCategoriesCtrl, 0, wxALIGN_RIGHT, 5 ); + + + m_search_panel->SetSizer( sbSizerSearch ); + m_search_panel->Layout(); + sbSizerSearch->Fit( m_search_panel ); + sbSizerBrowse->Add( m_search_panel, 0, wxEXPAND, 5 ); + + m_gridResults = new wxZRColaCharGrid( sbSizerBrowse->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxBORDER_STATIC ); + + // Grid + m_gridResults->CreateGrid( 0, 0 ); + m_gridResults->EnableEditing( false ); + m_gridResults->EnableGridLines( false ); + m_gridResults->EnableDragGridSize( false ); + m_gridResults->SetMargins( 0, 0 ); + + // Columns + m_gridResults->EnableDragColMove( false ); + m_gridResults->EnableDragColSize( false ); + m_gridResults->SetColLabelSize( 0 ); + m_gridResults->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridResults->EnableDragRowSize( false ); + m_gridResults->SetRowLabelSize( 0 ); + m_gridResults->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridResults->SetDefaultCellFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_gridResults->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_gridResults->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_gridResults->SetToolTip( _("Character search results") ); + m_gridResults->SetMinSize( wxSize( 560,35 ) ); + m_gridResults->SetMaxSize( wxSize( 560,-1 ) ); + + sbSizerBrowse->Add( m_gridResults, 1, wxALL|wxEXPAND, 5 ); + + + bSizerLeft->Add( sbSizerBrowse, 1, wxALL|wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizerRecent; + sbSizerRecent = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Re¢ly Used") ), wxVERTICAL ); + + m_gridRecent = new wxZRColaCharGrid( sbSizerRecent->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,35 ), wxBORDER_STATIC ); + + // Grid + m_gridRecent->CreateGrid( 0, 0 ); + m_gridRecent->EnableEditing( false ); + m_gridRecent->EnableGridLines( false ); + m_gridRecent->EnableDragGridSize( false ); + m_gridRecent->SetMargins( 0, 0 ); + + // Columns + m_gridRecent->EnableDragColMove( false ); + m_gridRecent->EnableDragColSize( false ); + m_gridRecent->SetColLabelSize( 0 ); + m_gridRecent->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridRecent->EnableDragRowSize( false ); + m_gridRecent->SetRowLabelSize( 0 ); + m_gridRecent->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridRecent->SetDefaultCellFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_gridRecent->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_gridRecent->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + m_gridRecent->SetToolTip( _("List of recently inserted characters") ); + + sbSizerRecent->Add( m_gridRecent, 0, wxALL|wxEXPAND, 5 ); + + + bSizerLeft->Add( sbSizerRecent, 0, wxALL|wxEXPAND, 5 ); + + + bSizerColumns->Add( bSizerLeft, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerRight; + bSizerRight = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerPreview; + sbSizerPreview = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Preview") ), wxVERTICAL ); + + wxBoxSizer* bSizerUnicode; + bSizerUnicode = new wxBoxSizer( wxHORIZONTAL ); + + m_labelUnicode = new wxStaticText( sbSizerPreview->GetStaticBox(), wxID_ANY, _("U+"), wxDefaultPosition, wxDefaultSize, 0 ); + m_labelUnicode->Wrap( -1 ); + bSizerUnicode->Add( m_labelUnicode, 0, wxALIGN_CENTER|wxBOTTOM|wxLEFT|wxTOP, 5 ); + + m_unicode = new wxTextCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 50,-1 ), 0 ); + m_unicode->SetToolTip( _("Unicode hexadecimal code") ); + + bSizerUnicode->Add( m_unicode, 0, wxALIGN_CENTER|wxBOTTOM|wxRIGHT|wxTOP, 5 ); + + m_shortcut = new wxTextCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE|wxTE_READONLY ); + m_shortcut->SetToolTip( _("Keyboard shortcut in Composer window") ); + + bSizerUnicode->Add( m_shortcut, 1, wxALL|wxEXPAND, 5 ); + + + sbSizerPreview->Add( bSizerUnicode, 0, wxEXPAND, 5 ); + + m_gridPreview = new wxGrid( sbSizerPreview->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_STATIC ); + + // Grid + m_gridPreview->CreateGrid( 1, 1 ); + m_gridPreview->EnableEditing( false ); + m_gridPreview->EnableGridLines( false ); + m_gridPreview->EnableDragGridSize( false ); + m_gridPreview->SetMargins( 0, 0 ); + + // Columns + m_gridPreview->SetColSize( 0, 200 ); + m_gridPreview->EnableDragColMove( false ); + m_gridPreview->EnableDragColSize( false ); + m_gridPreview->SetColLabelSize( 0 ); + m_gridPreview->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridPreview->SetRowSize( 0, 200 ); + m_gridPreview->EnableDragRowSize( false ); + m_gridPreview->SetRowLabelSize( 0 ); + m_gridPreview->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridPreview->SetDefaultCellFont( wxFont( 96, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_gridPreview->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_gridPreview->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_gridPreview->SetToolTip( _("Character preview") ); + + sbSizerPreview->Add( m_gridPreview, 0, wxALL|wxEXPAND, 5 ); + + m_description = new wxTextCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE|wxTE_MULTILINE|wxTE_READONLY ); + m_description->SetToolTip( _("Unicode character description") ); + + sbSizerPreview->Add( m_description, 1, wxALL|wxEXPAND, 5 ); + + m_tags = new wxTextCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE|wxTE_MULTILINE|wxTE_READONLY ); + m_tags->SetToolTip( _("Character tags") ); + + sbSizerPreview->Add( m_tags, 1, wxALL|wxEXPAND, 5 ); + + m_category = new wxTextCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_CENTRE|wxTE_READONLY ); + m_category->SetToolTip( _("Unicode character category") ); + + sbSizerPreview->Add( m_category, 0, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* bSizerNavigateButtons; + bSizerNavigateButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_navigateBack = new wxHyperlinkCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, _("« Back"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_navigateBack->Enable( false ); + m_navigateBack->SetToolTip( _("To previously viewed character") ); + + bSizerNavigateButtons->Add( m_navigateBack, 0, wxALL, 5 ); + + m_navigateForward = new wxHyperlinkCtrl( sbSizerPreview->GetStaticBox(), wxID_ANY, _("Forward »"), wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + m_navigateForward->Enable( false ); + m_navigateForward->SetToolTip( _("To following viewed character") ); + + bSizerNavigateButtons->Add( m_navigateForward, 0, wxALL, 5 ); + + + sbSizerPreview->Add( bSizerNavigateButtons, 0, wxALIGN_RIGHT, 5 ); + + + bSizerRight->Add( sbSizerPreview, 70, wxALL|wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizerRelated; + sbSizerRelated = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Re&lated") ), wxVERTICAL ); + + m_gridRelated = new wxZRColaCharGrid( sbSizerRelated->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxBORDER_STATIC ); + + // Grid + m_gridRelated->CreateGrid( 0, 0 ); + m_gridRelated->EnableEditing( false ); + m_gridRelated->EnableGridLines( false ); + m_gridRelated->EnableDragGridSize( false ); + m_gridRelated->SetMargins( 0, 0 ); + + // Columns + m_gridRelated->EnableDragColMove( false ); + m_gridRelated->EnableDragColSize( false ); + m_gridRelated->SetColLabelSize( 0 ); + m_gridRelated->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Rows + m_gridRelated->EnableDragRowSize( false ); + m_gridRelated->SetRowLabelSize( 0 ); + m_gridRelated->SetRowLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + + // Label Appearance + + // Cell Defaults + m_gridRelated->SetDefaultCellFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_gridRelated->SetDefaultCellAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE ); + m_gridRelated->SetToolTip( _("List of related characters") ); + + sbSizerRelated->Add( m_gridRelated, 1, wxALL|wxEXPAND, 5 ); + + + bSizerRight->Add( sbSizerRelated, 30, wxALL|wxEXPAND, 5 ); + + + bSizerColumns->Add( bSizerRight, 0, wxEXPAND, 5 ); + + + bSizerContent->Add( bSizerColumns, 1, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( 5, 5, 0, wxALL|wxEXPAND, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel ); + m_sdbSizerButtons->Realize(); + + bSizerContent->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + // Connect Events + this->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaCharSelectBase::OnIdle ) ); + m_search->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaCharSelectBase::OnSearchText ), NULL, this ); + m_search_more->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnSearchMore ), NULL, this ); + m_categories->Connect( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, wxCommandEventHandler( wxZRColaCharSelectBase::OnCategoriesToggle ), NULL, this ); + m_categoriesAll->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesAll ), NULL, this ); + m_categoriesNone->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesNone ), NULL, this ); + m_categoriesInvert->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesInvert ), NULL, this ); + m_gridResults->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( wxZRColaCharSelectBase::OnResultCellDClick ), NULL, this ); + m_gridResults->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnResultSelectCell ), NULL, this ); + m_gridResults->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnResultsKeyDown ), NULL, this ); + m_gridRecent->Connect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( wxZRColaCharSelectBase::OnRecentCellDClick ), NULL, this ); + m_gridRecent->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnRecentSelectCell ), NULL, this ); + m_gridRecent->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnRecentKeyDown ), NULL, this ); + m_unicode->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaCharSelectBase::OnUnicodeText ), NULL, this ); + m_gridPreview->Connect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnPreviewKeyDown ), NULL, this ); + m_navigateBack->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnNavigateBack ), NULL, this ); + m_navigateForward->Connect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnNavigateForward ), NULL, this ); + m_gridRelated->Connect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnRelatedSelectCell ), NULL, this ); + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharSelectBase::OnOKButtonClick ), NULL, this ); +} + +wxZRColaCharSelectBase::~wxZRColaCharSelectBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaCharSelectBase::OnIdle ) ); + m_search->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaCharSelectBase::OnSearchText ), NULL, this ); + m_search_more->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnSearchMore ), NULL, this ); + m_categories->Disconnect( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, wxCommandEventHandler( wxZRColaCharSelectBase::OnCategoriesToggle ), NULL, this ); + m_categoriesAll->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesAll ), NULL, this ); + m_categoriesNone->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesNone ), NULL, this ); + m_categoriesInvert->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnCategoriesInvert ), NULL, this ); + m_gridResults->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( wxZRColaCharSelectBase::OnResultCellDClick ), NULL, this ); + m_gridResults->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnResultSelectCell ), NULL, this ); + m_gridResults->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnResultsKeyDown ), NULL, this ); + m_gridRecent->Disconnect( wxEVT_GRID_CELL_LEFT_DCLICK, wxGridEventHandler( wxZRColaCharSelectBase::OnRecentCellDClick ), NULL, this ); + m_gridRecent->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnRecentSelectCell ), NULL, this ); + m_gridRecent->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnRecentKeyDown ), NULL, this ); + m_unicode->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( wxZRColaCharSelectBase::OnUnicodeText ), NULL, this ); + m_gridPreview->Disconnect( wxEVT_KEY_DOWN, wxKeyEventHandler( wxZRColaCharSelectBase::OnPreviewKeyDown ), NULL, this ); + m_navigateBack->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnNavigateBack ), NULL, this ); + m_navigateForward->Disconnect( wxEVT_COMMAND_HYPERLINK, wxHyperlinkEventHandler( wxZRColaCharSelectBase::OnNavigateForward ), NULL, this ); + m_gridRelated->Disconnect( wxEVT_GRID_SELECT_CELL, wxGridEventHandler( wxZRColaCharSelectBase::OnRelatedSelectCell ), NULL, this ); + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharSelectBase::OnOKButtonClick ), NULL, this ); + +} + +wxZRColaSettingsBase::wxZRColaSettingsBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxSize( -1,-1 ) ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + m_listbook = new wxListbook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLB_DEFAULT ); + m_panelLanguage = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxSize( 500,-1 ), wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerLanguage; + bSizerLanguage = new wxBoxSizer( wxVERTICAL ); + + m_langLabel = new wxStaticText( m_panelLanguage, wxID_ANY, _("Some character native to specific language you are working with should not decompose to primitives.\nFor optimal decomposition you should set the language correctly."), wxDefaultPosition, wxDefaultSize, 0 ); + m_langLabel->Wrap( 490 ); + bSizerLanguage->Add( m_langLabel, 0, wxALL|wxEXPAND, 5 ); + + m_langAuto = new wxRadioButton( m_panelLanguage, wxID_ANY, _("Select language &automatically according to selected keyboard"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); + bSizerLanguage->Add( m_langAuto, 0, wxALL|wxEXPAND, 5 ); + + m_langManual = new wxRadioButton( m_panelLanguage, wxID_ANY, _("&Manually select the language from the list below:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerLanguage->Add( m_langManual, 0, wxALL|wxEXPAND, 5 ); + + m_languages = new wxListBox( m_panelLanguage, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 ); + m_languages->SetMinSize( wxSize( -1,150 ) ); + + bSizerLanguage->Add( m_languages, 1, wxALL|wxEXPAND, 5 ); + + + m_panelLanguage->SetSizer( bSizerLanguage ); + m_panelLanguage->Layout(); + m_listbook->AddPage( m_panelLanguage, _("Text Language"), true ); + m_panelAutoStart = new wxPanel( m_listbook, wxID_ANY, wxDefaultPosition, wxSize( 500,-1 ), wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerAutoStart; + bSizerAutoStart = new wxBoxSizer( wxVERTICAL ); + + m_autoStartLabel = new wxStaticText( m_panelAutoStart, wxID_ANY, _("ZRCola can be launched every time you log in to your computer.\nIt will be available on the system tray and via registered shortcuts Win+F5 and Win+F6."), wxDefaultPosition, wxDefaultSize, 0 ); + m_autoStartLabel->Wrap( 490 ); + bSizerAutoStart->Add( m_autoStartLabel, 0, wxALL|wxEXPAND, 5 ); + + m_autoStart = new wxCheckBox( m_panelAutoStart, wxID_ANY, _("Start ZRCola &automatically on logon"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerAutoStart->Add( m_autoStart, 0, wxALL|wxEXPAND, 5 ); + + + m_panelAutoStart->SetSizer( bSizerAutoStart ); + m_panelAutoStart->Layout(); + m_listbook->AddPage( m_panelAutoStart, _("Startup"), false ); + #ifdef __WXGTK__ // Small icon style not supported in GTK + wxListView* m_listbookListView = m_listbook->GetListView(); + long m_listbookFlags = m_listbookListView->GetWindowStyleFlag(); + if( m_listbookFlags & wxLC_SMALL_ICON ) + { + m_listbookFlags = ( m_listbookFlags & ~wxLC_SMALL_ICON ) | wxLC_ICON; + } + m_listbookListView->SetWindowStyleFlag( m_listbookFlags ); + #endif + + bSizerContent->Add( m_listbook, 1, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( 0, 0, 0, wxALL|wxEXPAND, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtonsApply = new wxButton( this, wxID_APPLY ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsApply ); + m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel ); + m_sdbSizerButtons->Realize(); + + bSizerContent->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaSettingsBase::OnInitDialog ) ); + m_panelLanguage->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnLanguageUpdate ), NULL, this ); + m_sdbSizerButtonsApply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnApplyButtonClick ), NULL, this ); + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnOKButtonClick ), NULL, this ); +} + +wxZRColaSettingsBase::~wxZRColaSettingsBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaSettingsBase::OnInitDialog ) ); + m_panelLanguage->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaSettingsBase::OnLanguageUpdate ), NULL, this ); + m_sdbSizerButtonsApply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnApplyButtonClick ), NULL, this ); + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaSettingsBase::OnOKButtonClick ), NULL, this ); + +} + +wxZRColaAboutBase::wxZRColaAboutBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxSize( -1,-1 ) ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + wxBoxSizer* bSizerColumns; + bSizerColumns = new wxBoxSizer( wxHORIZONTAL ); + + m_bitmapIcon = new wxStaticBitmap( this, wxID_ANY, wxIcon( wxT("00_zrcola.ico"), wxBITMAP_TYPE_ICO_RESOURCE, 32, 32 ), wxDefaultPosition, wxDefaultSize, 0 ); + bSizerColumns->Add( m_bitmapIcon, 0, wxALL, 5 ); + + wxBoxSizer* bSizerText; + bSizerText = new wxBoxSizer( wxVERTICAL ); + + m_staticTextZRCola = new wxStaticText( this, wxID_ANY, _("ZRCola"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextZRCola->Wrap( -1 ); + m_staticTextZRCola->SetFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_staticTextZRCola->SetMaxSize( wxSize( 400,-1 ) ); + + bSizerText->Add( m_staticTextZRCola, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextVersion = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextVersion->Wrap( -1 ); + bSizerText->Add( m_staticTextVersion, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextColophone = new wxStaticText( this, wxID_ANY, _("Program and Website Editor: Janoš Ježovnik\nDevelopment: Amebis, d. o. o., Kamnik\nTranslation into English: Janoš Ježovnik\nTranslation into Russian language: Domen Krvina, Silvo Torkar, Anastasia Plotnikova\nDevelopment and maintenance of the original program (2004–2015): Peter Weiss"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextColophone->Wrap( 400 ); + bSizerText->Add( m_staticTextColophone, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextCopyright = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCopyright->Wrap( -1 ); + bSizerText->Add( m_staticTextCopyright, 0, wxALL|wxEXPAND, 5 ); + + m_hyperlink = new wxHyperlinkCtrl( this, wxID_ANY, _("zrcola.zrc-sazu.si"), wxT("http://zrcola.zrc-sazu.si/"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); + bSizerText->Add( m_hyperlink, 0, wxALL|wxEXPAND, 5 ); + + + bSizerText->Add( 0, 0, 0, wxALL|wxEXPAND, 5 ); + + m_staticTextDeclaration = new wxStaticText( this, wxID_ANY, _("Texts made using ZRCola have to include in a footnote or some other appropriate part of the publication the note below:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextDeclaration->Wrap( 400 ); + bSizerText->Add( m_staticTextDeclaration, 0, wxALL|wxEXPAND, 5 ); + + m_declaration = new wxTextCtrl( this, wxID_ANY, _("This text was written using the ZRCola input system (http://zrcola.zrc-sazu.si), developed at the Science and Research Centre of SAZU in Ljubljana (http://www.zrc-sazu.si) by Peter Weiss."), wxDefaultPosition, wxSize( -1,80 ), wxTE_MULTILINE|wxTE_READONLY ); + m_declaration->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); + + bSizerText->Add( m_declaration, 0, wxALL|wxEXPAND, 5 ); + + + bSizerColumns->Add( bSizerText, 1, wxEXPAND, 5 ); + + + bSizerContent->Add( bSizerColumns, 1, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( 0, 0, 0, wxALL|wxEXPAND, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtons->Realize(); + + bSizerContent->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + this->Centre( wxBOTH ); +} + +wxZRColaAboutBase::~wxZRColaAboutBase() +{ +} + +wxZRColaUpdaterBase::wxZRColaUpdaterBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerLog; + sbSizerLog = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Log") ), wxVERTICAL ); + + m_log = new wxTextCtrl( sbSizerLog->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); + m_log->SetMinSize( wxSize( 450,150 ) ); + + sbSizerLog->Add( m_log, 1, wxEXPAND, 5 ); + + + bSizerContent->Add( sbSizerLog, 1, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( 0, 0, 0, wxEXPAND, 5 ); + + wxBoxSizer* bSizerButtons; + bSizerButtons = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonUpdate = new wxButton( this, wxID_ANY, _("Quit and &Update..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonUpdate->Enable( false ); + m_buttonUpdate->SetToolTip( _("Exit this program and launch product update") ); + + bSizerButtons->Add( m_buttonUpdate, 0, wxALL, 5 ); + + m_buttonClose = new wxButton( this, wxID_OK, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonClose->SetToolTip( _("Close this window") ); + + bSizerButtons->Add( m_buttonClose, 0, wxALL, 5 ); + + + bSizerContent->Add( bSizerButtons, 0, wxALIGN_RIGHT, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaUpdaterBase::OnIdle ) ); + m_buttonUpdate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaUpdaterBase::OnUpdate ), NULL, this ); + m_buttonClose->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaUpdaterBase::OnClose ), NULL, this ); +} + +wxZRColaUpdaterBase::~wxZRColaUpdaterBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaUpdaterBase::OnIdle ) ); + m_buttonUpdate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaUpdaterBase::OnUpdate ), NULL, this ); + m_buttonClose->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaUpdaterBase::OnClose ), NULL, this ); + +} + +wxZRColaCharRequestBase::wxZRColaCharRequestBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerCharacter; + sbSizerCharacter = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Character") ), wxVERTICAL ); + + m_characterLbl = new wxStaticText( sbSizerCharacter->GetStaticBox(), wxID_ANY, _("Enter the &character you would like to request:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_characterLbl->Wrap( 400 ); + sbSizerCharacter->Add( m_characterLbl, 0, wxALL|wxEXPAND, 5 ); + + m_character = new wxTextCtrl( sbSizerCharacter->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + #ifdef __WXGTK__ + if ( !m_character->HasFlag( wxTE_MULTILINE ) ) + { + m_character->SetMaxLength( 20 ); + } + #else + m_character->SetMaxLength( 20 ); + #endif + m_character->SetFont( wxFont( 20, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_character->SetToolTip( _("Decomposed character to request") ); + + sbSizerCharacter->Add( m_character, 0, wxALL|wxEXPAND, 5 ); + + m_characterNote = new wxStaticText( sbSizerCharacter->GetStaticBox(), wxID_ANY, _("Please, use the decomposed form.\nYou can use ZRCola keyboard shortcuts to enter the character or Copy&&Paste it from the Decomposed window."), wxDefaultPosition, wxDefaultSize, 0 ); + m_characterNote->Wrap( 400 ); + sbSizerCharacter->Add( m_characterNote, 0, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( sbSizerCharacter, 40, wxALL|wxEXPAND, 5 ); + + wxStaticBoxSizer* sbSizerContext; + sbSizerContext = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Context") ), wxVERTICAL ); + + m_contextLbl = new wxStaticText( sbSizerContext->GetStaticBox(), wxID_ANY, _("The &context, examples or description why and where the character is required:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_contextLbl->Wrap( 400 ); + sbSizerContext->Add( m_contextLbl, 0, wxALL|wxEXPAND, 5 ); + + m_context = new wxTextCtrl( sbSizerContext->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); + m_context->SetFont( wxFont( 16, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("ZRCola") ) ); + m_context->SetToolTip( _("Additional notes for character request") ); + + sbSizerContext->Add( m_context, 1, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( sbSizerContext, 60, wxALL|wxEXPAND, 5 ); + + m_note = new wxStaticText( this, wxID_ANY, _("After clicking OK button, your e-mail application should open allowing you to submit the new character request to ZRCola Editor.\nYour e-mail application might not display all the characters correctly, but the Editor will be able to read them correctly anyway."), wxDefaultPosition, wxDefaultSize, 0 ); + m_note->Wrap( 400 ); + bSizerContent->Add( m_note, 0, wxALL|wxEXPAND, 5 ); + + + bSizerContent->Add( 0, 0, 0, wxALL|wxEXPAND, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel ); + m_sdbSizerButtons->Realize(); + + bSizerContent->Add( m_sdbSizerButtons, 0, wxALL|wxEXPAND, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharRequestBase::OnOKButtonClick ), NULL, this ); +} + +wxZRColaCharRequestBase::~wxZRColaCharRequestBase() +{ + // Disconnect Events + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaCharRequestBase::OnOKButtonClick ), NULL, this ); + +} + +wxZRColaTranslationSeqBase::wxZRColaTranslationSeqBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name ) : wxDialog( parent, id, title, pos, size, style, name ) +{ + this->SetSizeHints( wxDefaultSize, wxDefaultSize ); + + wxBoxSizer* bSizerContent; + bSizerContent = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerTranslationSet; + sbSizerTranslationSet = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Translation") ), wxVERTICAL ); + + m_transLbl = new wxStaticText( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("ZRCola offers multiple text translations that can be arranged in a sequence.\nPlease select desired translations and the order they are applied."), wxDefaultPosition, wxDefaultSize, 0 ); + m_transLbl->Wrap( 452 ); + sbSizerTranslationSet->Add( m_transLbl, 0, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* bSizerTranslation; + bSizerTranslation = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bSizerTransAvailable; + bSizerTransAvailable = new wxBoxSizer( wxVERTICAL ); + + m_availableLbl = new wxStaticText( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("A&vailable:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_availableLbl->Wrap( -1 ); + bSizerTransAvailable->Add( m_availableLbl, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_available = new wxListBox( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( 200,-1 ), 0, NULL, wxLB_SINGLE|wxLB_SORT ); + m_available->SetMinSize( wxSize( 200,150 ) ); + + bSizerTransAvailable->Add( m_available, 1, wxALL|wxEXPAND, 5 ); + + + bSizerTranslation->Add( bSizerTransAvailable, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTransSelect; + bSizerTransSelect = new wxBoxSizer( wxVERTICAL ); + + m_add = new wxButton( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _(">"), wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizerTransSelect->Add( m_add, 0, wxALL, 5 ); + + m_remove = new wxButton( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("<"), wxDefaultPosition, wxSize( 32,32 ), 0 ); + bSizerTransSelect->Add( m_remove, 0, wxALL, 5 ); + + + bSizerTranslation->Add( bSizerTransSelect, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + wxBoxSizer* bSizerTransSelected; + bSizerTransSelected = new wxBoxSizer( wxVERTICAL ); + + m_selectedLbl = new wxStaticText( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("&Selected:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_selectedLbl->Wrap( -1 ); + bSizerTransSelected->Add( m_selectedLbl, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_selected = new wxListBox( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( 200,-1 ), 0, NULL, wxLB_SINGLE ); + m_selected->SetMinSize( wxSize( 200,150 ) ); + + bSizerTransSelected->Add( m_selected, 1, wxALL|wxEXPAND, 5 ); + + + bSizerTranslation->Add( bSizerTransSelected, 1, wxEXPAND, 5 ); + + + sbSizerTranslationSet->Add( bSizerTranslation, 1, wxEXPAND, 5 ); + + wxBoxSizer* bSizerTransActiveReorder; + bSizerTransActiveReorder = new wxBoxSizer( wxHORIZONTAL ); + + m_selectedUp = new wxButton( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("Up"), wxDefaultPosition, wxSize( 70,-1 ), 0 ); + bSizerTransActiveReorder->Add( m_selectedUp, 0, wxALL, 5 ); + + m_selectedDown = new wxButton( sbSizerTranslationSet->GetStaticBox(), wxID_ANY, _("Down"), wxDefaultPosition, wxSize( 70,-1 ), 0 ); + bSizerTransActiveReorder->Add( m_selectedDown, 0, wxALL, 5 ); + + + sbSizerTranslationSet->Add( bSizerTransActiveReorder, 0, wxALIGN_RIGHT, 5 ); + + + bSizerContent->Add( sbSizerTranslationSet, 1, wxEXPAND|wxALL, 5 ); + + + bSizerContent->Add( 0, 0, 0, wxEXPAND|wxALL, 5 ); + + m_sdbSizerButtons = new wxStdDialogButtonSizer(); + m_sdbSizerButtonsOK = new wxButton( this, wxID_OK ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsOK ); + m_sdbSizerButtonsCancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizerButtons->AddButton( m_sdbSizerButtonsCancel ); + m_sdbSizerButtons->Realize(); + + bSizerContent->Add( m_sdbSizerButtons, 0, wxEXPAND|wxALL, 5 ); + + + this->SetSizer( bSizerContent ); + this->Layout(); + bSizerContent->Fit( this ); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaTranslationSeqBase::OnInitDialog ) ); + this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaTranslationSeqBase::OnUpdate ) ); + m_available->Connect( wxEVT_CHAR, wxKeyEventHandler( wxZRColaTranslationSeqBase::OnAvailableChar ), NULL, this ); + m_available->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnAvailableDClick ), NULL, this ); + m_add->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnAdd ), NULL, this ); + m_remove->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnRemove ), NULL, this ); + m_selected->Connect( wxEVT_CHAR, wxKeyEventHandler( wxZRColaTranslationSeqBase::OnSelectedChar ), NULL, this ); + m_selected->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedDClick ), NULL, this ); + m_selectedUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedUp ), NULL, this ); + m_selectedDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedDown ), NULL, this ); + m_sdbSizerButtonsOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnOKButtonClick ), NULL, this ); +} + +wxZRColaTranslationSeqBase::~wxZRColaTranslationSeqBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxZRColaTranslationSeqBase::OnInitDialog ) ); + this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxZRColaTranslationSeqBase::OnUpdate ) ); + m_available->Disconnect( wxEVT_CHAR, wxKeyEventHandler( wxZRColaTranslationSeqBase::OnAvailableChar ), NULL, this ); + m_available->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnAvailableDClick ), NULL, this ); + m_add->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnAdd ), NULL, this ); + m_remove->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnRemove ), NULL, this ); + m_selected->Disconnect( wxEVT_CHAR, wxKeyEventHandler( wxZRColaTranslationSeqBase::OnSelectedChar ), NULL, this ); + m_selected->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedDClick ), NULL, this ); + m_selectedUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedUp ), NULL, this ); + m_selectedDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnSelectedDown ), NULL, this ); + m_sdbSizerButtonsOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxZRColaTranslationSeqBase::OnOKButtonClick ), NULL, this ); + +} diff --git a/ZRCola/res/zrcolagui.h b/ZRCola/res/zrcolagui.h new file mode 100644 index 0000000..4bd41f9 --- /dev/null +++ b/ZRCola/res/zrcolagui.h @@ -0,0 +1,418 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Aug 8 2018) +// http://www.wxformbuilder.org/ +// +// PLEASE DO *NOT* EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __ZRCOLAGUI_H__ +#define __ZRCOLAGUI_H__ + +#include +#include +#include +#include +class wxZRColaCharGrid; + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +class wxZRColaCharacterCatalogPanel; +class wxZRColaComposerPanel; +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaFrameBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaFrameBase : public wxFrame +{ + private: + + protected: + enum + { + wxID_CHARACTER_SELECTOR = 1000, + wxID_SEND_DESTINATION, + wxID_COPY_DESTINATION_AND_RETURN, + wxID_SEND_SOURCE, + wxID_COPY_SOURCE_AND_RETURN, + wxID_SEND_ABORT, + wxID_COMPOSITION_MENU, + wxID_SETTINGS, + wxID_TOOLBAR_EDIT, + wxID_TOOLBAR_TRANSLATE, + wxID_PANEL_CHRGRPS, + wxID_HELP_INSTRUCTIONS, + wxID_HELP_SHORTCUTS, + wxID_HELP_REQCHAR, + wxID_HELP_UPDATE, + wxID_COMPOSITION_TOOLBAR + }; + + wxMenuBar* m_menubar; + wxMenu* m_menuProgram; + wxMenu* m_menuEdit; + wxMenuItem* m_menuItemComposition; + wxMenu* m_menuTranslationSeq; + wxMenu* m_menuView; + wxMenu* m_menuHelp; + wxAuiToolBar* m_toolbarEdit; + wxAuiToolBarItem* m_toolEditCut; + wxAuiToolBarItem* m_toolEditCopy; + wxAuiToolBarItem* m_toolEditPaste; + wxAuiToolBar* m_toolbarTranslate; + wxAuiToolBarItem* m_toolCharSelect; + wxAuiToolBarItem* m_toolSendDestination; + wxAuiToolBarItem* m_toolSendSource; + wxAuiToolBarItem* m_toolComposition; + wxChoice* m_toolTranslationSeq; + wxZRColaCharacterCatalogPanel* m_panelChrCat; + wxStatusBar* m_statusBar; + + // Virtual event handlers, overide them in your derived class + virtual void OnClose( wxCloseEvent& event ) { event.Skip(); } + virtual void OnIconize( wxIconizeEvent& event ) { event.Skip(); } + virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); } + virtual void OnTranslationSeqChoice( wxCommandEvent& event ) { event.Skip(); } + + + public: + wxZRColaComposerPanel* m_panel; + + wxZRColaFrameBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 600,400 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL, const wxString& name = wxT("ZRCola") ); + wxAuiManager m_mgr; + + ~wxZRColaFrameBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaComposerPanelBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaComposerPanelBase : public wxPanel +{ + private: + + protected: + enum + { + wxID_TIMER_SAVE = 1000 + }; + + wxSplitterWindow* m_splitterSource; + wxPanel* m_panelSourceEdit; + wxPanel* m_panelSourceHex; + wxTextCtrl* m_sourceHex; + wxSplitterWindow* m_splitterDestination; + wxPanel* m_panelDestinationEdit; + wxPanel* m_panelDestinationHex; + wxTextCtrl* m_destinationHex; + wxTimer m_timerSave; + + // Virtual event handlers, overide them in your derived class + virtual void OnSourcePaint( wxPaintEvent& event ) { event.Skip(); } + virtual void OnSourceText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSourceHexPaint( wxPaintEvent& event ) { event.Skip(); } + virtual void OnDestinationPaint( wxPaintEvent& event ) { event.Skip(); } + virtual void OnDestinationText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnDestinationHexPaint( wxPaintEvent& event ) { event.Skip(); } + virtual void OnSaveTimer( wxTimerEvent& event ) { event.Skip(); } + + + public: + wxTextCtrl* m_source; + wxTextCtrl* m_destination; + + wxZRColaComposerPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaComposerPanel") ); + ~wxZRColaComposerPanelBase(); + + void m_splitterSourceOnIdle( wxIdleEvent& ) + { + m_splitterSource->SetSashPosition( -5 ); + m_splitterSource->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterSourceOnIdle ), NULL, this ); + } + + void m_splitterDestinationOnIdle( wxIdleEvent& ) + { + m_splitterDestination->SetSashPosition( -5 ); + m_splitterDestination->Disconnect( wxEVT_IDLE, wxIdleEventHandler( wxZRColaComposerPanelBase::m_splitterDestinationOnIdle ), NULL, this ); + } + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaCharacterCatalogPanelBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaCharacterCatalogPanelBase : public wxPanel +{ + private: + + protected: + wxChoice* m_choice; + wxZRColaCharGrid* m_grid; + wxCheckBox* m_show_all; + + // Virtual event handlers, overide them in your derived class + virtual void OnChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnGridClick( wxGridEvent& event ) { event.Skip(); } + virtual void OnGridKeyDown( wxKeyEvent& event ) { event.Skip(); } + virtual void OnShowAll( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaCharacterCatalogPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxT("ZRColaCharacterCatalog") ); + ~wxZRColaCharacterCatalogPanelBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaCharSelectBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaCharSelectBase : public wxDialog +{ + private: + + protected: + wxSearchCtrl* m_search; + wxHyperlinkCtrl* m_search_more; + wxPanel* m_search_panel; + wxCheckListBox* m_categories; + wxHyperlinkCtrl* m_categoriesAll; + wxHyperlinkCtrl* m_categoriesNone; + wxHyperlinkCtrl* m_categoriesInvert; + wxZRColaCharGrid* m_gridResults; + wxZRColaCharGrid* m_gridRecent; + wxStaticText* m_labelUnicode; + wxTextCtrl* m_unicode; + wxTextCtrl* m_shortcut; + wxGrid* m_gridPreview; + wxTextCtrl* m_description; + wxTextCtrl* m_tags; + wxTextCtrl* m_category; + wxHyperlinkCtrl* m_navigateBack; + wxHyperlinkCtrl* m_navigateForward; + wxZRColaCharGrid* m_gridRelated; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); } + virtual void OnSearchText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSearchMore( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnCategoriesToggle( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCategoriesAll( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnCategoriesNone( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnCategoriesInvert( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnResultCellDClick( wxGridEvent& event ) { event.Skip(); } + virtual void OnResultSelectCell( wxGridEvent& event ) { event.Skip(); } + virtual void OnResultsKeyDown( wxKeyEvent& event ) { event.Skip(); } + virtual void OnRecentCellDClick( wxGridEvent& event ) { event.Skip(); } + virtual void OnRecentSelectCell( wxGridEvent& event ) { event.Skip(); } + virtual void OnRecentKeyDown( wxKeyEvent& event ) { event.Skip(); } + virtual void OnUnicodeText( wxCommandEvent& event ) { event.Skip(); } + virtual void OnPreviewKeyDown( wxKeyEvent& event ) { event.Skip(); } + virtual void OnNavigateBack( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnNavigateForward( wxHyperlinkEvent& event ) { event.Skip(); } + virtual void OnRelatedSelectCell( wxGridEvent& event ) { event.Skip(); } + virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaCharSelectBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Character Search"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharSelect") ); + ~wxZRColaCharSelectBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaSettingsBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaSettingsBase : public wxDialog +{ + private: + + protected: + wxListbook* m_listbook; + wxPanel* m_panelLanguage; + wxStaticText* m_langLabel; + wxRadioButton* m_langAuto; + wxRadioButton* m_langManual; + wxListBox* m_languages; + wxPanel* m_panelAutoStart; + wxStaticText* m_autoStartLabel; + wxCheckBox* m_autoStart; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsApply; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); } + virtual void OnLanguageUpdate( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnApplyButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaSettingsBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaSettings") ); + ~wxZRColaSettingsBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaAboutBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaAboutBase : public wxDialog +{ + private: + + protected: + wxStaticBitmap* m_bitmapIcon; + wxStaticText* m_staticTextZRCola; + wxStaticText* m_staticTextVersion; + wxStaticText* m_staticTextColophone; + wxStaticText* m_staticTextCopyright; + wxHyperlinkCtrl* m_hyperlink; + wxStaticText* m_staticTextDeclaration; + wxTextCtrl* m_declaration; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + + public: + + wxZRColaAboutBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About ZRCola"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaAbout") ); + ~wxZRColaAboutBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaUpdaterBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaUpdaterBase : public wxDialog +{ + private: + + protected: + wxTextCtrl* m_log; + wxButton* m_buttonUpdate; + wxButton* m_buttonClose; + + // Virtual event handlers, overide them in your derived class + virtual void OnIdle( wxIdleEvent& event ) { event.Skip(); } + virtual void OnUpdate( wxCommandEvent& event ) { event.Skip(); } + virtual void OnClose( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaUpdaterBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Product Update"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaUpdater") ); + ~wxZRColaUpdaterBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaCharRequestBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaCharRequestBase : public wxDialog +{ + private: + + protected: + wxStaticText* m_characterLbl; + wxTextCtrl* m_character; + wxStaticText* m_characterNote; + wxStaticText* m_contextLbl; + wxTextCtrl* m_context; + wxStaticText* m_note; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaCharRequestBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Request a New Character"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaCharRequest") ); + ~wxZRColaCharRequestBase(); + +}; + +/////////////////////////////////////////////////////////////////////////////// +/// Class wxZRColaTranslationSeqBase +/////////////////////////////////////////////////////////////////////////////// +class wxZRColaTranslationSeqBase : public wxDialog +{ + private: + + protected: + wxStaticText* m_transLbl; + wxStaticText* m_availableLbl; + wxListBox* m_available; + wxButton* m_add; + wxButton* m_remove; + wxStaticText* m_selectedLbl; + wxListBox* m_selected; + wxButton* m_selectedUp; + wxButton* m_selectedDown; + wxStdDialogButtonSizer* m_sdbSizerButtons; + wxButton* m_sdbSizerButtonsOK; + wxButton* m_sdbSizerButtonsCancel; + + // Virtual event handlers, overide them in your derived class + virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); } + virtual void OnUpdate( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnAvailableChar( wxKeyEvent& event ) { event.Skip(); } + virtual void OnAvailableDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnAdd( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRemove( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSelectedChar( wxKeyEvent& event ) { event.Skip(); } + virtual void OnSelectedDClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSelectedUp( wxCommandEvent& event ) { event.Skip(); } + virtual void OnSelectedDown( wxCommandEvent& event ) { event.Skip(); } + virtual void OnOKButtonClick( wxCommandEvent& event ) { event.Skip(); } + + + public: + + wxZRColaTranslationSeqBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Custom Translation Sequence"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = wxT("ZRColaTranslationSeq") ); + ~wxZRColaTranslationSeqBase(); + +}; + +#endif //__ZRCOLAGUI_H__ diff --git a/ZRCola/zrcolacomppnl.cpp b/ZRCola/zrcolacomppnl.cpp index e9701ff..9a6c87a 100644 --- a/ZRCola/zrcolacomppnl.cpp +++ b/ZRCola/zrcolacomppnl.cpp @@ -93,24 +93,24 @@ void wxZRColaComposerPanel::SynchronizePanels() std::wstring dst(src.data(), len), dst2; ZRCola::mapping_vector map; + m_mapping.clear(); + + if (app->m_mainWnd->m_composition) { + // ZRCola Decomposed => ZRCola Composed should decompose first. + app->m_t_db.TranslateInv(ZRCOLA_TRANSEQID_DEFAULT, dst.data(), dst.size(), dst2, &map); + m_mapping.push_back(std::move(map)); + + app->m_t_db.Translate(ZRCOLA_TRANSEQID_DEFAULT, dst2.data(), dst2.size(), dst, &map); + m_mapping.push_back(std::move(map)); + } + + // Other translations const ZRCola::transetid_t *sets_begin, *sets_end; GetTranslationSeq(sets_begin, sets_end); - - m_mapping.clear(); for (auto s = sets_begin; s != sets_end; ++s) { - if (*s == 0) { - // ZRCola Decomposed => ZRCola Composed should decompose first. - app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map); - m_mapping.push_back(std::move(map)); - - app->m_t_db.Translate(*s, dst2.data(), dst2.size(), dst, &map); - m_mapping.push_back(std::move(map)); - } else { - // Other translates - app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map); - m_mapping.push_back(std::move(map)); - dst = std::move(dst2); - } + app->m_t_db.Translate(*s, dst.data(), dst.size(), dst2, &map); + m_mapping.push_back(std::move(map)); + dst = std::move(dst2); } m_source->GetSelection(&m_selSource.first, &m_selSource.second); @@ -137,24 +137,24 @@ void wxZRColaComposerPanel::SynchronizePanels() std::wstring dst(src.data(), len), dst2; ZRCola::mapping_vector map; + m_mapping.clear(); + + // Other translations const ZRCola::transetid_t *sets_begin, *sets_end; GetTranslationSeq(sets_begin, sets_end); - - m_mapping.clear(); for (auto s = sets_end; (s--) != sets_begin;) { - if (*s == 0) { - // ZRCola Decomposed => ZRCola Composed - app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map); - } else { - // Other translates - app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map); - } + app->m_t_db.TranslateInv(*s, dst.data(), dst.size(), dst2, &map); dst = std::move(dst2); map.invert(); m_mapping.push_back(std::move(map)); } + if (app->m_mainWnd->m_composition) { + // ZRCola Decomposed => ZRCola Composed + app->m_t_db.TranslateInv(ZRCOLA_TRANSEQID_DEFAULT, dst.data(), dst.size(), &app->m_lc_db, app->m_mainWnd->m_settings->m_lang, dst2, &map); + } + m_destination->GetSelection(&m_selDestination.first, &m_selDestination.second); // Update destination HEX dump. diff --git a/ZRCola/zrcolacomppnl.h b/ZRCola/zrcolacomppnl.h index 1ac0a3c..5b920f9 100644 --- a/ZRCola/zrcolacomppnl.h +++ b/ZRCola/zrcolacomppnl.h @@ -113,7 +113,13 @@ inline void wxZRColaComposerPanel::GetTranslationSeq(_Out_ const ZRCola::transet { auto app = dynamic_cast(wxTheApp); - if (app->m_mainWnd->m_transeq_id != ZRCOLA_TRANSEQID_CUSTOM) { + if (app->m_mainWnd->m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT) { + sets_begin = NULL; + sets_end = NULL; + } else if (app->m_mainWnd->m_transeq_id == ZRCOLA_TRANSEQID_CUSTOM) { + sets_begin = app->m_mainWnd->m_transeq->m_transeq.data(); + sets_end = sets_begin + app->m_mainWnd->m_transeq->m_transeq.size(); + } else { size_t start; if (app->m_tsq_db.idxTranSeq.find(ZRCola::transeq_db::transeq(app->m_mainWnd->m_transeq_id), start)) { const auto &ts = app->m_tsq_db.idxTranSeq[start]; @@ -123,9 +129,6 @@ inline void wxZRColaComposerPanel::GetTranslationSeq(_Out_ const ZRCola::transet sets_begin = NULL; sets_end = NULL; } - } else { - sets_begin = app->m_mainWnd->m_transeq->m_transeq.data(); - sets_end = sets_begin + app->m_mainWnd->m_transeq->m_transeq.size(); } } diff --git a/ZRCola/zrcolafrm.cpp b/ZRCola/zrcolafrm.cpp index 4bbb168..6ad828d 100644 --- a/ZRCola/zrcolafrm.cpp +++ b/ZRCola/zrcolafrm.cpp @@ -25,38 +25,42 @@ ////////////////////////////////////////////////////////////////////////// wxBEGIN_EVENT_TABLE(wxZRColaFrame, wxZRColaFrameBase) - EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit ) + EVT_MENU (wxID_EXIT , wxZRColaFrame::OnExit ) - EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate ) - EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent ) - EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate ) - EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent ) + EVT_UPDATE_UI_RANGE(wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEventUpdate ) + EVT_MENU_RANGE (wxID_CUT , wxID_CLEAR , wxZRColaFrame::OnForwardEvent ) + EVT_UPDATE_UI (wxID_SELECTALL , wxZRColaFrame::OnForwardEventUpdate ) + EVT_MENU (wxID_SELECTALL , wxZRColaFrame::OnForwardEvent ) - EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter ) + EVT_MENU (wxID_CHARACTER_SELECTOR , wxZRColaFrame::OnInsertCharacter ) - EVT_UPDATE_UI_RANGE(wxID_SEND_DESTINATION , wxID_SEND_ABORT, wxZRColaFrame::OnSendUpdate ) - EVT_MENU (wxID_COPY_DESTINATION_AND_RETURN , wxZRColaFrame::OnCopyDestinationAndReturn ) - EVT_MENU (wxID_SEND_DESTINATION , wxZRColaFrame::OnSendDestination ) - EVT_MENU (wxID_COPY_SOURCE_AND_RETURN , wxZRColaFrame::OnCopySourceAndReturn ) - EVT_MENU (wxID_SEND_SOURCE , wxZRColaFrame::OnSendSource ) - EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort ) + EVT_UPDATE_UI_RANGE(wxID_SEND_DESTINATION , wxID_SEND_ABORT , wxZRColaFrame::OnSendUpdate ) + EVT_MENU (wxID_COPY_DESTINATION_AND_RETURN , wxZRColaFrame::OnCopyDestinationAndReturn ) + EVT_MENU (wxID_SEND_DESTINATION , wxZRColaFrame::OnSendDestination ) + EVT_MENU (wxID_COPY_SOURCE_AND_RETURN , wxZRColaFrame::OnCopySourceAndReturn ) + EVT_MENU (wxID_SEND_SOURCE , wxZRColaFrame::OnSendSource ) + EVT_MENU (wxID_SEND_ABORT , wxZRColaFrame::OnSendAbort ) - EVT_MENU (wxID_SETTINGS , wxZRColaFrame::OnSettings ) + EVT_MENU (wxID_COMPOSITION_MENU , wxZRColaFrame::OnCompositionMenu ) + EVT_MENU (wxID_COMPOSITION_TOOLBAR , wxZRColaFrame::OnCompositionToolbar ) + EVT_MENU_RANGE (wxID_TRANSLATION_SEQ_DEFAULT, wxID_TRANSLATION_SEQ_END, wxZRColaFrame::OnTranslationSeqMenu ) - EVT_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate ) - EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit ) - EVT_UPDATE_UI (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslateUpdate ) - EVT_MENU (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslate ) - EVT_UPDATE_UI (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate) - EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog ) - EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus ) + EVT_MENU (wxID_SETTINGS , wxZRColaFrame::OnSettings ) - EVT_MENU (wxID_HELP_INSTRUCTIONS , wxZRColaFrame::OnHelpInstructions ) - EVT_MENU (wxID_HELP_SHORTCUTS , wxZRColaFrame::OnHelpShortcuts ) + EVT_UPDATE_UI (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEditUpdate ) + EVT_MENU (wxID_TOOLBAR_EDIT , wxZRColaFrame::OnToolbarEdit ) + EVT_UPDATE_UI (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslateUpdate ) + EVT_MENU (wxID_TOOLBAR_TRANSLATE , wxZRColaFrame::OnToolbarTranslate ) + EVT_UPDATE_UI (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalogUpdate) + EVT_MENU (wxID_PANEL_CHRGRPS , wxZRColaFrame::OnPanelCharacterCatalog ) + EVT_MENU (wxID_FOCUS_CHARACTER_CATALOG , wxZRColaFrame::OnPanelCharacterCatalogFocus ) - EVT_MENU (wxID_HELP_REQCHAR , wxZRColaFrame::OnHelpReqChar ) - EVT_MENU (wxID_HELP_UPDATE , wxZRColaFrame::OnHelpUpdate ) - EVT_MENU (wxID_ABOUT , wxZRColaFrame::OnHelpAbout ) + EVT_MENU (wxID_HELP_INSTRUCTIONS , wxZRColaFrame::OnHelpInstructions ) + EVT_MENU (wxID_HELP_SHORTCUTS , wxZRColaFrame::OnHelpShortcuts ) + + EVT_MENU (wxID_HELP_REQCHAR , wxZRColaFrame::OnHelpReqChar ) + EVT_MENU (wxID_HELP_UPDATE , wxZRColaFrame::OnHelpUpdate ) + EVT_MENU (wxID_ABOUT , wxZRColaFrame::OnHelpAbout ) wxEND_EVENT_TABLE() @@ -65,7 +69,8 @@ wxZRColaFrame::wxZRColaFrame() : m_chrSelect(NULL), m_settings(NULL), m_chrReq(NULL), - m_transeq_id(0), // By default use predefined translation sequence 0 (ZRCola Decomposed >> Composed) + m_composition(true), + m_transeq_id(ZRCOLA_TRANSEQID_DEFAULT), m_transeq(NULL), wxZRColaFrameBase(NULL) { @@ -80,14 +85,26 @@ wxZRColaFrame::wxZRColaFrame() : // Populate list of translation sequences. auto app = dynamic_cast(wxTheApp); m_toolTranslationSeq->Clear(); - for (size_t i = 0, n = app->m_tsq_db.idxRank.size(); i < n; i++) { - const ZRCola::transeq_db::transeq &ts = app->m_tsq_db.idxRank[i]; - wxString - name(ts.name(), ts.name_len()), - name_tran(wxGetTranslation(name, wxT("ZRCola-zrcdb"))); - m_toolTranslationSeq->Append(name_tran, reinterpret_cast(ts.seq)); + { + wxString name_tran(_("No Translation")); + m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_DEFAULT, name_tran); + m_toolTranslationSeq->Append(name_tran, reinterpret_cast(ZRCOLA_TRANSEQID_DEFAULT)); + } + for (size_t i = 0, n = app->m_tsq_db.idxRank.size(); ; i++) { + if (i < n) { + const ZRCola::transeq_db::transeq &ts = app->m_tsq_db.idxRank[i]; + wxString + name(ts.name(), ts.name_len()), + name_tran(wxGetTranslation(name, wxT("ZRCola-zrcdb"))); + m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_START + i, name_tran); + m_toolTranslationSeq->Append(name_tran, reinterpret_cast(ts.seq)); + } else { + wxString name_tran(_("Custom Translation...")); + m_menuTranslationSeq->AppendRadioItem(wxID_TRANSLATION_SEQ_START + i, name_tran); + m_toolTranslationSeq->Append(name_tran, reinterpret_cast(ZRCOLA_TRANSEQID_CUSTOM)); + break; + } } - m_toolTranslationSeq->Append(_("Custom Translation..."), reinterpret_cast(ZRCOLA_TRANSEQID_CUSTOM)); // Load main window icons. #ifdef __WINDOWS__ @@ -159,15 +176,26 @@ wxZRColaFrame::wxZRColaFrame() : wxPersistentAuiManager(&m_mgr).Restore(); persist_mgr.RegisterAndRestore(this, new wxPersistentZRColaFrame(this)); - // Populate list of translation sequences. + // Update (de)composition selection. + if (m_composition) { + m_menuItemComposition->Check(true); + m_toolComposition->SetState(m_toolComposition->GetState() | wxAUI_BUTTON_STATE_CHECKED); + } else { + m_menuItemComposition->Check(false); + m_toolComposition->SetState(m_toolComposition->GetState() & ~wxAUI_BUTTON_STATE_CHECKED); + } + + // Update translation sequence selection. for (unsigned int i = 0, n = m_toolTranslationSeq->GetCount(); ; i++) { if (i < n) { if (static_cast((size_t)m_toolTranslationSeq->GetClientData(i)) == m_transeq_id) { + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + i, true); m_toolTranslationSeq->SetSelection(i); break; } } else { - m_transeq_id = static_cast((size_t)m_toolTranslationSeq->GetClientData(0)); + m_transeq_id = ZRCOLA_TRANSEQID_DEFAULT; + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true); m_toolTranslationSeq->SetSelection(0); break; } @@ -300,6 +328,33 @@ void wxZRColaFrame::OnSendAbort(wxCommandEvent& event) } +void wxZRColaFrame::OnCompositionMenu(wxCommandEvent& event) +{ + m_composition = m_menuItemComposition->IsChecked(); + m_toolComposition->SetState((m_toolComposition->GetState() & ~wxAUI_BUTTON_STATE_CHECKED) | (m_composition ? wxAUI_BUTTON_STATE_CHECKED : 0)); + m_toolbarTranslate->Refresh(); + + // Notify source text something changed and should re-translate. + wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED); + m_panel->m_source->ProcessWindowEvent(event2); + + event.Skip(); +} + + +void wxZRColaFrame::OnCompositionToolbar(wxCommandEvent& event) +{ + m_composition = (m_toolComposition->GetState() & wxAUI_BUTTON_STATE_CHECKED) ? true : false; + m_menuItemComposition->Check(m_composition); + + // Notify source text something changed and should re-translate. + wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED); + m_panel->m_source->ProcessWindowEvent(event2); + + event.Skip(); +} + + void wxZRColaFrame::OnSettings(wxCommandEvent& event) { m_settings->ShowModal(); @@ -361,19 +416,28 @@ void wxZRColaFrame::OnToolbarTranslate(wxCommandEvent& event) } +void wxZRColaFrame::OnTranslationSeqMenu(wxCommandEvent& event) +{ + int idx = event.GetId() - wxID_TRANSLATION_SEQ_DEFAULT; + ZRCola::transeqid_t transeq_id = static_cast((size_t)m_toolTranslationSeq->GetClientData(idx)); + + DoSetTranslationSeq(idx, transeq_id); + + m_toolTranslationSeq->Select(idx); +} + + void wxZRColaFrame::OnTranslationSeqChoice(wxCommandEvent& event) { + int idx = event.GetSelection(); ZRCola::transeqid_t transeq_id = static_cast((size_t)event.GetClientData()); - if (m_transeq_id != transeq_id) { - m_transeq_id = transeq_id; - // Notify source text something changed and should re-translate. - wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED); - m_panel->m_source->ProcessWindowEvent(event2); - } + DoSetTranslationSeq(idx, transeq_id); - if (m_transeq_id == ZRCOLA_TRANSEQID_CUSTOM) - m_transeq->ShowModal(); + if (m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT) + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true); + else + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true); } @@ -559,11 +623,40 @@ void wxZRColaFrame::DoCopyAndReturn(const wxString& str) m_hWndSource = NULL; // Select all input in composer and source to prepare for the overwrite next time. - m_panel->m_source ->SelectAll(); + m_panel->m_source->SelectAll(); m_panel->m_destination->SelectAll(); } +void wxZRColaFrame::DoSetTranslationSeq(int idx, ZRCola::transeqid_t transeq_id) +{ + if (transeq_id == ZRCOLA_TRANSEQID_CUSTOM) { + // Prompt user to modify translation. + if (m_transeq->ShowModal() != wxID_OK) + return; + + if (m_transeq->m_transeq.empty()) { + // User submitted an empty translation. Revert to "No Translation" case. + m_transeq_id = ZRCOLA_TRANSEQID_DEFAULT; + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT, true); + m_toolTranslationSeq->SetSelection(0); + } else { + m_transeq_id = ZRCOLA_TRANSEQID_CUSTOM; + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true); + } + } else if (m_transeq_id != transeq_id) { + // User choose a new translation sequence. + m_transeq_id = transeq_id; + m_menuTranslationSeq->Check(wxID_TRANSLATION_SEQ_DEFAULT + idx, true); + } else + return; + + // Notify source text something changed and should re-translate. + wxCommandEvent event2(wxEVT_COMMAND_TEXT_UPDATED); + m_panel->m_source->ProcessWindowEvent(event2); +} + + #ifdef __WXMSW__ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) @@ -573,7 +666,7 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM WXHWND hWndSource = ::GetForegroundWindow(); switch (wParam) { - case wxZRColaHKID_INVOKE_TRANSLATE : m_panel->m_source ->SetFocus(); break; + case wxZRColaHKID_INVOKE_TRANSLATE: m_panel->m_source->SetFocus(); break; case wxZRColaHKID_INVOKE_TRANSLATE_INV: m_panel->m_destination->SetFocus(); break; default: wxFAIL_MSG(wxT("not our registered shortcut")); @@ -588,10 +681,10 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM m_hWndSource = hWndSource; //if (m_state == wxABS_FLOAT) { - if (IsIconized()) - ::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); - ::SetActiveWindow(m_hWnd); - ::SetForegroundWindow(m_hWnd); + if (IsIconized()) + ::SendMessage(m_hWnd, WM_SYSCOMMAND, SC_RESTORE, 0); + ::SetActiveWindow(m_hWnd); + ::SetForegroundWindow(m_hWnd); //} else if (wxAppBarIsDocked(m_state)) { // // ZRCola window is currently docked. @@ -606,7 +699,8 @@ WXLRESULT wxZRColaFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM // wxFAIL_MSG(wxT("unsupported application bar state")); return 0; - } else + } + else return wxZRColaFrameBase::MSWWindowProc(message, wParam, lParam); } @@ -628,6 +722,7 @@ void wxPersistentZRColaFrame::Save() const auto wnd = static_cast(GetWindow()); // dynamic_cast is not reliable as we are typically called late in the wxTopLevelWindowMSW destructor. + SaveValue(wxT("composition"), wnd->m_composition); SaveValue(wxT("transeqId"), static_cast(wnd->m_transeq_id)); wxPersistentZRColaComposerPanel(wnd->m_panel).Save(); @@ -646,5 +741,11 @@ bool wxPersistentZRColaFrame::Restore() if (RestoreValue(wxT("transeqId"), &num)) wnd->m_transeq_id = num; + bool b; + if (RestoreValue(wxT("composition"), &b)) + wnd->m_composition = b; + else + wnd->m_composition = wnd->m_transeq_id == ZRCOLA_TRANSEQID_DEFAULT; + return wxPersistentTLWEx::Restore(); } diff --git a/ZRCola/zrcolafrm.h b/ZRCola/zrcolafrm.h index 473691a..75662cb 100644 --- a/ZRCola/zrcolafrm.h +++ b/ZRCola/zrcolafrm.h @@ -60,6 +60,9 @@ public: enum { wxID_FOCUS_CHARACTER_CATALOG = 2000, + wxID_TRANSLATION_SEQ_DEFAULT = 2001, + wxID_TRANSLATION_SEQ_START = 2002, + wxID_TRANSLATION_SEQ_END = 2100, }; wxZRColaFrame(); @@ -79,6 +82,8 @@ protected: void OnSendSource(wxCommandEvent& event); void OnCopySourceAndReturn(wxCommandEvent& event); void OnSendAbort(wxCommandEvent& event); + void OnCompositionMenu(wxCommandEvent& event); + void OnCompositionToolbar(wxCommandEvent& event); void OnSettings(wxCommandEvent& event); virtual void OnIdle(wxIdleEvent& event); void OnTaskbarIconClick(wxTaskBarIconEvent& event); @@ -87,6 +92,7 @@ protected: void OnToolbarEdit(wxCommandEvent& event); void OnToolbarTranslateUpdate(wxUpdateUIEvent& event); void OnToolbarTranslate(wxCommandEvent& event); + void OnTranslationSeqMenu(wxCommandEvent& event); virtual void OnTranslationSeqChoice(wxCommandEvent& event); void OnPanelCharacterCatalogUpdate(wxUpdateUIEvent& event); void OnPanelCharacterCatalog(wxCommandEvent& event); @@ -117,6 +123,7 @@ protected: private: void DoSend(const wxString& str); void DoCopyAndReturn(const wxString& str); + void DoSetTranslationSeq(int idx, ZRCola::transeqid_t transeq_id); protected: #ifdef __WXMSW__ @@ -129,6 +136,7 @@ protected: wxZRColaCharSelect *m_chrSelect; ///< Character selection dialog wxZRColaCharRequest *m_chrReq; ///< Request a New Character dialog wxZRColaSettings *m_settings; ///< Configuration dialog + bool m_composition; ///< Is (de)composition enabled? ZRCola::transeqid_t m_transeq_id; ///< Translation sequence ID wxZRColaTranslationSeq *m_transeq; ///< Custom translation sequence dialog }; diff --git a/ZRCola/zrcolagui.cpp b/ZRCola/zrcolagui.cpp index 8170c87..c2497bf 100644 --- a/ZRCola/zrcolagui.cpp +++ b/ZRCola/zrcolagui.cpp @@ -74,20 +74,20 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS m_menuEdit->AppendSeparator(); - wxMenuItem* m_menuSelectAll; - m_menuSelectAll = new wxMenuItem( m_menuEdit, wxID_SELECTALL, wxString( _("Select &All") ) + wxT('\t') + wxT("Ctrl+A"), _("Select all text"), wxITEM_NORMAL ); - m_menuEdit->Append( m_menuSelectAll ); + wxMenuItem* m_menuItemSelectAll; + m_menuItemSelectAll = new wxMenuItem( m_menuEdit, wxID_SELECTALL, wxString( _("Select &All") ) + wxT('\t') + wxT("Ctrl+A"), _("Select all text"), wxITEM_NORMAL ); + m_menuEdit->Append( m_menuItemSelectAll ); m_menuEdit->AppendSeparator(); - wxMenuItem* m_menuCharSelect; - m_menuCharSelect = new wxMenuItem( m_menuEdit, wxID_CHARACTER_SELECTOR, wxString( _("Find C&haracter...") ) + wxT('\t') + wxT("F8"), _("Display character search to select character to insert into text"), wxITEM_NORMAL ); + wxMenuItem* m_menuItemCharSelect; + m_menuItemCharSelect = new wxMenuItem( m_menuEdit, wxID_CHARACTER_SELECTOR, wxString( _("Find C&haracter...") ) + wxT('\t') + wxT("F8"), _("Display character search to select character to insert into text"), wxITEM_NORMAL ); #ifdef __WXMSW__ - m_menuCharSelect->SetBitmaps( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(16), FromDIP(16) ) ); + m_menuItemCharSelect->SetBitmaps( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(16), FromDIP(16) ) ); #elif (defined( __WXGTK__ ) || defined( __WXOSX__ )) - m_menuCharSelect->SetBitmap( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(16), FromDIP(16) ) ); + m_menuItemCharSelect->SetBitmap( wxIcon( wxT("char_select.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(16), FromDIP(16) ) ); #endif - m_menuEdit->Append( m_menuCharSelect ); + m_menuEdit->Append( m_menuItemCharSelect ); m_menuEdit->AppendSeparator(); @@ -138,6 +138,15 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS m_menuEdit->AppendSeparator(); + m_menuItemComposition = new wxMenuItem( m_menuEdit, wxID_COMPOSITION_MENU, wxString( _("&ZRCola (De)composition") ) , _("Toggle ZRCola character (De)composition"), wxITEM_CHECK ); + m_menuEdit->Append( m_menuItemComposition ); + + m_menuTranslationSeq = new wxMenu(); + wxMenuItem* m_menuTranslationSeqItem = new wxMenuItem( m_menuEdit, wxID_ANY, _("Tra&nslation"), wxEmptyString, wxITEM_NORMAL, m_menuTranslationSeq ); + m_menuEdit->Append( m_menuTranslationSeqItem ); + + m_menuEdit->AppendSeparator(); + wxMenuItem* m_menuSettings; m_menuSettings = new wxMenuItem( m_menuEdit, wxID_SETTINGS, wxString( _("&Settings...") ) , _("Open program configuration dialog"), wxITEM_NORMAL ); m_menuEdit->Append( m_menuSettings ); @@ -207,6 +216,10 @@ wxZRColaFrameBase::wxZRColaFrameBase( wxWindow* parent, wxWindowID id, const wxS m_toolSendSource = m_toolbarTranslate->AddTool( wxID_SEND_SOURCE, _("Send Decomposed"), wxIcon( wxT("send_source.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(24), FromDIP(24) ), wxNullBitmap, wxITEM_NORMAL, _("Send Decomposed"), _("Send decomposed text to source window"), NULL ); + m_toolbarTranslate->AddSeparator(); + + m_toolComposition = m_toolbarTranslate->AddTool( wxID_COMPOSITION_TOOLBAR, _("ZRCola (De)composition"), wxIcon( wxT("composition.ico"), wxBITMAP_TYPE_ICO_RESOURCE, FromDIP(24), FromDIP(24) ), wxNullBitmap, wxITEM_CHECK, _("ZRCola (De)composition"), _("Toggle ZRCola character (De)composition"), NULL ); + wxArrayString m_toolTranslationSeqChoices; m_toolTranslationSeq = new wxChoice( m_toolbarTranslate, wxID_ANY, wxDefaultPosition, FromDIP(wxSize( 250,-1 )), m_toolTranslationSeqChoices, 0 ); m_toolTranslationSeq->SetSelection( 0 ); diff --git a/ZRCola/zrcolagui.h b/ZRCola/zrcolagui.h index 2b53399..f882ea7 100644 --- a/ZRCola/zrcolagui.h +++ b/ZRCola/zrcolagui.h @@ -68,6 +68,7 @@ class wxZRColaFrameBase : public wxFrame wxID_SEND_SOURCE, wxID_COPY_SOURCE_AND_RETURN, wxID_SEND_ABORT, + wxID_COMPOSITION_MENU, wxID_SETTINGS, wxID_TOOLBAR_EDIT, wxID_TOOLBAR_TRANSLATE, @@ -75,12 +76,15 @@ class wxZRColaFrameBase : public wxFrame wxID_HELP_INSTRUCTIONS, wxID_HELP_SHORTCUTS, wxID_HELP_REQCHAR, - wxID_HELP_UPDATE + wxID_HELP_UPDATE, + wxID_COMPOSITION_TOOLBAR }; wxMenuBar* m_menubar; wxMenu* m_menuProgram; wxMenu* m_menuEdit; + wxMenuItem* m_menuItemComposition; + wxMenu* m_menuTranslationSeq; wxMenu* m_menuView; wxMenu* m_menuHelp; wxAuiToolBar* m_toolbarEdit; @@ -91,6 +95,7 @@ class wxZRColaFrameBase : public wxFrame wxAuiToolBarItem* m_toolCharSelect; wxAuiToolBarItem* m_toolSendDestination; wxAuiToolBarItem* m_toolSendSource; + wxAuiToolBarItem* m_toolComposition; wxChoice* m_toolTranslationSeq; wxZRColaCharacterCatalogPanel* m_panelChrCat; wxStatusBar* m_statusBar; diff --git a/ZRColaCompile/main.cpp b/ZRColaCompile/main.cpp index 8cfac45..aebc36b 100644 --- a/ZRColaCompile/main.cpp +++ b/ZRColaCompile/main.cpp @@ -417,26 +417,16 @@ int _tmain(int argc, _TCHAR *argv[]) if (src.SelectTranlationSets(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) - ZRCola::DBSource::transet ts; ZRCola::transet_db db; // Preallocate memory. db.idxTranSet.reserve((count+1)); db.data .reserve((count+1)*4); - // Add (de)composing translation set to index and data. - ts.set = 0; - ts.src = L"ZRCola Decomposed"; - ts.dst = L"ZRCola Composed"; - db << ts; - if (build_pot) { - pot.insert(ts.src); - pot.insert(ts.dst); - } - // Parse translation sets and build index and data. for (; !ZRCola::DBSource::IsEOF(rs); rs->MoveNext()) { // Read translation set from the database. + ZRCola::DBSource::transet ts; if (src.GetTranslationSet(rs, ts)) { if (build_pot) { pot.insert(ts.src); @@ -501,7 +491,6 @@ int _tmain(int argc, _TCHAR *argv[]) if (src.SelectTranlationSeqs(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) - ZRCola::DBSource::transeq ts; ZRCola::transeq_db db; // Preallocate memory. @@ -509,18 +498,10 @@ int _tmain(int argc, _TCHAR *argv[]) db.idxRank .reserve((count+1)); db.data .reserve((count+1)*4); - // Add basic ZRCola translation sequence to index and data. - ts.seq = 0; - ts.rank = 0; - ts.name = L"ZRCola (De)composition"; - ts.sets.push_back(0); - db << ts; - if (build_pot) - pot.insert(ts.name); - // Parse translation sequences and build index and data. for (; !ZRCola::DBSource::IsEOF(rs); rs->MoveNext()) { // Read translation sequence from the database. + ZRCola::DBSource::transeq ts; if (src.GetTranslationSeq(rs, ts)) { if (build_pot) pot.insert(ts.name); diff --git a/lib/libZRCola/include/zrcola/translate.h b/lib/libZRCola/include/zrcola/translate.h index 0fff5d5..5e5e5ce 100644 --- a/lib/libZRCola/include/zrcola/translate.h +++ b/lib/libZRCola/include/zrcola/translate.h @@ -34,10 +34,15 @@ #pragma warning(disable: 4251) #pragma warning(disable: 4512) +/// +/// Translation disabled/ZRCola (De)Composition +/// +#define ZRCOLA_TRANSEQID_DEFAULT ((ZRCola::transeqid_t)0) + /// /// Custom translation sequence ID /// -#define ZRCOLA_TRANSEQID_CUSTOM ((ZRCola::transeqid_t)-1) +#define ZRCOLA_TRANSEQID_CUSTOM ((ZRCola::transeqid_t)-1) namespace ZRCola { diff --git a/output/data/ZRCola.zrcdb b/output/data/ZRCola.zrcdb index 7845f4d..8ea844c 100644 Binary files a/output/data/ZRCola.zrcdb and b/output/data/ZRCola.zrcdb differ diff --git a/output/locale/ZRCola-zrcdb.pot b/output/locale/ZRCola-zrcdb.pot index 42f0022..fd439ff 100644 --- a/output/locale/ZRCola-zrcdb.pot +++ b/output/locale/ZRCola-zrcdb.pot @@ -64,63 +64,24 @@ msgstr "" msgid "Cyrillic (Belarusian)" msgstr "" -msgid "Cyrillic (Belarusian) » Latin (English)" -msgstr "" - -msgid "Cyrillic (Belarusian) » Latin (Slovenian)" -msgstr "" - msgid "Cyrillic (Bulgarian)" msgstr "" -msgid "Cyrillic (Bulgarian) » Latin (English)" -msgstr "" - -msgid "Cyrillic (Bulgarian) » Latin (Slovenian)" -msgstr "" - -msgid "Cyrillic (GOST2000)" -msgstr "" - msgid "Cyrillic (Macedonian)" msgstr "" -msgid "Cyrillic (Macedonian) » Latin (English)" -msgstr "" - -msgid "Cyrillic (Macedonian) » Latin (Slovenian)" -msgstr "" - msgid "Cyrillic (Russian)" msgstr "" -msgid "Cyrillic (Russian) » Latin (English)" -msgstr "" - -msgid "Cyrillic (Russian) » Latin (Slovenian)" -msgstr "" - msgid "Cyrillic (Serbian)" msgstr "" -msgid "Cyrillic (Serbian) » Latin" -msgstr "" - msgid "Cyrillic (Ukrainian)" msgstr "" -msgid "Cyrillic (Ukrainian) » Latin (English)" -msgstr "" - -msgid "Cyrillic (Ukrainian) » Latin (Slovenian)" -msgstr "" - msgid "Cyrillic BdC" msgstr "" -msgid "Cyrillic » Latin (GOST2000)" -msgstr "" - msgid "Czech" msgstr "" @@ -175,9 +136,6 @@ msgstr "" msgid "Hungarian" msgstr "" -msgid "IPA" -msgstr "" - msgid "Irish Gaelic" msgstr "" @@ -283,15 +241,6 @@ msgstr "" msgid "Latin" msgstr "" -msgid "Latin (English)" -msgstr "" - -msgid "Latin (GOST2000)" -msgstr "" - -msgid "Latin (Slovenian)" -msgstr "" - msgid "Latin ALE" msgstr "" @@ -304,9 +253,6 @@ msgstr "" msgid "Latin » Cyrillic (Bulgarian)" msgstr "" -msgid "Latin » Cyrillic (GOST2000)" -msgstr "" - msgid "Latin » Cyrillic (Macedonian)" msgstr "" @@ -568,12 +514,6 @@ msgstr "" msgid "Quotes" msgstr "" -msgid "Rigler transcription" -msgstr "" - -msgid "Rigler transcription » IPA" -msgstr "" - msgid "Romanian" msgstr "" @@ -706,15 +646,6 @@ msgstr "" msgid "Units" msgstr "" -msgid "ZRCola (De)composition" -msgstr "" - -msgid "ZRCola Composed" -msgstr "" - -msgid "ZRCola Decomposed" -msgstr "" - msgid "l+j l|j" msgstr ""