From 850f16b4949416a6cfd49061a21a5dad103e50f1 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Mon, 1 May 2017 17:48:35 -0600 Subject: [PATCH] Succesfully making schedule requests and returning schedule data for 24 hour period. Working on organizing data to be displayed on panel and ending/extending meetings. --- .../PepperDash_Essentials_Core.projectinfo | Bin 1276 -> 1274 bytes .../Essentials_DM/Essentials_DM.projectinfo | Bin 1137 -> 1132 bytes .../Essentials Devices Common.projectinfo | Bin 1158 -> 1151 bytes .../PepperDashEssentials/ControlSystem.cs | 4 +- .../Fusion/FusionSystemController.cs | 347 ++++++++++++++---- .../PepperDashEssentials.projectinfo | Bin 1860 -> 1861 bytes 6 files changed, 279 insertions(+), 72 deletions(-) diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo index ddebd653587248334c9f7a6d15cbd684b15ac6c1..8aea20f3f08991baede59de0dbc17315396d0510 100644 GIT binary patch delta 1047 zcmV+y1nB$x3Hk|;g@5wVqqbhtFH`#JWxiVF_0z1G|Nf^^ z)PR1R%a05CvA47PV0-8O_Rj8`-3O2McOKo}8}IHu*x#p*K7F*aL(S&Y?Bvn!`}=;k zs^1pNi}Yzx=hL>Ti@f=Le_z+#@B90{{_)@U_swmezwhts`WsKtzu(w>^(1TPn@O?s zzwV+wp03It5GsWw%99-dB7bJ?^>x$cix-0A#u=h&^mYOx~v%)VUSZn91LA0kn2IrpcFNj`gBt?OxiTuFW2pA-M-A) zpM7Sh-oD6|#d+Se4%K_~>5c4RDDg#BERX4{#iYD;Aol4SZ`L+|nUy8A4JbkX?Hzo2 z02m#Dbt(02f=Hj`)7gWahX?m}5AwZf_Tc{cy}il9hvyHbdj~tyo!u$5l)1Xqh?MX* zH+)`Av+{>BO*iwUkbm)MzRH)gd^x4AKYH{%GaL8A**K|by6b8=eqAh94ko*^+su>!8BEVD0Ds{0m~Q`HJSPusH7BR-Jg=8|OXh2_UKY~~ zcCZQO>E5ULr=Q;2fB0bc;r-qHojm{ae0Q>+Pp0?po!`&12e+7~jok!ucZ<$GZ02&4L$W)@d68eWq;RYAj^Flhy7O>)e|B$Y zmgTeA?EK*2{pr0=v+3kKo8~*S`#$YAKno_|7BFu)0ULV!fAcKt4b8%<{JcceT`kX+ zZC-;O;T3e`_s-7`^4VmP9qdmjX4$=epW>90Py{kbD4smX9vs}8?N1)u-`jm~pJK?# zbUv_iwLdghPqQ`~&$8Cd&cWW!hL^VKS^pJvVc_dji#eAyQC-S2-=)j7R1yQx7=4d}=h5E7@x6lw2fO$8w|72$w6jC)=G5-w(eL~Fez&UM z7R!tDX;J6XwyKM~`F($1*Wd5^`@a71-}m>;ZKuEQ@9Pjqff<0`*nRaRYv`LvvGl+0 z;y#|P${!Fag(b$59|0nN(S3d0wE5zNV7YOQXkZt0wm6%;$u4f$c9GXIqsOyZ(H7M* zD?u0e?4(+(h(NP1m$#g5^TH32thb!~)5Rp8y{^{vG(WDV^WrkM^gXFo*Kew4RXNM+ z=A%bOl=eRQC8LkND3--yy?9pCi>s{8f09}djUZ^_ot=mD|GkHQ1pLc&yIQv|v-W47 z-Kn=PvSo3eH?2eU9({Tve;7)9krm5h`f4#LuN{be`o^2J4Pa(vNo@m4(0_Y-yAMH% z4#B#V`ZhsCZ@W7OJG=MK&u8~{rqkWoes=G{r`f&9y-)A&f4Y-Rsin--twyATzq#S_ zYMPZllxez|FNKVMPxDp2oaM_Yb^Xz!@0r=SAI`=}P19Xh%kk@Cu_|BBvwB71JARs9 z7SsIodbO(RRskx3r&*ToPxkljKg_c8Pj?^g+<$n!ljZmJ_aEGwoX_@r0>1}zdFS?h z+-_zby$1$Ackf`bJG;$H8IZyB+yd|iPLJvK|HX6i;8t^T+RpQOnYU!V7VBj(&0q+d zaGvgcnt%G~z5Ry|b|2o~-QUUcPtSKJ`}t&g|K9oiJbQ49dD_@bFn71;?8D}6BP#zd zp3j3@&F8Csd{MP|X9BbHy-)L<$=O!8YyUbZoYGy z*|8vliMa*f51Sa%H= zf4Vohzt4Vt%sKM_g%fZyxLZy@ytDr|lYKWNyJMUe`Bh5_w>t0mZ4akA52yEM_jYDk zKAX+X4<6p1-upD0PR_GwzB9Y;(|!ZAU;=Id^Oh5^p~wF>&%)l&EWFCkOT^vP@@(1W zHRur+PDg(4{QMxFO(xmF{&YHfuzUahfi({l^h?>#+(J^#ONb~+!}x#}be+}NIGZ8n}|t(%>Ly`9OYyVL!H=|Q$P TrNJJP%LFF~W`EYXNfiJ9)Kyq7 diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo index 6c769cce9ece65ab066d1865f63a5235b728a7c9..4f156330eb0d78cd4673be38cf89c339baef3ff5 100644 GIT binary patch delta 1013 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 diff --git a/Essentials/PepperDashEssentials/ControlSystem.cs b/Essentials/PepperDashEssentials/ControlSystem.cs index 054077f5..23618c22 100644 --- a/Essentials/PepperDashEssentials/ControlSystem.cs +++ b/Essentials/PepperDashEssentials/ControlSystem.cs @@ -29,8 +29,8 @@ namespace PepperDash.Essentials /// public override void InitializeSystem() { - //CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Reloads configuration file", - // ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Reloads configuration file", + ConsoleAccessLevelEnum.AccessOperator); //CrestronConsole.AddNewConsoleCommand(s => TearDown(), "ungo", "Reloads configuration file", // ConsoleAccessLevelEnum.AccessOperator); CrestronConsole.AddNewConsoleCommand(s => diff --git a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs index 45030424..5bdd5441 100644 --- a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs +++ b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs @@ -4,6 +4,10 @@ using System.Linq; using System.Text; using Crestron.SimplSharp; +using Crestron.SimplSharp.CrestronIO; +using Crestron.SimplSharp.CrestronXml; +using Crestron.SimplSharp.CrestronXml.Serialization; +using Crestron.SimplSharp.CrestronXmlLinq; using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.Fusion; @@ -28,11 +32,15 @@ namespace PepperDash.Essentials.Fusion StringSigData SourceNameSig; + string GUID; + public EssentialsHuddleSpaceFusionSystemController(EssentialsHuddleSpaceRoom room, uint ipId) : base(room.Key + "-fusion") { Room = room; + GUID = "awesomeGuid-" + Room.Key; + CreateSymbolAndBasicSigs(ipId); SetUpSources(); SetUpCommunitcationMonitors(); @@ -53,11 +61,17 @@ namespace PepperDash.Essentials.Fusion void CreateSymbolAndBasicSigs(uint ipId) { - FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, "awesomeGuid-" + Room.Key); + FusionRoom = new FusionRoom(ipId, Global.ControlSystem, Room.Name, GUID); + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.Use(); + FusionRoom.Register(); FusionRoom.FusionStateChange += new FusionStateEventHandler(FusionRoom_FusionStateChange); + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.DeviceExtenderSigChange += new DeviceExtenderJoinChangeEventHandler(FusionRoomSchedule_DeviceExtenderSigChange); + + CrestronConsole.AddNewConsoleCommand(RequestFullRoomSchedule, "FusReqRoomSchedule", "Requests schedule of the room for the next 24 hours", ConsoleAccessLevelEnum.AccessOperator); + // Room to fusion room Room.OnFeedback.LinkInputSig(FusionRoom.SystemPowerOn.InputSig); SourceNameSig = FusionRoom.CreateOffsetStringSig(50, "Source - Name", eSigIoMask.InputSigOnly); @@ -73,6 +87,94 @@ namespace PepperDash.Essentials.Fusion } + /// + /// Generates a room schedule request for this room for the next 24 hours. + /// + /// string identifying this request. Used with a corresponding ScheduleResponse value + public void RequestFullRoomSchedule(string requestID) + { + // Need to see if we can omit the XML declaration + + //XmlWriterSettings settings = new XmlWriterSettings(); + //settings.OmitXmlDeclaration = true; + + //StringBuilder builder = new StringBuilder(); + + //XmlWriter xmlWriter = new XmlWriter(builder, settings); + + //RequestSchedule request = new RequestSchedule(requestID, GUID); + + //CrestronXMLSerialization.SerializeObject(xmlWriter, request); + + string requestTest = + string.Format("{0}{1}2017-05-01T12:45:3924", requestID, GUID); + + Debug.Console(1, this, "Sending Fusion ScheduleQuery: \n{0}", requestTest); + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleQuery.StringValue = requestTest; + } + + /// + /// Ends or Extends a meeting by the specified number of minutes. + /// + /// Number of minutes to extend the meeting. A value of 0 will end the meeting. + public void ModifyMeetingEndTime(string requestID, Event meeting, int extendMinutes) + { + //StringWriter stringWriter = new StringWriter(); + + //List parameters = new List(); + + //parameters.Add( new Parameter { ID = "MeetingID", Value = meeting.MeetingID }); + + //parameters.Add( new Parameter { ID = "EndTime", Value = extendMinutes.ToString()}); + + //RequestAction request = new RequestAction(GUID, "MeetingChange", parameters); + + //CrestronXMLSerialization.SerializeObject(stringWriter, request); + + string requestTest = string.Format( + "{0}{1}MeetingChange" + , requestID, meeting.MeetingID, extendMinutes); + + Debug.Console(1, this, "Sending MeetingChange Request: \n{0}", requestTest); + + FusionRoom.ExtenderRoomViewSchedulingDataReservedSigs.ScheduleQuery.StringValue = requestTest; + } + + void FusionRoomSchedule_DeviceExtenderSigChange(DeviceExtender currentDeviceExtender, SigEventArgs args) + { + Debug.Console(1, this, "Sig: {0} FusionResponse: {1}", args.Sig, args.Sig.StringValue); + + try + { + XmlReader reader = new XmlReader(args.Sig.StringValue); + + ScheduleResponse scheduleResponse = new ScheduleResponse(); + + scheduleResponse = CrestronXMLSerialization.DeSerializeObject(reader); + + Debug.Console(1, this, "ScheduleResponse DeSerialization Successfull 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) + { + 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); + } + } + + } + catch (Exception e) + { + Debug.Console(1, this, "Error parsing ScheduleResponse: {0}", e); + } + } + void SetUpSources() { // Sources @@ -111,75 +213,7 @@ namespace PepperDash.Essentials.Fusion break; } - // REMOVE THIS PROCESS: - //foreach (var kvp in dict) - //{ - // var src = kvp.Value; - // //var srcNum = src.Key; - // var pSrc = src.SourceDevice; - // if (pSrc == null) - // continue; - - // var keyNum = ExtractNumberFromKey(pSrc.Key); - // if (keyNum == -1) - // { - // Debug.Console(1, this, "WARNING: Cannot link source '{0}' to numbered Fusion attributes", pSrc.Key); - // continue; - // } - // string attrName = null; - // uint attrNum = Convert.ToUInt32(keyNum); - - // if (pSrc is ISetTopBoxControls) - // { - // attrName = "Source - TV " + keyNum; - // attrNum += 115; // TV starts at 116 - // } - // else if (pSrc is IDiscPlayerControls) - // { - // attrName = "Source - DVD " + keyNum; - // attrNum += 120; // DVD starts at 121 - // } - // //else if (pSrc is Pc) - // //{ - // // attrName = "Source - PC " + keyNum; - // // attrNum += 110; // PC starts at 111 - // //} - // else if (pSrc is Laptop) - // { - // attrName = "Source - Laptop " + keyNum; - // attrNum += 100; // Laptops start at 101 - // } - // //else if (pSrc is IVCR) - // //{ - // // attrName = "Source - VCR " + keyNum; - // // attrNum += 125; // VCRs start at 126 - // //} - - - // if (attrName == null) - // { - // Debug.Console(1, this, - // "Source '{0}' does not have corresponsing Fusion attribute type, skipping", - // src.SourceKey); - // continue; - // } - // Debug.Console(2, this, "Creating attribute '{0}' with join {1} for source {2}", - // attrName, attrNum, pSrc.Key); - // try - // { - // var sigD = FusionRoom.CreateOffsetBoolSig(attrNum, attrName, eSigIoMask.InputOutputSig); - // // Need feedback when this source is selected - // // Event handler, added below, will compare source changes with this sig dict - // SourceToFeedbackSigs.Add(pSrc, sigD.InputSig); - - // // And respond to selection in Fusion - // sigD.OutputSig.SetSigFalseAction(() => Room.RunRouteAction(kvp.Key)); - // } - // catch (Exception) - // { - // Debug.Console(2, this, "Error creating Fusion signal {0} {1} for device '{2}'. THIS NEEDS REWORKING", attrNum, attrName, pSrc.Key); - // } - //} + } else { @@ -502,4 +536,177 @@ namespace PepperDash.Essentials.Fusion } } + //**************************************************************************************************** + // Helper Classes for XML API + + + + + /// + /// All the data needed for a full schedule request in a room + /// + /// //[XmlRoot(ElementName = "RequestSchedule")] + public class RequestSchedule + { + //[XmlElement(ElementName = "RequestID")] + public string RequestID { get; set; } + //[XmlElement(ElementName = "RoomID")] + public string RoomID { get; set; } + //[XmlElement(ElementName = "Start")] + public DateTime Start { get; set; } + //[XmlElement(ElementName = "HourSpan")] + public double HourSpan { get; set; } + + public RequestSchedule(string requestID, string roomID) + { + RequestID = requestID; + RoomID = roomID; + Start = DateTime.Now; + HourSpan = 24; + } + } + + + //[XmlRoot(ElementName = "RequestAction")] + public class RequestAction + { + //[XmlElement(ElementName = "RequestID")] + public string RequestID { get; set; } + //[XmlElement(ElementName = "RoomID")] + public string RoomID { get; set; } + //[XmlElement(ElementName = "ActionID")] + public string ActionID { get; set; } + //[XmlElement(ElementName = "Parameters")] + public List Parameters { get; set; } + + public RequestAction(string roomID, string actionID, List parameters) + { + RoomID = roomID; + ActionID = actionID; + Parameters = parameters; + } + } + + //[XmlRoot(ElementName = "Parameter")] + public class Parameter + { + //[XmlAttribute(AttributeName = "ID")] + public string ID { get; set; } + //[XmlAttribute(AttributeName = "Value")] + public string Value { get; set; } + } + + ////[XmlRoot(ElementName = "Parameters")] + //public class Parameters + //{ + // //[XmlElement(ElementName = "Parameter")] + // public List Parameter { get; set; } + //} + + /// + /// Data structure for a ScheduleResponse from Fusion + /// + /// //[XmlRoot(ElementName = "ScheduleResponse")] + public class ScheduleResponse + { + //[XmlElement(ElementName = "RequestID")] + public string RequestID { get; set; } + //[XmlElement(ElementName = "RoomID")] + public string RoomID { get; set; } + //[XmlElement(ElementName = "RoomName")] + public string RoomName { get; set; } + //[XmlElement(ElementName = "Event")] + public List Events { get; set; } + } + + //[XmlRoot(ElementName = "Event")] + /// + /// Data structure for a Fusion Event + /// + public class Event + { + //[XmlElement(ElementName = "MeetingID")] + public string MeetingID { get; set; } + //[XmlElement(ElementName = "RVMeetingID")] + public string RVMeetingID { get; set; } + //[XmlElement(ElementName = "Recurring")] + public string Recurring { get; set; } + //[XmlElement(ElementName = "InstanceID")] + public string InstanceID { get; set; } + //[XmlElement(ElementName = "dtStart")] + public string DtStart { get; set; } + //[XmlElement(ElementName = "dtEnd")] + public string DtEnd { get; set; } + //[XmlElement(ElementName = "Organizer")] + public string Organizer { get; set; } + //[XmlElement(ElementName = "Attendees")] + public Attendees Attendees { get; set; } + //[XmlElement(ElementName = "IsEvent")] + public string IsEvent { get; set; } + //[XmlElement(ElementName = "IsRoomViewMeeting")] + public string IsRoomViewMeeting { get; set; } + //[XmlElement(ElementName = "IsPrivate")] + public string IsPrivate { get; set; } + //[XmlElement(ElementName = "IsExchangePrivate")] + public string IsExchangePrivate { get; set; } + //[XmlElement(ElementName = "MeetingTypes")] + public string MeetingTypes { get; set; } + //[XmlElement(ElementName = "ParticipantCode")] + public string ParticipantCode { get; set; } + //[XmlElement(ElementName = "PhoneNo")] + public string PhoneNo { get; set; } + //[XmlElement(ElementName = "WelcomeMsg")] + public string WelcomeMsg { get; set; } + //[XmlElement(ElementName = "Subject")] + public string Subject { get; set; } + //[XmlElement(ElementName = "LiveMeetingURL")] + public LiveMeetingURL LiveMeetingURL { get; set; } + //[XmlElement(ElementName = "ShareDocPath")] + public string ShareDocPath { get; set; } + //[XmlElement(ElementName = "Location")] + public string Location { get; set; } + //[XmlElement(ElementName = "OrganizerSMTP")] + public string OrganizerSMTP { get; set; } + + public List Resources { get; set; } + } + + public class Room + { + public string Name { get; set; } + public string ID { get; set; } + public string MPType { get; set; } + } + + //[XmlRoot(ElementName="Attendees")] + public class Attendees + { + //[XmlElement(ElementName="Required")] + public List Required { get; set; } + //[XmlElement(ElementName="Optional")] + public List Optional { get; set; } + } + + public class Attendee + { + public string Attendee { get; set; } + } + + //[XmlRoot(ElementName = "LiveMeeting")] + public class LiveMeeting + { + //[XmlElement(ElementName = "URL")] + public string URL { get; set; } + //[XmlElement(ElementName = "ID")] + public string ID { get; set; } + //[XmlElement(ElementName = "Key")] + public string Key { get; set; } + } + + //[XmlRoot(ElementName = "LiveMeetingURL")] + public class LiveMeetingURL + { + //[XmlElement(ElementName = "LiveMeeting")] + public LiveMeeting LiveMeeting { get; set; } + } } \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo index cfae0787f28f3000a8f769e64214ac4eb82f3865..6bb3ef8275bcb7cb0aea8abc94146067d911467b 100644 GIT binary patch delta 1624 zcmV-e2B-PN4#f_Tg@5wVqqbhtFH`#JWxiVF_0z1GpEgatYzt~bt!Kku<@6Q(IF}z6 z^kZ*l_rdng{q3FIH@goW?e9L?-5uZi^kC=S!%w$&K7F*aL+$3&?&Q($`}=;ks^1pN zi}Yzx=hL>Ti@f=Le_z+r@B90{{_)@U_swm8zwhts`u5xTpMOq@W&Er0boB%3y09aE zSyw+zy`C-4t7k=-FSAAdvxim`qm^J#5C(+VSwsD`*JeImUpH;Ocp+E~P@jfyQD=*@ z*_-U*##W2GmRUNU&5E|DmRX6h%V#ImVnsxleYw2l6q*-)_DOfsjGitg`RsMIuBZ8N zJ)IYqxt-#ZYJYY8rg~PDv%GFTdSoPE@1tKb`sj;dSuECzXGOiZ%If?lsRhvl@-g1o zc}V}?dq}{)T(_%r`!Z{P)>xK0`662u=XujQ4DZpW8>U`I{zX$YX{Mnp>O*|%)dYZ5D$^PE`hgo+1>F&dw`w!1|h>rXF5AIFQ zXL~*k-+u$TymR|LZkU5d@6q)SXR`WJ^8L|Aukwb+&42!qk(s1VZ#PL_gflalo!`%< z=h?x|bb4!%x2M>35_YNkzv)jy!0U1okEdYPr=`j8Mzi$p6+-eR^+j(9u z^OkJOV!bS;8LX5MK_%b4PxDVdy|@4H!S2KRyMOyTdH(77?qoloOz+=2zn^ChZZR(# zy9ws%7M*>~x!Q=s|NG|e;8yeZYz=b~&ez^FpM1K1KO@VK?L0gZ+9=t?j7vk+uJ+H z?tjl7?h+wCJ=lAAevsW_Mmm6lIk^S+uQ?~3UjN@WE4w?lnwD4jqH6QbtPsO~n(s{Z z?(OXFJ)ybvv4|g z4j$ek9^RQwb|(Ax?>*Rgus0*czjtpxe}Ax>@7!iOEXZIcZUOjf&V=pn|AmvV7fyl$ zm5LA9q%eeC+p+&(|G|TM8EKIF2l>t{BY$;o_hEj%yZ0$+mpt&nZUPxh!Yu&bGzmBL z_y594xED@>1A0=``Ac%)v-0)zavILT!S4P1)18Cq_J%2xV zIN7})Sc@AV22*egxHnC~4c+~}a0d2=X5jb72s#>QXSO?eI6ELlz5npw{`o$|+56Mk z{rl6s$^CuK!9)n}0}A!d&ERfNZ@-uS7m~RXmV00gq0GG$qO5u-)BLD!;+M1C7 delta 1623 zcmV-d2B`VP4#WhL^VKS^pJvVcv}y8XThLe3d^Y@5PG8ZFbNO*WKlXNZ zA8haJZ|^;Lv$yx?{?4QQd*i*m2lwtj+~3~$^wG`^wVPABlSjYr@B7`Vep@Ur(x*k8 zPur?4^5*ybeO*t#@9+Ei$A917H@E%$zQ3>Q+i&N8Iw_X%uYbnV)eora!VdUlUHvrm zdbT{To)u-j%oh329$Hb1R)Rr67!YP>4fWSvTl`*MH*LOnA!rSdpT=-eXN$Aho9yDo zR*SrrX*!~*!Sr}=R`ofnt6 zrQu1nx_(nVtAEN_UN;{-GBU9D(JvW&^hL2O7VE{cqF!8Ob^epof@lH>8Sm^or2p?d zB;a4J+ts>#nYBM_JWHK?ku8h!ylEYV_vq6NQ?DccA}f~1^xeMVG&us8j5fA9QZ{(tH0!SoF&dw`w!1|vi#ou{)2my z^VyzH!+-aHF7MpFj~nLT(R+0L!3MdrGo9X>Ob#BL@9oa=$-%?j-Mxd!?(8-*V?YMeaSOm-cREae|L>cF2e+Do({`TM z%e*DqvRE&RX$C80L{Q0h@6-I#Pw(wNe6aiQ{(tWNPM&{yzB}2^C)4})&hO{hgImnY z#%_YSxHg%?>BCR& zW#@ad^V?{+0BkTnw*dY%=O^g%|9$iE@K*EjdDiAv*>y*P9_;P!<$Jq(S$6MW|K8r- zL4S6C_HdU7`RT#l!}Eje7BkWT9L&irz<Gb;lzFFDbxz)71$`@6ecV>kc_S1Z4 zvUhK1e~oZO8qco%{L0gPl+J&ObdM6a47|@?dA5W)G*?y@%6Jcl=4X31lz{w*Y+8 zB;3^B{|hJKUN{L3=t))QFUf_^%GcM+X*dT5yZ7@?cMhhLgY4j7=U|pic0YY^aDVT? z^!(uAWcPkxEpC7qOu;SS-ZTX_boc+l85j)Be}9aiqk(p2yOW2rg9pgF9Na(OKcD3L z)7ky|)4j?4{hfgM!f}lZOLSa|7^TdT!ChdrZ#_J^#OO ziaHUt8_T!zlE4p4Oop5|>6e_GO3JrVmgv(5I|q~e!KeHC_h-{td}87t!vOAPz_*`{ zcz^%zn}oeiJncsCBEM=WUsj!W^63w!q(tt|?(NKoV6z$dlJ}?gKFy{RjB{spKYvdD z9<+`m+z9jbr0;e0|3a#FBIYp4%-`jX+~*WNipWq$Veb{|k;JInLX zR>!~ubiM_!+tbBP)#NKdmi8_%-V z%?9a=$)~&1{e$U2M!x+tr;Ias`Z>8V(|Zpd3#~)B{y#&&*AI##007F)ulxW2