From d5cf7bf4f99f27f12043103d62e87b27a219043e Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Sun, 26 Jul 2026 12:05:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ResolveChannelToSource=E4=BD=BF=E7=94=A8?= =?UTF-8?q?ListRecognitionUnits=E6=9B=BF=E4=BB=A3ListDeviceAssignments?= =?UTF-8?q?=EF=BC=8C=E5=91=8A=E8=AD=A6=E5=88=97=E8=A1=A8=E9=80=9A=E9=81=93?= =?UTF-8?q?=E5=88=97=E6=98=BE=E7=A4=BA=E6=91=84=E5=83=8F=E5=A4=B4=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/service/config_assets.go | 19 +++++++++ internal/web/ui.go | 56 +++++--------------------- internal/web/ui/templates/alarms.html | 2 +- safesightd-linux-arm64 | Bin 15270050 -> 15270050 bytes 4 files changed, 30 insertions(+), 47 deletions(-) diff --git a/internal/service/config_assets.go b/internal/service/config_assets.go index e2d21f1..be112f7 100644 --- a/internal/service/config_assets.go +++ b/internal/service/config_assets.go @@ -1830,3 +1830,22 @@ func intValue(v any) int { return 0 } } + +// ResolveChannelToSource maps an alarm channel (e.g. "src_52ef4499_alarm_violation") +// to its video source name (e.g. "5跨主通道"). +func (s *ConfigPreviewService) ResolveChannelToSource(channel string) string { + if s == nil { + return channel + } + unitName := channel + if idx := strings.LastIndex(channel, "_alarm_"); idx > 0 { + unitName = channel[:idx] + } + units, _ := s.ListRecognitionUnits() + for _, u := range units { + if u.Name == unitName && u.VideoSourceRef != "" { + return u.VideoSourceRef + } + } + return channel +} diff --git a/internal/web/ui.go b/internal/web/ui.go index f564f20..8f12269 100644 --- a/internal/web/ui.go +++ b/internal/web/ui.go @@ -595,7 +595,12 @@ func NewUI(discovery *service.DiscoveryService, registry *service.RegistryServic return "" } }, - "alarmChannelSource": alarmChannelSource, + "alarmChannelSource": func(channel string) string { + if len(preview) > 0 && preview[0] != nil { + return preview[0].ResolveChannelToSource(channel) + } + return channel + }, "statusLabel": func(v string) string { switch strings.TrimSpace(v) { case "unacknowledged": @@ -2580,24 +2585,12 @@ func (u *UI) pageAlarms(w http.ResponseWriter, r *http.Request) { // Build device name/IP maps and channel→source map for template data.AlarmDeviceNames = map[string]string{} data.AlarmDeviceIPs = map[string]string{} - data.AlarmChannelSources = map[string]string{} for _, dev := range data.Devices { if dev != nil { data.AlarmDeviceNames[dev.DeviceID] = dev.DisplayName() data.AlarmDeviceIPs[dev.DeviceID] = dev.IP } } - if u.preview != nil { - if assignments, err := u.preview.ListDeviceAssignments(); err == nil { - for _, a := range assignments { - for _, ref := range a.RecognitionUnits { - if unit, err := u.preview.GetRecognitionUnit(ref); err == nil && unit != nil && unit.VideoSourceRef != "" { - data.AlarmChannelSources[unit.Name] = unit.VideoSourceRef - } - } - } - } - } // Calculate total pages and build page list: 1, ..., cur-2, cur-1, cur, cur+1, cur+2, ..., N if data.TotalAlarmCount > 0 { data.TotalAlarmPages = (data.TotalAlarmCount + perPage - 1) / perPage @@ -2742,19 +2735,6 @@ func (u *UI) apiAlarmExport(w http.ResponseWriter, r *http.Request) { deviceMap[d.DeviceID] = d } } - // Channel→source lookup (channel = recognition unit name) - channelSources := map[string]string{} - if u.preview != nil { - if assignments, _ := u.preview.ListDeviceAssignments(); len(assignments) > 0 { - for _, a := range assignments { - for _, ref := range a.RecognitionUnits { - if unit, err := u.preview.GetRecognitionUnit(ref); err == nil && unit != nil && unit.VideoSourceRef != "" { - channelSources[unit.Name] = unit.VideoSourceRef - } - } - } - } - } w.Header().Set("Content-Type", "text/csv; charset=utf-8") w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="alarms_%s_%s.csv"`, from, to)) @@ -2768,7 +2748,7 @@ func (u *UI) apiAlarmExport(w http.ResponseWriter, r *http.Request) { devName = dev.DisplayName() devIP = dev.IP } - sourceName := alarmChannelSource(a.Channel, channelSources) + sourceName := u.preview.ResolveChannelToSource(a.Channel) fmt.Fprintf(w, "%s,%s,%s,%s,%s,%s,%s\n", escapeCSV(formatAlarmTime(a.Timestamp)), escapeCSV(devName), escapeCSV(devIP), escapeCSV(sourceName), escapeCSV(alarmRuleLabel(a.RuleName)), escapeCSV(a.ObjectLabel), @@ -2815,30 +2795,14 @@ func alarmStatusLabel(v string) string { } } -// alarmChannelSource resolves an alarm channel (e.g. "cam1_alarm_violation") to its video source name. -// The channel format is {instanceName}_alarm_{type}, where instanceName matches the recognition unit. -func alarmChannelSource(channel string, sources map[string]string) string { - // Try exact match first - if src, ok := sources[channel]; ok { - return src - } - // Strip suffix: cam1_alarm_violation → cam1 - if idx := strings.LastIndex(channel, "_alarm_"); idx > 0 { - if src, ok := sources[channel[:idx]]; ok { - return src - } - } - return channel -} - func formatAlarmTime(t string) string { // 2026-07-22T13:03:20+08:00 → 2026-07-22 13:03:20 s := strings.TrimSpace(t) s = strings.Replace(s, "T", " ", 1) - if idx := strings.Index(s, "+"); idx > 0 { - s = s[:idx] + if idx := strings.LastIndex(s, "+"); idx > 10 { + s = strings.TrimSpace(s[:idx]) } - return strings.TrimSpace(s) + return s } func (u *UI) pageResources(w http.ResponseWriter, r *http.Request) { diff --git a/internal/web/ui/templates/alarms.html b/internal/web/ui/templates/alarms.html index c3838e0..68ccf1d 100644 --- a/internal/web/ui/templates/alarms.html +++ b/internal/web/ui/templates/alarms.html @@ -62,7 +62,7 @@ {{index $.AlarmDeviceNames .DeviceID}}
FFgQO>k{+_WLf4| zVYUw2JXXl(zqDYt@CJXxw>Lz2d3^h;;+>^!p17CyiRD`e% zR~{6P6V9fX1J&auThj~yFOXVol};K7c&fL-8eF+1xQ#XDBG#8kngZdp6JW58W@p9= z^R4-4%Z eV zrFPT@j~)}X06%KSZxB*KP_h$ii%#75Bo;G47}r5Do;^81P~hBPY=ZC_yaC{3POear zHb^~-4Tc|gh}(Z;u1o#WT-$%#DQ*7;iT1mL)Fx~x|F~1$elNaPy*Ws0$rZ5mK0tkN zI#dA6je0n2^>y3`=D10KRW+K8ze$*AsmC*7HwjJQHnsZ|P}fh?QIAd3QPU?0FOY?2 zVuvRQH}dCnS=`OSCqZ@SarJJt@fIPH1>7Pe#R=+lch4T4XEHZ6ptV2bnMX8Y^Ce&a zZV(6NM8b> A+ht zMd+&+zkn%Igcw#gMaa;Rf^QQZ(0`TOCJfYnRd@b6bDOYShs~WT=x-IX>Z!tT9d=== zkUU6GKc0OjZ-g6-IF;+$h@+pt30>iN_f+oK5l^5c2cHvI&NQK~PM~;NN1HZJ>nQx_ zv<~v2(>q`}(}hWp?X}Z|cs=9Z=|T g1Z9_=5S}2+MOdEdn7f}4?jy)H zi6B~XJiBg%a2r7iasE}u`DleOmZ(j%;a!87=5Q_kN#Taz&gy#lYYWPRVNk2E;mToI zm{PS2Ral7CU_Z9=Spn-D_-HD?Qu?v&IcOmKV704-{UN3h^>`fooVbgj9ww5> k=a!3!?|D?fnE z-6*6ZDq;Ob=wJ>A-Xy$Dy=mriRGJ#{8kdW5l8X+Q;t#`O@WLix6Yn*S b)4UI&wD{MBfAV<`DOjJUu=Xlp49Ok;_N1uu z;bo{Xgp >TzWgGeE*6c6&E&UG+_>`{gEtYkMNmy zk)Le!L#|2DtnUlBXv5TtWqcrfOaG-0b=yTRAyq5+5O8`(X7WDButBcei56J4aB@(I zyn EGqpM+z-7KYjZDQSgS!X4rXEbnV5Xkf4XT9`@y+rJjDsLx`BNA&-- zM+7*AvRLjn`v2N*VCCW)W9S+BU;9t~tz~^Htb?Z{fgP_GMh>WtQ <04eBTvo=lJ6*X{Dcsr48)5$u3a_U(v4!l4FayUN4zgA z+6F{2xNjW7vKxfKKCs`1ux0)*&ro*2AC^CqSsVTGK0K6Vd%^aPr8Pz{TjmAh<-Rk7 z9q@;}Foao8`q7IAJ%8Bnp=_ByYy;@|!(IiwQ-1V*AIP%(Ve>%GANB+2`NOI}?{pVE zv<(mH3})G0Fy6L$@XsG+1ONPCF7WS+54~o0y_IEq!8pB7K+hlc9qQ)~t3myK=%UB- zHlu(2VJ5WKA9fw;=MNi*`u*rf@4w)mKdcV*^M~~XJ%3mf=$-YWcO&}OA0`iC%lu*8 zK+hjG1@xNy=* Ja~nO H@LCM$dBIQyUi^q*EnYB`QRi-k zx3$HGUX^ ;*$zn%y^Jym`T95?<9X*5V7Ra}V#& zGXChIhrEzywAU9_?yg7ud|_4YX7q z#S4Zyqkl1e|Ma8x{y E^y)y*3&!bn>&vRW zV7whCp ?p2m$mrATzy$ayC1!Ipyvz2 zvu@DOzA)%}wAU9_?(REqb%xk!J@M+*r>`#d0pUfyfvc;#KnWxSCxchF_<+jYyJJ{} z*#}lduwq|Wojc0Ls=Z)t>YuPg*5U=5NiaMFkzwhg$NOg z1><-yIa<76XdCnrWG|?T9_m-;zTU=) zy &naV5P*>p+yw)@a`!B>*B@4n_IklMz1^Va1>^LlfS#?3 z9*4nRDE5N!w#5%()&8&{Xs;IxdCT1|fS%ArFM--|67uH-174l`eFTMh!GMPc`(jy( z7mVXofq!BbJ;0jXnD2_cV8{!9C2n-_f}zgM?kO0%zOXv?b%R)j d?Rbupdyr?mqOY+#9;F zVqX{@mqdHLU}y)Ppfj@;FBos{bEsd4AH6Ej^MdibH=?~>Fyw`O3ESBV#_{GspN9I- zt8>GfRO|% *%4Yz>vnxf zAH|NwiJj~A{WL(ZRt}Bt%FJO{15fgYVGUg24}(%X;t#{xHq -w6~mWq03J3p@hTk*7*3Dy a zND`l*|13$o%Y1>gC5e$eGP7It-1;TDi8cAWp0f_K0m)(}JqTQwEN-%-XX7p;@iY3K z)=%uo{@Yi)6CWBrg78X5Hh-7kbDP21Gi-i}m`p{lO%W6BKrN}AcOG@OF85@|Z3RD` z7=CB3L$ i6?$+1)>A#B>WVgParvJXT3GhKVaj(Cqf6s}` zW-+Pa8x&`9I8{U>P$s*WD)!}0aF*C#gnKKPZSF5(2`=M$CN#wqryWTX$H0pgjJ+`N zHv&ilMGFAkHOC tKScZw5Lo*V@hpM+>0sM1ab&*)9 `^J)EGej#ICXxp>j_u79=a7GpCzwLjx1T_Kg*UP%gpD7L z-ZF(~jl;#K0>v$9aI9fVB)FWVWQozNe2iEgYyequmiP*J5;-{+?s?1-pD@0$r5?%( zU1;}-2-e~fN8-PhK31G*AwWg8h?_-{*nw R9z=FO0)C ziqX+XU+I;e A)#H;I*DC_PY5Yj*w+s+w_>Vk7(NMlp;^80AIb z_hw#y!opkTVstO04?y~f0zA!V)bgy3Q{}8mVjZ=N_oDG1uXOMrDuK5%)C;3d$0&F1 z#+^>6%h=Ak1bJZ{=)z)-Nn&(7>T;>1i(79a-3-O++>*(uI5`! ZVrzP^+FM23Le5%lh59ums4)-E z`aRzo_icWFYkQ&zrxS`ymzJ8Y%XHG7Ke883785Kck+I35n+E!^$sz*JBA9iG4o{v! z@GMp|MTb`yaBYg{3V>t6#4Z~tiMQ!Fa&FU8%&hb_Jx{ffa@0t%u$ZZOO7>LBqp-rM zdLAp=VWb=}QZ7!V@&nkYX?l)=X?l(o(+D2O4jb?m10Fe@;6ZHKbRB=$bRB;ihX=DJ z10H(24$r(@bVuX;V)K*c?X8zfwzpdY^*9q;scP~#S;g(*wG`)l>~?V~{m;BZ|1L59 zA2R+s@{kU`73GOBeH8U{sEa=XdIGB{=e&OE*{F8*bg>>2VhEA8BTu}`VmXq-qyp3h z8Z&dI__g >s!m3CE5ch4l{SQIDr2sxmUc$OvN_c2W8_K#Ny_NUniL|)n&4^ zv=Pz!Yay@&INn%bTJ&sVy6IgWEYFo ~A+ zo(cxc6DQFB#(6pevhLRzu;PAks=FSMnp<#ZyD9721RSDhgh-!6I4%$I7(PfnjaWf? zzH}eV7~;b9VeRY!4gm3h99=bQiStnlYGuv?_;Dng6+IvhvwN)SNe~08%1z+R&IiQr z38(Bqs#LIc=0TcMbU;sLTOeY4F_>j95Fa9D>{&p}z@6_4#M8u#({fPhY3#&<8Rd6@ z83)0P(^;L&z_9AgE dX*EQQi+Q&brA7I=oHL%+a47U z_Cjbv10o3FTT$Eo*~;>b>4xWVg=wXaiDh&~DW*i+Pg4_zLv4Ka0D_RbacgjwZwVBz zDHb;xP~~N9yhq$a<2iV#_%=mGBQJKeLe&uDZA8F*H=IV`;RU*?EjJ-=<5HfNMJ^LJ z8Ra2Qn0f?~hw{)+gN_HGU(3XHRPE?;ad0Q9D_kw{N5%22!rhjz5+Q-7SA2=ya>m?wgTK8YC@llb~4Ap~gc z#V7UFramPuq!`w1Pl+qcX59K*D(=9)W2GX_IN|kS@$GB9N_!Fq_m- #T`m5B=cKeZYREYO<2f28VBZHi>%{a_fR){x;E9(2mvB)n+ONCe+9;&WH z(m(u?_B FTLsGO~(t_3EK^hQQ&x;ZCfAaHUil`5WatsKq^m%bU*G+$iF#ZKG z1co8vGhY;^g(s=ki0v!@$E^(QK)lgvUnC-)L@j%*xP~Jie+kH8>YYM6>y2|&UdSx> zWoQY|OJ4^RyV@Nnbp^gC>(_~A&_Q%X1uOrydl=iWUW^`;tbS}mDCx4i-`j$9TYUpO z)24@Un+8@$e}R|BYfbA(0l}2JutEF-ZvjCAZ-w+Fvf@|7g`_r?V8;+4V(cQmX?iZ+ zCVpt)8{L)SFxrqVs>J%nf|K6Mc8G(=nBvu$TUuEox*A8oE;UqRrnXurY7qk))mV=` zT&uP6rcJGgig#Tq2{8SvATGv8XDvI#F{A-AULz$P%*tM)ArZ!;*YO`^tax2SI95D6 z^E!-lq?f+I@w78 )d?*BJJ%L>F=* 0xFlA64k~~Y5Ou{EHH^$;Q@>d5x|E2Si^d(%yCeR z=(EhqA9A}4*rEegwJ_1Oo&QF3=iRCL@1jyR?w~lHOlfuyHZ{VfE+53W0}~?;5!aCr z^9cqV5^_I**2Z`7C!}DrR5z5W+Y_KRR+!bpAGR~Z4h;){;#+QtWRpG>KlH&_W>%jw zaIC;7Fhy$VpV49hy}9f#jp%r$9R_3ZeetlE5bcRq)AqL_^jxfTqLogtXa8V$B*?S= zxj2}FzvFxE=VAn@Rfqvr3q8~gGjKG^(7+sK>cKXDE-vluUFk_?wf2K{+_-5P76{y} zILQ}h3T#@!?rRk@f `96S?q%!Ap2Z^eJ4B7C=;?ms(m zz@q-T7e+nB)pX&)nPRH!4M|-N0crY{`Z1Kn9Tj_xHd$2+m}WXw|HfD7$0FCI7%**- z)vDeV=i1JHXIs_T$;NL8>pkiE?|T=qg-6A8K4q`}e7atgI!!FSXj1pv9!i_m24$*NZoe|IJEA{LjFp7}2?T3!E<3EU1deB aw@mS%ZlW@ABmc z94bC9zU_mP7^F@xa4@{f3xJbz0Ztl>=GqJ5J@kK6Gh7rN0sGLT4*TGeesL+mLw^A` z@qhC#q*miu<1er{2){*4DuEW5_D(B{H|#e^Zk4kpT0K3PW*RHiA9ajZCtd;PKfv+N z_uUm>M*t(cc`STx&gK!&x7JFU4&1P(L*H*{V~Zx})0#m{YiSY3VRn>Q)~_Ou*wSm& zLtFMM6dDQNd3N6);Cb_JqCmEnk*-?(OZP;pZMXW>(iF{7FJd`mj@Bk!6yG){fZhx! zG#Y62g-hP8##M>F&FZ10UgB;bi52}JCU}?F%b&U{TJ7NvLy3F;5aUL4SO5GOS43Rz z(^@qc=)|5Sa0fe2c2oD`a9CsM*h?pmyDr^{rN&kq6N$Vm_M-J{=4COtkEEW)JyDbe z4uEoJzM%dWWSK8nwv141Dh> K-KE=geCYO*z#}2gXoGJF0$I=|zDHID z??zLMmfS9mGAl#W1l%QY4Vt)hO7iNtQiK~Qn{cZ7F uZ3J~X>MaV<2xB$M{9)& |AA5hXd^*4&Rd9g+3=VX0=FI zDxrm3Pna3ANK>QZ2jC!prSc5$exMVY1vtb<`UI_%tkR8rtGEhpw5qkcTiFS&{yQmf z6^{D@>qvz!vr2 +Ju&L~ ziCEX#q$Ku%O(NaSnrzao5g?N3kL-%kCJWMHgmt2^xSkFX{Oq_W!6FROA|(kHp=UHp zm!%bbuzE&dc?bLcfs*=d?1Mmb_!Ypkjo7(x-t1t `UA$VrV`HY&@InkP;Ep{?Bu5?719YNhxzk zaWLLLLDCApqyr8KjuwX|b(5OSy2a4mU0SZ26&7X=kz%whArfAH !Ne6PN`!d%{X1q>Pk~lPbD^-VM&-q>6eL7C()X zeZ=AZf;z1UnquIcVi@}~LK !mLh1)S{N-smEhENw6wUBTY$&K zNWV~eXe>2T)^cK{5DPgVI6GajYU&M8Cb%6d-th09`Jk17Syj%fhO&}gQZx}=i~sQ* zd1_+SFyz6Y;Y{FkJh7^SIb) QYS4}Z z$;}=07kW!?(5$|`k2I71Ta%zK>hVrnlH|rXbZC2$rAMs62OtOqTLQFEsZzBC4w(yS z7_LZ79)OYvf7(Flym^@3+A60fPEEfKr``?o0Ih|#idRzr3!Lo-hhbVWSjsjoWgGAS zc02aEE`2w@jp6FCD%1PP?ATz5AKBt$YT{UMhLqA(RH*tZMp0d%A6ZwNdI4~sDtO{p zVTLro=xJ0bj;+s-qG=3Y^J=RvZVhhy&yb#>g;m}VsTgfOG6b^T13NX+d&H?dL!~%a zuE&N-iDrbB50zrz`iU7Pjfn;q(ol3gH2;ag7=Bn1E!7=ltazA|i5}T844INyE&WSj zEyJY2DaiE4wUnuQR0|SS5NhGz_gQ@(yegKX`@Ey62Rt;l5+5^jgoLBQ8z7a zwDg;oK!mD)VhkRIv%;sw=%wEP_kp38#%D LI>M-BMsiTky$TazrS|}$09|l-=ok$lP0-o#c6!4MrAmD3Z&CKBf zj(2{N*$#K7fR{UK; Zl}%}mbRGv3aNFPw7 SZ3&K?rN#?_KTe-F!bp6!0D3)qwBvPpgU7 z4(CeI=8+)c J`YdBIW|@Umt!yJr$@2u3K1+& nb9aG14tB-n6Lm~7^P0OR8KWdtaEm^Juv?_BX&?5-oxEhe$C>xm#PHyFebY{> zxK+BxOg+Tw>`GAg -`RFgg8C5X zob;kIxPuPDNb(j)QFIItcSznQErlJ~!LkH)c`8_nDKK&xZ-6#_niODx)jq|l=KZUU zouETbxIiwRn}Q=);qB6xfcjANB-^+M&n>-wyVQ?zpSfMn9dm~?82-svmYb&omgPyi z%*2pkuNz%~4P9OxuwT~lW=IqG6)xaLozs=5MqJg|iaIiKzJATf_Kn_({*+C%0Si4? zPO60GgmG&93k(-76-Xj4eG$kkAuD%FCJ6#JH^$GBW+tJCDM*7UQs)f7+b^_H4AaT{ zr@qw+W>bOe$Smm~4X?F#N_-cg A^< QZK8@dGBDh_dZ@>?HK;! zs8*DAah^1W*Z4Qs0vKj6=K3)bcGm4d30eu=J0Dt!8h#xxIR9~4n+Bo_T_>xHGodB1 zNHw|<9+5=#k-xw~)d&6x!!04O;1cxyuX37ttG^86EW)BBR^7SHV1eEp(buA|Q%LtI z%oC~Bd*yi >LzZCNd5Hm4nC)F4Ehdq9K*z->v2)xLf5p`b9>#0Ggq#B8 zeZ-yX`*LJI`Qn62ACV9bgHgCpm#gs$rH8zCcVeJGue7_P!)bSCGO@Y(6)eQ44N(y+ zcabh%MT?||ymxjei@viH%j}Oz$tlS95b~jlb 8EpeHS->oD*FR}td3vq z>^+p@JFkqdE@0-xu-318OnRD%vFq8YoV&X?aiwC~ACvAPW4Um#bZu83Lo0tfq^plB zwi-fLj(5gNr05j%@ux`l>0?)K^&=ftX9yYWg-{mik#-Tg4|#NUU-n4Y%+?B*NC_R~ z5uO_7pV!k{jRvgbiG*-gvsC(&h?FkViR@h_Rht7@@p7q>ocPd7oW{ZoUMH{ed$UoG zOP6t-QRWkvWQoM&6*`I171EdF6~%5&7~NJ!Cd4R{XT)aE!j=guep0%FCS^|B)JJ`K zFlfVe+Xriztmc`9yCJTkl{H|ddc4tRrYgtSV2-DFSz7i}(nPZ{6O=n$ec1Yy5Evlr zS*cg%!b<7iY3MZ-+ea7}&CVKucQ#!v+Ys3`A(;ly2$t1DgV>x!QUsG%NgGKRr|9{r zoY&!knN_+l9$h8 I%LVW0#+i_V?@HLQNm_>w#F >0mCDCAC&9<=N8o$uF`T9x1BYRU3`s zPxfP}s$R7m6)K+i^Q<(O*3=oGdMoQ$4llv1XQhuRDYZi9OkRbw-vTFf;&W1i1=m9a zua@qjsn|?rjw?yMD;-xiqC%KBo2e2B8+dV5&iG;M_*-ca8Abrl6yQNzt4K6?UQd!b z$scA)QYQe$Z_HuMtEKH!^4jO6_c}{7C9CHKw6oK+?lnq$bv-Y!&N)4UEn>7{lhyBm z<5OBq65GL~Z)t6|>;)-(K(cxo_nDB)op7Nc`2*GUpS2kqoY(LjA1pBOu3!wm%bztf zA&UL}f`ltQVi|i;XU*XkrSIu`#~S_n_!_=EW|P)R_gEp>tfq8y5B9IM(kBx-8y&B{ znC4eC*x=6*%xKO{>kI}y8py?Ete3up_+f0x+J%>-6f?&qP3EAVRxlfnY1OWDsa zK^;w5C*4Am`ObBcn`}P4+mh8luM+oz2!tLQQS21@j@h82#MJdLPmkYRMzDU(jC-O(>B89HT7Yo8>Lcg ze-HSijs1jsqsXsgkkL{%NpxQb4nJ;@-X_yx&laiHj1Bpd@C}~Aok6GJ98ShGab}>% z*1rN@2ig#ls;@BWUy)v?4lLWoJ5W2YO-j;FP*dehebp5yeig1sX2IK~=kbyrTfZGn zRAf%9)O&w&rSu++x4mnOF1dFY-h0r+@mE@3c{jW!RLk9AD8#w1>7{Re4dT=ba?^ml z$L#Lw*Br;5 @VK#9jT^sA}m;s+_c2T1a6>9TgewUlC6~ws|*PslaX8EluDT5AX`6sKv>+YR#`9 zLH_w``e{XPNsZ?4ZV<9Zcb&pTRwQKG&>3fbcd`P!@nnI|zf^-OwlA~3BbDLNfLCBO zbhxUy)}aYuNTmAl{x)_UuD2qYHdw> b4 +T~>`WhTKynHPS1PQZ0EOvJl4M1JX*q9WeQ0DY4Hm z6~+g5o}M79ZFh`%-`+OXExNNpP&Z@P`j4ebH{|DMOtqNF$~!||k+%WO?~tE*?$VRh zv45l8G!fpnZ$qVZP z9Sbcm)&YN0vlhB`j&BcRf#RQsQ>Ik`zdp~v+N@)h(`u^hkY2xkc~N=3E1lQR$*J@J zmCu2NE+r0 nYXa68zHZ?OmP=r_`T2r&(akRz{|umiC`M||m@(u<^@ ze=FmNJlgvB8N*k=^1hYcrqmCwn3{D|I!lE-g4D4zayu829fj; W{^(i z3biTJ5m)_7x`~GH@qbATRPK>yx@uMXZz-Cla6v~6I3{f;loxaq?q b zG&KaO41 vLb;dFecT=U%|>5Yh`TU=<6)s^tQv5-8eH&C-|zOgjn2oH*){R^x7Mla0H#tQyMPClg#16)rMWT2+j{@ z+C`}yVT&}WKcHurbRmZ;u>v@pN4vP%*!;j*cAqX%e~87%{6&|MkmDF&2V{ZLl?DLnvx+itV^08%sjQbSv%yP4~v6d2($ zsgr;Z;)lRmu@=!w2xs%!qy+4gI)L{jf-h+T?O@xsHmL;RnrCqsX1ia~sCH=rZ7naw zERX0tR?&{BwWcpS)Gj4ZP;*l|?OnyMPLu~H0F7cw0??z&O@h8ngC1Tzx19w6cF-iO zULYsn;Lhr`a<9>zL25m>pSr8LE3j`2yDA2Kzi8PYJ$8zI9~h*^PSJ1cU_EvUzwaHt z`Zswkg+QQMb*PrwQD#n8S!}0SP71+d;ll^u_&^-cCO8G%a1fs{%WG&64hh2?6Qw%C zxYY4^hr@7oZM{WaN5&HWM&wkERbJZpT@$4pvC0!+YV^h>jxxj^_e2HBYq9$@K3HBz z%LYAPqFRRmTw~0PPcP$Rw$AydqFbO|3zZt(642U% Hp z`8V!CO9L`jUGNHWA6t1(nfut5h0BWrNEcd5I0jeZj%b z?wXX+R@?C+WC2KR*y zXaDXk=TiA29yL~Qx@Rh!4NT(IXOsHKbG+SCln?HyulvZOD4z-WW>CH3ach1OZxqW+ zl3yVu{rMuER@Lc+V$LL)I}w7D 2T`6(2gX_--|SEst3yr vrn3KK5C40$H$xWpkcUp($39R>^H)nG^%KNT6P-U(W$borGQj|LrW{Sf)Q znZ%6~@bu7dw>SlI#ArJ+ 9MdRj2@*(yW4(hl4%uL;2!oOAbK z(tuk_XQGMCy+g(&^a1J#Hsg^yLbaMZ -@_jNcphhgJ)_9*Bpx@=ln&!xV>hY*ebLA1i%VAehz;o(6`Lv~eI19aB z#=dM2+kC(L3w^Ws@)yBq4s?l$6%|97o*1r8en7q_425b3o|NxEt@^RVXJmJTCsRE; z0}L1szaE@&7%XtgIdRFfJjP;@*q&$PhX_Zz0!~huj Qd#e@n4(#tUMJxo2jz=u1YN7GlZEPs*uN|m?UF?GmbCTHgHF9ruvu{ zJ|E$zboz6Dk6+-64|STx*#E%)hcA8|F{S-~;HO^!zi{>6*C+f6__hB7|8iaze>&Qm z`8@9cZNc;Mem*=-;<1UwioorsaHOmNI-$T5tmVESdk~pMqHyFznIc;*(mzDStdaBe zu(XmjvL5x$YS+m9jR?0j@;mykJ!|DD{FfH_63r2wfh_K2*~1SGv&}D)Bxh=C*U1ig zB6i1mnch)4yq*_vVZHo+T)uG$rJMtJ {BhiIo7`)pDN9{%3Tkq8H{HAicOKH{m~S?P>9`|# z+SqPgX}5Hy;fjCI8HVSjDgP3?juYFNKAOY#DP4KnFhS<)izRj(Wm`Np*3SP2vbb0A zZMuqOy-Ib%@lpCl4Cx~NKY*>p|B N2ln3k3 zGC=iThblYr#O>(7Y+%kEotQi1fx$fgp*HqerF@f~E#@`qHY#AjYaIk?@k>WVa1NpB z +>(iBkvp+SFvV-5cFHL@O4NfDR?9izvHS^}M%=W2GSPKuD>k#X zzR-^ysFqW4!}Nt}If8tM!Mo+>EvDXV{cgE6ZXa1$^Q`Jjyv{IgSsN3+*JoW9RuJT+ z+w+z@ZZy^qZhX7Jx5h@Z%Cg&8g4vXrPeCGd^k6cEZ-(j8sQa)nntKh7OvP0?& _g~|ORpe*+cR8M8NF4Z7A&V;J9V>$U@M)qelIfJqv(&TIH z^+D=vM25Q1d#0Ko7W0lgf!@<7dI!n^mfwzdWcVRHSuFEC%xCyt@}9hy+T8vg30f}} zw+A}f!$$6rGicQ_ EKTTn$sAA!$AqH>?C4@15Bn79$MjGjh^wLJO($|_hiKf z sC@;IVqgLL8ywI#)$!`P`k@oLogfDU;RUo2e{!1PgMCV$T9j9e#Z?^3? z#uhr!q_rHEkD9v=Qm;kuSberxT>|-YKHN_`c0%rBj)XLpZ*4XsX8N&R^u~~p$|4)( zaa2%2BP{Ru-mJ7y9-$+5v*^fB{GFs4(KgXDTD=+u%JTelw)2#Xy*WIFi#7G1rx54{ zIfU$1k%@Brl)Tj1%QHev9nY5&b #NgNlx2I*VDxT8%n&c2UUPZqc?om#<9i8Y-74I{snaZdgtfOOOhB4~of{#pJh z7>$DXn6%Vi wXCsuvqItXK_=@LD4hp3xJc!NACY;KE;2;&sCzJ+ujrmGgxsR691 zMV?BWLorp({B$k%zw%Ay;HyEF=ALc8$_?GRQq}rk`}S|yjNjx$_Wo~jnt#%VloZ3l zF3R_N(PU*8sqA=d??ntV`;yTJoR6y
%gePozvu$aFn2twN>?m*uxDrr~VcpYksHKdn_>N(1|NtNgWh-aTz{k4_#PYm@C5 z5~Ei)DZP?RVd~Imetz@odT@LeRL62OG|m*zbOJ}w?!@<2h+n!{>1C-&V7X=mT5>ci zG%LRuO)Gb97{IcuijzHQQC{~04x@L27Fd-^N#|ZUc&jqkr;aFgb%63RVQ13{A6QKR zN=oN9Bt0%r*>CYAu*N`T7|qNvLCQp;0@=pR!=O@rF|0ouxWXBvRR$@Emd?DOb=0Qd zF^VqQIf8;+|E}-Lf|B6 RS}R%e3*E!C4T{nO62T=OMr^Qlz^*s~g78Xp5l#cp$!_gji1LahC{@kvguE86 z47G_6n^g29$yrlR^qlv1FQtuG(HH49q_@N=2aWGKd}{~d6}s>nn|t89+moQpO;GHl zK(&%YWdi?E+grf_RY*l*lJW @dv%arZ0=yMV$aWy z7MW`%Dtldqatd^{^dU+JZ#J*>`QA!!#ZOHVdtj*Y!T+W|dzen&k*PHNZ_K{KmF<6r zAv4 j$m2zzZLN7QmhDdg!H&E{UkyHMwMSI!qkUy (^hxK24u*vOT_Zht;FnDzaK^13g?Hct7}sAM9u|B@bp16_iRbsMjP zJNuJ8eIQ6?%Js_bzbjW}zhD2qy6C$blozR_L%GnL&rMKf(8t9I%3bt7FBfVSljVY3 zQZysf7Y7;6)84(+1O(O7^oyAam*s?NATW;9xzS}1Hum%-yMtXfQF*fy+~!mq>}Am$ z%mz+U-UV0#M|(^9GA}ew!K(l?&n?PRuxg`U)AE(w`mfL#ii`i!CeKi28*YgMGnLEc ztJvNGMfXl 3fNz3iq!C5pXXs3hrtH*~ #r1Q%>r?MlDyW6`w5Z@^VE}M&U7=$95T1*xtvDGFbW(O0%9bafPze z7fn09LW#!#ezMW5Pbm)@XZcH3DmUv{j;>U$*MB9KLVT#wY;CDB8QzMP(vGC;RZ21d zMXNdhdsZpmU4`2wE$U`8tichqy ?k2l$6?!kasf=rRIL6Y zh3&Jj8MXZVL{|H>k}uRbK_UAF%%a`$CWdL(Kcl!U<^im%TuFz3>@CM&G)dagawRL! zoWUZWSJny{Y7#8=gTH5Jd!AQvEC5?yRCW#;te(pnd#PyOsx?{7rk~GYduHXnm1|yy zssFkft?t-Yx+V{Bg1rXVs-L2@#upXQY^fQhU09=xx0=(mQR@ic8K&i|S7@a&Obgwp z;8|l?i`k^?wVHct$F_nEB0`Q))N0S;YuLc8N)I-Alak4%Z&Q-Yy%{hQw5{8edB~s2 zBDX8KJu>*2y}+md-0>9$k7!(FA`IvP?7x+4C&i3+*eaD=D2Tn4)Lae@XXh%FI|Dqa z>P~ilC1&gUcPNAKK=Nt4bNDxuutmN@X(e*CuYsJM#l7A|PP_hfWe{&t$s0 on?Q%OL>>lHc?tE+ghzmp|tjDy}B26D-U(zKKhmt*{ykN zfK`13f?&p$o)eF 5+siKZhZV8dB$6r9Z~YpN8|z!shN* z5a}(l%lnmNaezvZ)8ks`;-6L68Ed D zHgd-VPN{#a@b`Dj&=*d;*>Le=Wdh;l98|^yV7*_)?mvV+d-b3)mTnm-NJXXLO=>x) zOeC*T&LJg WCZn4U0g%8!q1e<07J!`%HsM=+wr9mXEqd82kdCA5)){?N^AK>DYKb} zXv_Yi%nZQ$x2I1ilPu|1vr!GGY{u1ES%VV7U+)1^5F 6>~w^pwBaVFDUO(`|lKt9)B{ra}uX5 z9JIe2?bp^eE76u)f%vVB_cKn6^jDX5h(;Hp&$6MO?;DO#KSiF6BpWaERyU#3y_ieH znbe}(9$W(%r v@AfDc?dI@Zq2<{@luw!M;iHRfvjQu@FC zYWq%e8q2-Lp4%N!gP7S*tqt5>KM3Ir&BNHvYwS5NOD|qyA4ka9*P_fcw&+^>M7s2} z_FDU#5K}jGcgvr6MjS!>gjRt59XFuR$_-2MYpE_BNI$J z?6KoiH}sEVsr?=^DJ1*|*UFdK!_AgGZvE^1<@PaVB~qP zxL3 zt!jV9lHZ5rJ!@~)A(JZXuj#+6&vpE&e$M{84%@lf{(t(fvghqzBd1ot?D@t%(V-XY z#v^#SFWQYq@G4%k@1g>7*4P(8-bejx@2S e*h_X}3+c>DcH?HIyqE3s^cBUC zm+i)8QrSAY@oe9Pb@mJx8j0)e!*!&*^_}SJ?Zz&Yb%TAju1V)^u-E9CG-D%3@byH+ zM*GA1FUKZ3HXcZKfjBtf5=>I^rcMB>$oQ>KF#V}l3K>vCUQh%T) z5}{Sk(nTQ90pw^Yfc7tN4b*C1vFBOL{aN~U`+LNprtS87a3*bxHu-h?S@Qs>z3P8K zhNi*4i0eh1PsU(pL4T^%#A7r@t2>as5uN4S5YOiBw7VlPottfz?d=FrXm7V|=dxrP z!w&7V-%8KU##Lcln1Z#eD*J7g;Cw^2*6*@!44$RyW-X`MJ`%Ayqt(Rk4BB-mtn4lO zT>&QSJg|MAbr03#x9uYktutEv<=a2m5-K0JV^4ao1Lx=eiwzU4rnfv4HD!us$KJ!p z@bqTsdmss>(aie3eZEfZ{ Tt(l zdk^-~Ui*W#{61i-Yu6CAuf`s$4Xv@?PIwjjyzu^S-(T<^+;6|lj4i_21Ej%Wh 7d>xMkIdtIQPkY#4eAX9s*iyZ Q?pZlAxtuOp$A52bGHyZ7RZ@8lTM3i>*Mf+2j14pyk-|cIxNM+q_?%tb~U$T#; zr|N1i*$3NQ`Z<;je5WRmIsUM_=^5Ecf7l~nM$uM4K+`_{CTc+CSTa08JZkNqtTE1Y zX*v23PG?ruYQHulf3RxtgP&=&r}Tiww`GkFzFGpBu0VFa)t(rVpQxVnO=fv*c3d|T zuKv>xz7}x!vb95P_Q7aYEW6x}navZsy2$ZL0 _5ySYUDNCn}??j(dnn+pLaW m*wftnIZq5@7#`tWj{x2}1R8 z;Q~uf?iSAO6&>&}#j;?@QPgi3UI#DPWkC>LeW>fwYY2O5LGap2{B@Lw<~2KEbF7sd z5Q$ipEITI7B(rt@pSsz;yoZ|LWsT+oAC{$$HJSi=8)z=B(aYQQm|os=l(!jaBmY{S zc1(7h=iPAF?s%`WWnfsD!;!)h_H=Xb+hD+xa^hrmcL#;C#j %$Jag{;X%+@QCrfu%+SjUNHCtaENuJZr?#3v;?-Zop7#A;GM zhuxfls_!)gH!a~>C75_;@FJ+PsSKsyat@;jEIY-KLY*@=#R0!+nzkav5yHE5ZGXof zM5qK;S~@u)-U*#dm5C6xtUCzpO#>4_=y;k==wh0~!U *5CK zgt7+dgeDJioF>L;Ss9KocxPAFm^08V_2^r)jZ>QR^q;H-T~UuJ@kMAMuNtSgbBJRC zwXJ=K14eHwzcSAI+yGzWT%V{;Z)|19N9%D6Cal?^ZM1@64qX+pOvh XTMTyxb($SO<`4?fUw+!v3n5s>qj{d zIhv;J8RdAM3(BO?zJ$)N{QpL%XpCbGClu^*d`Mjx2brL;QI8k58!#n 9+(sD>=FhCFeM3ts2X$|M+{tmsk9MC!9HsRK^m_l;a)$CjGM)`p1mn(!qiT zOpl|9FuYL)e|e2PkN_9W6X3UWgCjaAJ`K7ms50#exHV=|C+>LQS~etVg*O<(t0-4j z;Ky@yxopqX6*%OQYx?XPJEnx23{8KNj(FiFA4HZh(Q)uvv;ddSa;0Y`jSJi2t;bRO zNM8H84*7NIHNt#6T333ASs^8XR#(A(VOf(L 4=vs7*kp_qUZ=QQ920nV z%)QkyKY^DSzzvIf7=jI%9fn0fC9eYv3+rTk!qd{HIKHHuTKjE|REv3xmO9<>JtrmI zp-+WljdoYuL9;&!*YX^1ko0pqi=-b0Cut7Q=E`i!QnU}V1A3>5q`xemPe*KTzCNEh zi4PdylV>=RIKh&cJ_#(c!0{UfyylqYn8@o^aHnIYc`Ay;nc1d&C{iyfP2KPDDN0ub zh|+-|&_tv*6u}L@87DX)#%6@3byRV;Z$1`R=vY`{;1jMfN5K~vrmphE)rW^)8I)%U z>V>8u4{njaLY{cNi#zKz7TwG11Cb~OK8u>|7)rBrqjddtnsql~P#Xlbg4qt-!7+%< zy~hC;7i@$g$4U|aq;p;#FM{nx377Bn;iXn_pCPR~<~Wvm=g6FEa6fOJ<5?r2j=JUY zJj0TSncta%Cv2N<2*Bau&cb;@-UEj9RQjNAj>w0M9HSQaB(OsZ9N!|mYu&?+7!fVD zpu60Nr8w}ggS&Z(9>Ivhcj+UJv*g!Zu+R~tOUfe0e%-`J$RwXbgGlW7gf(+fr!3I4 zzzQFABv8~3JcLlt9e8Ql+D9GFaAK*89sj2ApDe^raxIQ=(uJ7B;z}GzH1Fh;=;qXd z631e5VvVSJNV*VjVX~N>I}J5dv)sHrKLw^JjyuxPoeB@!%OjRJrlX0^FL5v&^3~Fp z>K&wwU*@ X9Ex9`O{|7)hOin6zoFQ5X~)B87+k=;(bv?l>=k;$ zmIP44__)KYlcp_L;n;)-#1SlJm7_8d!T};!{ESk|2O%7b*Ux~}j8sbjW90!(T yeC$YR=cu-w6wC4vL`DmK~#FOlJY4tG=AST zd!HkqKJWW^Kfga &u*79l5!1CD%3B#@o_g2 zTBRs@&+w=ut@OaWC6W?Xdipf?#Tia`EAk1W>&7&5rN`GCT |Gp^h$uMg+$6R->SoTJ5Q8Odt0Yb|bc?Bg$Qs2KNAQapn;cb7TZ1KEq=u z)O4@)^n|9R2c 78Il4#E z^a2mmercvzAXe=-bNYG@RJ1+Jq>bFYNIiEGxCeXrf=!;bP(3-|Iee36u$b01dwRNf z#0k#zCDX92oLM`ft;}%ksAQ`rtqIO*AWmZk-_CTu;AsLm%}!7Xv-HlQL-Tp}CNcp{ z9%u;jCsXD&&yB%?9DU7#ZJwf#5PuV6%_*lw*)Mrohxom)ks? |p2ZCm~6p(~7GK z+fm{!PbSngGj~DI>`7a9c{(^-)4^SygzyAoJzl$}^1@KfZ2GDv3S&y94zGEHVb?Jv z=Lu!}Yo3e@F~mbpd4-@BT2z5J7SbZ_I!`P#lw+x_fNJ0vM)JTA$E(&MM7-g7`aC(I z`1Z~UgR2uy-_T+&I&tP2B~oU&$hWfvJalHWS1kwBzpn==jYFfpRPZ|bx-gZhUib7% zz|M9z*?P2&a3@~p%p?xuoOiY>hqa_zO%F~p2hjL8F#F-KZ2lV_xZg=J`UTRizL?g_ z^8<9+nQwYB>>d{7u6WZ^2@1`A3xtiNt#5e_JHud1>siT)#N0I)HqbOo?199OHVrBg z{X#`Iz?h48FUR$T-|@G>^r%>9Q`a_87+7P)+n(*nF7+MHe%89b>scEt+7H9PcRf%q zrc>>^o{za12TCAV!OF6##4{b}qe?w*aV30DS(U&@s;*lJP!h~O!03y3QHjNIl=_}0 z!(&$htb@rc&7i{hVR*LUJ&ZeKy2n$38mW7&s-SBzZ}cT|FRJ25C(rwyqIh&a*a7bx zb}`;_qI+TJ5Kx~vc{JyTnMdCD{EmYbXr1 yYsE<9kXdG{@_}KHJ%d!nl|J3uPIFB_WKl98EK~ kJx@@;g_Cw zTnc={y@*{RA1GuC)@=3!5W6C{}ZwP$#wznc-C$OhEu#$Gfzr!>|m*a69+_zzbU z{qh{lkpBAG^AfLlS=g~J @vw%x$CQIMpyV4*dmiRZPz @5zXGv8RlJpEhG zpZ_iGh$B|oE!cks(&inp(jGj*I*m{&_ztHI$UilJ^D~|+`5t2hM4$UT_#Ve!^u4D& zD+WcK*!r@##;wtJ-+S)j9ESbi`HX83ixvciH1E9vE$DUBGmhDB#ZgN+^5i6}o*3ex zkWP8^G>>AEE!XJiQA}2-$wKUNMQ!hBiKhrKkujrx+PocAuW^S`ez|A5rTMHa_lyfj z3j>*QLh23Ya?6- 4^=4r!Eo z!c#O{9dzz3blteTIKzQQs94l59|HX_9~Yp4Xf%u9qPr{X`OmH}Hb)^vKV*YA*fQIA zH20*ZTePE>i2D?AAr9Xc#}V&fi3h|hIf?BbzK2hG;-k?uoW~pg1uwD6(>dB<;jRBK zcuT81@qBEyy~;DRIjmflV2h7V$@kuYdFDq?|Io4w%)OaELbU?5_{<+!LInv{{M(bO zcZba7+qpd4v3gIK<24~9A*!}ZY!vnX$ulP0il_2lJsQ3ElShFRUGfuFm1GJz<=KVg zd@rElwF@){S#-cGQ-$OQPI;!HD|-FxnZgCF``NRmFY1+yjlEqjV*{2SKKjPQRO|(f z_ka;HKs#q6r?7j0P|LN(aS7}8sr(mDDEWW!=$ucR|8qVj@-dvuXj`$min_FHN4cjx z{g^o`dDNF{h6}Sc |~o_}3o;P84#mDQeZoNqevt-ys6FY=B3%^JSb zf8#kF2JpZ05baE3e+Mt(yZm>|m;TOX$Qew>?ctPu40H+QxsG$Oc$}pzv>dgw9p^%@ zR^?a(5{vSY|9IN;0THeSt|(|$7#Qi{oi;J^ZDL{?Yb%J!c?cqd1(N*PD$h(!K^K)4ZK@&}kmEa0_&cwXiM+Z}&;zUAes0wnW7 zBw2OVv$F|mY1fuU{AI1eGyn4ZR2MJjoacFF(U7I~I`u*%jv!b(U=|(rw`a;2 lcfvz-A(hszN1uJ{4z%*M~`(yA)jr$&IrAiEc%U!=xUZxf%A~GxvmBnV-wE zGxxQl #?>cb6q2kH>8VYT abucF z(d@e-xv4Y_i;}sqsr0cEJIcG8ODlK?)HaudI&|k4uoT$;IM#sxOF07S&>ZML0OxxZ z=^m*?8|X7O0N)qlNG=p-knu**Lc6aqOlEtetK1lC7!eM0hew)# @<1%aUNk)<`J^n3PCcWvM?zA8<*PEZy70-;CeAD#N>1@cSTbKsM3j)}%F@yg-w> zF_Vq-+r)pmB^}W?IWt*|F5#YkG?}^tsQ}`nF2%dbWlCrvP2$v^nNh82QwvGvEWXMW zL!r#;XhwTmNd3b(3(UCdXGf|uvT0N(70-%_qL*exwK8vrlwK6uF0lYQQcQQWln~~O zFcV{?eURf)=uDg>{9TH{ihc9ArvFf3XSQR4Zv!5{rTy?Ew6t_Eq7`N z!*024Ls)5wxhh_o5U3HBkiKS3Tj_P&^@^ZfT_lz$>2w!q35Vx)mHI`L!xT>lui-_M z9TKLQWnCpBkRG#UUvqkQsYN5k&+BWYFX?NgAChvp^o1$Xry;zb?sz|X0?S35@XMP- zxdWs$1%A#o8}1WMsBvLrfOI1hDj|)thxd*&=_i*X4nEt_5Zqzeo-WPf_zpg17{vRe zNuk+_@eBQCNKy2IPdds5gCzr*qkB T4V9nwipM%RFam?A4NOsFN^Q zdczW?j}De@wSZ>&HBuuxe%Q5kJh_KTZ?pk7go*_vqZV%tU=ex`&GJeKV#OXnuY7y8 zMt2Rm4#MzIX{Kc-JbjpS*x5SSaNjw#Zx+-+FZ@$Gx(8D33w3 Q} zk!%z6RXNh@?AdSFWC^lx9BrK}eT=X<`*x|noz<=>()p&Gso<&C!~UV#V{#|+_*ALD zHcekTO_~v~QlBB+YX2NNQ@YyOcriu=r=3r~-6KWP+q0yB?3<%@mUNTbj-&DSNKXU< zr|*&O3 -0I&^+90C9O;Q*@gqo{gW_l0C*8n^ zCHMvrBk!++c#hW31>*bnOLqhjdd;m })&~RgACfA8nDwwU9iIaaOGok9 zo-5g==dpfiwHq_H!??eeK3gocpfbNS$};BduuxiH#lf?_h$~$v-R2rKmtq%5Fycw3 z^hHt j| z_i<^l1*?5r%C}mVex6$wZ5BTveeZN-H!@eOkmiRtb&6Oejc_K=c>dtA1peq$vr2kd zad?b%4@?yo>z81B@59aO-K(XS`SSYor$8G&d^A3V6%?Jh^(iTiN0pNfh#0&v{*=@< z7Z8Uy#Hhd}`GF2!3Lnjt{8dYjVB}B6c7HKmUE)KIil!o7T&Fe>|4=YK#EOsLc>kNn zu#wn-`1`E*;>Fm9i}X!IJo5ML+=}?SM0`6gz-=Kk4iw >Go z4L7O@on0e!&h>|hbQ5u;fr_JIzMb=tZeTE-%Zi7F81WBs!)7BsB^V!S#X~iYcvL*L zXgcC~%7Yi};wr2O={Vb*2o?LlR=#c5G~zPcFgXe-+6-dHZ2nNk<6pTuE8*?r`*XFF z5X`ta?IsESL0Zs`r==Wpo%)Q_*#q(B7;ar-WEo9HKq2A#)vcM?&q!>c-=0>jm3mvV z-hs7JjI%#gt(9g7fH`)Z^aX^67L@p$bhCxC^f}3XfHCHI8;zDfFFnjy5d{IPsRh#8 z;phQ}v6gPzfU)l@l*U@~ 1HeL#y{wXA}N|CZ Uv{A{Ni!_WW+JKiz{^r6Y%E(D>u#|H z!dJV|jvYLNn$m$Cn9wjL@;Q^)#nOG$eTx+4;v9>m=Nj8FMmqggj9L`GBKd-__6&<8 zX=fc+a|>NBrq6 znNg(e!u*eutEs!BW}(4a&Nnf?2dZ3UN)HADQ{Rx@2?i41tb;~xUPLn^-;y432Jp;v zyQP)jR=1h-jx_NinBJ9|Lgxpvm|IIF+*#wFr0$WPXWU(Tf}q&