From 34144c6f13783f309a715e55aa7868da9628bdde Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Mon, 15 May 2017 09:47:21 -0600 Subject: [PATCH] Added push registration feature --- .../PepperDash_Essentials_Core.projectinfo | Bin 1285 -> 1287 bytes .../Essentials_DM/Essentials_DM.projectinfo | Bin 1136 -> 1140 bytes .../Essentials Devices Common.projectinfo | Bin 1161 -> 1161 bytes .../PepperDashEssentials/ControlSystem.cs | 2 +- .../Fusion/FusionSystemController.cs | 266 ++++++++++++++---- .../PepperDashEssentials.projectinfo | Bin 1868 -> 1870 bytes 6 files changed, 213 insertions(+), 55 deletions(-) diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo index 0c3778c83af7257fd5f99b352a029a16aa3ff423..8b7940ff9031bc6cdb5c0915bb0d310320eee0fe 100644 GIT binary patch delta 1111 zcmV-d1gQIk3Wo}izkl7mM|<}k-Mcq_@ad=b??3!>d*{6ZNS5LBrzL^wD|LZR9 zAbkiEjOH0tLrz_v#Olsb@S09BS?E6{gTl~Ulhw?v0gkY>cv%7 z=RZj;h(-{z@qf&+XLP7um8n&zshvdXGN6kv|M2zQ~H@ zF@3d|l-CZ#K7HfO+6FMQvZS^FCFsB1Pap0AMu%WsN`0Fk;wf3o*r@^J6r!-w~F z4tDk)?49pCm`!)j5B47H>`_aZt6Pmo34e3L=hZYTe}5>`bTeNH8K35>d^yXPQ|kJo zN8dBEaX*}mlbWWxu9oB1#bQ;yo@e!n#CQBOzbvNt>-B0?)vW?l0#CCn-=FO7-G7*6 z=b!FA+`0eod?(BA?e9OhH#wgL1bz?b^3Lu1xZTV=dJhbK$Wz##qVJDBdX+a!2mbSy zjLf8cdVjk~`y!mF$?W`oHa*V{cBa#NlgYt@^S#|!J~?=}ySsNV*`3{HrVPkndTs&u z1E`QE4b&SdZ2 z&i>xR{L_bf)7icIJNfj}d(($I4<`97CNP8>%-AiUf7pzLegD6BiXPr-ioQAvXJ_Z& z;l16xY-c*zne5-c_h9G2-i#Q2@7{j?U^m~n&Fol^!NlAG@P|!|?e_o0bF#Y=PKq~F z&wm*)6x*5YP9Dw<9z3{r|KY*?^ZoNlzCWGazdzlZ+}~$EKjxfyfWis58Qd)=Al}*k zo5{W#lHD=Ri~Oo3g{I-YForlx=vwJ(UET7G0=LZk(Pw#!2O(*BsG~b!s_i4WY zS}*~(fO*Ra*wEwun`dEfXck`O=Ox1KYJYjQZ1WoQ2&W^zcYc15&nA=XV1GKDJ=nc} zfAa9*!G8YfgZ+bpN#I7`25c}dw*da$^D^A^|C=Z1-p~ZS{)y+`&P(cLV1CYbruTR5 z&t~~_c91YL7vZu-S0hkFdZ-?F&f^Q*d1C%(EBCd d|0TbK^B2Xr`n@#Hb=k_W{~y5JR<}nL004~~e#QU* delta 1109 zcmV-b1giUo3WW-gzki*BM|7$(;YB#5LCy##L-}k#!{kB+M zq)&@FpSD$9{EZ*DvNeScqvKneu>#_p>pSwr7UilzT`7x(dW zRsMibDJ)f9*40lF7H7-z>RD0d%WRSV5YXI!;YtuH2q8lBtbd{I+iNp*udkanU%U_` zH%<|a>!QvUXR|li#Vy+|@>(YJcs48AqFQDp$ReMeRErhSXZGdtma}bM_#smDmXm+F znB=q9)w-VM$MtkxT;`S=PO8=Qo9bCr&honX=#demy^ns$=%X)+WwBTg|hcS)Auh>rlN%pWetHh7w<7#qyZG zT1?7o2V$ST@n&rUm|0m;+kg`E-|nXmcLAeAur8&(O%UMx=zlx#9C_nw3A4X@9zzFNKUx^Hsi_<;y8`{n4ZE znc27>&c;bi(_L4~@#|u-DqqjDdPU+pewtqv)BN>%wW{h?0V;u~S(fil_V?~T%(C-O zcOUNDe|Wx=<@fgYAKaUq&jJF!2XuMo_I=!LW*)r<20!E}>`&46M<2b)8>R#Q`AbG- z(muW2qAlJ1;KBLc?kt}iJlx&gJDBXwZZlH`WH3Fq0Q`Z| zW4ir+@ti!k)tsER^SoZ>Et#*ydRa^}7{Vr;r+c5~pMH98|KWq(hxd2)ck=wx^WDjQ zKAGOXcYZ(59^7J{Hg*%t-7Px%u({ia%KwY!^MBx0^Z6=YRBhgw!0deQ(|l*LcW-BZ z?_vJw!@cS3-u<0?`suyt!<`3{{1y`!!VPBZ7SKOz#=^e;Upz$*Z#6|-3cef8>;7w z7=McG%yuUaX9o`++`Iqq;Qsmk`6S<;&hFoz?oICRv!5Sx&OAWj1l$bnmJ<-~?ElSV z-wny`80STP)sn)k&O3hF!|Be$>HXQgomrO8X0!8yhxe!VKFy|+^K6>$%5K%Kgeg3Np`S5oz5QY-oHP2 z`0!vq|MbEB!NDYOqi+K?n3r1sfA4u2?)v}D6LfEAf?of`^Ka)R^)fI&=R4E;JNIX^ zd^$VG9vs}8?N1)u-`jm~e}^K>$%BFU8H5^4&n;lT_w)?*{Qth$>3m@4YJX_1o=#?M zHlAgzo1KHboyn)W)BS_#LAE!g!5-{Ay#FB2XT17A3lF2 diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo index 58baeaf570a387f5830fdb32f9a2d96e25bb817f..86c06b9f75bc3ae70335e84289ef014e60b4673e 100644 GIT binary patch delta 851 zcmV-Z1FZb;2=oY$w12zzXz$*m{hjg7?)`h8?r-mW`eC>Xlr)^aidGq`JzAy9DDzBer&HVTMeP93h@B91aw#VQ1_jSFePrva0{QdFgq*!)7 z8&6l|52(Y!4)A4N{WSG;wmh$%6=lB67WvN(G9ex->9(M534filhB|4l4Xs~aH*LOn zA*gf-ObB1p+2U;WCc7B^dXd*M1IM#j(H7M*D=|d*?4(+(Xsoj@m$#c9)Bb0dK*O_j zx|rm%*VVe7=EwDPUR>sO`cA6V^_%KhRnGFd`RI{h;=PZ4$>^gmie<4_FP;_k;wr22 zpQIK<2(b8gXOpu55fNcR>fnoPS)Auh>#(~=pX%(B)d3-YZ|D9FM&6-MmoVQZc=Xx* z>F&KxcXnp?X7_d{JK6O7{$zKTKAhakKHbY7KA@H|HMbazQu(H4&#P%x{%p;NGTIF^ zdz!EE`(R{Odjq%eE9I*&cV*!gT3>e2eaw!`N7_Uoj?!W2s0r5Eg-)y@#DSz zziS>IhV$S=^hJKvR?DV;I`3G5htr*h)BCe~JF_gG&1UBZ5ARR!eVR=t=h-yhnceqi zU<0&(_P2m}E81`9@Bdv?-`yD^`>XuCgo9lz&z5aog8(7@^Lyv#2l;F=$qx3X)7gXF z`}ZdgA0F)IpFY?>IG6+ya2v3}MBD=Sdrrh~$Nw*zk=>ygdHoZA&%d3QgvG#wobOEU z@7$lw^6Bg#dvI`Xwm*4re{c7}{T)&%lLrG6G6*%8k6XZg&-oba_x}~s(fPnm&fd`E zJk8o{Jj+@)9S3_mlTUZ2`v=p5Y;Q{AJJ@@8|3RM5h@tO2crd-$LVS?lA3^PxeE*mH d5{_ny^J1Do6ljbN>#~(0|39aQ%ALRv001Cp|f delta 860 zcmV-i1Ec)(2=EAyw10E(Xz$?Bz1{K7{?7gVolm!SK7F*aL+$3&?&Q($`}=;ks^1pN zi}Yzx=hL>Ti@f=Lf8Uq+YL(Ydvu6JL{=Tn&{P+ERbKB+b`}?}?)2CnffBydXb5blj zpN*%h@(0vmVMq9~u6~;OI$NGs&x$f%W{do12bmC$m2_KBw||7rSwo$)*M``yubVbs zybx5n6eff(>TGc~dy`!Zf4#_SnS$fltZ0jBnUxr#e0EYTRy5Yxm&;quk9px|mqNqS zb-I}3v)9$Sp618(bY5KMcK%MP)%Ba|Syj&Ry7}mlVdK4ze#z*gFN$TcSTCLx_2Me4 z^Pi*^L-*i)>k(=S}OdyGNhu^pn&9A%FMY z{(V5`(5Fk7ZxcNF?EcPd_x#h{{e$VJ4EYXfn`Z%C~;I{yG zD}u+n`hORh4{l=$`V`-tPWC5z4<--y9zJ|{Z|7iV@4?>r&V$)>_xxb*!A_uuZiE>S z{}zznm-z8s|KBwa55swIBKjh~YO7^aop&sM!Ncj!!|DCmy`5Q>&t|jpgNOI0_dd<0 zlk;qv@67J|Gq3?#K>J(3ycO*?^!NWRs_*U$k^NPEUc$q!mS@X0uR(y2{`tN0^Miag znPdn1)9LKN?*03dhYt_-^G_e_9~?{q3Ahc|U?Oe-{5>aPxa0qq&B*T1jJ*Dd=iknM zOTuDcLe6)l_jm5kX8Ck>kUcoKH`|{)xWBji;QkJ&l*xmE2^oYM%*QQYzvp}m_WS>e z>F9i5CueVHa-L>wHlAgzn~sCMoyn)WQ}X){vb`yd?_lrY{ReqIBZj{B;KB4}3-LjI me+0E(^8H`(OE{V-&WmXVQJ^ud%T|U9{Qm$3*jC2E5C8ykSoGci diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo index 64d5ed77c0ebe519fcadc0577ae6f3508f799a74..e063b4eabde2c4fe2473008d88969b9939421ea1 100644 GIT binary patch delta 979 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 BHdg=u diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs b/Essentials/PepperDashEssentials/ControlSystem.cs index a9808e15..381d83b1 100644 --- a/Essentials/PepperDashEssentials/ControlSystem.cs +++ b/Essentials/PepperDashEssentials/ControlSystem.cs @@ -40,7 +40,7 @@ namespace PepperDash.Essentials }, "listtielines", "Prints out all tie lines", ConsoleAccessLevelEnum.AccessOperator); - //GoWithLoad(); + GoWithLoad(); } /// diff --git a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs index 29fc2643..041b5a88 100644 --- a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs +++ b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs @@ -47,6 +47,11 @@ namespace PepperDash.Essentials.Fusion bool GuidFileExists; + bool IsRegisteredForSchedulePushNotifications = false; + + // Default poll time is 5 min unless overridden by config value + int SchedulePollInterval = 300000; + List StaticAssets; //ScheduleResponseEvent NextMeeting; @@ -263,22 +268,40 @@ namespace PepperDash.Essentials.Fusion { if (args.DeviceOnLine) { + CrestronEnvironment.Sleep(200); + // Send Push Notification Action request: string requestID = "InitialPushRequest"; - string actionRequest = - string.Format("{0}{1}", requestID, RoomGuid) + - "RegisterPushModel" + - "" + - "" + - "" + - "" + - "" + - "'"; + string actionRequest = + string.Format("\n{0}\n", requestID) + + "RegisterPushModel\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + //"\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n"; - Debug.Console(1, this, "Sending Fusion ScheduleQuery: \n{0}", actionRequest); + Debug.Console(1, this, "Sending Fusion ActionRequest: \n{0}", actionRequest); FusionRoom.ExtenderFusionRoomDataReservedSigs.ActionQuery.StringValue = actionRequest; } @@ -373,6 +396,27 @@ namespace PepperDash.Essentials.Fusion { try { + ActionResponse actionResponse = new ActionResponse(); + + TextReader reader = new StringReader(args.Sig.StringValue); + + actionResponse = CrestronXMLSerialization.DeSerializeObject(reader); + + if (actionResponse.RequestID == "InitialPushRequest") + { + var tempParam = actionResponse.Parameters.FirstOrDefault(p => p.ID.Equals("Registered")); + + if (tempParam != null) + { + if (tempParam.Value = 1) + IsRegisteredForSchedulePushNotifications = true; + else + { + IsRegisteredForSchedulePushNotifications = false; + } + } + } + } catch (Exception e) @@ -397,61 +441,58 @@ namespace PepperDash.Essentials.Fusion message.LoadXml(args.Sig.StringValue); - if (message.FirstChild.Name == "ScheduleResponse") + var scheuldResponse = message["ScheduleRespones"]; + + if (scheuldResponse != null) { - foreach (XmlElement element in message.FirstChild.ChildNodes) + // Check for push notification + if (scheuldResponse["RequestID"].InnerText == "RVRequest") { - if (element.Name == "RequestID") + var action = scheuldResponse["Action"]; + + if (action.InnerText.IndexOf("RequestSchedule") > -1) { - scheduleResponse.RequestID = element.InnerText; + RequestFullRoomSchedule("PushScheduleRefresh"); } - else if (element.Name == "RoomID") - { - scheduleResponse.RoomID = element.InnerText; - } - else if (element.Name == "RoomName") - { - scheduleResponse.RoomName = element.InnerText; - } - else if (element.Name == "Event") - { - Debug.Console(1, this, "Event Found:\n{0}", element.OuterXml); - - XmlReader reader = new XmlReader(element.OuterXml); - - Event tempEvent = new Event(); - - tempEvent = CrestronXMLSerialization.DeSerializeObject(reader); - - scheduleResponse.Events.Add(tempEvent); - } - } - } - - //XmlReader reader = new XmlReader(args.Sig.StringValue); - - //scheduleResponse = CrestronXMLSerialization.DeSerializeObject(reader); - - //Debug.Console(1, this, "ScheduleResponse DeSerialization Successful for Room: '{0}'", scheduleResponse.RoomName); - - if (scheduleResponse.Events.Count > 0) - { - Debug.Console(1, this, "Meetings Count: {0}\n", scheduleResponse.Events.Count); - - foreach (Event e in scheduleResponse.Events) + else // Not a push notification { - Debug.Console(1, this, "Subject: {0}", e.Subject); - Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); - Debug.Console(1, this, "Start Time: {0}", e.dtStart); - Debug.Console(1, this, "End Time: {0}\n", e.dtEnd); - var duration = e.dtEnd.Subtract(e.dtStart); - Debug.Console(1, this, "Duration: {0} minutes", duration.Minutes); + + foreach (XmlElement element in message.FirstChild.ChildNodes) + { + if (element.Name == "RequestID") + { + scheduleResponse.RequestID = element.InnerText; + } + else if (element.Name == "RoomID") + { + scheduleResponse.RoomID = element.InnerText; + } + else if (element.Name == "RoomName") + { + scheduleResponse.RoomName = element.InnerText; + } + else if (element.Name == "Event") + { + Debug.Console(1, this, "Event Found:\n{0}", element.OuterXml); + + XmlReader reader = new XmlReader(element.OuterXml); + + Event tempEvent = new Event(); + + tempEvent = CrestronXMLSerialization.DeSerializeObject(reader); + + scheduleResponse.Events.Add(tempEvent); + } + + } } } CurrentSchedule = scheduleResponse; + PrintTodaysSchedule(); + } catch (Exception e) { @@ -460,6 +501,25 @@ namespace PepperDash.Essentials.Fusion } } + void PrintTodaysSchedule() + { + if (CurrentSchedule.Events.Count > 0) + { + Debug.Console(1, this, "Today's Schedule for '{0}'\n", Room.Name); + + foreach (Event e in CurrentSchedule.Events) + { + Debug.Console(1, this, "Subject: {0}", e.Subject); + Debug.Console(1, this, "Organizer: {0}", e.Organizer); + Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); + Debug.Console(1, this, "Start Time: {0}", e.dtStart); + Debug.Console(1, this, "End Time: {0}", e.dtEnd); + var duration = e.dtEnd.Subtract(e.dtStart); + Debug.Console(1, this, "Duration: {0}\n", e.DurationInMinutes); + } + } + } + void SetUpSources() { // Sources @@ -936,6 +996,17 @@ namespace PepperDash.Essentials.Fusion } } + //[XmlRoot(ElementName = "ActionResponse")] + public class ActionResponse + { + //[XmlElement(ElementName = "RequestID")] + public string RequestID { get; set; } + //[XmlElement(ElementName = "ActionID")] + public string ActionID { get; set; } + //[XmlElement(ElementName = "Parameters")] + public List Parameters { get; set; } + } + //[XmlRoot(ElementName = "Parameter")] public class Parameter { @@ -1020,6 +1091,93 @@ namespace PepperDash.Essentials.Fusion public string HaveAttendees { get; set; } //[XmlElement(ElementName = "HaveResources")] public string HaveResources { get; set; } + + /// + /// Gets the duration of the meeting + /// + public string DurationInMinutes + { + get + { + string duration; + + var timeSpan = dtEnd.Subtract(dtStart); + int hours = timeSpan.Hours; + double minutes = timeSpan.Minutes; + double roundedMinutes = Math.Round(minutes); + if(hours > 0) + { + duration = string.Format("{0} hours {1} minutes", hours, roundedMinutes); + } + else + { + duration = string.Format("{0} minutes", roundedMinutes); + } + + return duration; + } + } + + /// + /// Gets the remaining time in the meeting. Returns null if the meeting is not currently in progress. + /// + public string RemainingTime + { + get + { + var now = DateTime.Now; + + string remainingTime; + + if (GetInProgress()) + { + var timeSpan = dtEnd.Subtract(now); + int hours = timeSpan.Hours; + double minutes = timeSpan.Minutes; + double roundedMinutes = Math.Round(minutes); + if (hours > 0) + { + remainingTime = string.Format("{0} hours {1} minutes", hours, roundedMinutes); + } + else + { + remainingTime = string.Format("{0} minutes", roundedMinutes); + } + + return remainingTime; + } + else + return null; + } + + } + + /// + /// Indicates that the meeting is in progress + /// + public bool isInProgress + { + get + { + return GetInProgress(); + } + } + + /// + /// Determines if the meeting is in progress + /// + /// Returns true if in progress + bool GetInProgress() + { + var now = DateTime.Now; + + if (now > dtStart && now < dtEnd) + { + return true; + } + else + return false; + } } //[XmlRoot(ElementName = "Resources")] diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo index d3ee2011e0f0ea580804e530108b27f2f61c46f2..f1d15bf47fc68567a8c23d6fbfcba85228d7a061 100644 GIT binary patch delta 1706 zcmV;b237gY4$cmcxPQBQk9Kw*?cN(d+&}pA-tN8aoloflYB#5LCy##L-}k#!{kB+M zq)&@FpSD$9{EZ*KeheScrqx8KhHbW$wiUyY}$A5hnY9r??; z`f2L*YaV>v^YQw+X@B#@3&CoD`ZR=#I$NC0 z-eeaywp!%1%+m2}RAbki?G&F>tLrz_v#Olsb@S09BLRCK{gTl~Ulhw?v0gkY>cv%7=RZj;h$fJa@y^ae z`v2ZT0{-Q?U4O0Hms$I>#L<+XcvpT6;C zCHnrXEU8s6X8LdU;la-Rk9wr((&XC&i$2R{JCoh%Y;Q8Vzq2!&WcRb3+4SD*;Nj%_ z;r;vjXeqO@c@Rq54K1Em)2#g2oPtd}CX{-bukz(AUw=-iua6#m&yX6#@&%x#Nvx~o z_;s;Zm9OVny&~BgKg}T2*zc0F{Q*EX(&N`+N5vX4(0tyAOBnKRn;b@_YOH z5AIFQXL~*k-vhe5bNfDSn1e^}(e)2!viei<{n1CS@`lIFfBuq@nWRr|H%VWFGc%c; z-_NG!*?+;#bb4!%x2M>35_YNkzv)jy!0U1okEdYPr=`j8Mzi$p6+-eR^ z+j(9u^OkJOV!bS;8LX5MK_%b4PxDVdy|@4H!S2KRyZbwN{^|MdWIvxw@83JWpJxwl zF)tgt3Fhh+oqf%@+K9vd`{wW9R`d644RaFC*MHtLpM1K1KbzgpvYm$q=MN61`;$+n z4?n$^o$t-gZ=>M?u)+M?0{GXQpP;L;^Wq0RR)AA}`RBhgw6=K*= z^M9Sm-o2guy@&ay5BH|Cd-r$p>8JOm4|g6+@>|SG2sfCNTR{JslM;6N|H3)hz15t2 zbrw#?&cVZb#KSw&$Foaf>E7i2KIdQ}g!ci3dgo?vx2Lz?%l`|>+zHD)ydBgC#doKZ{mI^g$-}*e z47f$(r2ifvF)vP4;K|)BC#*C!gNGpMRY{+}YXv zG@nhgz1gRqP6Eg1_P~SbxkVT6F+Df*{Qtr!>O|OXEZ@#c0zWV@Sw4HPmrr(bN*GbT zm9j*iKG->!a+-pQvw zoRShDmA*40g3V^+OWvQ}`+qc>PB6}$+5I^Ed(b+Pa3jpylfKv0{|l+!iI~GEGk=#m za-W}ndXQ7l`tVbVUS|h;JCym^-y`#SZ<6JCb{;3U0~65s7Qk*#XV=I73klqbh8@zvTDM&kyq1WRe~1Pp7j7yZ7%;9zHzS&p&;ze{e7fTz}Lq*cjMg0&W5P z_7gBXl>Zk_NGCFOqj>!j&o}D(^BwXe@6TrWbas$Y_&VF4Jh)Fhdw+*q{>g)Z`51&6 z%EQgDZ$BM_UH-pjHaZ{Jx#`5rZb(nFHXF~f*3Aa#jLE0F)BS_#LAE!gF;d3){)3$I zI<(aG;K9_NjUk%dOe56}(IN=_lJEbLU&5>F#ksER(8$(hD+B$10FExw4~QcG0J6l( AegFUf delta 1704 zcmV;Z23Psc4$KaaxPLnbkM<58-P<4EfB4|jgPnWZJD)z<*`aoGYIpMJ_x*jpTh(ui zQ>G%D8U;p^;`}^j$zu))wb$$Eo{7)yvGXB+gy7~ciUD%Po ztgD}U&t^qiRLiWy*yXd6YOx|B%)VUSath50Kl`M+X+}>MlYI8NTG!M3 zxSr07%iK=!NwvCuQ$4H7Szb3EJu(uo_t7sIee^}KEEemG+ml}n_$sr**BepyWO*Xz})s#^u9G@NExzCR%nKFqT7Pj?^g+<$n!ljZmJ z_aEGwoX_@r8omc~dFS?h+%N}^-lOXu&SdqcRpJh7_56&MPO!p_B zP9J`HFFW6xo!>^o1z>~uxdrgAIX^+4|L>cRhqs!K&$Bka%C0*S^k8p)FW=kU%d&e1 z`}g+t4zl~Rhr2|`PY?DUo*!hln2`?PU`}oU{%g)jr`P}Y&C2f1t)}HwzNp%~Gb_Zf zpMT~%lf8R8`+E=bPap10XZP;!kCXk^^ zd^6yiCgG<3{$Dr=_rghVKu@YVe@QNUR=&PoPQy7k*u9^Bx^pm{9ApOvI|s9Dvis?S zgL@CA=R~>P`+>E%0b(!(w}5-o6x`6={|jeeFf{-DF@lZ;+L`T69?lLPJh*rN;eWyX z^ZoNlzCWGazdzlZ+~3~`m_H6E)H^qWyFI=AUjAQ5=1y4d;q9PCD84(L>`(R{Odjq% zeE5(w!_MA=z4M(1v+3^n!QO+Nz*W5wW3na0N@1}-5w`;z%*QRj z-!vb$>-GPI)6xm2y>YCYwptvwZCy;((%4H0UxKii+)-+egw^#1+q{D0xj&hDrA zY?|%OKK*p^aA0a~03J-wExLG*>A9ij{})bCC&G4P`F36s_<@PZ^4SAQi|^!=Frs`b zWr;q0uyZiUAAGvMe}6We#U~~XG7R8u27LSJi1+vZzDd~Y#M5pBFY>FF@@3U|C!hXs zN=oGZ?B33d2sWFMFL{4@?|;*5I>9)1X2F`o2522gxDn>|o|JTe$=L0)8otW7T>1ozx<5||a*&v-U`E++mF8)EbN7&gy|Y+bf8(EkV8n%>ihBLDzDU9(mI