From bef2ba6f087e3d1315ce8459509667fa0318c399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Thu, 2 Mar 2023 21:27:40 +0800 Subject: [PATCH] feat(windows): add icon and metadata --- .gitignore | 4 ++ .goreleaser.yml | 3 ++ README.md | 2 +- winres/.gitignore | 1 + winres/gen/json.go | 118 +++++++++++++++++++++++++++++++++++++++++++++ winres/icon.png | Bin 0 -> 83660 bytes winres/icon16.png | Bin 0 -> 2558 bytes winres/init.go | 4 ++ 8 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 winres/.gitignore create mode 100644 winres/gen/json.go create mode 100644 winres/icon.png create mode 100644 winres/icon16.png create mode 100644 winres/init.go diff --git a/.gitignore b/.gitignore index 4066bc3..f6233d0 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,10 @@ internal/btree/*.db # binary builds go-cqhttp +*.exe # macos .DS_Store + +# windwos rc +*.syso diff --git a/.goreleaser.yml b/.goreleaser.yml index c379886..b6c335d 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -3,6 +3,9 @@ env: before: hooks: - go mod tidy + - go install github.com/tc-hib/go-winres@latest + - go generate winres/init.go + - go-winres make release: draft: true discussion_category_name: General diff --git a/README.md b/README.md index bf0fea1..8efa36c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
diff --git a/winres/.gitignore b/winres/.gitignore new file mode 100644 index 0000000..87e127f --- /dev/null +++ b/winres/.gitignore @@ -0,0 +1 @@ +winres.json \ No newline at end of file diff --git a/winres/gen/json.go b/winres/gen/json.go new file mode 100644 index 0000000..415e6dc --- /dev/null +++ b/winres/gen/json.go @@ -0,0 +1,118 @@ +// Package main generates winres.json +package main + +import ( + "bytes" + "fmt" + "os" + "os/exec" + "strings" + "time" + + "github.com/Mrs4s/go-cqhttp/internal/base" +) + +const js = `{ + "RT_GROUP_ICON": { + "APP": { + "0000": [ + "icon.png", + "icon16.png" + ] + } + }, + "RT_MANIFEST": { + "#1": { + "0409": { + "identity": { + "name": "go-cqhttp", + "version": "%s" + }, + "description": "", + "minimum-os": "vista", + "execution-level": "as invoker", + "ui-access": false, + "auto-elevate": false, + "dpi-awareness": "system", + "disable-theming": false, + "disable-window-filtering": false, + "high-resolution-scrolling-aware": false, + "ultra-high-resolution-scrolling-aware": false, + "long-path-aware": false, + "printer-driver-isolation": false, + "gdi-scaling": false, + "segment-heap": false, + "use-common-controls-v6": false + } + } + }, + "RT_VERSION": { + "#1": { + "0000": { + "fixed": { + "file_version": "%s", + "product_version": "%s", + "timestamp": "%s" + }, + "info": { + "0409": { + "Comments": "Golang implementation of cqhttp.", + "CompanyName": "Mrs4s", + "FileDescription": "https://github.com/Mrs4s/go-cqhttp", + "FileVersion": "%s", + "InternalName": "", + "LegalCopyright": "©️ 2020 - %d Mrs4s. All Rights Reserved.", + "LegalTrademarks": "", + "OriginalFilename": "GOCQHTTP.EXE", + "PrivateBuild": "", + "ProductName": "go-cqhttp", + "ProductVersion": "%s", + "SpecialBuild": "" + } + } + } + } + } +}` + +const timeformat = `2006-01-02T15:04:05+08:00` + +func main() { + f, err := os.Create("winres.json") + if err != nil { + panic(err) + } + defer f.Close() + v := "" + if base.Version == "(devel)" { + vartag := bytes.NewBuffer(nil) + vartagcmd := exec.Command("git", "tag", "--sort=committerdate") + vartagcmd.Stdout = vartag + err = vartagcmd.Run() + if err != nil { + panic(err) + } + s := strings.Split(vartag.String(), "\n") + v = s[len(s)-2] + } else { + v = base.Version + } + i := strings.Index(v, "-") // remove -rc / -beta + if i <= 0 { + i = len(v) + } + commitcnt := strings.Builder{} + commitcnt.WriteString(v[1:i]) + commitcnt.WriteByte('.') + commitcntcmd := exec.Command("git", "rev-list", "--count", "master") + commitcntcmd.Stdout = &commitcnt + err = commitcntcmd.Run() + if err != nil { + panic(err) + } + fv := commitcnt.String()[:commitcnt.Len()-1] + _, err = fmt.Fprintf(f, js, fv, fv, v, time.Now().Format(timeformat), fv, time.Now().Year(), v) + if err != nil { + panic(err) + } +} diff --git a/winres/icon.png b/winres/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9725af68a99a4b075d7b4bee8bbd497ed658edbb GIT binary patch literal 83660 zcmbST(|;yBu&!+zZ*6UDTU*=O+P1B&wzh5C*4BJ$+c^7Oobv~qi~N$@B$G@slV|cI zkxB}Zh;VptARr)!(o$kSK|nzN6+uB@p#EjLPG#mGAS58tV#2B(Sr^^VS$b;SOkZ22 ze3z<5Q*!-ef6wBG^hr5oOdI7l@cj?NNtXH7AWLrTW6CA#<`MAwn>uLQ;xSnZGl} zAKbjQ&c9!)xBhM)%XO@L``Z7dqH>_0q~mYS|H z(C4#P-4cG)AsMRnV6xf=Lm#L9gnRa1y?PmyQW1BLkNBLwb#)8BbMva4Y~;$>2xMW2 zb8%yP6OEMyQ()6|4<=I{YTB$rfApm_(9eWG0 5eYdG~s*e6eb2wMZmhD>3> z`sO+h=a3|=M9ku&)9&(m ;a6DuwNJ2xi47B6zfc3O!35f2!zQSgjN&V^Y;NR1_%^Jm}PtELL+$R-->pfEN99n zO!Kc*zSB8@cppF%Y9t&pE6R(KDq7=;n4TAS>nA_M^-Hf{cHF_d)yMr$KgDXPgi0na z$7h?epWHUYgxebWxUso`kG|T)VY`oSuh!#al$NZLg`Eq5)%8`>%0* r*mDjxFkb_+K(PDusr6MB-BkDCt5Xxh; zg8=Kz8q!Bkm`!Kq`$icNY }4f#?5{T_`k_tES0Sdq{)Coi8xc|5^peu>-n2Kf13 z{Rn^XPk&(TJDcezVVZ0(n~wj(XjkdI8HKosA+{#$L_!I~r6cwZJ0uX6r}vzX3oZj{ zL5r3rmeGtIR)bGMo5s&=GI_CcN3Ru@*oV)E#YF7q@dq!MSoHqqkFn;}FdK}p|HVB_ zhJ9QvugG>-E0a!dp}2M6>NT;H!2EpYI=Ihj`?K%dv6t*)du$ox &stTD#|@1TNiJMVL~ ;;D}^AJpR-sz37*{tIGFJ8sp{QNU~^5qj` zy;OX|3(4O=xdNJ#&@316-oss9H}lCnCNAJ=#L8L|&1Rj2zkS-la5UoTLFfu> qQ(FTn3Ds{ <@T}|k*g8B)16%nhK_$VUB-YmE8pqD$dXjbfKR$i~gXsh>SFfOvDd2K3 zhl-cxB-`EhAK-((`2@#bouaZ*!i(Rzfov%!lV8fS(P2TkT0(QR$>fpwVgdPF7VVLb z+ea;~rGNYSWz>t3!}X)xT@=zD{@|5cEKH0PWPxACh2AI^soSajmZ-7v*-RYJMhU`{ z!<#Bs^02yH=gvLqa@1LSSHOJMWEo=bw8PePg%W)?ui%#tALDp9;PPOc2SWa#T*J4o zUg8ks_WrS)kAT3q<#PB(z$3^uHrJ3Z II6HA!GSmqPc^2yg!A4QpTMe2$&e zv-XFzy&~^4xrZX76c^^RrsnLC5d3r1QqoiS`yUqw1x8H!CCh7PZ}M3;7g{%OzuNXH za7KuepA`2j!gD@LzPf$VhCcu@r(-IV #NA92|z@<{pVkPfIF>yyi(c0npec7qK87tm94}MFq_Qr z`5U)!_x*?1zjuVnN|_ab9*xb{kWOJ`eFfD >Gs~E;|DVimxH=Z!CiAsHe@rXjs;uBDch(R}ATtzM~ zt^WG82Fmpc6Nr!kAu97g0hW&Y1Ni=o!>a8@8DHDp#Lw^E!+191>kq9YEfns6Jd^KS z-@zwO4w ;L(sQlgf{HYh B{P`Rg0|gep=Eg)^P|v&JvktqZk(Eo7 Q;niQK_ zn0s#6L5MQ(>#a0oxoSzQxEXxB_YgmR^ch|#Z(}Q0#a6*Xj?itY7l3b><_6@_*t>gx zU;OL0@x%Z5=Qw $r7&laqEK3ycFV?=c-Wg&UCv5UnSLFXQPHjZ%SQaEiU@ zUTDxqp_)UjS;W;FYiRCNxirU(N-G64)+!LGG+TbM!gNN$9}K5+9CUifr84OFW4yY( zft`9CzkGN*v=ZOV*g(6)2RNhjTEBLAk;-?@eGA PoG#E@Tfxf48VeuIHYnzcoH5t;NiOt3 zyNf&f$GEkzf)}>dkj|#C{lXfG*UAtXf#3hVZ(ua^4Jc;orFE2>d0c*V1NF^{MA*#( zEayx1HmI~maX3v5S}7K>`NAsJt~YS$`luJLu#973WX7b(ir z=aDPq*{dNaGXsqj{$an<<=2A4iwVBHv%|dtUmWc5I+^EY>2~5Lc Xl|chDn2mnCBs^ot${*b2%<11PHYph6!~LF`gm}&m>wbT%i2hZj(%ap$w~v zT0mjBeH(XjTY8cE%JA7{q#*-$*p1ha39CL7Q*%b&0 U zj#-N?y|RJkP7O}l;n1T{$g(n`a$;7sA(Qf 9cGW91pdi?^V 4l1W{S5%{RLP3c$OkOI4p zcaclgG5P2L7U2>HyN__Gup) #x6n q`hxc2RBTzYkluV*xxqD=h Ca zQpbmn_hMCnC?b&0nqONhqmj>If8;axszjf+4Dhpm^V7&!BpPyJ0-4B%@D5UNVk7Xv z{`d&Q1{Id*VKTz(Z!HV@HPMbWU9}?aM?cTwVsZe#CY=}mLL-1}#GbI#Ma(mZvH6I| zf*TNp5gZF0s5Nw~G!rKjrJuh2i(le0Y8XG-$NumXrI~{)ZIHl5+DCCFWz-Lc9n@SJ zm?2~SGL4LOqKrHXe_6Zc@@mQA&1Q4_#qIa7?lp0xP)CEZ{q`p)!KaLNhRa$jXf#*2 zy_hbR@BsZ@AJux5l|c|hjwQLw)RX`4@Psq|M5sxh_vG^<4j+E}w;$rSfBPjY#tZaL z2TZ?3wf#YBgkgKkI&RqVG4tn0c`nEHr%$?g^x+;3AGSc5kV+xX_t8BX;P_Dszxv@F z+<#{m)A0;0mGI`Wvf-p0ENF1)cq%E;XjVZcBWDu04&xk%F*%?0@TA@2b)&q yZ6tes&zia>>ATYX5mv}yIya#c Wvss=L?dBo<4#+r`e+#}E9 zxDX&vXvO+ML`f;lmK55}4+ajU>A@pKC}Mz%=&uNvVa3RZ$*0nwdVol1nv5bzi(IS2 zg9Bt2MNB@sk8wCduiM70!Uo5?QlSK~jYlKNdh-!alA*4* Qy -hZmDb~x?=-Gym zcBgeAW&F*ZEquItfQ@Q7O6tWhBeL|kQY)dfpFwA~kgP^jLY)No>7V`tSO13_mfvrE zMu_N~*0Thxi9fa{Dk3Eih8Eh;isAK?A44K)kz+xt4bxpHB3{ksd|Z$RAY!qR?WzmK zr*5da4AF#9+vYuLr4qo3C>}#>R)&>n(5f0XSwj>ckA@hwNBlWXS|AW1PZJ_no|J@4XUI67 zV(im{F1iPOOolUl?`*n&>k4$94$#``vbT}XW-(YSxg3{sB~a>ev&OsueKqZPK3|~c zkK{V!N+@Qs*zKMuFCdJbzq)qnZ`i1mQO##@@9;F%Vr;iC(|u6hW}{Z-acI>0KwiLP zI>O_3pW@`;$dY|wo_Ca)va|QXgaFaLkM@av=EBP3#Nv2c$%J8y%hC|8=(c3*dY<=j zK}f);!z#X*h*W_^$rNw$v9p~*hd@e;gz<&50T&iajgE!wI3gl;(cyypmt5&(C&c{A zCl~}i{E3fdt}HvolD*do?|wAxp`6O`hNN=cc(Fj8D|`cD|T6^LLM1c=6JP!WpQf zAi3*Y%b#tNS&hHBGaiAb<``Z8PmXxJ>f=tTWR9!U%%AbawuJCShw^j>Ps^~Vxv z=LF#JgTAK0rqtT&&lj8rAa}e`EFhaoqcisTz9 zVT&6y{d@Bs%iFb2B2>%qxs~+zT|bxOf|7utCD6&B3f7{+{-K@rHzX29n^+1(ClI5> zOLz_DGAzq&ml48f;opDzU95J~m>joo;J2}wtyqdnyX5k3!u$I<2eZW-RkHq&!cSwg z>lqi#MvZ|!8eC!@q&Q9nUEDc7z^%#_n%Q(Lp+oK|QD?1gtfEpbN|)cn_VQK+gFbS_ zf}C3y1~L9bimwklU3Sk2 i9< cE1_b}udhX28ugBM9<|{-Y@xrHV7{26 zo~>AAKYIrWq*m%U8g u|!#R&Ik!<6A>_Az6D }FwHz@`4i6CI|}f$ zUM*taPkHS#sT7LYEOuL`ETDAWYqd2z=^eAjB+e*ud63ehIS7m8Trm$v&n^%VBE(Cl z(J15$;Ylu&$8gkzGtA)qx85_0Bg~8dO(7108?lLIL-oCGWjCU0@dhT1UKsm6VkeFq zSKStGO~ko?DByx}0AaLgw2{&`Y~Ogy1+qv&lp@e15|L-GhknFYA}Y-!Kf>13(QeWE z{) (x4fK{i#K=b}Q{c}e_jI-huvsl)Yi&glXr2=` z2H^*_Xo@+!Ojwjd6sbJQDk)G9?e!rOk}q^Ra3+&)UB@)?(ru8myo!Fa;i`2w}; z22uD#$Np&t)j|>Zj3?pD(P~A;G^RI0wKGDaF+;2LYOlHePO=0AoaYEsDUuXVxCpte zSU*crAT%HFXfop0IYGb)#nn=gL!i0xde$p7>~%Vr66pw4STcE(yd0kNPb4@ w2`FP9(-TG@r+DaX0|WK$(4HTls{WE!Ru;=EoPs zFt@ MEzH{;L1=-lQjZSc}AY+!F#unJ@zqJQWk%PMy?` 9q PzbS7ETKOc^LVr*uOHnsy{1;kG9wXlI1(~3lSS+B z0AiHIz1w%9L7oC}C1OtwGR7#1Z}orjwZahAXw#EqA-2y2tFmRH4aHe;4u Vs?mNZi zqp8oN8`n!K%;vjP8 EKDkF9qa)FD*q5&7#ICq)+n{zEarCe=& z&}TnBIc5AnF`r8)faqz(UCTt4E3_0tGO`hxvP!n<(&stKTS$8;bOu9Y-83sAU6ZGO zN?sPj#T1?CgyFdKUK%c%O}p@^F99JkZkjOycaM%0^>~1KuEe)b_>1!@0@`DfA%ut4 zsL$7 ia{11zxRn{Nc4(CWn^J_^}5V$d!5E;S?gqC zdtLL_kao+ 6H;~~ { zPNt| J8y)aISPQuY=N&%TikE2UmGThRnmn%o3n_15J8&H*dG%Y1JmW4 zg;En0QCX0B9m-xVwkjdV+#VKKpfwxu?-q+CTX~u!M2$&8UF$}rf}?&Pr-Kp0ib?Tq zS61;=_ed%l>oTm%<<~U|C4R2+U~vXL!wM!Xl?1OT4JyqQ5Tt JrKtVFSMI)hkyDrMJzOUe#Zq;g4vrjL=-_< jc!6Tgd6h6Y)tqRcuyjC2a= z%_iJT8mFBTq{;ecJO%~zrwc6I6t>nIF@+X))1;{&-qME_RA_w*EmV`{CRE6k$4p zD{D=eu~+ZZ@6(o@YVQRvYgl)p*U5t$i&Ck`qtYuUTs&=e7`eAzEt>(L3H4zTw(;Mb z?`DSfgEOX3uIY5SV33o}6;R_+Z#Y89%O{jZ$gVe?sxuq$TFvK@+=RS<5q&M>ebw>> zgd)KG!xQ!*$P?Nq)iGX7(VzOU lA$~6 ^@dS~wh>Qv)7t3n)f&RYOtl{|S z6V!`q`21I&s9OvTWgK)u(CoOVT^WeyNOWC4wEqe%qi4WMmX~F}NB?byX&Mgy9FL2` z0cdyMjPA0NbC!BgH>H6?=6%K~5+)NG^DL~z(x^WZ3ntgda?R-Y F4>|v tPB`wQ&4-bgydphHvlSfs{max}9l_kOCp_D)6Br3Tg{P{#xb)x7z zR92YEfv)l +J zCAFBFt*2vh0vBNYaj}d*Rv9FTVK$V=!t_*&bK}#9i#@6;YL0bHy%cFylS#GhSxhm= z*FN~^r^q>Jv?o1|HS;Miicu+(-K3;nkrPzyUI*@IhFm6#*;3MJ*D7VKR?E_IYas}& zYgX4pZtJH9Ut!HFBTr32yx;-{R7ofmv01BdqRJcrv^wL&7y(tNK_)mO_|d(&j b zjhiz3y~&8-+r}I#-BnU~6JGDh6y;_U%dCU$;{$kw6?9td=sgjV%o0Rvt<1*@y=~*a zQekX-^n7S}ZgF|B++w4K&7*sc#|0{YD6x0OrL^3gXyct@kStd|@^J0;$a7Z3hERz} zG03+FJih-B;=zdH_S10>&774Tr?|h6M|!2k8F^At2M4=c_ovqom3H7dxW2iPsFRC? zdn^-hgXx&v@SS2!38yR_c4l+Dw6zwGsg+gI7GgY~u<$=)Wn&wjdK39iC~IOAV%$GI zK_#E#VWg}8%%xcYW_aew81RvuUpf2m>~KzS{7=9e-Lv3%X%=qGfPyEJkEXLd)awI` z7Bh?%Q%M}6`Yvd;Ak^zfSyFX?;`j$gEyH 6a>97PSXY&|NeWQf5 z7e(P7l_RqX4o&0JQ*IiCjV4a+K16e66L-G6X9=U;dtqEQ?eexB2AVL}BDsd<_u5z} zZ&%BTMtIsv ;lnJ)%&@C>|qNf=g+STBo?u zY+9|R(HflDO!{Z`h7OY(?u?_WekuonQ2Y<2Kd2q}wBJMC$#D2_p4UKvJ6=rCo{b^G zz<5GF*Zt+WX@whwBHUDfy-uHd1$dw;%`PlfaWH5hC9DuCS>~kVXe!OGCuQs;%9!MF zFo`K7XTWkaL-pz=T8D=agE_k6rL`{lecDQgF*7f1O_*3??SWcG%or@o(T|M<)6XEP zY8mh0A4)S&JXLW{ym_8wF|kkdy2zc6iFEXLEa|7-W0N-69s~8V4@Wq7=P@#li ZWUWb#HlXt1Ee{i(NjX@N0bo?nZ_--|7Tz5z8dZO6fZe@OOa*S24Y*2qx z?ivLlZf>l~{(Wl=45nT<+z(Hoi5$WGj1@NR(1@LbtnhxXkMUy047!r-=InC_<8OR+ zgn3TnVGA04HCfJ>(o0*{Tsen>lNMHsRVzat{jGmC59T-=ce$x(sfK=14nT7tP`R{} z%_E%-(VzJEs@3IoYbw8P6zl8(EY2Zo0ir3wluIBlpf&8r6aZZ(g$UHx1O>G5y8~3$ z*D$8a&{s!*S7cV z4A=Sz1yIAHMkxypGF6RNd(ijhsr%k?UVBAXP832_q{r z^hfa99n`XA9-B=Z{x>(8aIE%b{%k_xK`{S5x$Fhk p;B= zxl9W4 !vtg>LOpXj7gZuCp*osPRYgFqBZW#Hu?j1;;&G>k z0--I78FcRMqFia<^G`pwVsHiQi3wt8{)wyBq@|C3r?C_EZ-vklW45Ua&1d4d=l|t# zVeP=Mbe_?RLg)0)dI0g8v+LF8tAOy#dm<$uk^lg8eDdRuQ1S{G&wV+{E1hHHADL)! z{dEb+aa KE}0` zW;BTyk=Z@7>RK|Bp+RW9Pgpqzp;(mE6_E8$@c b&ubLQI2g1Ue{d#Kp^Sp`id=q9 z``uPF>p;08*^~?cXcE$NG=>|x$gbDWdAtW_vOs^lh^PIGklF-Y(V)<{AFFq8G@n9; z3MMd)$^fPl&{oXJr~SN@z{N}kQkNd3erzGOt+j2(Yy!nIX%lr$%Y_UPJCEgOoD(pF z%=pr|Gr&f^fsWrtF)bmvMCy@VZNMRpdsTuWAsn8zaM`PH>`$ybH`Z1;&Rt@O(agu* zpo7QVLp {vpA?rGPKEnGGi!VW3HJ|@^2MGgN zJv)XBon%a|t#t&ErZZC5vfFB5I3HuHT9=4J+shQmZ4@RKE?Qg*LC5DdC$YAt<1l?U zDMBc~P@$Z~LA#A+wydTGMNh=!I6@-&Sm0ZiH}Jtz!L7lR16VF~qmMA>BSEJAhFN&Z zZN5+2J-k-T^SpueVjZ6zJ(9y(j4lgJIH|9c!i2R_6(2u+ge%Q;=>@15o*IK3)yBJ= z&afCwQQTUA|L74$yGO{ZH! KF|0>$-X(p|M{{QA&1eVw!uXWnPc`w63WMN0$g{mD-jc Sc+}s=!|ow=2gleOx6xhtnA4Dp zR0?h`1!tKBrc-!J4?le8C-~K!kMQ5W^2f@J7d(A;tx=QY9Ep+QT8Nj5N{m5C+I6-B zF?zj-X~KCJuob3{`fUFxs)a0P$`>lLes+7FBk(#j(~8FEpO8zE>?+&aPkl*PinT)3 z6b~}RG>#s1v6?S)&xE~UwOdZtl?vzhqu0NI`a1CNgG27#3+!-3-5 #MXn7YHB*iX3k1UD664MQ z#kD5d;XMrQ?P25Pe}wz@9^f0_{-(7P `?gc za$JZ4IP026H)a1kRBn&O G$a)iy#}8)+Cjkms&-6Ul&y2p9hjS{pU}bFs0CGT$zx6>64?`L? zzF- 85Ud`*m5%Jp_-*eC^fF#_~Vu#paCV7DxS1Y zvE67I?~@pg=sY^~n6&yRU)n@BpMt-8#LY}chwbP#lyI9fn`dLW{xKo9a)DNKW!^7z z&dTx@gz7A`Oy5~w`uQ9e76RDGsq;3LvFWiXib*tm l7+j!&t`^rUgkQ-;<1P*V8yqiHOokJ~K zVL(tLS7HK-d^*d3A{rq2!`mNYJG076!So+>4W?;cAC1d?h62|ej0~nhXh2K guCq)2J;~ K)+*woK$Azi=$iMkXuQ$~D|Q+{a+-qnMKjO9B_^1}0j=al3~V z?>a;wjb*EgS*wrG&6>)@*&Q0E>y8U|B4uM7t+;}UnMDmnj|BiCsbZenaX|{ey6c$h znh@CYmo1?%V%-*&t15o2fY{6Q&fmO)Tq=*8BhdH9sANi<{>-dYW9~Ka?|t^@OB@}X z;Fa1< 2$VA!bGyU&f~WSR zQq;O@x!Bf4Qu-^he&>`*MHKVvPQkfG(7CeK{^0Zw#asq!#acvaqFm{?d242&Aebjvg~Oi@1J zN$V7^UcM|7zTCmcg&;{{(i^~m3$I#)IGkd nkNil;FD2^_Y%Lr6L$kU`7@MoPijNtDbc z+AL4C+mZ|YxP6F~QkgOI)5YB4KZp`d#`g-X1fZ>uMC7=VavAy)G%H1`2p~7GEdMQ$ zPs?&;ni_d9WvcOFF3np@f1Z&;npHSo;&{-*f4Fsx%rEkUyKqA80(3pWuD$V>RVk1X zbrdpCzlN6**zfi^SxSn6?w`D-jz7S9sV) !#exX04992ZwlJYnvI4d4?k8 zB@{WwbTq+ovVc>_0znUxC&wsUU&C}Bpa^^O+JY~lus;^{D6dOcUn616kbFI$0|F!R zu`v1hdH@&J3}hZ4U{F(bClxFa*LyqK-@5%VjK}nGW1@c=d9l{dwCa8PCvQT`^T;?9 z&(2r~GoA;xS+N>11eg9gy*Bc5fz48ttvO}%;e_mV5?B3XG2@tf83fVr4-%AMY5L)x zwA-j<3dlOL22DaVrG9hIQ`eP}+pKvK1m7rLbVJ;B}>vU#ME6bsH|l>5>#=Awv(}$8a_?WzI^r zh$Eu(vhe`MQ<7iO{m=}7)pC_*2($-7Sx$6>=@z6gCz#DKANa_YOYA|+Pr4AZCED$N z)EO9y_0Kk@MtU{AONDmkMWlR9z$$b|AdIu8)t9hCx998uT-<1|FxtJkBQO+aEmFkT zVlAQ}V~7$uQA !TA`o;he8+7A~SLINh|R=)+ICJ=7~jH0yO@T;X%mYiLO5 zWHD!aei#uEt8L^+P!9qYWU3g@D0NbrM9kXAm(d;%B`cAL`1r$Uf%&?KHHpF{B2InM zYAMLKW8lRM##siK_Q%`~PM%578&iCOes2`3=*LW1X#E>$>gW}r=DAdr0OQuf>>|CV zgereR=L2F}Payt4|Nh6tQG(eWQDzj9-b2FdB^&4y^;3kFVu%*cuB}>sMf)=0^4|XJ zb9BBUqR9nw&{LdP%oX9(iZT2?H?+*B7`EFec}3nx%TS=4%RK{&uMc_kqv@P8)x`T3 zEGYg@o2Rx=13Oc$V9!1|I?6hg`Qpq5i@j6|ASs)CMkd<=j{o 9 z^w4Nj;E_iZ0%;ng>VWYCv{rfcHX?>->BvafE;vsj*!!WTA qWoNGTejQr6U@ ziqt7*^CgD?`<*t=E#Tp$)?TCYP5MK4xjeZ#z;uSN?_<~>OTI??ImC;3CKqCo*}{62 z749KQ Tp@atz!JKKWFj(_c0pGc5@L~A#)f*A91aPsx?wTk5ks?j9{2H+!wI5 zu#USzy!kh8A?1*;FS-6tWxsr_0+Gu^$v+<0;i65HU-OX5aOBR@NbY<#ZQT5r-)H44 zs1QapR)i_v>$Z`1v&g4i-Pz0Dgm&re4FjX`t; J-qh=7BH1wsnXlimp$ z#S-J*m$CRh=4*1FfpF}H64AFsKa#X% PK3%B+CgtRVpbpW2>LVM z@EMxEce4Jj!->+)aD>%ni6O(ZM%+3qLLL`J-)GWpv?m nOru8Ao SY8S3!a_7 NwhZBA zGMwd)b((1@wOq6bSqP@84sqP?qvGXw=%r2$>P)i`B69Vu7%;K-IN4~&>v0V#A+TiW zs0)r*Zzv`{9rkcK>S3eW;Idqh% 6>a*gQEo9rSb?PKQkcWKCW~|uCM4t`GJWQ1} z64t?N%Gq}v!tHjB(d0UO$TVC`U*^b4oXIIT0;jzJxAs=cd8s65no%mnp3#gk5H2$a z!-}&Bs!hq+m134hiW5wl?%P*v!TLE6#QS*AwHm0x#3lq2m5vD0koJ)EQh3ttME5VW z;0Y{fLJ=_;yRu1a(Hnu>lwNljozu2rmXU%Xze^~5Lu_kjQzGZz2D6!-554j2HsgN? zA%L;iCXN#(hChei&$x*8gU~`Ctn i)ra1FUJ>QGv4Ea(? zWp_0}rCjLA)W^6-U=lg%i>x{keL9BpGRcx7A20o$T2%9%2Y)ezKa&$@p`KZwSODUk z&(X#Zic3E*T=!wbXK#)~Qj3(Ea{oifv0wZBHm1udHfWfpaH8#JuZ@}=KuW+>Zm(HC z1-aGVbK}x*#O`r{AkuoXP_Myk!rhbvS0+I}rm$xjpq?*sWq`mz#9j=Y*mUIBGV-cU zJ3VAGF4k7c=BZNn5U9>SFO%YKzsQA`3Y6YkOo1makpduUwefUn!D)fASHMB9C!3$N zg|T9DPE;~9nP|vEtW_#F=yrI$W%AH^Nb@Di`2w803{&Ra0V|!8qtlqk+WRkVnByo| z`Diu2pj9z|g)K1i|J3`HoEREHvvvL HF?>?+&9kx@f)jh)dLAN%2hgt(<~bXW#5SD3bLRxOxH90m5^eo59t_9U z>rAr4sK01bQ?zJ$!$*Gf)5p8m{ruE0{dfXMXEMlD)j-XdOouo =SfK?rsl zR~6U~CUIljKR%zcRi)bX>0p2qb&{oAlUxi{la4usu)h}E6hju306=tVswS{SvgBWT z20AfH2{`%@WwW86z(<1)HY$0x!a)$_9E6A~kI8&4tuvxnKmJErZ9@K0{7>0>eeWd1 z#NI;|mfDQzb&oqoD7tCXN)`T|eoy!7@fdSq#qj}7+g*0?D-{ooYLRmzQUOp7KweTY zYheJ?`cbZfuG@1-LAXd!Ma6L?a!~R9({j_4;pr^EQD2P()1JEiqm(Y?7$~_}D-=P? ze%v2$V$lXgIm-ZE=)l`7(>P}Y!wH<(0-bh0LC$)PM; d2syjkq0G5oxBt;sSuve}aRc@#YFqhAvn07ftpz&g)DE-A; zmKg~`P0s;o?Dbm8gHp=YHlM7V(ilx<$T(@#3OOA2`ew?p(9dQOAP*O{)jHfpo=OK; z^v4JT7sJ6I?m^iP*2KPuVE}}^kG1tlHU@-Y{Cu{XoA3~x=W&5RAbtIzac80 g^-38jHxuPfgi69Gu#0Bgp*Wjw$FUMDR#kv3c5667 zCX+^y1XYC(1Ui}q3p6R#50|)ivWH9M2J(fX@rm0sH<4mzvcQfiJ1&>pPD>sYT~2eg z%)?Egum-d$Q>xB*X@(qY>NK9 !{|^tk6Bz;amn)KLi7jq~gk^vN8`4 zL`qZ-nt@8L5gvm8LF7SDHGpWtIqzb~V?wy(0W83PvGhg}Vi{uA?je&c;pFf*);|?_ zS>c(ztDm9H8|epQ=L8Vf@xOkLKkFrbkK lR6@Z~ zX^>(^dOcZw+Jv-;`jaVh`%(GHpDuV~I@U(g3PsNR56|eUu0Q12_j+( gq*?!Z%L$ sqA}&*Xxzt2p~NA?gZ3c`!o^ChA>XGu1N(jl^?W{}cqgx>H^7oZj}+!&fz8dj zR5)})%<>!ZA0jZNQflNG$n7(lOnGSQm7Q&d7*oc8*q7*K (Cn?Yc3zqy=>}J3X`?yw;LY!Ne{eh?s|^m5e-o z{?|W;mnzF?Jw(+dLL4pIxSq>d>@*4>LK%3^#s9ni3zS=VR8x7(W=pI#nrJOoxzy%4 zDP&!b$6Av@AR(htTX*R5@0!IT9=G-&f)s;&NT5RH_lJs1BVb@rXzs~%B#?*xXwQS1 zRS4XYPCJo{uI^9IOPmIbD&SICpggOiUI(vU-$u2*ir^$ d|$BpJD(w<~3rq5{gdsxl~ zC^HRs$jZ{E5#NJ8ClZl>>m zmvcBgSu$S&Q?`#r${m*`h7|R9x?q~H?OIa;cVb01+5Jb?LphF{wI)(&+1Fs)>rmcv zdKO|j^0D=`Yk0E!5Sh+^yFuISC RI`R( j#518&-+L>Jrr{# z%oY*lG{v#|C;NEo-lzDowa@r;%19G@cw@1Gw+96|zM8S`+(^Ki&LdC3Nntt-P;j#t z-95%&IKyB*MaC^h%1PZ!0Et{PZYjIeE>4DRh;Ye58W79Sbj}Gr35~V 0)`nAf#vJ3y^3x>;Qj-RYbQ9arxJzqv2y;NY#a(KmRb%Ilr^LC4t$?0CAG4g z=tIJNIPBq4t%>$zi2c?Pu2dSx<%??iZpfa qm zJ*+h8!J=D?qz1L06%`YPG=rsP=$FAkWbs`zV(^G*;`VH);^~B?lm_TX#HWg%K(e zP+A+(Z70JXE;m*of@PwR6!NpAaD*xWUMho1-otQ2`~+$9Iy!f15n?f(V)OcCEQ=`w zqX}hEF&Ox<{4;FBrj@DL<8h&m34->L?Dlo*g|Yr0>$9HsaiNoeaGvH%d=nv@ESER7 zPS$2ko=26`%*3A$KF0V|u*D5|E}x5Kd4kJVcjWjiOWANuyVpm~ck!K#*YQH-1#G0& zQE@9cJ?P@`qo;Vfe}q ?VHGHc&~W);1~1;Y$^ain z)!m`$>V^~0kuJK&z4lRcKvw`99Rdhh|0nowQI!Bs`~inSq_plH>|(P}La9 ws;?(k!J8tzu(7vzEDY02b1Lj&FwloO2m2@h>a$915%eAHT%>{1r@$T z0W@(7P&ZhLo{hD zd9a8!T`2Pe#Q%WFlH0hQwH(BB&Uk=OWYBAO)IN%GS^A4GA-KsSp0BonE;@;&*^G2f zA!??&h~okYLCl)O7b)r1JR`9gc>zgx$YMva08;etFaGK+ A7kwmt$OND)ITfF8=WH%gA~;wl gJqS4nTIe zv63KxPs>CfS;78ffJ@sAG;3AH(L0W#X6S|7c1(h&ldx2>EVA1zlXI~;wi134r0#Ic zWx7m8j_U4B$J}A~$?iR@W%H<3s_?R&dL9xA+#U{4t7UNM(iL <<%Mj@_*0(m`Wgp5Iowy1X z6VAgh`>_h|Xt)P?0Mx2&?-RXCLNyqapvU9M6wP7@cSR?bxTh{hrdXTGb5^gcV)|qc z(^e1J^$Jc8Pf)4X&LIauJk$;2p#c&!c+s2m5Ku(b2;)UtWA!e;3HbLw2^K#>OX=z3 zncj_k( sHa%G{)({uMUvL3RmCLZU(997~lNvw{iF1eu2OXqVrKl*~G_WI6}5m z ku1- zRf%E~_L#6}P65Gc1EqL6<31(}>Mlzufuyn6izxZ$M4p7PijEv^(a0BhU?x>CXyVPy zn` ~iD_N6o)qi*6IK*gt7}}=d)z)jA(zFSgRiif z%b{7TBcCtGJcqKTR31F(xAC>F-^6m^V!4=OF_ZOqq2?ZvPIL+`E?-`gz^#oY^5LoU z02YM0%knfKU1KM#1_6Dj)JTcJwT&7p?{cGtQl)@tSN3l#=K;5B(^O%?E 04~lUlO> zyj;%lAN{A_!D6=HB;FFC$up2U+v|6b4jisiFSwUK i{{#K?3==P z=CjfmQ+ul-r{vh$B1h%?#&UtS-^aDaI$L|ngwMnRJC{~? bL<||a1)B%o5&T4Jasr!EWvaRe>%lX zOz_gzehY8@_%^Q_U5lG?jdwvnp2n3Ln$-$W$ir`3<4?~Q_c)na@KTt}eLfc{Hu9uS zdIQYFoDq(j+jY))q`VY+A5+MF1Mb|L&*Z=rLQoRm%SmA{pK~IxLXA @OsY-3GlTona528tRgtRgY)c7{VVDkW}% zeROohxr_dIh?mzk;89l~-;XS7E}0xPz<#TRTVLBjtzLsam>^FIMmPq}E4c!uc=^>G z_+fy~)W`7$KgIFWeM}!b!iOJxiBhV83yGNWwSrX$C+Sxm*TeI*pC>x(b7+iXju7 zQn>|O-5~4V8T+!YpErxcjX~F%>yq!$ 7{)YW+~uy%;behyD$N8Xxr~G| zhYAY1y0s2bPb2iFj0&Xp{hc=cGhX)VUj7@N>hFA9;9P)b%$7XoN8z)6CnD_4uUm+x zUp>K-I~`=56?u+uiP!(&C3qAYo=yPQL%592Nv`Iw*Tc3~G*%mGY_~|cCLWGmgi=J~ z`Hb0U3bbjaK9`~#Co2IgLRiTfVJxM~vjLVEP~Do6V$KAsD{Fja!tQ5M)OqM3=jAaE z!0f{_>McOPWipBf_j>#6IXpbx;{he3Y!>}#ABU$W2-^-?gDwhb$)4LD_nBjFRxHEw zGOXChBS@(PB41r7uTSR=$U7O&=h$9pFn@l5t#Fqs0% nRbo5jyZc$0q(UAar;m1!_7D-Ufss!n^$n<)=j+no!2qz0`9Sc zl}eojnLMMtlQtI4f@AgiN)g3!fvqu59m>cm2~{4*)1V~aXf{WSv-&9sK%&Y;zZ=6| z=-RtbO f&ZSFZ>)3z001BWNkl >CZmSyUtvn(@2_C|kk2 z|HcP!f&%ybyTqyQ4e^8j><3sb7U;K!sN}Nd#N19h9%JrLkS#YNgce!KWKajhTn}=X zN0T|fh7wO*e}L{}g1l4U+OeEH7Z~dob3JLZQtL35*xIba&z9itEjeROhK9KPT}Ipy zy>=GaOo4F)v-zBpY}vAhY>>xZ`xN6@me2pi(Ib5D`LCGd!cFDjulQK2RS~!$3b`C- z>d6bB0Duyhq cfXc4Uz0`__c3qY~<){S+1{~y1K%inw%^>2OyGpEYy zncx2cB6uIgoG1G*1Q=3H?tgK`W94`C`YL-kn9MkQA@`l}39kGcLh_{@kCkhlhj$RO zavG o|B>oG b>K*SRH(POt|AdK(n^UB)7l8K};xCl?+LOlRHD>Ir9;CMKornXqbA$mcq#JYTC zD7EzaKl==6Vxpy?o?(dZ{Lzb8SzAT#sD;@)gk-696bQ#fx8Fl*DLB*1AP^-Gw85Dm z!V!AZe(Z)QsYZNsL_k5A;)ksPri%c@jH7z~VR#UQ!Vqv=9!e6=DT7|dc 7r&CTQ5 Ndts75U`}#_kGR^ F3-hTIE|9F|53 zjrj~zxwGX{gO0}oL$wm7&}l#+*OZ7_OB||bx^1)Zsj9LF&>j1n=oCVRLiB9u9z%`b zRAsr1YnSmj{0Qg_k=d!^@aX|weDy_(iagry`iMwBgvIwC-&Wc)u@yvQ@T@U+aUkh) zJ1&e5K&SdmW;C<}*AjmD+6XBa>Z!oVjH+HRd%z@sM|U1$|6x}p&r(2sgg^f0Kj8QE z4qH5c(suJ{!&CfELp*IXAt%cyldd&+EPjcIOS}FQ<*di ni8qunW$yJ|Pon=!r@S5~-#p>KIOZ7C6#$MCWzqWFN0x-9f!r z#^?Kc=*+sPWpgN!`@fv4GA7`8DQ=V^SG{tniq~Gdfm$h#`E<$HfowJ-$y8DjbDwTz zv9rCxIEry*jfG!7*QFY=Lhxc5pZ4Um&1>Rj9pq`aX*G{amsUB9fT}8x0w6S>N8SLH zLT3|n3A_~17ITt!88~Q wqT@t9ty}&IW?4 zgC)%-T)H^iJBs#i0uYoe*@cJ;as2l>B(wIop^i&z_6zU=E~pnk=yrJ1Qm=k&{uK%z z4b2E-vu-68B$hO^y=nmO{^UcXoV*h95U>BiE!3KIel2O~91~Xt298M 5h!AQl~{a+z4L}D)$=G2>^0>u2`1$R z=BgQmV%`M;45m{IXLC*(o(x8qxeHWRYs&Q%%(_DrfHJk~rc&_hS5YkIG3BX8Quryi zKut{|CCh=N2xba)%K)0G&u;Y7P7C)=4smm16SZOyU+y1bupnx!1-5H- gFSm40Y`dg9*O*-4}sW8lCO{qwW|PFU_CBRfx2M?%c &;~C$R-ey8EL!}%K$D@HY z5 5a;Aow_=e)< z*#hss@hQ@7PWIGi`uI=&`47zR_l^!x&eky}nrb1#0HW}sDX_V6RhG`Ijt!##&e6Es z@IqZ=%O$G$EW7iq(GY1j8ZN2XZ=>s1HT+PP_QZ05MzctgjtrH)77I?iQKpS88(Z&y ze@2KuhsjD8sIO -`#cM-^8so(TZXS4X;~EOS2QTCD*fSC8