From d1a9eec74dcdb69b1d5a006cb57b3ad978b8a505 Mon Sep 17 00:00:00 2001 From: Michael Oborne Date: Sat, 21 Apr 2012 08:04:59 +0800 Subject: [PATCH 01/19] firmware build --- .../Firmware/firmware2.xml | 44 +++++++------------ 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml b/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml index 178955920a..f63cb06b42 100644 --- a/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml +++ b/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml @@ -47,78 +47,66 @@ http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Quad-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Quad-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Quad-2560-2.hex - ArduCopter V2.5.3 Quad + ArduCopter V2.5.4 Quad #define FRAME_CONFIG QUAD_FRAME - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Tri-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Tri-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Tri-2560-2.hex - ArduCopter V2.5.3 Tri + ArduCopter V2.5.4 Tri #define FRAME_CONFIG TRI_FRAME - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Hexa-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Hexa-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Hexa-2560-2.hex - ArduCopter V2.5.3 Hexa X + ArduCopter V2.5.4 Hexa X #define FRAME_CONFIG HEXA_FRAME - 117 - - - http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-1280.hex - http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-2560.hex - http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-2560-2.hex - ArduCopter V2.5.3 Y6 - -#define FRAME_CONFIG Y6_FRAME - - - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octav-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octav-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octav-2560-2.hex - ArduCopter V2.5.3 Octa V + ArduCopter V2.5.4 Octa V #define FRAME_CONFIG OCTA_FRAME #define FRAME_ORIENTATION V_FRAME - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octa-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octa-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octa-2560-2.hex - ArduCopter V2.5.3 Octa X + ArduCopter V2.5.4 Octa X #define FRAME_CONFIG OCTA_FRAME - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Heli-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Heli-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Heli-2560-2.hex - ArduCopter V2.5.3 Heli (2560 only) + ArduCopter V2.5.4 Heli (2560 only) #define AUTO_RESET_LOITER 0 #define FRAME_CONFIG HELI_FRAME -#define INSTANT_PWM ENABLED // DEFAULT PIDS @@ -156,13 +144,13 @@ #define NAV_LOITER_IMAX 10 - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-QUADHIL-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-QUADHIL-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-QUADHIL-2560-2.hex - ArduCopter V2.5.3 Quad Hil + ArduCopter V2.5.4 Quad Hil #define FRAME_CONFIG QUAD_FRAME #define FRAME_ORIENTATION PLUS_FRAME @@ -172,13 +160,13 @@ - 117 + 118 http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-HELHIL-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-HELHIL-2560.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-HELHIL-2560-2.hex - ArduCopter V2.5.3 Heli Hil + ArduCopter V2.5.4 Heli Hil #define HIL_MODE HIL_MODE_ATTITUDE @@ -224,6 +212,6 @@ - 117 + 118 From 7d376a6dc77c5acfcc63ab23fd0967387b87a3c4 Mon Sep 17 00:00:00 2001 From: Michael Oborne Date: Sat, 21 Apr 2012 08:29:40 +0800 Subject: [PATCH 02/19] fix y6 firmware --- Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml b/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml index f63cb06b42..8d2e52463e 100644 --- a/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml +++ b/Tools/ArdupilotMegaPlanner/Firmware/firmware2.xml @@ -76,6 +76,17 @@ 118 + + http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-1280.hex + http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-2560.hex + http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Y6-2560-2.hex + ArduCopter V2.5.3 Y6 + +#define FRAME_CONFIG Y6_FRAME + + + 117 + http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octav-1280.hex http://meee146-planner.googlecode.com/git/Tools/ArdupilotMegaPlanner/Firmware/AC2-Octav-2560.hex From 4ff0510fcea07d378a2faeb4b5a48c3f1b8160ab Mon Sep 17 00:00:00 2001 From: Craig Elder Date: Mon, 16 Apr 2012 23:48:43 -0700 Subject: [PATCH 03/19] Test: Initial Test commit This is a test Signed-off-by: Craig Elder --- Tools/GIT_Test/GIT_Success.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/Tools/GIT_Test/GIT_Success.txt b/Tools/GIT_Test/GIT_Success.txt index a5cfb5e19b..b36e72a7b9 100644 --- a/Tools/GIT_Test/GIT_Success.txt +++ b/Tools/GIT_Test/GIT_Success.txt @@ -8,3 +8,4 @@ Test Developer ... Chris Anderson Phil Cole after following the instructions explicitly. +Craig Elder was here. From 671989c14bffde4df87d44057a1c3c4e8b2e0dbb Mon Sep 17 00:00:00 2001 From: Michael Oborne Date: Sat, 21 Apr 2012 15:30:15 +0800 Subject: [PATCH 04/19] APM Planner 1.1.72 fix turn radius length (100m) modify 3dr radio options modify heli Setup --- .../ArdupilotMegaPlanner/ArdupilotMega.csproj | 14 +- Tools/ArdupilotMegaPlanner/Common.cs | 12 +- .../Controls/ConnectionControl.Designer.cs | 88 + .../Controls/ConnectionControl.cs | 23 + .../Controls/ConnectionControl.resx | 120 ++ .../Controls/ConnectionToolStripItem.resx | 120 ++ .../Controls/ToolStripConnectionControl.cs | 17 + .../GCSViews/Configuration.cs | 8 +- .../ConfigurationView/ConfigPlanner.cs | 9 +- .../ConfigurationView/ConfigRawParams.cs | 2 +- .../ConfigTradHeli.Designer.cs | 162 +- .../ConfigurationView/ConfigTradHeli.cs | 84 +- .../ConfigurationView/ConfigTradHeli.resx | 236 ++- .../ConfigurationView/Setup.Designer.cs | 6 +- .../GCSViews/FlightData.cs | 4 +- .../GCSViews/FlightPlanner.cs | 4 +- Tools/ArdupilotMegaPlanner/LogBrowse.cs | 2 +- Tools/ArdupilotMegaPlanner/MAVLink.cs | 6 +- Tools/ArdupilotMegaPlanner/MainV2.Designer.cs | 169 +- Tools/ArdupilotMegaPlanner/MainV2.cs | 320 ++-- Tools/ArdupilotMegaPlanner/MainV2.resx | 2 +- Tools/ArdupilotMegaPlanner/Msi/wix.pdb | Bin 19968 -> 19968 bytes .../Properties/AssemblyInfo.cs | 2 +- .../Radio/3DRradio.Designer.cs | 391 ++++- Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs | 58 +- .../ArdupilotMegaPlanner/Radio/3DRradio.resx | 1453 +++++++++++++++-- .../bin/Release/ArdupilotMegaPlanner.pdb | Bin 1175040 -> 1183232 bytes .../bin/Release/version.txt | 2 +- 28 files changed, 2722 insertions(+), 592 deletions(-) create mode 100644 Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.Designer.cs create mode 100644 Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.cs create mode 100644 Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.resx create mode 100644 Tools/ArdupilotMegaPlanner/Controls/ConnectionToolStripItem.resx create mode 100644 Tools/ArdupilotMegaPlanner/Controls/ToolStripConnectionControl.cs diff --git a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj index ba72a4d3c1..e59e2bf130 100644 --- a/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj +++ b/Tools/ArdupilotMegaPlanner/ArdupilotMega.csproj @@ -152,7 +152,7 @@ False - True + False @@ -238,6 +238,12 @@ Component + + UserControl + + + ConnectionControl.cs + Form @@ -254,6 +260,9 @@ ProgressReporterDialogue.cs + + Component + UserControl @@ -558,6 +567,9 @@ BackstageView.cs + + ConnectionControl.cs + ConfigPanel.cs diff --git a/Tools/ArdupilotMegaPlanner/Common.cs b/Tools/ArdupilotMegaPlanner/Common.cs index 3f441511a0..d8c51aa67e 100644 --- a/Tools/ArdupilotMegaPlanner/Common.cs +++ b/Tools/ArdupilotMegaPlanner/Common.cs @@ -104,8 +104,9 @@ namespace ArdupilotMega float cog = -1; float target = -1; float nav_bearing = -1; + public GMapControl MainMap; - public GMapMarkerPlane(PointLatLng p, float heading, float cog, float nav_bearing,float target) + public GMapMarkerPlane(PointLatLng p, float heading, float cog, float nav_bearing,float target, GMapControl map) : base(p) { this.heading = heading; @@ -113,6 +114,7 @@ namespace ArdupilotMega this.target = target; this.nav_bearing = nav_bearing; Size = SizeSt; + MainMap = map; } public override void OnRender(Graphics g) @@ -136,7 +138,11 @@ namespace ArdupilotMega float desired_lead_dist = 100; - float alpha = (desired_lead_dist / MainV2.cs.radius) * rad2deg; + + double width = (MainMap.Manager.GetDistance(MainMap.FromLocalToLatLng(0, 0), MainMap.FromLocalToLatLng(MainMap.Width, 0)) * 1000.0); + double m2pixelwidth = MainMap.Width / width; + + float alpha = ((desired_lead_dist * (float)m2pixelwidth) / MainV2.cs.radius) * rad2deg; if (MainV2.cs.radius < 0) { @@ -643,7 +649,7 @@ namespace ArdupilotMega while (dataStream.CanRead && bytes > 0) { Application.DoEvents(); - log.Info(saveto + " " + bytes); + log.Debug(saveto + " " + bytes); int len = dataStream.Read(buf1, 0, buf1.Length); bytes -= len; fs.Write(buf1, 0, len); diff --git a/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.Designer.cs b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.Designer.cs new file mode 100644 index 0000000000..0d932cf9c0 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.Designer.cs @@ -0,0 +1,88 @@ +namespace ArdupilotMega.Controls +{ + partial class ConnectionControl + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.cmb_Baud = new System.Windows.Forms.ComboBox(); + this.cmb_ConnectionType = new System.Windows.Forms.ComboBox(); + this.cmb_Connection = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // cmb_Baud + // + this.cmb_Baud.FormattingEnabled = true; + this.cmb_Baud.Location = new System.Drawing.Point(130, 12); + this.cmb_Baud.Name = "cmb_Baud"; + this.cmb_Baud.Size = new System.Drawing.Size(70, 21); + this.cmb_Baud.TabIndex = 0; + this.cmb_Baud.Items.AddRange(new object[] { + "4800", + "9600", + "14400", + "19200", + "28800", + "38400", + "57600", + "115200"}); + // + // cmb_ConnectionType + // + this.cmb_ConnectionType.FormattingEnabled = true; + this.cmb_ConnectionType.Location = new System.Drawing.Point(79, 39); + this.cmb_ConnectionType.Name = "cmb_ConnectionType"; + this.cmb_ConnectionType.Size = new System.Drawing.Size(121, 21); + this.cmb_ConnectionType.TabIndex = 1; + // + // cmb_Connection + // + this.cmb_Connection.FormattingEnabled = true; + this.cmb_Connection.Location = new System.Drawing.Point(3, 12); + this.cmb_Connection.Name = "cmb_Connection"; + this.cmb_Connection.Size = new System.Drawing.Size(121, 21); + this.cmb_Connection.TabIndex = 2; + // + // ConnectionControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.cmb_Connection); + this.Controls.Add(this.cmb_ConnectionType); + this.Controls.Add(this.cmb_Baud); + this.Name = "ConnectionControl"; + this.Size = new System.Drawing.Size(211, 75); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox cmb_Baud; + private System.Windows.Forms.ComboBox cmb_ConnectionType; + private System.Windows.Forms.ComboBox cmb_Connection; + } +} diff --git a/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.cs b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.cs new file mode 100644 index 0000000000..404a8de181 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace ArdupilotMega.Controls +{ + public partial class ConnectionControl : UserControl + { + public ConnectionControl() + { + InitializeComponent(); + } + + public ComboBox CMB_baudrate { get { return this.cmb_Baud; } } + public ComboBox CMB_serialport { get { return this.cmb_Connection; } } + public ComboBox TOOL_APMFirmware { get { return this.cmb_ConnectionType; } } + } +} diff --git a/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.resx b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.resx new file mode 100644 index 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/Controls/ConnectionControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/Controls/ConnectionToolStripItem.resx b/Tools/ArdupilotMegaPlanner/Controls/ConnectionToolStripItem.resx new file mode 100644 index 0000000000..7080a7d118 --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/Controls/ConnectionToolStripItem.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/Controls/ToolStripConnectionControl.cs b/Tools/ArdupilotMegaPlanner/Controls/ToolStripConnectionControl.cs new file mode 100644 index 0000000000..5eae73b3ad --- /dev/null +++ b/Tools/ArdupilotMegaPlanner/Controls/ToolStripConnectionControl.cs @@ -0,0 +1,17 @@ +using System.Windows.Forms; +namespace ArdupilotMega.Controls +{ + public class ToolStripConnectionControl : ToolStripControlHost + { + // Call the base constructor passing in a MonthCalendar instance. + public ToolStripConnectionControl() + : base(new ConnectionControl()) + { + } + + public ConnectionControl ConnectionControl + { + get { return Control as ConnectionControl; } + } + } +} \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs b/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs index 6410f1e3db..fd5a942cda 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/Configuration.cs @@ -69,7 +69,7 @@ namespace ArdupilotMega.GCSViews XTRK_GAIN_SC1.Name = "XTRK_GAIN_SC"; // enable disable relevbant hardware tabs - if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { this.ConfigTabs.SuspendLayout(); ConfigTabs.SelectedIndex = 0; @@ -656,7 +656,7 @@ namespace ArdupilotMega.GCSViews { StreamWriter sw = new StreamWriter(sfd.OpenFile()); string input = DateTime.Now + " Frame : + | Arducopter Kit | Kit motors"; - if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { input = DateTime.Now + " Plane: Skywalker"; } @@ -986,7 +986,7 @@ namespace ArdupilotMega.GCSViews if (startup) return; MainV2.config["distunits"] = CMB_distunits.Text; - MainV2.instance.changeunits(); + MainV2.instance.ChangeUnits(); } private void CMB_speedunits_SelectedIndexChanged(object sender, EventArgs e) @@ -994,7 +994,7 @@ namespace ArdupilotMega.GCSViews if (startup) return; MainV2.config["speedunits"] = CMB_speedunits.Text; - MainV2.instance.changeunits(); + MainV2.instance.ChangeUnits(); } diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs index f09ac19d4c..3e35ec89ce 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigPlanner.cs @@ -237,8 +237,9 @@ namespace ArdupilotMega.GCSViews.ConfigurationView ((MyButton)sender).Enabled = true; startup = true; - // AR todo: fix this up - //Configuration_Load(null, null); + + + startup = false; } private void CHK_speechbattery_CheckedChanged(object sender, EventArgs e) @@ -276,7 +277,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView if (startup) return; MainV2.config["distunits"] = CMB_distunits.Text; - MainV2.instance.changeunits(); + MainV2.instance.ChangeUnits(); } private void CMB_speedunits_SelectedIndexChanged(object sender, EventArgs e) @@ -284,7 +285,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView if (startup) return; MainV2.config["speedunits"] = CMB_speedunits.Text; - MainV2.instance.changeunits(); + MainV2.instance.ChangeUnits(); } private void CMB_rateattitude_SelectedIndexChanged(object sender, EventArgs e) diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs index 4d9cf61ece..a131ea1b17 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigRawParams.cs @@ -162,7 +162,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView { StreamWriter sw = new StreamWriter(sfd.OpenFile()); string input = DateTime.Now + " Frame : + | Arducopter Kit | Kit motors"; - if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { input = DateTime.Now + " Plane: Skywalker"; } diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs index ca8b57a6bf..211699c119 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.Designer.cs @@ -31,21 +31,21 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigTradHeli)); this.groupBox5 = new System.Windows.Forms.GroupBox(); - this.H1_ENABLE = new System.Windows.Forms.RadioButton(); + this.H_SWASH_TYPE = new System.Windows.Forms.RadioButton(); this.CCPM = new System.Windows.Forms.RadioButton(); this.BUT_swash_manual = new ArdupilotMega.MyButton(); this.label41 = new System.Windows.Forms.Label(); this.groupBox3 = new System.Windows.Forms.GroupBox(); this.label46 = new System.Windows.Forms.Label(); this.label45 = new System.Windows.Forms.Label(); - this.GYR_ENABLE = new System.Windows.Forms.CheckBox(); - this.GYR_GAIN = new System.Windows.Forms.TextBox(); + this.H_GYR_ENABLE = new System.Windows.Forms.CheckBox(); + this.H_GYR_GAIN = new System.Windows.Forms.TextBox(); this.BUT_HS4save = new ArdupilotMega.MyButton(); this.label21 = new System.Windows.Forms.Label(); - this.COL_MIN = new System.Windows.Forms.TextBox(); + this.H_COL_MIN = new System.Windows.Forms.TextBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.COL_MID = new System.Windows.Forms.TextBox(); - this.COL_MAX = new System.Windows.Forms.TextBox(); + this.H_COL_MID = new System.Windows.Forms.TextBox(); + this.H_COL_MAX = new System.Windows.Forms.TextBox(); this.BUT_0collective = new ArdupilotMega.MyButton(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.label24 = new System.Windows.Forms.Label(); @@ -60,17 +60,17 @@ this.label37 = new System.Windows.Forms.Label(); this.label36 = new System.Windows.Forms.Label(); this.label26 = new System.Windows.Forms.Label(); - this.PIT_MAX = new System.Windows.Forms.TextBox(); + this.H_PIT_MAX = new System.Windows.Forms.TextBox(); this.label25 = new System.Windows.Forms.Label(); - this.ROL_MAX = new System.Windows.Forms.TextBox(); + this.H_ROL_MAX = new System.Windows.Forms.TextBox(); this.label23 = new System.Windows.Forms.Label(); this.label22 = new System.Windows.Forms.Label(); this.label20 = new System.Windows.Forms.Label(); this.label19 = new System.Windows.Forms.Label(); this.label18 = new System.Windows.Forms.Label(); - this.SV3_POS = new System.Windows.Forms.TextBox(); - this.SV2_POS = new System.Windows.Forms.TextBox(); - this.SV1_POS = new System.Windows.Forms.TextBox(); + this.H_SV3_POS = new System.Windows.Forms.TextBox(); + this.H_SV2_POS = new System.Windows.Forms.TextBox(); + this.H_SV1_POS = new System.Windows.Forms.TextBox(); this.HS3_REV = new System.Windows.Forms.CheckBox(); this.HS2_REV = new System.Windows.Forms.CheckBox(); this.HS1_REV = new System.Windows.Forms.CheckBox(); @@ -97,19 +97,19 @@ // // groupBox5 // - this.groupBox5.Controls.Add(this.H1_ENABLE); + this.groupBox5.Controls.Add(this.H_SWASH_TYPE); this.groupBox5.Controls.Add(this.CCPM); resources.ApplyResources(this.groupBox5, "groupBox5"); this.groupBox5.Name = "groupBox5"; this.groupBox5.TabStop = false; // - // H1_ENABLE + // H_SWASH_TYPE // - resources.ApplyResources(this.H1_ENABLE, "H1_ENABLE"); - this.H1_ENABLE.Name = "H1_ENABLE"; - this.H1_ENABLE.TabStop = true; - this.H1_ENABLE.UseVisualStyleBackColor = true; - this.H1_ENABLE.CheckedChanged += new System.EventHandler(this.H1_ENABLE_CheckedChanged); + resources.ApplyResources(this.H_SWASH_TYPE, "H_SWASH_TYPE"); + this.H_SWASH_TYPE.Name = "H_SWASH_TYPE"; + this.H_SWASH_TYPE.TabStop = true; + this.H_SWASH_TYPE.UseVisualStyleBackColor = true; + this.H_SWASH_TYPE.CheckedChanged += new System.EventHandler(this.H_SWASH_TYPE_CheckedChanged); // // CCPM // @@ -134,8 +134,8 @@ // this.groupBox3.Controls.Add(this.label46); this.groupBox3.Controls.Add(this.label45); - this.groupBox3.Controls.Add(this.GYR_ENABLE); - this.groupBox3.Controls.Add(this.GYR_GAIN); + this.groupBox3.Controls.Add(this.H_GYR_ENABLE); + this.groupBox3.Controls.Add(this.H_GYR_GAIN); resources.ApplyResources(this.groupBox3, "groupBox3"); this.groupBox3.Name = "groupBox3"; this.groupBox3.TabStop = false; @@ -150,18 +150,18 @@ resources.ApplyResources(this.label45, "label45"); this.label45.Name = "label45"; // - // GYR_ENABLE + // H_GYR_ENABLE // - resources.ApplyResources(this.GYR_ENABLE, "GYR_ENABLE"); - this.GYR_ENABLE.Name = "GYR_ENABLE"; - this.GYR_ENABLE.UseVisualStyleBackColor = true; - this.GYR_ENABLE.CheckedChanged += new System.EventHandler(this.GYR_ENABLE__CheckedChanged); + resources.ApplyResources(this.H_GYR_ENABLE, "H_GYR_ENABLE"); + this.H_GYR_ENABLE.Name = "H_GYR_ENABLE"; + this.H_GYR_ENABLE.UseVisualStyleBackColor = true; + this.H_GYR_ENABLE.CheckedChanged += new System.EventHandler(this.GYR_ENABLE__CheckedChanged); // - // GYR_GAIN + // H_GYR_GAIN // - resources.ApplyResources(this.GYR_GAIN, "GYR_GAIN"); - this.GYR_GAIN.Name = "GYR_GAIN"; - this.GYR_GAIN.Validating += new System.ComponentModel.CancelEventHandler(this.GYR_GAIN__Validating); + resources.ApplyResources(this.H_GYR_GAIN, "H_GYR_GAIN"); + this.H_GYR_GAIN.Name = "H_GYR_GAIN"; + this.H_GYR_GAIN.Validating += new System.ComponentModel.CancelEventHandler(this.GYR_GAIN__Validating); // // BUT_HS4save // @@ -175,36 +175,36 @@ resources.ApplyResources(this.label21, "label21"); this.label21.Name = "label21"; // - // COL_MIN + // H_COL_MIN // - resources.ApplyResources(this.COL_MIN, "COL_MIN"); - this.COL_MIN.Name = "COL_MIN"; + resources.ApplyResources(this.H_COL_MIN, "H_COL_MIN"); + this.H_COL_MIN.Name = "H_COL_MIN"; // // groupBox1 // this.groupBox1.Controls.Add(this.label41); this.groupBox1.Controls.Add(this.label21); - this.groupBox1.Controls.Add(this.COL_MIN); - this.groupBox1.Controls.Add(this.COL_MID); - this.groupBox1.Controls.Add(this.COL_MAX); + this.groupBox1.Controls.Add(this.H_COL_MIN); + this.groupBox1.Controls.Add(this.H_COL_MID); + this.groupBox1.Controls.Add(this.H_COL_MAX); this.groupBox1.Controls.Add(this.BUT_0collective); resources.ApplyResources(this.groupBox1, "groupBox1"); this.groupBox1.Name = "groupBox1"; this.groupBox1.TabStop = false; // - // COL_MID + // H_COL_MID // - resources.ApplyResources(this.COL_MID, "COL_MID"); - this.COL_MID.Name = "COL_MID"; - this.COL_MID.Validating += new System.ComponentModel.CancelEventHandler(this.PWM_Validating); + resources.ApplyResources(this.H_COL_MID, "H_COL_MID"); + this.H_COL_MID.Name = "H_COL_MID"; + this.H_COL_MID.Validating += new System.ComponentModel.CancelEventHandler(this.PWM_Validating); // - // COL_MAX + // H_COL_MAX // - resources.ApplyResources(this.COL_MAX, "COL_MAX"); - this.COL_MAX.Name = "COL_MAX"; - this.COL_MAX.Enter += new System.EventHandler(this.COL_MAX__Enter); - this.COL_MAX.Leave += new System.EventHandler(this.COL_MAX__Leave); - this.COL_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.PWM_Validating); + resources.ApplyResources(this.H_COL_MAX, "H_COL_MAX"); + this.H_COL_MAX.Name = "H_COL_MAX"; + this.H_COL_MAX.Enter += new System.EventHandler(this.COL_MAX__Enter); + this.H_COL_MAX.Leave += new System.EventHandler(this.COL_MAX__Leave); + this.H_COL_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.PWM_Validating); // // BUT_0collective // @@ -334,22 +334,22 @@ resources.ApplyResources(this.label26, "label26"); this.label26.Name = "label26"; // - // PIT_MAX + // H_PIT_MAX // - resources.ApplyResources(this.PIT_MAX, "PIT_MAX"); - this.PIT_MAX.Name = "PIT_MAX"; - this.PIT_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.PIT_MAX__Validating); + resources.ApplyResources(this.H_PIT_MAX, "H_PIT_MAX"); + this.H_PIT_MAX.Name = "H_PIT_MAX"; + this.H_PIT_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.PIT_MAX__Validating); // // label25 // resources.ApplyResources(this.label25, "label25"); this.label25.Name = "label25"; // - // ROL_MAX + // H_ROL_MAX // - resources.ApplyResources(this.ROL_MAX, "ROL_MAX"); - this.ROL_MAX.Name = "ROL_MAX"; - this.ROL_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.ROL_MAX__Validating); + resources.ApplyResources(this.H_ROL_MAX, "H_ROL_MAX"); + this.H_ROL_MAX.Name = "H_ROL_MAX"; + this.H_ROL_MAX.Validating += new System.ComponentModel.CancelEventHandler(this.ROL_MAX__Validating); // // label23 // @@ -376,23 +376,23 @@ resources.ApplyResources(this.label18, "label18"); this.label18.Name = "label18"; // - // SV3_POS + // H_SV3_POS // - resources.ApplyResources(this.SV3_POS, "SV3_POS"); - this.SV3_POS.Name = "SV3_POS"; - this.SV3_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos3_Validating); + resources.ApplyResources(this.H_SV3_POS, "H_SV3_POS"); + this.H_SV3_POS.Name = "H_SV3_POS"; + this.H_SV3_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos3_Validating); // - // SV2_POS + // H_SV2_POS // - resources.ApplyResources(this.SV2_POS, "SV2_POS"); - this.SV2_POS.Name = "SV2_POS"; - this.SV2_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos2_Validating); + resources.ApplyResources(this.H_SV2_POS, "H_SV2_POS"); + this.H_SV2_POS.Name = "H_SV2_POS"; + this.H_SV2_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos2_Validating); // - // SV1_POS + // H_SV1_POS // - resources.ApplyResources(this.SV1_POS, "SV1_POS"); - this.SV1_POS.Name = "SV1_POS"; - this.SV1_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos1_Validating); + resources.ApplyResources(this.H_SV1_POS, "H_SV1_POS"); + this.H_SV1_POS.Name = "H_SV1_POS"; + this.H_SV1_POS.Validating += new System.ComponentModel.CancelEventHandler(this.TXT_srvpos1_Validating); // // HS3_REV // @@ -665,17 +665,17 @@ this.Controls.Add(this.label37); this.Controls.Add(this.label36); this.Controls.Add(this.label26); - this.Controls.Add(this.PIT_MAX); + this.Controls.Add(this.H_PIT_MAX); this.Controls.Add(this.label25); - this.Controls.Add(this.ROL_MAX); + this.Controls.Add(this.H_ROL_MAX); this.Controls.Add(this.label23); this.Controls.Add(this.label22); this.Controls.Add(this.label20); this.Controls.Add(this.label19); this.Controls.Add(this.label18); - this.Controls.Add(this.SV3_POS); - this.Controls.Add(this.SV2_POS); - this.Controls.Add(this.SV1_POS); + this.Controls.Add(this.H_SV3_POS); + this.Controls.Add(this.H_SV2_POS); + this.Controls.Add(this.H_SV1_POS); this.Controls.Add(this.HS3_REV); this.Controls.Add(this.HS2_REV); this.Controls.Add(this.HS1_REV); @@ -707,21 +707,21 @@ #endregion private System.Windows.Forms.GroupBox groupBox5; - private System.Windows.Forms.RadioButton H1_ENABLE; + private System.Windows.Forms.RadioButton H_SWASH_TYPE; private System.Windows.Forms.RadioButton CCPM; private MyButton BUT_swash_manual; private System.Windows.Forms.Label label41; private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.Label label46; private System.Windows.Forms.Label label45; - private System.Windows.Forms.CheckBox GYR_ENABLE; - private System.Windows.Forms.TextBox GYR_GAIN; + private System.Windows.Forms.CheckBox H_GYR_ENABLE; + private System.Windows.Forms.TextBox H_GYR_GAIN; private MyButton BUT_HS4save; private System.Windows.Forms.Label label21; - private System.Windows.Forms.TextBox COL_MIN; + private System.Windows.Forms.TextBox H_COL_MIN; private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox COL_MID; - private System.Windows.Forms.TextBox COL_MAX; + private System.Windows.Forms.TextBox H_COL_MID; + private System.Windows.Forms.TextBox H_COL_MAX; private MyButton BUT_0collective; private System.Windows.Forms.GroupBox groupBox2; private System.Windows.Forms.Label label24; @@ -736,17 +736,17 @@ private System.Windows.Forms.Label label37; private System.Windows.Forms.Label label36; private System.Windows.Forms.Label label26; - private System.Windows.Forms.TextBox PIT_MAX; + private System.Windows.Forms.TextBox H_PIT_MAX; private System.Windows.Forms.Label label25; - private System.Windows.Forms.TextBox ROL_MAX; + private System.Windows.Forms.TextBox H_ROL_MAX; private System.Windows.Forms.Label label23; private System.Windows.Forms.Label label22; private System.Windows.Forms.Label label20; private System.Windows.Forms.Label label19; private System.Windows.Forms.Label label18; - private System.Windows.Forms.TextBox SV3_POS; - private System.Windows.Forms.TextBox SV2_POS; - private System.Windows.Forms.TextBox SV1_POS; + private System.Windows.Forms.TextBox H_SV3_POS; + private System.Windows.Forms.TextBox H_SV2_POS; + private System.Windows.Forms.TextBox H_SV1_POS; private System.Windows.Forms.CheckBox HS3_REV; private System.Windows.Forms.CheckBox HS2_REV; private System.Windows.Forms.CheckBox HS1_REV; diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs index c6c29abea2..c4d3effe1d 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.cs @@ -22,65 +22,65 @@ namespace ArdupilotMega.GCSViews.ConfigurationView InitializeComponent(); } - private void H1_ENABLE_CheckedChanged(object sender, EventArgs e) + private void H_SWASH_TYPE_CheckedChanged(object sender, EventArgs e) { if (startup) return; try { - if (MainV2.comPort.param["H1_ENABLE"] == null) + if (MainV2.comPort.param["H_SWASH_TYPE"] == null) { CustomMessageBox.Show("Not Available on " + MainV2.cs.firmware.ToString()); } else { - MainV2.comPort.setParam("H1_ENABLE", ((RadioButton)sender).Checked == true ? 1 : 0); + MainV2.comPort.setParam("H_SWASH_TYPE", ((RadioButton)sender).Checked == true ? 1 : 0); } } - catch { CustomMessageBox.Show("Set H1_ENABLE Failed"); } + catch { CustomMessageBox.Show("Set H_SWASH_TYPE Failed"); } } private void BUT_swash_manual_Click(object sender, EventArgs e) { try { - if (MainV2.comPort.param["HSV_MAN"].ToString() == "1") + if (MainV2.comPort.param["H_SV_MAN"].ToString() == "1") { - MainV2.comPort.setParam("COL_MIN", int.Parse(COL_MIN.Text)); - MainV2.comPort.setParam("COL_MAX", int.Parse(COL_MAX.Text)); - MainV2.comPort.setParam("HSV_MAN", 0); // randy request - last + MainV2.comPort.setParam("H_COL_MIN", int.Parse(H_COL_MIN.Text)); + MainV2.comPort.setParam("H_COL_MAX", int.Parse(H_COL_MAX.Text)); + MainV2.comPort.setParam("H_SV_MAN", 0); // randy request - last BUT_swash_manual.Text = "Manual"; - COL_MAX.Enabled = false; - COL_MID.Enabled = false; - COL_MIN.Enabled = false; + H_COL_MAX.Enabled = false; + H_COL_MID.Enabled = false; + H_COL_MIN.Enabled = false; BUT_0collective.Enabled = false; } else { - COL_MAX.Text = "1500"; - COL_MIN.Text = "1500"; - MainV2.comPort.setParam("HSV_MAN", 1); // randy request + H_COL_MAX.Text = "1500"; + H_COL_MIN.Text = "1500"; + MainV2.comPort.setParam("H_SV_MAN", 1); // randy request BUT_swash_manual.Text = "Save"; - COL_MAX.Enabled = true; - COL_MID.Enabled = true; - COL_MIN.Enabled = true; + H_COL_MAX.Enabled = true; + H_COL_MID.Enabled = true; + H_COL_MIN.Enabled = true; BUT_0collective.Enabled = true; } } - catch { CustomMessageBox.Show("Failed to set HSV_MAN"); } + catch { CustomMessageBox.Show("Failed to set H_SV_MAN"); } } private void BUT_HS4save_Click(object sender, EventArgs e) { try { - if (MainV2.comPort.param["HSV_MAN"].ToString() == "1") + if (MainV2.comPort.param["H_SV_MAN"].ToString() == "1") { MainV2.comPort.setParam("HS4_MIN", int.Parse(HS4_MIN.Text)); MainV2.comPort.setParam("HS4_MAX", int.Parse(HS4_MAX.Text)); - MainV2.comPort.setParam("HSV_MAN", 0); // randy request - last + MainV2.comPort.setParam("H_SV_MAN", 0); // randy request - last BUT_HS4save.Text = "Manual"; HS4_MAX.Enabled = false; @@ -90,7 +90,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView { HS4_MIN.Text = "1500"; HS4_MAX.Text = "1500"; - MainV2.comPort.setParam("HSV_MAN", 1); // randy request + MainV2.comPort.setParam("H_SV_MAN", 1); // randy request BUT_HS4save.Text = "Save"; @@ -98,7 +98,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView HS4_MIN.Enabled = true; } } - catch { CustomMessageBox.Show("Failed to set HSV_MAN"); } + catch { CustomMessageBox.Show("Failed to set H_SV_MAN"); } } private void tabHeli_Click(object sender, EventArgs e) @@ -122,10 +122,10 @@ namespace ArdupilotMega.GCSViews.ConfigurationView { try { - if (int.Parse(COL_MIN.Text) > HS3.minline) - COL_MIN.Text = HS3.minline.ToString(); - if (int.Parse(COL_MAX.Text) < HS3.maxline) - COL_MAX.Text = HS3.maxline.ToString(); + if (int.Parse(H_COL_MIN.Text) > HS3.minline) + H_COL_MIN.Text = HS3.minline.ToString(); + if (int.Parse(H_COL_MAX.Text) < HS3.maxline) + H_COL_MAX.Text = HS3.maxline.ToString(); } catch { } } @@ -194,10 +194,10 @@ namespace ArdupilotMega.GCSViews.ConfigurationView try { - MainV2.comPort.setParam("HSV_MAN", 1); // randy request + MainV2.comPort.setParam("H_SV_MAN", 1); // randy request MainV2.comPort.setParam(((TextBox)sender).Name, test); System.Threading.Thread.Sleep(100); - MainV2.comPort.setParam("HSV_MAN", 0); // randy request - last + MainV2.comPort.setParam("H_SV_MAN", 0); // randy request - last } catch { CustomMessageBox.Show("Set " + ((TextBox)sender).Name + " failed"); } @@ -217,10 +217,10 @@ namespace ArdupilotMega.GCSViews.ConfigurationView try { - MainV2.comPort.setParam("HSV_MAN", 1); // randy request + MainV2.comPort.setParam("H_SV_MAN", 1); // randy request MainV2.comPort.setParam(((TextBox)sender).Name, test); System.Threading.Thread.Sleep(100); - MainV2.comPort.setParam("HSV_MAN", 0); // randy request - last + MainV2.comPort.setParam("H_SV_MAN", 0); // randy request - last } catch { CustomMessageBox.Show("Set " + ((TextBox)sender).Name + " failed"); } } @@ -239,10 +239,10 @@ namespace ArdupilotMega.GCSViews.ConfigurationView try { - MainV2.comPort.setParam("HSV_MAN", 1); // randy request + MainV2.comPort.setParam("H_SV_MAN", 1); // randy request MainV2.comPort.setParam(((TextBox)sender).Name, test); System.Threading.Thread.Sleep(100); - MainV2.comPort.setParam("HSV_MAN", 0); // randy request - last + MainV2.comPort.setParam("H_SV_MAN", 0); // randy request - last } catch { CustomMessageBox.Show("Set " + ((TextBox)sender).Name + " failed"); } } @@ -254,11 +254,11 @@ namespace ArdupilotMega.GCSViews.ConfigurationView try { - MainV2.comPort.setParam("COL_MID", MainV2.cs.ch3in); + MainV2.comPort.setParam("H_COL_MID", MainV2.cs.ch3in); - COL_MID.Text = MainV2.comPort.param["COL_MID"].ToString(); + H_COL_MID.Text = MainV2.comPort.param["H_COL_MID"].ToString(); } - catch { CustomMessageBox.Show("Set COL_MID_ failed"); } + catch { CustomMessageBox.Show("Set H_COL_MID failed"); } } private void HS1_REV_CheckedChanged(object sender, EventArgs e) @@ -379,7 +379,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView this.Enabled = true; } - if (MainV2.comPort.param["GYR_ENABLE"] == null) + if (MainV2.comPort.param["H_GYR_ENABLE"] == null) { this.Enabled = false; return; @@ -394,10 +394,10 @@ namespace ArdupilotMega.GCSViews.ConfigurationView startup = true; try { - if (MainV2.comPort.param.ContainsKey("H1_ENABLE")) + if (MainV2.comPort.param.ContainsKey("H_SWASH_TYPE")) { - CCPM.Checked = MainV2.comPort.param["H1_ENABLE"].ToString() == "0" ? true : false; - H1_ENABLE.Checked = !CCPM.Checked; + CCPM.Checked = MainV2.comPort.param["H_SWASH_TYPE"].ToString() == "0" ? true : false; + H_SWASH_TYPE.Checked = !CCPM.Checked; } foreach (string value in MainV2.comPort.param.Keys) @@ -453,7 +453,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView } catch { } - if (MainV2.comPort.param["HSV_MAN"] == null || MainV2.comPort.param["HSV_MAN"].ToString() == "0") + if (MainV2.comPort.param["H_SV_MAN"] == null || MainV2.comPort.param["H_SV_MAN"].ToString() == "0") return; if (HS3.minline == 0) @@ -477,8 +477,8 @@ namespace ArdupilotMega.GCSViews.ConfigurationView { try { - HS3.minline = int.Parse(COL_MIN.Text); - HS3.maxline = int.Parse(COL_MAX.Text); + HS3.minline = int.Parse(H_COL_MIN.Text); + HS3.maxline = int.Parse(H_COL_MAX.Text); HS4.maxline = int.Parse(HS4_MIN.Text); HS4.minline = int.Parse(HS4_MAX.Text); } diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx index 99fe5c163d..133ab792d2 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigTradHeli.resx @@ -117,42 +117,36 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - - NoControl - - - 67, 19 + + 67, 15 - - 39, 17 + + 42, 24 - - 137 + + + 0 - + H1 - - H1_ENABLE + + H_SWASH_TYPE - + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox5 - + 0 True + NoControl @@ -223,7 +217,7 @@ BUT_swash_manual - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null $this @@ -321,55 +315,55 @@ 1 - + True - + NoControl - + 57, 19 - + 15, 14 - + 118 - - GYR_ENABLE + + H_GYR_ENABLE - + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox3 - + 2 - + 41, 35 - + 47, 20 - + 119 - + 1000 - - GYR_GAIN + + H_GYR_GAIN - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox3 - + 3 @@ -415,7 +409,7 @@ BUT_HS4save - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null $this @@ -453,85 +447,85 @@ 1 - + False - + 18, 173 - + 43, 20 - + 119 - + 1500 - - COL_MIN + + H_COL_MIN - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - + 2 - + False - + 17, 117 - + 44, 20 - + 117 - + 1500 - - COL_MID + + H_COL_MID - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - + 3 - + False - + 18, 45 - + 43, 20 - + 115 - + 1500 - - COL_MAX + + H_COL_MAX - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + groupBox1 - + 4 @@ -556,7 +550,7 @@ BUT_0collective - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null groupBox1 @@ -933,28 +927,28 @@ 18 - + 314, 362 - + 47, 20 - + 156 - + 4500 - - PIT_MAX + + H_PIT_MAX - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - + 19 @@ -987,28 +981,28 @@ 20 - + 314, 336 - + 47, 20 - + 154 - + 4500 - - ROL_MAX + + H_ROL_MAX - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - + 21 @@ -1161,76 +1155,76 @@ 26 - + 57, 314 - + 39, 20 - + 146 - + 180 - - SV3_POS + + H_SV3_POS - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - + 27 - + 57, 288 - + 39, 20 - + 145 - + 60 - - SV2_POS + + H_SV2_POS - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - + 28 - + 57, 262 - + 39, 20 - + 144 - + -60 - - SV1_POS + + H_SV1_POS - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - + 29 @@ -1360,7 +1354,7 @@ HS4 - ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.HorizontalProgressBar2, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null $this @@ -1381,7 +1375,7 @@ HS3 - ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.VerticalProgressBar2, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null $this @@ -1411,7 +1405,7 @@ Gservoloc - AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + AGaugeApp.AGauge, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null $this @@ -1576,6 +1570,6 @@ ConfigTradHeli - ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4485.38897, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4494.24488, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs index 6476469624..79ba73a8cd 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/Setup.Designer.cs @@ -38,15 +38,15 @@ this.backstageView.Dock = System.Windows.Forms.DockStyle.Fill; this.backstageView.Location = new System.Drawing.Point(0, 0); this.backstageView.Name = "backstageView"; - this.backstageView.Size = new System.Drawing.Size(823, 468); + this.backstageView.Size = new System.Drawing.Size(931, 468); this.backstageView.TabIndex = 0; // // Setup // - this.ClientSize = new System.Drawing.Size(823, 468); + this.ClientSize = new System.Drawing.Size(931, 468); this.Controls.Add(this.backstageView); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MinimumSize = new System.Drawing.Size(839, 506); + this.MinimumSize = new System.Drawing.Size(947, 506); this.Name = "Setup"; this.Text = "Setup"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Setup_FormClosing); diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs index 38c680626d..11e610087c 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs @@ -267,7 +267,7 @@ namespace ArdupilotMega.GCSViews continue; } if (!comPort.BaseStream.IsOpen) - lastdata = DateTime.MinValue; + lastdata = DateTime.Now; // re-request servo data if (!(lastdata.AddSeconds(8) > DateTime.Now) && comPort.BaseStream.IsOpen) { @@ -479,7 +479,7 @@ namespace ArdupilotMega.GCSViews if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { - routes.Markers.Add(new GMapMarkerPlane(currentloc, MainV2.cs.yaw, MainV2.cs.groundcourse, MainV2.cs.nav_bearing, MainV2.cs.target_bearing)); + routes.Markers.Add(new GMapMarkerPlane(currentloc, MainV2.cs.yaw, MainV2.cs.groundcourse, MainV2.cs.nav_bearing, MainV2.cs.target_bearing, gMapControl1)); } else { diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs index 4c861632ad..f6e873f156 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs @@ -550,7 +550,7 @@ namespace ArdupilotMega.GCSViews { reader.Read(); reader.ReadStartElement("CMD"); - if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { reader.ReadToFollowing("APM"); } @@ -3047,7 +3047,7 @@ namespace ArdupilotMega.GCSViews if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { - routes.Markers.Add(new GMapMarkerPlane(currentloc, MainV2.cs.yaw, MainV2.cs.groundcourse, MainV2.cs.nav_bearing, MainV2.cs.target_bearing) { ToolTipText = MainV2.cs.alt.ToString("0"), ToolTipMode = MarkerTooltipMode.Always }); + routes.Markers.Add(new GMapMarkerPlane(currentloc, MainV2.cs.yaw, MainV2.cs.groundcourse, MainV2.cs.nav_bearing, MainV2.cs.target_bearing, MainMap) { ToolTipText = MainV2.cs.alt.ToString("0"), ToolTipMode = MarkerTooltipMode.Always }); } else { diff --git a/Tools/ArdupilotMegaPlanner/LogBrowse.cs b/Tools/ArdupilotMegaPlanner/LogBrowse.cs index 8d9dfa0b57..d48c9d4fc8 100644 --- a/Tools/ArdupilotMegaPlanner/LogBrowse.cs +++ b/Tools/ArdupilotMegaPlanner/LogBrowse.cs @@ -157,7 +157,7 @@ namespace ArdupilotMega { reader.Read(); reader.ReadStartElement("LOGFORMAT"); - if (MainV2.APMFirmware == MainV2.Firmwares.ArduPlane) + if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) { reader.ReadToFollowing("APM"); } diff --git a/Tools/ArdupilotMegaPlanner/MAVLink.cs b/Tools/ArdupilotMegaPlanner/MAVLink.cs index 7f50841193..b9fa51deec 100644 --- a/Tools/ArdupilotMegaPlanner/MAVLink.cs +++ b/Tools/ArdupilotMegaPlanner/MAVLink.cs @@ -1027,8 +1027,9 @@ namespace ArdupilotMega public void requestDatastream(byte id, byte hzrate) { + double pps = 0; - + /* switch (id) { case (byte)MAVLink.MAV_DATA_STREAM.ALL: @@ -1117,8 +1118,9 @@ namespace ArdupilotMega { return; } + */ - log.InfoFormat("Request stream {0} at {1} hz : currently {2}", Enum.Parse(typeof(MAV_DATA_STREAM), id.ToString()), hzrate, pps); + log.InfoFormat("Request stream {0} at {1} hz", Enum.Parse(typeof(MAV_DATA_STREAM), id.ToString()), hzrate); getDatastream(id, hzrate); } diff --git a/Tools/ArdupilotMegaPlanner/MainV2.Designer.cs b/Tools/ArdupilotMegaPlanner/MainV2.Designer.cs index c4d10ef9de..31a34c309f 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.Designer.cs @@ -29,23 +29,56 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainV2)); + this.MyView = new System.Windows.Forms.Panel(); + this.MainMenu = new System.Windows.Forms.MenuStrip(); this.MenuFlightData = new System.Windows.Forms.ToolStripButton(); this.MenuFlightPlanner = new System.Windows.Forms.ToolStripButton(); this.MenuConfiguration = new System.Windows.Forms.ToolStripButton(); this.MenuSimulation = new System.Windows.Forms.ToolStripButton(); this.MenuFirmware = new System.Windows.Forms.ToolStripButton(); - this.MenuConnect = new System.Windows.Forms.ToolStripButton(); - this.CMB_serialport = new System.Windows.Forms.ToolStripComboBox(); - this.MainMenu = new System.Windows.Forms.MenuStrip(); this.MenuTerminal = new System.Windows.Forms.ToolStripButton(); - this.CMB_baudrate = new System.Windows.Forms.ToolStripComboBox(); - this.TOOL_APMFirmware = new System.Windows.Forms.ToolStripComboBox(); this.MenuHelp = new System.Windows.Forms.ToolStripButton(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.MyView = new System.Windows.Forms.Panel(); + this.MenuConnect = new System.Windows.Forms.ToolStripButton(); + this.toolStripConnectionControl = new ArdupilotMega.Controls.ToolStripConnectionControl(); this.MainMenu.SuspendLayout(); this.SuspendLayout(); // + // MyView + // + this.MyView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(38)))), ((int)(((byte)(39)))), ((int)(((byte)(40))))); + this.MyView.Dock = System.Windows.Forms.DockStyle.Fill; + this.MyView.ForeColor = System.Drawing.Color.White; + this.MyView.Location = new System.Drawing.Point(0, 76); + this.MyView.Margin = new System.Windows.Forms.Padding(0); + this.MyView.Name = "MyView"; + this.MyView.Size = new System.Drawing.Size(1008, 461); + this.MyView.TabIndex = 3; + // + // MainMenu + // + this.MainMenu.BackColor = System.Drawing.SystemColors.Control; + this.MainMenu.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("MainMenu.BackgroundImage"))); + this.MainMenu.GripMargin = new System.Windows.Forms.Padding(0); + this.MainMenu.ImageScalingSize = new System.Drawing.Size(76, 76); + this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.MenuFlightData, + this.MenuFlightPlanner, + this.MenuConfiguration, + this.MenuSimulation, + this.MenuFirmware, + this.MenuTerminal, + this.MenuHelp, + this.MenuConnect, + this.toolStripConnectionControl}); + this.MainMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; + this.MainMenu.Location = new System.Drawing.Point(0, 0); + this.MainMenu.Name = "MainMenu"; + this.MainMenu.Padding = new System.Windows.Forms.Padding(0); + this.MainMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; + this.MainMenu.Size = new System.Drawing.Size(1008, 76); + this.MainMenu.TabIndex = 5; + this.MainMenu.Text = "menuStrip1"; + // // MenuFlightData // this.MenuFlightData.AutoSize = false; @@ -114,57 +147,6 @@ this.MenuFirmware.ToolTipText = "Firmware"; this.MenuFirmware.Click += new System.EventHandler(this.MenuFirmware_Click); // - // MenuConnect - // - this.MenuConnect.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.MenuConnect.AutoSize = false; - this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; - this.MenuConnect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.MenuConnect.ImageTransparentColor = System.Drawing.Color.Magenta; - this.MenuConnect.Margin = new System.Windows.Forms.Padding(0); - this.MenuConnect.Name = "MenuConnect"; - this.MenuConnect.Padding = new System.Windows.Forms.Padding(0, 0, 72, 72); - this.MenuConnect.Size = new System.Drawing.Size(76, 76); - this.MenuConnect.Click += new System.EventHandler(this.MenuConnect_Click); - // - // CMB_serialport - // - this.CMB_serialport.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.CMB_serialport.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.CMB_serialport.Name = "CMB_serialport"; - this.CMB_serialport.Size = new System.Drawing.Size(150, 76); - this.CMB_serialport.SelectedIndexChanged += new System.EventHandler(this.CMB_serialport_SelectedIndexChanged); - this.CMB_serialport.Enter += new System.EventHandler(this.CMB_serialport_Enter); - this.CMB_serialport.Click += new System.EventHandler(this.CMB_serialport_Click); - // - // MainMenu - // - this.MainMenu.AutoSize = false; - this.MainMenu.BackColor = System.Drawing.SystemColors.Control; - this.MainMenu.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("MainMenu.BackgroundImage"))); - this.MainMenu.GripMargin = new System.Windows.Forms.Padding(0); - this.MainMenu.ImageScalingSize = new System.Drawing.Size(76, 76); - this.MainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuFlightData, - this.MenuFlightPlanner, - this.MenuConfiguration, - this.MenuSimulation, - this.MenuFirmware, - this.MenuTerminal, - this.MenuConnect, - this.CMB_baudrate, - this.CMB_serialport, - this.TOOL_APMFirmware, - this.MenuHelp}); - this.MainMenu.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.MainMenu.Location = new System.Drawing.Point(0, 0); - this.MainMenu.Name = "MainMenu"; - this.MainMenu.Padding = new System.Windows.Forms.Padding(0); - this.MainMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; - this.MainMenu.Size = new System.Drawing.Size(1008, 76); - this.MainMenu.TabIndex = 1; - this.MainMenu.Text = "menuStrip1"; - // // MenuTerminal // this.MenuTerminal.AutoSize = false; @@ -179,32 +161,6 @@ this.MenuTerminal.ToolTipText = "Terminal"; this.MenuTerminal.Click += new System.EventHandler(this.MenuTerminal_Click); // - // CMB_baudrate - // - this.CMB_baudrate.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.CMB_baudrate.Items.AddRange(new object[] { - "4800", - "9600", - "14400", - "19200", - "28800", - "38400", - "57600", - "115200"}); - this.CMB_baudrate.Name = "CMB_baudrate"; - this.CMB_baudrate.Size = new System.Drawing.Size(76, 76); - this.CMB_baudrate.SelectedIndexChanged += new System.EventHandler(this.CMB_baudrate_SelectedIndexChanged); - this.CMB_baudrate.TextChanged += new System.EventHandler(this.CMB_baudrate_TextChanged); - // - // TOOL_APMFirmware - // - this.TOOL_APMFirmware.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.TOOL_APMFirmware.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.TOOL_APMFirmware.MaxDropDownItems = 2; - this.TOOL_APMFirmware.Name = "TOOL_APMFirmware"; - this.TOOL_APMFirmware.Size = new System.Drawing.Size(121, 76); - this.TOOL_APMFirmware.SelectedIndexChanged += new System.EventHandler(this.TOOL_APMFirmware_SelectedIndexChanged); - // // MenuHelp // this.MenuHelp.AutoSize = false; @@ -219,22 +175,25 @@ this.MenuHelp.ToolTipText = "Terminal"; this.MenuHelp.Click += new System.EventHandler(this.MenuHelp_Click); // - // toolStripMenuItem1 + // MenuConnect // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(141, 20); - this.toolStripMenuItem1.Text = "toolStripMenuItem1"; + this.MenuConnect.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.MenuConnect.AutoSize = false; + this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; + this.MenuConnect.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.MenuConnect.ImageTransparentColor = System.Drawing.Color.Magenta; + this.MenuConnect.Margin = new System.Windows.Forms.Padding(0); + this.MenuConnect.Name = "MenuConnect"; + this.MenuConnect.Padding = new System.Windows.Forms.Padding(0, 0, 72, 72); + this.MenuConnect.Size = new System.Drawing.Size(76, 76); + this.MenuConnect.Click += new System.EventHandler(this.MenuConnect_Click); // - // MyView + // toolStripConnectionControl // - this.MyView.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(38)))), ((int)(((byte)(39)))), ((int)(((byte)(40))))); - this.MyView.Dock = System.Windows.Forms.DockStyle.Fill; - this.MyView.ForeColor = System.Drawing.Color.White; - this.MyView.Location = new System.Drawing.Point(0, 76); - this.MyView.Margin = new System.Windows.Forms.Padding(0); - this.MyView.Name = "MyView"; - this.MyView.Size = new System.Drawing.Size(1008, 461); - this.MyView.TabIndex = 3; + this.toolStripConnectionControl.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.toolStripConnectionControl.BackColor = System.Drawing.Color.Transparent; + this.toolStripConnectionControl.Name = "toolStripConnectionControl"; + this.toolStripConnectionControl.Size = new System.Drawing.Size(203, 73); // // MainV2 // @@ -257,26 +216,24 @@ this.MainMenu.ResumeLayout(false); this.MainMenu.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } #endregion + + private System.Windows.Forms.Panel MyView; + private System.Windows.Forms.MenuStrip MainMenu; private System.Windows.Forms.ToolStripButton MenuFlightData; private System.Windows.Forms.ToolStripButton MenuFlightPlanner; private System.Windows.Forms.ToolStripButton MenuConfiguration; private System.Windows.Forms.ToolStripButton MenuSimulation; private System.Windows.Forms.ToolStripButton MenuFirmware; - private System.Windows.Forms.ToolStripComboBox CMB_serialport; - private System.Windows.Forms.ToolStripButton MenuConnect; - private System.Windows.Forms.MenuStrip MainMenu; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; - private System.Windows.Forms.ToolStripComboBox CMB_baudrate; - private System.Windows.Forms.Panel MyView; private System.Windows.Forms.ToolStripButton MenuTerminal; - private System.Windows.Forms.ToolStripComboBox TOOL_APMFirmware; + private System.Windows.Forms.ToolStripButton MenuConnect; + private System.Windows.Forms.ToolStripButton MenuHelp; - //public static WebCam_Capture.WebCamCapture webCamCapture1; - + private ArdupilotMega.Controls.ToolStripConnectionControl toolStripConnectionControl; } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs index 3f3e862b62..0e684d98f4 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.cs @@ -31,6 +31,8 @@ namespace ArdupilotMega { private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + // used to hide/show console window [DllImport("user32.dll")] public static extern int FindWindow(string szClass, string szTitle); [DllImport("user32.dll")] @@ -39,41 +41,88 @@ namespace ArdupilotMega const int SW_SHOWNORMAL = 1; const int SW_HIDE = 0; + /// + /// Main Comport interface + /// public static MAVLink comPort = new MAVLink(); + /// + /// Comport name + /// public static string comPortName = ""; + /// + /// use to store all internal config + /// public static Hashtable config = new Hashtable(); + /// + /// used to prevent comport access for exclusive use + /// public static bool giveComport = false; - public static Firmwares APMFirmware = Firmwares.ArduPlane; + /// + /// mono detection + /// public static bool MONO = false; - + /// + /// speech engein enable + /// public static bool speechEnable = false; + /// + /// spech engine static class + /// public static Speech speechEngine = null; - + /// + /// joystick static class + /// public static Joystick joystick = null; + /// + /// track last joystick packet sent. used to track timming + /// DateTime lastjoystick = DateTime.Now; - + /// + /// hud background image grabber from a video stream - not realy that efficent. ie no hardware overlays etc. + /// public static WebCamService.Capture cam = null; - + /// + /// the static global state of the currently connected MAV + /// public static CurrentState cs = new CurrentState(); - + /// + /// controls the main serial reader thread + /// bool serialThread = false; - + /// + /// unused at this point - potential to move all forms to this single binding source. need to evalutate performance/exception issues + /// static internal BindingSource bs; - - TcpListener listener; - - DateTime heatbeatSend = DateTime.Now; - + /// + /// used for mini https server for websockets/mjpeg video stream, and network link kmls + /// + private TcpListener listener; + /// + /// track the last heartbeat sent + /// + private DateTime heatbeatSend = DateTime.Now; + /// + /// used to call anything as needed. + /// public static MainV2 instance = null; - + /// + /// used to feed in a network link kml to the http server + /// public string georefkml = ""; + /// + /// enum of firmwares + /// public enum Firmwares { ArduPlane, ArduCopter2, } + /// + /// declared here if i want a "single" instance of the form + /// ie configuration gets reloaded on every click + /// GCSViews.FlightData FlightData; GCSViews.FlightPlanner FlightPlanner; GCSViews.Configuration Configuration; @@ -82,13 +131,20 @@ namespace ArdupilotMega GCSViews.Firmware Firmware; GCSViews.Terminal Terminal; + /// + /// control for the serial port and firmware selector. + /// + private ConnectionControl _connectionControl; + public MainV2() { Form splash = new Splash(); splash.Show(); string strVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); - strVersion = ""; + + strVersion = "mav " + MAVLink.MAVLINK_WIRE_PROTOCOL_VERSION; + splash.Text = "APM Planner " + Application.ProductVersion + " " + strVersion + " By Michael Oborne"; splash.Refresh(); @@ -98,6 +154,14 @@ namespace ArdupilotMega instance = this; InitializeComponent(); + + _connectionControl = toolStripConnectionControl.ConnectionControl; + _connectionControl.CMB_baudrate.TextChanged += this.CMB_baudrate_TextChanged; + _connectionControl.CMB_baudrate.SelectedIndexChanged += this.CMB_baudrate_SelectedIndexChanged; + _connectionControl.CMB_serialport.SelectedIndexChanged += this.CMB_serialport_SelectedIndexChanged; + _connectionControl.CMB_serialport.Enter += this.CMB_serialport_Enter; + _connectionControl.CMB_serialport.Click += this.CMB_serialport_Click; + _connectionControl.TOOL_APMFirmware.SelectedIndexChanged += this.TOOL_APMFirmware_SelectedIndexChanged; srtm.datadirectory = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + "srtm"; @@ -113,24 +177,35 @@ namespace ArdupilotMega List list = new List(); foreach (object obj in Enum.GetValues(typeof(Firmwares))) { - TOOL_APMFirmware.Items.Add(obj); + _connectionControl.TOOL_APMFirmware.Items.Add(obj); } - if (TOOL_APMFirmware.Items.Count > 0) - TOOL_APMFirmware.SelectedIndex = 0; + if (_connectionControl.TOOL_APMFirmware.Items.Count > 0) + _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; this.Text = splash.Text; comPort.BaseStream.BaudRate = 115200; - CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); - CMB_serialport.Items.Add("TCP"); - CMB_serialport.Items.Add("UDP"); - if (CMB_serialport.Items.Count > 0) + // ** Old +// CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); +// CMB_serialport.Items.Add("TCP"); +// CMB_serialport.Items.Add("UDP"); +// if (CMB_serialport.Items.Count > 0) +// { +// CMB_baudrate.SelectedIndex = 7; +// CMB_serialport.SelectedIndex = 0; +// } + // ** new + _connectionControl.CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); + _connectionControl.CMB_serialport.Items.Add("TCP"); + _connectionControl.CMB_serialport.Items.Add("UDP"); + if (_connectionControl.CMB_serialport.Items.Count > 0) { - CMB_baudrate.SelectedIndex = 7; - CMB_serialport.SelectedIndex = 0; + _connectionControl.CMB_baudrate.SelectedIndex = 7; + _connectionControl.CMB_serialport.SelectedIndex = 0; } + // ** Done splash.Refresh(); Application.DoEvents(); @@ -172,7 +247,7 @@ namespace ArdupilotMega if (MainV2.config["CHK_GDIPlus"] != null) GCSViews.FlightData.myhud.UseOpenGL = !bool.Parse(MainV2.config["CHK_GDIPlus"].ToString()); - changeunits(); + ChangeUnits(); try { @@ -258,6 +333,9 @@ namespace ArdupilotMega splash.Close(); } + /// + /// used to create planner screenshots - access by control-s + /// internal void ScreenShot() { Rectangle bounds = Screen.GetBounds(Point.Empty); @@ -276,13 +354,13 @@ namespace ArdupilotMega private void CMB_serialport_Click(object sender, EventArgs e) { - string oldport = CMB_serialport.Text; - CMB_serialport.Items.Clear(); - CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); - CMB_serialport.Items.Add("TCP"); - CMB_serialport.Items.Add("UDP"); - if (CMB_serialport.Items.Contains(oldport)) - CMB_serialport.Text = oldport; + string oldport = _connectionControl.CMB_serialport.Text; + _connectionControl.CMB_serialport.Items.Clear(); + _connectionControl.CMB_serialport.Items.AddRange(SerialPort.GetPortNames()); + _connectionControl.CMB_serialport.Items.Add("TCP"); + _connectionControl.CMB_serialport.Items.Add("UDP"); + if (_connectionControl.CMB_serialport.Items.Contains(oldport)) + _connectionControl.CMB_serialport.Text = oldport; } @@ -474,11 +552,11 @@ namespace ArdupilotMega } else { - if (CMB_serialport.Text == "TCP") + if (_connectionControl.CMB_serialport.Text == "TCP") { comPort.BaseStream = new TcpSerial(); } - else if (CMB_serialport.Text == "UDP") + if (_connectionControl.CMB_serialport.Text == "UDP") { comPort.BaseStream = new UdpSerial(); } @@ -490,31 +568,32 @@ namespace ArdupilotMega try { // set port, then options - comPort.BaseStream.PortName = CMB_serialport.Text; + comPort.BaseStream.PortName = _connectionControl.CMB_serialport.Text; comPort.BaseStream.DataBits = 8; comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1"); comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None"); try { - comPort.BaseStream.BaudRate = int.Parse(CMB_baudrate.Text); + comPort.BaseStream.BaudRate = int.Parse(_connectionControl.CMB_baudrate.Text); } catch { } + if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true) + comPort.BaseStream.toggleDTR(); + // false here comPort.BaseStream.DtrEnable = false; comPort.BaseStream.RtsEnable = false; - if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true) - comPort.BaseStream.toggleDTR(); - - // if reset on connect is on dtr will be true here - + // cleanup from any previous sessions if (comPort.logfile != null) comPort.logfile.Close(); if (comPort.rawlogfile != null) comPort.rawlogfile.Close(); + + // setup to record new logs try { Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs"); @@ -524,39 +603,44 @@ namespace ArdupilotMega } catch { CustomMessageBox.Show("Failed to create log - wont log this session"); } // soft fail + // do the connect comPort.Open(true); + // detect firmware we are conected to. if (comPort.param["SYSID_SW_TYPE"] != null) { if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 10) { - TOOL_APMFirmware.SelectedIndex = TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduCopter2); + _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduCopter2); } else if (float.Parse(comPort.param["SYSID_SW_TYPE"].ToString()) == 0) { - TOOL_APMFirmware.SelectedIndex = TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduPlane); + _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.Items.IndexOf(Firmwares.ArduPlane); } } - cs.firmware = APMFirmware; - - config[CMB_serialport.Text + "_BAUD"] = CMB_baudrate.Text; + // save the baudrate for this port + config[_connectionControl.CMB_serialport.Text + "_BAUD"] = _connectionControl.CMB_baudrate.Text; + // load wps on connect option. if (config["loadwpsonconnect"] != null && bool.Parse(config["loadwpsonconnect"].ToString()) == true) { MenuFlightPlanner_Click(null, null); FlightPlanner.BUT_read_Click(null, null); } + // set connected icon this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.disconnect; } catch (Exception ex) { + log.Warn(ex.ToString()); try { comPort.Close(); } catch { } + // detect firmware -> scan eeprom contents -> error if no valid ap param/apvar header detected. try { string version = ArduinoDetect.DetectVersion(comPort.BaseStream.PortName); @@ -601,10 +685,10 @@ namespace ArdupilotMega private void CMB_serialport_SelectedIndexChanged(object sender, EventArgs e) { - comPortName = CMB_serialport.Text; + comPortName = _connectionControl.CMB_serialport.Text; if (comPortName == "UDP" || comPortName == "TCP") { - CMB_baudrate.Enabled = false; + _connectionControl.CMB_baudrate.Enabled = false; if (comPortName == "TCP") MainV2.comPort.BaseStream = new TcpSerial(); if (comPortName == "UDP") @@ -612,35 +696,32 @@ namespace ArdupilotMega } else { - CMB_baudrate.Enabled = true; + _connectionControl.CMB_baudrate.Enabled = true; MainV2.comPort.BaseStream = new ArdupilotMega.SerialPort(); } try { - comPort.BaseStream.PortName = CMB_serialport.Text; + comPort.BaseStream.PortName = _connectionControl.CMB_serialport.Text; - MainV2.comPort.BaseStream.BaudRate = int.Parse(CMB_baudrate.Text); + MainV2.comPort.BaseStream.BaudRate = int.Parse(_connectionControl.CMB_baudrate.Text); - if (config[CMB_serialport.Text + "_BAUD"] != null) + // check for saved baud rate and restore + if (config[_connectionControl.CMB_serialport.Text + "_BAUD"] != null) { - CMB_baudrate.Text = config[CMB_serialport.Text + "_BAUD"].ToString(); + _connectionControl.CMB_baudrate.Text = config[_connectionControl.CMB_serialport.Text + "_BAUD"].ToString(); } } catch { } } - private void toolStripMenuItem2_Click(object sender, EventArgs e) - { - //Form temp = new Main(); - //temp.Show(); - } - private void MainV2_FormClosed(object sender, FormClosedEventArgs e) { + // shutdown threads GCSViews.FlightData.threadrun = 0; GCSViews.Simulation.threadrun = 0; + // shutdown local thread serialThread = false; try @@ -665,6 +746,8 @@ namespace ArdupilotMega } catch { } + + // save config xmlconfig(true); } @@ -675,8 +758,6 @@ namespace ArdupilotMega { try { - //System.Configuration.Configuration appconfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None); - XmlTextWriter xmlwriter = new XmlTextWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"config.xml", Encoding.ASCII); xmlwriter.Formatting = Formatting.Indented; @@ -686,13 +767,9 @@ namespace ArdupilotMega xmlwriter.WriteElementString("comport", comPortName); - xmlwriter.WriteElementString("baudrate", CMB_baudrate.Text); + xmlwriter.WriteElementString("baudrate", _connectionControl.CMB_baudrate.Text); - xmlwriter.WriteElementString("APMFirmware", APMFirmware.ToString()); - - //appconfig.AppSettings.Settings.Add("comport", comportname); - //appconfig.AppSettings.Settings.Add("baudrate", CMB_baudrate.Text); - //appconfig.AppSettings.Settings.Add("APMFirmware", APMFirmware.ToString()); + xmlwriter.WriteElementString("APMFirmware", MainV2.cs.firmware.ToString()); foreach (string key in config.Keys) { @@ -701,8 +778,6 @@ namespace ArdupilotMega if (key == "" || key.Contains("/")) // "/dev/blah" continue; xmlwriter.WriteElementString(key, config[key].ToString()); - - //appconfig.AppSettings.Settings.Add(key, config[key].ToString()); } catch { } } @@ -711,8 +786,6 @@ namespace ArdupilotMega xmlwriter.WriteEndDocument(); xmlwriter.Close(); - - //appconfig.Save(); } catch (Exception ex) { CustomMessageBox.Show(ex.ToString()); } } @@ -732,10 +805,10 @@ namespace ArdupilotMega case "comport": string temp = xmlreader.ReadString(); - CMB_serialport.SelectedIndex = CMB_serialport.FindString(temp); - if (CMB_serialport.SelectedIndex == -1) + _connectionControl.CMB_serialport.SelectedIndex = _connectionControl.CMB_serialport.FindString(temp); + if (_connectionControl.CMB_serialport.SelectedIndex == -1) { - CMB_serialport.Text = temp; // allows ports that dont exist - yet + _connectionControl.CMB_serialport.Text = temp; // allows ports that dont exist - yet } comPort.BaseStream.PortName = temp; comPortName = temp; @@ -743,20 +816,20 @@ namespace ArdupilotMega case "baudrate": string temp2 = xmlreader.ReadString(); - CMB_baudrate.SelectedIndex = CMB_baudrate.FindString(temp2); - if (CMB_baudrate.SelectedIndex == -1) + _connectionControl.CMB_baudrate.SelectedIndex = _connectionControl.CMB_baudrate.FindString(temp2); + if (_connectionControl.CMB_baudrate.SelectedIndex == -1) { - CMB_baudrate.Text = temp2; + _connectionControl.CMB_baudrate.Text = temp2; //CMB_baudrate.SelectedIndex = CMB_baudrate.FindString("57600"); ; // must exist } //bau = int.Parse(CMB_baudrate.Text); break; case "APMFirmware": string temp3 = xmlreader.ReadString(); - TOOL_APMFirmware.SelectedIndex = TOOL_APMFirmware.FindStringExact(temp3); - if (TOOL_APMFirmware.SelectedIndex == -1) - TOOL_APMFirmware.SelectedIndex = 0; - APMFirmware = (MainV2.Firmwares)Enum.Parse(typeof(MainV2.Firmwares), TOOL_APMFirmware.Text); + _connectionControl.TOOL_APMFirmware.SelectedIndex = _connectionControl.TOOL_APMFirmware.FindStringExact(temp3); + if (_connectionControl.TOOL_APMFirmware.SelectedIndex == -1) + _connectionControl.TOOL_APMFirmware.SelectedIndex = 0; + MainV2.cs.firmware = (MainV2.Firmwares)Enum.Parse(typeof(MainV2.Firmwares), _connectionControl.TOOL_APMFirmware.Text); break; case "Config": break; @@ -781,11 +854,16 @@ namespace ArdupilotMega { try { - comPort.BaseStream.BaudRate = int.Parse(CMB_baudrate.Text); + comPort.BaseStream.BaudRate = int.Parse(_connectionControl.CMB_baudrate.Text); + } + catch + { } - catch { } } + /// + /// thread used to send joystick packets to the MAV + /// private void joysticksend() { @@ -870,10 +948,11 @@ namespace ArdupilotMega DateTime connectButtonUpdate = DateTime.Now; + /// + /// Used to fix the icon status for unexpected unplugs etc... + /// private void updateConnectIcon() { - - if ((DateTime.Now - connectButtonUpdate).Milliseconds > 500) { // Console.WriteLine(DateTime.Now.Millisecond); @@ -885,8 +964,8 @@ namespace ArdupilotMega { this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.disconnect; this.MenuConnect.BackgroundImage.Tag = "Disconnect"; - CMB_baudrate.Enabled = false; - CMB_serialport.Enabled = false; + _connectionControl.CMB_baudrate.Enabled = false; + _connectionControl.CMB_serialport.Enabled = false; }); } } @@ -898,8 +977,8 @@ namespace ArdupilotMega { this.MenuConnect.BackgroundImage = global::ArdupilotMega.Properties.Resources.connect; this.MenuConnect.BackgroundImage.Tag = "Connect"; - CMB_baudrate.Enabled = true; - CMB_serialport.Enabled = true; + _connectionControl.CMB_baudrate.Enabled = true; + _connectionControl.CMB_serialport.Enabled = true; }); } } @@ -907,7 +986,16 @@ namespace ArdupilotMega } } - + /// + /// main serial reader thread + /// controls + /// serial reading + /// link quality stats + /// speech voltage - custom - alt warning - data lost + /// heartbeat packet sending + /// + /// and cant fall out + /// private void SerialReader() { if (serialThread == true) @@ -1089,6 +1177,7 @@ namespace ArdupilotMega // for long running tasks using own threads. // for short use threadpool + // setup http server try { listener = new TcpListener(IPAddress.Any, 56781); @@ -1104,6 +1193,7 @@ namespace ArdupilotMega CustomMessageBox.Show(ex.ToString()); } + /// setup joystick packet sender new Thread(new ThreadStart(joysticksend)) { IsBackground = true, @@ -1111,12 +1201,14 @@ namespace ArdupilotMega Name = "Main joystick sender" }.Start(); + // setup main serial reader new Thread(SerialReader) { IsBackground = true, Name = "Main Serial reader" }.Start(); + // check for updates if (Debugger.IsAttached) { log.Info("Skipping update test as it appears we are debugging"); @@ -1134,6 +1226,7 @@ namespace ArdupilotMega } } + public static String ComputeWebSocketHandshakeSecurityHash09(String secWebSocketKey) { const String MagicKEY = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; @@ -1155,7 +1248,6 @@ namespace ArdupilotMega /// /// little web server for sending network link kml's /// - void listernforclients() { try @@ -1440,8 +1532,7 @@ namespace ArdupilotMega private void TOOL_APMFirmware_SelectedIndexChanged(object sender, EventArgs e) { - APMFirmware = (MainV2.Firmwares)Enum.Parse(typeof(MainV2.Firmwares), TOOL_APMFirmware.Text); - MainV2.cs.firmware = APMFirmware; + MainV2.cs.firmware = (MainV2.Firmwares)Enum.Parse(typeof(MainV2.Firmwares), _connectionControl.TOOL_APMFirmware.Text); } private void MainV2_Resize(object sender, EventArgs e) @@ -1858,7 +1949,12 @@ namespace ArdupilotMega } - + /// + /// trying to replicate google code etags....... this doesnt work. + /// + /// + /// + /// private string GetFileETag(string fileName, DateTime modifyDate) { @@ -1892,29 +1988,34 @@ namespace ArdupilotMega } - + /// + /// keyboard shortcuts override + /// + /// + /// + /// protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { - if (keyData == (Keys.Control | Keys.F)) + if (keyData == (Keys.Control | Keys.F)) // temp { Form frm = new temp(); ThemeManager.ApplyThemeTo(frm); frm.Show(); return true; } - if (keyData == (Keys.Control | Keys.S)) + if (keyData == (Keys.Control | Keys.S)) // screenshot { ScreenShot(); return true; } - if (keyData == (Keys.Control | Keys.G)) // test + if (keyData == (Keys.Control | Keys.G)) // nmea out { Form frm = new SerialOutput(); ThemeManager.ApplyThemeTo(frm); frm.Show(); return true; } - if (keyData == (Keys.Control | Keys.A)) // test + if (keyData == (Keys.Control | Keys.A)) // 3dr radio { Form temp = new Form(); Control frm = new _3DRradio(); @@ -1925,7 +2026,7 @@ namespace ArdupilotMega temp.Show(); return true; } - if (keyData == (Keys.Control | Keys.W)) // test + if (keyData == (Keys.Control | Keys.W)) // test ac config { Controls.ConfigPanel cfg = new Controls.ConfigPanel(); @@ -2026,7 +2127,7 @@ namespace ArdupilotMega return ""; } - public void changeunits() + public void ChangeUnits() { try { @@ -2070,24 +2171,29 @@ namespace ArdupilotMega catch { } } + private void CMB_baudrate_TextChanged(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); int baud = 0; - for (int i = 0; i < CMB_baudrate.Text.Length; i++) - if (char.IsDigit(CMB_baudrate.Text[i])) + for (int i = 0; i < _connectionControl.CMB_baudrate.Text.Length; i++) + if (char.IsDigit(_connectionControl.CMB_baudrate.Text[i])) { - sb.Append(CMB_baudrate.Text[i]); - baud = baud * 10 + CMB_baudrate.Text[i] - '0'; + sb.Append(_connectionControl.CMB_baudrate.Text[i]); + baud = baud * 10 + _connectionControl.CMB_baudrate.Text[i] - '0'; } - if (CMB_baudrate.Text != sb.ToString()) - CMB_baudrate.Text = sb.ToString(); + if (_connectionControl.CMB_baudrate.Text != sb.ToString()) + { + _connectionControl.CMB_baudrate.Text = sb.ToString(); + } try { if (baud > 0 && comPort.BaseStream.BaudRate != baud) comPort.BaseStream.BaudRate = baud; } - catch (Exception) { } + catch (Exception) + { + } } private void CMB_serialport_Enter(object sender, EventArgs e) diff --git a/Tools/ArdupilotMegaPlanner/MainV2.resx b/Tools/ArdupilotMegaPlanner/MainV2.resx index 090393fc16..05bc2f223b 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.resx +++ b/Tools/ArdupilotMegaPlanner/MainV2.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 127, 17 + 17, 17 diff --git a/Tools/ArdupilotMegaPlanner/Msi/wix.pdb b/Tools/ArdupilotMegaPlanner/Msi/wix.pdb index a4116362278a3258e6530e3790bd0d8ef31165c1..dce25ed5af27984f4d1ad7f0ae18f43eebc7973d 100644 GIT binary patch delta 530 zcmZpe!`Lu~aRUpNM4ta7e?|rdhFvuiRvjuYcVB+BI`C>q&8N*WTyF%~HmX)OwaRbi zlWAdMRG2(j?l{vlp2;!tSwPNl`D{jo&BhATfijyF z0S2jgFc!#_AaT)&j>7ef48bMRKn^=pmXRSf8Omf}WXLa30&0%>@ol?Ia3P6n#nuDw@?<%Q!#*~t}l2`o22j5|PvhJv`vp}u{iHpKT{PSQ;MuubtX&{FkD!|AP29si7WKdvG0`iREaz;pUMGT=p9?U+* zdIm=%NxkG~AP-?ETncDt4nq=;%o4J=@?Kw*XyCI$w3AO-;@h9U?9NP^@RvoJ8g6f-fX3c@5A88iiN1LZ)W V0|HD81{Rx7IM^`biFubNoB)>yR&4+P diff --git a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs index e04253db93..672addbd35 100644 --- a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs +++ b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ using System.Resources; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.1.*")] -[assembly: AssemblyFileVersion("1.1.71")] +[assembly: AssemblyFileVersion("1.1.72")] [assembly: NeutralResourcesLanguageAttribute("")] diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs index af564473f8..aa2773fdfc 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.Designer.cs @@ -56,6 +56,16 @@ this.RS2 = new System.Windows.Forms.ComboBox(); this.RS1 = new System.Windows.Forms.ComboBox(); this.RSSI = new System.Windows.Forms.TextBox(); + this.S10 = new System.Windows.Forms.ComboBox(); + this.S11 = new System.Windows.Forms.ComboBox(); + this.S12 = new System.Windows.Forms.ComboBox(); + this.RS12 = new System.Windows.Forms.ComboBox(); + this.RS11 = new System.Windows.Forms.ComboBox(); + this.RS10 = new System.Windows.Forms.ComboBox(); + this.S9 = new System.Windows.Forms.ComboBox(); + this.S8 = new System.Windows.Forms.ComboBox(); + this.RS8 = new System.Windows.Forms.ComboBox(); + this.RS9 = new System.Windows.Forms.ComboBox(); this.RS0 = new System.Windows.Forms.TextBox(); this.label9 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); @@ -70,6 +80,27 @@ this.BUT_syncS2 = new ArdupilotMega.MyButton(); this.BUT_syncS3 = new ArdupilotMega.MyButton(); this.BUT_syncS5 = new ArdupilotMega.MyButton(); + this.label13 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.label20 = new System.Windows.Forms.Label(); + this.label21 = new System.Windows.Forms.Label(); + this.label22 = new System.Windows.Forms.Label(); + this.label23 = new System.Windows.Forms.Label(); + this.label24 = new System.Windows.Forms.Label(); + this.label25 = new System.Windows.Forms.Label(); + this.label26 = new System.Windows.Forms.Label(); + this.label27 = new System.Windows.Forms.Label(); + this.label28 = new System.Windows.Forms.Label(); + this.label29 = new System.Windows.Forms.Label(); + this.label30 = new System.Windows.Forms.Label(); + this.label31 = new System.Windows.Forms.Label(); + this.label32 = new System.Windows.Forms.Label(); + this.BUT_syncS8 = new ArdupilotMega.MyButton(); + this.BUT_syncS9 = new ArdupilotMega.MyButton(); + this.BUT_syncS10 = new ArdupilotMega.MyButton(); this.SuspendLayout(); // // Progressbar @@ -263,6 +294,7 @@ // // RS4 // + resources.ApplyResources(this.RS4, "RS4"); this.RS4.FormattingEnabled = true; this.RS4.Items.AddRange(new object[] { resources.GetString("RS4.Items"), @@ -286,12 +318,12 @@ resources.GetString("RS4.Items18"), resources.GetString("RS4.Items19"), resources.GetString("RS4.Items20")}); - resources.ApplyResources(this.RS4, "RS4"); this.RS4.Name = "RS4"; this.toolTip1.SetToolTip(this.RS4, resources.GetString("RS4.ToolTip")); // // RS3 // + resources.ApplyResources(this.RS3, "RS3"); this.RS3.FormattingEnabled = true; this.RS3.Items.AddRange(new object[] { resources.GetString("RS3.Items"), @@ -324,12 +356,12 @@ resources.GetString("RS3.Items27"), resources.GetString("RS3.Items28"), resources.GetString("RS3.Items29")}); - resources.ApplyResources(this.RS3, "RS3"); this.RS3.Name = "RS3"; this.toolTip1.SetToolTip(this.RS3, resources.GetString("RS3.ToolTip")); // // RS2 // + resources.ApplyResources(this.RS2, "RS2"); this.RS2.FormattingEnabled = true; this.RS2.Items.AddRange(new object[] { resources.GetString("RS2.Items"), @@ -342,12 +374,12 @@ resources.GetString("RS2.Items7"), resources.GetString("RS2.Items8"), resources.GetString("RS2.Items9")}); - resources.ApplyResources(this.RS2, "RS2"); this.RS2.Name = "RS2"; this.toolTip1.SetToolTip(this.RS2, resources.GetString("RS2.ToolTip")); // // RS1 // + resources.ApplyResources(this.RS1, "RS1"); this.RS1.FormattingEnabled = true; this.RS1.Items.AddRange(new object[] { resources.GetString("RS1.Items"), @@ -359,7 +391,6 @@ resources.GetString("RS1.Items6"), resources.GetString("RS1.Items7"), resources.GetString("RS1.Items8")}); - resources.ApplyResources(this.RS1, "RS1"); this.RS1.Name = "RS1"; this.toolTip1.SetToolTip(this.RS1, resources.GetString("RS1.ToolTip")); // @@ -370,6 +401,183 @@ this.RSSI.ReadOnly = true; this.toolTip1.SetToolTip(this.RSSI, resources.GetString("RSSI.ToolTip")); // + // S10 + // + this.S10.FormattingEnabled = true; + this.S10.Items.AddRange(new object[] { + resources.GetString("S10.Items"), + resources.GetString("S10.Items1"), + resources.GetString("S10.Items2"), + resources.GetString("S10.Items3"), + resources.GetString("S10.Items4"), + resources.GetString("S10.Items5"), + resources.GetString("S10.Items6"), + resources.GetString("S10.Items7"), + resources.GetString("S10.Items8"), + resources.GetString("S10.Items9"), + resources.GetString("S10.Items10"), + resources.GetString("S10.Items11"), + resources.GetString("S10.Items12"), + resources.GetString("S10.Items13"), + resources.GetString("S10.Items14"), + resources.GetString("S10.Items15"), + resources.GetString("S10.Items16"), + resources.GetString("S10.Items17"), + resources.GetString("S10.Items18")}); + resources.ApplyResources(this.S10, "S10"); + this.S10.Name = "S10"; + this.toolTip1.SetToolTip(this.S10, resources.GetString("S10.ToolTip")); + // + // S11 + // + this.S11.FormattingEnabled = true; + this.S11.Items.AddRange(new object[] { + resources.GetString("S11.Items"), + resources.GetString("S11.Items1"), + resources.GetString("S11.Items2"), + resources.GetString("S11.Items3"), + resources.GetString("S11.Items4"), + resources.GetString("S11.Items5"), + resources.GetString("S11.Items6"), + resources.GetString("S11.Items7"), + resources.GetString("S11.Items8"), + resources.GetString("S11.Items9")}); + resources.ApplyResources(this.S11, "S11"); + this.S11.Name = "S11"; + this.toolTip1.SetToolTip(this.S11, resources.GetString("S11.ToolTip")); + // + // S12 + // + this.S12.FormattingEnabled = true; + this.S12.Items.AddRange(new object[] { + resources.GetString("S12.Items"), + resources.GetString("S12.Items1")}); + resources.ApplyResources(this.S12, "S12"); + this.S12.Name = "S12"; + this.toolTip1.SetToolTip(this.S12, resources.GetString("S12.ToolTip")); + // + // RS12 + // + resources.ApplyResources(this.RS12, "RS12"); + this.RS12.FormattingEnabled = true; + this.RS12.Items.AddRange(new object[] { + resources.GetString("RS12.Items"), + resources.GetString("RS12.Items1")}); + this.RS12.Name = "RS12"; + this.toolTip1.SetToolTip(this.RS12, resources.GetString("RS12.ToolTip")); + // + // RS11 + // + resources.ApplyResources(this.RS11, "RS11"); + this.RS11.FormattingEnabled = true; + this.RS11.Items.AddRange(new object[] { + resources.GetString("RS11.Items"), + resources.GetString("RS11.Items1"), + resources.GetString("RS11.Items2"), + resources.GetString("RS11.Items3"), + resources.GetString("RS11.Items4"), + resources.GetString("RS11.Items5"), + resources.GetString("RS11.Items6"), + resources.GetString("RS11.Items7"), + resources.GetString("RS11.Items8"), + resources.GetString("RS11.Items9")}); + this.RS11.Name = "RS11"; + this.toolTip1.SetToolTip(this.RS11, resources.GetString("RS11.ToolTip")); + // + // RS10 + // + resources.ApplyResources(this.RS10, "RS10"); + this.RS10.FormattingEnabled = true; + this.RS10.Items.AddRange(new object[] { + resources.GetString("RS10.Items"), + resources.GetString("RS10.Items1"), + resources.GetString("RS10.Items2"), + resources.GetString("RS10.Items3"), + resources.GetString("RS10.Items4"), + resources.GetString("RS10.Items5"), + resources.GetString("RS10.Items6"), + resources.GetString("RS10.Items7"), + resources.GetString("RS10.Items8"), + resources.GetString("RS10.Items9"), + resources.GetString("RS10.Items10"), + resources.GetString("RS10.Items11"), + resources.GetString("RS10.Items12"), + resources.GetString("RS10.Items13"), + resources.GetString("RS10.Items14"), + resources.GetString("RS10.Items15"), + resources.GetString("RS10.Items16"), + resources.GetString("RS10.Items17"), + resources.GetString("RS10.Items18")}); + this.RS10.Name = "RS10"; + this.toolTip1.SetToolTip(this.RS10, resources.GetString("RS10.ToolTip")); + // + // S9 + // + this.S9.FormattingEnabled = true; + this.S9.Items.AddRange(new object[] { + resources.GetString("S9.Items"), + resources.GetString("S9.Items1"), + resources.GetString("S9.Items2"), + resources.GetString("S9.Items3"), + resources.GetString("S9.Items4"), + resources.GetString("S9.Items5"), + resources.GetString("S9.Items6"), + resources.GetString("S9.Items7"), + resources.GetString("S9.Items8")}); + resources.ApplyResources(this.S9, "S9"); + this.S9.Name = "S9"; + // + // S8 + // + this.S8.FormattingEnabled = true; + this.S8.Items.AddRange(new object[] { + resources.GetString("S8.Items"), + resources.GetString("S8.Items1"), + resources.GetString("S8.Items2"), + resources.GetString("S8.Items3"), + resources.GetString("S8.Items4"), + resources.GetString("S8.Items5"), + resources.GetString("S8.Items6"), + resources.GetString("S8.Items7"), + resources.GetString("S8.Items8"), + resources.GetString("S8.Items9"), + resources.GetString("S8.Items10"), + resources.GetString("S8.Items11")}); + resources.ApplyResources(this.S8, "S8"); + this.S8.Name = "S8"; + // + // RS8 + // + resources.ApplyResources(this.RS8, "RS8"); + this.RS8.FormattingEnabled = true; + this.RS8.Items.AddRange(new object[] { + resources.GetString("RS8.Items"), + resources.GetString("RS8.Items1"), + resources.GetString("RS8.Items2"), + resources.GetString("RS8.Items3"), + resources.GetString("RS8.Items4"), + resources.GetString("RS8.Items5"), + resources.GetString("RS8.Items6"), + resources.GetString("RS8.Items7"), + resources.GetString("RS8.Items8")}); + this.RS8.Name = "RS8"; + // + // RS9 + // + resources.ApplyResources(this.RS9, "RS9"); + this.RS9.FormattingEnabled = true; + this.RS9.Items.AddRange(new object[] { + resources.GetString("RS9.Items"), + resources.GetString("RS9.Items1"), + resources.GetString("RS9.Items2"), + resources.GetString("RS9.Items3"), + resources.GetString("RS9.Items4"), + resources.GetString("RS9.Items5"), + resources.GetString("RS9.Items6"), + resources.GetString("RS9.Items7"), + resources.GetString("RS9.Items8")}); + this.RS9.Name = "RS9"; + // // RS0 // resources.ApplyResources(this.RS0, "RS0"); @@ -456,10 +664,152 @@ this.BUT_syncS5.UseVisualStyleBackColor = true; this.BUT_syncS5.Click += new System.EventHandler(this.BUT_syncS5_Click); // + // label13 + // + resources.ApplyResources(this.label13, "label13"); + this.label13.Name = "label13"; + // + // label14 + // + resources.ApplyResources(this.label14, "label14"); + this.label14.Name = "label14"; + // + // label15 + // + resources.ApplyResources(this.label15, "label15"); + this.label15.Name = "label15"; + // + // label16 + // + resources.ApplyResources(this.label16, "label16"); + this.label16.Name = "label16"; + // + // label17 + // + resources.ApplyResources(this.label17, "label17"); + this.label17.Name = "label17"; + // + // label20 + // + resources.ApplyResources(this.label20, "label20"); + this.label20.Name = "label20"; + // + // label21 + // + resources.ApplyResources(this.label21, "label21"); + this.label21.Name = "label21"; + // + // label22 + // + resources.ApplyResources(this.label22, "label22"); + this.label22.Name = "label22"; + // + // label23 + // + resources.ApplyResources(this.label23, "label23"); + this.label23.Name = "label23"; + // + // label24 + // + resources.ApplyResources(this.label24, "label24"); + this.label24.Name = "label24"; + // + // label25 + // + resources.ApplyResources(this.label25, "label25"); + this.label25.Name = "label25"; + // + // label26 + // + resources.ApplyResources(this.label26, "label26"); + this.label26.Name = "label26"; + // + // label27 + // + resources.ApplyResources(this.label27, "label27"); + this.label27.Name = "label27"; + // + // label28 + // + resources.ApplyResources(this.label28, "label28"); + this.label28.Name = "label28"; + // + // label29 + // + resources.ApplyResources(this.label29, "label29"); + this.label29.Name = "label29"; + // + // label30 + // + resources.ApplyResources(this.label30, "label30"); + this.label30.Name = "label30"; + // + // label31 + // + resources.ApplyResources(this.label31, "label31"); + this.label31.Name = "label31"; + // + // label32 + // + resources.ApplyResources(this.label32, "label32"); + this.label32.Name = "label32"; + // + // BUT_syncS8 + // + resources.ApplyResources(this.BUT_syncS8, "BUT_syncS8"); + this.BUT_syncS8.Name = "BUT_syncS8"; + this.BUT_syncS8.UseVisualStyleBackColor = true; + this.BUT_syncS8.Click += new System.EventHandler(this.BUT_syncS8_Click); + // + // BUT_syncS9 + // + resources.ApplyResources(this.BUT_syncS9, "BUT_syncS9"); + this.BUT_syncS9.Name = "BUT_syncS9"; + this.BUT_syncS9.UseVisualStyleBackColor = true; + this.BUT_syncS9.Click += new System.EventHandler(this.BUT_syncS9_Click); + // + // BUT_syncS10 + // + resources.ApplyResources(this.BUT_syncS10, "BUT_syncS10"); + this.BUT_syncS10.Name = "BUT_syncS10"; + this.BUT_syncS10.UseVisualStyleBackColor = true; + this.BUT_syncS10.Click += new System.EventHandler(this.BUT_syncS10_Click); + // // _3DRradio // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BUT_syncS10); + this.Controls.Add(this.BUT_syncS9); + this.Controls.Add(this.BUT_syncS8); + this.Controls.Add(this.label25); + this.Controls.Add(this.label26); + this.Controls.Add(this.label27); + this.Controls.Add(this.label28); + this.Controls.Add(this.label29); + this.Controls.Add(this.label30); + this.Controls.Add(this.label31); + this.Controls.Add(this.label32); + this.Controls.Add(this.label20); + this.Controls.Add(this.label21); + this.Controls.Add(this.label22); + this.Controls.Add(this.label23); + this.Controls.Add(this.label24); + this.Controls.Add(this.RS8); + this.Controls.Add(this.RS12); + this.Controls.Add(this.RS11); + this.Controls.Add(this.RS10); + this.Controls.Add(this.RS9); + this.Controls.Add(this.label17); + this.Controls.Add(this.label16); + this.Controls.Add(this.label15); + this.Controls.Add(this.label14); + this.Controls.Add(this.label13); + this.Controls.Add(this.S8); + this.Controls.Add(this.S12); + this.Controls.Add(this.S11); + this.Controls.Add(this.S10); + this.Controls.Add(this.S9); this.Controls.Add(this.BUT_syncS5); this.Controls.Add(this.BUT_syncS3); this.Controls.Add(this.BUT_syncS2); @@ -499,7 +849,7 @@ this.Controls.Add(this.lbl_status); this.Controls.Add(this.Progressbar); this.Controls.Add(this.BUT_upload); - this.MinimumSize = new System.Drawing.Size(334, 482); + this.MinimumSize = new System.Drawing.Size(781, 433); this.Name = "_3DRradio"; this.ResumeLayout(false); this.PerformLayout(); @@ -548,5 +898,36 @@ private MyButton BUT_syncS2; private MyButton BUT_syncS3; private MyButton BUT_syncS5; + private System.Windows.Forms.ComboBox S9; + private System.Windows.Forms.ComboBox S10; + private System.Windows.Forms.ComboBox S11; + private System.Windows.Forms.ComboBox S12; + private System.Windows.Forms.ComboBox S8; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.ComboBox RS8; + private System.Windows.Forms.ComboBox RS12; + private System.Windows.Forms.ComboBox RS11; + private System.Windows.Forms.ComboBox RS10; + private System.Windows.Forms.ComboBox RS9; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.Label label29; + private System.Windows.Forms.Label label30; + private System.Windows.Forms.Label label31; + private System.Windows.Forms.Label label32; + private MyButton BUT_syncS8; + private MyButton BUT_syncS9; + private MyButton BUT_syncS10; } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs index 15cd234820..d1b6f9ad9a 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.cs @@ -14,6 +14,37 @@ namespace ArdupilotMega { public partial class _3DRradio : BackStageViewContentPanel { + /* +responce 0 S0: FORMAT=25 + +S1: SERIAL_SPEED=57 + +S2: AIR_SPEED=64 + +S3: NETID=25 + +S4: TXPOWER=20 + +S5: ECC=1 + +S6: MAVLINK=1 + +S7: OPPRESEND=1 + +S8: MIN_FREQ=915000 + +S9: MAX_FREQ=928000 + +S10: NUM_CHANNELS=50 + +S11: DUTY_CYCLE=100 + +S12: LBT_RSSI=0 + +S13: MANCHESTER=0 + + */ + public delegate void LogEventHandler(string message, int level = 0); public delegate void ProgressEventHandler(double completed); @@ -65,8 +96,7 @@ namespace ArdupilotMega bool bootloadermode = false; - uploader.ProgressEvent += new ProgressEventHandler(uploader_ProgressEvent); - uploader.LogEvent += new LogEventHandler(uploader_LogEvent); + try { @@ -74,6 +104,10 @@ namespace ArdupilotMega uploader_LogEvent("Trying Bootloader Mode"); uploader.port = comPort; uploader.connect_and_sync(); + + uploader.ProgressEvent += new ProgressEventHandler(uploader_ProgressEvent); + uploader.LogEvent += new LogEventHandler(uploader_LogEvent); + uploader_LogEvent("In Bootloader Mode"); bootloadermode = true; } @@ -82,12 +116,15 @@ namespace ArdupilotMega comPort.Close(); comPort.BaudRate = MainV2.comPort.BaseStream.BaudRate; comPort.Open(); + + uploader.ProgressEvent += new ProgressEventHandler(uploader_ProgressEvent); + uploader.LogEvent += new LogEventHandler(uploader_LogEvent); + uploader_LogEvent("Trying Firmware Mode"); bootloadermode = false; } - if (bootloadermode || doConnect(comPort)) { if (getFirmware()) @@ -617,5 +654,20 @@ namespace ArdupilotMega { RS5.Checked = S5.Checked; } + + private void BUT_syncS8_Click(object sender, EventArgs e) + { + RS8.Text = S8.Text; + } + + private void BUT_syncS9_Click(object sender, EventArgs e) + { + RS9.Text = S9.Text; + } + + private void BUT_syncS10_Click(object sender, EventArgs e) + { + RS10.Text = S10.Text; + } } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx index 0e0676fca2..99cb96659b 100644 --- a/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx +++ b/Tools/ArdupilotMegaPlanner/Radio/3DRradio.resx @@ -119,14 +119,14 @@ - Bottom, Left + Bottom, Left, Right - 12, 402 + 12, 389 - 294, 36 + 755, 36 @@ -142,7 +142,7 @@ $this - 37 + 68 115 @@ -172,7 +172,7 @@ 1 - 87, 141 + 84, 125 80, 21 @@ -197,13 +197,13 @@ $this - 35 + 66 True - 15, 149 + 9, 133 32, 13 @@ -224,10 +224,10 @@ $this - 34 + 65 - 87, 115 + 84, 99 80, 20 @@ -245,13 +245,13 @@ $this - 32 + 63 True - 15, 122 + 9, 106 39, 13 @@ -272,13 +272,13 @@ $this - 31 + 62 True - 15, 176 + 9, 160 53, 13 @@ -299,7 +299,7 @@ $this - 29 + 60 250 @@ -332,7 +332,7 @@ 2 - 87, 168 + 84, 152 80, 21 @@ -353,13 +353,13 @@ $this - 30 + 61 True - 15, 203 + 9, 187 38, 13 @@ -380,7 +380,7 @@ $this - 27 + 58 1 @@ -473,7 +473,7 @@ 30 - 87, 195 + 84, 179 80, 21 @@ -494,13 +494,13 @@ $this - 28 + 59 True - 15, 230 + 9, 214 52, 13 @@ -521,7 +521,7 @@ $this - 25 + 56 0 @@ -587,7 +587,7 @@ 20 - 87, 222 + 84, 206 80, 21 @@ -609,13 +609,13 @@ $this - 26 + 57 True - 15, 257 + 9, 241 28, 13 @@ -636,13 +636,13 @@ $this - 23 + 54 - 87, 249 + 84, 233 - 80, 21 + 80, 20 15 @@ -661,13 +661,13 @@ $this - 24 + 55 True - 15, 284 + 9, 268 44, 13 @@ -688,13 +688,13 @@ $this - 21 + 52 - 87, 276 + 84, 260 - 80, 21 + 80, 20 17 @@ -713,13 +713,13 @@ $this - 22 + 53 True - 15, 311 + 9, 295 61, 13 @@ -740,13 +740,13 @@ $this - 19 + 50 - 87, 303 + 84, 287 - 80, 21 + 80, 20 19 @@ -765,13 +765,16 @@ $this - 20 + 51 + + + Top, Right - 201, 303 + 499, 287 - 80, 21 + 80, 20 29 @@ -790,13 +793,16 @@ $this - 10 + 41 + + + Top, Right - 201, 276 + 499, 260 - 80, 21 + 80, 20 28 @@ -815,13 +821,16 @@ $this - 11 + 42 + + + Top, Right - 201, 249 + 499, 233 - 80, 21 + 80, 20 27 @@ -840,7 +849,10 @@ $this - 12 + 43 + + + Top, Right 0 @@ -906,7 +918,7 @@ 20 - 201, 222 + 499, 206 80, 21 @@ -928,7 +940,10 @@ $this - 13 + 44 + + + Top, Right 1 @@ -1021,7 +1036,7 @@ 30 - 201, 195 + 499, 179 80, 21 @@ -1042,7 +1057,10 @@ $this - 14 + 45 + + + Top, Right 250 @@ -1075,7 +1093,7 @@ 2 - 201, 168 + 499, 152 80, 21 @@ -1096,7 +1114,10 @@ $this - 15 + 46 + + + Top, Right 115 @@ -1126,7 +1147,7 @@ 1 - 201, 141 + 499, 125 80, 21 @@ -1148,16 +1169,16 @@ $this - 17 + 48 - 87, 51 + 84, 51 True - 194, 58 + 302, 39 34 @@ -1182,10 +1203,565 @@ which result in a valid packet CRC $this + 36 + + 5 + + 6 + + + 7 + + + 8 + + + 9 + + + 10 + + + 11 + + + 12 + + + 13 + + + 14 + + + 15 + + + 16 + + + 17 + + + 18 + + + 19 + + + 20 + + + 30 + + + 40 + + + 50 + + + 302, 155 + + + 80, 21 + + + 42 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + S10 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 29 + + + 10 + + + 20 + + + 30 + + + 40 + + + 50 + + + 60 + + + 70 + + + 80 + + + 90 + + + 100 + + + 302, 182 + + + 80, 21 + + + 43 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + S11 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 28 + + + 0 + + + 25 + + + 302, 209 + + + 80, 21 + + + 44 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + S12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 27 + + + Top, Right + + + 0 + + + 25 + + + 678, 205 + + + 80, 21 + + + 56 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + RS12 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 17 + + + Top, Right + + + 10 + + + 20 + + + 30 + + + 40 + + + 50 + + + 60 + + + 70 + + + 80 + + + 90 + + + 100 + + + 678, 178 + + + 80, 21 + + + 55 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + RS11 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 18 + + + Top, Right + + + 5 + + + 6 + + + 7 + + + 8 + + + 9 + + + 10 + + + 11 + + + 12 + + + 13 + + + 14 + + + 15 + + + 16 + + + 17 + + + 18 + + + 19 + + + 20 + + + 30 + + + 40 + + + 50 + + + 678, 151 + + + 80, 21 + + + 54 + + + TXPOWER is the transmit power in dBm. 20dBm is 100mW. It is useful to set this to lower levels for short range testing. + + + + RS10 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 19 + + + 902000 + + + 907500 + + + 915000 + + + 921000 + + + 928000 + + + 433050 + + + 434040 + + + 434790 + + + 435000 + + + 302, 128 + + + 80, 21 + + + 41 + + + S9 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 30 + + + 902000 + + + 907500 + + + 915000 + + + 921000 + + + 928000 + + + 433050 + + + 434040 + + + 434790 + + + 435000 + + + + + + + + + + + + 302, 103 + + + 80, 21 + + + 46 + + + S8 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 26 + + + Top, Right + + + 902000 + + + 907500 + + + 915000 + + + 921000 + + + 928000 + + + 433050 + + + 434040 + + + 434790 + + + 435000 + + + 678, 99 + + + 80, 21 + + + 58 + + + RS8 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 16 + + + Top, Right + + + 902000 + + + 907500 + + + 915000 + + + 921000 + + + 928000 + + + 433050 + + + 434040 + + + 434790 + + + 435000 + + + 678, 124 + + + 80, 21 + + + 53 + + + RS9 + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 20 + + + Top, Right + - 201, 115 + 499, 99 80, 20 @@ -1203,13 +1779,13 @@ which result in a valid packet CRC $this - 16 + 47 True - 108, 9 + 181, 9 33, 13 @@ -1230,13 +1806,16 @@ which result in a valid packet CRC $this - 9 + 40 + + + Top, Right True - 225, 9 + 563, 9 44, 13 @@ -1257,10 +1836,13 @@ which result in a valid packet CRC $this - 8 + 39 + + + Top, Right - 201, 25 + 543, 25 80, 20 @@ -1278,10 +1860,10 @@ which result in a valid packet CRC $this - 6 + 37 - 87, 25 + 157, 25 80, 20 @@ -1299,13 +1881,13 @@ which result in a valid packet CRC $this - 7 + 38 True - 15, 32 + 9, 32 42, 13 @@ -1326,13 +1908,13 @@ which result in a valid packet CRC $this - 4 + 35 True - 15, 58 + 9, 58 32, 13 @@ -1353,16 +1935,19 @@ which result in a valid packet CRC $this - 3 + 34 + + + Bottom False - 99, 330 + 328, 319 - 75, 39 + 69, 39 21 @@ -1374,19 +1959,22 @@ which result in a valid packet CRC BUT_savesettings - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this - 18 + 49 + + + Bottom - 18, 330 + 253, 319 - 75, 39 + 69, 39 6 @@ -1398,22 +1986,22 @@ which result in a valid packet CRC BUT_getcurrent - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this - 33 + 64 - Bottom, Left + Bottom, Left, Right - 12, 374 + 12, 361 - 294, 22 + 755, 22 3 @@ -1428,13 +2016,16 @@ which result in a valid packet CRC $this - 36 + 67 + + + Bottom - 180, 330 + 403, 319 - 127, 39 + 121, 39 0 @@ -1446,19 +2037,19 @@ which result in a valid packet CRC BUT_upload - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this - 38 + 69 - 173, 168 + 170, 152 - 22, 23 + 22, 22 38 @@ -1470,19 +2061,19 @@ which result in a valid packet CRC BUT_syncS2 - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this - 2 + 33 - 173, 195 + 170, 179 - 22, 23 + 22, 22 39 @@ -1494,19 +2085,19 @@ which result in a valid packet CRC BUT_syncS3 - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this - 1 + 32 - 173, 247 + 170, 231 - 22, 23 + 22, 22 40 @@ -1518,12 +2109,672 @@ which result in a valid packet CRC BUT_syncS5 - ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null $this + 31 + + + True + + + NoControl + + + 210, 106 + + + 48, 13 + + + 47 + + + Min Freq + + + label13 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 25 + + + True + + + NoControl + + + 210, 131 + + + 51, 13 + + + 48 + + + Max Freq + + + label14 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 24 + + + True + + + NoControl + + + 210, 158 + + + 73, 13 + + + 49 + + + # of Channels + + + label15 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 23 + + + True + + + NoControl + + + 210, 185 + + + 58, 13 + + + 50 + + + Duty Cycle + + + label16 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 22 + + + True + + + NoControl + + + 210, 212 + + + 50, 13 + + + 51 + + + LBT Rssi + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 21 + + + Top, Right + + + True + + + NoControl + + + 586, 208 + + + 50, 13 + + + 63 + + + LBT Rssi + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 11 + + + Top, Right + + + True + + + NoControl + + + 586, 181 + + + 58, 13 + + + 62 + + + Duty Cycle + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 12 + + + Top, Right + + + True + + + NoControl + + + 586, 154 + + + 73, 13 + + + 61 + + + # of Channels + + + label22 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 13 + + + Top, Right + + + True + + + NoControl + + + 586, 127 + + + 51, 13 + + + 60 + + + Max Freq + + + label23 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 14 + + + Top, Right + + + True + + + NoControl + + + 586, 102 + + + 48, 13 + + + 59 + + + Min Freq + + + label24 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 15 + + + Top, Right + + + True + + + NoControl + + + 422, 295 + + + 61, 13 + + + 72 + + + Op Resend + + + label25 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + Top, Right + + + True + + + NoControl + + + 422, 268 + + + 44, 13 + + + 71 + + + Mavlink + + + label26 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + Top, Right + + + True + + + NoControl + + + 422, 241 + + + 28, 13 + + + 70 + + + ECC + + + label27 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 5 + + + Top, Right + + + True + + + NoControl + + + 422, 214 + + + 52, 13 + + + 69 + + + Tx Power + + + label28 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 6 + + + Top, Right + + + True + + + NoControl + + + 422, 187 + + + 38, 13 + + + 68 + + + Net ID + + + label29 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 7 + + + Top, Right + + + True + + + NoControl + + + 422, 160 + + + 53, 13 + + + 67 + + + Air Speed + + + label30 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 8 + + + Top, Right + + + True + + + NoControl + + + 422, 106 + + + 39, 13 + + + 66 + + + Format + + + label31 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 9 + + + Top, Right + + + True + + + NoControl + + + 422, 133 + + + 32, 13 + + + 65 + + + Baud + + + label32 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 10 + + + NoControl + + + 388, 103 + + + 22, 22 + + + 73 + + + > + + + BUT_syncS8 + + + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null + + + $this + + + 2 + + + NoControl + + + 388, 128 + + + 22, 22 + + + 74 + + + > + + + BUT_syncS9 + + + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 + + + NoControl + + + 388, 154 + + + 22, 22 + + + 75 + + + > + + + BUT_syncS10 + + + ArdupilotMega.MyButton, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null + + + $this + + 0 @@ -1533,7 +2784,7 @@ which result in a valid packet CRC 6, 13 - 334, 482 + 781, 433 toolTip1 @@ -1545,6 +2796,6 @@ which result in a valid packet CRC _3DRradio - ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4491.33622, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.BackstageView.BackStageViewContentPanel, ArdupilotMegaPlanner, Version=1.1.4494.22181, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb b/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb index 6b7ad7d637c4dc33ac44cf0a20d6f049636d4dd8..bd79f0efdbb1ccb9331c10c706ced183e0dbc441 100644 GIT binary patch delta 276783 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

i~ck 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 WU-S?8ha`g>6hJ{#6nfG8()t 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¥XeRqQitFRQE78>l}rdFJ7nWj)Z^sdOXiU35pFdoQ|~jxJFaPiLvq zOof&cmG!7p#psZ!qK0hHE15Nk>HY+klw@rn7b*$o^hRdgT}J!bWpt4JCY;m;&TkIU zpI|#z38Tv-Rx?XhFjra|by0P!TWaQTKTw{d1!un>mKv4=-XR* zbMxHH)Ge$-9?l!edc>}S3)9NRG^-$O-TPxE>7C9a;l+BR}xv#vu=~z zu1t0MNs=j3U44?lTPCafQhX6AW)t%tnJQ(6UOvRh!<=q1H3w{>dUpFccH)SUGx19_ zrC1WBO?vsLQ1VRwYJ5V1aPrF)ml;XJOmzg$qN*^n+7FdOs2p>t$fRSYlE+DA@KU5R zm4CBdxv4wc)ZxQNPR_7Wx;sAg#wWH4)h3rO4oo^7q?VT#bti9T4kc5~+Dw&<(Nu5w zsJ*!Aj;ls!wX9H_fh9w;+1qA4&b*3uQE876k4?=yE(t4zBvZ}F(|H1E9?}4cznZNJ{JQZ<+Ks9~DmVdbdqF?2#umR9_4mwRcV$xwMz zt&&a!b`b5W6bBJ+sz?y3AlJ-}(#0?z?s505;LI?};`oFe#(b9tQmMMas6pu{@Mzla zE|o+l4D-(Yuj-4=i67R*C&(9>^WvX;bbNMrRVw9BQL3k|*_A%f3BogM$ZDMNDGh!%w%~Q9i z@8k5Yt4N~r6FujbMGbY+_CwtmZLie(AAO$-wg;;n*D!zwwP`pd5?YVcu@fI`G_>!? zsbgo4vko2bvR7H`av&aJt4qt3teOq>QSNAd!{0T#^v*#x{lQmxoR zU*Hk}^hQVQ_uG+iYBtx{v*F!CDrfY2%l2JbROj~u^?kXjs?l?LhkuKcQ{UgJW$C_c zUb%HVk2qDSs-Az2j?W!@J%*0hSK;fzq9zwEq0ChmpQA+a&iV5usL$mrg@@KHnvIBaF;XDPS)2?8Brpj>wGF29% zBKM$DRB`?ZGF3b;kQpTshf%4G(JL+$-BgkF4@0dzxSZzFxl>!j1wVW4-#ngAs{Ceq zqCGHq1Yce1p8CkhG_jNp?;Qe~j5~4T=v8MM4k{aS0mttz=ye~y`_?(Z#YpMow@FgR z{^bx{ET2m@joObHIedJlNmHy~&EU2Y)HMpexH0wAU)!a~JkM-f!$@y%RKT6esTpI$ z-+1nTq;fzV*-Ec4pssFZmML?GUPZ;cNQD?s2`}o=6))iTUi^Ly)wk?8R9AawBh};= z=~)HTk{9*J@B;~yY1BHPcEMINTSk?>i<-L%Rx=UOMZ4m%4pDi#c&H(+cVjK-Rf7*e zvoY}wE@1aAX1gQ;SFn@5SgzQ?N@}%iC6~5MZ`APayXK5ouiMGk5pCzUfMh%vtxj#z zD@E17{s1EO2W?*^MMU>o<#|c3rTTwt@Ps4OS6a1uNw51qO4OXF(no($%a$=Ui)PG2 zs-8$)YSL_L^^qi8wzXzNV#%Q>(71CL`yo>&*(ziQB_!LGNk)xLll2>BbuF1BTY5#2 zXb#>%xz1K|ENsTmo6RGL0YTM5q)3-AbuVI^hcB z0F_NHl~7aVB))JFS9j{sO=~n@j<+Er0(?2e7rxExg=eKj(^FhIjT&oJc1%JLk2brc zeZy%(oc6-#hRdn+qq2GBiQeD|RO+H4`JRQ$MZWt@l^c{C)0Yvbw85y*r6T>SY;{fo zk~p^JYF;ODkJKo>;PR$Q?1GZz&BT{J7CB+Jd2#;rr7A};cDwr`%pQ7-pWzLf*}I8h z8bLS5??Q}XYZk{)x?Nd;BGOETc% zCo?e4Zz-wftF7wq<^JX1>27qy-dDT${)xvqX60f&C-&r6v#h!Dq&P>O6tiZ-I;H~R zd1tGzV0FPVpq61p#-m|DQ3vpRJDxYg^J=!|QeGt@IVx%&`87wSN0*3*Cofu+T?S*t zAe_W-{99L88*zp}cCUxTIk<%uQl_9;AEQ1K?8X|5S zJ*R{(w0gY@i+jEQeLAmdODnLWc9?<{gu60PoqA1=kE%hut{`H+GSSZdc1BsG{QDUR z(}y(kjW~TIb=nA_**fCv5;Br=<#H++fxXn^#qD9|gW@aS-CJ<_%d6C${d)NlD~U^= zy7t8Uh5dT{q`N0ZoKz2PCBaI2Q2bkk+kv>1C%=)mY=vNHlI-7V6lS6zZ>~gzqHqim z1q{uCE~zOuWU=*FxVOB7!ZD4twYAIQ;ikG7=1N}SVQ3dF+EJ}p2qtUbWF z)J6|M$&3AATR0Hj4 zm}?9C1t&pX3z4-Nf%0$)On|acC2wJv=Z#?o=B#5e&$D=m!BiLtXJEk$r8W~%4`{RD zDwqkkz`1ZgB+`KoVSvAHVK%%4=R-EJ)p8)4pK6O>CAb(y!pC3(xEwZvEAcAu2nVY$ z$cB%@#c&PW4>!QK;YRo&%!OaTJoqhq7G8&2;J+ZL7VuDu$rbzHHqNC160*UZ$?CR! z4Y-|42{h$k2MQ0vT`(2C0_VehkZm)yS0SIBG{0i~0eqeFLih$O8AN{>M#4j|C43X! z2M@z>@F;u~z6GCx#~{lkwd0bMA93(D{06=Q4Km=nkZBU_J=hYy5ATB?K%S>+Cn3Xn z?G)S$zkoa8m+(_~4t@vE!!k5k7hnv$2)jT@p>8ni8w~EV4SK=LocFfR`$95WUjdlB(hxh5M){Qw>){?xf=W7~ zM|Nc{&@8d?*`R1VDGB3YC~N~IF}lLioTou~mufXE3!ky=r6879YmexSLq0Pf!+V(7 zNDB5=px`(k4>G@56wY}P$`P-``O`5k^W2bR-OVi)I+|Qk8^pFO)D+poGC1Q8SE=P{Qa8C5$er z>sxw*5bNo@B$8|)X1+TmzEa(ozV?CDIDY^pK(mg5?0IHZqHF&kDpN^)33W7-D;p0bbBpZ}(F&|s;bpaG#7ePt4B~W~Q3`)8! zhtfQ(gzX_)Kpf|NC>9G0Jg!G%t-;uj@j4g|H$cg=PeR5#+Gcn!%!QJ@sF%%`%_PD4 zasE8#v_NKp(gJBOa{dT>366z3APt4K3sT?nD!vw=Ue{iM)W<$;pGWjBWmC2m+L2?G0EP9)zvno3J%}3-*TZL5axwFcnHf#h(+LkFd{2!Bd>m zVrd`3Y-wXob3jX>eFUWtoPpcnC-7A$9=!(7a=zc@d$#!p@N>+m4o$s6c#d;wE$u5v zEo7Pp!Hb+zNVRXEtVs}m>w2>IDjNor0_{ggKGlAP~qww!l{ z_rgJtkRW?SGXIBe=oxx-g~sbK@NIi@uqEY1oq|p zsC|A6-p~0N_yCl4x4#{-n;WfVup#(UrPs9t?#!uso!1 z8K?o5Kxtj%>KekwIF~kC&KpAto0&Rtp3FHr%{&-Lu@&0GCs62VpGzgj<~o5s_PI1m z?C)VFr+6@o^NpOR+V;cYCeFvf&1(M%eR!6&Ajo4b4#L!2I#5V~m)|p}O1rTYN>+Ih zJ`7)i;^ht~ot9ltT0R~#2Ixm?uRy6T=|=|+LW#t;7zz0{+7i7$*KJg^Wh)xOLz+s8SQWQGo*DihZB+lQV$1l9%3^Bin$CkK0&{h zeJ-PmVD#>>+1EDj2TNie#^^{@`B1N<_n{CEP>ny-hqf7`C9tlm9`C{@P%aY44+#{R z1j>8@!}$c>ldnfLQfxMb%)bx0aUOd+yaxJR3?q!QP>!MEM0&m99+PFL=4=3&EVgV#0-=nhp;nXfPS^s z0@i~qVN2Kw-Ur*j5pW>PfDG}>0q!6;pYv3>6v~ZT35RpO%03U%)V$OB!jK82tcsMy z(j;Wp>8MCIZw9OhXF^GXS+EThucEZ+RMdTtmWXtQG;;?aDZVe=?Hz+m)4Lqoy9Ks) z3-9u7D&F)&S|F{8yj#VQwc5&~V6AJ8b)Cm|oq(N00S zK-y{83w{hArgDf3<6xO7KV8kk3p?nM`CHDqct`86a9LYwSvr3 zwAxH={B=Zr_u@)22yZ(DWW>X3LOC)tk>u(MdtffrLN6%er`~XsZ7@o48E}p0^dSrR?H?W4gPMM--44=*jfFd5NoZNM{8_-^)~}8 z1KSy}9GnfM7Ndh3r~~IhDair#;#ob;%R;bIXY~lrv+C+uJu=H$wdFBaaG@kKMp|vT zYJQL5vJ{jH4ui`%mwHkt2_mcx*Fp(l9hACaJxqnn2$@az({Kjoc|qFzweUI4H$%GK zS!PAai^+j)81N>sSyFev_7v%k>0Fxcs8!#O5en_Au zJOq>Ao3IT$47c4%;JYvnz7Kam1_R~{;VCFZPEzDJ zWKduhxsRa?fyDe@@GR#BIsOw^27Uo$rjWsdS;81R1Ol9YmBqm_4j4TIR>H3#oiNiQ zDROfDEW8AF+vcy@=11Unn4f?J@T_f5e?j|^bDDkaXZRQ7RTZ;ozX2;yB7TMOFpHN< z0*yJ~&5!`ijTvxTc$@QHkU62igOK4&U>M|mg8&t=_760Rs?NxRb1z&3>7EDHKqmXl zFeZ7Tm&e-SsJTf15rUtQo$OKaZ;caWG!ZZ5~Q)#FEAdm<}EM< zR)mXSCAbMPn;0NpXe?6-@Zz1u@G5WwvXUmi?b8@$1-Km=Yd8WIAS(a@q?*P9=fG|5 zzsBR-0I}C~pFo|;+8a0OR!=~^wYzDu8&Eb!b@mk6JaMf6ZU|j-xDr?qQ4aO=6pTu z3!jGfLz%Md2icxldl0@4AA+AkarYT~nDeYF91P|_<}&-kzu-_9RDuc%mW1M<419$1 z```%J7mkF3;3zm2irz%XL$kn4I37Lw;lrL zErq~0a2Dr3!P)ROWT+b`NhOsD`Fy=L2eyH8;R7%L*+*QP2gkzsa5h{3v*ALx5-!py z|LZw;41<>;57Yt&Adkob@4=PuQ@9$QgO9`S;1lpB90O%V>N;4GPK1K&x23Izk?=_v z3ngXZ;bzWj+iWl9!B}+R;OYGAbNUv( zSD^HJ_CX0hAIgAjKa}v^fSut%DBZ9_x{A1{*AFR2iIZnchPi`T%_~?_I?N;p*XnX) zbsFELnzWXdd9=6H>E}z8&w2}0iNV`Y+Lw1=9DEnnhws6r@B`Qpo`7-*lDbP^0p~A5 zN~t+>#sr4>A$qa@0CPD%4L^mK;aPYMiv2IrBNK%`ZG$_IVs7@!3!(JOMbQtx;#|h$ z7hnv$2z$Y=;e+rSC^Kr8b#4A~DDI>m{sZRH52xA)thLQI!0Vhp=^?Ry;b1!kzrwd{ z1!-q~)77hA>l;I?6=ohbO>;gh8eHZ>HusY0#RDkAaJs!Tpd2Lt#>%h-pBD?@4#eRbIIG6bsIrni9RGj7=XbdAb zZwh0f*f)SJjfb>AcMe)(!KAy^7D|&Z3WH#K&ZSe`0m{&chem-%VK;0(=`VR%RL0Kl5eWkgEk_0i!?2ElkHAK71e63E1v|je>ho{ubg@S4?{67% zjK|oIaT=7eH35cc!zh%UiV9^DN{hAXi(LSzjpa81sV$|5Upj7R(X}a%sz;j!rQ13k zN|a{6ns63u2ZwrTfNX zG4md-gjYFV4a<>4qF2SHjAs<*GJ2(L3dr->4Fp3;qUo!(fu^Ws<<0k)~A)FaxUb zjfTKT$mbOTli?e19y|n>!ox5Z9*5Ekdk5}vumCc9qkRN_f@dI; zF4`xM$rde3t}K+^&shx0LphIyUvj<Z@|{l+oG8dw8!8#*a`j#yFgC~ns(@gL!b^v!(ccK(hUd% zU?^M$OT#?KGQa@6cda~p6IO)pz{>Cg7!IZP6$yWk-c}R`zhDpz=}VedZ~non`kNjv>)z)6phqO#kDd&x9)fXj0F=Sb!%!wb zhC&$yrou6BxO(pgy;hdBFwIl6h)o*6s$>QEjYCyRa2k|x)dW}pPJ~jDCqbzt(qRoa z70QS%1ByS>VG~GSE6@_og2`|;>;&n1Wd*u$Fb9L)Fbhh_55Pe%8%kW~K`Ht3;iE7I zX2S(=5nKqDz{PMid%wclZLl1z&`8EqJYyYk=FK4E%OLnXBCi8^PT$jK}GIHQ`77l@M#4 zn@8)bR!ea$5@FhwvPfi5=89>^6dtUG()Z?hB9kvoY3C}N zGlr~Ku$Pwc$vlqbR{^v>v4`3%7y5`+K_-` zECYixVh_K8A@EyR3d$9QLb(H_p-u$KK*><7PYzUqatEX>tHilvFgcHeRaD0t`okgC zk~NQZRHYu*%V#kL2^jcR6-t4Qf+eB23We1;mjWCETfE$OH~R@$V39D(A^C9i~8O z``bb3Lbr!9`Pl*PgdM5P%tpTx2A^Tj8D4^2;7!;SmZG9%3>2sgd%{|<7i;pqy^4k4u0w9f4%H6g~u3z~OKuoC;UL6_C0% z@HBiJGWyh>prxV1uRYCq8<-2}k862wD7{(j84f06@GQ)PTi_G$Irubu9?}Uk*T>Pf z(_Z5I14x+)&;>J>$9)HBv&=(f*)!u?X!ecOqVsjkIM8$iMLTxU4YYac&{9bqh_JSwja7b%nPFQ>d7jphF zWO=7{20jBnfiJU-t@bGgZ$XM);A8k1yb3>uf59(cNQkw5E*ute-Vk1Z$?zh42!0Jm z!^?0E{0=UGSKtPC6>f*$!-J5Hv;2&@}yagx0+b{?I30J~@!FBKs%!7ZySK!~Qt_U3G;2#XmLb?TktIz{~gFNC5 z$i7gF8UrODwLDeiW9rR6^vVhMQ4{t?+9BN$*`T{G(go>gwKG`dKycwqE_7 zFp7Q{r8F&g?d(gW7Nq%^`TkGqnS=bW+JPQt;k{IIubmF77l5Rj6gDxEyw|+5V?tz z9ZRc+bU+3nYmn{88RQxgIu1XO{>Wrx8L|aAh7^vIs%kuqHPRgEjiezt$QI-Pat67E zluaWbqysVtnTf1Iwj;-oOUNB0W&(a8y^%3U4zdY3h7=;QPNfRc5a}{8lmI!%K{icX zozimM%ca6p*x$TL)0&0cHQ!b7f9utKd;&)G8lz8BhyT{MtleT%F+X1E9m^+Y`gp5F z$&D(YB`Xh~f46v38;rEE>c~HOod1B!*lQYlUeGJA4K>V7#M!TDZGWSJ-i9zgT$^sh zg?(u2S7QNsC3Vqf@YRDnU$AGK?DA>7S|q-YTYC|k=0Us_7wj?0Vjb==BBRE+R^(4e zojD6l`Ww~`5aU!IRMb{+Gt+Xj1OuEt=i&W^aVoo`x3XSRJeM6j#o{ju;a(#${4TG@ zP8=y-SHkOZ$`iz^?ZdoA@Lf71W{%S2A|$ipx7Q3J5BO)jXQh&rwy)tG0BEiD=ti7D^J`Qp zP+#bV^I^-@D$2lurxHf30@cYd;{COFisX1IcPg!TuR^u;XFeRe)!=H<)P94^kmkDB z*^^{9RV!8LfZ*^37msGD!3U$Oay9KQ`seq z%Hel~gRyuJVp{JhVRYu^+%7@Vtl-^;vnn>&a6Y0X<;>YC?mFs}xrxEX?|dF>WQg&Y zk8cUx2sL(jo>X~Z#v5LeW=LscpqG?*y|nSY?<`;OSot6yc063hsM>BKomBZrf!s@x zEft@PWzyW;e4WJyvjz$U{b`m5UI9R zF`V81$E({|#4}4`{N{vSe|W~EDUzvtevM3bC77XO5WSSh{C43+fu|_m;gNXByo&L! zXw@##6`yReV4}qcic#C#7FWe06N|_gRj#VbMW3ozFe78sh*7iM7W>6wE*7m~)Yoo{ z*eEQRyD>V%sBTd%ua<~K0E>rX)XQ#*8)Cuijxi!eMO1US7*LHn!*q}FXpEr}<4QT- z<)a3}#$W=-SQ4YYuVz&D!qU-3CEtf=?kdU0FHXc6&CIvGsL2V!u}tdcP{R?UrZWvL@#u?UMm ztoq(}ua3*5D4dT~^{cyFri%qrS;nec(U7zHi#Z<(yLsw-oHRi=>W`AFc zyjz33y8`E3Y-h?djs5QKtKrJKv(PEce3~)T)?xp_mNi^=@Tz#S3Wc4HC+XrzVojGP z18U+4lX1qrVoxG!x;%Lg1;xz?@*b?NesS9*#dC>I;PhB^H89@gWP@0&!Q#8>>S(+x zQS@3^ti|G|>Z*P%mqj`j>*5HbVw~FOwm2s)6fUa9DWkSK^Bjs}>!o3}jZkAf*6sP) zNNppzs1WY2&80JiXmpFSl3n$gA^Qc^c3pZx0)8`{XiSJxeG^=cH((L^Bo-Nt<0ImD ze1gkyNF5wA2WdPWryA99Ii7_@=w>W7IF6HM%AKp@a(q=BKZQ-ay%dr$4_H% z$Z?z}juR7Ij^9Ja$VI0xPW|F`+@day^RW2FaqORk<5G29j$cH_cm^F$4fT3`BSHPmNn<0ghWfkFe^nWqgbMS?#+$Y;e~B-N zjao~yr8uqnG{%CNYol~cxsGCs zlUS&R4WuO1w4z_Oi7OSmHo@J?xNB^>i%^^A5c5(^T`@l*DzBi@()Qp#Ra!J9qwPhd ze@(k^t)5$^f{L13rj$Ax@A7LOiUw2Y#?YGTd{b96lbYeft5`hg@*z?^+RWwnMRW}2 z-Hm5V#}VpUGkUpp9xNwgvEyA1Q!|T|7 z@A!}>J`8H$%EfEZQP&%joHuH!L(N@R;BSHJ1Gp~3^J!_fR8oM>#ltOJSFi*fgC_z; zrFgmg2z8=`>k2$Au|0%s6Shle>8cDTh{c;&w2D{j+!mjU#bGQ`(=ipU(n zVv-Y?KG~G~$X2e%>_^8qip~r1>T9>-gw{BI3yYnO<0InuUv9@6&@qmo^J=_0+S(OY zy$u#Ti!e^ctNLwR7U^Qa!wREnEw!3Hx-Sy*Q!R(pQqL%u}ZPDUhe0?8_Y{%C=^Vvc*>t0t1>=2y~&{^#0EdLLk z*kl4YfzGO0s#~%v+N-e$J&DCrj$=;_(Z2t1(KjK-D^CiJPoZKS8H|ZPl}b%kc&*N`H#Qs^VbV zc60?B))ALyQBbv2vyLv8*;s^rhQ-rPu&WoAsiInUa+SE>#4+=t#`CpRwN5U_V>{va z3oMQ~j{S>>^R7;=q&kO=@g+JRn2sx}A&bh;yK<}a>5K{wv5cQ;tJ$4h{vQ_$o@yDt z)mA^bEn0LT;PY5iNw70)$YSb=#a&#n-iMCCqc9^nL7ng7swR@UVsQbB_6cfWSC_>O zvABpuH`7J9`njvoxG0||bR*2Kv7P9InXrV~<%e#ri_JsF_y(P636fG(RI4RrLhe=x zzYmp5s63IN+TG{6MGM5@TP!vvsGV+$8)9)8i&qj;zU(tE4*pq>MT%LsV#gm&T zTyZ>!U5+RB^>ukN3!T!xq4RUGCoTKBJh>{K{EosOjwh?dlf?U7o(#AjPyRqhPb|81 z5%;@1c@KrqTPP&i3d*wrPfGQ3dD5aEp4>*Kd9f#dx;=Rjh0s4yNOn9)7f*h0dlLQt zp8N})p2ePg(a#l=B`Ad6L1Cfe$;B1)ZB9JkD($z$lfTeeUhK*154b!T`yhqoZxq%h zs>dIc*_*`t*B>-0c^D3#eu!c9KiFNaYp9K&UH7`(1yXq!~1M(3@y`qcg^9YW4j%64<)a*xG705xc;Gw$_)G7WGzbAisI&>FGxafdf-%aMz=VaQ$-0RIV$EvscB}bDLBY?tPY6Pp*VGF3JwY#(+*QH{l<1Mc`6P(HSEAoh!x}J z^HXt<=$Q7)z?5+?;YO%H1`c{VR)u24fcK{i987aeM@++%QLO1;)ifMzbgZt4l?+X% z;owcjG-EoZ3^mP*&Yg|}=6_h#$41HE|}`u=c4|UsXoeg+3`L( z3sd_3W~NWeLjN~ge+xD~Uu`@31zGstioRe312W3;d=xf_|FdL`zs?C%=oK4EoleTZ&Jgn$5*Pq9& z_{lNdBBu0)%}iA=4+r#sEeCbyV?|%L?R*@xcTD$+Dg9YYNvrudp!;e$Xq|%<9o3#W zIC#P_J%(w>MzhN&_0;N6Zv}ND$Ef9{_h}|)lLa`V$5~A(tzirBkzS_d;{ma{nILJ@ z%zMYyk6DOe$vT#P_l4xPW_8qxg`{SiI#z0)Sx9PjtYdi}x(N0AP4$63x?`5lYs7S+ zt$%nC`YX_1geT9{Q6(310rZzF)xcs@f3{V(FGlqb+v`hWqbFK1DZ7N2)3vc2r7gj# zd7_%TgqSBMT2U#$&_}1l%Exz>kP#LpN5hy+WFMbR$X=uXxq<|x^Nb5=j`T*- zkQ^izc?~&(Ttk9+iV}k~M|!KIjYj#bD;&z=qY6k}qzf_($wby5yODR1OUNChN(MO{ z>5hy*WJ&6JWG`|8xrE$7Don#aqzf_($wby5yODR1OURvRtO2Mp9S@Q2$Ot5WtVi}D zCy*4JsV;x%#txr9_8T6K{@NCvV6Ie=V3?jSV+EX+X0AOU1M zatyhK1ZCqE>40P)%a8-e86;>PK_cCe5y&!R%RFwv2@WnH+I$iRX@Yb|(vTcv3vvJ{ zL~bG#atH+Jj*LKZkWI(|Mu$SPzj zass)81TP}TA{~%HNB~)n96-(>w~(@n@dW9POhy(X+mU0)H6&;WkwrQnV-Q&-y#+ad zTte<-@vp{Gk`zfpa*(~q3FHn^;V~Q|gOD6#6LJhGL~bEvmk|Kc0U3d0BAbxC$Qk4s z61to)kPgToBokSK>_xIp@b4NDv;rlhH8KdvK-M7JkrT)zBxohchO|cdAsNUrWIJ*U zxrE$7s;(kckbX!SvJBaR9776`J4l7q)CH?qZP}ZH3}hLy9XW-(} z6ir8dr5@Nq6u-lQEt@%H)8o7?Mq@s$`pFifhrJo5B$_k&>OxqPREy_~UOq{lNi*qb z6|M-arj99GGq&K3@JozuGy3FvS(dSZ%m1OKF#PJ(b{W_B;*)2$ z(SR#R+HLgm z<5EvkROXXi+*pS6E;AVe%+{Mh&jiNUN<@!pK{!2fSUU{clIrgTMSSy zziu?*L)qWHZoI;kZFqw#JB;g+1J%(tj5_|31Fievtd;sgUA#9qr6|cd9w5T(B4LbE z6An<)teMArwFh(KDCU(OR$m-oc~m8~S&PCz zOARU3E@2vfF2=2FW6=&ajs1sNb(OCM9Og3EdBj+$vJZ2cSE?O{S@N}69Y0JSKCNyG z{-x?2F?!gQAW3qB6nz^vC5NhQM~phLC5KvpN*#EtG7B-Q(2NpFdD}cf#lFSrxC3LU z*vlR@f>r;wNajs#IIVlsDC?hF`aVI}yT8vcP$D`Zwb~lHs|xxFoh3 zF}kNR05HpU;qkMSOBgKg$pG(O>Xr#3$mGHJPRK@HFZAb+6AIItYINc*o8+i68 z|Jz1o{~p`11ce*zB7^(TNY6#}qZylbjFM{l+eUSN)Nm&dYn$wgcc67Z&aU(UhC5a z->B84e35#zX}VfWV=Udzj7UA!JUlI?)y=~j9D3r^jt`A!y@sV%3Co(69!@;*Dy+bW z3~5QAq&Oj+e%jYi)qCG4?{95K$VpXV@jf@ZO98oZ=KC~_->4-RM13P~-`GDE%F0Ko z&6^%%`ga5sG|ySMZ6W=ZQJINU^CCYm?R$Jcc_Q?OeU(+_2P9^dQN{PFl&NVZ=611* zvF#*gQp0|u(tFYX7k)q~dDLYWX4?H_g%Ezi45;Y|s-ZEXEzhNLlNS0LM@cULg8|Lf9;RNLY|w(X>rDX@)u2 z!X7VQR$X-x?|Y3e_J>*k@AsX=`+8}Xv1Ea8)A)405v@W`ab4}$heV2#WUdIyb9d=a zKSg#rL3SEBL2W!m-W_S{i(gV9UQ&H_21R=Sc|w_=6TPJTWDJawY>*+;Zu!vYC6#U& zNe0p-i7%-=mdR-wlHbah7XAX_c+EJ>2Z;{~|u`zLij;@Luec@&=LZzJH`U;38Uu+$B#;6k_dx4qP zr&fPT=%Fw1iJN1e5`}BKeHGNTGk96oR&lDN@2nKAN*qHPI(8~WoOd9O{wB7Wq`KTK z^naoa4t&DOaH`)=sD9a4%ebsAa+q-0@qrfYW+L~fE-!i!bH`kK!4vI@s`n`c;fhos z>{tIOIqZrW`6&hQ@U**gz!fWg+dn1l@7Q)u4!ENBTsGp=HSEHA%qn)LtJPl^DMjsW zkF&Ic9}&sHwvP4v@Rer`zuz&ELLuFct5)~ps@46tYSpch+EQDkl54Lj&k!Hq zH~NBj6=W6LNli?=s877R%UDI?3OWfNlZu@JmY!yR2UmJ87aB4WNup=V1)270b0HIZ zLzj8|s>6Ass_HEtQ?GHJOrKm?hN+}RNN~30QG_~DNOmiH*cYk}W8qJ*EhLXh3VpB6 zeQEZ(Y8H~+&Jc&cRF6U<(f^mNC>JY=Kd6fhOGkTt;63M3g7*r^22PLEe~!}f365LL zQ!UTYF>W!>3SV5~SWCWJ{~-FIpQ69e)>HnCtn3InPu=Sn{eK0#<2)Xn#iOH+M}0Q3 z%H!Abi# zhyNpB&qY%D3-r@e!bQ5WX=?CA`c>cBuAFjwO&!EoZMsOBbj`7Er+qU_JLxOyU*p%8 z__a>e`4HHr&q=NE6g`3|0UPBWAG)+FJQh|Ex2Sf@Nc%gcIv?&RZ;;Rjvv*zOVqGV zo{9YyR~K>hhwA$6|0C=@0Hdh7|L>h`GqWTi3!x_@v=BO>cM`ft2N95xApL<*1O=r8 z1w{o73OS%eKtV$XMHUq`C?NXK1r-GhNGFsaC?Mefb9Z*b^8ECD7rwbO=bYQ`J-5s) z6u3VFwp6Mqb#X;?$zmnp0+oC8hbY>dGpMpFGV?>aGpZI}k&`&#)n2qBqI^@e`HE=6 z97SD9r(cm8C^2vSfP_j})jD61)U#;FE3*ALZX`@<#)uyzP|Bx-NUEXA6{Q7hc^z{e zc%iEAm4~~s_0N&mr-(_+92t0ysQ}E^&bhl4B-|MUT)!dEMGl^)6W%3@Wk%J`GkWhb zM_QbB7xxYf@c|EPSLO3L%rxwavAfCTRp+sP8v8FR`?a)}MY}+WS^WQLY0L#Iox#!$ zWhqKlU2w;i+fiV};oaI2kCObmiEXuC4#ZFrD~A=8yBApaXiYHrr2a)5I*UUYGT@@S zT6ji4)?d6OF^@vJ?6?*t_3}_gk7|}(tEY*1M3<{))OaHK63KK9cZ$9$qb?Q9 zFEJd3;W`iFB{_PDlJL^2R$!C|D!=ljdyz0k0;;pbb3vCX-|AB3TU{!Qf-V(O#Tg9j z&U1%hgYii*xtQmU@ZJo#9Bd!*#k@>O$d^i&(csU`wft3FRg&^$fW@71*{>qEUnZOv z2q8t3ECWn_0sYQDRvcW1y#P-|Vc#$N|^hdH(DD%Gv4 zC=2{5b{+dyu)j!}Uk{nwn5pPjp&yi0*J&eyDk&d&*fr>fUbn&~Czr9@rta_P+aO8# zt*Z9#(tWNyR{LEJ7V?ykxxaIp(eG+XgdX$nsKe_47lMr#a=*JaIby%@UtI`mHS<*OS7%j&Rj6AQn?I3>+*x|_zFns0^8KXv*johdMy06E@(F6;gv zU)SDrN13{MhhADv{-N5}oBm;D%pbUR1J{_*;?X-PAQg<(&5$AOO)E*q9k3hPP5I;x zdcre8#FgVW<-#BSL45r`3I0vot@Wl1{4=EHtW=CYV6=Ku_Wc>sJ@?*Xk<6bk`o2lo z>u;2bDcOaIP*4|#AzGm)xp}qyA&e0jY~DrH-u;i`K^Z-WGp<`WGgofk3TX)*xefg` z^z}0ScEMyeHCfT`K>tjR-VSLYD&2wp7xeSe`A$e#nGZeeE_8E&6(ZU69%bVDJE%r; z!NW?l`Cr8K9i=oY(BzOJ-c2Dq)vEj{$-kgnuHE%_)2rOW_rLMI=tAjn z&t211bfI#(#^0*#zQ@4*maHQ*;kQBt?h|CDV&_@xd-rG@Z^`^E6r|iA!>bll^}hEB zsm*C~kC&PE-Ic?~bB>cL7k<6CFjbG`>#p6oaF$LV5Z$uJ@`M#z)QhjQkMV5^iCqCti?e+a z$vuCg!U9vR3tf5zw?_Dy$ikX>e0URi5WWQQ8hY%)bh@VX3_W_`G9G%Vha4Uz8hT0T zR)etT@)l(f+HsSdMy3{g%ivAo3SKv=*QA2i1L`%U;Psk%P3Kj+qtr%GS)}P7VZd>4$96!yIuz4vSs8adWyQ#tjZlJ=g>oPB5q`<> z4!=wDEn|~q9CYXvuzs`Pt)$d&>V+XSclsTkxxlcl{Vr}fVo_gq>apI}-?B1C&BCZz zkUR2;)9>1G%g|hY7fQMG*eWgGwq#YMQL|$YMR>9`EuyB%?no-O9!ihF0k)bmyCd`e zm#vasrF=O*d%H`o<~_dTfoJ9Yenn59)&| zQ+Fl*Bnz1)n|hcxCBO^L_}>jQZ>DZ&cO`ivx?m4(=<5rs5wcG-502BRbq`oBRXutW z?||i&f{ez-ogAXJxO zhZTaIxWbBv%>1BmtPG0OU6K?*3I*w^5UOC_mjMx!g8MQ*T(<@QJVu1ZGlC=v!^J`? z1heNdLm5@!vAEFtuWOKqS~a{B2E%WEUm?n?rai`~K!&1hn?C z!n*3shDQ?qa25Xd1K|(PE?hx{-)m2NUrwxLigRA1o>&m!omg;3V4=tdawSr4VaKfL z)jJgk%=F@7VFZ5vAmHNiY#PI_y}H*MBn5NZCfeJDipnjo{-C+2QUnhovG2~79!2!3 zUU&9`_^TAutQ!_Jng0$$cnoztq$ZmzBi|zCTW{XdeqQ$zT2V$Lhx#PGN z-2d;BBSrC%2}8HGO70ictD4#>%g54mZfGppMCm2HWr8&FQI$@+jET~dgKda>97QoH zf*WJycogbjY(QL9*yRxK(_F#Wt(b1u9h#i@G_1HxE3d%Ot0YWzB&*xxT+C%NPaQYer5<+4K?uX8-^NfitCZyy#bzbP)+DK zgbTh~SMkx-t1pbfTTu`2wM_j&zc6xeqWhd2ERM&Dd@kUUiWAGQOQN&l2zRkR|A(iX zaY}Lty+W}kd2F}F3bWD?D&?HA{UG1X-zcFsp#bhh%oT-4r{!h|s`crBwDQD*v`Y@2 z<6dT$QYCCTT9R9Zi)JK~odUy4SH8NyObvQ{jkm)4*3f6+9hTp2w^&X&@Pc;8rW z#YrWq%3hb4rS%8XuANI$2Z|A?XIQkLyccbC;c8N=ELvf0X*>XY}f9w9sXywajy;i~0 zw=+hMa+knPosXn!j9%7T=OfEfuv#0^IYuuN!5Mabm4|9*rRwoXhFnEm~Q@hnw9&K zSC*L8-TWXdN?T&N2HG+XFTEW@c&hf8(ma;3Jvu;EaaOg*RB;|e;v9tQDn+P{$n99Y zsrSgomfOKx^H{m&3AqT^BM&YD_NY4VzX;eV+v3PmkL-*iB5_+RXMz#&$W2Aw5Fo2m zR3Z1s{Bp#v8S(RO53!>1&m(=yQSTq67OSjQR#eFSRw{T01jxz*6;J#v=g)0#c_LJr z2>m6Ed9?rKll9f?F|uK&9xijrv4UPY+Ww#RJ_dqYG_?Ta zi)7vHFkkJgywYrIB)=7HLv9;=D{C}-Z?)B*wyQN5MLOv3nv;53LT}3U(&0trKnHz+ z-RR{T_K4oV!GemcPP%x)`&u&hY|^5$-eN{u!d=b&@O4eKcpn5^-AgtMvmT~Wgbgs! z3ARR<&ta-_1*c&)<9!xpbIiGzEio5hCSfkYOvYS_$+>yyA7Hk{+<=Mw*6Evgcm%>H zm>n^{!t8{(53@7oVa)cJ$1%HOp2OsNqx7qoDgb{GkuLfxc9v~?*G2C_SEN)|{TqAn zCw!;6>Vq|NLw_s6;gWiTDf^V}dbGC9H?6zg)XwUIPkQQ?Olv)XW_!U(+?-zeR&Abd z%47QDn%ODUvVKs?b*0tI>#eV~#|)OY9@j6L*4J{4L%00AWqsiB#k)&ieV4t&5MS|r zdU2P1=onwkLHf^{L!ZD3p?WNkshFxK*!i^9B~>4$t@eGKsxQ?7pP)28Rc(JkFX|ij zq-vJW`lb!hzqH#2O!2iCu17fS?b3Z+{-d|hw0kmdwEl#hDfx?|_38E(pO@E0qX}n? z(UVMTZd|jqm*ta)aqbwskKKI166lqNfHjA$aSx=oF+-}2X?i_#w10+LvsIN%!|g@4 zj8)!eO87XvtDR})f#dWE_C|h_z1QP#a8%$WWjrrSW=of8cz<}j9%))L#2Po2rLJ@q z&77dm(f;(kJV9@7H)H%WlxpqQ_`jHm%$ulpqNl!Y60J_JNqQgVK6!ph+acwi);DMw zzJpKel{Gt4ig%vTCulGE#!S|~*0igV_^kev$;_L-N^su2axCXr9AmoeIlZAdJ-{ks zu~MFcwOH0EmNj|C5!rrL=2SR4rSnw0TO{|U>Rnlb(s>#Kj6=RD)6foPUWVmMisX+b z|8uA7L(ES8i6qUIY0*+>>vZiLQA%n*uP3m|tMBvr6Xs_D3pK1_eBgPC z@p-xYJW;adR|--!=>@%$oq3ekUeK%Bn=bHu`U2x2J2M!kX6c`5<0Wf0)uV~{hP|j4 zaWjybGFN}f&baByTs_my@aDyN`X6>iBGX?Z&9fx`HPU8+EPq{}p>39O86?pm8K0pK zr=}gv&}Y~aS4hA4dZuah$TeHM%$!CE4ts;HwCXLlc$3;me;Bj0oPJXuXIdRze}bs; zH*Nvt&+5-=w!b9t8ih7z0p--{acZ_SE1jbk>O-`#zL^VEeX+V-8sj0qu4^WG^$tpP zD3!27nT2c*ojIG&J40PR|1Rcr-o3U2+Ts=*bsCM?2ejk)Pn&EMJx)9AJ1F{ahxUxG z@!R@XjaaW*LT#XVzq3To)OP#kXDRX#pSD!@X$&bpSw=!O+$uGf>-}b|Rby*@DQZZ| zuN#e5*h1E$f@UBEOa=?UT5uTT0VC69ivx{7H!vE^0!zSVup8t8o3PFi)B~NsI4}pS z0NaEG)IafX4MZ(su`K8SQot;*1Z)F`!7UKE7!N@=Fb>QCYrzh18r%g@Z{ZH;08&6Y zSOm6$1K>Qcy-najqqn=_7!M=B9Iy;*1qZ+l5Jt059kc|D%Oa&fGcW{9 zmE-T~WoC?c2Ynp+A@lR)8Gv6Sxba-opXV38aHXU^mDGkt+xQNCJJp zWRL+ig5BUWxC;_iA_Mw>abN*h3-*B1D`zlFc%OCDpbh8`(!nCI4IBp7fI%CZ0FuBE zFcmBTo54@u8i>m#m%unM2W$g}fw2l6=mkcDC15ki1-EAKCt)=XgK=OE*ai-R8z5{A zxeD5VAz&(40ycvK;5>+4ODciUU>4X04ud@4Tt}clH;@h%fsJ4{$OW5PM`@WII8ZL^ zeL7bw>0DL&-6fUZ*PE8IK16JHKj>WbBHI-Ex%c(HMbaMQjh_K-;Zn)hT@I|) z-wLiiPhW%m>DX_H{j2xw!Gi#%$&odT$hnKaoqksCuhD~tn@yAEYhh%-n0Zz_U+GDK zX|ZXtPBG@g$T};}hB9K-!FU74(zDWTonGFt6wg{d>5P`H8}tW0ZdYOp5&PtmvdqlxZ?$Jwv)o1dg6l2a2MV#&2R;_xqwW4L8kwCOUBk?XzCDT z)pwX{P71rr`f?HEtL`*x=B|=AFqvRw?KF9L1A*aE2>0vf<--knc{}DiyFvofb|V6d z5jcEa(l&;q&pO3;3&tsDUn=D@USPT5WyC9|itM}HX$*RqWFGIY@MLE&M89W|s znuLE$INqZ?r(AUT#~iVNv_m#nhEqsb$|9Mi*-BW;?U#H^hoL1o{4t$8%GSUwdR50v zReIZTl;MgkdZZ(Zw+&CaOUVJ=ObUzNercJX#}v}tEqXmlhOdrKFRj^+o|7(H=?+-A zsji#zIvqtbKcSmQhV}bIf7ed_-2a5cAP1^`st>cP1V2Qgto>B4=SUV=a1{e#}l<+}WnDcc`fQk6_&KxgI^EMGsYw&?I08 z)pROY0J1?2_z7GCkqk!?KnIWlrh)|^8{~joa0`TOq+J5dKrb*F%mT~6R&W5E2X{f# zCMHM{7~Uj-6fhZNfNZc090qy5nP1SI(PPP?LdSv%BS#N&@y4WHVpceF;CHnsnVO@& zfsQD=U9Y0YAzdEn5cLo%Q?^qq%E9S>EL1(j%1Onj17pCkQ1uWi-M@mtl{oGx$3oRZ ztZY||dN7_lCKtads0y)CSW2yQkkc6tYV#_=sZ|u|?*nKDDyPbMX`8{g>hcFYh} z6D#$1BhUhYt-pqYq%|Vzb3;{4 ztQ>)%zl*B5k!z`%!1RVH$DyjG&@t(_M;~TVTK)C7iB*sH?9n?p`cr~u%tfix+lz`B zph~||I4SCF3U9H`hQ+YT7gbF$d}puT%Ct(A#`Q=CT?`WL?$yUpN_=Vi^cOYLDh*r= zVV!Xhd4N$ix!dFbBlSeC-clN`EoGj`r=)}W9LLk7pnqHJ>4WIBX#t6*RsbUpp=ea@ z9MZd}OjxhXe6sNnktvjGxz^Z{P5&NQ(hg*x%<#M9=w=-lqMCWteL5$6h$!Qt zw5rE`t`cgdSML6#H}b?`WhyoN-R{!jsNPC)j_Q%c)Y;a{5Z>S2a>qZPCy77v{m3Qv zj_R=iKP6j*Q*u`b4^=SFFf0}K$v6IOW?PfFsJr(hqj$TYu6FU z0Nc1pK$WB()(yiIf6+@Oj^_CE1bAcVw${QNhuHvgJZ1~b37G9LpTg{pIZ-D4qF0^~ zyoE2F2w91u6{KKUC8l&6zsXqBF{fbGz#2(IP9FHLsZ#t3ywm+puNaVzcNAr41L08!w7}^-FgLKGRZrBq z$zR9x?)KE4(&f0`pnUWwBEhdDI8Wic3!=6#)BtTj|1I;AzsS7HDm9MgigN8{x8hc* zbV84{Z!M#?c-E1r9~LU<%Q&GIvD1Raa=y82&1JU!TOxj<|6Uj$mlTRS&pem}a%8_K(aUF6*|4;g(AGD-1vnUUa%iC9pG zc!o2zOsXVtNZ$qhj`pP-zetddi1(8ID$BOAF6njcaS3whlHQMy)W{(Fdsz?ery@jG2+=+SqnP+5yXmxlOo#?u(Y+2xQn{+@bE$n5z1y8r z2d?T10^jp?%h9XMl<&vp2clggC?81uYx-yQ`08@~8Vz-`>Jp!?cVscz_AnbectzzHv-M+3D)$Gk{O2iFDL@&sy8~T6j zVYQ_AP3EHBl9zAd>4)<9O-5<^7m*Nx0C$jl7NZ0a0YQm(Bq zoYLQIgs}m3q}yny&6nkF<7;iA4AqTV+Co{V8%>#(J*XQhT2%~!atv1zn@JDDsAvw`M2u zue!Z%39J25Dk9iR$)Rj)mBk+88>IsV7c$;)s$GjuJ%~n&A7qKvO zc~PUTgSu>WU9J^1B28*7WlU{fPVM9>>WhvtHriF~+gIGEqxq}UFORrNNpwl$nD&A1 zc1eTj!dGNdY2$l}{OmGDOQ(ZkYIR0(V~t1(qVIaFF<7IZ`FfW#T4<)LzU4(bt8=rl zypf;^$j{}CU1n##%P8-M%gIw_QQx)-MoG=w+|VL^B;6y~(RHn&u~lX6>Pp5%)5=TD z)>;w`HUA%P4AEx#id8nwF=5+G?k5^s z$Obv!CvXiIpV(}1pK$F`5)XaAL@*a*gBYW4mz`Wha|qHQPz=n$R&^Nc2<&<9>zq;t!cPbQ=(4azgyFYayt69IrcMCjxFa0#m=2E47T^yp2QZ*M_0P znDxC3tZf8mdK{9a7zT{F-^;GrMtM8t#o9&}`-bm*O%e@{X0Loi+SM^8ur%V6Iuw2r z*_A37l;rhM^xap~GwL~}^0t3AZ#U{0(T-Wcx9atcXhP`gSYMUpoFlTn0YSyn`HmkkwVzcAx9;YI`&-#_fD2J0QSBo#ZKMk*BQzOj#3wtt@ zuj+#|hFX|;gr(1&6z^^b&o3h*n;I3orP!jOURCFo3Wyc$A}e(IhpEMqrR>%H=M>Oq zcG?3S8lxGduqz>r{Z-00Gs=5o*~}3d)%KD<(G@E<&KD{v>3!@@$!Lc6)dEt=9~HFr zvaXrYnvZh%%_t+?aIXY|!RAKQawT$uA#!-@F@T-}8e!wJ0KL3yKhK`cJqPU(a%HdS zmbuMQjei7f$w|e{gH}piqgfK0Mc7sm8pkqnvN=(26(FmXG4y`;Qa5v{+9A-ws7JVl zwjf8k6R!7VUJE05)J7NC3q7m{^xp#3#k-A7+mS7eNN*U$D!v) zl~y72DT>|)`gU2~$_O4N&_ymo*Po_c+>Ku$?V_qcK@HG>gjgr3t&OhQe|?);8yno( z8@|+z#+#aH6)nwn%lh^f*~wU7FOlnezmsuR)5w=D#;a`ME!EZNYLER*Ms=mqKk=J< zimA;Lvm4|uf3rRqPwYl(mlJqd#*4OHHgz)^I#j^EY{l&n&hAD+=T|Bb7=E9Qu}lV7 zw#d(!vI9wA2$%{oKsML`j)A)%>I-x`Xah!obeY-RC{udKmskPWAP1ZVcR^In{Nx^) zJ<$H=P=`Yt65qop>l%V?)MR@)H5~o_EVccY9!3@YJR&c1UI<5b@>#zpae3Jx4SE`B z_D>x0eouN|=j2{b()t2|QBIEGdT_SpIT_lEDs~Z0d8fSA%SZ~SVdZZy6M7L*zu%P0 zO8yyz%*Tu*6F(tnwpXn)RQf+=^l>QXYb80EqJ50M0Z#f4^or_jL|5(8&q}s9jOsZg z8R!EhgA9-jazJj*rsVfEYb4c&uGI~S!!D`R$B1?8dd4Xm8XKQv_BC>}9}yo^?s>+#{wJv27#Y9A_xJ;=*&FFPp z9q5M=yNR!LCdkq_^OLGz$jw|*Vguwazl++|I*l=GV=+eLU`+d z9TgtC92`JBOlMW0?0LcnbNBKy<^BMpxa6_5Iz;Xt3sG+f}xij9Y}@_ zoMzckKBx(rUg90(Pm$C?sFOcQ5q2*PGAg^KD?y1FOw#QiWO${+V56{HRZk<-Q{fcD zt34*=QpmN(WD_$xl0MjolF=z7GxT>LWTY@i_-QbK8J3nhW+=X?2&i~rBgH6#++OT^ zUkwS9Y7ZZidnrZ*d+c;+_oPu)l2TFg`)51|w~EeVlA3C?Cnr~>l9RUxcS^b(N+l;# z(k)4))sY*cU27Lq@`RZCt<_Oa~X1Auwh{3C{&D8b&-|vq)O|6mnut zq*c02pl{B!0xR3U5r5HKWn=_O+3GO=+w0`*N}yDvmU6;OhY4^@5& zIvL2J$2C@G1b!2SKIKn;RW=`&8pA04S3_J;Rg=&wa-$a>ln9TXoR~@qXAdK6kB0D= zY{AOTVGKlXNX&2)_8k(w=q#r-&Rj7Zwe%O1#98viaHFO-an^(KqdE*7{8N|`$qogX z^Rz2mroCOLkRbM+we~ubeJw^BEY)fBtZ&#T z!(-Q``^JwpO4#iw>AqLejEu<21jT z$(EUfaVv)*&~}DEAPMvV6Tw`N4RXLSa068Qim@5!1xAC6uQnyG)-op>QFY-K{Id8Y z{=ssVoGVJmO<1bdZiA>~;mg&@&eam0;m{@5a5yv9yGu&c6yp@i{?92!m9TekX2iRe zGqOB~&RWv5w4fv2_4Rm`o`SYtmOsa=!Bsh`j1R;+)o5t%^MQ1nYV@e0!k`i~I0GH2 z$__s@ZVCRDBJ;8AoXVuf$8uq+QCIs+Vy0oRgA~K=&6XFZ8FlQ9vgOlh%z0Sfm$D>$ zI_hE>mPckwgXv6)U=EyaT+!A_=NZggd@j>w;L3H`G{YFg3Mp?oHI?*m&s-IVO@1Z% zkB_I*e+-g>{l}&<(s0I>Y8txdWUzIxhMjOXl}+hJE!Rrrkd!OoU~8-4Y=s}qnYsxh zvD_t@R87SoTd9N6-s1y)F!JdAWJn}qR{XLwXD&wCw zs%cXt>v`ixI%1PvAeP_Dsu$?6wOuQBUSLw@KWnAxETe(9K2x^JuVBsYEXiTcp6VQ@ zS=62txVB@xO}-3s29Gq)lKQjZtc0@{POWff`@om|ELjI9?0q;t1YDJ@@%LL(LgOAd>P^M^4QC8 z$A2iVy^Qce*{)tIv4HDkqX%K_{0bTU0siKHB%Y#<^0Md^dZ78T>J=>K%JEl_ZoNf{ zze-0gOUAs4bT-nfw@B$ij?%L6RdgvEZ(lXOAzZWPV(G4Yf?<#Fv6_zX)bvUDdB#92 z&zxtJ@J>)E7Wk3F?kTcr9%--0Q{>=0;{{h^9ydwf*NjK)jX#n1Un9jkeIh@+=69q1 z>j;yJ?n^S@bq2GSnB7n=s(e>^9*W!V?OKemt@c! zJsl8GMN733coXSpPpn<@Nit^r-3>mIn)8i1r5iA&SI(=?#obCV5d$jo{>W$Y?0lnJ zK@~iRMV+q$?(v_YM~*tnN%R|xqSRaL&%AX~Z`XP2`m^)V0$c0epd78kRw1SZls8gt z2Nm&y!3F0ZWJ$Ri3Eq`%VDV$ISEeK+;v62B0ATf_65oJ$7dVBF zITNMR0=(wU*Y%ill@{J1ni-0+%voW3gLpF;z$Jcelcpy^!nHV)aIqr5o%lr{T$gtg zW;z5X$i`g7Xoa_mrL7P&@8!7j;(Km1?PL|ADOd$EP;(n7+kU#Od?_$r^ z{*z9Z<_@qZt-Hv28In7KW7=^R=AmeIsfI>+)P;-~T~i>lziLEY9PM`|uM z`V@FJ^KAmiY@d5M(o25}(FM2RxR~E_-;{Dom><3=1C~$?Yj1zpftyPZqx`$~N=%kf z&9Qeoxp@Y6toAlb7H1(qxpe2s_ADm6t%=_(DfJG~q!hX%z6$2WH-#(9)pG@R_hdRb%K+io{;XjD4@*lMUr)DKTJp>3-%bd_L#wS>VG;I4&~U{h{n#Y6SP#Wl5D~ z&`DeOW$C^wBt)yA>p9R9zP8Du7brKuuvS`5+HQx_;%n)$+-Tuwfds3x9u$r*?;0)am|fmAdOO}lGWL@5@q!e0y@%x2NcPzwHQz(8U=DoGNH0jRGYGhLATU?L zS1Q zir(lp9||ITSeaj^ZF{|Y5NnqId#{HzTnyJ`PO%3Ei(y$0*8fItAXED2A&c;+< zi(ka-!TWs7o|yQ-1?#qST20$ynCK}RZl&k2o7Nbl`i$>xG^RVWkA3Af84%_dfmHf}L)IOsLWb48gi$?+LewW+@5TaDlBs^{<-N^Y+*%E-je zjA(iw^FO2is^$9@erb%=%++W+6~Fy#o->O2;D-ef(!~Wv8*;UT7O@e~f+()wW$NOoXGpF_KgZ zCL8iep>f|Bn>7b5lg#)XX41FJ*|+~f27YVw)8@!0-;x^dN&dISaK5kSf2R`VJJRb- z^(=Oj{wx1wZ~t;Bx5wCkvOc)S_};IK|Nc`Y?Ox_=bEW$}H8|aeuP9yVdJE2I-nfK0 zUvYNtGZM6C)N^Y-?)pjH_CvaCJul$dp76DNvEOK5q5=KsTt&v`vh*F4vna0I9#6g17W@>+kZgCT~bCFF@9ta zL)F?>$pX5>1)| zTN3CGCW1v^BRB?bfGCu8bq7i`FA z4E@MPK5oZ&fPU!9rp_kkwSK`g!N7i*5 zX$9jW81b8=U*!-+77TqejGCMH_8%4Edw2qzkKr_f)3sO#XBr&$7C3D-$@>Xr@PjM? zh7sX|@g!kW`Do*2>I5_RVRoGis6x1N5ST8rtAvJI(YHgV_Z&*EQ5E`k(BGErRrxSB zqN*9(dcRH%LB0)u5k%zFlfm3!#sPuKx<%{Ln73v7X?)>FeY;9Ct39 z+8>I$dPsQNR>vugy{KblOm(xeV=OkC7UGPVkoEsW8!5L3DfdTGyhcdk_N_sB6oL^& z(g)I`Yz;H`X?vaQM8F+}K=em)CDdkOO&H-Ys(vK>YKAzOr5F(~*kH9QlwsDwufi~r z9{9DdW{6*t5a6_Vn>+adKe4q+}DBN&y2TYzERK24s`DjsE_0Q5XhF1_07s!w#=_@&Msib zG=TjC>>s6V1K2;xm0UGV&#%5Q0v`^ekOm%2`<0fWZd(2izYhw1c zm-$R~H8C65yMHG4mFd_f4Vs#D>^-*0C`|UOXEinJYMj2^)NE+)`MG$SL7gwnn?cxY&n zDOJmV{~b;h(KQ>TT#{LhXmn08pJ4qTZ)Idhk{Rjn>(2@9(vqKKw&bXw#ALIzqoh)J zYHdbFG9vN3`PXJ_OE#k&er2e5Hxy4PKtC_8l^JbE>9uHOwlXap=ief$`dI0OIBa2A zE3>3yI^s(Ug_V-St+4!Nz;b45Gg^CFVphic@6!LQdJ( z#^idakK~IsW&=lb0jn*cs>+)`O3m65-8w=^+;nD?BKV2z^UENjAY|%ayw%9l8jNtd$PEl*_t`(K4yMq*T0t6dYcVq3}FII{YFp(571tp2eyOs z>p*SL4U7PDz%sBE8~}O1dB|pq1C2l*Fb-sZY_J>T0vm&olAt!|08+qYumG(6p3dZM z9&*855Oo+q&;bkqQ^69j85{uTf%6D+WuOu021bKfU>Vp74ud=p_5&Rf&<6AeQ^5kT z5$pze!1*Jc$+#bJ4D1Nwu>AOoxgJ3ubD1;UQvA?N^7z$~x? zYy`W(X>b=r{jAbE@biV)onLA!7l@L{@rA-%e1~@5mP-B1SjX-Dnsn{pe3M?F|5ll6 z{mdx08@_FTc%CR|zFgAw2{f|~Lmwb%PZYG#E?K7-jHum32gnbhjAH#^m@r}oNQ?d< zPECPP*#jeffYsf!O-M}}KGd3|NVk)f4x6nMVTUh&y-0CnIZ8=K4c=WWtbX7nGTpnr3@g#yb!N7>-P5$r@zFNbiAW5qswW zQg$dx;_@J~kYo%rPXrXAOC}9MJOc59N}TH;d3~*WKMIMLv9zMiBGoC(Y9Z4(uF)14R({ zP%aNKYiS?)VuqS7t&}yZsB$+{FRLu}SNmSWP$f1}(f^jN-gMqt=4z#6EpK*m@QYz) zRYz=4#yK1fY2}i-?M`ixliI`0J`Pgca%BY)4${_oJD}t{`%_x8%?fOP8E%f_xPmbw zOficMvW5ZUtZfN#Bh9JWY{?plsvwU2Mw#z2w7xgWd~Zgb%2wGOhf$rfoCNxS(O?!> z0ycv^;54`eB7dQ7fM%c@7y+h&1z;;U0B(WEW7I{^4U7QkU)X)CS`jc|%F-V8&178`H&EUFw2=2Z&*Di1b1OWT!Dmrc6M#+ykvcXGT* z{j41r6Gb9+jZiv|qoP2g9@BgmvP* z3b_)xP6RuEKO|-{y(z+xHrZTn$J??~%&N-uj#JE6Oxqf(Y3^igmbx~@oKvS{EcW;% zfNrGC5HJ-i0BgYka2_~MkanQWiA~A9)n@HDb~f;3G~6wfJ2)#j)I&fk`m^{}2WOOC z5s6n}6n(_mG%zf#piA#ZoaOaOuolCb@rbkK1J*9ZiihP8gztJ8P+CPgE~56 z9O_|4M`wM97U33O$Aa%N6~vrjR)|kPwqk^}mB`j}=)_4>3^k{#Hnwo!nvHefwu%wb zV}^M?knR;EIh}N`g2l>(WmI~B%B~=*U~p<1N3(K1@ZXO*gBK}R5bsQ^RD(0Mur!%z zmbFhU?CUqvG=j>hf{c8g&{Rj_c|KK|0TZQwvTrID=L>9)$B_IPThTI(z*) zz5+YzRVD_Dkm{29^RX!tW|7@kch+&X>2atWEZmXxBjaY%nOqz$ugyl|sT}fCmvv*~ ze(r3Pn#zzbyE)&J%ook#cG7nJi{`s#<-*pQwmR0vxzR6~N%p>lW&KNLKhjD(bIeTB zN*T@ehT3>nLUQJq9UM`_pye_T>+fDR6YN#J(&c5dpF_p#@1BHj$IE7t+1YEk9c^t` zj(f$dH{;#GM1!BwgZ(M7Q^5kT8SDXh!1*hA51N5)U<8;77J#*22gn7tKv*uapb_W> zMuS;k5!eWJgIsU}@Y~d`hQ>@%oT~zgYOYk8OP68pr2m~fijg_<%&=k=ky$Y*(4==r z9MrZ;a;r|_{gtWxjUPDT1H1B+ODd0A1a`Qk(BP|Idw*fFo+}{}{j?N+&1@6c3lX%{ zBw*`+jDO86>W)Y7$!Fx1*UY5<5e%M<*Gx_#=&Fq1vvT`2v-$tX1(#;n#G7Fjt&)J; zbCZK{=vi-2x73ko6mM16lBjE3xni42AfJ=Y8RqzZachU=Ru$a(^MPA+L*3$#PFn_0 zZvFXBZUw_%TaxD!{;Ih3lw8jEKj9C`EwSXPsqjnR`DXK4*34Zn;ev83%lH2b%kclL zj-?l5=f7K;_z#w9VChv!eB)nz%KZmRHL>)jWMS!lk}ep$PLlry(XEBt+hV?HHV>*( zO}=R1C@#0&U+<%E=#X#&rBbkV$HFEObE$t3Sw+cy_I#~KhIxjHGgeSmW z02KQpnY6&{T+8Zj1yeX!peF_z>eV6c)Ww~flD~jCqCL2ggot9_oFeNzg-T1ag=U=+ z|Lj_vBxaHz^>ARRWG%#j$ym+{IIxsOpZ`A&?D0F`u8#wcJSQD9&GHcyJydw0f&i_+ zg$Dl|grq`NO!|dHr~%IX{+v}$f8cdPR(p{*m4YAXCs*Dn|&HvV)!B;=x}MuCJkFi4E9E#*l&io zR`TJ%wF)#1{k^h&5z}(lB|OV~8yyrPz0%tsddTH|H488UsDSzMN6nPCwrUIq>b zDj^tKvdoSV%b;zB)>U=5(k0>@Gd|)Lw2jbEF}4Qj(n`^)7l8)iaejQdJpGQ@E?m)^ z$W?{5M!tQ=Z0{%afz$-j1&LW|wlAfm)q8pRHbkfE^L$)+&(rXKieE6P_5`d2G@svzwphC-)0UZ!BtBgHf_`-<=9gnZ z*Mna>EV*Xk*JWpF=|v?i#^0qM2++E_E6kF2y4cIdbi#ol$S8h=Sylvts{+URw>tR_ zEH}Th2Q;E`JJ_k~fQxfw)e5t#gPw+b`4K&;sFmhGt)LIA-mkGBOf!5|BpYHPZk5Y^b=aC@UidvI06~72+?*ctwBJqVHJ6oZp*rQjy-aNcC1j zdQZBqhP1{atx%+oWczA!xSf{j{u*Wr+pIBP3vX!i+S-G9prQP_#*ERH(jUgdl578w zZKsv-ThIGPKHu|a=uXpWPt=i&{tcfw>&#Zw+Tz8dDpdl>Vl~de3|7UVGe<9|e~qnP zbJBXVp7~+{&D$fKa|_p-b?;+?+VR7z|y%Q^17fTL<-W3MgD zCj09l%dXv%Q6v>+`M%m>4hd`AmIO=!tw8e-Q$4o^il?3xS^_1f%$73fYqP1T9{nt- zWiM31|7vl+{@NVmY7DoYT-{-oFst#{6bzO2JIuPSCOkHh89U5a+2<-0R$~P3$)E-p z588veK)L-mP>w1m{H9!8X)mFwHVzjX6{KQz3t*I#*=hb)_U$x{Vq-)2L085~;oX!< z_$5nC2;o2U?CZMAeB3T&-Gvg=pC~!C+Z;IKJpCi}TasXz3=C{xCvCPk&}*p1$&G`J@~g-RkQbC{;20(vx+_#frik_G&f>o z*kpXm-kAIc5whdeIMKcfi{)Sl|2~+w zgQk;b{{iVqZSCrLZ*6-SNjYeSd1FJYYJRKJ4*I?S_8{}X!|;UFLI=&K^x-_dq(aig zUQXs7;xm$Z+y9zlY+x2mz!IRK8k45U%slZX2Z zu-3e{^zO4dy}vn~6%yjodxnpZ5wc+1$N3WAy)D62Mu zDu%ykFrtOx{WVZZu*JP3nd8I5lmk#@$4xU*5+;X7^3{UozmU!L3E5bN+Xhu`2FEwJ zcFn9@WK@70Y-h@Hm&gL9x03SBNbk>FM5yd2ro-=TYCc~vF9pcKR;a8j%r`502VAhE zgL|CH%3dWsDuk>i;>wD4-K^$qap{5Es!W#U<~$r36+$-rWOdPq)>l5cu9_H9?*%!D zp!q^T&`M~j_`4areWMP$W`UvP5lK(r+)JPuJ=Q#q+)D2oV z-X2ONjx|&jwObY~AtmjSYd1K&N$sDkr^A-J?^{g^XBHyvxQ8&qO zb61#hQ)MI(wQ+jj+l5N_cR>cmn<}J1_1FuE{Zj4^7PMUUP5Z-qTys!AWo&!4+FtvU z4+zx6h+8c0pyFB7lv_}#V$&6s8f8%rC~Bp%az#+gB{8D&5|04dY{!9>wU?8oBuIpT&%2O#g5fc zmN^F_1(iAx%mpjJHjoQ$fr^(YtY8S33RZw^AP+dN(DZ^fU^JKo)`A`28ZfS+;z2hs z0&v?w8QU@*wt~YT4>+%(`9RXOP061I4o3EPqTFc=>qnoIc#kLEKKi7ui^p?VQy(MM zVKt4yJW($CWK1x35A#%Zyn0fT*U!0wJ4({zV3?^O6kA&Qfcqc|F0U znRL9NOGX6yuV0Z1p^O?uu)u)Uy<8qE;t4JoOp`3=5!0b(Kk#W_k&u9f7sbT`g*{Hk zm%nN9QWZ1!jV?_l!P3*Qy9>_MP|k5>X;~zej>9@v+YBxRO_N8W2*~qT;!66ckdS|@ z=r2J3i#wV^0$8aS2}PI3Z9gqtig|)-Vd-VTkZwirqtt17PTFaf-25&V(|ml!1|} z7>A{MnGly2Dn_@GFfPgGWkSMq4~A<2VY)7rqC@CIqshaC&?C;sYtbPIvloUeD@B?X zJ0pLDa_YxmMX*x+j0}tkN$i!1u?R-pGhAI9!YEc&1-CSAbvz?2%7$=e!*RcbmG1PC zLm4*}<82rt&PdtVkoue&OGK8y7%MNwhQxd?bUh3Di)S?XAi)eSB~O#)ark~M+T--h zJ5x}6LY8Ky$vPxlOR>8`j>Lr&@R)KGj%Co-1T1n#MDug7&Dj3DG zVR+95V%1~lFb+N#@z4q@jv1WL&^JOqA~mXp(8nnHCg|s7VJQ8GqJIee zg4_$GH?Ic$Bj^`pXtj_MunM|+Gj!%#4pj@O45g}5+&+d;>#`LGNxVyO>t8*jxV?;w zYYQ?xWL*tU8QD|a6UOm52WxsB4c}d!?mz|W@tBJ)wrAAG^)XbWMX)98FuE^?|q&Vi!)e(!Xh1gW7Qp+zktrlW*t=&0(vC@*G z*g3MdmgjN%=_^vRroY@wsg2mDh$UQ=cWdKX!d2gQwLPrXu6tEZC3>dY|8rFa*YPy4 z$6k}S>Uh+c{$?G*`I$eQF?B;yE440eZG+CP`?7UI%Ku))_#DQleEFkph~}za50}1x z@tF+Zks}>u*7JO?eeQd#zGtbE*PD$!wb(jVsfnj)c#9iWQmc-AxFk05#LCt zMWhM{C?F^(T~Jg|(D(W6?g_c~|GxkCeDck+J2N{wJ3BiwJ3B?ir0Bs(BF3tbDTL!A z!tuCToKhrLIVI-1Fz0(gbG?ddqN>)Mr)r{F)tslw?vF)$G{@C$T&+^&THtDxYS%)) zSlEzJws&*Aa28i)|_?^hrgv>YF#AppTgYtDdzR#l)H^y-3^o5=rQ5# z;_S}tF{*AfJrvXXvVOEZO$KcyZ8+#N4tgw3eJlsT8*N^S7nA&p#x3huskdKaq#Yb_VhpuOI} zvzAJz)dzD{dp*jti9M@Mzp1@m*0rtRKzlMEm!TFv%(K-hO^ zE-C3=?xkM|w~H|uBAvQaFHw-+TVLcNBz61hGQ0y26@B$qo=ex950l=0BNK^V-iL-`wW6QS=-%rtwQ?L^s-pYrt-`xmWsFOkYtJt?ERlqS`)5e#T>E3=fXVt0Pt_Q=-4J?iG7;7+ra+&f zSNDX!RoZsC(C)RIF-@N#Sp$P&S%{R->KhG`fwVej|XWE$WMApe1Mv z+K;Xw@9#7tpcFI!P5nKGD_~;_I*cwM?;o5HH9;9D8_h!bXd60)t|9Lo+@S_29SuP< z&=RyB?MD}o_b%>G3hIF-p@nD-+Lgn<)95ye{*y)wl#Yg=c_<(4L8s9j6!jNwP+K$r zO+`!4dbAgvLw8UV-}$SeRwxUNN3+m!v<2-)mr#x@#ajy1L1}0Jnu->oHE0()iEg5( zzws2Mp#f+XT8_4%!{{3F{-bFLs0r$Uve7)0k9MMC=q3u|0ZGtYJ!yG&@s-r2jX?8I zKH7g!gkcDfei1@wfFiIjZ{RONu) z(U}kOp(3qji%5tI4oZ`rOIv3@H2DF2M)B7w$ul9L+=fveWT<%tPahbUL4>^3%y^`N;^ zD|lLeP%F4zk2b&MPwS>{JRXJJQ5&Dut5*xV^T4OQ_!7m_TLYg;6`Cjb*=5P6Rj>P+ z7gjOa&7!t20e>c|F|+g<{>hGWsn1FKZ3TNC-U{}debVY!L9x8KvzbyP}xzb{>}= zH2P1kI?wxmc(q|3L79wK@qekW=TWPKEe3nb6&(!B(8l?=nj!)IOHH4zHwm_!dDYA~ zcZ@nbpL@=sqg0(smfPgz)fV@O%qN{X#1}u(fJvUVy;Wx-zGm(#J8=O%Vd{6K3Sf9Mo+4y-3$8T@!yv327I-ugMXz8 z&5I^Enl#)#sUa`Kn;Cf1^`3fpVUe2mDY0M@N?+DJ<$hLA3ds_G)S2g)$hqyadT`O^ zv1;101aKw}Ur?*qEcZg;`8@tDe7m@Zqy^bBw~xQ`EDumHUDSP!6ETyeui|~x`#HUQ zM8*3L5}R9Xex8?@I$=z`b?kX6wO)1WdA+f^_Z-!*6xDDMjUhFk*Q*!$*6(>j6Tr8* zYBonk%q`-XN2R_%P2+G?zTQ_UGL>}|dn)U5&*@=m$P0RusSB*T0!<_;h%1-L|o++KV*5Fv+7Y{2x1z+W5!E4X6FZ9t7v~VwFra z_)a28>wUHAMZGaI=bd^{f89;qH*<;pzH4$p)1}k~!|hCig2Ad6mK0Mq`_Aaff-D6QX}SL~H=UuEQ;8$}_FhiC>IHRbIh8*%0Jr2lF2LdJ>mA3+2*YbPnA?Q68682c@AAD1eruE$Ae=iK4v}lBg}}izcCkXbswh zPNUl>nkKHAs4eP?W}qb@t~T0wHuj)%=njhVxwNV%1@%B9Pyj7K>(MTB5?w>yP+kQ> zrDUF-_ZlU0D);(bRrxi_(08A3+tYl!uBZ5KJmI_~I~jc|Rkt!z+YWhMZ$`NDo>o)dr0FJAeeovFS$*4Aced@PIv*Zo zPekW5d8Vq=w+L2y+^kh2-=fLF{+OMrKET|^LfpQ@IqJu^^o&A_=4h`FlEx+2HDx{ly?#$vYmbR8`#v(@!=lq!?w1tYg;uJ2SdQdO_F zIjRdsEmyg3>;DSr%I5p({@Z$O&-?QjP|l(v&ipIlh(BvA9j_T0DZ#3ZZC2+yhAYSa7>Z^1(adR-UG z*o@i6%kcXJA8gZq4$Da|L2&skp%GDjQ&9twcp4gjW}qc#8#;{cpeU++DX0eupk-(; zI)|bdfm{`3pb=;hT7wRwODKwg$W>7q8lbxjZ7Lg!&=$RbXX-K6;*8OG-?Osevb9mB zS&nM&?>+5-Z|YSuikTov`Kmabs7x$_kuEh|9Lnl&afyT~f&tCEPFYpo;7U**SxkDn`btcAx3BoXosvH9MQ*x2yS|=@b1$Yt~_gi_Vzm z_vydpne>x0_wuo|3BIlyrjqv300z75)zh5O!bJm}f`{vdF%EH|r?j70I0Di`fXOxj zC1D?RX0IL_Q8e)B>dZd34{=I$K<|o%a zi-4{vAfPQ>J{HjQ)!L|%_Uq+6wKmcpNoH|Bpw9_@5ng_PO8*rcJ+HPNC~TU&tnMD* zk+_O^zDhhu0h_5h&um{f7|DkYK7GKSE$8@sIq%E zJusG2tWcjG!oPNoaf~{0j7oI&z_1k8W!3I5*K(b+&QW6y7dF;jR$ImV2IgzjnWE;E zk6`{Y=6hA=BSqq5v6!=b1s@5vA1VA+cv*#fMP_vibA7W){z^{{(KpK_9XQDo`q)`l zgt~o_z!ZCvnW3Xku~qxckZ^mckZ6LwQb~V{5J?Jb(%m9Nvi+5I@0eI?)9M{l%G$K1 z@g8uL`rb-=8t;I;Jt59lCZvq*M;xX0F57r>oG(_*_@4Rio1D^1MW)kZWj(dw7z&ql zn^pf)dh19@GHWn9z`Z!MS#3O}C#iYIsCeDntiG3>ow8Hv9ToEpJ2#Kcq+Wt!K+D^q-(&kDv`?&s)|1-x}ZY$@;_{ecyPgXK@ z4R`lO5nJlZ*d~6hSBxmW<-tui)%8>4rP*KWX2e5|xtt?HC4Pf>{@2u5Clzro?M5q^ zq7C2QD&oADW&GRMgtY3`2O*8Jj2oVyLGH3ze1hBl3%B=gwfzJR|1RQ?w+b!a?hBW1 z)uBU7%Y+%$V^zjUl5@V@9}e`UfLK%}B+QzSJ^w++xO}_!le{Hbe&A|+cvwjBphwKX za#Rlsk^DPfP590gkDu3%^5T(kN;kvDz8Aa~x4z|G)a3rS^IdA@k3JS&#DPDm;6bd( z6NDef^w@ICBY3$YR-VPEZV@N)G!eK{MAV~>vBayqUFWOH-{|%IryXN?6_6fK1o{dc zfM$FnQNHcL$s`pxC!4{E5{PTsmo!zxiKGak?;B3G%Q2RdNs7oYzoe_8eWmgxVL z=)b3Cf2-GsxVQbmee$Ryr@7lvb(wX4l{){e9t)m)fw+k}O=v2-{~$D^cx{!cdzx>N zm({e>_<0*YJE>J{x;wqER-7SqN3CMQ&}(PN)69QdQ7Y^#TV>A_zTRC{nP)igHx68= zrpe~Q9h^a(KTqa$IN;{6?`dne$rcTk*UylmUsvI0$wKTARhL!gv(%P;=lDfC?Vzzf zS5yi0{Mo`T376FexC!|KH*cwnXNzQ4wZ7xnJD7hMJa)GnJMKHZR*hi38yrhiN^%x{ zQIK)N{>D~k_HuoMRv7F2oF-PPsPg2bm_ zfjoc%DOjvp&>(fBvl(5L4ogx@lXnH=1)wyP_akzrKqpuh4us{@+6#OGdR`s4pqDAl z5ftX*t(w&UZ0!QarPZ)jS*=zLYk4YV=1X}pYOyalVlpfTYd|?!9o77z9-p&~+ievr zgezF~G{JhkBm;g8a4u=L5tJvk8BBx^!J4o+tOwYVBDMfN+xm9Pt31?5Dq!wmLU!*1|x*d6YIJ>X~X5%?8+ z6dr?e+}E%V`xjw9c$4$XpuWKG7!cD^b<+mJI5-?8K{>E09Lat)hYcJyf?P#_(Vo_- zrfuPP_S4}6*d0C&`@@NFBozNf!^!Mt_jL^TY^MDU9x0kc3`^0#g6%lFu>mm zXFng#X8&zCAM&MLTL9mO3st+H^ct}dS{4IOI%}UDv!ld_T!!XM3|?ZyhL(bqgGwg%QRh%tySNE;n;GotlC;W zltxgwT=9*2W~D#b7vEN^-!9Rb#nOr5%Q|eum-SGJnhmfd+z5;MvYCBJ#X(=*QIjv@ z%O(2?wqYw*upJh?f*tG^y@H)`1@S(n9Mh5J zm%_P_|9dYTggQy{McZ+U4c3IR+HEo%1?#|hkRkDbS0N8! z-~!|!4EzRDpystt6arhbUmo&M2C`v$NQ!d99=N<8l4Mr?0Sz&qp8jMb>#n4XL~$uC7n%zlFsPH zX{9qdXIkluE|>q2&gc?pr8A+VGohrj95@8#LP=*&LrG_|S+LkjXmc@m9fSFB7kmbi z*tBOMX+(P-{sqZd0>w!O{o9NZh&VU^K;Jr4ft=&qe&l|U>PXxDnaq@A-IKo znwYfrU?!x)PT(;}mS?5gof0+EFpvWz0n=|LK(mJSA!I&jjlcw?*!viM4EMkvAb|^9 zgI_=ww~MDH!0eKiKQaKDdVioPJOncwb4j0EOkg-X3TMKBa$?ENPGYba%D#dUkk=qr z9oPi9>cB3?{$uzf`-kBrcn)5M^mf;HOar$du@j*2So>L#&KjzuoBE%uq>*?_FO&K! zR+6l4LrGS0O35ehu%86~gwz1EzhEPH4?YBchiTBIp1eiU?W8u~TMl)WfYdlcVI&NP zrJ(^U!3ZdYe=%4O@|nu=h4$<~7W*aONLUI|3|gU~_|xd{5}4%h3CH|N$ZfXD`f_lE zH2cT1vD$I)CglDH$kZ*5cEBX|cRD=im`kQv1@n`z8YH9C65tJ38&)Q5G4oTPA*>Hu z!iH+|FZ$CtR^?QqB@-k06+^pZgC9xGirMDS&pu1LT4f7Kkck>uFBwW4&|GLei0$FO z*zW+}g=ugXq^V5iY1X>IQ;??10C}?Zs9TE+aBeLN12^oWcK=GJ`xCy&JjfbThG+}pgn%7}J_L)ss>ks$9$KW|Q7~X>9 zS=Pff0v0DNlT56KY!pmpe=KYX$HA_UWD^(wNj5ow@oY@RU;4%`f1fm`8v_#WH|--mnQ4$A1I z)rpfM7(4{Of}P+|I2=mJJ{1yWfqC#Wd;XKL*Z?h3-7=e;9d9{{1bi%|AvR4l$vkrC zBS0AyMb#QshK#2O)P)maXDEeee>fG6g;JPKhf-)h182fl;8SotltObSl(O;woCnW9 zDKjs_XW^glIjH-Ies1JOiZ+ya7Llf5W{{FJYI7If-mYAy^9@gbkn+hV9^C_$agr zL--Z@Q{hoKA0C4*!{hL6_%+-KPrw84Bs>dG!JpwbP>ZIX4E^x5)N3lRaR!6>Pzuqu zkW4A?2s{Ue!SnE6@OwB9{s3Qs7vMU05$=Fe*vjl9KfyEb61)MW(ESHqfl<7IT!o47 zn$&CRv2h)PHc(3A9`I*46p||jrodZpF8l>9gTKPHP>SaF;cxIuC`Io%_y@cS@4#Q+ zU3dpdQ60g1a)kCAVwwUq#$^muf4Yn&YL45uS-LjH^-yC}5%oZpnflpdR8)U^SiyLo zhxs?2^BS8%8e;pf%JCW7bGEf6GvK!%%jP1mi>Lk=x`tT9NJ~HsP&&#+v(Or}3!OuE zP;>-e6HyP8jh3MG=rFp3!XohpH9;9@1mfMLqL$CbHgpo*L{Y`~1cF+jEW|u^eEIk+ zucn9jVsG-*V>ylc@pGMqporppy6X^T1iyL|ZRqd8rQlG-&*igkewfj!c+vL$CHTFw zn0!@70L1CIKJHD>ZwShf*ZaWX#_`eN2}j(5K`U>ZnH3*->O%mj2#@^%WwQ!0;v}_KK9Dl z4#pU=AaS`^%zI2!2V;#!O@niR*5Sxw#OfuaMKL%V)j?@!0Gff8pe<-Wx=?T{%qYeu ztu1+RMuP7u1Hr3%RZ^T$!Bd?H5*aVwORbJGWKD=-WsGXRYdC1l!h{exX zoD5M1i&~T}M`W!bvi=ESCdg2CeWzEogfkdfDV&rrKUdCZEkT;;Wo@Nv<&5!ePT#-0 z@q74s){~PvThso)KR({5>gGf*#~Z^u;_vg1hF4M56O72FS$*(}pTy!lVkg?qQK%Kl zLX*%!vp% zl5$nVnmmW05Y;M@PVMj3m()lxCl6u($70N#uYKf-|8e0j^F7dL6TYUu{Uz0zqNY_P zqe1v7$1KX8417@~BZ>y(Rh5j1)y_s)m#HOy282Hi4M0=TBD4nWLMIj1^+{e5DWe)U zq0As_YE37IrW%;U-JuHRYca^DYE(3WBmGSE1vb7K*t8p@en~Pa_}dMVd*D1aRV{e zfC`&d9Ln27Nw1bG4P>R*uK?rJr!|dukHo7C3n)#qNuY$5Xtgo#!rqQfm)76vC!Lds zbtuNvzpb|Bim){Mm7#biZ=aQ574~bvYOn#U0p+c;CQOC3;KMK(X29C8C#(Z`kN zoBx8HhCq!&WPGbvBXbqQ4@J8_zmV5x!NI6u4*Xk z3mIu27y}uD9(V&XR6g(l90m8m(O&9d7uXns0dE=_{a^#(c*?t0fb2=58)~2wq#vl& zY);q9Ky&u#HyLOL=@}WIo~_XZ(rTBa$76tY28|w$0p6vp+t3!$N6~6_q?2KQ1z7s%>1YU=ftI07Xg|7uG)l};r~yhxL(mMg1g(#z-^Ly`PNUn=QhOPj zmrgcz+^hLMpP&w2_YP9?>KV}?Ut@4lt*U1PN6;QubOo+xp1?erZmyh%#gAh7TvfZi z;rC!99jL~rP4$iEC=^>Zpin%C+lCX>*an4p$_cfh0ol+gEK)e4$oTRT%HI&1Z?L(F z%|kT{bIlWK8a5%{V)Lt7)zAnI(mtUsiuq~G|5Oo;ikN3MBGWm8dFe@NdLybJcG+=4 zeIXWSu}GMt&Nen;RISocrdr;}2#ydvp;8-DC5@_Yc-dRuAWf+9>V+*=10Xn{o5WgY7_?Jh*)06@+WooA)|`_C+AAaQx%je>a6Of7*)dW zJH|;Ww>f=CC#4vzogS+v)CVb4O|Rg^NS-V?MoS$sBtspk8(ypMG?klknya`ut2#F~ zYWUAOPUSRmL>D!`xe?Dmt=&hMX^Hu;d@B7=Vc+Q!48P-eCeQM{$nZPD^CAzgoGM8z zZfS=n+EqbqmhE{hjAl+9gY?jX<7QJjZB(~f7{S5(Csfmxm|w@g{c2!KE_=V@Uobow z>ZO)OyqeL<&>6O8#JDol?&2Zs3jM9zisNr^{1ldWG2;DGtmVPwfe(?8N2nck(JXxif?{1+S#O$OEXI{f&-;$!^H4t8iH@O541*ev! z?94NEv|vJKqq58|GOmleq*~v_h&H=peU8JeJS;QKnZnq4db=rqS29MLiGBWMs##Z~ zRiQ;L7Um;Zv|Q#Kd@GrQt2|%0@@Y5q8*V~qTlS4tX?jBakyRITo$$#ZH#cVnW*zl@7(=qa7o!^m>CT&8;WFdmob;d&T3 z4|k)XLVnTpZ8j0`?pzAhK|N453ZP|ZCpw1ipeWvo8=!O)U}~zJu2Ffdy%8$nQKLi% zRYKn@s`8^oMfWTF)YyUE_m#J&QOEuEKJ|V#Ph7zSmv)~=aT{W}P0b>YYF)&bW?)W+ zaeQfM+m_1c#3I&G`-oPXvy4Z$&DNS0WqTRX#i-T#{&AdXUB{}GgFLmJdzq{z_o8&B zzUvF!PuKO@VZj+2lGR0QeAIw_Vf$5N@4|PKWM(7cka}3ea!A+uVZk?!Wc2|yJ{rS) zN&D50MGvXg2a5(+G~BPc^(m}2B&)?(gf_&Yt(^XEcYSN2?a~ta!E~~WD1K$1#0^i3 zns7LTwOsoevs@mo$sRVmtDjNU9lBqg?PpZ?go#JV2I~y;=e;*}zv|N8XzfV~ny$yx z(=fPqQ{1%Oui_pvdOz&0K>YD*g_e;fHle-f9J+%_(F#%rrK2GzfR>>xXg|7u?xCpi zl9pQM4WRxNN+HytbI}zVMi*J3L2A_+4xtC?#F z3v}EgQljR2msVl13}|<3cX^)*KGVwv8_~Y|II2CLRdbBCnCJ8jE2&H$Yj^yO`F;+n z;`3Javtd2-Qf^6_%2MawV4|-q=@=)lI>kjrd&1bZ`aDXIvg~=HGB8$Q*);22bNLvT z7VYt>6xpp5>Ma#oj9M@EOLfg=HR!BRZ?rpMfts03;WQ8H@JDQG-uG5zQ)urTYP3}Y z9t*?6FmGA&AHsOSaiMNiCQIoM=Jor7M!{10AvH408(*3ixx(jc;vgyoTnrC|_K;c? z=B*tP#;0`_or(37R9C{ht?kn^2LFso#8jU^mpYy8vCV9LS6U$9+*-$s0?7;XVvv4_; zdtT*>V9gW{R(r6j9pUW|W>I}zXdly?@)x~n4y3xQJqneDdj_NqZaN=vp7^AE&gh0Qt*nUGPHI_FN z9|qf1-LXb(|90!>2lcBK*4)?(kzYJks%b`~uCDy(YU0$-Le$-{6gqQw4IrfjHlhMSJeHfRDre^be?7mFXef6GZTNFV1Bg2 zi;c25m*m}^-;#kg2Y?AjYCTqe^;YlY6~0TE%B8SK#NvK$Rb6om z?52!H!Uf9s*!@-?)nys`NqyCvWt_~Oq{39EmKhaGR^Y&neeH%bZTQehoyQFs`X8&A znJV=qPEZkd)BCDXFVR8;pL@v&F0x~)elJruVf72&;C{A8YIh}GW>>y!_}zp16}m?|&el+`$47Hgkrv`SxmHYgn~#J-usR&WRV z9pFyb1%3p3!Ci0&ln-*lq4+lv?qPqrbff%~jTamT%N(wRdoh0#egQYaFQGKt?1!h| z0r(p{tk&imxD8f@AHgK}8I%qhUqb1i@fEBN30;m>gAKlrYqj7-m<+E$>A7(W z)`L>pmYy5`zy{FEeQ5;wWTiERH0EecAny!XGnfLU`$iks0``Qh;6g}KQ{Y8NQ&V6m zpZ2u&Y%Iq>`faR$47LjJc~2f!*c9MqTKze=d0GbhA400u0q%`Pr9MEM zTm3r@Lh9gwUtv%92b3Fn7xrQQPlqAV?un(LJrJZjI zoD8SJ8E`s$8a@f1hdJ;ymEU!YXhntmaT2K-upI^VEUWMyjiUD)xqv8g6G-GT;4? z_3jdhFXPDMB#a5P+IUw$X;aOIwc+dP**A=M$+R}U!Na@;V<|J&LOE<5EDPU;_235B z6mEpA;3k*}-+@_h3mgTv!d&El^J`;d*VG583c zhP&YRa5wx3eym2mN#QrRpW62(;r$$A3GZGg;r#*@hx=eD_$8E^zaO@O2ccv#hoEFK zN8nia6_lHP6b9fiI2Rs=dGG{03Qs|~r{6&CX^!?S8}f9XhH`Vy!0YfFl$-lKq#KF$ z1C*P30m{w%5jKIBU`u!fX2Pp*GQ0*~gV*6&cmtBtYCl7AQtc-E&_%}d3masG+HELL z+3)Zxct_oT%XlT6@&1`Wr^jp*z@l>KI21bDRdtlFGOv54C21LQ`IN$?upf{xF zQ(zE`h7(~)I19$Wr7#vswptoWf{KHZkXUXzum_ff2Vi-~jnU#^IDt=qjbI{d?&3M8 z|6)L%o{F#&q#t9T8>|d_!6Y~kR)xc1b;xIFttNaN(j_bKFIWfW!1{1DY^WmE87rkY z-MG$(%WQ_R)NNB>MJTz1L})Aa+d{rT1V+Gia3SmfH^GkZIP3%^m+uT|4PsPw>9?tw zOPS2q($ensF4f|AXxyNpZTH?pDq<)FWuftC30jZ#qYLOBiY8a7gVN9lB)QCLv=bde z*N|Bezfej=d3B7*>*7xEz0CdoV}+Wz+}&TzTFR?8C{A*t{i9WaG=7M)yJ|l|R7A zmpJkNN_>A{1Y2QttHoloADc?p>?mq;Uu+IwlP<>`4Cju0$Q_ftP9GYNc%EV7^$)q; z6TgS3KR)Cmr};;Ss`8PM>Pcf`^hZV}G4R1h_(EFoO~CA@kBB+hD6z{}>UoNdw|80b z3+W8=OPqF&i;RQAZmC%cWog%?-rW1JkpNgZr@evA{@ z$obd^PJp~y9Tz8G;iN4#|9ng+WTVC>MV#b*!n?pxoIJ*0EV&`dRh@T%Pd?#Y;ITWZ z{5zp>>gFd#aQ^Pys@fj>JjMa9;8piM_$eDXdy3qd1LEX3PU7zpMSBPt8wK&78e?3Z z-!XdrGh?*#3bk9gKF9H!RR5da53wru&QwA2&;;K|vk4cE4B?Y?%&i567ky4cr+Hmn z`P>*5-k$NWVi#t2YslV98-JJU1vB>=OjJgCf9?z8hFj8ZLC$_-t;-|HGCrHP&$b7R zvL2G6y*ESlB%Qr-(3oJQrecRk;gWbP*8>h=F9{~+5Oimt7>GW)&a$J}Or0A`# zwtizg<8SS@uGVS*9Dpw~ROYwFAs>a3uPMXVPaEYuO@~=)FgI7$vc^%DTp?=lX=5Z= zt<~lmb%sWiSlr)N)y@=lu!&J4&(K=KmkQsg;gX*CjUD&+n4(!zj5>gu5WZ3{Db8G2V4w?f%Z_8g8G0PIY#Iu6fSL!mruq zjHA^yO1nS51hj+;T!VI@ljtV$Qt2*>QdI7FW2J8q(X?Tyl!7hPrk)-j>ungxp^Gv7 za;c_PW_#N>@6yZyPZ5~+gJD*A0o!Eik=8{f51uscap{QT@!#Z>(ZsLR5U?*SrAnzq zXG5#013$SQQ@j3V#(<~`Mhhu3FYvMZMLf&QQ!_6ZN&Za7)AF=+h2Tj$mATN(%sdwi zudAIJ*n{nx_IBMXp^SFDXqj&|Jf&6gMI+Kb+&Mnj636k2!eYx&+0kem=jDoS2t}Mo z_}i)6i`=)lj&Y3BLf1~++DAj&-iwCmUs~i4eBzK)lT~*UOs_ZZN9?~Tax7=TKJi5l zlh$rxP0bh7m>(%adA0V%DTVXuA#qBEV{8uh#;NaqH2kji>K0D?oyC}=CG5iX>U?Ne zs*}~>%}?aDR2}(LYrC^sR(JeF17y%hqD>C{A1$k;E)mR?&Vh1?IC5H63E{L$gph0S z{h`!rm*`yehvQQGi^gS|s#{N@{u0rhrZP*i9d+5-UTkoob)0Q6&#<@ap7gPxg1vpD zBvW=R@5jL8G&R8+T0$jMVdm~Mwc#=yBAZ+%WaGw98aZz4RO`|ug45Lb%QSJOsUt6v zdqrI_}$nC`q+;zo>^0z8tr`!HtvHZV( z#fUA<^J2vZ7TTc6_R35VmaAGl=mNF<(&Sex`WtLH_(R^hXW594=t%@qaj-yxH66Q)1!8jZpUg5_VIBChNEi<`yN?kzCdZE1@Qor#FE9lo{zC+pikcU`E{Q(@Ntz{iUsHG&oaNL&f#W7|83mVeBfr> z_@YJbFJ!b_|8KZy>Qmo@o53ERzo>G$SuvD>JH9SHyJfi0+gxmXzjH`0U(qj%64>B{ z*C9O79A|xph%(Hw?s%U{Hq1uunik_!KnywO3d5}KkyBVsca4tlDstmeo?aMPQ#6+~ z&8Vh5`pXsCJ%znBNoJ@CN=HM`RI~`KM|;p|bQ^^gtn!%>sVRApWbt3?~WYt?2(#f8zP8Pbs> zpH;6$n^owl{%N#X-}R!p8*TPQtOLm(vd{gELy^e9hJTGMv7- z+FZu$THtki?|Bwycq6sjs5er^0IPN%`9CtU-{HU5FQ+bktlOtJumbunnoyxg936J9DV|BiQSte2Hmb<8k zq{rA!KIWq3I)XV^Mf@-oGL2+YnD-68`MRdg_|m>3AWMZL(CT> zH3lXxjiIKJe?2s;Sj8fBg7M=gs+_B?8qP}9!LSF{lfOowDZ|$zSRWwta zFJ1qA)WTTXF)j;#6hFQyJ=BL4&A7;$_?m?qvB&ISyqWf2=MR1}+gZx?;7N%Q=hq9L zX7*71E15Cn7U9c0+=%^5?olw}q^4R)rS@>gGp#Chy4bujpV%;dtb+5EFwpa_=%Z-w@ugdDyd1ecbJj5KM zmDQQbW-O>1XO_sTYw`Ngd9u^Q_ILPMG_C&eQ{IbfARe!KDXsK@x6rY`+wc)pzjwP z-=z*4{Pn~4N?GdRs%FY?yIB11E0(oEsR75yF+q276Qy39 zr0Vh%g+yALB%CtVG)_tKdPY-2HPdv_omI96*xQzQpon?Cy?sj#<*CL)c?MM-Swk&J zU9V=ADW6c5qLB0N=lqSGa0aWrNt&9uDkLUE(qfWItxl3jQvIsaJR4Svs?@}3tcr-0 zIG1!lUsl`61{qvT$#;k( zwY`SfGc$MxgOB+71nl@VD{==P;|@mjcG4{Epgl8sjGHtt+e)w5ct174c5k^+iOFWq z$b5_^VSF2}y7yLdlFg)&VeF4b(=j{Xco(O3Cz~ZybS<-${rHclfGs~hG8Fy>aQ+T` zik{zoRyHM&a&RwhgZ2_pax1E;%#Gf77m#c?gSB(n_8;V#P0D{kQ)OB=FS zk^^tyBt1Ar+y~u=`6bLVFrOAQSLf^TES#)Eq=(fvO?Bz8kGhYap)PhGl{TD2a<^bW z_EwcsP>jf<;rxc+CT@TekjHsBcCt=6;X+Qfgk!{g(2b-8$vSG3}wLZ1gnrdKuvqZUFT+!_$ zJFm_e@ZcVLZNGjGjm;D%RjX*)Ct^fO3f^XU0BRN~877URFd=fSGLvKaa!dklel2p0 zl$l(>YEOy0*FE0O;`Lsf?Z9~S;0IoZinIUnTD%>A+dYW7ulB9uUamaM^0r?CGv2x& zFSn=}MiYkFUIz2En(8H-G?laVz{zZ!^c-P35nm)$6K z%!sKwQ9>l6rS6oST?DyJW0D`6Mwd&S6Wp;zY zA2H;+H&XR(WX6?Sh|k+_Blh7PgP5j$m z!?u4o=%;cuHA_Sc8*k^Fa$U7mL=!XCUlo^oQ3s5ci)&T4DY28@#Ej;BW?&ODb@=~1 zlIqm5Prl2B^`A82yX>4&lPrOh5v)+jZSj(7?jboQ=q~s`)=@|L@S(GOQ`1+P64H7| z#Zw*%tGe%o%xu@xj91H=k#A);CEuFS%%q9Asp(Z)n$fmXGuK`HziLn|wCa{uBa+24 z9x@x&e{P*`ZMJeZGb@y9z~wZ+jo7cvevsD1VO^EljC)pB(ri3<(%yT?2AM{z)j~s0 zm1bsBcji#*E&8GK+SW-JyZ7MNjYfy%V{G5G$JS%LB&%o_AByNNDl04@ z=N0~gf@&>HkC(UfTCL5Ayo|4EZ60-1E12BI{L;;%klNnt>graoxIGg~@-DnM%^c2) z?cFr9Px!u$_Gz9_1JgrF6pZg^ZgSJ^pO|ib&I{?~bn`o2AiwC$0q%mjU3kxQeNoV> ztNAZij+b;{zZJR)Um|&^WX=Wa=VPp(&Q=)g1S8>-Fbd9vR1mE0ZzbST_G97aurxdZ zmC?jI0Lpt6Eo`7`Xw?;|w zSt2l>eY)req_hk3t#LD!o}+KzaLW1*L^B6_$r>V7$!k)`5+#7<7ca;KOh* zOou~Y23!KWL3&MT-67qhv_~M_qnK6Ro-|9wn$n#~8wlyeqYZ*|%CW|iMrdUjZCQ%+ zIRbS+^%!%Spq0$ghOyJ`fdRRFNv&;>{XuM}7THg?57Z`LmQlofJlkE1?EkkvW3Wpv zw2xrSu%7^xi(vNF2(3zC2cYHLqph@8NTQ|9kVKm~k_#z@@n|RyfsAjJ%uB|%%40PF zQUqudVLLb(Qopsvu~L(?#;=ZrGH#U&RGX=0XPS-O^1_~J#-+}}I1J<2P@dm8umY4( zt7OI2sMUIq?)O$d(PyFL_jD%@@aC#LuS$0_YrA=Cf4G|&m!mM2g5&^iaEXfv=1eh2>z&%v$mJlqbyhfK1^M=`hpPeVot27Z7)Ln2kX3FWo>7Bt{*a4I~h%5^tKyZ?GbE$Gg5(3{@64!X`; z*U=D46|FI>2%A93b(+B@uqA8{Q(-!64ZFbhkep6SgK`%hhVx)2mcA9jJS zNe`_IHr8N}3Ezc1pj_~y@MD+-55PX~1bhr$f&<|1a3GWxxIv{SsKXTmcQoA29OL!_}QB*v{2A>r}xw{JA{3+nA z6^DTK6>h`fG3yu-5|qc{YbfdW1dM|xVLUtqsR(M{!m02KlpF9JTnx{LFmC*1Hh#b$ zAN~j>!Y{#{P`ZrmarVE2luK6ENIt>@F0jvZ;(h(K2vCDOjaCV z2$;;#YxO4;dp>L9p80#~uyG#?xg%oH0=j&5mMi`Q1h_^*e~U-!k6{3TvK11$*&tu<*Dut z<*9xI%2WL)tP1I~Z9NTi{k5KE`sxSTVoq0k>!}zB2eHq%|G+Rf6b9fh_#7PW<0dR& zV+01v;7BMpWi-r(+3;;R7QO?SAkE4KCcs_nPlR8<$?!P*7yJoMh4K_kgE4SAtPh`n zP2mhE`EP`#D)cfR&#~Y9U4<MJd z8Lonl!q?zX_&Ss(y4CP$_$HK;_?AS1REyVOumP@x^2ncspTKjlJ%Roa_JEgRZ+HdD zonl5AD=WJRXRyzApFkeui%?)SyaU(4yKp1?6G~^+d+usTeJjbI%}_i3#z%!Boyf{oOz-sTQB%@G^>m~olyFb?A^ z9iTkAX|Mw92<4G~7&e8Spj7bFp+saCI2?9`lBZ@sY7$zeD&3b#pWQ~`(%xidZf}X4 zN3fN%^n`MjEGTE`1(RSODCKBhC^>mQmFUWE~G z1(XWMO6wq6kYPFYUxT&aYFHnxg%YUsum{`#2SN$VV7Q5WN$Qj0DQWop?H zusw`}nJ@v4ff94$AOoucPeKMgSu@Epv?;KfeMW8twm_yp3hai=U=%nCnXo8u9WvQa zPJjj0G$t1cm|p5vke3_#7Qm+LmvC4TwqT!^8?7Zwgj>176es~{58Gni1-6G{VH#ux z7p)^?gr@c|d==9BF7P?*8b;|$olwifpl1k09i*R09!_u3-z@%`hfUp)k3R}Wsuq!+c zdqWA(F!&Ao!=3%n@C^Ie&i+{V9sAS5$@+d^;|UBd6qFonKJN~<+v4cJV6R+o2Ww8R z{RO4K{~K0>ytM^r4$?euFbq+bhnf}Lw6jGHBVRQzCjPYuXu?Ps4Wppsr!10TyT=TrR^w~ z0!brQEp{Lr#{NV&2~LJm%1(h#!>N!0Oq&j$gCwEABC;~;L@!{#_k+NjFbA%Kxo|6d z8g7R(;D>OIYB;PYaUEwQmAbb^$ zg)8AqxC-V%=HLy?f)WpN;2Z2qguV$Sm}}ry68^Pp9LHcCly}SZ@HE^AFTzdmDtsN@ zg72!4qs-wRY5H4fn57j@pI6-+Wma-;9;0GLoA0=ms4qsFeR52BHRh*#Y?hbc^GhRD zCDfwx8A?Y3&{VV#twtx&O_ac!YZH`#Mxa?}IogH}qnjwKHXYee1C)-2AX$)LS#4L0 zwug<==pKsZrK<_bQ1i3RGCB9yj3&7^KeslrJasj0pxaw<7*vLTHXco#x+t4v|4MjDi-!y84 zvQTzI>7Cc#mG`xaWoyQo(Y_%xi7s-hxRrd8Y&X^{;aXJCYpglJ<@79{>v_;(dVyG9 zq|T2suNME_xe4+N&%)pJmcR7+dz_A0kqo+LHRH$WN3@{8tGagc^ii)pZkAWG?z@_( zgj%{+-Fuw=M(-3bo?i`Y6%nf{O{9H$UaJUG?fjChjES^w-?>j17xoD=RrW-aC6Bhr z=zppc>U=8}^<20%B22Yv&r}NeVw>yOmRFm_cJD;98x6^2CYjYjiV>U-RL4nXaPFo^ zwRjR;b)qo;h~>-8;JlHM>aLjc`PR2vB~CUQI{myNRlmuY7sq_Bn$2e7UgvDmkiCp_ zc@9Y~aXx7NKNd-jR3)e2M+yA+Q#GGr1}7+sWXLid@S-sf-LBS6F@qB*MyktVQ4))W z+g0&@6|uckkY& z#&)2C_oC^vo$pl}rt>uaiL>}=jJBxrgc%hcYMsy;!1x1QF8e-VGFu8ktu4=c{u6W= zNS1C(%t5)|lrV zrJx=t8_hz?8%wgcS09{XCWO)eb~@h| z9ZExyuQ$$$%td!x)tyV9N}7&*PyM&eQn8^i$+zymZSG`+!wdY=7ftA2eCvp4BfiIs0PJv?C;pEBpI4C5WduAdJhybqIZMj1 z6^4&yW^TDPi5kUqDgO@gpYGI;+XDIbkpFR~ejViIA0T%u6~Aq<4zf9x$|rj0FoPTo zJ4HtpPEYL=!2~|p$c>HY6Tq}qzu4~i=Mv_1I$5V;RWMlAc7my4)-MN&5I*DMk> z5?&CtR{{G(oP?k75oYU1Bf96CSFMjJsUm4BZV1J0wYn6JF=5&zNmFR#%5V>|8ZCeCOHcHDq!n z$2tM$E%Ez-)U_c<0e_o7hcK{Df-Zxufvl4-_(79Eb3n^M@U`@MAZq8gvPCZL)mG^e=qV6aHkI z)y*jvjoLPeJ|`w-ZNniYaC&!2yCZ!#_A~J5Lvij^JQ;!C`1YYF+=e4cn?;V4SJQ9# zsvvQhe?uoPS6AtfVsHEw&Tr!O=ebh2hv9Ep?~NN{ou#wiDym4MIPxorqL6;$ z(}=yqyaRYE_-29M$b#ez@{@^clU2vOJUt&>Z|l>J&ceH!;Gh(QbQ7GDg4k|?t5T5G zP2lUcZ~cULcdew?^ya>uvmUiayyPHZ5A2Z zaYJ~sC?=>SXeBV^>tVhGVFd9683e@ywFIpMrX3WIAdDcMAcG+34Lm?I)dO#l+AKPD zSiME_yJi>q9Ro-Iz#DM%c^G;*BIOO7z0Ij8dc#_wD7ug9FMhmPYe3G5CioxMyt(f{p~2&C_$9qPqFwJunV)qox=w4 zEP3VDdn|j1#k&xBRyPIgJ;?lap{A^Nd>1N5zg@-~WFk(wPJ_T}r>uprAbBFR5QcU; zDn0Z$@pz$iv}NdXTprOkB4&cbmwmU7m&toC7jC<8G$dR2?Y8#! z%vP`)%70HMEPpcoQ97(4yChr0?Y0iH{rddv;$s&F;{4rKFOTjq;~u4FuVg1>bAQAquF$zH4ftpV7)7x8x>-Rr_s(ygRXB^b$8+u^!HDNoTkAbKID9>)B zdqbogunu#$k%{lM|^%)vGZds~-4r;vBA zSH!aSth=4)@Kl~q4_x!9En;Aqb%br; z7Rt$f#qzrFamABjuS*-yN2Hm|BW?}cnldyJ?n9eTaU79;FCNdonCM`C?juhGypQzv zL1%cDSoFTt{>tY(QGx&y?p>Rgh=%vOje3s{Ajdk+yi|mK&~5DHKrY4}v^qLp%%T#C zq%eHPmDA55#HfOU=Ss0!~dEk)MX0eO05rt>01H@8SCzH5RZndiR zAla0TqM-t3%3Md89L2Q?94A|Q&ghKomaa261~=;n4Bo24@C4gL%3;ij(pT->P0P1! z(uM@{%hvKl=V7!FHnq*Cg-=DdUQVn)X>s4*eD_vaT93T@TutIo1svzyTW|NOTo2}U zTMyzlx>i1&Ax?jSf_NXX_BAb*5k&JRD4koo*;UCE@kh{04j$4sKNquts) z83Cpv2zXEw9EE9nFz0qlp=5@35rFfzO1o(O!F=1J27QQFm57CxU47VXu$4$T?h2S6 z5)Iwu9>*a65ORF}>=<%6{`&3aley4k{H=*l2X!-UDwtiiiQkUlaXgo8`2KqjyfibY z${KKMZYNbitqN-1xnf6Ew^7z21CAqLVy@_Myjwuzag+n6G0e}14acn`J)XfzpRUpz zY}-a)i+Uusb5WiTMAdQY808DmejHD%<%zJ55U(2X{t$^DbsHd+keh2D#{;k5ebg-@ zziLGI7y-*gWOcU)1&~`mf&2|D^kmK=XEyrk+iLx3v5x9n&uC$#Q-dTw9 z#{$9q#lafu=vyt&Ds^h1($>7fryh-?e z(k)uzCy<|nyh7xDf@xEM)uk+?Tpj}CtG+(LiOM|D21Q$MEW@br$ZqEe&l9>)jyr*5 za4!h2I?g;{onl+digMmc4=$vE$75Y5uy_}I@f42}h(f+@wO8JYc>U?vT0IQ!UB%<) zQZSDMh)ACz7i&q-un4{_yB5#DzTB-iddrIR&v8~)D7V)-8<4pygq*QLlzndPZ<0$M zA<`egTL-oT;PQDK?k7O>HYaAUIg0$Lb(q@GO>7cLr!brK?Yp#3VV*2lV#g>LCEzp>wReN4WFS!PoYKs z6h)uGAO6XTGAkLO>-KY6VzGut$emAi8zsRfG3Y)=>~Jhq^`=Rj<2sBC>-Ljanc3ws zIizOz|M5|tbr|udkrs9|X4YBf-I}un2(Z>8U?i4adL~MQ9NBg7@OF_*UwZiMLOF%2 zrR~CpAoP@VusV+8$tK5+>S?s?)xCK5cFQS!1yKbZ(;1|{RJ5K#6D(zQnWh|6`NHRO zq?s>53E~L!F_5qPf5(9A__rN>li^|hhFC%126zAUJ>S_Io z#~_uX}DqWp?6*ATy)(V zXW`}TBEBX%c@_@Mc{l!T^m4jO{Cd_p=2kMk=TP7;kxZzFIETgx<eRgRGPA*gw zePR7}h>|1H|G=^3FDu&qu%wG;E-3^hd|s8G^W*xFhvbj##Q`7QO_z$nRwVijj%kTU#%zx zA7P8b+dQfr)ZxlT(dMAut!x!Oj_L!-9=zuRa7@%Vsw0= zA#4`)XJfBdD*m#lMn(BvC@$(FMy#EexTq5?v_!@Y7}0PIA3ZqeqOQd;bRVml>M%SD z-$I>_y8_3o>T+d?@KM!~cqvVUs=lXO6kV!%53fTNLofP_!eULG;NX#s%kdPv9bvzw zx*D<8Jg%t|jgzt~e%I7D70YRTIj9((5FM+~A_ra71vQ zk0{}y$xB^lgyEj+tu8W-+$r{Xt9i=OiclZ*Pb1F%2M>YP$%_0T>KaEQ>`4zl^$Vk0 ziTK7(oq_ZGJ|obFj{Af*5{1V+!pu_)p495GBh@*nuT94|#Gm~Oe`8_m@u0q8ENB)e z7PKC;1+*J<5_B14#p%x>pnE}!K~I6UfDVC9gRX!aaSmxLXcp)x&=$}^&`Ho$kn=Pg zXc{#QiGY@aHiEW;4uZZ0T?6&SA*QjQd7zb`O`t;1G0=I?RgiNCbU?E}t3WS-_JXQG zmq9l`-l5o`1}y}w1#Jf%3{AyuGJaeIxy``69?(3{O3+r&UeI~a6_6W_6^sJS2dx5a z1MLT$1YHKnHyrl`O$E&dtp{xd9R!^O{RlFIq18ZBL5o38rQ+W<(0 zg@6`GtDwF(YdsdU5+u)E7lMv}&V#Oi`reOl(5(B#FaGK{GtMoU zpGy=&N2`O3z}chKdHk-p?k|F#kJ0vABE4dCIlXaqxdRv3!#rvi8k3@}C-ApGO4dxV4G*%s>q=<&G zYNUKzC}f?`mm$WzY210JT`DsDjLU2>ncR+1ocY?q)fK% ze4y&;@R{T`;@cn-)d7<)$x{>f+x-~faKKhnb}y(J^aJQ7$Q7qshJ)?}Ee36zW53mS zf8He3+Z+flIkQ>}oum#m0_RRr_rV$!)nbdzHAr>FZ*uAK0paCz2P7oS=qN@_Q74Ek zL8{ewtXiy|qD~W+B;!{jj!sbr<*vm`J6tEjyWmA_U5dL{JQ-~{5qaf{@0lG<(&feL+3FkI@p`T%xe$z(R~NWyn1UPeH>avS#Kb9TZzW#DndKwy zklOD0n9`N23%MMP7b#QJK2WI%!cO*nsglYnaxp5`F7ZP78zuZ^imKV#yM@WE(Rk4{ z1x_zscuYm1T|c43WlXsOL?NfbBnOJ3sp#svQM+)rSm+d&K+v~alt8;k8wbN8r+Yk&zds4ElD@4vTb);=wH?dp?uMqXq z(1I&OD-!g7o9c2-hh#H*QkZT28T!_7)7zSI8VHouO8}DVh zBF|$?_*-!m2SYG$mk8TmxT}9!rqj|bTiH5GMCe~iFn`oEQ22);^U273=x5@{adjwy#qzi40Li9Y~4{2 zH$(MOk9JGXAmaWu(V*ZDH^_Ntw+j<6a%Wao{4_(IY*g|qe8Z%tFBe_+Vfk>QB6pVR zv0@P85^y-IrLaz79UA2Hd-Bb z>m#N4(TIejspf(ecYbBnv~TEzOowr z2%>}{wtN{XMs4GmG%PTi_&cF zfZ!Dfb^?ol1;7g6E)f}vE0O|qhyKOb-H_Wq!nz*eyYZ|M4bK2)W3Qlh5G>u(UZ5P6 z`+$8IhcU{tma=>kfd>#C3_K|O*b;3DGeZ#Hy?+~!f|19bs}Zk>9MBX(xg z_3GWmK{Lh7^++ahrg&{VO1WOttVb%P_^uN!fj$)e8`SZ}C&DY1ZBY9uNG|1Bl;aAL z3y%!A1CNVlGwD9j9^ZSxJT{2*hmph5RMmdd6{V0m zzd>h#U8m|{*S_L>DmIrEJR<&;sxC0DctlJ~Q|IwL#UDj(8gl;+;xve=G;CVog^6iu z*{y7g(h+Q*sCPM{KPvXUqQ0gmnH9lV>R@LJ zwX1@6AnR`)-M2gvGbLVXg|Nf+2~+E@{= zUBwGtGeqzX^={SvU3s~}-zf5zt0QM@eGt|HbQ<&n$oV0~;0+1^Ed*@@Z37(xod;b5 zS?6OGf#!gg&zBRur;@i5%QqLSxqfOCLw90`{nS`7d#8F*&LI8jarm2<&v^FN9B@I* zcoWkI`1qUZd~R|VQTrwaDIP&GPrD#~c@y&pIA~Wlg_K=T(4esIg4nYQDFDyx!bH4u zK`bj&7bq^GvJfKy4-}g{FY@v*J=(QzUJ(X@=S9)8NIhztc2S%uQb!vjE{ea3u-tYL ziEkm2D?UtWGoTxg-`8tM(6wxrmZtB-9fLm0uEH6r;U> zzZa|D7(c!wF6>dCHhz0a%zXz5{c=gX@D39C0|`s)*Cf7sN1bV$*Ca;l?UrE5UL@EH z39e`ovrFU)NA_Zs2Ih>^qUq!!d`h6@2CenF)=(qx4ux8&;0}e%ChaaD)i2L(4=Gg#Sf*Vdja8(vxK!OJJN>ItHP1pltQbDjzgjQ098e2o zZ;gHrop9q~#q;l};}kS%#rp@<*@|q3zsl4Zvbw;2V)6Uxa7$(rC7(sf7ru|=QJaAu zU(XdsrRp zkTF4jyG@MPdsv;!o*GeaHMiV|%fLAb^^u-K)YA6J!<_S|1qx$Ls1(VhJVB&>>v>y56x^ zTwUO>QOrN89*}lGURn12P<3<9L=wI2Njw#wxOVBBHE|*|+h~6m@g|Y`Vsj@%r5sM8ksNqgB zo)S2Qy#@RZGxnEo4A-|~IdS_Y3&gkX9G*U=T6^BtEqAQm41RRyFt18a%2EY`yh%h? zq0FzK%nw_|fyK`K#7^XIdl(Op%6=Tg*UlqEWfeAQUSn}@h-L5yQ8Un~58f~xc^2DT zH$Fni)AWC5QNa;%8)>j5M5UzqiO_27Dy^zfolP>nS=g$vLACcdvV*#wos`RV8X@B1 zu!p=!s2{=3Z9(be>w094qG~Z*=|dl>Hk(}}>yHq_NYPQJ_R`<$h8_i*gUB`)j%Y9P zND+4cTP9cIHAnF^%4&LDD&T`DsDLb+uvX*W_8L@WCyFLURik_!cik?ZY{`+`5BqEq zS=DGmyv@ZNbeA|>t&Xq-vA*ngdA*3&)ya*uQNmV(ohiIt?zq~=^BjirQ@G%hpG&Cb z2(m7+@Oal8G{wzNP=Zx6v8lOL7H#_puwU1s0c9aZiLx5(wH?9wTeghernvM;bq@A)7{P0i zO``c@R5=?}cIhe1pJ21Vr6-|Gf&eQ9UU`5f=kL_0cD)4Mp*< z#rTj_#zl$2UvCxnYP44fHX~sv4C6UcZxLCGp)>V_+Sj(yF5{N+7wNB>a10wwW1E1- zo9(s2wmxoD3RyAPw)jxl zr*gWoSoV{=%pWZ})?xej$fs!Sz;01oMAu1mq!{b&FbWgE?=vjwa!}?oBJwkJnDLC8 zI8X;?FhGund9qMrL^PTakW!0Iy8M}HwOp|$Cn8Uw-FEsLt)5@sWkANb`b5?ac>G(o zlPsaE;}{We5>?oHN{)Aw$0Rpk$IvP4G}P0!q+0}8=P}X(_3_+@%ly7bGX$bltRkx? z?erMYa1sM8sas6h7-NJ|hZ~x(J9VhoYpB>YkzNPWa;=*p^zeo^IZ3pgNdBdscv2do zfAkhlf36M{&M2p`sJGZBnW>WbS8wsn=jud}b_ye8UZ2~eK+cn~caDPgQy7x3Bje{- zPlPUUbrWMh$Aas*K4NG+5?%Q@68)}^SR|R9lDXMOWJ~6pWbW-NKCV|6Xs2S(d{G}>#1$L%7>_6oSO2o0xE_iZS`YSDRG9cf%G--oOY5wq)6&CHQ&M5T=wC+93~HP@@ImOxz3>my&p$w;sfR@*qmpxZ^L8kRkS z-o`t25w`U#66|{h3ft_F&}Fj6^#r{<-LOX@cems<==lD3R%G0r6)8W18I_BQEbTA8 zLG6vex#uuE=NwmiIFXMSPd;Ki`H1!BkUQ!GGjkS$cf3%}VASqJnbb{qvzmSO;F|-Z$f9Vw-|a+ zwVxwKc`hPg7Xn6ji@b~KP=^uT{P^h3!)82*bWye6W7#BZm!SI$E*HYQ#WzmI34Aj} zu0`!v3$swXfqx5ax#Mhc?vmNwc{eq|)>W9Wq&x)R%@_-AC7R3-pr!!9fSDnB^Kpt?xaT7P;`KS7* z@~cSy6Q@W1E1|zQ|0gbqsMl^Cr?K8dRO%tc;G!RZ5sPnPBLF?}>`fd5LBqokD2D!= z74#j#&>0_X#z&q8bg9ErSC5pv4xLB+x?8TF@5IZqNzP*C4|p94lC)JYkrMAM-)$L0dtGK&L@J zf(+Qp9RivPS_oPT+73DhIuE)6a$StgP0$?Ba?mDFA?O6?YtRjlYYcQ^upKKeF-^(d(-pP&gaeJ#2HVcxmQKE$JFKJYxI-2 zEPAwuNA3^W#-6c5A;F*Y)*;Aiag4mG%9iI9oUlJ_9<)mlXWJd)#3mzh#eoZR2)>Lt z*Er~|G{oqO3@^iLgh;Jyhc#>{W{GeIZSXK0zc736k)4RYZr5AbW|f~I)~~k^E^n4q z=6P8j$CXxvqvmJE$pN$f9`TEd<{|!e)I5y-dn)>wv;p=j_1PlWtPOU;tweLmJIHv5 z<|%&2a~{g4A7AUIz%nYHl_`OupFc8`9dpof$F>6zIg#tB;3i#C5KwY^67P)cr?VKcJhA7zeR(SHU{U_6=&^rWwyw5)&`rgL2Z6=uQ=|k+0U!a z7VZ`VpoV7G5;4u9JqX<#DZ<9Bc}!A(Cv-k${ze^}rVO#DxSiJYntzAe& zhK?C~SLUVr#L*tzBfFsZxOT@zV2}$c*|1L$Q(Tq+L_SKEY-!<6*Z-Zr8M=6YyvDGe1J9$J3|HB$R)D=foH zDdk)|eD`)H$Xl_UiL=IMwWeMao@ z(d;j1m?BzbKnMaRoE6$2Z3Na}>JTkNY#5}uh=oJ6e&WqRNQXA(rig|?C|oGipA(&f zH2cdarijqNDBKLl-^YzNy>Lk@P`GaU^ixC`bjy=aR6!htyCQUp!q+9;QLy-TyNMnttAA)(lMsy9)><>0f5s|*IH(>}aK8H=F zH>~brE55Cy6pI31Edza~-{PM%6rDR0N}q_xp;{R4X31Fg`6PFmw31=O|=lk*W**QNgM0rlwMre=Vq5H%U+T9jv2E`DA2e5E)d}4$)3-wY* zYWJYvkt4MSlus&(Mq;|AzBL2|!{3rwj`VnMUj>!WWyIgTF%*Uy(W6IOI*TEZh%zZO( zBTV-?V>LG?yiv|P5t3bVjXs`fDBC1NzXHPyq2AF0(b2NQr_uL+riq-@_-@`t7p;f* z>0inud8n@11BZy$2WW1?kbrs67K+&2E3HKe+u182yt`MrI8O7krX$`Mjwk#R?zGcs zB4#{B;S11tev5c{yf)F{d8F|_olcriCqV5*s1|isq_lPQ5;zt`S$>)5U(vua;1vW6-zp9SY2zG*Z~fom z2TX<*=h8$8Lapc!^C7IHSo*Dhmnw~a%TJ&b(r^81nbq`Le%eA@rr)hov|+Y$oMS&8>@$StR5-yI zq9Itrmn){~x%dQY_}(V{4wb*R((gFv=o>mSMA=j%7L-H9mx;-}2|cksdBJ)jGC} zTpUy(Klde8hG=f0dMtjWMdAS&eAa9_h7&oPG@SQC@~DnOMyxiN#%WLy{ z^>30W4x;P_yjj5&7xTic)x}MO^l@<3oKcq_LGpDxi*v=aRy;nqKSb+mi|172b*U`m zz4ALVJ=2hn-TuqV!M+({bf`AhI5DH*`A}`N$v9|>I51P2VIkY17#n~E(f{Y z4;NFPT`}!`ZKz_z9MU7C&4Cn?WZxX^EhFXxgfkpwV@~J^gf!q_-N6X$CF7y36%*%b zla0o**D9Wzr{Od9XtvD{YI&(&$ejuN&BE@N{KEh>tb$2@3A7Vb4Y~xn0&vn-bPRMJdQJc>20aDZ4m!9(8Ep6(KdylWtb_t+ z73d|eg59mx&^T znDIVmbIEu39HO&*&jO`bhyc9c+1&JVbaZFN!bHLM$aL8%uW_ zcP`QKThqhc4CzI>egI;{KD40iy7<(N%c6^stJpJ286;7i%A5 znWmr5Ss$ahO~V_R&99pId!pSgP30os8mJUSw1>+sD}?MSNWT8B$}CRBX!D)vS^mF} z^%8B6+2Dj5j!t6k5^a(*y)gnI*)l{y$VMk|c!@U6A`2@!Wt>owt^LhL1Z{B=1DAG> zv}7qFIUwY9C-L$fA)m?+M}+Kf62IILGCCF^xD#P6auN$-yQh{XL(B;2?<|hTY6FeH zZ(^~o80<{dw{N3`h{`xE_;#&k$7zEioDeaX6%F&^lGnx45T1vNK|HOATZ0CJJzTa^ z8e}IycwK`b?EjL%U&z4hj0~1Ki=oT3K}O*0W!h`TwJ6~-ZO-kYjC)iYrA z&A2{V`=~bbb~C?;aB~lYds@V&_-zFK^r)6?yw@V0U9ROBPgq3Hc8Z=f|MUMn+gwF~bFv0NB&BG9sXcY(xTtkLk z&M(bd>@bc$ii(oFm4H<4LMkOzaVkNZVFYTA!$N;x#c?%lo^zM}onB}@|2Q;Vq1jKB znnT6u$F*^MFwH(Be?xY$lJsez;3iGzL%1d%`-C>f_^P?$`6o0@F=B*guhO13Vmxb! z+9HQ7PW72yPHCiG1wc^dS+JB9*S9YvJYH0h}Pr-kog@1WU z+iXO8KAQ|4Eiv$EEzi;q=W?XE!dZWLRO8&!+Q!uHmZFyU+YWjO=43nQAm{|>YtS{2 z^$Bd>fu@4ygI0kyfeJy#K<7bMK#r?$6$2Uzx)-zvn-v>$W=bQyF5CG?*`So0xa zI|?QTlP7Gf#5f#Gm8h&H^u&E2$=e(#yb3;8@`=|-t~TkIYOrDRL6Sia7Bl(nn z5;kx_uJ0pW#cq=fuSI1fw)+vfPoVHtm`^E>@Fw&bPncdu81*+{M?Z=8;O^6I5@b~p z=3K#Xgvno46(&1Bp)-0UI>0)F943>;grr+RxGNCbcYVgURTPg9%GI zDLj4}@o{CuXJ98#>ecAwgD1d+oa8MdIQ}2Rhei7{UivGcBn`%EH?_Mq?M6YPFyVE*fVh5ce}V*_ z98vjz_&6>|F(*{O1&QfR;XW;dITr~nc%O~Tu>Bjt;4sQKr!VpD-xIbBAbI{}@W|f~ zkE;wlBF41DW-JyZ<`fYY93redNLb9_QP{kfdbvN4ylga~dj!cnxgr||kUSWZTk5A{ zi$P-5D73%)QTHzjsKMTZI#OF?@ zaCcwg!?~czKcfF-hEZ4rORRa26gOb&S@Mlu#3%6}3}*C&Z`H$jmS^S@-!YovB`+bY z#c_10SL{RRK87%|Cu1p_4-1|nkcz&S2?J*mHY=1+7Oq-kc-BP1(myG@$bqn2q;J&v zq$Z4|;P_ZVkN(VmL~20~6Iuon2K!KW`8&i1;Fh#r-VowTFA=u46E@-q%!&>6iqdKM<0>_d-xk4Cygm8m9Vd7B64#H$dN~mN7@!=dV=t^V~Kgx{7W?qu7O08aAJ)f8?!Mp(<678zX7 zpf5;X#Rc*Cn|TgT;&7GoDeK8Iy6J0DOrAifULb7WPngK=rG{s;KYY6^P!{)n0AmTe zoo04B(UU2DC+`1AeLr?TRqTG+JkkF$pppHn=?3vO_B(atcMNTdI7431w3Y+|<-&u$gz0SZ>$yu5<|EhzG_niG`HA$4 z*#&goMSSNX!pv!eC9?fx4Q;$+Fj*;}E}qcuXTpNDgvwIF>ul0JxPVQSB(FP3n9fb^ z--lWxg=e2Hr(4V}BDe$XFAGq@32tB?VR@3|4Ml{d!wD7k4bhKtyaR-->j(pRb|iAf zWt?#iyN0Bjq*wJOVQA_*^dt8!Drva`VJP=`CzsU1cA$y%)4fSA;26aZV_%fdz9VxY z$$g~HKm{`riO*u!ah>&2GuSQ!vJWv`BgKp+MxKVnyo@blAJTwSWx`eMgueeIw2UVV zY9vhBN7xid1xaV0mF1($Qw{m0q_BZUwIz>uclQ4|)x?K$P5oaZK6(UUmyNLCYr^sg zgr55egYTw{ud^$#`I0;)UjN#4Z?m$5}lVGL(< zXY}NBa?#py(57=f5%E~gNI@JoO#v&GvxRH+rwG^oO_;(yqKyq!0Q-tSZwhai$1TU+ z6Hkli>9^s$g3PCk7fKn7aj9$~o0gM8IJZPg4Dn4o{Ze=g)U#8HXYAr@qz$~z2*M3o znUTua!lS>Ov6iP{G-K-ZQ52zu`#5(v@t(Y>tq4`9X$yH z8U1aqmkB#~zIXEI?mSEKl8*^H zs|o!XQ>uth{*dvoL>P-U9!!Be?Q+?sm$MX%Od3pB!p?t#zA(d96=P&Gg$I5>nEM`K z*BnBe*G0R+kotd50w10$KAb>fKPpJZWeU&Y4lgMqzHBaG?o7g9wvT=x#8+~Q#j^nq zj3&9?D8e$Cu87Lg2B((upbXwjLH=w<8bXOr=dlsQV<7G)k~gv$$Z{pVl{?RK2=NUr zgqgg6iQ>uOzn$d11v;i0GB{)3qZE+8hfoHdP-dzDXYiXpj^tiJ_iL*jY#l^&==k%`n2?kHn5_ZFFi_0EPSPC5-f@ z@VH~dd#obf_jlqeClYonBzbKj@#*&wwzDA(x<-6i6QL(t?#3sGZ%x)Q)sUl*pqSSO zkuV7m86tQgV`?P6Y9C=Vj|TVERDg5`Lfa+|e~9>qHN<-!A#BVgEa0AL{DPn z2l0eV;4zfR?mcloMYOO959S3-P$*@T+)3fJlL<3<9pgWZ!gF|-C$fbv;`K{X1oV-= zA!QOp+`tQ%0QMyzrBlP8o==&}4CN_Q1Y~soWP(pQb0-_@6YYDS>aQpG{pq%CH9u(fj zhQc-w^_LOD*|d}oAO*`igb_T$qxovw#C=-C>ybd-=J&sc3X%{^@!Gk`bA3qegInn` zA9XZ^SN@yPiPs+>ua09#da9$jjJV*%@y}=2LCf?SAFsF*-3G6f)eTdJ0 znlOXMk{>&RtW+L!@vKl1ONuFMxJqVF!ls`{-o$;J@gL%Y_}Vj*jeHdwdEbvHJbD3P zC=c=&_VzK?NuKJ#33c(H>g4Iwa)}g*+30pGB;IltVFbs^no0%C_cLBO!-Anc)6oN+>@)hr+U6Xg2s5ts56%MvU`co=f$oEH)&Zo$>VyF zUK1~xYuRKMyvuUlIIWB#{diu9Wd4`JuTR!7)eylpJDEpw(Lqwk=caCD@0ojpj8FUH2G9|c6uqLLOXgf%=UI|PL%_90Zi zBg6+8^{%;YA`E|@u#=nIRws_;VVg06uUA^wlt=tVdUdl1BZ>$;S>Abt3nF zl02Pzq^Ljft=upP4a67u6UM~p^++`|tmXioMWsBeI(W<#qY>m7YYCx>mvVvuoM0rI zg=RJfiEObI#$;Z;Cq7K^bL^H|ccz$TQS5%Bc>SEGqcUKvUHYB`~W;$w~a3kl+q32XU6A)IUM%g(F8 zo5CY`$=Jv>EWMlLt?Ue&Ylsi!mMiH?yg#QOVWk3v>0=085yOjO6PH-|fg&`&LKw)t zC}leFo!mtUeC49ro!TG@PkMwI5zZyEwb{)Vvos6=r=6i^aLylo5d zRh&`T6ygJR5yr522pdZJjokF^tY5?y*Wa1+uWN*f6G-3J#lGX)OaZ0b744i*!d)a+ z*_pMo+pgn;EId2vc(A7PHbX!R#S2vlYpjIrynJXw#&UMWe-Do*eKAkX^( z2P$d#VE(|kjBMrj>@BZf=J_ATebdNG zHid6Tru>^C6p`CBbbLU3GkeF95X#Ww0LdHp`Xhe_@d|s(l=H;rzfI`FdY)}O|AU<= zp%Qi$VdbRQG?1{IEoAK`;_G<2hVpgB2KE(x?CqL)w0E&3Y~U^{I!y7q@(H6B%l=2x z`hHAkW2a%_QESR1xnCh+0{emhZjrzNRPbWXs3wZ^)Io%GQwi%gvz(n&CXbPv)KQc` z5u3~a9yIZx6rtQq=-W;h$Iiq372@kI5QcMCBy+*yxsRLK9u%?7Z|y<)xoq-NJJ{w| zwNXG2+x(&riC6Anx&78r9`Pkt2^*FZUS}T=!9Jjsol>YPh1(dLINcx`1F42eE?EK( zia4JCKJ2IShfxBi-w2!7C#0~2EdQD0LF^M6|3iE!`vhA8@n!4-d>&*WKBwvxK8;dcs;VIL6AKA`+*lKXRoGX5aG^h?4B=@aDq zZ@xx?Om+&n>=UvcCwVLTglHS_oouSR#uH!0wm)}16(}l^(1TkxoR?^xZ22m=AX#BN z|Etm|Aq(#jwX;GfU)VIxqww~ggh4!b{NE)$nQQ2~fHIDFk>s5`tK9!fd<>iN#z#o6 z>mbj6_h(5VgKcymmo#B6$-~)1*YY3?SWWVP^@JYogyn3w0@x(y^I9^lCuJDtOPH8J z`WY|sXs_eGypAtJ;%HS-3xx+-2=M_m-Atr>L)gwMGxr?go4Kc=*l9NIC%MIgF#UVN zAXr=lJs$Za%RLE;xn6DKbRM@sID<&epo%T74@V4Oi`!@)qa!FGcQ)}JJpIewC%J6^ zVOIn-K%hVIp={yHS?+U4$}uQS14$vC$5<}Up0+-efG7Kyj1vjhfjHQC4vkU2}qVVJ>o)pFGLn6PXfc$Y3!6%gXHg*l}>=H6Gl9z>& zUj0qtEx!^*aY2%~AdPh-&x#_f)F@uuUub{X0)A{c6|P}H50aaB7Wn@{d`26gdjcg; zcNg)2d>xZ~mG}a76$xvJZ!wa7`ds31L|o4|K2@b3{+WbzO@u}LC_)t*wCJfMZ{9}O zGL*2PgD`+yMd)M1x3Q~eOd`JM0hSLZEdCFnU-L@(QMQgSfHU4uO}v^#xIuKjBab!H zv^Ds>L*i(=r(j)4_P@M6DU4aF-eCk*x?Ocy@yVsfRk;jZKg zTYMhV$y?ei$W z|2Sb#6k#&k=X93m^N^@#JKYjOdc{`=1BVcn@#?2xBo(ZH(VxwyZ7IoP^nzh!oe1M!U|;OP z2^X+oPhi7tV#DsiOJXI6Q97AKlwF|z@Dga6!GaiCRziD&q^os{5N4Z>sP)`d^vYf#An2pbfNua z)3i4bcFrQKUrJba57jI%jCg;}py4m#3m83LCBDjwFoVri=HINB$Kj6>)`wBLO{p_U z5XK4n&n6xf(hF9_SIo6@iEjuZ#A})K@FHKr4DOoxEaus~)bg~v4sBUccXm0g_Y5S zWjI$h{q4D&Alt312S~Au6b&BBC_I-3RU_9Zn)OmxuQiVJ>R2y^2V*>snOZkWw_&2x zL;u@2foLC!XyX;5g}b74EXm8+;@1QdAH&nL^S{K0@^Y!^5#l?hQ%0r~;yw8)DUc0P zn@kV+8=`NLLeezC;3b6aGbn-U-w_`$oA|^t#5eH8fXzbkq;w?IAR1xESp9VH}s9F*grR|??|F^*+zW(F;|YtoAjzkRPrOJN zKcC_y{EPU^eQ1BZWSme(7x7_S^Ae8e!v>@2K?)Dl2M;zI**+v3B6-F^LQi`aenosv zJY^igKEcLaUYyD$*-%7^MLcMlV~O{;pHQ7bSnfg?;L0t=7P5-RNXwrTUdJt0c9!^* zBZQT25SknbQ|oxm*=i+0DLWC9edmm)O&B|yHui1}y{Q11L4?r{Q2cQA9i1U059hr^ z6JyIF(rclLry63)NwA@eFpz6p|2pxxy9l%TQi9icAyzeywG@;9`nk)q`kVPYQPb#@lH>?{IbBzZ>*Vc2m(l?zhtPQ2$D z!UUf0@yJ6KIEhVoFk?P^ia!6{CzC>B0;4Zs6fY$`IOFmXlDF~_ESkrR?KH`&kd4f! zNf2+FL%cuxm;g5QRqSIjT$Gu5gyfN&AzL>09mH1}3FGWe`iz zdKgQ-gDFCzH=)U1LpB#-JXTwOqKvzm2(LQo?mT)J;vxzL>L6!S&3NIK>7<`iOI`?`cyV)Z4 zlAZ%8-1aqLqMi;iDeFaon70T+*=^Rn&3p}E5WCIRS6SbKF#mJHf`>hJ3A@Q zM&ji=mSu&TxMgEf*=v8Fw@7M?GX<2+q8deVNmJTM9uQ0Ns8hsu@Zbt!ujjv<^=j&6@;bvgx9$*WBAf3hYeF3 z53a=TNH3blM$A8mPufM;l?g=t27h)NIsGUg{wYGAMTGerF`wlr?~=SqCV=?qT;oP| z%eH@!Jf5!$lDKP4tEfUjJlIoEVSPbS#5Ih3m?Ac_O|PFqd@$Sc#1Kj#*>20(^0jb0 zg$-8uO^VkROjyQ)y8e0MJ4*;7NAvuzV~1*ETOGHMGK#Jt#k$>u89c2bTqrz-6THqQ zJDp8-GRJFTQ@nv|T*{`~#Fo_ad9=T5!m=@hxom>ny(oiHX`>NdH=3}Pn=qh@_<{h^ zYoE?~JnekFNnUb-q@x zn8jlw>Om@4U=iv2#S$j#S1efMWfN~=%;o&*pU?@7WY$o2VO$xbAE76sID4HO>DUH6ha zA&s!=3So0JWf;sgEB%4wMW1Jk}%PiFqiE^+y}%Luz|{)hx*F`l(MM|WW&?Co)q)B zsqu+(T`!KENRpuNlsP0XU>{NolPc4Tc!|Qhk_p?nWy-iBMN3JqG4%{7_*M|+at2L& z36;yvCF*4guZg9It!xQnxBxzVDLj~+PCYxF8g7xmUKCH^v5?M&E46DKMU3(y^kLha z#Sz_k+SII|@I>y@fTxJh;X5#P|ta&FO3HtoKBsQ_WY6y7pd=Ti-BZ1dw;!Tkg& z`2R_mKZP)HF=0RmCFH-6_*}MRxlSan;{qjelUv4+yz>z0*E718Ngj!}{U5r%0IsUz z%KM>Uz#tD46@(WcVuT0^0{W&24DOR3g;q1#VuM|5 zb&D--NvpfM#jSqT*6d)h=$a)fT#@tF3mw|CuxAzIoYv{(gV&z4JdabLPyM zGjr$OcQKnlQH3n9*vw+PjFXf-#|7*%lg-r0EO$s{p2uD6U9-)%%LKR%)8GQruBlIQ z_RIgq*$Src@r?1w95ZJfJIm>Z&75`I%voE^oORrILX;`zFb`V1GHfF1L9;8j#l)q{ zri)KK%LSKwhmT>#0JBWH(?7}StNxykx3BZ@mYIS!hVbaaZnw~pmdN}E8EO*dMRUgn^80vS$ znx)?Zvru}J!-6YKMT<=ZMP{zrW#+0gX3|Ys&hoR&T$S3u*Ne@d>@qEHG;wX#tIUU` zm;hR9hIN;j!*beNIiR@Z4h9yjZp zqOb7v2WIfybn|uW8+VU2o#ksbsz$GaI0d z{e0bMrj~c|xZFd= z*XJejn^E+@?7DeO#6M-?%POPD*?d;)_%C$+HrIP5z>JwWXwOkD`0}S%aEn<+Dylt$0%QULvd(78+_;}syu%*u8>j!2al%3;i-=FxHZf1|L*Z4Y?b!v0n`V1%R zXREl5EamGY6B4#8;%krTouU``daDWcv5)w=jH9Y6sep~Q^e;>~Z}IVZC8uvZ!q>-i z!{C&&hKzs-T89$(`rV0~VWk;)={f^8eawb@$RAj4>s&q_F_t;|UA{j5TRvVkiU-B; zb&=UByw!_q)bHAF{3^-J8;ifhg6YAmz`Gyt^>*{DWaY2;+G9rMb~nq(H@I&b1#@_! z##abg{#GQ*<(P)1W2Cmx2n;#S0*7w%@%kA)e()F{%SQNk!d%ZXem1s%3rzh_<}*Ef zeayt7!)An!z03Tp*ZFwc%x`6HnIM>Co{cOv6XCIESTOz5e7xLajwTAPT+J2L8ot0d z{IPD9OB&C|dNTqy&Sv>Df63{K>-ZR(h4zyLwwr{gA2G3G0;jJq$5eAX_#*S^f6vFv zD||fRW%<+yzP`1GkMAJ7Q~3oUe9SZ>ve9(;);1G8r*39}se^nBGp2iF`fSTnT*0AF zGT-&Ld>s1@A7d3Cr<$3(!^}%NjOF&5o4Q$MpY8T?mTx<6g46r2nid$ZKW65kcg;K$ z7S8-sGaBA8^UxmSTqQ<<^QP~&nwBm$d!~=fL|XC&S9~{7m)GXy35Qj9ff>-3qy!Zoc^zTJeI(UrkenCCZE%D%gphod`!|7M&=x&d99C$ zqUZToV&8WU*qqT^Z4JD z$_cy7Glhd}8ds)yoV?hqnpT=|-etPTGs+4bGp5Zk!*{<4XdPyrYWzo*D=@=4%sB62 zSQdVW2>2BiC{kO8BHG$wC-UWXGukeX~Gfi&(DUd2I*$c-c(A*FVR^QqzzQGvD3*DyM&t%ExpwIBxCY>)fM! zT>MEk>>1O;+ke67_`{akW$v1-nPbK<$6*V-v2a}!&W5k6Ny92+UH0vr=K@1 zP51Ei2WG;)7;h^2Cr+Q5!Pi~JH}B?g`o`Dzc#vEx8kHXTj49|IA1|vtKZ}^%cE-$k zw;yuyq-A_8TgAr^Gv}q6F|@@*fmm~_Ph`1AruY>m-YzySy41warQ298*GySCJU*WJCLdQA*L&2-*B+z5n7P5|c#_kPm?#qT9A6(?!G=2f zh_BClnT{B&@2_DZr;mxtU*qGL7C<03OQ}ZFva^xQmp#kJoN0VK`$Ln@%p76n*k~-U zVm$M)FLHgyXa=c4&+IT$$O9h}=^tak_sq;N_IG@JFSSH@C)QsCf=_yJzUhoa+giKA2T;f zv89~8%Y^&fD83#u9kA4tUvI*GmkCynzQJ-g&3#RQ3IE$U{I|LGJi!9F=pTwDVaH5G zrYGMw9TU{d>18+g=rd8asFkljh~uNj+9(Xl|GKI zcbPan#_`z|@&e~O@;S47J7g+83ynyjEhb){`YK-+Jk7_{A};WliPLAznj*xEr6e;5 zeI+bc6wLWf{mztYe5C$K<`@5)G5xz{k8I<|STN`Fd`!yZW4Z}fwdNk+kx}5hak59| zm}GW#b{GXd7&R3y=L)ZzIGZ_@)8A`5$0rxf@Hvsk*GFFCJTw1FS3T$IRaz;$zaYeB5IyK4@-k&Tr@Rwv|tF1?eV?oG@XeAfE*;{w*I;npF;%FM}KrtjU5ENz$IV=J z8?H~@f76W9cT7P$%uI01cz3#)V)l$@`S;8e6Jl;smi{HD*Z+c#TbJ@N=;J2cl(!Ny ziyr?T6XWa66m!e0GOh=6m&~f;j4MoFne;MWAEyWgg;$wn)b_n5y_k<5m^me?hp#7@ zecldp53y&t8UIVoq_V?Qywntw8paj8^RHaMS!23b6Vn@wNtbpof9O0P&pgG)6=p73 zX`FG=S2+DW6Oe9|p#9W>%U&k#nsv-^)2G*0a(ZmD;f+(BD&>4WvlKsQ)@hT>WPRPN z-wGabzOASESa5`okGlAHyloAiB$>X?y~x+6%;eGaGrmqO;$zopK28|;*evUKVGJSQnnlqMsijN^DncrdN zhCOC(xM^m;^RrlPqfz9pQRMIv&UeJb{zg4|V7~LeVB$T~@)b|;b&%=9m1fvYG687J z#DgLe@&>2 zYfM~Z*0iygIsLlf&zl&((!}_cCX$Ys>-t8P4>6&8*FrP?ckE%}fmx$nG{-$@oPKdS zAGewiU0@2nY-Yv%Uu6F5AwDkk@UbkzT$>PG{{%N^si|+r$IbZPa)$+X>6nZN_|JTu zX)IE9kgpHD&&McZ!jPZx^_f@s_{ezuibB4={sTVVHq-3~CXikKBd33G7WSv%Fw0c9 z(oDMrqnsXQ;==ha@%3fnbi2&xSlrI(^~Us%jNBIEGar17`SaS@T&}|=ROgyd9oA-I z^$t_eq*vKQ+s%AFX1x7kF{f`aqvFxex!}~V^RdHt`z^DNbZZi)hx}hY2AQr&-^tfg zL%6)Qv2~n~V*(FfqQw#P}Q&<8KbCr+*pI9W*$}cLasU%rAI+-|xTi`cu2>B3DGF1b;J0Mf^v^%)AM&CWTCT{~tsDE`Q>LcgB7E z_nj?ee|z=Gp!@H9vhZ+b(v2_tBzXGxj*c%r{f*r-T$9G79CNk4J*CtYT9BGu@SJM= zkBIEH;Ht@`1>VxZ&7IA487YTnzBny*$77-2J23ucS%`1`!4qG-wg1Y}39o-E#rwuYbHHe5a~=g6WzKDKbzu9)w<`21&k zBf|diTH?7|712xbpFD6ldvGwS=WvAkTvAAqcXA9yO?bh?zP4|4R2}Tx6g8mi6DNqTt0DFN0zzyIIa39DHL1jP<&? zA8-#yp5St2098OMuoLJ6jsgR~ATT@u4vD|X|e1UiAMz%VchJOn}`p*`RQ3W2@AY2X5I1-JtgN5M)!4bTkq0DZtYUB39fRSbgC2o88M}87^kDaLm+wz8VBqJ4gkGCa5TyVnt^RVA8--~M+9C5 zlmmmnLm+e-$^a69G{6fK0;NDNa2mJ(TmfzXcc#G>_i++D9gP6C0lR^HKp$`t7y<49 zt{7Ab!~hvUCollqiHECTe#!=R13f?=Fa+EKk};bv1ImF;pc@zkN)w<^0(|ifPVNIK zi6{if2a16{;3O~txROvg5Cb#-t-wxT02l-=0at-xU=(-=q&>IU>%?vI0}pc(Fze4Q!bt-#pdS1hd$}ziLpeY%&<~sjt^o0iU?CtI$OpCoeZUZK z4HyA3u=dOYmH`dGPGA5S1TFzrfnnewP`DW057YrIz+Rw#u}l5+Z}5r8if2#(un*_~ z`ha^t#kcX2hpcOa@3;g#B2e=Oe7s6S98lV~22J8lgfNQ`A za1RJyirxT{feauIShlncEyPJTa1>u4Skghyjv;2A~@_3XB2|+wfmu5h?&Gffk@0*bCeN@?S*ZKp$`o7y<49 zu8*ToAQ{L28h}<{ColjE0+)bc;2{uNj79-zKpk)Z=mpwN;2romcfeauIXaHJ)PM{kY1QK6{MS)7-0MHAZ1}*@1fZ$h9 z9}o{Tzk>eXhLhdEKHwTK0^9>!<){#d0WyGcpbBUJI)S6W0B{Mo3Je3GD_~|I5oiJ0 zfxWg3I%}dHvCr%Q~=GuHefd}1dISNpFrh69#94B1Ui9k;3zNvTmr5F z!$5QeDhJYlLZB3=1nPixU@ve5xC7h=+JaZY96$}w3~U2V0_T7s;2JOj+yh*%K_Q?4 zXa#lxgTPf_7#IaYKM5s(L?8{=3tRxM0C#}LGZ8!ew0ZszvfNQ`A5MGbg0eL_<&mR-*tZ`2--nYS;2JOj+yh(;yW2OTblN z7>I5}D}gki5GVyIfjXcCxC7h=f;T_`pctqCwgLNqlfV$*YC`{qH=(7#PM{O$295&5 zz$ow#NNh%HfkL1ZXaV*D2Y}PS6(D~jDgtVNKHwy94j2ON0j^D`2S^4ofIMJX8~&>T z8h}<{C(sED0+)cRz%VchJOm0iqoqI{&;r~6?gPOsXekg6qyWW01yBPt1LuHifNKjB z0P=ukKwB05YXx=!oj^A*01N`dz$g&<222hl0%<@C&<^Yc4ggnx8$jfnumVsF)Bw%E z2yhQ@wW3mB8PE#s1Ug&M{{uJ~1g-+!t!N?84jce_fqvjLa09pl+y^Q?jS7Gspbt0+ zoC8LHdw}aR=vE*Z$N-iB<-j0t3AhRj1EZfwK4fGVH?Xazcfqrd=g6&MCafrmgS+%OtQ1H3>X zPzumT9qZa)q!yeU0D6Jbzy%<_9U}|K2Wo&m;2dxb7y-g}Kp7wz$N-iB<-k#302l-= z0imBo<$xC`1S)|#-~w<3xc}KK_}AyqdY}eq26h8`cfm-&6(IlfNCWl(JwTtz{6oZ) z#(Ow*{Uvk(GJtZR3TOaYfdSwuFbq5dyt|X$)iRuv14n^T;2{wDMN|fOfl8nbXaP<0D$eZWaz2)G7}0QZ3KPV_I33}gU#z_Ly_MmbKZfCgYE&%L{0Fr@aKzSSfYXDk-oj^Bm z6c_*oflEO2KDati2ebftfnJ~=xB$fOhc$p~ARpKVoCMARL%=m4{4F#L=mtU+$^_DY zwif)?4jce_fz!YhAmsoG1d4$kpbt0)i~#ol*Fh8t!~n^_GN2r&0*(TMz$GB`tEdb} z1kwO6PzaO)m0v~w*WsiEXb1X%)4&DbJ`nshC<5dI#XvK#4cHCz0DZto;2banTmxL) zPz*>0GJrf_C(sED0E0m2At(hT9!iE*I4K1xffk@0*bCeN?gPPJ?<)A^TYrp5oHW@r zD+(33f`N@{>~Z%Lb^4DHVRRop%}{lky7@i#^w^EAj0G7P8Q#n+KV1_)QOkcuwaEGO!R5)o5R{$u+mS z#VU)_j4T#LqU%GFRhfT^m>%0?bj?`nay@0W@8H`BqVmZQqHp{rC`N4wa=Vv0 z6=eIng*>L%wY<4@1DRjCn9{Tfax!58X(MfE7ptVQ$T*Ka6_GW5efOeC#VTl=JFd+s zq1xZE2hg#_uIi=@8)~at3QCxOC=L7KyfMi_1+g}0KhIy(*{LUf&P^-lQ&qQ}sb5{I^WCi^j}YD;rNldooN zgKsm9FR76^u5mv4OFEo(z>C$&@#s#cNNWtXhk@RIB65oA8Sf5W>WEm~H9V1OUDD9B z*>4O^GqvUT+jshLs_iU-fk&TmcX_?&4^fDEf0l|3hC;KLo}UAA3cV8+nx#qtXc*9; zVWC-S2k17*y#NLj`=+6_vnYbpt!qI&j&(R)>pOpeWzlPBzLqbp-`rBaVV#|aIg`hV zYJF(qEZ1E1qsQG*A^Jicf7d-dXs!-|v2(dm*_m)r@!~3Y@m$sTD|dpQwp?^4Jb13U z`S%E+gCXwVIHw4>r3|cc*ln&WPi4*NOb#MauOY|a_6^mEEC+F@@g6cOWAfPxR zFtR8$q(#cy2_AiB>L4eTLdZ$yYPX5dr!3-KuvUH17dba-ffawYp^IYG#w^62SQg7% z0DqRzNI@c2?U)-m#ZSYR#eD`~=~#6l42^Me!+qzP;5Gsy$EwIz#?4fr6W!r{nFW5k zU4uPhRr*BtY(Krw-_`V#Dpoa4L{~dCSQEtv91b;9jEhlcCc52z8O#=<BdMpi$K zk|j4if2>j43dY5!SYubGN?|aQ6xNH5z`A__{7RpS2+Sk}ZbP)tB2(4hg}SHtD}}9` z*24E{$oHb->5NP9`k=M=6g9Yk2X_P03v*yip|5EA@S?~mZ4M1<3QZ4W8}y>(Rn*C| z9jEEgvXFwG$aZU4S^)WFInBsoT#DW<*s{U(Qq!hJ%u^hi)px_)VX>lw9T&SvSX~ZB zmpZf+27_Vv1{E~P9hdIV7;~c5DABGZP0d@WdTxSFQ#Ud2Lnt&gDBmQ+zy=ldBvMZ6 zlrE(BtFvYadL-PS&IZtMB602(^cw69ZTz{>9YWIx)AaNReQLU7f%gah65;+>Sdg2$ z%FXE+v<)XVt3y}0)#4cF<WzPu}4J}(X!8@TN_c?Ryidj}v%}2}Et3&_np03(w zU=nc3Me}8}-q12-aqj4pj7+CQohnMg8X~yAdTHT$2FzJ+NnIr?5{2;1R^>s3dbJE6^~!RPN2dPQNqz8_h$4rXw)=5%9+HGbQjcI2y@8k>Ea zH(Pm_GkM^1q5`=v>QHmy-5!54Yy5?}5S7*|U%Wf6$k7ps7i3L(`!x--^M^1zkZq_RO|? z>metgF>V6@8gweY34mRe_m~^VHQgH2d4f=|M%|>@>cjs!`!-Ft$e~Z0X$B|&m~QF1kl#pPOopQS7!rgC@J0$9!c~E zPuRT!2NSwq)9DHBgj&b^@Fl6cJW85UQt)c2Z_Y|Tt6Wwt^>s7%M?kR0~(NaNk zgAey{sixv4T7(f0ZIo-%xQSY21zZH$~%X50hW3-R6 zFlUYW=J(ul!eJ~~CDf@C-*Zoir8#yJhjecyj3x9XO{>8t-N9`Rj|zm(2%>y}n>C!K zRrF@UQX;$WBV;+v$YMZ>EWP-)$yM4^zoA8}`GkHO&QZd$RV8MrP0BYD9q!ODjkxZ8 zO?S=2-09F({I9{RwaN8DZA&5UCVd;K?YWaVqaMbrsD}y4HIcW^Dpy2?E?sDilzyl_ z(M5OrdN4m<-{8LkXHJ)wu@Dhje3De0s8%Lp@J-}i$XJMBBXkC4yostSfW|11c{dcZ z(L|Nu9zR{(NX8A2Qv~{1inxIpXQG<)Q+J$7oQ2umkwIt6&1E9yiHWNJYoWNgeAykU zssaSj>moR!1tX`7k5dO`*%eyjq6*W-M0I8sBCb=HHOJQ=fWv~bu-Z_DH#`$n?NfFM=vEm(DTulg)#0b$6ix-`LCM{#>B|ARtpIxo0d}Ik zw^fO={pRxK!0d9LLQb$)4Mm5{P@kCXj*4Au#?L~l9FlnsH`>!1BX3N|& zpLbZ;K%9)m(Q_X$wj5a)W4^UR_?%0fZHjtAc~jic{_0>7xlvAmr$47kGsh>YL(%TX zRc8uX=9Fd|M++WLfoUBYjS|JEQ6cR8+ddf?K1poa0)<1=*_F7r)2F7>vfyIUD>PI? zR9Pwv5+XDlOG==k6%{))d`jpRO`i#%EpzUKVj=2501bOeZhFTxL?tf9Fe!f8 z9Uc^-Zl>b4hqeYn)W)a%b$aQUyhM+4SRRI`<4?nn9hG2HDfBeP9tyH@XJlEHqy=4w z^33rUo{7X>r z*4c*B15oT-+Qut+2ZFAql90x#(7hwz`!T`w42xTy%_~=VxGkk>J~} z=@WC^vx5>;QaU_18E%rG#sV^+C#9q5wde#jST)|iy{MDeH1p|wN)Zi*%Ot4!d3M#9 zM1*eF^pOA>gInlPP2UWlty!Z69+jXx8Q6n!+GX|pHBGO|fV(<02DkJ?IKq8`>d5dL zZ9ctbDfB1;c7i$^K*KF$pwX%~LA|>wGEPNi!ke8M;1?3lCopw_iOrA0B!Yo@^s3bG~dddi9VOy2Q)p{Xm=qcnJ&!4 zuom~AH>eZT!TFYzGp%9Wu4%p3uTQxIFKvxUL*eqSmsMC68v3%KbFC0gbgCYqsmx}1 zEgztr-c;V{b!hm24DVtL;8c~_N1NtZcy!^&z!7A8=8uQWhsGzT>9LkYkMKm-UXoQ| z+0fM~%8D1!P&QQ+WW%fu4X+SwXiFUuWZ(xKrMqF)aNYpROMvGs#j2px{0nW~BcXn2Lt+cdqyrgPyHQuiHApUSc7&b2(@ zK9)GCD)DWs(n1$tm1gwwF0i_beoT<6(id0;vL9A7-N?hYr2BhWep9WlMXg&B8Kp9EZAGmKXIVTcy5pF8x<{W%!>s_6@6jT;R#*Bg zSL@gGnOw`&d~h{!)c7YT_gJpwCq8Qi+NoHLt3UR&vJDi{6vgh{1g?jKhJM$?*g<_+~TyR-_5hT3SJ`$w9ls8L5uCe z;VR;U4>e8mLxesx6TpIn>L>s1emW}0vRG#j-knj07sFyPES5=6oJ5b{aYSEV3_Tng zb`pEjFVkXF)H8S>m3PA(8kJ)iDLaI?%W09bJ^EBihmFJt`4dP4H;4)T(qSVhy&GXU zMkPHNY3T+dNGIuEl&MuuM$Y!rMQl`#xEn)HPd)m~Xh%onMh#7NEx)0iqSWiMf#LQykuXQ2Vo#rk?WPZrZ@fLgVXf*$jPu|ACjyp z%g0Vr5f_z{fxeKU=u!5Ei{dm>6goy^&wYd}rx{svl=MOh^eJ-T4Vjl}-z=`*P`kOj zN&QDY?u8vCtS&1>uNJ9E1?Vz|w%j@tT~?%)2GHm-G1!2n<%ypu!0Sc%B0;uER>uqQ zK%>(W85Rjj`a2qJN>+NE=5*MV-Qv zM>>;!gZGG0NDrUd`W)KnV|u|FOqxQEYWhR~ZEe(4LKmO99Y7<C;<^>Ui27ab?<$%oJQR6!xO zD4n96M1N=< zs?$`#60Bd7m%1;h(DKM|m6zpC9_L%D)?~Rq7PSV}krL>=hB^FR!yNX6tTl)M5+$0^ zS##9E=Mg|18ndP>jfOQHULDNaHE+Fu8OM=>LrF8bVeUD~^8!|}4h@GAn%ps8l@OiJ zN@Q1Cfr#ity_`>Ec0RrBCo0l%K9QI64vn&2avSqM=QvzJcRz6Z|7s;73YS6!unY4@4+AVcx^si_~FMmaTr~^4oJ6c8! zI$Jy`4XzT&uW#s6Q(G;1Q$&We2(6-2a}oMNs;spZLKomOk*cEzW8b0Cr80W^5yT?Z z`2gCoc0A^tNcE@)#&B}O+TsxOd*?{ic`kgWUYL6HwJ3@hvA}EwMqJm8T5O4jx47cS!*27yMeRS*^k4~9bI8P>Ao9i*lacSaXbcaXc$fC z`-n8N|39zkF=uMDmRdW}+q2cmVuT;3NLW%@TZrDC&9CVd<6hShf%{AQE}%vs)w!JeU^&;BLr>2oMA3Y`{H-sC zPFD|qg!lFIrHG;RB1U0wxk@^RNU2Xn1kIO4X*>+HT$O$$G(l}Uhobbg$iWEn&FH_Q zGpNa?!BO-gX$i_1F zyjZ8@K0h4}?_aLY>JsQwN?79;*{el@Ubai9_Nz&|da z!U5h6ovj8-$pPqEih-kuT#uH!d;vA-QxSoWNRyKzsVL7yYVr!Z$#4=WhMth2$t!Ga z;2`2dDN$OR+rbHHXd!Nhhfq$?a<$_Xgr{E3-3`bJ&ybR9CR5hEzYdX$0IuilLVb;9x&NJN2oEz&oUr`&uONZg9MQ;^ooTA_q5-z|l7q zMd{$9&qM-FA`Xx;jU?!fPM;YG`<{;i!BTbp6WHWfsxnvLUHzSr@lmviA`!3$gM5)n zufW8+hzsy8ghfS(N(|gZuHvS3{FnjhJU4Q>o)5BV(?!A=ea~ePUd-80UAG>uF0E;T z0+NS0lLuZX&4@-YTZ9*qe_G*ADshy6-KEfTT3|~v-b<>*1980CvDGP*Ia4V7R;)}P ze_2EiLgUqnmDtm8%7ukRhSu6zW`ExKVm-mpvxka`5NN1LtAr0IR@7vov?yPHyy#(8HR(7(gQw zidjqHKZ{h*C;ggxy;jGc)AZs`+J$30Na2Iw<6nzE|lDr*tcAy4h7^! z?+JYs+mVaZ#&__B!DuC7ikOjZh@^&n*hXBWCatn+uy2T#VOMaGYEBQCuBuicFgQh6 ztBi&xA)|+?KI2wq(+##%GOQ(NsOmG3fG3Ho?3+pTjIHv!ir0%OCYu?QM)LFge7k!( z-j%LJD{bx>p6;KKlHr6>cj!2m>lu|%ffjUr${k+f$iNfDkFR2!KSM9ny|A>Pp{3N< zQs*DH%<&MTdv(cEi6Qn3-JZnIEw59m6+LJ+eunI#GFBrJKcg~NArc2;hJA*@R)jti zjeS4(^lJArK|vKNDj{-uYz3$1)LL35V&PJuZdc(Z-l3t8*x?${AG){VG_8D2t)&{- z^I51iJ@#2qz;F05Gzw>*B}&?8QU$en$(Rx zDpMbGGOKMGt&jnIPt%Rn*r;}LqZLB;qD#xv@c!mVvxCT~sXloTyinUOg zdcVe<)#lI`d!qgoqFpUbO%1Q$O}OTg+6`NZT522TuU^tnU%lQx5?GF%X(2|K^l>rb zc$upN4^&>AzxsK+NUwk6F!!Y3$X?&Q$=gtGd=oLM68H@T8r#i3zycXqNL@kH!yX)cr$eJaITj$DNaqfAA9)oQ9vl6D~EO0Qnk zqNmoO9r{#CgWu0L6&{#LrH!q_a!;R%2z+1K5uZ#Vi|g>5OP?AMdnz8*A{*;akv zYYgn3MWr08b0@6Or!3;72cM$uLlVJe0j-jj)YVq6Cx5h-U(B=7Xl4-w>5)pA^3+2? zeJZtEMITKek+OPhQ|MC>v8J!&IaGUL(+XX`zpFUi)M`yi_efrys>ixhpGuKdw69B} zBCQ5ljbY9dYt2dRuvrb@6p~LI|I3tjCj&dr+>7CRRLiwMRIo8)e|a(i@dftjtwi z=i9KZb_=%5H(L#0&g8LtIvI+Vxt5eXw|b3lOU)+q|LXGE)|MqGM76DVPx7#U$q4rq zl@mWkDi58)%3yFk?%wpZGz~uNtWC7s%_k$HT3MFR2|3c*p-GlYw4S6HAn0;(UoLw|wnd{8F0?;RG_~xIy&pnpDymLV1d7 zeVbce*=Wggx{-$gq>fQciZ9`(&vA|T0iC0SHF{5C-g`-vG-6T}nqFs<{K=U2(1ZZm zYBNo2FX=YV(Wl%>uh-Hb7+N+`D_0jZG&H?gxT&dGy&dbG8bx!rR6}nrHmcYS(4vvc zSh&El)D2CS1kf;wLv3oNrFkEbGU+cny+ z8+U5j(`4yO6S^q$P}60g9ffEv7rG8MVTGRaRj&_Jh&fhhAtIFIxk7o=sel@-=tPff z8r9tHoB*($c?yDaSE|!P1<{EROuUSvszv8<-j`&B_d`c+|$dzkJMrH`s`E6rZ;0!}yb@FJ1FpyfADqn|(q zWYC1V*^IXC#JW$LeKVPTvt@QKoJX`BB`KA@*)lu5T_!aBM7B}+Ks#plTC>;%qWNcV zzGil2M|aJs6C0sQHa5semH#1CZUm^}pQ>E6cLuWusDj`xs?d*q8dYYCJ8rpScFTWS zi5698hOo@eoH3*2RKq&YI`z*j(5t`2Hj(99rBPJzyQtW4T>8kE%$|{xi4NL=)w!b= zoJr_*P3H#Ca3-NgHNDZMY3dQWY6=y840KSVI_j) zAY*$Ub8H4$TuGiDooAhDdjn>udc!h9uH`B8dD=#`{S9p9BjC0`75cFdv_gs#>gWYB zDR!7>-6JKwR(4azIhZr5AlyiM>ASX=4Bpi3P1=G=26ajqQXKQr`(u(JV>)Hn!x_3L zLyt~58;}8gE*T)YqhJhI(t;p^#Qci*;TQW`)~klb@q^^-?wRd zyD}eZ@rZ6j@dBGJXP&YRh9NL;# zIyJ4ec=TzzHHZk(nozvPW?HlOGqwyIKxEprOnVlrvOPcsu|Z_+Ync<myFyNXa8QSxYb8rln6%a#f-uy?vW)HuS%=`I?qN)_JI-0L==iNHVz+ zRqS@lQnX1YxvprLg6%rjWy)3hq*K?S?OKH>C>U}Za1>tq^yZgQP#r&S!UUuXf~pqAu+g%L!Y&46;4n} zr%u_36u%KLOeOS$;+_tXsojc9YtT(Xw-Bu()5~-#vbw0I)rm~Zab#L!ja~W}G$PXu zYj9Rufx0x6=&}GBV^_k;pr-c(&=|HtXFN^0&j!%wQ=xk_{UCrwcM2Vj+fA6~v$kp& ztU|YHx;}u$I2C$C(}x3Sj8nP!q3=;+kUTSCx*GkgJ3LOtvi-BFOC;mktp4q@ZjXmA z*nrg-s8UdVIu%s*Ic$VEWuWVYrf*s|st(Zbm5n>d&E`_d#n0KzvLZEo@f!2)PMd}c zNO__2h|VZLTqxOT4Ltg}p~$pqnI0qaxJO@`dys1My~vGdxf44r)#+iWDj$ZD+U{7}=E18A$io1rYC z#9!L_Tm3z(>5>2%)3k)_3bX}o_rio2j5}v=>QvJ~HSh(IzNDou{-v!cd_lrWK3d+W z!ggB$i(cCh`n0CY0%-KU(DZ@wMpadW$?nu{%aiCu4v`tqGB@oa=q5z;qgO*4Rq7r~ zzgl#V&_^{r^x}lL*|M9dlT1r%VQ2|miLfv&rGK#pYqh~W)>^F=1{JBjB&DwJv8E|{ zu|tOZeN9Jw!5TXBBtqyK?1MC_q5vB06M9I~I|67lKxq1&I__2jXw)Zkzoy3mXt;&Y ziFuSe^{;HztkqkmrhNgl6%$;GDfhtu8h#*!H*5NG01ZD7`i7>%_S$t@GeGGxRCobs z4D-w{V3-f;l&yA#wN}ul54>X*;tYo=Lyu0m9gqQ?D+)yBQ--7tT|?AgAw#=PS&0-U z2&}a_a#Yh@oM8uLs4Ac$E(T<<`%cqAU(_{>QHK2IC_^q%{59C!rRj~F!M7I~=!@~V zB?-uY9+Jq?sp*?vw1z$XzE5aZA?5ab$)@cd()7wNY5fX1P~Fv~l%WeLe*MrXawoj( zd7`8Kh}}qi%0tFWzuyy)#N`liE#L5R?dJMVqq}8@ak>tBUVLoDk>9Q5Y1itN0C`R~ z@)*5R{-~DUobkUhFkv!SW0=0ZPGk6oofyMCo&GWG&9KJsIg(OmI{jnVn}MzuL(&J@ z8`W5+-;mx6jA7Z62}ab6=f|e;Y?DlS`%>sDnx?NYEft!=nb7p*rT7nh%81i+YceUe zNv!E6S#_cddOAf})}db|#H)fYyQdWCQ=<&UG^wqQL_Sm-rMO9dLu0Utx)s=ZN>g{gf@Qx$`~0~RvDcHPJp1h27`c)=8Jjt2s%)Q~8zWbG zX}6|#?8AMBQ+SO(cHPnR@qPGdvO{CAiRO3QC|nz3Nl9S^zT0RSgE?aiIH|aJPZTK> zyC3VSGT39>RI+;t(fwy8 z_#+xAbYM zOZnCFEBKTS0rv^268?6e|>!Urt_ z(}G=Uh=C`isrL{14V+a2_mGi)PSa6ewK|wS87RFsfRbRtuiAxM?m;D`sg8i$=sn3@ zfs)cx`wh#+ zjjodhwO|35rn+yVK|_bE2HC6gynK@R;E?4g_Ue3D0nzDSw`ug5H0Y$JYXfL>geX9N z+b2zp-h~1uziul4D@q&k3rXhs*KzMCeO7CA`yHb3N@LgWuqQD8ZG2Ww~ zlnUwm9V%*l+pY*Qa@RzE0|+DLZTGwxP7!bp@vnVEyVTonyJx)BP%ie3@K=aL8 z67erm4Y7yu)~@8HdjQd|N7EPX;pTDIVXKCla9JddER<3fnWMnqu;Os=vp|Rw1oaTQJP+?tHi&yWi01Asby|FutJqiGVy0E z98p|7t(1z}`qy?t;ax%>(DaD_+6p~|Wt6+&Pk}oOI#ud|BgvRJsiklH37)dJ*X~El zn=)RZ5^H;{(6APcB$lPWY=jxU*BzH+JSCfMQ$*eHS3&EkaowhRTGBW2Sq zifA)bNkvUMqE|+~zedzLy^2zbj`(enZGUIv;irh+fehlM*>tZV9vE6hbjHNT@Y{?d z{=u3}HyjI$qhBSNw;q2iMWuh!Z-8vN>5#E-0G*Sj1|NTHw%YbhyBPS2$i$AL|myh9YFzXX(~iYKw6p&otB-IbkT#i)B)ZpXL$Q&V<^6?m?qXVczt zqZH^Fsz$$M+u4dP(da(d`KUj-WYd@PMOpgOKv+^8wc7%JkRIK=j_AWj?LM&rOGX{h z@7pwef<$s(t0y|@n3bD8J0djw1t4^I0F9U;&eq>RG=4kh+$m(!&kRNLD~&`yoQ|IA z`4(P|(bvX~nQ#p0^zvqs3;G-UvQ2!JzE&r6#wMc60%-VyjCcBTIxxWB_!mss^nE%} z;>Kp8FaM2YzD&4+^!3#(px;VFC*^zjC);b5zkMYraNIlF1lS>O7AOGsj=f$OLMJBqId$)N#C()bh$KTK+|R4 z!P^&3Q>-3td5jd%zbvQU$2-b!x={v^Koq~`mv>}2&B#{!Wm`j?vPo9`<~#U3wxa}E zE(W_sf@G4PX*Hd?Io;Ha{ue#_Cz8B=_12N)G?u03$YS7VYy(u` zeH?s-RDJ8a`0a<$(d)BT73eTmrFPZWN~2$Zu~G%~!zF~azh~dB>GXbdl0#d; zX++bj`r)lY)5n#?J{9oRO0_?LhHBEq7c~8DKfKk+jhG~+$QZ9xJ7K9tA2gH22)%$+ zsnSm%^gFrXUQ+iBG`y0WIbo?o!@Z<%`es7qha8#H*v?s&uT{VmE6I_kc=V|;V;0=Y z=?b`4B{}mHPc)s1NVUJU+q4KAdU~5a6%jp>_*OU%{#5x9PR;2?F*uhrg5Fp+@{Y4` znvu0SIvzl8>oESML(i#YL5NuZZFY7e3S-mucin^8X zvu6DUqeq__5g)o(EJ>pzj<-?cn9iha7b&41CB*4n5!F6`HH0H$1*}RKB~Be0fHyld zY7mnqqg`?8@&Ja4L&JfD-lu8&1}M&>PelnhkSLLjowqnu@D9eJQv#evN=S|*8b1@V zDuA!ZecFvEqL00U+g&F&+(TBH_ofhi`yDJCg|;7k9*rh?==YCd!uvi}e2xsvEH=!K zB^lrMF98(^Yyh2unS7&`H4C0JejoBBH^bsk&0aT1FOU6uQP~3RZkM#@dI05xP;^mo=NnX zfZXr~(f6pP$9`b-Mh(0{dV~H@b(}g;5;@bOPfd5z*ZHMKGM*xl`jd8#Sl$pk8#K18 zqvPpB@}u37e;cLKu61I7gf%y%rH}+xNsdE#>0?3CpTV%*auWvrf^r;kS_1z$vMn#r1ZP{GAlwY3{Z(+_9iw>3kPQ!%pn!1i(b*aI> zvs(j;N!4Vrh59kVLasGC8$IT92(kJxLYqUQzr@@PFvY?Ty+pv{3JQ zn%~@@XlVd*CJ#oq^cQ`lb)mlRtX7+U<(}%{1Qw*9WJ@a=CXk-^`#aNPMNeA$N;9r# zI_fn1(xEZTg>J_*w@{S?(C`{@{0vN43)P;}2t!V8c#Y8XHRXlsVgLq_?Q6 z*XqHc_CDqgi$vjK=n+kkPpkZYfC6ic2L}9d4^FyPt@;Pp*rBcH(V*#$e?atbX!x03 z`3pQUUoehF8$;r%w5|gE4;WMqZN=X8GQ5|~q1-0^rh?P!}XtLDU zkA8VUbp+6`r`+N7Vsd*yo&6zhubtdztvFmVo*BJ>VKc>}&!k0Yu=H2AmY`pr>NAm8 z6KIkM?vJ#&_(oNYKQld!j8KOM(b*B4Gb7iEg1s1z`ECvo6p$g7gh10v7;*o_gOay;$O`n?jeHbv}E~Rj`2zB->`r4@g14b&i6izfg zxR&72r&5A7X!0hJ2tK+t)1yyC1br@g3}_L2cx|>vpNa@PTE4(;Nc6!!+A5>FrA51^5}o-Yn?`p_i}I!ut-q??{v)gO@zmV+BeS@=jBV=RN%9UIQoL!xPo)C5govbI5rjT>KJB5eMGn3pa(!A3pZ2h7f?G&S zGg5R*FWN1&+@fF8rSi!RkG?jw(95GzOIoUK&k884PelYiA|iLRi2j5JzWxywPnRNQ z&9d|=D8kN9ELW!|*y03tG>wmZ_?@5{J|dO$rcrKu;KScq`w4bcI??!(1_>oj-Ea?y zh|P0Jr;q+S49w~IBcmFwA_|?HM@2f{3sF5kwS0>1w8YX4Fjs^+^Ha;x^m3`xeMi&u z6>^V071O|JMC2%}8KH77SpmD+a+-6nVuWhEWVam-Be824tQetAU9w_VHT*>A0Zoqu z(AHd%3?oPIOh#v-9b82QMYopFGnpk}KhaKx+0Z%o8dZcoXhLg@smk|Hc(#DUWPG$K7z>vab%-*gaC!52 zpO1GZXsakiy&FKI?P8jpntt?8xF2wGLs_Bk5smwS|M@4}50w5hx?iLyg33~$21=!< zM*Qt8KMkFwZ!c*Ye_AWfPoqDDrk93N)Me0)3ibyg>6_LmcpvN8A*hf@fAG~&0evBg z(xXA!Is*#97!j#^x{%{2q|K=V{pvI`L>GcL$$Skhu)3_> zYjnCEKJzJXi2Nm;PJik*P@dC`yk)2C2~PQQ8(L~I@i%Jxl`v^C`TW-Fp-gJ)Wy`oU zaKyOuwW<_#+@|T}TA^DteG_zvwAlU(;4snp2b!Dk_lCA?Mx&ipGsg zQhNZW+RUf;6J(u>cx&5??IG3Nl5dUa@mqb~>kN-xaGl^v7By zOk`l?n4{|yzINi=1x0d3T)YwXS zRL}gd>8kWS{1QQ`osTw&484U$(PYtkc(0u=OhMKpS%tfX6m{Y~OLh7KhEm2AP2UZm z5eG!|Ws#IS^Bn@NwLMRr8X zRyS?7yoJ+@EF!JcT^vN^Qc&@2AbC}J755ZTWz#~PBS{8^F_846HSzBt#1t!lF-g+M%MC#0WFKakL7Rc6E03P z!sr6&>lj!pO8MT0D>ynL^vHsM{%EnLr>XC~kLN*-42GS^+(DE#GXE7IgHbCsO+jRh zQl5XcEJg7~T!eOEqEyMhVq{1SwB0UBUP1tbo&OaJizqb)d+LS7WZtisY&wP>K1+Fp z=$OgsHp**rXv-VOOP>0O@1{Ow)+h@sPoytVK826qtXtPmTUhS@3@WEjOnFrJn_>Pt zYMmr{V?iJ>n%ej}f7<$WrWaDE5_(kA`qS19jaCa?iB`PMpSE^rYso@8tFJ5lX={gu zn&Pdrk^1^aeA?QPg`OfC32%MLbyt<^IV)bgX4NryeV;dGQ8Q}_&k^XSOG}Up#9k)WCitg|L5$Pcj z*AgijpHg`PUFa{Gc~dl8L-K{gbEc_BD7sCbO3`o+v0N*OXtR_Qy=0UYjhQpWqC&|t z9FT{#kvzcvSQL{EpizmEA**|AQnrDD3VWem42dx zz8_JKuPW7VSZ7;;d9I$G+>5VWqI_!cFY$#eeJVxUzKdC4n%Yhxt#m3PmdDcH&zh!6 z-wF%(ai2~VY51+o8$(+9(J!%Iq)$b}il~KH=}uG43PXVY&|Z?h7CAVtsDF~=&`a~x z(19@gM4n_h%`_E`E3#==|7yqe%X&D?$iitwwufZZr30pZkG_`r;iJ-&Xsn8-sr-Yq zgdN6T#nIOy2S*jT-6W^=92>@Pf%le(@vVsVMO4UBGQZn@icXpMD(dt z1~(LuVJ#B*H7J#T3rgv0k%Q}rTqoAW@R_1=m3|9K@g>(t?+A!kUL@6c_!er^r=}!& zPe68kMzqNFTkhE*e3~?j)j(AgWlZ`{WYnjU5xylOW^@XPWQIjf_vlj*fp1CK711Qp z^`H2Ttv(eIIF!WdArhh8m=JxYqHf`|cq%2*28=$FY}Ooyz~n0BM+w~x_yZ~ntnoxo zHA_|FuW&C_%2{)0kt;Q(A+DC{KWydEry^nv8`@qdRe3{U_?qXh@F7d57_?2APfuY= zX|bU{fwp-|qZPZD)7_CnD;cSJ2r;izZ$0TVsTqSuI&2xjP^oUYJ`)Km=EoqQl&T%x z$mmIQ#u8rdS~cxu{8jY@@Fkh&hM>`E6?NM^W$9`bTR@*y61p39SdA@0iZv4HI87_Q z!2ZsX3lq(1Reu}vu@q&0XQ^A$hXQEJ;$E0)wYq#8OI0T~tSwgQ(R9$SZ5oCaJ;A!X zyfF20GqUL(Pjb`SPhPc(ayzs&$}^DNt2%y-)wn}raEpi1gC(!J^y{z$)%_EC`}EiN ze5hBQI1MjML~nW3q~GBA2I{Aj13G2!H}DHB-TWJDKRCt0^s+-rA96yizj4n?a%h-d zLR2TwuJVfV)%A_*)QP)cc)j>HxFZr-TGWbcD0fhqWocX^+IWt%)lg5RN+zdGW47KXF(8Qt9IYM96bQkD0q3xkSYpWT0 z%c`llcEh>`ROt*K<~R(~_z)L9s`CW?p=eGsvesY;M91ZYidC8GB%ko8LZ*c zqBGDQ+NJ<`PB-#a;JW5iu)+5RXL0Ia&g99#93w_q2G5_NPW{fZnf-au0Zrfi9bCh) znbo=U+1?q-GiuZ5SSfs`rb|Zc!mVB%)$|U~B~IZO;gY)&-pvN9!z-`6b`qO0XWD~d zFL^Fd9(6mQ#%jMSXJa5h-!W`2J2lq$X?lGRE}#;|u)W+oX1SUD5^*$!%M8^qW;Ysc zCZlParq9^4{pGS@O=HJzx<{WHKlZ|_q!IK`dWK5+J$BMXOWIJ9@pzhO*-3Byy``lW z-Xl_JScO5$-(%D|g;>tgt!ZrLPxt6kQ3K;%)Ck46pFtb?(^ceu*|lKsOD!#0CjGxG zgVL8AgdQdu2A%g`Flc)~A#f9sDo2Qzp$-KU0yh!*9MLG`Z7O6mpb%?5pcnLJs7d!Q zA2{uWV@QlSs_CJaiTDWjJ$HDHBLnY{2GgG&V24}Rym@VXs~rI}r*8fplf_OFQ>X4( zUTuGmk$z}9L){Ia;T}>+1(s##+z%|Lr+3VSK1Z~U60~dH()4DtKTt5oPM>S}OGXqG zxd%l$O{cGwi9>d4`pgHGztV@vgbtoex$g$h*5uHjY0n?*+}6tHil$2fXv;rnTXlxo z{s+rHaxMSpBN|<+pGyt>!E&-(%Rl0ywT1zOSpKn>XcY3hKfpio|JyFaiY5#2&l)3A%)YZkVpS*jXQebMf`9;(>eDo zH_e522u*)6cZS+%)AYiNc*j0XAHQ$)w9j$`{7pXOz6sh1s6IG?LQCC*fpYmrO3iqs&RV&js6wi>euv%2bS~r(6K_tV7nXo2GHnO zp_8$jJ%e5*^iMwaYr}c?G4%{pfUi5*h?S`QnC3hcQ zHbL+U$c=6kx)*Pg%uqppvQ@L@fbc}3Gi};_(AuJDUjU76l)|rRx+{Q2H;Nw?CQ;#M z|73ZX{h+m9(+>jZY`=#kKB-lEXgMG~VU-T;)b!zp7$*AE%nNI*KHoc&N`Q#p%j}Q( z?@p%D3OD)QENyDox~^#h!l+E!%(0iz*UY5WowKOOut!#Btbrp4-ToBOivwtTXr~ap zF@Uy*b*iDKx7E?9Gzrci7Qdp?N$0?K>N(x$Yk5cB(^O7P6YtLX+sElf9_}Jt)~rY2 za`lxjVT+M3jF2@m+#n&f@z0hK=rOdEL0^KJp^p67>UR19gEYZQov5z=+44yG0)v>a zN7DuWgMQVg#t8P87h0)96h!>f2)(x=_21C+mjAKqN1;OZP=Bf8po_%9)o>b7uj*r@ z%m4m945za(=$#djuUtgM>9;`jDeLQ{8$`J|3Wj6lsI>Npar>(x!((%d2z}I7*5@RW z%eR=hOlQ*#gH&>rX#6R&>9G!r{*V^!4I=htWP-!e?Siny~z8U^Rvo^3wlJ$-lqN>Dn8z7h1vk2Fueo=?iP$ zsHe}%p)B62X3pfX#wh&(+FaMVw%V3gwr)UKP6j4S29zYu;>BV$7dL?audgeCtE%|^ z^Hxx{`ve{!prGcy03sr8sF<32V(tpKfw_xmrGn*JT3F_2X=?e)HPf=x%F?p3veI8! z)-OxTOiN2!{@JGg@0sP^`(8co=L7fq&N*{t=FFM(&Yf%j-hrekS@?#QrAcqFtfWa< z8u3e6*qsjPg=2&pv8FL-xUY5nf&pV2oZ2$_4l9k4rgXuHwCquXWCPcBBu&Y}qqLD} zSlEV5ojzs!bUgkSy6b?%m}IB`@G-5NYD>DTE$OnhWYL16_K_W^59zcnn4Dy?ZT=mH z3X#soR)c?=Y@|llR+@dM^NrQ;ablB=xb;%TF+`ru&s4+5iA^@VTeE4Jn$D+gt}efH zo+^IpG{VjGN(X(+DV<;3T)nRNepjmat>xhFTCM=qDV^`GZnUtXL;I!^dswh9ZmEtB zbL0E%sp7X*V{3xip>)%En+SWRPz$u0J%auDR;@<-)@o24v>esGbiO}84Lnv?CYqL} z^WP&-6;0dN9G&*lpj;wR^G!C~S~o183wCj&ym? zwph*_OTC5Kj5{0j^nrzrk8|P)gPK}0fOg3z% zQ_u^^8^Q-hBljj7Su{fn_6mgNbJ}C)I_##CMem#p;crLVlLfo!GNUEKA^hO+>WRE8 z+KAw3F^1cWg3hkcg7h$J2yY()AJHkGvnzB0SEHGNo=>V4aE?? zKgO0-`w4u$c>%VEc`4HaUuq#K!(s3Ua?4<#0)F;i( zj-}9t0@&~a-4tyiwpbq*Naqbspv^#Yydh$JTp%rBt4!o)19?;pqe1n7lAYUTG~fAI zOp}3-(lM1nDvr&-=9#ghro#_(FCpoo&C8@6R$9Ig&KIXX5rUwme4&HC|5=RRQ-o;a z_@_1C1#vRg%uJjA{3X~?u^0u!@$@F>H#1P&abn=oKtPq$R13X=`r)(K2=kqR1o@v1n(U0uoK7U%L>D`FZ~(CLU;mJC~q9+z~!v)sNf zL(-+e>17rzACA=55}6M?RA17Sylo&jRmjsSs3|XdG09K?;A`4?WZjvf7ps`5jGtv2 zxKO%g{!9FlF4W~_6`LQ)q^mgn_zQS)LTiLZ0WeSQ?CZ|_%$=Hb~ z203bybeSr8tgVY@fsm){2Fgpil1KBU<>@TInGBzdnKiL-$wb&nM<5w002(nJAQAOr zrg%dzN}~VBnzZ$w*5s>8ip5$;_QbFjx)^Y zC0#_HP3P%q@1Qdr3WD~CNSczhxk@7PR)9H+n&t82KVqu&mqaBDKhZ^1DTHZx|DWF+ zkvtWq#0o<;D&Q9qQIpNQjkfyV!EogQUYQe-!sjL#5vk(0wgJ3E_tP|XD&WOQ7(1D2 z;32vLqOno|pV~SiksnAhVk{ZBiI#a;$b6H8PD-nw&A_@%p_Z(G-&7Org~_({VVeZI zIDm~J*UIV1W&zJ{6M^HfYNAClRoI4yRYK-eO?v{+dFcd%hm(qoJTz)kla26H@mraK zj`h-VbA;USWCI@zOg17@#cwSKuhMdth1?^__6(uX(d;o8GZk>CvE>&|q|5rGU`M6c z%8dpz+QkoJwo<@5rJ$!ZvkFhqeI>2T7w~B*=xI&1%_;s8?5zRH;S@S)$1qDN;HOfo zq~(gKzZy*CV`5UklTwZ398)=5MZ14fOhpQU4g-)h>78T8^2yy|n)~cu39dv9tb?w( zZl^lZl3Dads@9l+W~@$7g_1O(F{>3EL8pBa_jN~~l2!|ISW_3AK=Y|?)#3SlBjOs` zS`tCkG247%iIBe1Jf?On0ksI+Axl|ntfQXeQ8E=z8M+@(@D!fwawD+QV*PJwtkW>i?k(7MuoN4;dEbjt?1`T zqM>V6P>~55AJG=Q(dCGkWLIuRYhGhyOcP_YRXkNF>hApaG`L=OWr%U`EuB_3n%3_8 zRC}x+nQWL*7j8JR(w+M{VByhZ!;HESqwQqf<;$7^$_QH75AVuHGt-@pkF2dVw6dSq zwH9@{JH4!FM$jt5)(SQ>hnoTS=ET=6^=R$PnXX?NSRO(yV z4+=I=E0MXn_PA~C#ZW7|%K=qUUG()zMJ|2jNBa@X!^-*Gx|oVgtP@kM0JhPVrI~j* zE64ul851#J>^%kVe&~Ky@k5c)oj}0 zud{m^sVV0p>LI%(+vb+krIhpK_29K88@ANS$Dp9f`Jn*iwu(!yoRst5>lt->n4xVW zN?Lg;$ClWsGs`XVS__jjr3%*5&QOJtE8*!4V0%*)tfy^% z5w?;UeVX|!<-vX2bvVpmP zIN8uFIZ0PpDYg@#zc%#}4Pl{}d%`^mVUQyBiXJw`edSI4--M{Gx9TY~I|;%3w!cALgVT`NI0kD+I@ zC2T4_=1O0MoQzq3RjDLTCCF9@!{bS%SbrB#Hz77xq6W*$KWz+0^eT2XY^;5n*s)?B z#v@P0gjZxDs4gR#?8UOl_|7dh#?G)BGf5Yz$)rQ;sHBC{jrb-l? z?vu*V%tlh5*rdW_+sddCRXvi?mu=-)-#Ru)SFzcw-VW6>lFpt8I&oCel{~DjEx8O; zEt267@IGVt-OW(l%tYACy$97Tl0V(do&{TzP!BaNQu>jA%28U`+>;z7lXt??2uz0kI^Rs%)iE59MDf`Bium~30mG6%jK z#t$KMs>z1ov;)x7tuT5v!#lM$a1xyOsj^mVdF&Dl9m05{EI6a7rNqj43LH9&7iZaX zZtFQ-7VPC&_9Tw6(ohOl4&w*1>={I-p(|?~rdGlTO{} zcThi5pQI^SxRFi+y`CAyH$q*ifLa|~NsG|;yp@Q6TEy09&B68+B_f~}vANWFOGH2| z0=Lo;O~g(Ult2!$CZHC9Yv~HTD-9yDu+6MVn#>yQI@TpNu@0$QmxB?UfJ&Wxo4rw2 zsly3flj*C|<=9MWD>=zms%<{E#|lU9rkhETbR}>3oR=-DC$iQWW)@JV1#Oj1?ol*9 zVSHL^Be}MKS_D3*4YaHgB^MuSYHh@)${#8&nxn= zPh0Ow;{TUxL?<S(FS@5u&C#Oc4LtfVQ~OsmluBV?z~oIGH3 z#q_eN)>K9^Q~-F4PEZOm)sxXz#>bECS3Dgx-Aa(;sW9*w-LfqaVY=a6P#HiEdL&)R z)37`AXzGdRH@Kc zA~gFW!KN<&RhVoj*X&$$+k=99MABqFXrWunuKgETNmH`6_K+T#4ibyvIFS*bfS);L ztaa?DWU4@RH>N;*Vfp+NPO!jDteOj=8 z4PcM4%Bdf02~$R4hmwHWoN#holrIaB;`a9VZT{U5Wi^QZ-5%9hK&62evbBblLL{>T zmbp&1H{6avd|Ep+1b^v}R>sEK{It|diV-Tgx6T-SjzTLvMr>9#gT8)#bFtW*V%8PO zlcuzPJZ>#UFoXCSs5EV5U&kiDDin`H1yVVo^P;t5(hm4SdZgMzAT43@u6>xS7Y2Ek zq{-yaMqJ%|bdQ8ApSmG3fzRoPCHg|G4_>7QI0nW)g?wX2tdN;(_>XR?mkIVa9Z~uw z8@{8{TZr*bp`4ayvb{=D>mduo8)sL)4LNE(9E=svC?`LLm#Nv z8fkmKoJcx0WL;|-9#5ig2WWy8H@`@zo(S9keA_XC(vUokBjX zvsEg&_6^171>4wxf<4;VR+Z@TM0xH)iw$*^) z7!4Kj;x6_yqVLib1V^NTjdSu7QU%l+;Lf_}saUK2zLG=H3jzUqTF>#a6`~kvMA_Zdo=`Z3&g;v9 zeJOwq$IuCFnogk`-E1^S(GE(RjJ0EIAT}F6g>QI2vKIehYmApy-E6CPbU2`1$dbqx6pNJand_84pp*Dk?c8o;*I-ZTtB z3;Ce{<+e`mm|*`M5E_k=j(avnr-i}08bMKt@oU{3-&)ht6>(=Zsr)RAJ!}S`t;3p4-{UIeNw?V9D1FV&z}UBt4-8=2>OUP=SIAe~ zV#@-pUF*=@F+xVyaR?*NQ@7ypvd+h7xPZ>)MIqzqX;)!$f#DcIqlpV(+g!knp>!di z+0&kUl)hG8F4(&RLZkHc;zTJ7QOK(fM`CHO2I{l;t?IM=)5(>{6Dn*kdn|B+EVV3B zfb77Fdl@aQ9KsEBEcK9`Lf-3b#3H`+A%5#vZ2quG$T@o3En)MA!^n0aZxg_VKj@m) z6mE+qq_?f6jkdK28w48%TU*tb7N&Dl7A9g3Hrn~#Mr$(*_BH4tY`HGvo%-04Mr+Wz z5pUX#*mw4^RbyI%*3C_2dtyJ`$Lfb#(TCY|_n+NC#N7wOY~4jtFQ(aUjCW?s=dbOe zjB40~oL3x^=cxp_6Fqv4?<8%ROKf4TAEVO8(%rWN=5l?W2eucMPog;kUTkRYH5q15Ha-TOZ&kjy;WJa zL;>ndZ9%x+{6IhC*<{;d?ByZ$rGU`3R_h}S@Oty~{wNMJG|E?}Hyfk7-rV8D+j&#_ zqggOz;Ildb`B?DnEte!W*kp2Z$5^$8@|M95AR0d06H|>h3X6$oH3lZlU_EAZDJ`2g zrtdh@5Rxtok!?Tqg_MktYyB?|#^dvBl#*^A=zyUSy#K96-RdKxk#e$I@uBfX6Fhob z6ptrxCHw{4B2i0p<~Hyv@mS2w7=Vn;l7VttBGH;33B%8#y;I2+8`VU!XA3sAO(n;h zp;1jV`z&9M?NUi+NlGcFvlX<}`td`46d9cvWwOy)YW6;U1?(RC>}*sM%}#?YX2}gv z0sEmOU6?MHmTtBDF5W)@6P8_GTWmHjAj`JnzJW&VuI*G>Tcd<^6(DxCe_151CS^0| zt2;WTUr3hTwu+4wP>YP^S$krzB^R-33mrw7rSjtgu}YLG#WL+1Tqy6U;ya_g0!|r_ zbdkqQ+QO@2rc-}X@w&{cDbr~Q5On!OSJIVyi6y@PbA?nKUQ~w7k*$ZuM5RiC5`>>< z-&$ZmP)w5q(n&?8wZuvvB>3^$(5jm`fv0G8cnxA_%!{&i-wKk}1h3KE%p4)wV-V`2 z)p!w9=`y>SC<8OWm;(=E z;sX}96;CfKE}3XOm|Q?SzT!o!@ioLecNkwY)Rr&%d1^-m`@I0Rt;;BfYY*d&VfN6r zF2fCnMz*n**g!y4iZol(*`m^Nvq6)`;0wzr4gO4_krZWT=3!MJAt_G=&8E#^+G=wU zG*5g4!I8($gkc79Sy1SirWF9~fL2E*j^*)Y!;OTlratsRy7ie&Y&Kw4@l?y1Bu!X1 zI~Q$$wr-J!R4pBjjGL<9YdUH4;hsExU^uFe$wuz9E7IPNJpTJ|xP!@tujzE2MMsy% zGe@A=Hrens9eP0ov5QC8L&Mi}(&#PqJicaxEot`8eq~@WF^|7z4^5ASb;{`&ojmRt zX-hf1eXZHQpxMadodVdX*_wS46+ds)dr<*9-ULyVUmH|$E&Q^dbnS<(-a4DKB&74< zP6S(hTOcdw8L#BYVxez}X_fTdm^|KSlu;KhF@J;++h!sr>v^};ExoEPl= zU?aI3N5X@vFb&V+%L4+yGqgT8Cf#}bZLlqq!85eU%88BMy6ldz)5|7f0}h_9>C8%= z$}HSPJ6mEJsicE?QV6Lk+S)d<)37OO0=oHL#P4ftSpg~CB^X+VUUaHxv1^ZyN=(_R^E%95$LJv;0Tp}8d1nwJSi-n$(>RH`t z!9G|$x*nf9#+Ln7sG>Uiv}Fo=^dkbZFQ_^~)KM)>rx+*j3u7=3(%GUXrkcGPEfps6 zk_&~Tc{ZS86z+W&06#>UR2({Xe~p%Fkf zKRynvvKbmBtXpN;8Jo==<88|ApFukb6J+x?0cD@+W?Ek9NDzu4(G-eA)O`KJE7|?eP9QrR)x<#5zt4mOYA?XuyWTPNV9w$o*pfSC$mGhJ`! zAhZbncbU=B5y3YiRi089Jc3uXQc>`!6YN24HGtmwh~W7-GL9HaJ*=d&Qzc}MPq1eP z?W;~^K1w2jgND0^iXTuNH{k+BRrS zb)?ILTu~m{wJQO-P%X79<)U^+aL6PJT|9rHJz=A*rI=kpaKuC`#hB(rwbXH~#wam@ zAM5~Q9-WAqZOXu3bnT)Ov?KVHiKtyB8xEs;HWUyW$bCWj8o)9haGr;)U0 zU=&^sF1rhQt(IN#M1PV)$B1bk+#|vSKGK#nC2OlJiEzk~;t^!w(6O`2E#;D-0>CYF zb}B^xN>E{dyre66TSdx;OOF)q5v2;K^9VQ5O~e)u$-4WpZI-S*%el5_Zzon94WC;x!Y4sz{lNoxVh^H8(|u%BZ;zrx7ZN*792b z@|zB{MZ1i?4jNk_pj6VD_Oxpyf02kVen!iKGjww5Cn&x>%`VOZo0&%f^?& z?xai3wk1!6L9yyEM_qU%T*lv?g5ippOj}WA!w6;k?+2X*;YXHnz~&_byAC ziptij^+O|3hLeQx$|De86E!8a;DgcU7=OY)bLYa8V z#E(t23Z-=h%2Ug15;B*j+Ovu}uGwQyEz5ZNG&{S*s@`ELn2tJcs(?>v8CnMsGHLwigy;xf z3BhVwFcb4rNAm7|6CJC{jmVl_2fHuKG3AbMhl904ac|m3A7f^0S6g1c+-T?D#)gx3 z<5~-+LDgo7&5mP{;Rz#&uP8S%{d-v&7<9D*mjv=xy_?FX-e)B8%jHIne+^rJ=YDjJ zsn6g;xK={o*lfekJFGXt`Ouk0P8QZl6$ zK^7eS;Kvb#5cr-n{K*EBUR=xYM{pm~uxhQ5$?u$Pbn-vWXmd4PrG`x7hO6y;l*h?_ zm!qCf@**Ka=|A6;EI8X}&F{a{=;*)5=ula@{(@tXK<)u|Eq?k=Wd1y(eVBB8jyu79 z#5;JGaf|{sv zDn6AUKd&>#$c;bBGGJ-CW}_xj;I!Y{^C@$TzW(>vR8`uvxJs-gYspe`jGFw1IYzes zd)8D5WGjL5lwcun>s$zY!B(PX(lr~kj5Op5Ta$(t<{G*FcUX$j&>b2mTgUE~#o3y- zorlso#?~fMc;u;`6sY=L8oM=rX&xNH;h?W{(A6EiA89zKN~1OJSYfpFKgG@}fd%Qx z0_1L06)3J%ED=RW*FjVx3S6{YM(^j1D`B0F*g-r3q3a^rEXqJ>S^}R{iIP0bs$fyN zwkW;%R3gXjGgA45N>r8uECUv$>mz8Uunj5VjQPf`@qeLe2^O2A#(E1D8d?5lm|K=slUi;O=0|F9xemP@)xTU@0ozu0KR4=gg8`7fKrfr1lZ6JK%H0)K*kJEIfT z>C%<9h}@uZv2m;a6;^epi2zUke(3bNxakeBi<6> zq4&X@P6wS&LRUHN6vfFVF!iqc(F)#vztO^fg3S?Zq#Ab$yqekt2;AZSlvOI;0>!&b zr3qdSzHk`|<4rbL7dM(x(th5o8(%Cl+Qolp*6K}Yj7h-wvpsLI+~^tqF*}VKx~S0)70yGI}qSE;=B9#5SntGx;}Fs398|4Sng# z#hnBWQbj{cnM*Z3g;%aHn)@GOm8!<4sRlPgwVAE?pDT>k@n11F7<6q>KAVVkY>G-DnjnA_A_@ z@kj79*(c)>bQD+EYL#hvL`%Grs%uW*?>+*>53@AYiqS`JNnn>6m#8)-JO4|J#+!6iqFR%{WlF>8Rj6^#va1P##d4Em-p*4?n$OV+9cOb? zGmxzuqdW1?PW17=$co6&xc=%W!yOTk(xA;)W4L+#YNL7lCbLwu_a>sJ``|vb1rYM^ zjjN3T?t{W%RKO1YpV?|W!>6m>5UII4nnmh_8u8_8jArqtOpl)kA<9k$s@n%^jNASH zW3wqBt|I&qt5kUEqsYxqtW?zl1CB_%)uM(!ib2vomQO{Fs|XAc&g@TaeGL8D=jC4sPjo=&p1R5+uUG4(rz$J^lY>k;=2e zRbDTn)mZho(b<29%~lN^Em}~hO6pn$KaSY8ivAWPc1#7!U5^5n-TN{Ov_E?s!GVeKE-MN){XyHaqKD&3Ba=$br^NY%*DK2=hlLB1LO1S-l0j7o>DcB-=OGRGwI zoI%V>8ZU9(j&4i??+6Y#IqY=;V*p>lkh2Gba|)#k&VL=*cm+tgnMZm5QYtI6_P zo5S;vm3Vp*wtydOm-I*NDy12rej>ZcpwBV>HxKUq(q zFZz}pR?c@+HC3gQ6--nT`KG53#Tm07*rzZ4}L9BHV5P{Z7~|)5m0y7O-=KJm<~hghVp4!jheOCq#MXokW8}iP=HA9 zv3$%{qk)(01sO*|Z8s9U?*hKz=99N$m~eQjaVx6&%W&;j5AU-Brfjv%=nsjdy#F>M z$<=r4W&+9l;5H)%CQHUpwu#WgE~u5)uk)4Ljmgo`*;Y0_ zO5JPhFh)6|EA6yJy!dITU;VU^Q#YP1guLocnF~v?`XVDd1YTzzwG;2pd<1x#fZoPf z268(1yq$*M(-ifip_C{D%#sp|0Q)$2G)a7fIc+0J{u{8jBHz-6v3F#^IBZZmBH`zN zodirzMb0tKc>ASGjb^wr?d%A+- zUS7ahd&&9-?;Y?)nY@qiz*Jt8pGI97^CTc>Vg@V8VaI6|B_Rm$A1( z@ZJXR_Yl0-`Z4zNzZxkz`}qNIqUmP9KS z@4$O11g{Dnc;CPCDr*)oHc!##PRB6((OK|f*h%KhN!76kW7B_?{AL*Ug` z1Z5BLi^}RWc=Re5UBSG>nTY?B5X>L%VC=3CJo==34!4WpP3(L-S zp3Xn%dI-!H{#7aZ)j3%D3c)Ly3tzM=RhYzo1MjO4;XXy=6%9fJBm>t9!K(${|J;&U z4Q+=K6Gid+g3v{gxX{w6>KMPi$EfDb0pp^VM?a6wt-3BO$#7Aet9(RcC>{ z@I3J92rDBACS2z5ubKgds|N-FGt505>9&AN(E9l!PEU>~JE4PGstz89%{7jU$M z%~zrIkgz}C+Y;79$=)g9!+>K1^!^4o+r!^~0S240jp3Q)V_@VtUf9Vq#Td1lUrPGhQgT3GS`OTQR z2(k8MTP)X%VoF|!jTt+CtL2(eZ02OGg*-BG8)XME`Rn-R0C!g&6~*Y$p1erz@J`xo zOLAV{dm1NHd<>XurY=pl^}-3SJjd96RWMPuW}MV*djZ8x09Op5q|gPH1Hmk7L9n>8W{wNp|=OGwiN3F__djgNySz&zI!wC z6+DNOV%-2cDPFL)CEz6sG0&5LWfDfd%GhEFAGTo4gC=z&AYRcy>3ekN2005+1r#sgjv&^!1rHhegEpBLen%if?m zA!2^Ug8v1SIr6rBlUjEvJOg8t)>3#IphLp#fa@i^^Ew9tG~_I_MtL@=j%GKQ9z{TAYfCz@kJQwBH$Pa`_*%xdd+_c)oU_f-%S1r<>J6V z2YXzQJ;QEuu+O;<5}ww0UiOg`ju_%#nNBI(ZkU60lfw4`PLS{tV3mY(u`bX?!WRI$ z2w3quV3=|SL*41-pnoGm^TNQ3BpF=6;bL#Vs~xDbLTbQ&im*PINs1Dzv}0hvfN(e8 zfY%#5^ey5F)_Ht{%YnlheRU&ZD=7Z>Q4Vv7CRlbMcyNh-)zhoU!N!H)JqzCM5WLaF z4s7TV7k}%Z;qyKM!X`KW;vh=D%{T`;%zdw+$o~eMB;kbd4$Sfd^&!9>{0a&DuhhYw z<#S<wdm2l>&OBCO8<@rslm4ZK-IVrYZ@*wM(k|@hpgw4w(NV4 zgY8td{QF+hRGtM?G?YwlUBK%#g|w&6dLpO40dhXzX)k{t1>#A2%7O6_kv+`-`|x z-sNELIC+ORkjo~|Ine0~71dZLp}7qUhrmX0cgWYZ>xJ1Q7 zybkQ$(+(VruH#l?ZTuuvS!W#VCX>hSd)tWi3<51)rF$ZbtPm zwaTsdp}U-5!Cl~?C3x5HS5)o;9-uN2EEn;$U58Eh1NYCwqay$>M)6KrB$jN2ZwPdlFMt{|Pw7On6|B=x?-KMP)p2D62OmIa7x{gW0TQ zK)4KB=G(Db0>WW6SzT1({R6^@O5iCad6Dj+l~V%vf$3fppf^{mMM3pq%LBssZ9Hs@ z)A|!U+ewU~iVy3-UNhzso{i$r&*^Z}zO6<1(OauaI= z9y%+<8(S<9Rg>@D{P0@`Cei(0b;quH*Knuzx?oR4;54rkyia7z9lvw1*9gW}eB8tF zy@MSx)fZ^(P+yb1hDVsOih_nJU}ktCfM?A`(IjS{2T!R)ORG1;P?D=TFW7m!$Gb+1 z=R1(_Sutv-+?O1zi5a8TK_QDLwg9iLNOoNZyA?kcn}X(wCVef5z^MXSlC-=Wzk@$!z~IY>!@Cm*mDFFxds z?c~5Z%E(4eb4d{zZJs%!Jg$k8J#1?H4ijm4IoO_}&ES2_R~*Fzz2q#m6P3UhOk?@>uo*3b1D+P z52&Q1`}EFnvhgM_(0%r_cCzP$J>eMRbDgNml=3OJ0rr=8o`l9wUbEuPbRfLpYK@I91 zVCHG2?O6&M)XZJr-D~nDkGGVf?hbRJSw!ai9elR|-)+j-mmA&g> zi@Z3~iO+2O&v1JjDS{PR zu*iZFEjZhP3oKY=!L=6L0+`G@J?V|*8~$f_+*6%w6F-jDMW%NAOebE?6w$5({F0|q z5@*b!K!W-JV4Q?c0IDSJwBU;teA9yewcr&~*C)8dg3kf&=9#BJ9Ww{DPr|zZPw^{XK--{sPWG9X_c;Y^nG2nm5ewn1 z7EE7cQrB3}x7dk;0)%XH3-+{Nses47G!orF2_iPn+9i|?3gvwfa7?6(xYi>??sOXD zc7WW;fA|vV`H(v?-6yi=G$58J2>MowE{|YGKt-Jjm?H(A0?gp)XCUw~V61@N3xFfS z`1_}!_~s2%Ne}ICPf55H@Bs;1Kka0zCHw#|nP;Ab>~}kzD9TL4=~_zB>n5>9*G$(Boa4NxlcM!w)=k45lT&cbasAJWlzcLEM^ zNOIWgrm<51YjNK<@b^5x|EBQf-ymS*X{r%K_H+T9$vaI!yPf|H+UIv9|fE)sgZae zdb&-`yd*Q_6@VRVtOGS&wCZXWL<-)Fd0lGx5)g+HQ_jv=@R9|8vEZM8Di4vVF0>3H z*aE<?a>(#@>I=cUzcYkk}Iix|jz-Ki%eO#=5 zh=9YfH7+Scgfj=g$z*)yRFr;_cz7Wq459P6!4)nxG(^BCtib*qf>(X0ixq|7O#p94 z2%dkKi>xPJ+#&0 zz|({GK%I$f2zdQQ< zQ#?0Uy4c z@Ee%*`Fv^|Qz&F7AFoe?8 z54y}9puveb4qm8&{qKWl&}&*2RO)47E>^ihHrl;bxY()?iTMh=P`%5{hg|GMdpMnc zN<)i>UFKSBa4tH7r`O0Ab0oe;d8;8p0|QNc=I0<&3&fak$W55cRp zGISlt15X)S*N+mRhKOy!JQ+f1>?1BVQiTjo=(JTXhK(-b3g+c;7sl2r`nu)bijN+5 zvAaTu_E{g=z0xb3mA42Ck@J>ixh0d_}NxG&#;bNUb1l$8&s8QB`!CM_7 z+=M4FX8l(l{48^mi+%R5OuQ=bA2ebia+vuPhHfFk)z}=G_cM60I-K@%`c3h8x477! znyKz|Bc5Zci%nLv;1Znz9yV==E137~w$LN6^t0PhD?@a(vv#>~;2t&M?f?61=t`gU zT~u&g7XtVLn&wMHgG) z;@2)?_VnlhwC++O`V|+8ldujT_JdKlx`6n08^MKuSbQS*B%q)7C%FGLnh+7S;-=T3 zK^ffYL}X#K0WUWMZyI=8LhzCfW1+fQUr;@9?aQaE&VK^K` z1v9&M%?k%FhJN4*4wn$f8z-gkpOn=PWCrkB-GEmB-f$%y9N`A=>hWpUknO{O4JEuN zsAq_3yoc_N3)mR&poHH6Hj*&*eexv|c%;(jc3^d#f(-!`i}Qf#_W^EG(d(fB{iG~q ze}F-v3~@JLYYCqP43ls_;1GW3I#kv;=E8x%Li-fJ9D<2%AZ+oyhKC3f*z5T59rrDb z#PK@U@hP>ZKeF1y9F+nc^Sj`^rHU_@_s}U9Tds;Pm{h7tvqSK9dm%zh=g)XYgb)K{02o|k&1D;(;M(w-hh`Ek_V6J1m@GqK*5Rm0lY_4hZM}a_j?!fs3HyKExBm5RKdI| z@XUg-HeAS(*$HN3giK9vz!!g`N;==+OYj^5#3o*X;a6SQ^GVP<6Yx<7f862odt&~8 z6HAGnfY|0s!p~c<_Ma{+l?rN4K%C%60wsX81$55;lh1SbYI@d#lq0z(0Gmk2{&LZl zH44)gu$qK}0de9cQ6Br}$ z7xcCRe2@3%)nfTnm(T5~7U8A`7{u}eV*erOi8|!-_?Zto(NcbaQgoJ-s(39rIs=Sa*1e5}GzJY%(p{Sy+kjyb9s^Xe?zSikLG|_q#4{t2|KT`&Xc**TXK3Ga-Q%8>N| zn=10HU14Dv&3M3X`R?kzgdu%yhLKd0(B8DVwEM1ZZnjQ!Rl&U8x47A_A;NX;MF}AF z6-9s%AynMn2VyG94na{b1rI}CaRu|*-Rj1E&VT3K1s*o%=x}-kLguHm(9LRFOr=8d z77uir``op15+LzQ;7#X;qI?O?QG@s`(P&}j4sz3DooEy)A50!cu;R@jZ~&z?U)|{j zTIE~dMJif8yH=^7kpB?8T8hv~GjJzeSHP>SEEvo)hNB^|!i_eAQovL&@#dDef&=aV zPmd*ndFR2?1LR#JvZ(6-<0N&rMcrpnk6P3ZE$X*`_sC#n zGu@bKi41)K_`HM<-$AXPpzZ{Wk???ka}8wvDBw0py#tH6c#=XU*$s%TQaFJb~CT?nqXe;U2b->s$0Rld2`(iPwT`L%qyyNvqwldF7N_JuD{MlVTK48 zyTEeqV5OPheW`{k!8~Irid4oYR*4l98Eml>{mi-$%%cd1jY9WSm+LcU?{k}PgVJiV zz9=tu-|sf}QU&wA1n+Z|r(oVo54g>FXfW@v#jE&7!rue){SZnYTVWY0Sm}Q7{!rEk z<~_F?t*pvbAP=5p3}f_ynh_3;xEs+*VALE&7Kfs&tvbq+1-3a5>)tc%!5x-8vyQ-@Dspzsp2AF z6yvpOB6Yt5KdSJ<$K9-+!h3;hOYHd=_-me86S43A(2b3IGUx}uofI}cLer*j6W}t1 zR{}3qIQfKypRnOZAG@)oTI!q$d{W`wpI|Jha1n5Gg&(ltmx0?V`foOzb<(0wvf(W@ z{57!7%kRLAl%6`DVtA}@>}PIPSKtJX3H{z7!0>!w!7AWd3hx9S=o560>mm*8&cJG( z)`0H`=yhL0JLTrrV0%x>6&gGWiB!N|5|#mC>4L1i7_ihSg@62+Is`#({EM4i_wp~2 zp`+2C)JYynMl2@*=Sn#6FSOedeg}w8fRI4fzfFPH02MX$8jYldKrvty_oez0JwTs$ zL=@g5ZVw)=$>@Iac#vcv{4?O~0(wV!J!~L0qEUjLtL9-hN%Bd+M^wN`5gzPV5COMa z@B-joDZC-l!#+|v%CV&PyA+<}^I+492)6+cFPuj{sp+8=PRd|Iyb8TS z!u^0)AR=mw6c2VHh;WI3Z>ki1k?Nt%`L!YOD_~P8kzUKg)+&huwLPq>)Zt9?V1J0v zQ5!H>SwFA72lF98J_6WQ2K2h{z1Ulol7Wpp><_7=Z(|P@)r9m6z!W9%U=t5^*b~{) zzo`e4Q~`$qVyTsKI~y=OLgu!zwFeVvA#n-tPoAEJaOZQWSO|JA0B&i|zo>(K~qL#&wjuZ2~PkXl){h9ftg@l5+1h5gE^-Vo&$)l@=>@d zK)-}fS@31RHj?_QMU7ajgQeF7)XP7Gx=+TPy5*kWHI#v80H*Tdnl5a)<8$*GYjT+%(W$!2N>i zor)9m?srP(`twl_j$jel>+u*h1p>0Q9xUJp*aR?Jh8qRg91R3H4yC^X6Hgw*6&zvGc8@tt4dzvVr=Qmb^Par{@0;xv@U{>Ux^{$C zngd>Xh;W0z)AP~b#JmWeUPTlHvl#f(EBdnOBmoag)=VN<-x1QLU;>cnuJFz zc-|E7R^RPmzqmy>@3rSW?3zpJ_-nrh<4@Az?fD`qrc~`+_L7IWRWwyEQ-39**=)gA zEO-JCFSnD9p8mlS1PSK=hD*4>gx+O<*-pN*IdXXL z1ey>jal(S%0e0h#7SuL&Q$ zJ-7t#1awMxH(;8Cj{%Ms(Ca*fh8|~XWFr4}ePM=M1^Ad0&is;w2SVE&fY`fBisu5h zm2e**_AnFmLqP19CU^x9>qrD6PE&s=U;*F+33meCEa5MJ*!oPe)y~iWYJL`AH^2gZ zB?}!BP#8bn62yl9!};!PNo+5PpIH1a0LM#e*RMR7!ii8@0W%23R}5gE;)kw>Bh26CSOFL<;c|=0E$V*&XGnp>?@SWQ4YnI#Rq0P9LP z1@Jxze+L{V;i!w0F_Lv|y2!uCLB?JH$tSsQ0pbNL()1HxO@62~VB{sLh63IU7%pKS z!1o38ru^VxW6`O%#*l6P6%TV^paSe!@Dq(KL_luAZGi10^&B8xa-m3kKbx}k0K+7; z2_SYFw?S*z3-Bh4eM#}O-#l!gl=wfuNC}-+F}9E}0}y*4NO1vRvV@}mRm_h8E)Z02 z?cb48rMS)CR4yW1AHdqYQ(LH*WWi;C*cDFH9{@j<@U3eUGf}<20$#u~m$pde7kE(& zYknmBGhj2mq8(tG!^`kB4T5a|!z9eNs6#Ajkwv`|5HB85u!jL_Nw^yjF9{xT(ra8e zgv#Z`yzNYT2rUJ?U&1(i9R+?x)H;CS5;g{eVLE`?6%g|*K=0!ui}LG$^zZO^X+}j7 zCjlEscpVTnB5Iu1i^<%^j)1iRqa^Wu<2 z-aH>!PL1%gC#A$ez}^x@;e_U)5{?J#Ea6tbX$0fz4rVo@yymOHrEIX-)={a<2d_H6 zLJ7Yg5Np*0*I3jiE$VK-8A8BYFWO60>2XR|gBUOBxCl1{5F7EK!aE1ht0e9*yzC(< z5$E$_ATNX)1J;nR9iUIb-he3*mH~$G;!a4=RKS)JJ_+cRaH}P-3ou1ek6Q4&1>H4F zfiw%Yv*2J0mRqpOf;%jDM8Msh(HB}o7Hh_kV!>Ps7Fuws1(#WHiv zEoy;99cEF-Sk$`#QQN!0g@LfW3R!ma;F(>0$)0}c)D0Z(4jzz-vJ$Yb6#GDmeGCd3 zY_ioCfM~`EUIc6}ptDgOng5JBRGxy{9Z)G81t=9dcPhc>L6RDs2NdZrNEkLiv-4X; z`T?W{k`!N8#*k9iBy~}wTR>6)Cn-`nNLcwKT@NYJ8jG}7kzTP#pDWVW7Rgah#u#4D zRNq9AvOrSm`zg{Oi!@V_=2)ah6=|bIdR39$1WBgea{(}n_wS0*u;ij|lF5j_$&9n5 zBIQ}6!HP5rB%C}+8GlTXo&ZUi=M6lNuKkdy};R-|`9Qg;49k$$yE ziH&5WwHtY{aw`g`iz3}(ktQqBOpuiNhZX5jkdmb7p955>Jp|ZPs=K5Fe*sBl>n}^N zdSg>Cr?E^*dytf1S3sq4fF)R=1Q%I?4*;sd{10Fk8TEN3_@gEG8=%tYX<|m5*+fR2 z3liRvy&0Ykq~!VlDmPlBZL0wVg%n0_Ydi^dW#8)mCD+2ROCYCHoyd)J__0o0jBa51it{p%!uGO zfcqp|H{PUf0_-5EUs==(fH9JK)uLVp^b2a&_)>U{+G>7BK%%Zyj-TW;x4nZ`so6Ay zzZ<+UiZF|(miTHrznsK7l=%D=v)PkiIGB^U878jSHXeZuLs8fU?!%MMc)X^Qh=V|q zaaL3+R%_Gn`b|AnAFI!e@Cry%Y*}xPHPtMjypAEprG;YHzV+b2si0$7aakzgmmTkvk3Q~&4wzsoMcw=G; z-k6()gXw4B4DVU&PQ2=JH%{@JhYcW=Y(Be}Eno}TB0Sh#!j|G(_WN;E&~o+wt70oK zkGN^HFWpB+I^oTB@kd*V9lUt7@5eT;VdL>O?B$QfnJ08Vfy0g3W9QK({1N^J`_Su$ z;dCJUO~!e4f8lQz9vG$ZN5=R%#(#yi?#b9Iz6iUjTv(~X%QVb`k7N5P{EM66_+I=q zYYdA+`)l>Ek1Ctb8|$m(ZGvF;x8zTZ_0{(_!z%RF4F3LDUzTqOj8A`FEWO`^{TX<_ zdmNq&ya5t@0)y`K_X^l+>sx=L@cVacTy!?Tsnz(~gBR3Fk+G_p_!b&6Fh2*!2iL_* zSonPosk{prqrYM|V=ws_OUF9ewG_tQL)dSS-^F}M|Hk%p>Hbxq0|@2JKX7rVw}Koaj~N>&!6h6#y_a=dHK#o4j-Ra>YK1?mZOFS zUfy-5<5qt9cAuNSI^Pk+Td(mQ+B^ACpVPyqtoPN6T#mxNuCBcfr~8ECq3Z6M2RB#s zC1>AU{iC#qw-Wm9nj81+`E5r%3GMgR+Tg=Z(hbFq8hfWc;k(_rcldvNxzYUkct_0M z9n2%5sa5vHzb}r!i7)|7dVfG?n zUGRH-L+hIvD0JqCVdB-*iEw#{uo+0`9NZ%sF;+yos@}qTG53OS3*4dr_X4C0ZqE+G zMMmJBidd)O{yiMO4(=ms;iPcf>5T*EWbGk59{0P_U=`f4+-EjMVsQTkfx6=U zS0-MU#{C3x+70&s$PiSsK@IRpDclF5O_+uI0~tuiG=LK@X%F0skk$UUf0KryJZ6nlR{9YW5CJOflk%M`-SAxG3_nv4GP^>Hw34~SIohWm-fiQPC?kD2t3+}KQ z%!@p+OW;E#dn_DwfSj}jt|h` z{tgm+EAe50F}SB9fl$E~Lue-MHR0SSel`{1hvNPY$`K@1iK4j;_bnB$OCi9k$N@6N z4kIBj2I~%IS%mw?2)z*ZEwzzL+|NV%5ZoX4z&f~(b)iAW{WjzfR%Nj$k}}-!){A(d zX}ec`2qO<>fLpMYFvDHAN5foq<6bczUX9GKt|-{axW_>XRu!jhq1f1)&^jCU-fnq1 z_uHs$oeO zHI2^2x^mD#(n2~;Z4xRpyx%`iFzB-Nqp8Bn?rDHbl|E;fuvt1^?=UZRr8sW$r zHqEk4NbqS=9LYcX)>miMd0$3!+I-{-v^kS;02|}yzVmh9`R9GzonFSbwRgO^ckl&Y zm805vq-_KKHu6bnj^B9VMPJI^?iYPUPM&?y7q_=6-4W^7d+0$DFF*Px6xPr9`vrf$hVSn5tmFRyXDOQB diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/version.txt b/Tools/ArdupilotMegaPlanner/bin/Release/version.txt index 0212221d02..1f74e9fd0f 100644 --- a/Tools/ArdupilotMegaPlanner/bin/Release/version.txt +++ b/Tools/ArdupilotMegaPlanner/bin/Release/version.txt @@ -1 +1 @@ -1.1.4493.14496 \ No newline at end of file +1.1.4494.25525 \ No newline at end of file From 7bda35dc28b57df1dc0ff4d2f50ef62549da1af3 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:09:15 +0900 Subject: [PATCH 05/19] AP_OpticalFlow - moved most pin definitions into .cpp file --- .../AP_OpticalFlow_ADNS3080.cpp | 11 ++++++++++ .../AP_OpticalFlow/AP_OpticalFlow_ADNS3080.h | 20 ++++--------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.cpp b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.cpp index b4fb52ddd9..f3e377cdb5 100644 --- a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.cpp +++ b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.cpp @@ -33,6 +33,17 @@ #define AP_SPI_TIMEOUT 1000 +// We use Serial Port 2 in SPI Mode +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define AP_SPI_DATAIN 50 // MISO // PB3 + #define AP_SPI_DATAOUT 51 // MOSI // PB2 + #define AP_SPI_CLOCK 52 // SCK // PB1 +#else // normal arduino SPI pins...these need to be checked + #define AP_SPI_DATAIN 12 //MISO + #define AP_SPI_DATAOUT 11 //MOSI + #define AP_SPI_CLOCK 13 //SCK +#endif + union NumericIntType { int intValue; diff --git a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.h b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.h index fc998e139f..60a26f57d9 100644 --- a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.h +++ b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080.h @@ -3,6 +3,10 @@ #include "AP_OpticalFlow.h" +// default pin settings +#define ADNS3080_CHIP_SELECT 34 // PC3 +#define ADNS3080_RESET 0 // reset pin is unattached by default + // orientations for ADNS3080 sensor #define AP_OPTICALFLOW_ADNS3080_PINS_FORWARD ROTATION_YAW_180 #define AP_OPTICALFLOW_ADNS3080_PINS_FORWARD_RIGHT ROTATION_YAW_135 @@ -19,21 +23,6 @@ // scaler - value returned when sensor is moved equivalent of 1 pixel #define AP_OPTICALFLOW_ADNS3080_SCALER 1.1 -// We use Serial Port 2 in SPI Mode -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - #define AP_SPI_DATAIN 50 // MISO // PB3 - #define AP_SPI_DATAOUT 51 // MOSI // PB2 - #define AP_SPI_CLOCK 52 // SCK // PB1 - #define ADNS3080_CHIP_SELECT 34 // PC3 - #define ADNS3080_RESET 0 // reset pin is unattached by default -#else // normal arduino SPI pins...these need to be checked - #define AP_SPI_DATAIN 12 //MISO - #define AP_SPI_DATAOUT 11 //MOSI - #define AP_SPI_CLOCK 13 //SCK - #define ADNS3080_CHIP_SELECT 10 //SS - #define ADNS3080_RESET 9 //RESET -#endif - // ADNS3080 hardware config #define ADNS3080_PIXELS_X 30 #define ADNS3080_PIXELS_Y 30 @@ -85,7 +74,6 @@ #define ADNS3080_FRAME_RATE_MAX 6469 #define ADNS3080_FRAME_RATE_MIN 2000 - class AP_OpticalFlow_ADNS3080 : public AP_OpticalFlow { private: From 3075a0c5bd8ccddec52adbc98973f83d2fce45ea Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:10:35 +0900 Subject: [PATCH 06/19] AP_OpticalFlow - added support for optical flow for APM2 --- libraries/AP_OpticalFlow/AP_OpticalFlow.h | 1 + .../AP_OpticalFlow_ADNS3080_APM2.cpp | 536 ++++++++++++++++++ .../AP_OpticalFlow_ADNS3080_APM2.h | 141 +++++ 3 files changed, 678 insertions(+) create mode 100644 libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.cpp create mode 100644 libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.h diff --git a/libraries/AP_OpticalFlow/AP_OpticalFlow.h b/libraries/AP_OpticalFlow/AP_OpticalFlow.h index 187499b57e..970b572992 100644 --- a/libraries/AP_OpticalFlow/AP_OpticalFlow.h +++ b/libraries/AP_OpticalFlow/AP_OpticalFlow.h @@ -60,5 +60,6 @@ protected: }; #include "AP_OpticalFlow_ADNS3080.h" +#include "AP_OpticalFlow_ADNS3080_APM2.h" #endif diff --git a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.cpp b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.cpp new file mode 100644 index 0000000000..cb5b5c8be4 --- /dev/null +++ b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.cpp @@ -0,0 +1,536 @@ +/* + AP_OpticalFlow_ADNS3080.cpp - ADNS3080 OpticalFlow Library for Ardupilot Mega + Code by Randy Mackay. DIYDrones.com + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + External ADNS3080 OpticalFlow is connected via Serial port 2 (in SPI mode) + TXD2 = MOSI = pin PH1 + RXD2 = MISO = pin PH0 + XCK2 = SCK = pin PH2 + Chip Select pin is PC4 (33) [PH6 (9)] + We are using the 16 clocks per conversion timming to increase efficiency (fast) + The sampling frequency is 400Hz (Timer2 overflow interrupt) + So if our loop is at 50Hz, our needed sampling freq should be 100Hz, so + we have an 4x oversampling and averaging. + + Methods: + Init() : Initialization of interrupts an Timers (Timer2 overflow interrupt) + Read() : Read latest values from OpticalFlow and store to x,y, surface_quality parameters + +*/ + +#include "AP_OpticalFlow_ADNS3080.h" +#include "SPI.h" +#if defined(ARDUINO) && ARDUINO >= 100 + #include "Arduino.h" +#else + #include "WProgram.h" +#endif + +#define AP_SPI_TIMEOUT 1000 + +// We use Serial Port 2 in SPI Mode +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + #define AP_SPI_DATAIN 15 // MISO + #define AP_SPI_DATAOUT 14 // MOSI + #define AP_SPI_CLOCK PJ2 // SCK +#else // normal arduino SPI pins...these need to be checked + # error Please check the Tools/Board menu to ensure you have selected Arduino Mega as your target. +#endif + +// mask for saving bit order and data mode to avoid interference with other users of the bus +#define UCSR3C_MASK 0x07 + +// SPI3 setting for UCSR3C +#define SPI3_MODE_SPI 0xC0 // UMSEL31 = 1, UMSEL30 = 1 + +// settings for phase and polarity bits of UCSR3C +#define SPI3_MODE_MASK 0x03 +#define SPI3_MODE0 0x00 +#define SPI3_MODE1 0x01 +#define SPI3_MODE2 0x02 +#define SPI3_MODE3 0x03 +#define SPI3_MODE SPI3_MODE3 + +// settings for phase and polarity bits of UCSR3C +#define SPI3_ORDER_MASK 0x04 +#define SPI3_MSBFIRST 0x00 +#define SPI3_LSBFIRST 0x04 + +#define SPI3_SPEED 0x04 // 2 megahertz? + +#define SPI3_DELAY 20 // delay in microseconds after sending data + + +union NumericIntType +{ + int intValue; + unsigned int uintValue; + byte byteValue[2]; +}; + + // Constructors //////////////////////////////////////////////////////////////// +AP_OpticalFlow_ADNS3080_APM2::AP_OpticalFlow_ADNS3080_APM2(int cs_pin, int reset_pin) : _cs_pin(cs_pin), _reset_pin(reset_pin) +{ + num_pixels = ADNS3080_PIXELS_X; + field_of_view = AP_OPTICALFLOW_ADNS3080_08_FOV; + scaler = AP_OPTICALFLOW_ADNS3080_SCALER; +} + +// SPI Methods +// *** INTERNAL FUNCTIONS *** +unsigned char AP_OpticalFlow_ADNS3080_APM2::SPI_transfer(uint8_t data) +{ + + /* Wait for empty transmit buffer */ + while ( !( UCSR3A & (1< 0 ); +} + +// set_led_always_on - set parameter to true if you want LED always on, otherwise false for only when required +void +AP_OpticalFlow_ADNS3080_APM2::set_led_always_on( bool alwaysOn ) +{ + byte regVal = read_register(ADNS3080_CONFIGURATION_BITS); + regVal = (regVal & 0xbf) | (alwaysOn << 6); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_CONFIGURATION_BITS, regVal); +} + +// returns resolution (either 400 or 1600 counts per inch) +int +AP_OpticalFlow_ADNS3080_APM2::get_resolution() +{ + if( (read_register(ADNS3080_CONFIGURATION_BITS) & 0x10) == 0 ) + return 400; + else + return 1600; +} + +// set parameter to 400 or 1600 counts per inch +void +AP_OpticalFlow_ADNS3080_APM2::set_resolution(int resolution) +{ + byte regVal = read_register(ADNS3080_CONFIGURATION_BITS); + + if( resolution == ADNS3080_RESOLUTION_400 ) { + regVal &= ~0x10; + scaler = AP_OPTICALFLOW_ADNS3080_SCALER; + }else if( resolution == ADNS3080_RESOLUTION_1600) { + regVal |= 0x10; + scaler = AP_OPTICALFLOW_ADNS3080_SCALER * 4; + } + + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_CONFIGURATION_BITS, regVal); + + // this will affect conversion factors so update them + update_conversion_factors(); +} + +// get_frame_rate_auto - return whether frame rate is set to "auto" or manual +bool +AP_OpticalFlow_ADNS3080_APM2::get_frame_rate_auto() +{ + byte regVal = read_register(ADNS3080_EXTENDED_CONFIG); + if( (regVal & 0x01) != 0 ) { + return false; + }else{ + return true; + } +} + +// set_frame_rate_auto - set frame rate to auto (true) or manual (false) +void +AP_OpticalFlow_ADNS3080_APM2::set_frame_rate_auto(bool auto_frame_rate) +{ + byte regVal = read_register(ADNS3080_EXTENDED_CONFIG); + delayMicroseconds(SPI3_DELAY); // small delay + if( auto_frame_rate == true ) { + // set specific frame period + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER,0xE0); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER,0x1A); + delayMicroseconds(SPI3_DELAY); // small delay + + // decide what value to update in extended config + regVal = (regVal & ~0x01); + }else{ + // decide what value to update in extended config + regVal = (regVal & ~0x01) | 0x01; + } + write_register(ADNS3080_EXTENDED_CONFIG, regVal); +} + +// get frame period +unsigned int +AP_OpticalFlow_ADNS3080_APM2::get_frame_period() +{ + NumericIntType aNum; + aNum.byteValue[1] = read_register(ADNS3080_FRAME_PERIOD_UPPER); + delayMicroseconds(SPI3_DELAY); // small delay + aNum.byteValue[0] = read_register(ADNS3080_FRAME_PERIOD_LOWER); + return aNum.uintValue; +} + +// set frame period +void +AP_OpticalFlow_ADNS3080_APM2::set_frame_period(unsigned int period) +{ + NumericIntType aNum; + aNum.uintValue = period; + + // set frame rate to manual + set_frame_rate_auto(false); + delayMicroseconds(SPI3_DELAY); // small delay + + // set specific frame period + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER,aNum.byteValue[0]); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER,aNum.byteValue[1]); + +} + +unsigned int +AP_OpticalFlow_ADNS3080_APM2::get_frame_rate() +{ + unsigned long clockSpeed = ADNS3080_CLOCK_SPEED; + unsigned int rate = clockSpeed / get_frame_period(); + return rate; +} + +void +AP_OpticalFlow_ADNS3080_APM2::set_frame_rate(unsigned int rate) +{ + unsigned long clockSpeed = ADNS3080_CLOCK_SPEED; + unsigned int period = (unsigned int)(clockSpeed / (unsigned long)rate); + + set_frame_period(period); +} + +// get_shutter_speed_auto - returns true if shutter speed is adjusted automatically, false if manual +bool +AP_OpticalFlow_ADNS3080_APM2::get_shutter_speed_auto() +{ + byte regVal = read_register(ADNS3080_EXTENDED_CONFIG); + if( (regVal & 0x02) > 0 ) { + return false; + }else{ + return true; + } +} + +// set_shutter_speed_auto - set shutter speed to auto (true), or manual (false) +void +AP_OpticalFlow_ADNS3080_APM2::set_shutter_speed_auto(bool auto_shutter_speed) +{ + byte regVal = read_register(ADNS3080_EXTENDED_CONFIG); + delayMicroseconds(SPI3_DELAY); // small delay + if( auto_shutter_speed ) { + // return shutter speed max to default + write_register(ADNS3080_SHUTTER_MAX_BOUND_LOWER,0x8c); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_SHUTTER_MAX_BOUND_UPPER,0x20); + delayMicroseconds(SPI3_DELAY); // small delay + + // determine value to put into extended config + regVal &= ~0x02; + }else{ + // determine value to put into extended config + regVal |= 0x02; + } + write_register(ADNS3080_EXTENDED_CONFIG, regVal); + delayMicroseconds(SPI3_DELAY); // small delay +} + +// get_shutter_speed_auto - returns true if shutter speed is adjusted automatically, false if manual +unsigned int +AP_OpticalFlow_ADNS3080_APM2::get_shutter_speed() +{ + NumericIntType aNum; + aNum.byteValue[1] = read_register(ADNS3080_SHUTTER_UPPER); + delayMicroseconds(SPI3_DELAY); // small delay + aNum.byteValue[0] = read_register(ADNS3080_SHUTTER_LOWER); + return aNum.uintValue; +} + + +// set_shutter_speed_auto - set shutter speed to auto (true), or manual (false) +void +AP_OpticalFlow_ADNS3080_APM2::set_shutter_speed(unsigned int shutter_speed) +{ + NumericIntType aNum; + aNum.uintValue = shutter_speed; + + // set shutter speed to manual + set_shutter_speed_auto(false); + delayMicroseconds(SPI3_DELAY); // small delay + + // set specific shutter speed + write_register(ADNS3080_SHUTTER_MAX_BOUND_LOWER,aNum.byteValue[0]); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_SHUTTER_MAX_BOUND_UPPER,aNum.byteValue[1]); + delayMicroseconds(SPI3_DELAY); // small delay + + // larger delay + delay(50); + + // need to update frame period to cause shutter value to take effect + aNum.byteValue[1] = read_register(ADNS3080_FRAME_PERIOD_UPPER); + delayMicroseconds(SPI3_DELAY); // small delay + aNum.byteValue[0] = read_register(ADNS3080_FRAME_PERIOD_LOWER); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER,aNum.byteValue[0]); + delayMicroseconds(SPI3_DELAY); // small delay + write_register(ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER,aNum.byteValue[1]); + delayMicroseconds(SPI3_DELAY); // small delay +} + +// clear_motion - will cause the Delta_X, Delta_Y, and internal motion registers to be cleared +void +AP_OpticalFlow_ADNS3080_APM2::clear_motion() +{ + write_register(ADNS3080_MOTION_CLEAR,0xFF); // writing anything to this register will clear the sensor's motion registers + x = 0; + y = 0; + dx = 0; + dy = 0; + _motion = false; +} + +// get_pixel_data - captures an image from the sensor and stores it to the pixe_data array +void +AP_OpticalFlow_ADNS3080_APM2::print_pixel_data(Stream *serPort) +{ + int i,j; + bool isFirstPixel = true; + byte regValue; + byte pixelValue; + + // write to frame capture register to force capture of frame + write_register(ADNS3080_FRAME_CAPTURE,0x83); + + // wait 3 frame periods + 10 nanoseconds for frame to be captured + delayMicroseconds(1510); // min frame speed is 2000 frames/second so 1 frame = 500 nano seconds. so 500 x 3 + 10 = 1510 + + // display the pixel data + for( i=0; iprintln("failed to find first pixel"); + } + isFirstPixel = false; + pixelValue = ( regValue << 2); + serPort->print(pixelValue,DEC); + if( j!= ADNS3080_PIXELS_X-1 ) + serPort->print(","); + delayMicroseconds(SPI3_DELAY); + } + serPort->println(); + } + + // hardware reset to restore sensor to normal operation + reset(); +} diff --git a/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.h b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.h new file mode 100644 index 0000000000..cca404d5ba --- /dev/null +++ b/libraries/AP_OpticalFlow/AP_OpticalFlow_ADNS3080_APM2.h @@ -0,0 +1,141 @@ +#ifndef AP_OPTICALFLOW_ADNS3080_APM2_H +#define AP_OPTICALFLOW_ADNS3080_APM2_H + +#include "AP_OpticalFlow.h" + +// default pin settings +#define ADNS3080_CHIP_SELECT 34 // PC3 +#define ADNS3080_RESET 0 // reset pin is unattached by default + +// orientations for ADNS3080 sensor +#define AP_OPTICALFLOW_ADNS3080_PINS_FORWARD ROTATION_YAW_180 +#define AP_OPTICALFLOW_ADNS3080_PINS_FORWARD_RIGHT ROTATION_YAW_135 +#define AP_OPTICALFLOW_ADNS3080_PINS_RIGHT ROTATION_YAW_90 +#define AP_OPTICALFLOW_ADNS3080_PINS_BACK_RIGHT ROTATION_YAW_45 +#define AP_OPTICALFLOW_ADNS3080_PINS_BACK ROTATION_NONE +#define AP_OPTICALFLOW_ADNS3080_PINS_BACK_LEFT ROTATION_YAW_315 +#define AP_OPTICALFLOW_ADNS3080_PINS_LEFT ROTATION_YAW_270 +#define AP_OPTICALFLOW_ADNS3080_PINS_FORWARD_LEFT ROTATION_YAW_225 + +// field of view of ADNS3080 sensor lenses +#define AP_OPTICALFLOW_ADNS3080_08_FOV 0.202458 // 11.6 degrees + +// scaler - value returned when sensor is moved equivalent of 1 pixel +#define AP_OPTICALFLOW_ADNS3080_SCALER 1.1 + +// ADNS3080 hardware config +#define ADNS3080_PIXELS_X 30 +#define ADNS3080_PIXELS_Y 30 +#define ADNS3080_CLOCK_SPEED 24000000 + +// Register Map for the ADNS3080 Optical OpticalFlow Sensor +#define ADNS3080_PRODUCT_ID 0x00 +#define ADNS3080_REVISION_ID 0x01 +#define ADNS3080_MOTION 0x02 +#define ADNS3080_DELTA_X 0x03 +#define ADNS3080_DELTA_Y 0x04 +#define ADNS3080_SQUAL 0x05 +#define ADNS3080_PIXEL_SUM 0x06 +#define ADNS3080_MAXIMUM_PIXEL 0x07 +#define ADNS3080_CONFIGURATION_BITS 0x0a +#define ADNS3080_EXTENDED_CONFIG 0x0b +#define ADNS3080_DATA_OUT_LOWER 0x0c +#define ADNS3080_DATA_OUT_UPPER 0x0d +#define ADNS3080_SHUTTER_LOWER 0x0e +#define ADNS3080_SHUTTER_UPPER 0x0f +#define ADNS3080_FRAME_PERIOD_LOWER 0x10 +#define ADNS3080_FRAME_PERIOD_UPPER 0x11 +#define ADNS3080_MOTION_CLEAR 0x12 +#define ADNS3080_FRAME_CAPTURE 0x13 +#define ADNS3080_SROM_ENABLE 0x14 +#define ADNS3080_FRAME_PERIOD_MAX_BOUND_LOWER 0x19 +#define ADNS3080_FRAME_PERIOD_MAX_BOUND_UPPER 0x1a +#define ADNS3080_FRAME_PERIOD_MIN_BOUND_LOWER 0x1b +#define ADNS3080_FRAME_PERIOD_MIN_BOUND_UPPER 0x1c +#define ADNS3080_SHUTTER_MAX_BOUND_LOWER 0x1e +#define ADNS3080_SHUTTER_MAX_BOUND_UPPER 0x1e +#define ADNS3080_SROM_ID 0x1f +#define ADNS3080_OBSERVATION 0x3d +#define ADNS3080_INVERSE_PRODUCT_ID 0x3f +#define ADNS3080_PIXEL_BURST 0x40 +#define ADNS3080_MOTION_BURST 0x50 +#define ADNS3080_SROM_LOAD 0x60 + +// Configuration Bits +#define ADNS3080_LED_MODE_ALWAYS_ON 0x00 +#define ADNS3080_LED_MODE_WHEN_REQUIRED 0x01 + +#define ADNS3080_RESOLUTION_400 400 +#define ADNS3080_RESOLUTION_1600 1600 + +// Extended Configuration bits +#define ADNS3080_SERIALNPU_OFF 0x02 + +#define ADNS3080_FRAME_RATE_MAX 6469 +#define ADNS3080_FRAME_RATE_MIN 2000 + + +class AP_OpticalFlow_ADNS3080_APM2 : public AP_OpticalFlow +{ + private: + // bytes to store SPI settings + byte orig_spi_settings_ucsr3c; + byte orig_spi_settings_ubrr3; + + // save and restore SPI settings + void backup_spi_settings(); + void restore_spi_settings(); + + public: + int _cs_pin; // pin used for chip select + int _reset_pin; // pin used for chip reset + bool _motion; // true if there has been motion + bool _overflow; // true if the x or y data buffers overflowed + + public: + AP_OpticalFlow_ADNS3080_APM2(int cs_pin = ADNS3080_CHIP_SELECT, int reset_pin = ADNS3080_RESET); + bool init(bool initCommAPI = true); // parameter controls whether I2C/SPI interface is initialised (set to false if other devices are on the I2C/SPI bus and have already initialised the interface) + byte read_register(byte address); + void write_register(byte address, byte value); + void reset(); // reset sensor by holding a pin high (or is it low?) for 10us. + bool update(); // read latest values from sensor and fill in x,y and totals, return true on successful read + + // ADNS3080 specific features + bool motion() { if( _motion ) { _motion = false; return true; }else{ return false; } } // return true if there has been motion since the last time this was called + + void disable_serial_pullup(); + + bool get_led_always_on(); // returns true if LED is always on, false if only on when required + void set_led_always_on( bool alwaysOn ); // set parameter to true if you want LED always on, otherwise false for only when required + + int get_resolution(); // returns resolution (either 400 or 1600 counts per inch) + void set_resolution(int resolution); // set parameter to 400 or 1600 counts per inch + + bool get_frame_rate_auto(); // get_frame_rate_auto - return true if frame rate is set to "auto", false if manual + void set_frame_rate_auto(bool auto_frame_rate); // set_frame_rate_auto(bool) - set frame rate to auto (true), or manual (false) + + unsigned int get_frame_period(); // get_frame_period - + void set_frame_period(unsigned int period); + + unsigned int get_frame_rate(); + void set_frame_rate(unsigned int rate); + + bool get_shutter_speed_auto(); // get_shutter_speed_auto - returns true if shutter speed is adjusted automatically, false if manual + void set_shutter_speed_auto(bool auto_shutter_speed); // set_shutter_speed_auto - set shutter speed to auto (true), or manual (false) + + unsigned int get_shutter_speed(); + void set_shutter_speed(unsigned int shutter_speed); + + void clear_motion(); // will cause the x,y, dx, dy, and the sensor's motion registers to be cleared + + void print_pixel_data(Stream *serPort); // dumps a 30x30 image to the Serial port + + // SPI functions - we use UAT3 which is not supported by Arduino + unsigned char SPI_transfer(unsigned char data); + void CS_inactive(); + void CS_active(); + void PageErase (uint16_t PageAdr); + void ChipErase (); +}; + +#endif From f18ee75b5ce849bbf4b902f00ee6a2354dcc1a97 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:11:18 +0900 Subject: [PATCH 07/19] AP_OpticalFlow - updated test sketch to allow testing of APM2 version --- .../AP_OpticalFlow_test/AP_OpticalFlow_test.pde | 16 +++++++++------- libraries/AP_OpticalFlow/keywords.txt | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/libraries/AP_OpticalFlow/examples/AP_OpticalFlow_test/AP_OpticalFlow_test.pde b/libraries/AP_OpticalFlow/examples/AP_OpticalFlow_test/AP_OpticalFlow_test.pde index 5e8324651b..b959dc7d10 100644 --- a/libraries/AP_OpticalFlow/examples/AP_OpticalFlow_test/AP_OpticalFlow_test.pde +++ b/libraries/AP_OpticalFlow/examples/AP_OpticalFlow_test/AP_OpticalFlow_test.pde @@ -19,19 +19,21 @@ // FastSerialPort0(Serial); // FTDI/console -AP_OpticalFlow_ADNS3080 flowSensor; -//AP_OpticalFlow_ADNS3080 flowSensor(A3); // override chip select pin to use A3 if using APM2 +AP_OpticalFlow_ADNS3080 flowSensor; // for APM1 +//AP_OpticalFlow_ADNS3080_APM2 flowSensor(A3); // override chip select pin to use A3 if using APM2 void setup() -{ +{ Serial.begin(115200); Serial.println("ArduPilot Mega OpticalFlow library test ver 1.5"); delay(1000); - + // flowSensor initialization - if( flowSensor.init() == false ) - Serial.println("Failed to initialise ADNS3080"); + if( flowSensor.init(true) == false ) { + Serial.print("Failed to initialise ADNS3080 "); + } + flowSensor.set_orientation(AP_OPTICALFLOW_ADNS3080_PINS_FORWARD); flowSensor.set_field_of_view(AP_OPTICALFLOW_ADNS3080_08_FOV); @@ -336,7 +338,7 @@ void display_motion() void loop() { int value; - + // display menu to user display_menu(); diff --git a/libraries/AP_OpticalFlow/keywords.txt b/libraries/AP_OpticalFlow/keywords.txt index 1bcb812592..8393f31ece 100644 --- a/libraries/AP_OpticalFlow/keywords.txt +++ b/libraries/AP_OpticalFlow/keywords.txt @@ -1,5 +1,6 @@ AP_OpticalFlow KEYWORD1 AP_OpticalFlow_ADNS3080 KEYWORD1 +AP_OpticalFlow_ADNS3080_APM2 KEYWORD1 init KEYWORD2 read KEYWORD2 update KEYWORD2 From c45b124cbef4360454d03815284cf1668593587e Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:14:45 +0900 Subject: [PATCH 08/19] DataFlash_APM2 - moved CS_inactive call (which disables the dataflash) from the beginning to the end of all methods. This means the dataflash does not monopolize the SPI bus. Also formatting changes to use tab instead of space. Sorry, should have done this as a separate check-in to the above changes. --- libraries/DataFlash/DataFlash_APM2.cpp | 322 ++++++++++++++----------- 1 file changed, 181 insertions(+), 141 deletions(-) diff --git a/libraries/DataFlash/DataFlash_APM2.cpp b/libraries/DataFlash/DataFlash_APM2.cpp index a1a2897fc3..8f5fd5204b 100644 --- a/libraries/DataFlash/DataFlash_APM2.cpp +++ b/libraries/DataFlash/DataFlash_APM2.cpp @@ -91,14 +91,16 @@ unsigned char DataFlash_APM2::SPI_transfer(unsigned char data) return UDR3; } +// disable device void DataFlash_APM2::CS_inactive() { - digitalWrite(DF_SLAVESELECT,HIGH); //disable device + digitalWrite(DF_SLAVESELECT,HIGH); } +// enable device void DataFlash_APM2::CS_active() { - digitalWrite(DF_SLAVESELECT,LOW); //enable device + digitalWrite(DF_SLAVESELECT,LOW); } // Constructors //////////////////////////////////////////////////////////////// @@ -109,223 +111,261 @@ DataFlash_APM2::DataFlash_APM2() // Public Methods ////////////////////////////////////////////////////////////// void DataFlash_APM2::Init(void) { - pinMode(DF_DATAOUT, OUTPUT); - pinMode(DF_DATAIN, INPUT); - pinMode(DF_SLAVESELECT,OUTPUT); - pinMode(DF_RESET,OUTPUT); - pinMode(DF_CARDDETECT, INPUT); + pinMode(DF_DATAOUT, OUTPUT); + pinMode(DF_DATAIN, INPUT); + pinMode(DF_SLAVESELECT,OUTPUT); + pinMode(DF_RESET,OUTPUT); + pinMode(DF_CARDDETECT, INPUT); - // Reset the chip - digitalWrite(DF_RESET,LOW); - delay(1); - digitalWrite(DF_RESET,HIGH); + // Reset the chip + digitalWrite(DF_RESET,LOW); + delay(1); + digitalWrite(DF_RESET,HIGH); - CS_inactive(); //disable device + // disable device + CS_inactive(); - // Setup Serial Port3 in SPI mode (MSPI), Mode 0, Clock: 8Mhz - UBRR3 = 0; - DDRJ |= (1<> 8) & 0x1F; - - // note that we set df_NumPages to one lower than the highest, as - // the last page is reserved for a config page - if (density_code == 0x7) { - // 32 Mbit - df_NumPages = 8191; - } else if (density_code == 0x6) { - // 16 Mbit - df_NumPages = 4095; - } else { - // what is this??? card not inserted perhaps? - df_NumPages = 0; - } + // see page 22 of the spec for the density code + uint8_t density_code = (df_device >> 8) & 0x1F; + + // note that we set df_NumPages to one lower than the highest, as + // the last page is reserved for a config page + if (density_code == 0x7) { + // 32 Mbit + df_NumPages = 8191; + } else if (density_code == 0x6) { + // 16 Mbit + df_NumPages = 4095; + } else { + // what is this??? card not inserted perhaps? + df_NumPages = 0; + } } // This function is mainly to test the device void DataFlash_APM2::ReadManufacturerID() { - CS_inactive(); // Reset dataflash command decoder - CS_active(); + // activate dataflash command decoder + CS_active(); - // Read manufacturer and ID command... - SPI_transfer(DF_READ_MANUFACTURER_AND_DEVICE_ID); + // Read manufacturer and ID command... + SPI_transfer(DF_READ_MANUFACTURER_AND_DEVICE_ID); - df_manufacturer = SPI_transfer(0xff); - df_device = SPI_transfer(0xff); - df_device = (df_device<<8) | SPI_transfer(0xff); - SPI_transfer(0xff); + df_manufacturer = SPI_transfer(0xff); + df_device = SPI_transfer(0xff); + df_device = (df_device<<8) | SPI_transfer(0xff); + SPI_transfer(0xff); + + // release SPI bus for use by other sensors + CS_inactive(); } // This function return 1 if Card is inserted on SD slot bool DataFlash_APM2::CardInserted() { - return (df_NumPages >= 4095 && digitalRead(DF_CARDDETECT) == 0); + return (df_NumPages >= 4095 && digitalRead(DF_CARDDETECT) == 0); } // Read the status register byte DataFlash_APM2::ReadStatusReg() { - CS_inactive(); // Reset dataflash command decoder - CS_active(); + byte tmp; - // Read status command - SPI_transfer(DF_STATUS_REGISTER_READ); - return SPI_transfer(0x00); // We only want to extract the READY/BUSY bit + // activate dataflash command decoder + CS_active(); + + // Read status command + SPI_transfer(DF_STATUS_REGISTER_READ); + tmp = SPI_transfer(0x00); // We only want to extract the READY/BUSY bit + + // release SPI bus for use by other sensors + CS_inactive(); + + return tmp; } // Read the status of the DataFlash inline byte DataFlash_APM2::ReadStatus() { - return(ReadStatusReg()&0x80); // We only want to extract the READY/BUSY bit + return(ReadStatusReg()&0x80); // We only want to extract the READY/BUSY bit } - inline uint16_t DataFlash_APM2::PageSize() { - return(528-((ReadStatusReg()&0x01)<<4)); // if first bit 1 trhen 512 else 528 bytes + return(528-((ReadStatusReg()&0x01)<<4)); // if first bit 1 trhen 512 else 528 bytes } - // Wait until DataFlash is in ready state... void DataFlash_APM2::WaitReady() { - while(!ReadStatus()); + while(!ReadStatus()); } void DataFlash_APM2::PageToBuffer(unsigned char BufferNum, uint16_t PageAdr) { - CS_inactive(); - CS_active(); - if (BufferNum==1) - SPI_transfer(DF_TRANSFER_PAGE_TO_BUFFER_1); - else - SPI_transfer(DF_TRANSFER_PAGE_TO_BUFFER_2); + // activate dataflash command decoder + CS_active(); - if(df_PageSize==512){ - SPI_transfer((unsigned char)(PageAdr >> 7)); - SPI_transfer((unsigned char)(PageAdr << 1)); - }else{ - SPI_transfer((unsigned char)(PageAdr >> 6)); - SPI_transfer((unsigned char)(PageAdr << 2)); - } - SPI_transfer(0x00); // don´t care bytes + if (BufferNum==1) + SPI_transfer(DF_TRANSFER_PAGE_TO_BUFFER_1); + else + SPI_transfer(DF_TRANSFER_PAGE_TO_BUFFER_2); - CS_inactive(); //initiate the transfer - CS_active(); + if(df_PageSize==512){ + SPI_transfer((unsigned char)(PageAdr >> 7)); + SPI_transfer((unsigned char)(PageAdr << 1)); + }else{ + SPI_transfer((unsigned char)(PageAdr >> 6)); + SPI_transfer((unsigned char)(PageAdr << 2)); + } + SPI_transfer(0x00); // don´t care bytes - while(!ReadStatus()); //monitor the status register, wait until busy-flag is high + //initiate the transfer + CS_inactive(); + CS_active(); + + while(!ReadStatus()); //monitor the status register, wait until busy-flag is high + + // release SPI bus for use by other sensors + CS_inactive(); } void DataFlash_APM2::BufferToPage (unsigned char BufferNum, uint16_t PageAdr, unsigned char wait) { - CS_inactive(); // Reset dataflash command decoder - CS_active(); + // activate dataflash command decoder + CS_active(); - if (BufferNum==1) - SPI_transfer(DF_BUFFER_1_TO_PAGE_WITH_ERASE); - else - SPI_transfer(DF_BUFFER_2_TO_PAGE_WITH_ERASE); + if (BufferNum==1) + SPI_transfer(DF_BUFFER_1_TO_PAGE_WITH_ERASE); + else + SPI_transfer(DF_BUFFER_2_TO_PAGE_WITH_ERASE); - if(df_PageSize==512){ - SPI_transfer((unsigned char)(PageAdr >> 7)); - SPI_transfer((unsigned char)(PageAdr << 1)); - }else{ - SPI_transfer((unsigned char)(PageAdr >> 6)); - SPI_transfer((unsigned char)(PageAdr << 2)); - } - SPI_transfer(0x00); // don´t care bytes + if(df_PageSize==512){ + SPI_transfer((unsigned char)(PageAdr >> 7)); + SPI_transfer((unsigned char)(PageAdr << 1)); + }else{ + SPI_transfer((unsigned char)(PageAdr >> 6)); + SPI_transfer((unsigned char)(PageAdr << 2)); + } + SPI_transfer(0x00); // don´t care bytes - CS_inactive(); //initiate the transfer - CS_active(); + //initiate the transfer + CS_inactive(); + CS_active(); - // Check if we need to wait to write the buffer to memory or we can continue... - if (wait) + // Check if we need to wait to write the buffer to memory or we can continue... + if (wait) while(!ReadStatus()); //monitor the status register, wait until busy-flag is high + + // release SPI bus for use by other sensors + CS_inactive(); } void DataFlash_APM2::BufferWrite (unsigned char BufferNum, uint16_t IntPageAdr, unsigned char Data) { - CS_inactive(); // Reset dataflash command decoder - CS_active(); + // activate dataflash command decoder + CS_active(); - if (BufferNum==1) - SPI_transfer(DF_BUFFER_1_WRITE); - else - SPI_transfer(DF_BUFFER_2_WRITE); - SPI_transfer(0x00); //don't cares - SPI_transfer((unsigned char)(IntPageAdr>>8)); //upper part of internal buffer address - SPI_transfer((unsigned char)(IntPageAdr)); //lower part of internal buffer address - SPI_transfer(Data); //write data byte + if (BufferNum==1) + SPI_transfer(DF_BUFFER_1_WRITE); + else + SPI_transfer(DF_BUFFER_2_WRITE); + + SPI_transfer(0x00); // don't care + SPI_transfer((unsigned char)(IntPageAdr>>8)); // upper part of internal buffer address + SPI_transfer((unsigned char)(IntPageAdr)); // lower part of internal buffer address + SPI_transfer(Data); // write data byte + + // release SPI bus for use by other sensors + CS_inactive(); } unsigned char DataFlash_APM2::BufferRead (unsigned char BufferNum, uint16_t IntPageAdr) { - byte tmp; + byte tmp; - CS_inactive(); // Reset dataflash command decoder - CS_active(); + // activate dataflash command decoder + CS_active(); - if (BufferNum==1) - SPI_transfer(DF_BUFFER_1_READ); - else - SPI_transfer(DF_BUFFER_2_READ); - SPI_transfer(0x00); //don't cares - SPI_transfer((unsigned char)(IntPageAdr>>8)); //upper part of internal buffer address - SPI_transfer((unsigned char)(IntPageAdr)); //lower part of internal buffer address - SPI_transfer(0x00); //don't cares - tmp = SPI_transfer(0x00); //read data byte + if (BufferNum==1) + SPI_transfer(DF_BUFFER_1_READ); + else + SPI_transfer(DF_BUFFER_2_READ); - return (tmp); + SPI_transfer(0x00); + SPI_transfer((unsigned char)(IntPageAdr>>8)); //upper part of internal buffer address + SPI_transfer((unsigned char)(IntPageAdr)); //lower part of internal buffer address + SPI_transfer(0x00); //don't cares + tmp = SPI_transfer(0x00); //read data byte + + // release SPI bus for use by other sensors + CS_inactive(); + + return (tmp); } // *** END OF INTERNAL FUNCTIONS *** void DataFlash_APM2::PageErase (uint16_t PageAdr) { - CS_inactive(); //make sure to toggle CS signal in order - CS_active(); //to reset Dataflash command decoder - SPI_transfer(DF_PAGE_ERASE); // Command + // activate dataflash command decoder + CS_active(); - if(df_PageSize==512){ - SPI_transfer((unsigned char)(PageAdr >> 7)); - SPI_transfer((unsigned char)(PageAdr << 1)); - }else{ - SPI_transfer((unsigned char)(PageAdr >> 6)); - SPI_transfer((unsigned char)(PageAdr << 2)); - } + // Send page erase command + SPI_transfer(DF_PAGE_ERASE); - SPI_transfer(0x00); // "dont cares" - CS_inactive(); //initiate flash page erase - CS_active(); - while(!ReadStatus()); + if(df_PageSize==512){ + SPI_transfer((unsigned char)(PageAdr >> 7)); + SPI_transfer((unsigned char)(PageAdr << 1)); + }else{ + SPI_transfer((unsigned char)(PageAdr >> 6)); + SPI_transfer((unsigned char)(PageAdr << 2)); + } + + SPI_transfer(0x00); + + //initiate flash page erase + CS_inactive(); + CS_active(); + while(!ReadStatus()); + + // release SPI bus for use by other sensors + CS_inactive(); } void DataFlash_APM2::ChipErase () { - CS_inactive(); //make sure to toggle CS signal in order - CS_active(); //to reset Dataflash command decoder - // opcodes for chip erase - SPI_transfer(DF_CHIP_ERASE_0); - SPI_transfer(DF_CHIP_ERASE_1); - SPI_transfer(DF_CHIP_ERASE_2); - SPI_transfer(DF_CHIP_ERASE_3); + // activate dataflash command decoder + CS_active(); - CS_inactive(); //initiate flash page erase - CS_active(); - while(!ReadStatus()); -} + // opcodes for chip erase + SPI_transfer(DF_CHIP_ERASE_0); + SPI_transfer(DF_CHIP_ERASE_1); + SPI_transfer(DF_CHIP_ERASE_2); + SPI_transfer(DF_CHIP_ERASE_3); + + //initiate flash page erase + CS_inactive(); + CS_active(); + while(!ReadStatus()); + + // release SPI bus for use by other sensors + CS_inactive(); +} \ No newline at end of file From 919f004b279434aeb0e3c7c9707df847e4270fa8 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:15:16 +0900 Subject: [PATCH 09/19] ArduCopter - changed Optical Flow for APM2 to use A3 pin --- ArduCopter/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ArduCopter/config.h b/ArduCopter/config.h index 983b0a9ccd..cd961e2642 100644 --- a/ArduCopter/config.h +++ b/ArduCopter/config.h @@ -140,7 +140,7 @@ # define PUSHBUTTON_PIN (-1) # define CLI_SLIDER_ENABLED DISABLED # define USB_MUX_PIN 23 -# define OPTFLOW_CS_PIN A6 +# define OPTFLOW_CS_PIN A3 # define BATTERY_PIN_1 1 # define CURRENT_PIN_1 2 #endif From 3e95ade0046298ace8ef1634f70ad1babbac7443 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:15:55 +0900 Subject: [PATCH 10/19] ArduCopter - changed optflow object to be APM2 version if necessary --- ArduCopter/ArduCopter.pde | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index 4871a93fa0..1e39b0abcc 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -199,7 +199,11 @@ static AP_Int8 *flight_modes = &g.flight_mode1; #endif #ifdef OPTFLOW_ENABLED - AP_OpticalFlow_ADNS3080 optflow(OPTFLOW_CS_PIN); + #if CONFIG_APM_HARDWARE == APM_HARDWARE_APM2 + AP_OpticalFlow_ADNS3080_APM2 optflow(OPTFLOW_CS_PIN); + #else + AP_OpticalFlow_ADNS3080 optflow(OPTFLOW_CS_PIN); + #endif #else AP_OpticalFlow optflow; #endif From 533772339ef59dc147d55104d5948ca8e161072a Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 20:17:12 +0900 Subject: [PATCH 11/19] ArduCopter - Attitude.pde - added logging of optical flow pid controller --- ArduCopter/Attitude.pde | 44 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/ArduCopter/Attitude.pde b/ArduCopter/Attitude.pde index f89960bbe5..3001538085 100644 --- a/ArduCopter/Attitude.pde +++ b/ArduCopter/Attitude.pde @@ -586,9 +586,11 @@ static int32_t get_of_roll(int32_t control_roll) { #ifdef OPTFLOW_ENABLED + static int8_t log_counter = 0; // used to slow down logging of PID values to dataflash static float tot_x_cm = 0; // total distance from target static uint32_t last_of_roll_update = 0; int32_t new_roll = 0; + int32_t p,i,d; // check if new optflow data available if( optflow.last_update != last_of_roll_update) { @@ -599,17 +601,35 @@ get_of_roll(int32_t control_roll) // only stop roll if caller isn't modifying roll if( control_roll == 0 && current_loc.alt < 1500) { - new_roll = g.pid_optflow_roll.get_pid(-tot_x_cm, 1.0); // we could use the last update time to calculate the time change + p = g.pid_optflow_roll.get_p(-tot_x_cm); + i = g.pid_optflow_roll.get_i(-tot_x_cm,1.0); // we could use the last update time to calculate the time change + d = g.pid_optflow_roll.get_d(-tot_x_cm,1.0); + new_roll = p+i+d; }else{ g.pid_optflow_roll.reset_I(); tot_x_cm = 0; + p = 0; // for logging + i = 0; + d = 0; } // limit amount of change and maximum angle of_roll = constrain(new_roll, (of_roll-20), (of_roll+20)); + +#if LOGGING_ENABLED == ENABLED + // log output if PID logging is on and we are tuning the rate P, I or D gains + if( g.log_bitmask & MASK_LOG_PID && (g.radio_tuning == CH6_OPTFLOW_KP || g.radio_tuning == CH6_OPTFLOW_KI || g.radio_tuning == CH6_OPTFLOW_KD) ) { + log_counter++; + if( log_counter >= 5 ) { // (update rate / desired output rate) = (100hz / 10hz) = 10 + log_counter = 0; + Log_Write_PID(CH6_OPTFLOW_KP, tot_x_cm, p, i, d, of_roll, tuning_value); + } + } +#endif // LOGGING_ENABLED == ENABLED } // limit max angle of_roll = constrain(of_roll, -1000, 1000); + return control_roll+of_roll; #else return control_roll; @@ -620,9 +640,11 @@ static int32_t get_of_pitch(int32_t control_pitch) { #ifdef OPTFLOW_ENABLED + static int8_t log_counter = 0; // used to slow down logging of PID values to dataflash static float tot_y_cm = 0; // total distance from target static uint32_t last_of_pitch_update = 0; int32_t new_pitch = 0; + int32_t p,i,d; // check if new optflow data available if( optflow.last_update != last_of_pitch_update ) { @@ -633,18 +655,36 @@ get_of_pitch(int32_t control_pitch) // only stop roll if caller isn't modifying pitch if( control_pitch == 0 && current_loc.alt < 1500 ) { - new_pitch = g.pid_optflow_pitch.get_pid(tot_y_cm, 1.0); // we could use the last update time to calculate the time change + p = g.pid_optflow_pitch.get_p(tot_y_cm); + i = g.pid_optflow_pitch.get_i(tot_y_cm, 1.0); // we could use the last update time to calculate the time change + d = g.pid_optflow_pitch.get_d(tot_y_cm, 1.0); + new_pitch = p + i + d; }else{ tot_y_cm = 0; g.pid_optflow_pitch.reset_I(); + p = 0; // for logging + i = 0; + d = 0; } // limit amount of change of_pitch = constrain(new_pitch, (of_pitch-20), (of_pitch+20)); + +#if LOGGING_ENABLED == ENABLED + // log output if PID logging is on and we are tuning the rate P, I or D gains + if( g.log_bitmask & MASK_LOG_PID && (g.radio_tuning == CH6_OPTFLOW_KP || g.radio_tuning == CH6_OPTFLOW_KI || g.radio_tuning == CH6_OPTFLOW_KD) ) { + log_counter++; + if( log_counter >= 5 ) { // (update rate / desired output rate) = (100hz / 10hz) = 10 + log_counter = 0; + Log_Write_PID(CH6_OPTFLOW_KP+100, tot_y_cm, p, i, d, of_pitch, tuning_value); + } + } +#endif // LOGGING_ENABLED == ENABLED } // limit max angle of_pitch = constrain(of_pitch, -1000, 1000); + return control_pitch+of_pitch; #else return control_pitch; From fd2409a73072535a24e106c723bf3594181f1c44 Mon Sep 17 00:00:00 2001 From: Michael Oborne Date: Sat, 21 Apr 2012 21:37:12 +0800 Subject: [PATCH 12/19] APM Planner 1.1.73 fix udp and tcp connections --- Tools/ArdupilotMegaPlanner/Log.cs | 8 - Tools/ArdupilotMegaPlanner/MainV2.cs | 2 +- Tools/ArdupilotMegaPlanner/Msi/installer.bat | 4 +- Tools/ArdupilotMegaPlanner/Msi/installer.wxs | 337 +++++++++--------- Tools/ArdupilotMegaPlanner/Msi/wix.pdb | Bin 19968 -> 19968 bytes .../Properties/AssemblyInfo.cs | 2 +- .../bin/Release/ArdupilotMegaPlanner.pdb | Bin 1183232 -> 1183232 bytes .../bin/Release/version.txt | 2 +- 8 files changed, 173 insertions(+), 182 deletions(-) diff --git a/Tools/ArdupilotMegaPlanner/Log.cs b/Tools/ArdupilotMegaPlanner/Log.cs index c5b6b1f1a5..5bef471ab6 100644 --- a/Tools/ArdupilotMegaPlanner/Log.cs +++ b/Tools/ArdupilotMegaPlanner/Log.cs @@ -209,8 +209,6 @@ namespace ArdupilotMega sw.Close(); TextReader tr = new StreamReader(logfile); - MainV2.cs.firmware = MainV2.Firmwares.ArduPlane; - this.Invoke((System.Windows.Forms.MethodInvoker)delegate() { TXT_seriallog.AppendText("Createing KML for " + logfile); @@ -373,8 +371,6 @@ namespace ArdupilotMega if (position[positionindex] == null) position[positionindex] = new List(); - MainV2.cs.firmware = MainV2.Firmwares.ArduCopter2; - double alt = double.Parse(items[5], new System.Globalization.CultureInfo("en-US")); position[positionindex].Add(new Point3D(double.Parse(items[4], new System.Globalization.CultureInfo("en-US")), double.Parse(items[3], new System.Globalization.CultureInfo("en-US")), alt)); @@ -812,8 +808,6 @@ namespace ArdupilotMega TextReader tr = new StreamReader(logfile); - MainV2.cs.firmware = MainV2.Firmwares.ArduPlane; - while (tr.Peek() != -1) { processLine(tr.ReadLine()); @@ -887,8 +881,6 @@ namespace ArdupilotMega { TextReader tr = new StreamReader(logfile); - MainV2.cs.firmware = MainV2.Firmwares.ArduPlane; - while (tr.Peek() != -1) { processLine(tr.ReadLine()); diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs index 0e684d98f4..1ec1a49d08 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.cs @@ -556,7 +556,7 @@ namespace ArdupilotMega { comPort.BaseStream = new TcpSerial(); } - if (_connectionControl.CMB_serialport.Text == "UDP") + else if (_connectionControl.CMB_serialport.Text == "UDP") { comPort.BaseStream = new UdpSerial(); } diff --git a/Tools/ArdupilotMegaPlanner/Msi/installer.bat b/Tools/ArdupilotMegaPlanner/Msi/installer.bat index a24e75791b..dcececb614 100644 --- a/Tools/ArdupilotMegaPlanner/Msi/installer.bat +++ b/Tools/ArdupilotMegaPlanner/Msi/installer.bat @@ -7,10 +7,10 @@ del installer.wixobj "%wix%\bin\candle" installer.wxs -ext WiXNetFxExtension -ext WixDifxAppExtension -ext WixUIExtension.dll -ext WixUtilExtension -"%wix%\bin\light" installer.wixobj "%wix%\bin\difxapp_x86.wixlib" -o APMPlanner32.msi -ext WiXNetFxExtension -ext WixDifxAppExtension -ext WixUIExtension.dll -ext WixUtilExtension +"%wix%\bin\light" installer.wixobj "%wix%\bin\difxapp_x86.wixlib" -o MissionPlanner32.msi -ext WiXNetFxExtension -ext WixDifxAppExtension -ext WixUIExtension.dll -ext WixUtilExtension -"%wix%\bin\light" installer.wixobj "%wix%\bin\difxapp_x64.wixlib" -o APMPlanner64.msi -ext WiXNetFxExtension -ext WixDifxAppExtension -ext WixUIExtension.dll -ext WixUtilExtension +"%wix%\bin\light" installer.wixobj "%wix%\bin\difxapp_x64.wixlib" -o MissionPlanner64.msi -ext WiXNetFxExtension -ext WixDifxAppExtension -ext WixUIExtension.dll -ext WixUtilExtension pause diff --git a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs index 74d460a504..2263472dd6 100644 --- a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs +++ b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs @@ -2,14 +2,14 @@ - + - - + + @@ -31,7 +31,7 @@ - + @@ -67,191 +67,190 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - + + + + + + - - - + + + - - - + + + - - - + + + @@ -293,27 +292,27 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/ArdupilotMegaPlanner/Msi/wix.pdb b/Tools/ArdupilotMegaPlanner/Msi/wix.pdb index dce25ed5af27984f4d1ad7f0ae18f43eebc7973d..8902849b6ab3d1d5e688af3df087677246baab1e 100644 GIT binary patch delta 522 zcmZpe!`Lu~aRUpNgva(t{)`L^44o#67b$<<;Jf;8?HRu0h_KBvTyF$fndV%~IJ}ux zrj?0Naq?uj<4j!wlVjwwfSlv<*^G*tjTNQ?Wj3EyY6mF@R^86j5ww{{Z5q&8N*WTyF$fH>y@PwQlB> zX=P$mm^@kTIMXzq$uaU-K+bXbY(|C6#tPGcGMi5;wSyD{t8Qm<2;0n~wvLIZTy*mu z4Lv51hBsPiAW7|Hpvvvq(R`ET#keLJacowx3SeQG@ppsVVqgOiV33*zV}aZY5*MB5C|u9T5L_Y+Jmbs|FFOXJBF|O@T=REzIfwa(bZx zObo~t=9h>9oqiQA2h#;Il!4(Dkf_2g*O0=*z+ex=AONMnY(@sb>4J+{7#J+TT#)4S V$*Uctfoe9NaIj&<6TL1^I01YEUd#Xh diff --git a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs index 672addbd35..cb2a8ac978 100644 --- a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs +++ b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ using System.Resources; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.1.*")] -[assembly: AssemblyFileVersion("1.1.72")] +[assembly: AssemblyFileVersion("1.1.73")] [assembly: NeutralResourcesLanguageAttribute("")] diff --git a/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb b/Tools/ArdupilotMegaPlanner/bin/Release/ArdupilotMegaPlanner.pdb index bd79f0efdbb1ccb9331c10c706ced183e0dbc441..b4768625fb68b6190a5e5250b74a477d28298884 100644 GIT binary patch delta 54722 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

5mEEb&3-Fr0&`*E|_j4_!m)A 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 z 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 T-V3_-4PuBefB(i^rsn?xM Date: Sat, 21 Apr 2012 23:07:57 +0900 Subject: [PATCH 13/19] AP_Motors - allow tail servo to be reversed. Closes ArduCopter issue #228 --- libraries/AP_Motors/AP_MotorsTri.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/AP_Motors/AP_MotorsTri.cpp b/libraries/AP_Motors/AP_MotorsTri.cpp index 1f973dd808..34bcbc4458 100644 --- a/libraries/AP_Motors/AP_MotorsTri.cpp +++ b/libraries/AP_Motors/AP_MotorsTri.cpp @@ -128,7 +128,11 @@ void AP_MotorsTri::output_armed() // also send out to tail command (we rely on any auto pilot to have updated the rc_yaw->radio_out to the correct value) // note we do not save the radio_out to the motor_out array so it may not appear in the ch7out in the status screen of the mission planner - _rc->OutputCh(AP_MOTORS_CH_TRI_YAW, _rc_yaw->radio_out); + if( _rc_yaw->get_reverse() == true ) { + _rc->OutputCh(AP_MOTORS_CH_TRI_YAW, _rc_yaw->radio_trim - (_rc_yaw->radio_out - _rc_yaw->radio_trim)); + }else{ + _rc->OutputCh(AP_MOTORS_CH_TRI_YAW, _rc_yaw->radio_out); + } // InstantPWM if( _speed_hz == AP_MOTORS_SPEED_INSTANT_PWM ) { From c993049c48c5e444bab244f8e101265e0d7f55d6 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 23:24:57 +0900 Subject: [PATCH 14/19] ArduCopter - combined CH6_DAMP and CH6_STABILIZE_KD tuning parameters to avoid confusion --- ArduCopter/ArduCopter.pde | 5 +---- ArduCopter/defines.h | 4 ++-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index 1e39b0abcc..843d034bea 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -2043,10 +2043,6 @@ static void tuning(){ switch(g.radio_tuning){ - case CH6_DAMP: - g.stabilize_d.set(tuning_value); - break; - case CH6_RATE_KD: g.pid_rate_roll.kD(tuning_value); g.pid_rate_pitch.kD(tuning_value); @@ -2062,6 +2058,7 @@ static void tuning(){ g.pi_stabilize_pitch.kI(tuning_value); break; + case CH6_DAMP: case CH6_STABILIZE_KD: g.stabilize_d = tuning_value; break; diff --git a/ArduCopter/defines.h b/ArduCopter/defines.h index 693f429870..b0a5de2a55 100644 --- a/ArduCopter/defines.h +++ b/ArduCopter/defines.h @@ -145,7 +145,7 @@ // Attitude #define CH6_STABILIZE_KP 1 #define CH6_STABILIZE_KI 2 -#define CH6_STABILIZE_KD 29 +#define CH6_STABILIZE_KD 29 // duplicate with CH6_DAMP #define CH6_YAW_KP 3 #define CH6_YAW_KI 24 // Rate @@ -172,7 +172,7 @@ // altitude controller #define CH6_THR_HOLD_KP 14 #define CH6_Z_GAIN 15 -#define CH6_DAMP 16 +#define CH6_DAMP 16 // duplicate with CH6_YAW_RATE_KD // optical flow controller #define CH6_OPTFLOW_KP 17 From 090f5aaa6f7a2911b2c89f8b990a5b34a36e4df6 Mon Sep 17 00:00:00 2001 From: rmackay9 Date: Sat, 21 Apr 2012 23:46:36 +0900 Subject: [PATCH 15/19] ArduCopter - config.h - set standard RC_SPEED to 125 for helicopter frame --- ArduCopter/config.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ArduCopter/config.h b/ArduCopter/config.h index cd961e2642..ee91206b0e 100644 --- a/ArduCopter/config.h +++ b/ArduCopter/config.h @@ -112,7 +112,11 @@ // default RC speed in Hz if INSTANT_PWM is not used #ifndef RC_FAST_SPEED -# define RC_FAST_SPEED 490 +# if FRAME_CONFIG == HELI_FRAME +# define RC_FAST_SPEED 125 +# else +# define RC_FAST_SPEED 490 +# endif #endif // LED and IO Pins From e22832a832812778708a8da0476e2fb72728fad1 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Sat, 21 Apr 2012 15:17:09 -0700 Subject: [PATCH 16/19] Added a union for casting floats to ints and back when storing Floats to the DataFlash --- ArduCopter/ArduCopter.pde | 6 ++++++ ArduCopter/Log.pde | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ArduCopter/ArduCopter.pde b/ArduCopter/ArduCopter.pde index 843d034bea..a71f252727 100644 --- a/ArduCopter/ArduCopter.pde +++ b/ArduCopter/ArduCopter.pde @@ -488,6 +488,12 @@ static const float radius_of_earth = 6378100; // meters // Used by Mavlink for unknow reasons static const float gravity = 9.81; // meters/ sec^2 +// Unions for getting byte values +union float_int{ + int32_t int_value; + float float_value; +} float_int; + //////////////////////////////////////////////////////////////////////////////// // Location & Navigation diff --git a/ArduCopter/Log.pde b/ArduCopter/Log.pde index 0a0b350168..c26a3de017 100644 --- a/ArduCopter/Log.pde +++ b/ArduCopter/Log.pde @@ -43,6 +43,19 @@ const struct Menu::command log_menu_commands[] PROGMEM = { {"disable", select_logs} }; +static int32_t get_int(float f) +{ + float_int.float_value = f; + return float_int.int_value; +} + +static float get_float(int32_t i) +{ + float_int.int_value = i; + return float_int.float_value; +} + + // A Macro to create the Menu MENU2(log_menu, "Log", log_menu_commands, print_log_menu); From 9c19138fb86c2772f4ed79696a11f5f095cef1d0 Mon Sep 17 00:00:00 2001 From: Jason Short Date: Sat, 21 Apr 2012 15:25:53 -0700 Subject: [PATCH 17/19] Log.pde : Updated Flash Logging to log Floats properly vs scaled integers. --- ArduCopter/Log.pde | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/ArduCopter/Log.pde b/ArduCopter/Log.pde index c26a3de017..e761a8391c 100644 --- a/ArduCopter/Log.pde +++ b/ArduCopter/Log.pde @@ -291,26 +291,21 @@ static void Log_Write_Raw() Vector3f accel = imu.get_accel(); //Vector3f accel_filt = imu.get_accel_filtered(); - gyro *= t7; // Scale up for storage as long integers - accel *= t7; + //gyro *= t7; // Scale up for storage as long integers + //accel *= t7; //accel_filt *= t7; DataFlash.WriteByte(HEAD_BYTE1); DataFlash.WriteByte(HEAD_BYTE2); DataFlash.WriteByte(LOG_RAW_MSG); - DataFlash.WriteLong(gyro.x); - DataFlash.WriteLong(gyro.y); - DataFlash.WriteLong(gyro.z); + DataFlash.WriteLong(get_int(gyro.x)); + DataFlash.WriteLong(get_int(gyro.y)); + DataFlash.WriteLong(get_int(gyro.z)); - - //DataFlash.WriteLong(accels_rot.x * t7); - //DataFlash.WriteLong(accels_rot.y * t7); - //DataFlash.WriteLong(accels_rot.z * t7); - - DataFlash.WriteLong(accel.x); - DataFlash.WriteLong(accel.y); - DataFlash.WriteLong(accel.z); + DataFlash.WriteLong(get_int(accel.x)); + DataFlash.WriteLong(get_int(accel.y)); + DataFlash.WriteLong(get_int(accel.z)); DataFlash.WriteByte(END_BYTE); } @@ -321,9 +316,9 @@ static void Log_Read_Raw() float logvar; Serial.printf_P(PSTR("RAW,")); for (int y = 0; y < 6; y++) { - logvar = (float)DataFlash.ReadLong() / t7; + logvar = get_float(DataFlash.ReadLong()); Serial.print(logvar); - Serial.print(","); + Serial.print(", "); } Serial.println(" "); } @@ -777,7 +772,13 @@ static void Log_Read_Startup() static void Log_Write_Data(int8_t _type, float _data) { - Log_Write_Data(_type, (int32_t)(_data * 1000)); + DataFlash.WriteByte(HEAD_BYTE1); + DataFlash.WriteByte(HEAD_BYTE2); + DataFlash.WriteByte(LOG_DATA_MSG); + DataFlash.WriteByte(_type); + DataFlash.WriteByte(1); + DataFlash.WriteLong(get_int(_data)); + DataFlash.WriteByte(END_BYTE); } static void Log_Write_Data(int8_t _type, int32_t _data) @@ -786,6 +787,7 @@ static void Log_Write_Data(int8_t _type, int32_t _data) DataFlash.WriteByte(HEAD_BYTE2); DataFlash.WriteByte(LOG_DATA_MSG); DataFlash.WriteByte(_type); + DataFlash.WriteByte(0); DataFlash.WriteLong(_data); DataFlash.WriteByte(END_BYTE); } @@ -794,8 +796,15 @@ static void Log_Write_Data(int8_t _type, int32_t _data) static void Log_Read_Data() { int8_t temp1 = DataFlash.ReadByte(); - int32_t temp2 = DataFlash.ReadLong(); - Serial.printf_P(PSTR("DATA: %d, %ld\n"), temp1, temp2); + int8_t temp2 = DataFlash.ReadByte(); + + if(temp2 == 1){ + float temp3 = get_float(DataFlash.ReadLong()); + Serial.printf_P(PSTR("DATA: %d, %1.6f\n"), temp1, temp3); + }else{ + int32_t temp3 = DataFlash.ReadLong(); + Serial.printf_P(PSTR("DATA: %d, %ld\n"), temp1, temp3); + } } // Write an PID packet. Total length : 28 bytes From f27d85cb8ded9fab037ffc520ce48aadbe106167 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 16 Apr 2012 10:26:16 +1000 Subject: [PATCH 18/19] DCM: drop the 'drop z' method the 'drop z' method reduced the impact of noise on omegaI, but it also made us more sensitive to errors in accelerometer calibration and scaling, as demonstated by the logs from Gabor here: http://diydrones.com/xn/detail/705844:Comment:834373 Simulation testing shows that the other noise suppression methods applied in the DCM code, in particular the slope limiting on omegaI the removal of the weighting and the upcoming use of a _omega_I_sum buffer have reduced the impact of noise enough that we can now safely include z in the acceleration calculation. --- libraries/AP_AHRS/AP_AHRS.h | 3 + libraries/AP_AHRS/AP_AHRS_DCM.cpp | 95 ++++++++++++++----------------- 2 files changed, 46 insertions(+), 52 deletions(-) diff --git a/libraries/AP_AHRS/AP_AHRS.h b/libraries/AP_AHRS/AP_AHRS.h index 10e2b90381..90499e2bf9 100644 --- a/libraries/AP_AHRS/AP_AHRS.h +++ b/libraries/AP_AHRS/AP_AHRS.h @@ -102,6 +102,9 @@ protected: // the limit of the gyro drift claimed by the sensors, in // radians/s/s float _gyro_drift_limit; + + // acceleration due to gravity in m/s/s + static const float _gravity = 9.80665; }; #include diff --git a/libraries/AP_AHRS/AP_AHRS_DCM.cpp b/libraries/AP_AHRS/AP_AHRS_DCM.cpp index 2cf29b3249..3b0075a731 100644 --- a/libraries/AP_AHRS/AP_AHRS_DCM.cpp +++ b/libraries/AP_AHRS/AP_AHRS_DCM.cpp @@ -279,7 +279,6 @@ AP_AHRS_DCM::drift_correction(float deltat) Vector3f accel; Vector3f error; float error_norm = 0; - const float gravity_squared = (9.80665*9.80665); float yaw_deltat = 0; accel = _accel_vector; @@ -295,59 +294,51 @@ AP_AHRS_DCM::drift_correction(float deltat) //*****Roll and Pitch*************** - // calculate the z component of the accel vector assuming it - // has a length of 9.8. This discards the z accelerometer - // sensor reading completely. Logs show that the z accel is - // the noisest, plus it has a disproportionate impact on the - // drift correction result because of the geometry when we are - // mostly flat. Dropping it completely seems to make the DCM - // algorithm much more resilient to large amounts of - // accelerometer noise. - float zsquared = gravity_squared - ((accel.x * accel.x) + (accel.y * accel.y)); - if (zsquared < 0) { + // normalise the accelerometer vector to a standard length + // this is important to reduce the impact of noise on the + // drift correction, as very noisy vectors tend to have + // abnormally high lengths. By normalising the length we + // reduce their impact. + float accel_length = accel.length(); + accel *= (_gravity / accel_length); + if (accel.is_inf()) { + // we can't do anything useful with this sample _omega_P.zero(); - } else { - if (accel.z > 0) { - accel.z = sqrt(zsquared); - } else { - accel.z = -sqrt(zsquared); - } - - // calculate the error, in m/2^2, between the attitude - // implied by the accelerometers and the attitude - // in the current DCM matrix - error = _dcm_matrix.c % accel; - - // error from the above is in m/s^2 units. - - // Limit max error to limit the effect of noisy values - // on the algorithm. This limits the error to about 11 - // degrees - error_norm = error.length(); - if (error_norm > 2) { - error *= (2 / error_norm); - } - - // we now want to calculate _omega_P and _omega_I. The - // _omega_P value is what drags us quickly to the - // accelerometer reading. - _omega_P = error * _kp_roll_pitch; - - // the _omega_I is the long term accumulated gyro - // error. This determines how much gyro drift we can - // handle. - Vector3f omega_I_delta = error * (_ki_roll_pitch * deltat); - - // limit the slope of omega_I on each axis to - // the maximum drift rate - float drift_limit = _gyro_drift_limit * deltat; - omega_I_delta.x = constrain(omega_I_delta.x, -drift_limit, drift_limit); - omega_I_delta.y = constrain(omega_I_delta.y, -drift_limit, drift_limit); - omega_I_delta.z = constrain(omega_I_delta.z, -drift_limit, drift_limit); - - _omega_I += omega_I_delta; + return; } + // calculate the error, in m/2^2, between the attitude + // implied by the accelerometers and the attitude + // in the current DCM matrix + error = _dcm_matrix.c % accel; + + // Limit max error to limit the effect of noisy values + // on the algorithm. This limits the error to about 11 + // degrees + error_norm = error.length(); + if (error_norm > 2) { + error *= (2 / error_norm); + } + + // we now want to calculate _omega_P and _omega_I. The + // _omega_P value is what drags us quickly to the + // accelerometer reading. + _omega_P = error * _kp_roll_pitch; + + // the _omega_I is the long term accumulated gyro + // error. This determines how much gyro drift we can + // handle. + Vector3f omega_I_delta = error * (_ki_roll_pitch * deltat); + + // limit the slope of omega_I on each axis to + // the maximum drift rate + float drift_limit = _gyro_drift_limit * deltat; + omega_I_delta.x = constrain(omega_I_delta.x, -drift_limit, drift_limit); + omega_I_delta.y = constrain(omega_I_delta.y, -drift_limit, drift_limit); + omega_I_delta.z = constrain(omega_I_delta.z, -drift_limit, drift_limit); + + _omega_I += omega_I_delta; + // these sums support the reporting of the DCM state via MAVLink _error_rp_sum += error_norm; _error_rp_count++; @@ -470,7 +461,7 @@ AP_AHRS_DCM::drift_correction(float deltat) float omega_Iz_delta = error.z * (_ki_yaw * yaw_deltat); // limit the slope of omega_I.z to the maximum gyro drift rate - float drift_limit = _gyro_drift_limit * yaw_deltat; + drift_limit = _gyro_drift_limit * yaw_deltat; omega_Iz_delta = constrain(omega_Iz_delta, -drift_limit, drift_limit); _omega_I.z += omega_Iz_delta; From 2a3af369b6c885b4663e37882cbaac9c8e9da0b0 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 16 Apr 2012 12:14:19 +1000 Subject: [PATCH 19/19] DCM: buffer omega_I changes over 10 seconds this buffers up _omega_I changes in _omega_I_sum over a period of 10 seconds, applying the slope limit only when _omega_I_sum is transferred to _omega_I. The result is a huge improvement in the ability of _omega_I to track gyro drift over the long term. --- libraries/AP_AHRS/AP_AHRS_DCM.cpp | 42 ++++++++++++++++++------------- libraries/AP_AHRS/AP_AHRS_DCM.h | 2 ++ 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/libraries/AP_AHRS/AP_AHRS_DCM.cpp b/libraries/AP_AHRS/AP_AHRS_DCM.cpp index 3b0075a731..f071dfdfcc 100644 --- a/libraries/AP_AHRS/AP_AHRS_DCM.cpp +++ b/libraries/AP_AHRS/AP_AHRS_DCM.cpp @@ -328,16 +328,8 @@ AP_AHRS_DCM::drift_correction(float deltat) // the _omega_I is the long term accumulated gyro // error. This determines how much gyro drift we can // handle. - Vector3f omega_I_delta = error * (_ki_roll_pitch * deltat); - - // limit the slope of omega_I on each axis to - // the maximum drift rate - float drift_limit = _gyro_drift_limit * deltat; - omega_I_delta.x = constrain(omega_I_delta.x, -drift_limit, drift_limit); - omega_I_delta.y = constrain(omega_I_delta.y, -drift_limit, drift_limit); - omega_I_delta.z = constrain(omega_I_delta.z, -drift_limit, drift_limit); - - _omega_I += omega_I_delta; + _omega_I_sum += error * (_ki_roll_pitch * deltat); + _omega_I_sum_time += deltat; // these sums support the reporting of the DCM state via MAVLink _error_rp_sum += error_norm; @@ -458,17 +450,33 @@ AP_AHRS_DCM::drift_correction(float deltat) // x/y drift correction is too inaccurate, and can lead to // incorrect builups in the x/y drift. We rely on the // accelerometers to get the x/y components right - float omega_Iz_delta = error.z * (_ki_yaw * yaw_deltat); - - // limit the slope of omega_I.z to the maximum gyro drift rate - drift_limit = _gyro_drift_limit * yaw_deltat; - omega_Iz_delta = constrain(omega_Iz_delta, -drift_limit, drift_limit); - - _omega_I.z += omega_Iz_delta; + _omega_I_sum.z += error.z * (_ki_yaw * yaw_deltat); // we keep the sum of yaw error for reporting via MAVLink. _error_yaw_sum += error_course; _error_yaw_count++; + + if (_omega_I_sum_time > 10) { + // every 10 seconds we apply the accumulated + // _omega_I_sum changes to _omega_I. We do this to + // prevent short term feedback between the P and I + // terms of the controller. The _omega_I vector is + // supposed to refect long term gyro drift, but with + // high noise it can start to build up due to short + // term interactions. By summing it over 10 seconds we + // prevent the short term interactions and can apply + // the slope limit more accurately + float drift_limit = _gyro_drift_limit * _omega_I_sum_time; + _omega_I_sum.x = constrain(_omega_I_sum.x, -drift_limit, drift_limit); + _omega_I_sum.y = constrain(_omega_I_sum.y, -drift_limit, drift_limit); + _omega_I_sum.z = constrain(_omega_I_sum.z, -drift_limit, drift_limit); + + _omega_I += _omega_I_sum; + + // zero the sum + _omega_I_sum.zero(); + _omega_I_sum_time = 0; + } } diff --git a/libraries/AP_AHRS/AP_AHRS_DCM.h b/libraries/AP_AHRS/AP_AHRS_DCM.h index 600592d8e5..97c163d1dc 100644 --- a/libraries/AP_AHRS/AP_AHRS_DCM.h +++ b/libraries/AP_AHRS/AP_AHRS_DCM.h @@ -69,6 +69,8 @@ private: Vector3f _omega_P; // accel Omega Proportional correction Vector3f _omega_yaw_P; // yaw Omega Proportional correction Vector3f _omega_I; // Omega Integrator correction + Vector3f _omega_I_sum; // summation vector for omegaI + float _omega_I_sum_time; Vector3f _omega_integ_corr; // Partially corrected Gyro_Vector data - used for centrepetal correction Vector3f _omega; // Corrected Gyro_Vector data