From 5758d3dcf004821d62c9a50347e4f6b3c93775a2 Mon Sep 17 00:00:00 2001 From: mandrolic Date: Sat, 26 Feb 2011 15:44:39 +0000 Subject: [PATCH] Configurator.Net: Added motor armed indicator, auto refresh of com port list git-svn-id: https://arducopter.googlecode.com/svn/trunk@1729 f9c3cf11-9bcb-44bc-f272-b75c42450872 --- .../ArducopterConfigurator.csproj | 2 +- .../PresentationModels/SensorsVm.cs | 75 +++++++++++++++++- .../Views/FlightDataView.Designer.cs | 38 ++++++--- .../Views/FlightDataView.resx | 7 +- .../Views/mainForm.Designer.cs | 79 ++++++++----------- .../Configurator.Net/Views/mainForm.cs | 5 ++ .../Configurator.Net/Views/mainForm.resx | 23 +----- 7 files changed, 146 insertions(+), 83 deletions(-) diff --git a/Configurator/Configurator.Net/ArducopterConfigurator.csproj b/Configurator/Configurator.Net/ArducopterConfigurator.csproj index 632e27910c..31d11d44ab 100644 --- a/Configurator/Configurator.Net/ArducopterConfigurator.csproj +++ b/Configurator/Configurator.Net/ArducopterConfigurator.csproj @@ -33,7 +33,7 @@ true index.htm false - 5 + 6 1.0.0.%2a false true diff --git a/Configurator/Configurator.Net/PresentationModels/SensorsVm.cs b/Configurator/Configurator.Net/PresentationModels/SensorsVm.cs index aecd0a7f5e..3fcbe4b4e7 100644 --- a/Configurator/Configurator.Net/PresentationModels/SensorsVm.cs +++ b/Configurator/Configurator.Net/PresentationModels/SensorsVm.cs @@ -34,11 +34,17 @@ namespace ArducopterConfigurator.PresentationModels private const string STOP_UPDATES = "X"; private bool waitingForCalibData; + public SensorsVm() { RefreshCalibrationOffsetsCommand = new DelegateCommand(_ => RefreshCalibValues()); UpdateCalibrationOffsetsCommand = new DelegateCommand(_ => UpdateCalibValues()); CalculateCalibrationOffsetsCommand = new DelegateCommand(_ => CalcCalibValues()); + + PropertyChanged += ((sender, e) => + { + IsArmed = !(MotorFront == 1040 && MotorRear == 1040 && MotorLeft == 1040 && MotorRight == 1040); + }); } public void RefreshCalibValues() @@ -79,9 +85,9 @@ namespace ArducopterConfigurator.PresentationModels "GyroPitch", "GyroYaw", "Unused", // Throttle - "Unused", // control roll - "Unused", // control pitch - "Unused", // control yaw + "ControlRoll", // control roll + "ControlPitch", // control pitch + "ControlYaw", // control yaw "MotorFront", "MotorRear", "MotorRight", @@ -165,6 +171,29 @@ namespace ArducopterConfigurator.PresentationModels #endregion + + private bool _isArmed; + + + /// + /// Whether the Arducopter is Armed or not + /// + /// + /// We don't get this information directly, but we can infer it if all motors are + /// at 1040 then the thing is NOT armed. + /// + public bool IsArmed + { + get { return _isArmed; } + set + { + if (_isArmed == value) return; + _isArmed = value; + FirePropertyChanged("IsArmed"); + } + } + + #region Sensor Properties private int _loopTime; @@ -299,6 +328,46 @@ namespace ArducopterConfigurator.PresentationModels FirePropertyChanged("AccelZ"); } } + + private int _controlRoll; + + public int ControlRoll + { + get { return _controlRoll; } + set + { + if (_controlRoll == value) return; + _controlRoll = value; + FirePropertyChanged("ControlRoll"); + } + } + + private int _controlPitch; + + public int ControlPitch + { + get { return _controlPitch; } + set + { + if (_controlPitch == value) return; + _controlPitch = value; + FirePropertyChanged("ControlPitch"); + } + } + + private int _controlYaw; + + public int ControlYaw + { + get { return _controlYaw; } + set + { + if (_controlYaw == value) return; + _controlYaw = value; + FirePropertyChanged("ControlYaw"); + } + } + #endregion public int Unused { get; set; } diff --git a/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs b/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs index 5e9a84a723..961f7a37ef 100644 --- a/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs +++ b/Configurator/Configurator.Net/Views/FlightDataView.Designer.cs @@ -70,6 +70,7 @@ this.cirularIndicatorControl4 = new ArducopterConfigurator.Views.controls.CirularIndicatorControl(); this.cirularIndicatorControl5 = new ArducopterConfigurator.Views.controls.CirularIndicatorControl(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.label1 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.FlightDataVmBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); @@ -79,6 +80,7 @@ // this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlightDataVmBindingSource, "MotorLeft", true)); + this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Visible", this.FlightDataVmBindingSource, "IsArmed", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.textBox1.Enabled = false; this.textBox1.Location = new System.Drawing.Point(99, 162); this.textBox1.Name = "textBox1"; @@ -217,8 +219,9 @@ // this.textBox8.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBox8.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlightDataVmBindingSource, "MotorFront", true)); + this.textBox8.DataBindings.Add(new System.Windows.Forms.Binding("Visible", this.FlightDataVmBindingSource, "IsArmed", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.textBox8.Enabled = false; - this.textBox8.Location = new System.Drawing.Point(173, 83); + this.textBox8.Location = new System.Drawing.Point(182, 83); this.textBox8.Name = "textBox8"; this.textBox8.ReadOnly = true; this.textBox8.Size = new System.Drawing.Size(38, 13); @@ -228,8 +231,9 @@ // this.textBox9.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBox9.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlightDataVmBindingSource, "MotorRear", true)); + this.textBox9.DataBindings.Add(new System.Windows.Forms.Binding("Visible", this.FlightDataVmBindingSource, "IsArmed", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.textBox9.Enabled = false; - this.textBox9.Location = new System.Drawing.Point(117, 192); + this.textBox9.Location = new System.Drawing.Point(107, 192); this.textBox9.Name = "textBox9"; this.textBox9.ReadOnly = true; this.textBox9.Size = new System.Drawing.Size(32, 13); @@ -239,6 +243,7 @@ // this.textBox10.BorderStyle = System.Windows.Forms.BorderStyle.None; this.textBox10.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.FlightDataVmBindingSource, "MotorRight", true)); + this.textBox10.DataBindings.Add(new System.Windows.Forms.Binding("Visible", this.FlightDataVmBindingSource, "IsArmed", true, System.Windows.Forms.DataSourceUpdateMode.Never)); this.textBox10.Enabled = false; this.textBox10.Location = new System.Drawing.Point(186, 163); this.textBox10.Name = "textBox10"; @@ -424,7 +429,7 @@ // this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.FlightDataVmBindingSource, "RefreshCalibrationOffsetsCommand", true)); this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image"))); - this.button2.Location = new System.Drawing.Point(280, 214); + this.button2.Location = new System.Drawing.Point(311, 214); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(26, 26); this.button2.TabIndex = 46; @@ -434,7 +439,7 @@ // this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.FlightDataVmBindingSource, "UpdateCalibrationOffsetsCommand", true)); this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image"))); - this.button1.Location = new System.Drawing.Point(280, 185); + this.button1.Location = new System.Drawing.Point(311, 185); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(26, 26); this.button1.TabIndex = 45; @@ -444,7 +449,7 @@ // this.button3.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.FlightDataVmBindingSource, "CalculateCalibrationOffsetsCommand", true)); this.button3.Image = ((System.Drawing.Image)(resources.GetObject("button3.Image"))); - this.button3.Location = new System.Drawing.Point(280, 156); + this.button3.Location = new System.Drawing.Point(311, 156); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(26, 26); this.button3.TabIndex = 47; @@ -454,7 +459,7 @@ // label11 // this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(312, 163); + this.label11.Location = new System.Drawing.Point(343, 163); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(78, 13); this.label11.TabIndex = 48; @@ -463,7 +468,7 @@ // label12 // this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(312, 192); + this.label12.Location = new System.Drawing.Point(343, 192); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(84, 13); this.label12.TabIndex = 49; @@ -472,7 +477,7 @@ // label13 // this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(312, 223); + this.label13.Location = new System.Drawing.Point(343, 223); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(96, 13); this.label13.TabIndex = 50; @@ -590,10 +595,24 @@ this.cirularIndicatorControl5.TabIndex = 56; this.cirularIndicatorControl5.Value = 1500; // + // label1 + // + this.label1.AutoSize = true; + this.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label1.DataBindings.Add(new System.Windows.Forms.Binding("Visible", this.FlightDataVmBindingSource, "IsArmed", true, System.Windows.Forms.DataSourceUpdateMode.Never)); + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.ForeColor = System.Drawing.Color.Red; + this.label1.Location = new System.Drawing.Point(308, 29); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 19); + this.label1.TabIndex = 57; + this.label1.Text = "ARMED"; + // // FlightDataView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.label1); this.Controls.Add(this.cirularIndicatorControl5); this.Controls.Add(this.cirularIndicatorControl4); this.Controls.Add(this.cirularIndicatorControl3); @@ -633,7 +652,7 @@ this.Controls.Add(this.pictureBox2); this.DoubleBuffered = true; this.Name = "FlightDataView"; - this.Size = new System.Drawing.Size(412, 260); + this.Size = new System.Drawing.Size(453, 260); ((System.ComponentModel.ISupportInitialize)(this.FlightDataVmBindingSource)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); @@ -684,5 +703,6 @@ private ArducopterConfigurator.Views.controls.CirularIndicatorControl cirularIndicatorControl4; private ArducopterConfigurator.Views.controls.CirularIndicatorControl cirularIndicatorControl5; private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.Label label1; } } diff --git a/Configurator/Configurator.Net/Views/FlightDataView.resx b/Configurator/Configurator.Net/Views/FlightDataView.resx index a082ca8f41..6328a6f0ab 100644 --- a/Configurator/Configurator.Net/Views/FlightDataView.resx +++ b/Configurator/Configurator.Net/Views/FlightDataView.resx @@ -146,8 +146,8 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA - CwYBZDTpJAAAA11JREFUOE8tkYtTVHUUx+8fU5PCUjjlMDT42JB4qcSjoumxk00FG6USapngOrvuDg+B + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAK/wAA + Cv8BNGKaggAAA11JREFUOE8tkYtTVHUUx+8fU5PCUjjlMDT42JB4qcSjoumxk00FG6USapngOrvuDg+B SlYmZQKFxWZyyiBRHBChKMCw5e6CzYagsu+9+4gWVxb49NulO/d353vO/X7P+Z7zk87/uICm7nvKdcM0 X/wV0yWZxss2mjplmnptNPdYOdM9TUOPwL3zGDrsFNf+wgHdBB39i0hv1o2g7fRwuHueGP8/q4/hSQKv syq+ImJD4LggxAU+1D3LwU4Hr33+A9Leoz9RdcVNlcXJCmtJycamVgjjIpNUCyTUIsfGKtre+2gtS5Qd @@ -172,4 +172,7 @@ kDAHyJw4EoECAARSrmTK0SPIjAQxYjW4taBWrF8zhrU4tkBAADs= + + 225, 28 + \ No newline at end of file diff --git a/Configurator/Configurator.Net/Views/mainForm.Designer.cs b/Configurator/Configurator.Net/Views/mainForm.Designer.cs index 4f7fdc0846..7659e47f45 100644 --- a/Configurator/Configurator.Net/Views/mainForm.Designer.cs +++ b/Configurator/Configurator.Net/Views/mainForm.Designer.cs @@ -37,13 +37,12 @@ namespace ArducopterConfigurator this.toolTip = new System.Windows.Forms.ToolTip(this.components); this.button3 = new System.Windows.Forms.Button(); this.button4 = new System.Windows.Forms.Button(); + this.btnConnect = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); this.linkLabel1 = new System.Windows.Forms.LinkLabel(); this.label1 = new System.Windows.Forms.Label(); - this.btnConnect = new System.Windows.Forms.Button(); this.cmboComPorts = new System.Windows.Forms.ComboBox(); - this.button1 = new System.Windows.Forms.Button(); this.lblConnectionStatus = new System.Windows.Forms.Label(); - this.button2 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.mainVmBindingSource)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.availablePortsBindingSource)).BeginInit(); this.SuspendLayout(); @@ -90,10 +89,36 @@ namespace ArducopterConfigurator this.toolTip.SetToolTip(this.button4, "Save to Eeprom"); this.button4.UseVisualStyleBackColor = true; // + // btnConnect + // + this.btnConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.btnConnect.Cursor = System.Windows.Forms.Cursors.Arrow; + this.btnConnect.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "ConnectCommand", true)); + this.btnConnect.Image = ((System.Drawing.Image)(resources.GetObject("btnConnect.Image"))); + this.btnConnect.Location = new System.Drawing.Point(96, 407); + this.btnConnect.Name = "btnConnect"; + this.btnConnect.Size = new System.Drawing.Size(26, 26); + this.btnConnect.TabIndex = 6; + this.toolTip.SetToolTip(this.btnConnect, "Connect"); + this.btnConnect.UseVisualStyleBackColor = true; + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.button1.Cursor = System.Windows.Forms.Cursors.Arrow; + this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "DisconnectCommand", true)); + this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image"))); + this.button1.Location = new System.Drawing.Point(127, 407); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(26, 26); + this.button1.TabIndex = 7; + this.toolTip.SetToolTip(this.button1, "Disconnect"); + this.button1.UseVisualStyleBackColor = true; + // // linkLabel1 // this.linkLabel1.AutoSize = true; - this.linkLabel1.Location = new System.Drawing.Point(350, 412); + this.linkLabel1.Location = new System.Drawing.Point(346, 415); this.linkLabel1.Name = "linkLabel1"; this.linkLabel1.Size = new System.Drawing.Size(84, 13); this.linkLabel1.TabIndex = 13; @@ -104,25 +129,12 @@ namespace ArducopterConfigurator // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(350, 396); + this.label1.Location = new System.Drawing.Point(346, 399); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(89, 13); this.label1.TabIndex = 14; this.label1.Text = "Use with caution!"; // - // btnConnect - // - this.btnConnect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btnConnect.Cursor = System.Windows.Forms.Cursors.Arrow; - this.btnConnect.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "ConnectCommand", true)); - this.btnConnect.Image = ((System.Drawing.Image)(resources.GetObject("btnConnect.Image"))); - this.btnConnect.Location = new System.Drawing.Point(128, 407); - this.btnConnect.Name = "btnConnect"; - this.btnConnect.Size = new System.Drawing.Size(26, 26); - this.btnConnect.TabIndex = 6; - this.toolTip.SetToolTip(this.btnConnect, "Connect"); - this.btnConnect.UseVisualStyleBackColor = true; - // // cmboComPorts // this.cmboComPorts.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); @@ -133,49 +145,23 @@ namespace ArducopterConfigurator this.cmboComPorts.Name = "cmboComPorts"; this.cmboComPorts.Size = new System.Drawing.Size(79, 21); this.cmboComPorts.TabIndex = 5; - // - // button1 - // - this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.button1.Cursor = System.Windows.Forms.Cursors.Arrow; - this.button1.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "DisconnectCommand", true)); - this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image"))); - this.button1.Location = new System.Drawing.Point(159, 407); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(26, 26); - this.button1.TabIndex = 7; - this.toolTip.SetToolTip(this.button1, "Disconnect"); - this.button1.UseVisualStyleBackColor = true; + this.cmboComPorts.DropDown += new System.EventHandler(this.cmboComPorts_DropDown); // // lblConnectionStatus // this.lblConnectionStatus.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); this.lblConnectionStatus.AutoSize = true; - this.lblConnectionStatus.Location = new System.Drawing.Point(191, 412); + this.lblConnectionStatus.Location = new System.Drawing.Point(159, 418); this.lblConnectionStatus.Name = "lblConnectionStatus"; this.lblConnectionStatus.Size = new System.Drawing.Size(112, 13); this.lblConnectionStatus.TabIndex = 8; this.lblConnectionStatus.Text = "connection string here"; // - // button2 - // - this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.button2.Cursor = System.Windows.Forms.Cursors.Arrow; - this.button2.DataBindings.Add(new System.Windows.Forms.Binding("Tag", this.mainVmBindingSource, "RefreshPortListCommand", true)); - this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image"))); - this.button2.Location = new System.Drawing.Point(96, 407); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(26, 26); - this.button2.TabIndex = 9; - this.toolTip.SetToolTip(this.button2, "Refresh port list"); - this.button2.UseVisualStyleBackColor = true; - // // mainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(554, 445); - this.Controls.Add(this.button2); this.Controls.Add(this.label1); this.Controls.Add(this.lblConnectionStatus); this.Controls.Add(this.button1); @@ -212,7 +198,6 @@ namespace ArducopterConfigurator private System.Windows.Forms.ComboBox cmboComPorts; private System.Windows.Forms.Button button1; private System.Windows.Forms.Label lblConnectionStatus; - private System.Windows.Forms.Button button2; } } diff --git a/Configurator/Configurator.Net/Views/mainForm.cs b/Configurator/Configurator.Net/Views/mainForm.cs index 9232f7b262..f3e34d5997 100644 --- a/Configurator/Configurator.Net/Views/mainForm.cs +++ b/Configurator/Configurator.Net/Views/mainForm.cs @@ -194,5 +194,10 @@ namespace ArducopterConfigurator { System.Diagnostics.Process.Start("http://diydrones.com/profile/AndrewRadford"); } + + private void cmboComPorts_DropDown(object sender, EventArgs e) + { + _vm.RefreshPortListCommand.Execute(null); + } } } diff --git a/Configurator/Configurator.Net/Views/mainForm.resx b/Configurator/Configurator.Net/Views/mainForm.resx index 11a8316102..193abc66c1 100644 --- a/Configurator/Configurator.Net/Views/mainForm.resx +++ b/Configurator/Configurator.Net/Views/mainForm.resx @@ -130,8 +130,8 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALCAAA - CwgBwL2l2gAABLRJREFUWEftVm1Mk1cYJVn8NxPjD7Nl2YeAWWJCliWbYxuwDzIdYDHIpgiKG9IBqYVR + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALBgAA + CwYBZDTpJAAABLRJREFUWEftVm1Mk1cYJVn8NxPjD7Nl2YeAWWJCliWbYxuwDzIdYDHIpgiKG9IBqYVR UEuFgu8AKZ+1CGg7ZUBhDtdYMykMaPmmxSJfwoAhTuwYCBuEIIgMPOu9TnRY2rVz4Y8/Tpomvfec8zzn eXrtANitJlaVnBh/KsDqCmxVeGCjzB52Yrt/4GXZRrxT7GasqnWZslqAk9wJv6EHbYvV0C6qULNwAao/ z6FhsQwvFjn8/wLWSdei854GknkBUuaiIZzhgjfNhnpRCbu8Z1DT3GqVCLMVICVdI1kDQkqwVvos/Wxd @@ -208,25 +208,6 @@ BhLrRLnuOY77c3SdVF9/1Z6Mx+tteFq4VGW8PAcvTtYgaDXBp9fTuDPvEIgrkGZH9HQtHrG538mW8JCF 9IMnziwMOwvRwZNDcQVeUcD48Wo8WGtHfxrFBRZWyMbCyhJi9CyjaKfE67ZYEuIKWnje5beKLDAOSkgs IEcrx3nZquyh7NsISVnw5bFgit2/J/uPz/w7PYg4GfFdEjIAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAOuAAA - DrgBakH1WwAAAtVJREFUOE9jYKAaiN/PweB3RIohcL8MGIPYIDFigVbd+cTIeXfuxS+5+yQWiCPn3X4o - X3Y2EaRfMOOojkbN2XKprCMGOM2TyDoakrfm3tcZ59/+nw7EnQef/dGqPJnKELhTLHzGtcNzT77+X7Hh - wQXdsuOeDAz1TKgGWazktG87M6dx95P/vcde/u8/8ep/4Zo772Sz9tsw+K8X8Oo9N7Nr18PP666+/1+z - 8d5VsDgykEvZ4ZO/6taHroPP/sfOvHSvZM3tL7EzLt5hcFsuC1ZnPJNLJWtvYenqGx/mnnr1P3jCme0M - 9vMFoGaksTrVHZxZv/3h/9T5l96IRW/wMyvZU2ZVtnsKg0UvJ8Kiejbjwp2tHTvv/61Ye/OjfPJGD4ic - UreYf8ehU9Wb7v33btq/jUG9kxdoIyuDy0x+9AAT8J6rnzD99KvaDXf+qyStLofIq9TLWJbtuBUw5cJ/ - 3fQ10xkYQplxhrRVv7pV1e7ngVPO/5eNWNQIdUGxmHrKmhN61Uf+q8QtWc7AEI8a9xa9Qjy2XcFAi/jE - PCdH6RTt/q5Tuve3iNfUZJhFzPKBMybole7/r5G8+j6nfpUZsguEHLvcjNJXPlPwnzZdKXL+CfWSg/81 - U1c/5bZo0oWrEzCtttNKWvFKK3/3fznfyQe5VHINYV6RcO6q1crd+V8hdfMfhfTt/9Syd/yX8+oHetWY - FckiY1YJh+Y6zeS137SydvzXjZ53R8y0KpCBwZVbJWDqVrHEHf/ZInf8F07Y8V/Rf9otVtUsjBTJyMBv - LyBmXtqpHTHvk27IlGt8KuFuDCK2RhrB0x4rJW3+LxmzARjym/7rBE99wqkQY47sTUYghx2IxRgY+I04 - xW3yWHnUUoB8LwYm7ghuOc+pvCoRy3lUIxfzqcUsEFSPamIV1NOB6gHpBQNQ2gaFPi8QCwKxKBBLArEU - EEtA+cJAWgCIuaGawfkBAATBFuWVyulDAAAAAElFTkSuQmCC