From 7622f542daa27db332334d0af25faa9651a1c831 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Sat, 19 Sep 2020 21:24:59 -0700 Subject: log sigmoid sens done --- common/accel-experimentone.hpp | 33 ++++++++++++++++++++++++++ common/common.vcxitems | 1 + common/rawaccel-settings.h | 2 +- common/rawaccel.hpp | 3 +++ grapher/Layouts/ExperimentOneLayout.cs | 26 ++++++++++++++++++++ grapher/Layouts/LayoutBase.cs | 1 + grapher/Models/Calculations/AccelCalculator.cs | 1 + grapher/Models/Options/AccelTypeOptions.cs | 1 + grapher/Models/Serialized/DriverSettings.cs | 2 +- grapher/grapher.csproj | 1 + 10 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 common/accel-experimentone.hpp create mode 100644 grapher/Layouts/ExperimentOneLayout.cs diff --git a/common/accel-experimentone.hpp b/common/accel-experimentone.hpp new file mode 100644 index 0000000..7d21b58 --- /dev/null +++ b/common/accel-experimentone.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include + +#include "accel-base.hpp" + +namespace rawaccel { + + /// Struct to hold sigmoid (s-shaped) gain implementation. + struct experimentone_impl { + double rate; + double limit; + double midpoint; + double subtractive_constant; + + experimentone_impl(const accel_args& args) : + rate(pow(10,args.rate)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) + { + subtractive_constant = limit / 2; + } + + inline double operator()(double speed) const { + double log_speed = log10(speed); + return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); + + } + + inline double legacy_offset(double speed) const { return operator()(speed); } + }; + + using accel_experimentone = nonadditive_accel; + +} diff --git a/common/common.vcxitems b/common/common.vcxitems index fcd3ae8..21a58aa 100644 --- a/common/common.vcxitems +++ b/common/common.vcxitems @@ -16,6 +16,7 @@ + diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index 8c483eb..db5e192 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -6,7 +6,7 @@ namespace rawaccel { enum class accel_mode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, noaccel + linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, experimentone, noaccel }; struct settings { diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index 8819302..2914225 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -13,6 +13,7 @@ #include "accel-naturalgain.hpp" #include "accel-power.hpp" #include "accel-sigmoidgain.hpp" +#include "accel-experimentone.hpp" #include "accel-noaccel.hpp" namespace rawaccel { @@ -86,6 +87,7 @@ namespace rawaccel { case accel_mode::sigmoidgain: return vis(var.u.sigmoidgain); case accel_mode::power: return vis(var.u.power); case accel_mode::logarithm: return vis(var.u.logarithm); + case accel_mode::experimentone: return vis(var.u.experimentone); default: return vis(var.u.noaccel); } } @@ -101,6 +103,7 @@ namespace rawaccel { accel_sigmoidgain sigmoidgain; accel_power power; accel_logarithm logarithm; + accel_experimentone experimentone; accel_noaccel noaccel = {}; } u = {}; diff --git a/grapher/Layouts/ExperimentOneLayout.cs b/grapher/Layouts/ExperimentOneLayout.cs new file mode 100644 index 0000000..1853fbc --- /dev/null +++ b/grapher/Layouts/ExperimentOneLayout.cs @@ -0,0 +1,26 @@ +using grapher.Models.Serialized; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Layouts +{ + public class ExperimentOneLayout : LayoutBase + { + public ExperimentOneLayout() + : base() + { + Name = "Experiment 1"; + Index = (int)AccelMode.experimentone; + + AccelLayout = new OptionLayout(true, Acceleration); + CapLayout = new OptionLayout(false, string.Empty); + WeightLayout = new OptionLayout(true, Weight); + OffsetLayout = new OptionLayout(false, string.Empty); + LimExpLayout = new OptionLayout(true, Motility); + MidpointLayout = new OptionLayout(true, Midpoint); + } + } +} diff --git a/grapher/Layouts/LayoutBase.cs b/grapher/Layouts/LayoutBase.cs index 6ed8fee..067ce44 100644 --- a/grapher/Layouts/LayoutBase.cs +++ b/grapher/Layouts/LayoutBase.cs @@ -10,6 +10,7 @@ namespace grapher.Layouts public const string Exponent = "Exponent"; public const string Limit = "Limit"; public const string Midpoint = "Midpoint"; + public const string Motility = "Motility"; public const string Offset = "Offset"; public const string Cap = "Cap"; public const string Weight = "Weight"; diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 4627732..7293681 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -74,6 +74,7 @@ namespace grapher.Models.Calculations var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); var outMagnitude = Magnitude(output.Item1, output.Item2); + var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; var inDiff = magnitudeDatum.magnitude - lastInputMagnitude; diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index 917ac5c..6f547cd 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -21,6 +21,7 @@ namespace grapher new LogarithmLayout(), new NaturalGainLayout(), new SigmoidGainLayout(), + new ExperimentOneLayout(), new OffLayout() }.ToDictionary(k => k.Name); diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs index d42187c..03c5687 100644 --- a/grapher/Models/Serialized/DriverSettings.cs +++ b/grapher/Models/Serialized/DriverSettings.cs @@ -8,7 +8,7 @@ namespace grapher.Models.Serialized public enum AccelMode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, noaccel + linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, experimentone, noaccel } #endregion Enumerations diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index 8f5eeda..b81a310 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -54,6 +54,7 @@ + -- cgit v1.2.3 From ac8df552951ba6265a71f827bc8b975eecfbcdd4 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Sun, 20 Sep 2020 21:52:01 -0700 Subject: Add icon and second experiment --- common/accel-experimenttwo.hpp | 77 ++ common/common.vcxitems | 1 + grapher/Form1.Designer.cs | 2 + grapher/Form1.resx | 1883 ++++++++++++++++++++++++++++++++++++++++ grapher/Icon/mouse.ico | Bin 0 -> 112630 bytes 5 files changed, 1963 insertions(+) create mode 100644 common/accel-experimenttwo.hpp create mode 100644 grapher/Icon/mouse.ico diff --git a/common/accel-experimenttwo.hpp b/common/accel-experimenttwo.hpp new file mode 100644 index 0000000..8359cc2 --- /dev/null +++ b/common/accel-experimenttwo.hpp @@ -0,0 +1,77 @@ +#pragma once + +#include + +#include "accel-base.hpp" + +namespace rawaccel { + + /// Struct to hold sigmoid (s-shaped) gain implementation. + struct experimenttwo_impl { + double rate; + double limit; + double midpoint; + double subtractive_constant; + + experimenttwo_impl(const accel_args& args) : + rate(pow(10,args.rate)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) + { + subtractive_constant = limit / 2; + } + + inline double operator()(double speed) const { + double log_speed = log10(speed); + return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); + + } + + inline double legacy_offset(double speed) const { return operator()(speed); } + + inline double apply(double* lookup, double speed) + { + int index = map(speed); + double slope = lookup[index]; + double intercept = lookup[index + 1]; + return slope + intercept / speed; + } + + inline int map(double speed) + { + return speed > 0 ? (int)floor(200*log10(speed)+402) : 0; + } + + inline double fill(double* lookup) + { + double lookup_speed = 0; + double gain_integral_speed = 0; + double gain = 0; + double intercept = 0; + double output = 0; + int index = 0; + + lookup[index] = gain; + lookup[index + 1] = intercept; + + for (double x = -2.0; x <= 4.0; x += 0.01) + { + index+=2; + lookup_speed = pow(10,x); + + while (gain_integral_speed < lookup_speed) + { + gain_integral_speed += 0.001; + gain = operator()(gain_integral_speed); + output += gain*0.001; + } + + intercept = gain * lookup_speed - output; + lookup[index] = gain; + lookup[index + 1] = intercept; + } + + } + }; + + using accel_experimentone = nonadditive_accel; + +} diff --git a/common/common.vcxitems b/common/common.vcxitems index 21a58aa..b5cd374 100644 --- a/common/common.vcxitems +++ b/common/common.vcxitems @@ -17,6 +17,7 @@ + diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index fd54051..a659c4e 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -60,6 +60,7 @@ namespace grapher System.Windows.Forms.DataVisualization.Charting.Series series11 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.Windows.Forms.DataVisualization.Charting.Series series12 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.Windows.Forms.DataVisualization.Charting.Title title6 = new System.Windows.Forms.DataVisualization.Charting.Title(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RawAcceleration)); this.AccelerationChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.accelTypeDropX = new System.Windows.Forms.ComboBox(); this.sensitivityBoxX = new System.Windows.Forms.TextBox(); @@ -1075,6 +1076,7 @@ namespace grapher this.Controls.Add(this.accelTypeDropX); this.Controls.Add(this.AccelerationChart); this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "RawAcceleration"; this.Text = "Raw Acceleration Graph"; this.Load += new System.EventHandler(this.Form1_Load); diff --git a/grapher/Form1.resx b/grapher/Form1.resx index 32fcbfb..f036fed 100644 --- a/grapher/Form1.resx +++ b/grapher/Form1.resx @@ -123,4 +123,1887 @@ 25 + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8L////Mf///1D///9r////f////47///+d////ov///6P///+j////o////6L///+g////kP// + /4f///94////Zv///1H///86////IP///wX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8C////Lf///23///+n////2/////z///////////////////////////// + ////////////////////////////////////////////////////////////////////////////+v// + /97///+4////kP///2L///8v////BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wP///9E////mv///+b///////////// + /////////f39/+Xl5f/Jycn/sbGx/56env+Pj4//hYWF/319ff95eXn/d3d3/3l5ef97e3v/gYGB/4qK + iv+VlZX/oqKi/7Ozs//ExMT/2dnZ//Hx8f/+/v7////////////////////////////////y////u/// + /3r///8z////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /xv///99////4v///////////////+7u7v+2trb/gYGB/1FRUf8pKSn/HBwc/xoaGv8YGBj/FxcX/xYW + Fv8WFhb/FRUV/xUVFf8VFRX/FRUV/xUVFf8VFRX/FRUV/xYWFv8WFhb/FhYW/xUVFf8WFhb/FxcX/yUl + Jf9FRUX/aGho/46Ojv+4uLj/5ubm//7+/v/////////////////////k////jv///y7///8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Av///0r///+3/////P//////////6urq/5ycnP9PT0//Gxsb/xQU + FP8RERH/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ERER/xMTE/8VFRX/MjIy/21t + bf+tra3/7e3t/////////////////v///7n///8uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///0r////S//////// + ///8/Pz/vLy8/19fX/8XFxf/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xMTE/8cHBz/W1tb/7Kysv/6+vr///////// + //z///+W////HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///xX///+q///////////v7+//jY2N/ywsLP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/FRUV/zc3N/+srKz//f39///////////y////nP///3z///9F////CwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9D////5f/////4+Pj/jo6O/x8f + H/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xER + Ef9FRUX/xcXF///////////////////////////3////tf///13///8LAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8G////jf////7/////0dHR/zg4OP8RERH/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8VFRX/v7+//9vb2/+ZmZn/1dXV//7+ + /v////////////////H///+V////KQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Bf///6///////Pz8/5SUlP8YGBj/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP/a2tr/kJCQ/xAQEP8QEBD/Ly8v/35+fv/W1tb////////////////+////t/// + /0H///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wn///+9//////7+/v9VVVX/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/LS0t//z8/P9SUlL/EBAQ/xAQ + EP8QEBD/EBAQ/xEREf9ISEj/rKys//r6+v///////////////8X///9G////AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D////r//////7+/v/+vr6/x4eHv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP9ubm7/9PT0/xoaGv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/LCws/5SU + lP/z8/P////////////////F////Rv///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /4b/////9fX1/25ubv/6+vr/Ly8v/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/7Kysv+7u7v/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/yMjI/+MjIz/8vLy////////////////wv// + /z3///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9M/////v39/f9eXl7/Jycn//r6+v9DQ0P/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8YGBj/8fHx/3V1df8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8iIiL/j4+P//T09P///////////////7b///8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP// + /+v/////jo6O/xAQEP8UFBT/9fX1/1xcXP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/1dXV//7+/v/LCws/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/JiYm/5iY + mP/4+Pj///////////7///+p////KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///+v/////8nJyf8UFBT/EBAQ/xAQEP/d3d3/enp6/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/paWl/8vLy/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/y0tLf+jo6P/+/v7///////////7////n/// + /x4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Uv// + ///29vb/MzMz/xAQEP8QEBD/EBAQ/7y8vP+cnJz/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xkZGf/u7u7/enp6/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP82Njb/rq6u//39/f//////////+P///5D///8WAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb////d/////4ODg/8QEBD/EBAQ/xAQEP8QEBD/l5eX/8PD + w/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/YGBg//r6+v8pKSn/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Pz8//7u7 + u/////////////////D///97////CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////aP// + ///h4eH/GBgY/xAQEP8QEBD/EBAQ/xAQEP9tbW3/7Ozs/xISEv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+6urr/u7u7/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0tLS//Jycn////////////////h////Vf// + /wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wT////e/////2xsbP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/z8/ + P//7+/v/MzMz/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/Li4u//n5+f9fX1//EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xEREf9eXl7/3d3d////////////////tP///xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Tv// + ///l5eX/FhYW/xAQEP8QEBD/EBAQ/xAQEP8QEBD/FhYW//Dw8P9oaGj/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+MjIz/5eXl/xYW + Fv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8XFxf/goKC//b2 + 9v//////////7f///1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+s/////4eHh/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/v7+//6Kiov8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/Ghoa/+np6f+Ghob/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/MjIy/8bGxv///////////v///4v///8DAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP// + //L+/v7/MzMz/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+BgYH/4ODg/xEREf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9ycnL/8/Pz/yUl + Jf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/ExMT/4uLi//9/f3//////////67///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9B/////9jY2P8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/0BAQP/7+/v/OTk5/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/FRUV/93d3f+bm5v/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/1xcXP/19fX///////// + /8D///8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /3z/////mZmZ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EhIS/+Hh4f+CgoL/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9ra2v/9vb2/y4u + Lv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0ZGRv/v7+///////////7n///8HAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////sP////9mZmb/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/l5eX/9HR0f8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/GBgY/97e3v+bm5v/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0JC + Qv/x8fH//////////6H///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD////b/////z09Pf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9FRUX/+vr6/zs7 + O/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP97e3v/8fHx/ygo + KP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/05OTv/5+fn//////////3UAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////A/////f/////ICAg/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xEREf/X19f/lZWV/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/JSUl/+vr6/+Hh4f/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/21tbf//////////+////zsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8M//////r6+v8TExP/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/3h4 + eP/r6+v/Gxsb/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+ioqL/3t7e/xoa + Gv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/6Kiov//////////3f// + /wwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///w//////+Pj4/xEREf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ICAg/+3t7f90dHT/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/S0tL//j4+P9bW1v/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/Gxsb/9zc3P//////////jwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Cv/////8/Pz/ExMT/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/kpKS/93d3f8WFhb/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xsbG//Y2Nj/r6+v/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/TExM//7+ + /v/////7////LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8V//////b29v8RERH/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8pKSn/8fHx/3BwcP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/m5ub/+bm5v8mJib/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/rKys//////////+0////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///yv/////6+vr/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP+QkJD/5eXl/xsbG/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/15eXv/39/f/WFhY/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8vLy//+fn5//////7///82AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////IP/////t7e3/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/yAgIP/r6+v/ioqK/xcX + F/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP81NTX/6urq/5OTk/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+fn5///////////6sAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8d/////+3t7f8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4yMjP/7+/v/8/Pz/9zc3P+FhYX/Gxsb/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Hx8f/9PT0//BwcH/FRUV/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/zMzM//9/f3/////+////xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xL/////9/f3/xMT + E/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/nZ2d/7S0 + tP9QUFD/cXFx/8HBwf/Dw8P/Kysr/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xYWFv+7u7v/2tra/yUlJf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/729vf//////////eAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Af///+7/////LCws/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP/BwcH/bGxs/xAQEP8RERH/EhIS/3V1df/U1NT/LCws/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8TExP/p6en/+bm5v82Njb/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/ZGRk///////////MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////vf// + //9cXFz/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/5+f + n/9tbW3/EBAQ/xEREf8QEBD/EBAQ/6Kiov/Hx8f/ExMT/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/ExMT/52dnf/o6Oj/RERE/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8dHR3/+Pj4//// + //3///8XAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Av///zL///++/////5eXl/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/YWFh/3d3d/8QEBD/ERER/xAQEP8QEBD/Kioq/+rq + 6v9kZGT/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xQUFP+hoaH/6Ojo/0lJSf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP/AwMD//////////1UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///xj///8/////OP///zP///84////RP///1b///9x////kv///73////v//////// + ////////3t7e/xISEv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8eHh7/sLCw/xAQEP8QEBD/ERER/xAQEP8QEBD/hISE/9ra2v8dHR3/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8bGxv/sLCw/+bm5v9GRkb/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4aG + hv//////////kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///96/////f////////////////// + //////////////////////////////7+/v/j4+P/qqqq/4qKiv//////RERE/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+srKz/Ozs7/xAQEP8QEBD/EBAQ/xAQ + EP8aGhr/1dXV/5SUlP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/LS0t/8nJyf/c3Nz/Ojo6/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/WFhY//////////++AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Bf////T/////+Pj4/+7u7v/n5+f/4ODg/9bW1v/FxcX/rq6u/5GRkf9sbGz/QEBA/ykp + Kf87Ozv/d3d3//b29v+goKD/EhIS/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/1RUVP+dnZ3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9NTU3/8PDw/1VVVf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/1NT + U//j4+P/xcXF/ykpKf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP81NTX//////////+L///8AAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J/////P/////k5OT/tra2/42N + jf9wcHD/YGBg/1xcXP9jY2P/dXV1/4+Pj/+xsbH/3t7e//7+/v////////////Pz8/8pKSn/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/FhYW/+Dg4P8rKyv/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP+RkZH/5OTk/z4+Pv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xoaGv+Tk5P/8/Pz/5aWlv8XFxf/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/x4eHv//////////+P///wMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD////K//////////////////////////////////////////////////////// + ////////////8v///7b////Y/////4mJif8VFRX/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/dnZ2/6ampv8RERH/EBAQ/xAQEP8QEBD/EhIS/xsbG//ExMT/4eHh/0dH + R/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9RUVH/1tbW/+Dg + 4P9XV1f/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/FBQU//r6+v//////////CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yf///+r////zP// + /93////k////8v///+3////j////0P///7b///+T////Z////zP///8FAAAAAP///1P/////7e3t/yoq + Kv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8TExP/zMzM/1BQ + UP8QEBD/EBAQ/xAQEP8RERH/EhIS/yIiIv/AwMD/7Ozs/1xcXP8RERH/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP81NTX/r6+v//Pz8/+enp7/ISEh/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8SEhL/+Pj4//////////8PAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8A////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Av///87/////lJSU/xgYGP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP86Ojr/29vb/yQkJP8QEBD/EBAQ/xAQEP8QEBD/ERER/xUV + Ff+UlJT//Pz8/7a2tv9AQED/EhIS/xAQEP8QEBD/EBAQ/xAQEP8yMjL/oaGh//Ly8v/CwsL/Q0ND/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xUVFf/8/Pz//////////wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Rf// + ///4+Pj/Q0ND/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP9ycnL/v7+//xYWFv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9ISEj/ycnJ//v7+/+7u7v/eXl5/0tL + S/9AQED/hYWF//T09P/S0tL/U1NT/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ISEh///////////2////AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////sf/////T09P/IyMj/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+ioqL/n5+f/xEREf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8RERH/Tk5O/4+Pj//MzMz/+Pj4/9/f3//Q0ND/5OTk/yEhIf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP82Njb//////////+EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8h////9P////+rq6v/FBQU/xAQEP8QEBD/EBAQ/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xcXF//Kysr/iYmJ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8VFRX/EhIS/xUVFf+zs7P/ZWVl/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/1BQUP//////////xgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9t//////z8/P+NjY3/ERER/xAQ + EP8QEBD/ERER/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/yYmJv/d3d3/cnJy/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/2BgYP+JiYn/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/bm5u//////////+lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wH///+2//////j4+P99fX3/ERER/xISEv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8oKCj/Z2dn/76+vv/8/Pz/ampq/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/ZGRk/4KCgv8SEhL/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+SkpL///////// + /4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xX////i//////X1 + 9f92dnb/ERER/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EhIS/z8/P/+Dg4P/x8fH//Ly8v/i4uL/paWl/29v + b//d3d3/eHh4/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xEREf+1tbX/NTU1/xER + Ef8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/7m5uf//////////VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zL////z//////X19f99fX3/NjY2/z8/P/9FRUX/ZWVl/56e + nv/g4OD/8/Pz/8TExP+CgoL/QEBA/xMTE/8QEBD/EBAQ/ygoKP/Ozs7/o6Oj/xsbG/8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8TExP/kZGR/1VVVf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8RERH/5+fn//// + //////8nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /0P////3///////////+/v7////////////4+Pj/x8fH/3V1df8mJib/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xkZGf+kpKT/39/f/2NjY/8VFRX/EBAQ/xAQEP8ZGRn/YmJi/7a2tv9RUVH/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/y8vL///////////7P///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///0P////z//////v7+/+rq6v/KSkp/xQU + FP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9TU1P/vb29/97e + 3v/Q0ND/4uLi/+bm5v+SkpL/IiIi/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/bW1t//// + //////+zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///zT////n/v7+//f39/+kpKT/GBgY/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ERER/yoqKv8rKyv/ExMT/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+1tbX//////////24AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8c////fP///+L//////v7+//j4 + +P+6urr/JCQk/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ICAg//f3 + 9//////+////IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wn///9W////t/////z//////////+3t7f/X19f///////r6+v/S0tL/OTk5/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP92dnb//////////8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Af///zr///+X////7v//////////+/v7/8fHx/+CgoL/UFBQ/3x8 + fP/09PT///////z8/P/l5eX/XV1d/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/FBQU/93d + 3f//////////YgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Jv///4H////b//////// + ////////4ODg/52dnf9bW1v/XV1d/5+fn//k5OT///////////////////////7+/v/y8vL/jo6O/xYW + Fv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9ubm7//////////+f///8IAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wD///8g////dP///8z////////////////w8PD/s7Oz/3Fxcf9SUlL/h4eH/8nJyf/8/Pz///////// + ///////o////iv///0f////c///////////29vb/v7+//y4uLv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/JCQk/+vr + 6///////////awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AP///yT///90////yf////7///////////f39//Dw8P/hISE/1VV + Vf93d3f/tra2//Ly8v////////////////v///+1////Uv///wYAAAAAAAAAAP///xH///+q//////// + ///6+vr/4+Pj/2FhYf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xISEv+4uLj//////////8z///8EAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////NP///4L////S/////v// + ////////+fn5/8vLy/+SkpL/X19f/3Jycv+rq6v/5+fn/////////////////////9X///93////GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///9e////6v/////9/f3/9PT0/6Ojo/8hISH/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/kJCQ//// + ///////0////KwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /xD///9T////m////+T////////////////39/f/zMzM/5mZmf9paWn/eHh4/6urq//h4eH///////// + ////////////6P///5H///80////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8Y////u///////////+fn5/9ra2v9VVVX/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4GBgf///////////f///1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8K////QP///4H////F////+/////////////////Pz8//Nzc3/np6e/3Nz + c/+Hh4f/tLS0/+Tk5P/////////////////////x////n////0j///8EAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////fP////v//////f39//X1 + 9f+ioqL/JCQk/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xEREf+Kior///////// + //7///9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xj///+I////xv////j///////////// + ///+/v7/7u7u/9TU1P+xsbH/mJiY/6qqqv/IyMj/7u7u//////////////////////H///+l////UP// + /wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Of///9j///////////39/f/k5OT/ZWVl/xEREf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8TExP/nZ2d///////////+////c////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////yv////////////////r6+v/x8fH/4eHh/8vLy//IyMj/09PT/+bm5v/8/Pz///////// + ////////////5v///5r///9K////BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP// + /3b////m///////////7+/v/vr6+/z4+Pv8SEhL/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/GBgY/7Gxsf//////////+/// + /2P///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////v7+//09PT/7+/v/+7u + 7v/y8vL/+/v7//////////////////////z////K////gf///zb///8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wz///+d////////////////+fn5/6Sk + pP80NDT/ERER/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/x8fH//Dw8P///////////X///9OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///+L//////v7+////////////////////////////////3////57///9Y////FQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8S////gv///+///////////+zs7P////////////Ly8v+fn5//Ozs7/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8rKyv/1NTU///////////u////PAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////a/////3//////////P// + /9f///+d////YP///yD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8S////gv////D//////////8zMzP9TU1P/Hh4e/6Ki + ov/////////////////4+Pj/qqqq/zw8PP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/RERE/+bm5v//////////4////ywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////HP///zf///8O////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y////i/// + //D//////////9HR0f9cXFz/GBgY/x4eHv99fX3/7e3t///////////r////tf////7//////f39/8jI + yP9tbW3/ICAg/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ERER/3R0dP/4+Pj//////////87///8dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8l////mP////j//////////87Ozv9dXV3/GBgY/xwcHP9zc3P/5OTk//// + ////////////yf///yf///8A////R////9z///////////7+/v/x8fH/q6ur/1tbW/8aGhr/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/y0t + Lf+5ubn///////////////+m////CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///86////r/////3//////v7+/8PD + w/9WVlb/GBgY/x4eHv90dHT/4eHh////////////////3////1z///8CAAAAAAAAAAAAAAAA////Cf// + /3v////v///////////9/f3/+Pj4/+np6f+oqKj/X19f/x8fH/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/yQkJP+NjY3/9fX1///////////1////aP///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wX///9W////yP///////////Pz8/7Kysv9ISEj/FxcX/yIiIv9+fn7/5ubm////////////////3/// + /2b///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wv///9u////4////////////v7+//r6 + +v/29vb/7u7u/7m5uf93d3f/ODg4/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ExMT/0tLS/+kpKT/9fX1//// + ////////////uf///yUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xL///90////4P//////////9PT0/5ycnP82Njb/FxcX/y0t + Lf+Pj4//7u7u////////////////3////2b///8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8G////Vv///7r////8/////////////////Pz8//r6+v/39/f/3t7e/6Oj + o/9paWn/MTEx/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8gICD/YWFh/6Ojo//o6Oj/////////////////////xf///0r///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///y7///+Z////9P// + ////////4+Pj/4KCgv8mJib/FxcX/0FBQf+mpqb/+Pj4////////////////0v///1z///8FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /zD///+j////////////////+/v7/////////////v7+//39/f/7+/v/5OTk/7CwsP98fHz/S0tL/yAg + IP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/x8fH/9gYGD/sbGx//f39//////////////////////l////kf// + /zP///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////B////1n////C/////v/////+/v7/x8fH/2NjY/8bGxv/Ghoa/2BgYP/Dw8P//v7+//// + ///////+////vv///0v///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Wf///+P//////v7+/6ysrP8vLy//VVVV/+zs + 7P/////////////////////////////////+/v7/+/v7/9/f3/+zs7P/jY2N/3R0dP9jY2P/WFhY/05O + Tv9GRkb/Pj4+/zw8PP83Nzf/MzMz/zIyMv80NDT/OTk5/0BAQP9QUFD/dXV1/6Ghof/Q0ND/+vr6//// + /////////////v///8f///97////NP///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////JP///4j////p///////////19fX/pKSk/0JC + Qv8XFxf/LCws/4aGhv/j4+P////////////////4////ov///zL///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////PP// + /8f//////////9fX1/9SUlL/GRkZ/1JSUv/a2tr///////////v///9f////WP///4z///++////5v// + /////////////////////////////////////////////////////////v7+//39/f/8/Pz//Pz8//z8 + /P/8/Pz//v7+///////////////////////////9////zP///4H///8p////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I////WP// + /7z////+///////////b29v/fn5+/ykpKf8aGhr/VFRU/7CwsP/5+fn////////////////i////ff// + /xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////K////7D//////////+3t7f96enr/HBwc/y8vL/+rq6v//v7+//// + ///////d////QQAAAAAAAAAAAAAAAAAAAAD///8A////Ev///zP///9O////bP///4f///+j////vv// + /+v/////////////////////+/v7/9LS0v/V1dX/5OTk//39/f////////////////7///+X////R/// + /xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8w////kv///+z///////////n5+f+zs7P/WVlZ/yAgIP8zMzP/hoaG/97e + 3v////////////////3///+4////Uf///wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////KP///6X////8//////f3 + 9/+Wlpb/Jycn/x8fH/+Dg4P/8vLy///////////5////h////woAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8q////Zv///4T////G/////f//////////7Ozs/6CgoP9NTU3/PT09/4mJ + if/k5OT////////////////Q////RwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xz///9y////z////////////////9zc + 3P+Kior/OTk5/ywsLP9ra2v/vb29//v7+////////////////+b///+G////IgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Kv///6X////8//////v7+/+mpqb/NDQ0/xoaGv9qamr/4eHh////////////////uv// + /ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Sf////r///////////// + ///7+/v/zs7O/4WFhf9ISEj/ZmZm/66urv/09PT////////////////d////Xv///wIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////Gv// + /2n///++/////f//////////9PT0/7W1tf9mZmb/Nzc3/19fX/+oqKj/8PDw////////////////+/// + /7P///9Q////BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////NP///6z////9//////z8/P+tra3/PDw8/xoa + Gv9dXV3/09PT////////////////2f///0////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///+x//////v7+//o6Oj/xMTE/42Njf+CgoL/p6en/+Hh4f////////////// + ///////G////WP///wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wL///8z////fP///8j////9///////////7+/v/09PT/5aWlv9aWlr/aGho/6Oj + o//l5eX/////////////////////1P///3X///8ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B////Rv// + /7v///////////r6+v+qqqr/Pj4+/xwcHP9dXV3/zs7O////////////////6P///2v///8FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///9f/////+fn5/+jo + 6P/i4uL/8fHx/////////////////////+z///+T////MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////KP///2b///+o////6P////////////////z8 + /P/i4uL/ubm5/4iIiP+Hh4f/r6+v/+Hh4f/////////////////////m////jv///zL///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8F////W////87///////////b29v+hoaH/PDw8/yEhIf9nZ2f/0tLS//// + ////////////7P///3n///8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////j///////////////////////////////6v///6L///9N////BwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Ff// + /9L/////////////////////+/v7/+zs7P/V1dX/tra2/7e3t//Ly8v/6+vr//////////////////// + //D///+f////Rf///wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8O////cv///+H//////////+/v + 7/+UlJT/Nzc3/yoqKv97e3v/3t7e////////////////6////3v///8OAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E////X/// + /5X///+O////aP///y7///8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9y///////////9/f3/9/f3/+3t7f/j4+P/4+Pj/+rq + 6v/5+fn/////////////////////8P///6P///9O////CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8Z////iv////D//////////+Pj4/+Ghob/MjIy/zw8PP+VlZX/7e3t////////////////5P// + /3P///8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /27//////v7+//z8/P/6+vr//Pz8///////////////////////////g////lP///0f///8GAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8n////nP////j//////////9XV1f96enr/NjY2/1tb + W/+zs7P/+vr6////////////////0f///1////8GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////K/////z/////////////////////////8P// + /7T///9x////K////wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///81////rP// + //3//////v7+/9DQ0P94eHj/RkZG/39/f//T09P////////////////9////tP///0T///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////VP///7b///+i////bP///zL///8EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8W////uf////7//////f39/9ra2v+UlJT/d3d3/6qqqv/t7e3///////// + ///////x////kv///ycAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4///////v7+//Dw + 8P/IyMj/ubm5/9bW1v/8/Pz////////////////Z////bv///w4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////o//////7+/v/7+/v//T09P////////////////z///+z////Rv// + /wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9i//////// + //////////////////D///+P////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wb///+l////8P///8X///9q////DQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////AAAB////////////////8AAAAA///////////////4A + AAAAA//////////////4AAAAAAB/////////////wAAAAAAAP////////////wAAAAAAAA////////// + //4AAAAAAAAA///////////8AAAAAAAAAB//////////8AAAAAAAAAAH/////////+AAAAAAAAAAAP// + ///////AAAAAAAAAAAA/////////gAAAAAAAAAAAD////////4AAAAAAAAAAAAP///////8AAAAAAAAA + AAAA///////+AAAAAAAAAAAAAH///////AAAAAAAAAAAAAAf//////wAAAAAAAAAAAAAB//////4AAAA + AAAAAAAAAAH/////+AAAAAAAAAAAAAAAf/////AAAAAAAAAAAAAAAD/////wAAAAAAAAAAAAAAAf//// + 8AAAAAAAAAAAAAAAB////+AAAAAAAAAAAAAAAAP////gAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAA + AP///+AAAAAAAAAAAAAAAAB////gAAAAAAAAAAAAAAAAf///wAAAAAAAAAAAAAAAAD///8AAAAAAAAAA + AAAAAAAf///AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAA///8AAAAAAAAAAAAAAAAAH///AAAAA + AAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAA/// + wAAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAA + AAH8AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAAAA + AAAAAAAA/AAIAAAAAAAAAAAAAAAAAP/H+AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAA///8AAAA + AAAAAAAAAAAAAf///gAAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAB////AAAAAAAAAAAAAAAAAf// + /4AAAAAAAAAAAAAAAAH////AAAAAAAAAAAAAAAAB////4AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAA + AAP////4AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAA////4AAAAAAAAAAAAAAAAf///wAAAAAAAAA + AAAAAAAH///wAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAA//+AAAYAAAAAAAAAAAAAAP/8AAA/AA + AAAAAAAAAAAAH/4AAA/8AAAAAAAAAAAAAD/gAAB//gAAAAAAAAAAAAB/AAAD//+AAAAAAAAAAAAAfwAA + H///wAAAAAAAAAAAAP8AAP////AAAAAAAAAAAAP/AA/////gAAAAAAAAAAAH/wB/////gAAAAAAAAAAA + D/+H/////gAAAAAAAAAAAB////////gAAAAAAAAAAAA////////AABwAAAAAAAAAf///////AAB/AAAA + AAAAAf///////AAB/8AAAAAAAAP//////+AAB//wAAAAAAAP//////+AAB//8AAAAAAAf//////8AAB/ + /8AAAAAAA///////8AAD//+AA8AAAD///////4AAD//+AAf8AAH///////4AAH//+AAf+AAD///////g + AAH//8AAP/gAD///////AAAP//8AAP/4AH//////8AAAP//8AAP/+AH//////+AAAf//8AAP//gP//// + ///gAA///8AAP///////////4AB///8AAP///////////+AD///8AAP////////////wP///8AAf//// + //////////////AAf//////////////////wAf//////////////////8A////////////////////A/ + ///////////////////9//////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////KAAAAEAAAACAAAAAAQAgAAAA + AAAAQAAAww4AAMMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wz///9F////ef///6D///+6////yv///9H////R////0P///8X///+3////ov// + /4j///9m////Pf///w0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8H////Wf///7f7+/v5zc3N/52dnf95eXn/YGBg/1BQUP9ISEj/RkZG/0lJ + Sf9SUlL/YGBg/3Jycv+Li4v/q6ur/9HR0f/5+fn8////zf///4b///8v////AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xL///+H/v7+7MbGxv9ra2v/IiIi/xEREf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8RERH/Ghoa/09PT/+ZmZn/6urq//// + /7n///8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///0/9/f3qp6en/zY2Nv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xsbG/+AgID/8PDw/P///8X///+S////RP///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///5Dk5OT/TExM/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/29vb/+FhYX/hISE/9XV1f/////h////eP// + /xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /539/f3/JSUl/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+jo6P/IyMj/xAQ + EP8QEBD/RUVF/66urv/8/Pzx////g////xIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///3TU1NT/oqKi/yUlJf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8SEhL/tbW1/xAQEP8QEBD/EBAQ/xAQEP8QEBD/NDQ0/6mpqf/8/Pzw////fP///w0AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zLx8fH6MTEx/35+fv8+Pj7/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/R0dH/4GBgf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ODg4/7Ky + sv/+/v7p////cf///wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wL////Lb29v/xAQEP9dXV3/YGBg/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/5iYmP8xMTH/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/QUFB/729vf/////h////YP///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9S09PT/xIS + Ev8QEBD/MzMz/4uLi/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xcXF/+zs7P/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/TU1N/87Ozv/////N////NAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////vmVlZf8QEBD/EBAQ/xEREf+urq7/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP9oaGj/ZGRk/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8SEhL/bm5u//Hx8fr///93////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////EvX19fwZGRn/EBAQ/xAQEP8QEBD/p6en/xoaGv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8RERH/t7e3/xUVFf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8wMDD/09PT/////53///8DAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///0u/v7//EBAQ/xAQEP8QEBD/EBAQ/2dn + Z/9dXV3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/XFxc/3R0dP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/x4eHv/IyMj/////mP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///91l5eX/xAQ + EP8QEBD/EBAQ/xAQEP8eHh7/qKio/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/FRUV/7e3t/8WFhb/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/Hx8f/9nZ2f////9rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////hoaGhv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/5ycnP8sLCz/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/319 + ff9ZWVn/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP83Nzf/9vb29v///ycAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///4eGhob/EBAQ/xAQEP8QEBD/EBAQ/xAQEP83Nzf/lZWV/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/zY2Nv+lpaX/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4KCgv////+2////AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+Sfn5+/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/6CgoP8zMzP/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xkZGf+0tLT/IiIi/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8YGBj/5eXl/////zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////i4KC + gv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9SUlL/vb29/6Wlpf9GRkb/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xISEv+ioqL/Q0ND/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/39/f/////+jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///2uhoaH/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/YGBg/z4+Pv8RERH/f39//0ZG + Rv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xEREf+QkJD/XFxc/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8oKCj//f398v///wYAAAAAAAAAAAAA + AAD///8G////Hv///xv///8m////Qf///2z///+73d3d/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/ygo + KP9SUlL/EBAQ/xYWFv+rq6v/ExMT/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xMT + E/+Tk5P/YmJi/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/9HR + 0f////85AAAAAAAAAAD///8B////2/n5+f/x8fH/5ubm/8/Pz/+qqqr/fHx8/729vf9CQkL/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/dnZ2/xAQEP8QEBD/U1NT/3p6ev8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/yEhIf+np6f/VFRU/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP+jo6P/////aAAAAAAAAAAA////Av////Hm5ub/v7+//6+vr/+1tbX/0NDQ//b2 + 9vz////jqamp/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/19fX/88PDz/EBAQ/xAQEP+VlZX/Xl5e/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/1RUVP+vr6//MzMz/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/i4uL/////4EAAAAAAAAAAAAAAAD///81////av// + /3b///90////Yf///z7///8O////Ffr6+vM6Ojr/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8RERH/jIyM/xUV + Ff8QEBD/FRUV/5WVlf+IiIj/HR0d/xAQEP8QEBD/PT09/6ampv95eXn/FBQU/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4eHh/////+FAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///99w8PD/xUVFf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/ykpKf+FhYX/EBAQ/xAQEP8QEBD/TExM/6Wlpf+ioqL/nZ2d/7Ozs/8hISH/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP+VlZX/////dgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////CP// + /9iSkpL/EBAQ/xEREf8QEBD/EBAQ/xAQEP8QEBD/RkZG/3p6ev8QEBD/EBAQ/xAQEP8QEBD/ERER/xIS + Ev+AgID/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/r6+v/////1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8z/f39+H5+fv8RERH/EBAQ/xAQEP8cHBz/W1tb/5mZmf+zs7P/dHR0/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/dHR0/xEREf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/9LS0v////82AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///1r8/Pz9rKys/6Ghof+wsLD/nJyc/1lZ + Wf8dHR3/EBAQ/0hISP+QkJD/JiYm/xAQEP8nJyf/a2tr/yEhIf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xgYGP/5+fn6////CgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Wv7+ + /vmcnJz/ExMT/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ISEh/29vb/+CgoL/Z2dn/xUVFf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP9QUFD/////yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8C////Q////6X6+vr48/Pz/6qqqv8aGhr/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/o6Oj/////3kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///yr///+F////4d/f3/+fn5//lZWV/9vb2//+/v7/zc3N/zExMf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/KSkp//b29vn///8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///8m////ev///9Du7u7/srKy/5SUlP+ysrL/8fHx/v///8H///9e////Tf// + /+rs7Oz/YWFh/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ERER/7Gxsf////+OAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8E////PP///4b////V8PDw/76+vv+goKD/rKys/+Tk5P/////e////gv// + /yQAAAAAAAAAAAAAAAD///8Y////r/z8/P+mpqb/ISEh/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4iI + iP/////S////CwAAAAAAAAAA////KP///3L///+w////7/Dw8P/Pz8//t7e3/7q6uv/l5eX/////5f// + /5L///86////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///9s////9eXl5f9fX1//EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/ERER/46Ojv/////c////HAAAAAAAAAAAAAAAAP////L7+/v/8vLy/+bm5v/m5ub/+Pj4/v// + /9L///+H////Of///wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /yD///+k/v7+/729vf8/Pz//EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/FBQU/6Ojo//////P////GQAAAAAAAAAAAAAAAAAAAAD////S/////v// + /9z///+f////X////xsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wT///9h////3MfHx/+rq6v//Pz8/7S0tP9BQUH/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/HR0d/7m5uf////+/////DwAAAAAAAAAAAAAAAAAA + AAAAAAAA////B////xH///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Cf///2r////eysrK/1hYWP9jY2P/2tra/////7f///9+/v7+9szM + zP9zc3P/JSUl/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/QkJC/9ra2v////+f////BwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8X////gP7+/uq+vr7/VVVV/2ZmZv/V1dX/////0f// + /1D///8AAAAAAP///yH///+a////+Pj4+P++vr7/dnZ2/zQ0NP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xEREf9ERET/qamp//z8 + /O7///9h////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///zL///+e+Pj496enp/9LS0v/eHh4/9/f + 3//////L////Uv///wEAAAAAAAAAAAAAAAAAAAAAAAAAAP///xf///96////6P7+/v/7+/v/4ODg/6Wl + pf9tbW3/Ojo6/xQUFP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8UFBT/TExM/56e + nv/i4uL/////3f///37///8TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8J////Xv///8bm5ub/iIiI/0xM + TP+Xl5f/8PDw/f///7T///9C////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8P////iPX1 + 9fiFhYX/bGxs//r6+v7///+t////0v////n29vb/0NDQ/7W1tf+pqan/oKCg/5ycnP+Xl5f/mZmZ/6Oj + o//FxcX/8vLy/v///9P///98////LP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///zH///+T/f397sPD + w/9ra2v/ampq/8DAwP/+/v7t////jv///yUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wr///9z/f3966qqqv9OTk7/s7Oz/////9////9KAAAAAAAAAAD///8E////IP///2H///+r////+fr6 + +v+6urr/m5ub//Hx8f/////z////d////xYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8h////dv// + /9Dq6ur/np6e/3Nzc/+hoaH/7u7u/v///8D///9c////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Df///3X+/v7oubm5/1RUVP+Wlpb/9/f39f///4L///8KAAAAAAAAAAAAAAAAAAAAAP// + /z7+/v7+6+vr/7a2tv+VlZX/xcXF//z8/PH///+O////GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K////Q/// + /4f////Q9/f3/8/Pz/+oqKj/qamp/+Li4v/////d////gf///yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8Y////hf39/e62trb/XFxc/5OTk//z8/P6////m////xwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///9Z/f39//Ly8v/7+/v6////u////2H///8MAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8i////9Pz8/P/y8vL/5OTk/9nZ2f/t7e3/////5P///5H///85////AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yn///+c+Pj496qqqv9nZ2f/pKSk//f39/j///+a////IgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///z3///8+////DAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////Jv////79/f3//v7++////8n///+D////N////wIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////OP///7Dz8/P9pKSk/4CAgP/Dw8P//v7+7P// + /4X///8ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9C////RP///w4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////l/v7+//W1tb/t7e3/+Xl + 5f/////R////ZP///woAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /8H6+vr//Pz8+////6v///8+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8r////bf///x4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////gAB///////wAAAf/////8AAAA/ + /////gAAAAP////4AAAAAP////AAAAAAP///8AAAAAAP///gAAAAAAP//8AAAAAAAP//wAAAAAAAf//A + AAAAAAAf/4AAAAAAAA//gAAAAAAAB/+AAAAAAAAH/4AAAAAAAAP/gAAAAAAAAf+AAAAAAAAB/4AAAAAA + AAH/gAAAAAAAAOAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAOAAAAAAAAAA/+AAAAAAAAD/4AAAAAAAAP/w + AAAAAAAA//gAAAAAAAD//AAAAAAAAf/wAAAAAAAB/8AAAAAAAAH8AAAAAAAAA+ABwAAAAAADAAfgAAAA + AAcAP/gAAAAADwP/8AAAAAAfH//AAAAAAD///wAgAAAAf//4APgAAAH//+AD+AAAB///AB/gGAB///gA + f4A8Af//wAP+APwH//+AD/gD/D///4B/4A//////x//AP////////8D/////////x/////////////// + /////////////////////////////////////////////////////////////////////////////ygA + AAAwAAAAYAAAAAEAIAAAAAAAACQAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8J////E////x3///8d////Gf///w////8I////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wv///9U////nOvr69POzs7yvLy8/rKysv+wsLD/tbW1/8DAwPzQ0NDu5ubm2Pv7+7L///9/////QP// + /wgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8d////j9zc3OqGhob/Pj4+/xkZGf8SEhL/ERER/xEREf8RERH/ERER/xEREf8RERH/FhYW/ycn + J/9WVlb/lpaW/+Li4ub///94////CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Av///2TR0dHzVVVV/xISEv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xYWFv91dXX/7Ozs6vj4+LX///9n////EgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8D////k5+fn/4YGBj/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8TExP/ioqK/ygoKP90dHT/0NDQ8P// + /5D///8cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///99s7Oz/1hYWP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP81NTX/aGho/xAQ + EP8QEBD/ExMT/1ZWVv/Ly8v0////j////xcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zq5ubn8KSkp/25ubv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP94eHj/JiYm/xAQEP8QEBD/EBAQ/xAQEP8RERH/W1tb/9HR0fP///+D////EgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////A/Pz88osLCz/ExMT/4OD + g/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP+Pj4//EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xQUFP9nZ2f/2tra6f// + /2////8FAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////QpmZ + mf4QEBD/EBAQ/4iIiP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0VFRf9cXFz/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/GRkZ/4CAgP/19fXH////IgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////k0JCQv8QEBD/EBAQ/3p6ev8gICD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/4+Pj/8TExP/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP89PT3/3t7e6P///zEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8A7u7uyRkZGf8QEBD/EBAQ/zQ0NP9oaGj/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/QUFB/2RkZP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Ly8v/+Dg4Ob///8dAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8B3d3d4REREf8QEBD/EBAQ/xAQEP+NjY3/ERER/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8TExP/kZGR/xQU + FP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0ND + Q//4+Pi9////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8D2tra5RAQEP8QEBD/EBAQ/xAQ + EP9VVVX/TExM/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP9ubm7/Pj4+/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP+Pj4//////WgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8E19fX5xAQ + EP8QEBD/EBAQ/xAQEP8SEhL/oKCg/2pqav8YGBj/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/0NDQ/9vb2//EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8iIiL/7e3t0P///wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8B5ubm1BUVFf8QEBD/EBAQ/xAQEP8QEBD/c3Nz/yYmJv98fHz/FxcX/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/NDQ0/4SEhP8RERH/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/o6Oj/v///zAAAAAAAAAAAP// + /yT///9V////V////2z+/v6Y8fHx7T09Pf8QEBD/EBAQ/xAQEP8QEBD/VFRU/xEREf8vLy//bW1t/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP89PT3/hISE/xMTE/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Xl5e//// + /3EAAAAAAAAAAP///7rh4eH/ubm5/6ampv+cnJz/srKy/5aWlv8QEBD/EBAQ/xAQEP8QEBD/Nzc3/z09 + Pf8QEBD/b29v/z4+Pv8QEBD/EBAQ/xAQEP8QEBD/EhIS/2RkZP9ycnL/EhIS/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/ODg4/////5kAAAAAAAAAAP///0f///+R////mf///4z///9o////M/Dw8NIoKCj/EBAQ/xAQ + EP8QEBD/EBAQ/25ubv8TExP/FBQU/4WFhf9ZWVn/ERER/xAQEP9AQED/jIyM/0JCQv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/Li4u//7+/qQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /0uvr6//EhIS/xAQEP8QEBD/EBAQ/x4eHv9ubm7/ERER/xAQEP9NTU3/gICA/3t7e/+MjIz/EhIS/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Ozs7/////5UAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD+/v6mhoaG/xEREf8QEBD/EBAQ/xcXF/9tbW3/e3t7/xEREf8QEBD/EBAQ/xAQ + EP9dXV3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/WFhY/////3cAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8P/Pz8zpqamv9/f3//h4eH/3h4eP9HR0f/Ojo6/3R0 + dP8cHBz/FBQU/0xMTP8sLCz/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/goKC//// + /0sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////GP7+/tuXl5f/FBQU/xAQ + EP8QEBD/EBAQ/xkZGf9ZWVn/YmJi/x0dHf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/wMDA+P///xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///x7///937+/v1Ly8 + vP/k5OT/r6+v/x8fH/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8yMjL/+Pj4tv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xX///9m+/v7vczM + zPmvr6//urq6/+zs7Nz///97////udbW1v89PT3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+wsLD9////QAAAAAAAAAAA////Bf///y////92+fn5wtfX + 1/y7u7v/ubm5/+Hh4ez///+b////Pv///wIAAAAA////Av///2729vb2gICA/xYWFv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ERER/4iIiP////+J////AAAAAAD///+g+/v75+/v + 7//f39//1NTU/+fn5+j+/v6g////Tv///woAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8x/v7+wc/P + z/5ISEj/ERER/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8TExP/k5OT//7+/pT///8CAAAAAAAA + AAD////m/Pz89f39/b////9+////Of///wcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8N////e9/f3/nNzc3/tra2/0RERP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xcXF/+pqan+////fv// + /wIAAAAAAAAAAAAAAAD///8J////BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8A////GP///4Db29vtfHx8/4CAgP/n5+ff////Yf///7zNzc3+dnZ2/ywsLP8RERH/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Pz8//83N + zfT///9e////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AP///yz+/v6ZzMzM83h4eP+IiIj/4+Pj4v///27///8KAAAAAP///wH///9E////s/j4 + +PvJycn/iIiI/0xMTP8dHR3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/Jycn/2pq + av+5ubn6+vr6sf///ykAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wX///9U+fn5vLGxsfxzc3P/np6e/+7u7tT///9i////CQAAAAAAAAAAAAAAAAAA + AAAAAAAA////M/j4+NKWlpb/zs7O/////9D09PTj0dHR/qWlpf+Kior/f39//3l5ef91dXX/enp6/5OT + k//Dw8P79vb2vv///2r///8f////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wH///8q////ieHh4eeZmZn/hISE/8LCwvf+/v6r////Q////wEAAAAAAAAAAAAA + AAAAAAAA////AP///yr7+/untbW1/XV1df/R0dHx////dP///wT///8A////Df///3L////N7u7u/66u + rv+/v7///f396v///23///8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wT///8w////evb29svKysr9p6en/7Kysv7s7OzS////df///xoAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wD///81+/v7qbu7u/p9fX3/urq6+v39/Z////8dAAAAAAAAAAAAAAAA////D/39 + /fbg4OD/ycnJ/u/v79L///9w////EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////bv39/eb09PT+5OTk/9fX1//t7e3g////jP///zP///8CAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////Sfr6+ryysrL9ioqK/8HBwfv8/Pyk////K////wAAAAAAAAAAAAAA + AAAAAAAA////Af///13///9n////K////wIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////h/7+/vD+/v6+////ff///zP///8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////BP///1r29vbRvb29/6Ghof/a2trt////jv///yEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///wcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Uvr6+v/g4OD/8/Pz0////2v///8PAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////F////4////9F////AwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD//4A///8AAP/8AAP//wAA//AAAP//AAD/wAAAH/8AAP+AAAAH/wAA/4AAAAH/AAD/AAAAAH8AAP4A + AAAAHwAA/gAAAAAPAAD+AAAAAAcAAPwAAAAAAwAA/AAAAAABAAD8AAAAAAEAAPwAAAAAAAAA/AAAAAAA + AADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAAD/AAAAAAAAAP8AAAAAAAAA/4AAAAAAAAD/wAAAAAAAAP4A + AAAAAAAA+AAAAAABAACACAAAAAEAAAB8AAAAAwAAA/4AAAAHAAA/8AAAAA8AAP/AEAAAPwAA/wB4AAB/ + AAD4AeAAB/8AAMAPgHAf/wAAgD4A8H//AACB+Af///8AAJ/4H////wAA//h/////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAAoAAAAIAAAAEAAAAABACAAAAAAAAAQ + AADDDgAAww4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////A////y////9W////Z////2j///9f////Sv// + /yn///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Jubm5pOamprrY2Nj/z4+Pv8uLi7/LCws/zU1 + Nf9HR0f/Z2dn/5KSkvLS0tKt////OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////APDw8Hd9fX36Ghoa/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xMTE/97e3v+tra21evr64r///8iAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq6uqEenp6/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/15eXv8VFRX/HR0d/3p6evvc3Nyh////IgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////QGhoaP5eXl7/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ZGRk/xAQEP8QEBD/EBAQ/xoa + Gv99fX364+Pjlv///xkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+vr7EEBAQ/19f + X/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/ygoKP9OTk7/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8fHx//jo6O8/b29mn///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////F3d3 + d/4QEBD/S0tL/yYmJv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ZmZm/xER + Ef8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/TExM/+bm5o7///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAD///8/T09P/xAQEP8TExP/YGBg/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/y0t + Lf9OTk7/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/UFBQ//n5+WIAAAAAAAAAAAAA + AAAAAAAAAAAAAP///0ZJSUn/EBAQ/xAQEP9fX1//GRkZ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8SEhL/bGxs/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/mJiY7f// + /w4AAAAAAAAAAAAAAAAAAAAA////PlFRUf8QEBD/EBAQ/zU1Nf9sbGz/R0dH/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/2hoaP8dHR3/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8yMjL//v7+ZwAAAAD///849vb2juHh4Zm7u7vJe3t7/xAQEP8QEBD/FhYW/zo6Ov9JSUn/Kysr/xAQ + EP8QEBD/EBAQ/xQUFP9oaGj/JCQk/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP/Ly8uoAAAAAP///0rg4OC3ycnJtebm5pLg4OC7Gxsb/xAQEP8QEBD/Tk5O/xER + Ef9nZ2f/MTEx/xAQEP9BQUH/ZGRk/xkZGf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/7GxscEAAAAAAAAAAAAAAAAAAAAAAAAAAP///yGWlpb1EBAQ/xAQ + EP8WFhb/VVVV/xAQEP9ERET/WFhY/1lZWf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/vb29tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+ + /mGOjo7/XFxc/1tbW/9eXl7/V1dX/xUVFf8sLCz/LS0t/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xISEv/o6OiOAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Ef39/byTk5P/ExMT/xAQEP8UFBT/RERE/ycnJ/8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/RUVF/////1AAAAAAAAAAAAAA + AAD///8K////Utzc3KvHx8f3xcXF7/Hx8aq5ubn6JCQk/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP+qqqrh////B/// + /yb///9p6OjosNbW1vTPz8/42NjYsv///1j///8JAAAAAP///zLk5OTYXV1d/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/hYWF9v// + /z4AAAAA/v7+8PT09N7y8vKe////Vv///w8AAAAAAAAAAAAAAAAAAAAAAAAAAP///yHv7+/fqamp/0VF + Rf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/ExMT/5WV + le////8+AAAAAAAAAAD///8G////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///ybj4+OXnp6e96Cg + oPPt7e2C////ZcrKyuR7e3v/MjIy/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/0ND + Q/+6urrT////KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Av///0nMzMyzoKCg/aam + puzv7++D////FQAAAAAAAAAA////Cvz8/Li6urr/3d3d6qWlpfJ6enr/YGBg/1dXV/9UVFT/YmJi/4+P + j/TQ0NCp////V////wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////JvT09IC7u7vgr6+v/7u7 + u8f+/v5h////CQAAAAAAAAAA////A/7+/lq3t7fXoKCg/d/f35v///8T////Af7+/m/l5eXpw8PD/97e + 3t////9h////BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8I/v7+kPPz89Xj4+P/zc3N3fHx + 8YX///8pAAAAAAAAAAAAAAAA////Cvv7+2u6urrcq6ur/dPT067///8uAAAAAAAAAAAAAAAA/v7+Zvj4 + +JH///9H////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr+/v6h////dP// + /y7///8AAAAAAAAAAAAAAAAAAAAAAP39/XTd3d3rv7+/9OXl5Zb///8oAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/f39lv39/XH///8QAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////wB///wAH//wA + AP/8AAA/+AAAD/gAAAPwAAAB8AAAAfAAAADwAAAAgAAAAIAAAAD4AAAA/AAAAPwAAADgAAAAAIAAAQfA + AAM/AAAH+AwAD8AwAH8BwOH/B4P///+P////////////////////////KAAAABgAAAAwAAAAAQAgAAAA + AAAACQAAww4AAMMOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8Y8/PzXMjIyIO5ubmOv7+/idvb + 23T9/f1M////EgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Ga6urqheXl76Hh4e/xEREf8QEBD/EBAQ/xISEv8nJyf/ZWVl+b+/v5r6+vpH////BQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8goKCg5BISEv8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/05OTv8vLy//f39/4ODg4Gj///8GAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wGenp7AS0tL/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/09P + T/8QEBD/EBAQ/yMjI/+Dg4Pd5+fnW////wEAAAAAAAAAAAAAAAAAAAAAAAAAAP///zU/Pz//SEhI/xQU + FP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/PT09/yQkJP8QEBD/EBAQ/xAQEP8QEBD/Li4u/62t + rbT///8MAAAAAAAAAAAAAAAAAAAAAOXl5WsSEhL/GRkZ/0VFRf8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8RERH/U1NT/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xgYGP+vr6+w////AQAAAAAAAAAAAAAAANnZ + 2XUQEBD/EBAQ/1VVVf8pKSn/EBAQ/xAQEP8QEBD/EBAQ/xAQEP9MTEz/Gxsb/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP80NDT/8/PzSwAAAAD///8e////MfHx8ZYcHBz/EBAQ/zo6Ov85OTn/KSkp/xAQ + EP8QEBD/EBAQ/0FBQf8uLi7/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/n5+fqAAA + AADz8/Okzc3Nybu7u6Zqamr0EBAQ/xoaGv8zMzP/UlJS/yMjI/8cHBz/UVFR/ykpKf8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/gYGBzwAAAAAAAAAAAAAAAAAAAADV1dV8Li4u/xAQ + EP9ERET/Kysr/zs7O/9dXV3/ERER/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/iIiIwgAAAAAAAAAAAAAAAAAAAAD///8E2dnZsGxsbP84ODj/NjY2/zs7O/8pKSn/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/sLCwlQAAAAAAAAAA////Bfz8 + /EnMzMyj0tLS693d3cxRUVH/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQ + EP8QEBD/EBAQ/xAQEP9AQED++vr6Pf39/WPt7e2p4eHh6dDQ0Lvt7e1k////EP///wH5+fllkpKS7x4e + Hv8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/xAQEP8QEBD/EBAQ/zIyMv/Hx8eI////AP39 + /Xr+/v5P////EAAAAAAAAAAAAAAAAP///wbo6Oheq6ur3NPT09CAgIDuMDAw/xAQEP8QEBD/EBAQ/xAQ + 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 + AAD//wAA//8AAA== + + \ No newline at end of file diff --git a/grapher/Icon/mouse.ico b/grapher/Icon/mouse.ico new file mode 100644 index 0000000..493036a Binary files /dev/null and b/grapher/Icon/mouse.ico differ -- cgit v1.2.3 From e45daaceb233a1e67d1411109ad4b2785bf0c4e6 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Sun, 20 Sep 2020 21:56:57 -0700 Subject: conditional around lookup map --- common/accel-experimenttwo.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/common/accel-experimenttwo.hpp b/common/accel-experimenttwo.hpp index 8359cc2..73428f7 100644 --- a/common/accel-experimenttwo.hpp +++ b/common/accel-experimenttwo.hpp @@ -37,7 +37,12 @@ namespace rawaccel { inline int map(double speed) { - return speed > 0 ? (int)floor(200*log10(speed)+402) : 0; + int index = speed > 0 ? (int)floor(200*log10(speed)+402) : 0; + + if (index < 0) return 0; + if (index > 1200) return 1200; + + return index; } inline double fill(double* lookup) -- cgit v1.2.3 From 75c5f80cad2b671df2d20c4b0395b5aec1bc10af Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Tue, 22 Sep 2020 03:01:34 -0400 Subject: add lut exp to driver --- common/accel-experimenttwo.hpp | 43 ++++++++++++++++++++++++------------------ common/rawaccel.hpp | 27 ++++++++++++++++++-------- driver/driver.cpp | 29 ++++++++++++++++++++++++++-- wrapper/wrapper.cpp | 21 +++++++++++++++++++-- 4 files changed, 90 insertions(+), 30 deletions(-) diff --git a/common/accel-experimenttwo.hpp b/common/accel-experimenttwo.hpp index 73428f7..a961f78 100644 --- a/common/accel-experimenttwo.hpp +++ b/common/accel-experimenttwo.hpp @@ -4,8 +4,17 @@ #include "accel-base.hpp" +#define RA_LOOKUP + namespace rawaccel { + constexpr size_t LUT_SIZE = 601; + + struct si_pair { + double slope = 0; + double intercept = 0; + }; + /// Struct to hold sigmoid (s-shaped) gain implementation. struct experimenttwo_impl { double rate; @@ -27,51 +36,49 @@ namespace rawaccel { inline double legacy_offset(double speed) const { return operator()(speed); } - inline double apply(double* lookup, double speed) + inline double apply(si_pair* lookup, double speed) const { - int index = map(speed); - double slope = lookup[index]; - double intercept = lookup[index + 1]; - return slope + intercept / speed; + si_pair pair = lookup[map(speed)]; + return pair.slope + pair.intercept / speed; } - inline int map(double speed) + inline int map(double speed) const { - int index = speed > 0 ? (int)floor(200*log10(speed)+402) : 0; + int index = speed > 0 ? (int)(100 * log10(speed) + 201) : 0; if (index < 0) return 0; - if (index > 1200) return 1200; + if (index >= LUT_SIZE) return LUT_SIZE - 1; return index; } - inline double fill(double* lookup) + inline void fill(si_pair* lookup) const { double lookup_speed = 0; double gain_integral_speed = 0; double gain = 0; double intercept = 0; double output = 0; - int index = 0; + double x = -2; - lookup[index] = gain; - lookup[index + 1] = intercept; + lookup[0] = {}; - for (double x = -2.0; x <= 4.0; x += 0.01) + for (size_t i = 1; i < LUT_SIZE; i++) { - index+=2; - lookup_speed = pow(10,x); + x += 0.01; + + lookup_speed = pow(10, x); while (gain_integral_speed < lookup_speed) { gain_integral_speed += 0.001; gain = operator()(gain_integral_speed); - output += gain*0.001; + output += gain * 0.001; } intercept = gain * lookup_speed - output; - lookup[index] = gain; - lookup[index + 1] = intercept; + + lookup[i] = { gain, intercept }; } } diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index 2914225..ca2d4d7 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -13,7 +13,7 @@ #include "accel-naturalgain.hpp" #include "accel-power.hpp" #include "accel-sigmoidgain.hpp" -#include "accel-experimentone.hpp" +#include "accel-experimenttwo.hpp" #include "accel-noaccel.hpp" namespace rawaccel { @@ -93,6 +93,8 @@ namespace rawaccel { } struct accel_variant { + si_pair* lookup; + accel_mode tag = accel_mode::noaccel; union union_t { @@ -107,15 +109,24 @@ namespace rawaccel { accel_noaccel noaccel = {}; } u = {}; - accel_variant(const accel_args& args, accel_mode mode) : - tag(mode) + accel_variant(const accel_args& args, accel_mode mode, si_pair* lut = nullptr) : + tag(mode), lookup(lut) { visit_accel([&](auto& impl) { impl = { args }; }, *this); + + if (lookup && tag == accel_mode::experimentone) { + u.experimentone.fn.fill(lookup); + } + } inline double apply(double speed) const { + if (lookup && tag == accel_mode::experimentone) { + return u.experimentone.fn.apply(lookup, speed); + } + return visit_accel([=](auto&& impl) { return impl(speed); }, *this); @@ -193,8 +204,8 @@ namespace rawaccel { velocity_gain_cap gain_cap; accel_scale_clamp clamp; - accelerator(const accel_args& args, accel_mode mode) : - accel(args, mode), gain_cap(args.gain_cap, accel), clamp(args.scale_cap) + accelerator(const accel_args& args, accel_mode mode, si_pair* lut = nullptr) : + accel(args, mode, lut), gain_cap(args.gain_cap, accel), clamp(args.scale_cap) {} inline double apply(double speed) const { @@ -216,7 +227,7 @@ namespace rawaccel { vec2 accels; vec2d sensitivity = { 1, 1 }; - mouse_modifier(const settings& args) : + mouse_modifier(const settings& args, vec2 luts = {}) : combine_magnitudes(args.combine_mags) { if (args.degrees_rotation != 0) { @@ -233,8 +244,8 @@ namespace rawaccel { return; } - accels.x = accelerator(args.argsv.x, args.modes.x); - accels.y = accelerator(args.argsv.y, args.modes.y); + accels.x = accelerator(args.argsv.x, args.modes.x, luts.x); + accels.y = accelerator(args.argsv.y, args.modes.y, luts.y); apply_accel = true; } diff --git a/driver/driver.cpp b/driver/driver.cpp index fb47477..4dd3d62 100644 --- a/driver/driver.cpp +++ b/driver/driver.cpp @@ -12,11 +12,13 @@ namespace ra = rawaccel; using milliseconds = double; +using lut_value_t = ra::si_pair; struct { ra::settings args; milliseconds tick_interval = 0; // set in DriverEntry ra::mouse_modifier modifier; + vec2 lookups = {}; } global; VOID @@ -168,8 +170,14 @@ Return Value: return; } - global.args = *reinterpret_cast(buffer); - global.modifier = { global.args }; + ra::settings new_settings = *reinterpret_cast(buffer); + + if (new_settings.time_min <= 0 || _isnanf(new_settings.time_min)) { + new_settings.time_min = ra::settings{}.time_min; + } + + global.args = new_settings; + global.modifier = { global.args, global.lookups }; WdfRequestComplete(Request, STATUS_SUCCESS); } @@ -251,6 +259,23 @@ Routine Description: KeQueryPerformanceCounter(&freq); global.tick_interval = 1e3 / freq.QuadPart; + auto make_lut = [] { + const size_t POOL_SIZE = sizeof(lut_value_t) * ra::LUT_SIZE; + + auto pool = ExAllocatePoolWithTag(NonPagedPool, POOL_SIZE, 'AR'); + + if (!pool) { + DebugPrint(("RA - failed to allocate LUT\n")); + } + else { + RtlZeroMemory(pool, POOL_SIZE); + } + + return reinterpret_cast(pool); + }; + + global.lookups = { make_lut(), make_lut() }; + CreateControlDevice(driver); } else { diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index 3108bda..0778bc3 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -22,6 +22,13 @@ public ref struct DriverInterop public ref class ManagedAccel { mouse_modifier* const modifier_instance = new mouse_modifier(); +#ifdef RA_LOOKUP + si_pair* const lut_x = new si_pair[LUT_SIZE]; + si_pair* const lut_y = new si_pair[LUT_SIZE]; +#else + si_pair* lut_x = nullptr; + si_pair* lut_y = nullptr; +#endif public: static initonly double WriteDelay = -10000000 / -10000.0; @@ -29,11 +36,15 @@ public: virtual ~ManagedAccel() { delete modifier_instance; + delete[] lut_x; + delete[] lut_y; } !ManagedAccel() { delete modifier_instance; + delete[] lut_x; + delete[] lut_y; } Tuple^ Accelerate(int x, int y, double time) @@ -49,7 +60,10 @@ public: void UpdateFromSettings(IntPtr argsIn) { - *modifier_instance = { *reinterpret_cast(argsIn.ToPointer()) }; + *modifier_instance = { + *reinterpret_cast(argsIn.ToPointer()) + , vec2{ lut_x, lut_y } + }; } static ManagedAccel^ GetActiveAccel() @@ -58,7 +72,10 @@ public: wrapper_io::readFromDriver(args); auto active = gcnew ManagedAccel(); - *active->modifier_instance = { args }; + *active->modifier_instance = { + args + , vec2 { active->lut_x, active->lut_y } + }; return active; } }; -- cgit v1.2.3 From 4bf7cea7083e4f445032443f23f00b93b314630d Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 00:10:56 -0700 Subject: faster type switch --- grapher/Layouts/LayoutBase.cs | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/grapher/Layouts/LayoutBase.cs b/grapher/Layouts/LayoutBase.cs index 6ed8fee..9016940 100644 --- a/grapher/Layouts/LayoutBase.cs +++ b/grapher/Layouts/LayoutBase.cs @@ -58,30 +58,32 @@ namespace grapher.Layouts Button button, int top) { - AccelLayout.Layout(accelOption); - CapLayout.Layout(capOption); - WeightLayout.Layout(weightOption); - OffsetLayout.Layout(offsetOption); - LimExpLayout.Layout(limExpOption); - MidpointLayout.Layout(midpointOption); - button.Enabled = ButtonEnabled; IOption previous = null; - foreach (var option in new IOption[] { accelOption, capOption, weightOption, offsetOption, limExpOption, midpointOption}) + + foreach (var option in new (OptionLayout, IOption)[] { + (AccelLayout, accelOption), + (CapLayout, capOption), + (WeightLayout, weightOption), + (OffsetLayout, offsetOption), + (LimExpLayout, limExpOption), + (MidpointLayout, midpointOption)}) { - if (option.Visible) + option.Item1.Layout(option.Item2); + + if (option.Item2.Visible) { if (previous != null) { - option.SnapTo(previous); + option.Item2.SnapTo(previous); } else { - option.Top = top; + option.Item2.Top = top; } - previous = option; + previous = option.Item2; } } } -- cgit v1.2.3 From 8e58892723ee10792c7d3db275da826f98d01677 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 02:28:35 -0700 Subject: Mostly works --- common/accel-experimenttwo.hpp | 2 +- grapher/Form1.Designer.cs | 6 +++--- grapher/Layouts/DefaultLayout.cs | 1 + grapher/Layouts/ExperimentOneLayout.cs | 1 + grapher/Layouts/LayoutBase.cs | 7 +++++-- grapher/Layouts/LinearLayout.cs | 1 + grapher/Layouts/LogarithmLayout.cs | 1 + grapher/Layouts/NaturalGainLayout.cs | 1 + grapher/Layouts/NaturalLayout.cs | 1 + grapher/Layouts/OffLayout.cs | 1 + grapher/Layouts/PowerLayout.cs | 1 + grapher/Layouts/SigmoidGainLayout.cs | 1 + grapher/Models/Calculations/AccelCalculator.cs | 5 +++++ grapher/Models/Calculations/AccelChartData.cs | 2 +- grapher/Models/Charts/AccelCharts.cs | 5 +++++ grapher/Models/Charts/ChartState/ChartState.cs | 24 ++++++++++++++++++++++++ grapher/Models/Charts/ChartXY.cs | 16 ++++++++++++++++ grapher/Models/Mouse/PointData.cs | 4 ++-- grapher/Models/Options/AccelTypeOptions.cs | 7 +++++-- grapher/Models/Options/ApplyOptions.cs | 4 ++++ 20 files changed, 80 insertions(+), 11 deletions(-) diff --git a/common/accel-experimenttwo.hpp b/common/accel-experimenttwo.hpp index a961f78..b248364 100644 --- a/common/accel-experimenttwo.hpp +++ b/common/accel-experimenttwo.hpp @@ -76,7 +76,7 @@ namespace rawaccel { output += gain * 0.001; } - intercept = gain * lookup_speed - output; + intercept = output - gain * lookup_speed; lookup[i] = { gain, intercept }; } diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index 535ee15..46b7a9a 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -580,7 +580,7 @@ namespace grapher this.gainCapToolStripMenuItem, this.legacyCapToolStripMenuItem}); this.capStyleToolStripMenuItem.Name = "capStyleToolStripMenuItem"; - this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.capStyleToolStripMenuItem.Text = "Cap Style"; // // gainCapToolStripMenuItem @@ -603,7 +603,7 @@ namespace grapher this.gainOffsetToolStripMenuItem, this.legacyOffsetToolStripMenuItem}); this.offsetStyleToolStripMenuItem.Name = "offsetStyleToolStripMenuItem"; - this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); + this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.offsetStyleToolStripMenuItem.Text = "Offset Style"; // // gainOffsetToolStripMenuItem @@ -624,7 +624,7 @@ namespace grapher this.wholeVectorToolStripMenuItem, this.byVectorComponentToolStripMenuItem}); this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(163, 22); + this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 22); this.toolStripMenuItem1.Text = "Application Style"; // // wholeVectorToolStripMenuItem diff --git a/grapher/Layouts/DefaultLayout.cs b/grapher/Layouts/DefaultLayout.cs index 83535c2..cf6f87f 100644 --- a/grapher/Layouts/DefaultLayout.cs +++ b/grapher/Layouts/DefaultLayout.cs @@ -10,6 +10,7 @@ namespace grapher.Layouts Name = "Default"; Index = (int)AccelMode.noaccel; ButtonEnabled = false; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(true, Cap); diff --git a/grapher/Layouts/ExperimentOneLayout.cs b/grapher/Layouts/ExperimentOneLayout.cs index 1853fbc..ad6f61a 100644 --- a/grapher/Layouts/ExperimentOneLayout.cs +++ b/grapher/Layouts/ExperimentOneLayout.cs @@ -14,6 +14,7 @@ namespace grapher.Layouts { Name = "Experiment 1"; Index = (int)AccelMode.experimentone; + LogarithmicCharts = true; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(false, string.Empty); diff --git a/grapher/Layouts/LayoutBase.cs b/grapher/Layouts/LayoutBase.cs index 10429fb..b89e2f7 100644 --- a/grapher/Layouts/LayoutBase.cs +++ b/grapher/Layouts/LayoutBase.cs @@ -25,15 +25,18 @@ namespace grapher.Layouts MidpointLayout = new OptionLayout(false, string.Empty); ButtonEnabled = true; + LogarithmicCharts = false; } /// /// Gets or sets mapping from acceleration type to identifying integer. /// Must match accel_mode defined in rawaccel-settings.h /// - public int Index { get; internal set; } + public int Index { get; protected set; } - public string Name { get; internal set; } + public string Name { get; protected set; } + + public bool LogarithmicCharts { get; protected set; } protected bool ButtonEnabled { get; set; } diff --git a/grapher/Layouts/LinearLayout.cs b/grapher/Layouts/LinearLayout.cs index 8afdc79..e87c851 100644 --- a/grapher/Layouts/LinearLayout.cs +++ b/grapher/Layouts/LinearLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "Linear"; Index = (int)AccelMode.linear; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(true, Cap); diff --git a/grapher/Layouts/LogarithmLayout.cs b/grapher/Layouts/LogarithmLayout.cs index 5b25d60..e39dbe7 100644 --- a/grapher/Layouts/LogarithmLayout.cs +++ b/grapher/Layouts/LogarithmLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "Logarithm"; Index = (int)AccelMode.logarithm; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Scale); CapLayout = new OptionLayout(true, Cap); diff --git a/grapher/Layouts/NaturalGainLayout.cs b/grapher/Layouts/NaturalGainLayout.cs index dd2cc05..b9cf75e 100644 --- a/grapher/Layouts/NaturalGainLayout.cs +++ b/grapher/Layouts/NaturalGainLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "NaturalGain"; Index = (int)AccelMode.naturalgain; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(false, string.Empty); diff --git a/grapher/Layouts/NaturalLayout.cs b/grapher/Layouts/NaturalLayout.cs index faa4730..59895df 100644 --- a/grapher/Layouts/NaturalLayout.cs +++ b/grapher/Layouts/NaturalLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "Natural"; Index = (int)AccelMode.natural; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(false, string.Empty); diff --git a/grapher/Layouts/OffLayout.cs b/grapher/Layouts/OffLayout.cs index 85c8d3f..c47ea39 100644 --- a/grapher/Layouts/OffLayout.cs +++ b/grapher/Layouts/OffLayout.cs @@ -10,6 +10,7 @@ namespace grapher.Layouts Name = "Off"; Index = (int)AccelMode.noaccel; ButtonEnabled = true; + LogarithmicCharts = false; AccelLayout = new OptionLayout(false, string.Empty); CapLayout = new OptionLayout(false, string.Empty); diff --git a/grapher/Layouts/PowerLayout.cs b/grapher/Layouts/PowerLayout.cs index 2004f23..5391506 100644 --- a/grapher/Layouts/PowerLayout.cs +++ b/grapher/Layouts/PowerLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "Power"; Index = (int)AccelMode.power; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(true, Cap); diff --git a/grapher/Layouts/SigmoidGainLayout.cs b/grapher/Layouts/SigmoidGainLayout.cs index c807439..684de83 100644 --- a/grapher/Layouts/SigmoidGainLayout.cs +++ b/grapher/Layouts/SigmoidGainLayout.cs @@ -9,6 +9,7 @@ namespace grapher.Layouts { Name = "SigmoidGain"; Index = (int)AccelMode.sigmoidgain; + LogarithmicCharts = false; AccelLayout = new OptionLayout(true, Acceleration); CapLayout = new OptionLayout(false, string.Empty); diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index 8865939..ab6e9de 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -64,6 +64,11 @@ namespace grapher.Models.Calculations foreach (var magnitudeDatum in magnitudeData) { + if (magnitudeDatum.magnitude <=0) + { + continue; + } + var output = accel.Accelerate(magnitudeDatum.x, magnitudeDatum.y, MeasurementTime); var outMagnitude = Magnitude(output.Item1, output.Item2); diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index fbf1944..5225e08 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -54,7 +54,6 @@ namespace grapher.Models.Calculations { var velIdx = GetVelocityIndex(outVelocityValue); - velIdx = Math.Min(velIdx, VelocityPoints.Count - 1); values = (VelocityPoints.ElementAt(velIdx).Key, AccelPoints.ElementAt(velIdx).Value, GainPoints.ElementAt(velIdx).Value); OutVelocityToPoints.Add(outVelocityValue, values); return values; @@ -81,6 +80,7 @@ namespace grapher.Models.Calculations } velIdx = Math.Min(velIdx, VelocityPoints.Count - 1); + velIdx = Math.Max(velIdx, 0); return velIdx; } diff --git a/grapher/Models/Charts/AccelCharts.cs b/grapher/Models/Charts/AccelCharts.cs index d22ab78..a0e99c8 100644 --- a/grapher/Models/Charts/AccelCharts.cs +++ b/grapher/Models/Charts/AccelCharts.cs @@ -149,6 +149,11 @@ namespace grapher ChartState.Calculate(accel, settings); } + public void SetLogarithmic(bool x, bool y) + { + ChartState.SetLogarithmic(x, y); + } + private static void SetupCharts( ChartXY sensitivityChart, ChartXY velocityChart, diff --git a/grapher/Models/Charts/ChartState/ChartState.cs b/grapher/Models/Charts/ChartState/ChartState.cs index ea67e83..e1c7d01 100644 --- a/grapher/Models/Charts/ChartState/ChartState.cs +++ b/grapher/Models/Charts/ChartState/ChartState.cs @@ -100,5 +100,29 @@ namespace grapher.Models.Charts.ChartState GainChart.Hide(); form.Height = SensitivityChart.Height + borderHeight; } + + public void SetLogarithmic(bool x, bool y) + { + if (x) + { + ChartXY.SetLogarithmic(SensitivityChart.ChartX); + ChartXY.SetLogarithmic(GainChart.ChartX); + } + else + { + ChartXY.SetStandard(SensitivityChart.ChartX); + ChartXY.SetStandard(GainChart.ChartX); + } + + if (y) + { + ChartXY.SetLogarithmic(SensitivityChart.ChartY); + ChartXY.SetLogarithmic(GainChart.ChartY); + } + { + ChartXY.SetStandard(SensitivityChart.ChartY); + ChartXY.SetStandard(GainChart.ChartY); + } + } } } diff --git a/grapher/Models/Charts/ChartXY.cs b/grapher/Models/Charts/ChartXY.cs index fdd0258..b17960b 100644 --- a/grapher/Models/Charts/ChartXY.cs +++ b/grapher/Models/Charts/ChartXY.cs @@ -132,6 +132,22 @@ namespace grapher } } + public static void SetLogarithmic(Chart chart) + { + chart.ChartAreas[0].AxisX.Minimum = 0.001; + chart.ChartAreas[0].AxisX.Maximum = 3500; + chart.ChartAreas[0].AxisY.Minimum = 0.001; + chart.ChartAreas[0].AxisY.Maximum = 10; + chart.ChartAreas[0].AxisX.IsLogarithmic = true; + chart.ChartAreas[0].AxisY.IsLogarithmic = true; + } + + public static void SetStandard(Chart chart) + { + chart.ChartAreas[0].AxisX.IsLogarithmic = false; + chart.ChartAreas[0].AxisY.IsLogarithmic = false; + } + public void SetPointBinds(PointData combined, PointData x, PointData y) { CombinedPointData = combined; diff --git a/grapher/Models/Mouse/PointData.cs b/grapher/Models/Mouse/PointData.cs index 374c52e..e3f44ea 100644 --- a/grapher/Models/Mouse/PointData.cs +++ b/grapher/Models/Mouse/PointData.cs @@ -9,8 +9,8 @@ namespace grapher.Models.Mouse public PointData() { Lock = new Object(); - X = new double[] { 0 }; - Y = new double[] { 0 }; + X = new double[] { 0.01 }; + Y = new double[] { 0.01 }; } #endregion Constructors diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index 6f547cd..ce5ec54 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -64,6 +64,7 @@ namespace grapher #endregion Constructors #region Properties + public AccelCharts AccelCharts { get; } public Button WriteButton { get; } @@ -180,8 +181,8 @@ namespace grapher public void SetActiveValues(int index, AccelArgs args) { - var name = AccelerationTypes.Where(t => t.Value.Index == index).FirstOrDefault().Value.Name; - AccelTypeActiveValue.SetValue(name); + AccelerationType = AccelerationTypes.Where(t => t.Value.Index == index).FirstOrDefault().Value; + AccelTypeActiveValue.SetValue(AccelerationType.Name); Weight.SetActiveValue(args.weight); Cap.SetActiveValues(args.gainCap, args.scaleCap, args.gainCap > 0); @@ -189,6 +190,8 @@ namespace grapher Acceleration.SetActiveValue(args.accel); LimitOrExponent.SetActiveValue(args.exponent); Midpoint.SetActiveValue(args.midpoint); + + Layout(); } public void ShowFull() diff --git a/grapher/Models/Options/ApplyOptions.cs b/grapher/Models/Options/ApplyOptions.cs index 6ec9d31..720cb13 100644 --- a/grapher/Models/Options/ApplyOptions.cs +++ b/grapher/Models/Options/ApplyOptions.cs @@ -130,6 +130,10 @@ namespace grapher.Models.Options settings.args.x, settings.args.y, settings.combineMagnitudes); + + AccelCharts.SetLogarithmic( + OptionSetX.Options.AccelerationType.LogarithmicCharts, + OptionSetY.Options.AccelerationType.LogarithmicCharts); } public void OnWholeClicked(object sender, EventArgs e) -- cgit v1.2.3 From 2c288f95f2c3791daf54299580e19439c3dd1b0c Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 03:16:36 -0700 Subject: Fix bug & rename x axis to input speed --- grapher/Form1.Designer.cs | 18 +++++++++--------- grapher/Models/Charts/ChartXY.cs | 4 ++++ grapher/Models/Options/AccelOptionSet.cs | 11 +++++++++-- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index 46b7a9a..ecfb978 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -166,7 +166,7 @@ namespace grapher // // AccelerationChart // - chartArea1.AxisX.Title = "Speed (counts/ms)"; + chartArea1.AxisX.Title = "Input Speed (counts/ms)"; chartArea1.AxisY.Title = "Ratio of Output to Input"; chartArea1.Name = "ChartArea1"; this.AccelerationChart.ChartAreas.Add(chartArea1); @@ -400,7 +400,7 @@ namespace grapher // // VelocityChart // - chartArea2.AxisX.Title = "Speed (count/ms)"; + chartArea2.AxisX.Title = "Input Speed (count/ms)"; chartArea2.AxisY.Title = "Output Speed (counts/ms)"; chartArea2.Name = "ChartArea1"; this.VelocityChart.ChartAreas.Add(chartArea2); @@ -441,7 +441,7 @@ namespace grapher // // GainChart // - chartArea3.AxisX.Title = "Speed (counts/ms)"; + chartArea3.AxisX.Title = "Input Speed (counts/ms)"; chartArea3.AxisY.Title = "Slope of Velocity Chart"; chartArea3.Name = "ChartArea1"; this.GainChart.ChartAreas.Add(chartArea3); @@ -580,7 +580,7 @@ namespace grapher this.gainCapToolStripMenuItem, this.legacyCapToolStripMenuItem}); this.capStyleToolStripMenuItem.Name = "capStyleToolStripMenuItem"; - this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.capStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); this.capStyleToolStripMenuItem.Text = "Cap Style"; // // gainCapToolStripMenuItem @@ -603,7 +603,7 @@ namespace grapher this.gainOffsetToolStripMenuItem, this.legacyOffsetToolStripMenuItem}); this.offsetStyleToolStripMenuItem.Name = "offsetStyleToolStripMenuItem"; - this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.offsetStyleToolStripMenuItem.Size = new System.Drawing.Size(163, 22); this.offsetStyleToolStripMenuItem.Text = "Offset Style"; // // gainOffsetToolStripMenuItem @@ -624,7 +624,7 @@ namespace grapher this.wholeVectorToolStripMenuItem, this.byVectorComponentToolStripMenuItem}); this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(180, 22); + this.toolStripMenuItem1.Size = new System.Drawing.Size(163, 22); this.toolStripMenuItem1.Text = "Application Style"; // // wholeVectorToolStripMenuItem @@ -661,7 +661,7 @@ namespace grapher // // AccelerationChartY // - chartArea4.AxisX.Title = "Speed (counts/ms)"; + chartArea4.AxisX.Title = "Input Speed (counts/ms)"; chartArea4.AxisY.Title = "Ratio of Output to Input)"; chartArea4.Name = "ChartArea1"; this.AccelerationChartY.ChartAreas.Add(chartArea4); @@ -697,7 +697,7 @@ namespace grapher // // VelocityChartY // - chartArea5.AxisX.Title = "Speed (count/ms)"; + chartArea5.AxisX.Title = "Input Speed (count/ms)"; chartArea5.AxisY.Title = "Output Speed (counts/ms)"; chartArea5.Name = "ChartArea1"; this.VelocityChartY.ChartAreas.Add(chartArea5); @@ -733,7 +733,7 @@ namespace grapher // // GainChartY // - chartArea6.AxisX.Title = "Speed (counts/ms)"; + chartArea6.AxisX.Title = "Input Speed (counts/ms)"; chartArea6.AxisY.Title = "Slope of Velocity Chart"; chartArea6.Name = "ChartArea1"; this.GainChartY.ChartAreas.Add(chartArea6); diff --git a/grapher/Models/Charts/ChartXY.cs b/grapher/Models/Charts/ChartXY.cs index b17960b..c5c00d1 100644 --- a/grapher/Models/Charts/ChartXY.cs +++ b/grapher/Models/Charts/ChartXY.cs @@ -134,18 +134,22 @@ namespace grapher public static void SetLogarithmic(Chart chart) { + /* chart.ChartAreas[0].AxisX.Minimum = 0.001; chart.ChartAreas[0].AxisX.Maximum = 3500; chart.ChartAreas[0].AxisY.Minimum = 0.001; chart.ChartAreas[0].AxisY.Maximum = 10; chart.ChartAreas[0].AxisX.IsLogarithmic = true; chart.ChartAreas[0].AxisY.IsLogarithmic = true; + */ } public static void SetStandard(Chart chart) { + /* chart.ChartAreas[0].AxisX.IsLogarithmic = false; chart.ChartAreas[0].AxisY.IsLogarithmic = false; + */ } public void SetPointBinds(PointData combined, PointData x, PointData y) diff --git a/grapher/Models/Options/AccelOptionSet.cs b/grapher/Models/Options/AccelOptionSet.cs index bc0d368..11a7f10 100644 --- a/grapher/Models/Options/AccelOptionSet.cs +++ b/grapher/Models/Options/AccelOptionSet.cs @@ -24,6 +24,7 @@ namespace grapher.Models.Options OptionsTitle.Top = TopAnchor; IsTitleMode = true; + Hidden = false; SetRegularMode(); } @@ -35,9 +36,10 @@ namespace grapher.Models.Options public AccelTypeOptions Options { get; } - public bool IsTitleMode { get; private set; } + private bool Hidden { get; set; } + public void SetRegularMode() { if (IsTitleMode) @@ -67,6 +69,7 @@ namespace grapher.Models.Options OptionsTitle.Hide(); ActiveValuesTitle.Hide(); Options.Hide(); + Hidden = true; } public void Show() @@ -78,6 +81,7 @@ namespace grapher.Models.Options ActiveValuesTitle.Show(); Options.Show(); + Hidden = false; } public void DisplayTitle() @@ -106,7 +110,10 @@ namespace grapher.Models.Options public void SetActiveValues(int mode, AccelArgs args) { - Options.SetActiveValues(mode, args); + if (!Hidden) + { + Options.SetActiveValues(mode, args); + } } public void AlignActiveValues() -- cgit v1.2.3 From 45285413a94c9c081098c672e69e9811ac5262b7 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 13:08:31 -0700 Subject: Rename experiment two to motivity --- common/accel-experimenttwo.hpp | 89 ----------------------------- common/accel-motivity.hpp | 89 +++++++++++++++++++++++++++++ common/common.vcxitems | 2 +- common/rawaccel-settings.h | 2 +- common/rawaccel.hpp | 14 ++--- grapher/Layouts/ExperimentOneLayout.cs | 27 --------- grapher/Layouts/MotivityLayout.cs | 27 +++++++++ grapher/Models/Charts/ChartXY.cs | 1 - grapher/Models/Mouse/MouseData.cs | 49 ++++++++++++++++ grapher/Models/Mouse/MouseWatcher.cs | 3 + grapher/Models/Options/AccelTypeOptions.cs | 2 +- grapher/Models/Serialized/DriverSettings.cs | 2 +- grapher/grapher.csproj | 3 +- 13 files changed, 181 insertions(+), 129 deletions(-) delete mode 100644 common/accel-experimenttwo.hpp create mode 100644 common/accel-motivity.hpp delete mode 100644 grapher/Layouts/ExperimentOneLayout.cs create mode 100644 grapher/Layouts/MotivityLayout.cs create mode 100644 grapher/Models/Mouse/MouseData.cs diff --git a/common/accel-experimenttwo.hpp b/common/accel-experimenttwo.hpp deleted file mode 100644 index b248364..0000000 --- a/common/accel-experimenttwo.hpp +++ /dev/null @@ -1,89 +0,0 @@ -#pragma once - -#include - -#include "accel-base.hpp" - -#define RA_LOOKUP - -namespace rawaccel { - - constexpr size_t LUT_SIZE = 601; - - struct si_pair { - double slope = 0; - double intercept = 0; - }; - - /// Struct to hold sigmoid (s-shaped) gain implementation. - struct experimenttwo_impl { - double rate; - double limit; - double midpoint; - double subtractive_constant; - - experimenttwo_impl(const accel_args& args) : - rate(pow(10,args.rate)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) - { - subtractive_constant = limit / 2; - } - - inline double operator()(double speed) const { - double log_speed = log10(speed); - return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); - - } - - inline double legacy_offset(double speed) const { return operator()(speed); } - - inline double apply(si_pair* lookup, double speed) const - { - si_pair pair = lookup[map(speed)]; - return pair.slope + pair.intercept / speed; - } - - inline int map(double speed) const - { - int index = speed > 0 ? (int)(100 * log10(speed) + 201) : 0; - - if (index < 0) return 0; - if (index >= LUT_SIZE) return LUT_SIZE - 1; - - return index; - } - - inline void fill(si_pair* lookup) const - { - double lookup_speed = 0; - double gain_integral_speed = 0; - double gain = 0; - double intercept = 0; - double output = 0; - double x = -2; - - lookup[0] = {}; - - for (size_t i = 1; i < LUT_SIZE; i++) - { - x += 0.01; - - lookup_speed = pow(10, x); - - while (gain_integral_speed < lookup_speed) - { - gain_integral_speed += 0.001; - gain = operator()(gain_integral_speed); - output += gain * 0.001; - } - - intercept = output - gain * lookup_speed; - - lookup[i] = { gain, intercept }; - } - - } - }; - - using accel_experimentone = nonadditive_accel; - -} diff --git a/common/accel-motivity.hpp b/common/accel-motivity.hpp new file mode 100644 index 0000000..a37d1ce --- /dev/null +++ b/common/accel-motivity.hpp @@ -0,0 +1,89 @@ +#pragma once + +#include + +#include "accel-base.hpp" + +#define RA_LOOKUP + +namespace rawaccel { + + constexpr size_t LUT_SIZE = 601; + + struct si_pair { + double slope = 0; + double intercept = 0; + }; + + /// Struct to hold sigmoid (s-shaped) gain implementation. + struct motivity_impl { + double rate; + double limit; + double midpoint; + double subtractive_constant; + + motivity_impl(const accel_args& args) : + rate(pow(10,args.rate)), limit(2*log10(args.limit)), midpoint(log10(args.midpoint)) + { + subtractive_constant = limit / 2; + } + + inline double operator()(double speed) const { + double log_speed = log10(speed); + return pow(10, limit / (exp(-rate * (log_speed - midpoint)) + 1) - subtractive_constant); + + } + + inline double legacy_offset(double speed) const { return operator()(speed); } + + inline double apply(si_pair* lookup, double speed) const + { + si_pair pair = lookup[map(speed)]; + return pair.slope + pair.intercept / speed; + } + + inline int map(double speed) const + { + int index = speed > 0 ? (int)(100 * log10(speed) + 201) : 0; + + if (index < 0) return 0; + if (index >= LUT_SIZE) return LUT_SIZE - 1; + + return index; + } + + inline void fill(si_pair* lookup) const + { + double lookup_speed = 0; + double gain_integral_speed = 0; + double gain = 0; + double intercept = 0; + double output = 0; + double x = -2; + + lookup[0] = {}; + + for (size_t i = 1; i < LUT_SIZE; i++) + { + x += 0.01; + + lookup_speed = pow(10, x); + + while (gain_integral_speed < lookup_speed) + { + gain_integral_speed += 0.001; + gain = operator()(gain_integral_speed); + output += gain * 0.001; + } + + intercept = output - gain * lookup_speed; + + lookup[i] = { gain, intercept }; + } + + } + }; + + using accel_motivity = nonadditive_accel; + +} diff --git a/common/common.vcxitems b/common/common.vcxitems index b5cd374..fdf5cf4 100644 --- a/common/common.vcxitems +++ b/common/common.vcxitems @@ -17,7 +17,7 @@ - + diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index db5e192..00289b6 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -6,7 +6,7 @@ namespace rawaccel { enum class accel_mode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, experimentone, noaccel + linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, motivity, noaccel }; struct settings { diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index ca2d4d7..3eb9181 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -13,7 +13,7 @@ #include "accel-naturalgain.hpp" #include "accel-power.hpp" #include "accel-sigmoidgain.hpp" -#include "accel-experimenttwo.hpp" +#include "accel-motivity.hpp" #include "accel-noaccel.hpp" namespace rawaccel { @@ -87,7 +87,7 @@ namespace rawaccel { case accel_mode::sigmoidgain: return vis(var.u.sigmoidgain); case accel_mode::power: return vis(var.u.power); case accel_mode::logarithm: return vis(var.u.logarithm); - case accel_mode::experimentone: return vis(var.u.experimentone); + case accel_mode::motivity: return vis(var.u.motivity); default: return vis(var.u.noaccel); } } @@ -105,7 +105,7 @@ namespace rawaccel { accel_sigmoidgain sigmoidgain; accel_power power; accel_logarithm logarithm; - accel_experimentone experimentone; + accel_motivity motivity; accel_noaccel noaccel = {}; } u = {}; @@ -116,15 +116,15 @@ namespace rawaccel { impl = { args }; }, *this); - if (lookup && tag == accel_mode::experimentone) { - u.experimentone.fn.fill(lookup); + if (lookup && tag == accel_mode::motivity) { + u.motivity.fn.fill(lookup); } } inline double apply(double speed) const { - if (lookup && tag == accel_mode::experimentone) { - return u.experimentone.fn.apply(lookup, speed); + if (lookup && tag == accel_mode::motivity) { + return u.motivity.fn.apply(lookup, speed); } return visit_accel([=](auto&& impl) { diff --git a/grapher/Layouts/ExperimentOneLayout.cs b/grapher/Layouts/ExperimentOneLayout.cs deleted file mode 100644 index ad6f61a..0000000 --- a/grapher/Layouts/ExperimentOneLayout.cs +++ /dev/null @@ -1,27 +0,0 @@ -using grapher.Models.Serialized; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace grapher.Layouts -{ - public class ExperimentOneLayout : LayoutBase - { - public ExperimentOneLayout() - : base() - { - Name = "Experiment 1"; - Index = (int)AccelMode.experimentone; - LogarithmicCharts = true; - - AccelLayout = new OptionLayout(true, Acceleration); - CapLayout = new OptionLayout(false, string.Empty); - WeightLayout = new OptionLayout(true, Weight); - OffsetLayout = new OptionLayout(false, string.Empty); - LimExpLayout = new OptionLayout(true, Motility); - MidpointLayout = new OptionLayout(true, Midpoint); - } - } -} diff --git a/grapher/Layouts/MotivityLayout.cs b/grapher/Layouts/MotivityLayout.cs new file mode 100644 index 0000000..dfef2de --- /dev/null +++ b/grapher/Layouts/MotivityLayout.cs @@ -0,0 +1,27 @@ +using grapher.Models.Serialized; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace grapher.Layouts +{ + public class MotivityLayout : LayoutBase + { + public MotivityLayout() + : base() + { + Name = "Motivity"; + Index = (int)AccelMode.motivity; + LogarithmicCharts = true; + + AccelLayout = new OptionLayout(true, Acceleration); + CapLayout = new OptionLayout(false, string.Empty); + WeightLayout = new OptionLayout(true, Weight); + OffsetLayout = new OptionLayout(false, string.Empty); + LimExpLayout = new OptionLayout(true, Motility); + MidpointLayout = new OptionLayout(true, Midpoint); + } + } +} diff --git a/grapher/Models/Charts/ChartXY.cs b/grapher/Models/Charts/ChartXY.cs index c5c00d1..3850e42 100644 --- a/grapher/Models/Charts/ChartXY.cs +++ b/grapher/Models/Charts/ChartXY.cs @@ -128,7 +128,6 @@ namespace grapher pointTwo.Get(out x, out y); chart.Series[3].Points.DataBindXY(x, y); } - chart.Update(); } } diff --git a/grapher/Models/Mouse/MouseData.cs b/grapher/Models/Mouse/MouseData.cs new file mode 100644 index 0000000..e59a969 --- /dev/null +++ b/grapher/Models/Mouse/MouseData.cs @@ -0,0 +1,49 @@ +using System; + +namespace grapher.Models.Mouse +{ + public class MouseData + { + #region Constructors + + public MouseData() + { + Lock = new Object(); + X = 0; + Y = 0; + } + + #endregion Constructors + + #region Properties + + public Object Lock { get; } + + private int X { get; set; } + private int Y { get; set; } + + public void Set(int x, int y) + { + lock (Lock) + { + X = x; + Y = y; + } + } + + #endregion Properties + + #region Methods + + public void Get(out int x, out int y) + { + lock (Lock) + { + x = X; + y = Y; + } + } + + #endregion Methods + } +} diff --git a/grapher/Models/Mouse/MouseWatcher.cs b/grapher/Models/Mouse/MouseWatcher.cs index 405110e..86b1c2e 100644 --- a/grapher/Models/Mouse/MouseWatcher.cs +++ b/grapher/Models/Mouse/MouseWatcher.cs @@ -682,6 +682,7 @@ namespace grapher.Models.Mouse ContainingForm = containingForm; Display = display; AccelCharts = accelCharts; + MouseData = new MouseData(); RAWINPUTDEVICE device = new RAWINPUTDEVICE(); device.WindowHandle = ContainingForm.Handle; @@ -705,6 +706,8 @@ namespace grapher.Models.Mouse private AccelCharts AccelCharts { get; } + private MouseData MouseData { get; } + private double PollTime { get; } #endregion Properties diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index ce5ec54..1302387 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -21,7 +21,7 @@ namespace grapher new LogarithmLayout(), new NaturalGainLayout(), new SigmoidGainLayout(), - new ExperimentOneLayout(), + new MotivityLayout(), new OffLayout() }.ToDictionary(k => k.Name); diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs index 03c5687..119b684 100644 --- a/grapher/Models/Serialized/DriverSettings.cs +++ b/grapher/Models/Serialized/DriverSettings.cs @@ -8,7 +8,7 @@ namespace grapher.Models.Serialized public enum AccelMode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, experimentone, noaccel + linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, motivity, noaccel } #endregion Enumerations diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index ebe224a..b283e37 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -54,7 +54,7 @@ - + @@ -70,6 +70,7 @@ + -- cgit v1.2.3 From 720a45289b2342c62eebb0e1cee3c4b88c9fe696 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 14:01:05 -0700 Subject: Scaling improvement, remove y data from xy combined --- grapher/Models/Calculations/AccelCalculator.cs | 79 ++++++++++++++++++++++ grapher/Models/Calculations/AccelChartData.cs | 8 +++ grapher/Models/Charts/ChartState/CombinedState.cs | 2 + .../Models/Charts/ChartState/XYOneGraphState.cs | 2 + .../Models/Charts/ChartState/XYTwoGraphState.cs | 3 + grapher/Models/Charts/ChartXY.cs | 22 ++++++ 6 files changed, 116 insertions(+) diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index ab6e9de..d9b51b2 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -62,6 +62,11 @@ namespace grapher.Models.Calculations double lastInputMagnitude = 0; double lastOutputMagnitude = 0; + double maxRatio = 0.0; + double minRatio = Double.MaxValue; + double maxSlope = 0.0; + double minSlope = Double.MaxValue; + foreach (var magnitudeDatum in magnitudeData) { if (magnitudeDatum.magnitude <=0) @@ -73,11 +78,31 @@ namespace grapher.Models.Calculations var outMagnitude = Magnitude(output.Item1, output.Item2); var ratio = magnitudeDatum.magnitude > 0 ? outMagnitude / magnitudeDatum.magnitude : starter; + + if (ratio > maxRatio) + { + maxRatio = ratio; + } + + if (ratio < minRatio) + { + minRatio = ratio; + } var inDiff = magnitudeDatum.magnitude - lastInputMagnitude; var outDiff = outMagnitude - lastOutputMagnitude; var slope = inDiff > 0 ? outDiff / inDiff : starter; + if (slope > maxSlope) + { + maxSlope = slope; + } + + if (slope < minSlope) + { + minSlope = slope; + } + if (!data.AccelPoints.ContainsKey(magnitudeDatum.magnitude)) { data.AccelPoints.Add(magnitudeDatum.magnitude, ratio); @@ -98,6 +123,10 @@ namespace grapher.Models.Calculations } data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); + data.MaxAccel = maxRatio; + data.MinAccel = minRatio; + data.MaxGain = maxRatio; + data.MinGain = minRatio; } public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, DriverSettings settings, ICollection magnitudeData) @@ -106,6 +135,12 @@ namespace grapher.Models.Calculations double lastOutputMagnitudeX = 0; double lastOutputMagnitudeY = 0; + double maxRatio = 0.0; + double minRatio = Double.MaxValue; + double maxSlope = 0.0; + double minSlope = Double.MaxValue; + + Sensitivity = GetSens(ref settings); foreach (var magnitudeDatum in magnitudeData) @@ -124,6 +159,26 @@ namespace grapher.Models.Calculations var xRatio = settings.sensitivity.x * ratio; var yRatio = settings.sensitivity.y * ratio; + if (xRatio > maxRatio) + { + maxRatio = xRatio; + } + + if (xRatio < minRatio) + { + minRatio = xRatio; + } + + if (yRatio > maxRatio) + { + maxRatio = yRatio; + } + + if (yRatio < minRatio) + { + minRatio = yRatio; + } + if (!data.X.AccelPoints.ContainsKey(magnitudeDatum.magnitude)) { data.X.AccelPoints.Add(magnitudeDatum.magnitude, xRatio); @@ -143,6 +198,26 @@ namespace grapher.Models.Calculations var xSlope = inDiff > 0 ? xOutDiff / inDiff : settings.sensitivity.x; var ySlope = inDiff > 0 ? yOutDiff / inDiff : settings.sensitivity.y; + if (xSlope > maxSlope) + { + maxSlope = xSlope; + } + + if (xSlope < minSlope) + { + minSlope = xSlope; + } + + if (ySlope > maxSlope) + { + maxSlope = ySlope; + } + + if (ySlope < minSlope) + { + minSlope = ySlope; + } + if (!data.X.VelocityPoints.ContainsKey(magnitudeDatum.magnitude)) { data.X.VelocityPoints.Add(magnitudeDatum.magnitude, xOut); @@ -169,6 +244,10 @@ namespace grapher.Models.Calculations } data.Combined.OrderedVelocityPointsList.AddRange(data.Combined.VelocityPoints.Values.ToList()); + data.Combined.MaxAccel = maxRatio; + data.Combined.MinAccel = minRatio; + data.Combined.MaxGain = maxSlope; + data.Combined.MinGain = minSlope; } public ReadOnlyCollection GetMagnitudes() diff --git a/grapher/Models/Calculations/AccelChartData.cs b/grapher/Models/Calculations/AccelChartData.cs index 5225e08..54685a2 100644 --- a/grapher/Models/Calculations/AccelChartData.cs +++ b/grapher/Models/Calculations/AccelChartData.cs @@ -23,6 +23,14 @@ namespace grapher.Models.Calculations public SortedDictionary AccelPoints { get; } + public double MaxAccel { get; set; } + + public double MinAccel { get; set; } + + public double MaxGain { get; set; } + + public double MinGain { get; set; } + public SortedDictionary VelocityPoints { get; } public SortedDictionary GainPoints { get; } diff --git a/grapher/Models/Charts/ChartState/CombinedState.cs b/grapher/Models/Charts/ChartState/CombinedState.cs index 17cd68a..f4b6b8f 100644 --- a/grapher/Models/Charts/ChartState/CombinedState.cs +++ b/grapher/Models/Charts/ChartState/CombinedState.cs @@ -36,6 +36,8 @@ namespace grapher.Models.Charts.ChartState SensitivityChart.Bind(Data.Combined.AccelPoints); VelocityChart.Bind(Data.Combined.VelocityPoints); GainChart.Bind(Data.Combined.GainPoints); + SensitivityChart.SetMinMax(Data.Combined.MinAccel, Data.Combined.MaxAccel); + GainChart.SetMinMax(Data.Combined.MinGain, Data.Combined.MaxGain); } public override void Calculate(ManagedAccel accel, DriverSettings settings) diff --git a/grapher/Models/Charts/ChartState/XYOneGraphState.cs b/grapher/Models/Charts/ChartState/XYOneGraphState.cs index bbc0c28..6bfaac5 100644 --- a/grapher/Models/Charts/ChartState/XYOneGraphState.cs +++ b/grapher/Models/Charts/ChartState/XYOneGraphState.cs @@ -38,6 +38,8 @@ namespace grapher.Models.Charts.ChartState SensitivityChart.BindXYCombined(Data.X.AccelPoints, Data.Y.AccelPoints); VelocityChart.BindXYCombined(Data.X.VelocityPoints, Data.Y.VelocityPoints); GainChart.BindXYCombined(Data.X.GainPoints, Data.Y.GainPoints); + SensitivityChart.SetMinMax(Data.Combined.MinAccel, Data.Combined.MaxAccel); + GainChart.SetMinMax(Data.Combined.MinGain, Data.Combined.MaxGain); } public override void Calculate(ManagedAccel accel, DriverSettings settings) diff --git a/grapher/Models/Charts/ChartState/XYTwoGraphState.cs b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs index 69dc335..b775853 100644 --- a/grapher/Models/Charts/ChartState/XYTwoGraphState.cs +++ b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs @@ -65,6 +65,9 @@ namespace grapher.Models.Charts.ChartState SensitivityChart.BindXY(Data.X.AccelPoints, Data.Y.AccelPoints); VelocityChart.BindXY(Data.X.VelocityPoints, Data.Y.VelocityPoints); GainChart.BindXY(Data.X.GainPoints, Data.Y.GainPoints); + + SensitivityChart.SetMinMaxXY(Data.X.MinAccel, Data.X.MaxAccel, Data.Y.MinAccel, Data.Y.MaxAccel); + GainChart.SetMinMaxXY(Data.X.MinGain, Data.X.MaxGain, Data.Y.MinGain, Data.Y.MaxGain); } public override void Calculate(ManagedAccel accel, DriverSettings settings) diff --git a/grapher/Models/Charts/ChartXY.cs b/grapher/Models/Charts/ChartXY.cs index 3850e42..253804e 100644 --- a/grapher/Models/Charts/ChartXY.cs +++ b/grapher/Models/Charts/ChartXY.cs @@ -100,6 +100,9 @@ namespace grapher chart.ChartAreas[0].AxisY.ScaleView.MinSize = 0.01; chart.ChartAreas[0].AxisY.ScaleView.SmallScrollSize = 0.001; + chart.ChartAreas[0].AxisX.LabelStyle.Format = "0.##"; + chart.ChartAreas[0].AxisY.LabelStyle.Format = "0.##"; + chart.ChartAreas[0].CursorY.Interval = 0.001; chart.ChartAreas[0].CursorX.AutoScroll = true; @@ -187,18 +190,37 @@ namespace grapher public void Bind(IDictionary data) { ChartX.Series[0].Points.DataBindXY(data.Keys, data.Values); + ChartX.Series[2].IsVisibleInLegend = false; + ChartX.Series[2].Points.Clear(); } public void BindXY(IDictionary dataX, IDictionary dataY) { ChartX.Series[0].Points.DataBindXY(dataX.Keys, dataX.Values); ChartY.Series[0].Points.DataBindXY(dataY.Keys, dataY.Values); + ChartX.Series[2].IsVisibleInLegend = false; + ChartX.Series[2].Points.Clear(); } public void BindXYCombined(IDictionary dataX, IDictionary dataY) { ChartX.Series[0].Points.DataBindXY(dataX.Keys, dataX.Values); ChartX.Series[2].Points.DataBindXY(dataY.Keys, dataY.Values); + ChartX.Series[2].IsVisibleInLegend = true; + } + + public void SetMinMax(double min, double max) + { + ChartX.ChartAreas[0].AxisY.Minimum = min; + ChartX.ChartAreas[0].AxisY.Maximum = max; + } + + public void SetMinMaxXY(double minX, double maxX, double minY, double maxY) + { + ChartX.ChartAreas[0].AxisY.Minimum = minX; + ChartX.ChartAreas[0].AxisY.Maximum = maxX; + ChartY.ChartAreas[0].AxisY.Minimum = minY; + ChartY.ChartAreas[0].AxisY.Maximum = maxY; } public void SetCombined() -- cgit v1.2.3 From df6c77a9279240b169b441fcd87ce5f8f3dd1798 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 14:07:55 -0700 Subject: Fix cap style defaulting to legacy --- grapher/Models/Options/AccelTypeOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index 1302387..d93be16 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -185,7 +185,7 @@ namespace grapher AccelTypeActiveValue.SetValue(AccelerationType.Name); Weight.SetActiveValue(args.weight); - Cap.SetActiveValues(args.gainCap, args.scaleCap, args.gainCap > 0); + Cap.SetActiveValues(args.gainCap, args.scaleCap, args.gainCap > 0 || args.scaleCap <= 0); Offset.SetActiveValue(args.offset, args.legacy_offset); Acceleration.SetActiveValue(args.accel); LimitOrExponent.SetActiveValue(args.exponent); -- cgit v1.2.3 From 20b0304e0edc12eb983707c44f69a1c2be23ae4c Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 14:16:34 -0700 Subject: Rename active to current, make dropdown display accel type on active value set --- grapher/Form1.Designer.cs | 8 ++++---- grapher/Models/Options/AccelTypeOptions.cs | 3 ++- grapher/Models/Options/ActiveValueLabel.cs | 5 ----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index ecfb978..5d2a645 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -781,9 +781,9 @@ namespace grapher this.ActiveValueTitle.AutoSize = true; this.ActiveValueTitle.Location = new System.Drawing.Point(187, 30); this.ActiveValueTitle.Name = "ActiveValueTitle"; - this.ActiveValueTitle.Size = new System.Drawing.Size(37, 13); + this.ActiveValueTitle.Size = new System.Drawing.Size(41, 13); this.ActiveValueTitle.TabIndex = 35; - this.ActiveValueTitle.Text = "Active"; + this.ActiveValueTitle.Text = "Current"; // // SensitivityActiveXLabel // @@ -1063,9 +1063,9 @@ namespace grapher this.ActiveValueTitleY.AutoSize = true; this.ActiveValueTitleY.Location = new System.Drawing.Point(428, 30); this.ActiveValueTitleY.Name = "ActiveValueTitleY"; - this.ActiveValueTitleY.Size = new System.Drawing.Size(37, 13); + this.ActiveValueTitleY.Size = new System.Drawing.Size(41, 13); this.ActiveValueTitleY.TabIndex = 67; - this.ActiveValueTitleY.Text = "Active"; + this.ActiveValueTitleY.Text = "Current"; // // RawAcceleration // diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index d93be16..ef0964b 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -183,6 +183,7 @@ namespace grapher { AccelerationType = AccelerationTypes.Where(t => t.Value.Index == index).FirstOrDefault().Value; AccelTypeActiveValue.SetValue(AccelerationType.Name); + AccelDropdown.SelectedIndex = AccelerationType.Index; Weight.SetActiveValue(args.weight); Cap.SetActiveValues(args.gainCap, args.scaleCap, args.gainCap > 0 || args.scaleCap <= 0); @@ -191,7 +192,7 @@ namespace grapher LimitOrExponent.SetActiveValue(args.exponent); Midpoint.SetActiveValue(args.midpoint); - Layout(); + //Layout(); } public void ShowFull() diff --git a/grapher/Models/Options/ActiveValueLabel.cs b/grapher/Models/Options/ActiveValueLabel.cs index 18a4400..66817ab 100644 --- a/grapher/Models/Options/ActiveValueLabel.cs +++ b/grapher/Models/Options/ActiveValueLabel.cs @@ -5,11 +5,6 @@ namespace grapher.Models.Options { public class ActiveValueLabel { - #region Constants - - - #endregion Constants - #region Fields private string _prefix; -- cgit v1.2.3 From c87bd1f04059f40f3dadd4e0b5bfcd860db67770 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 14:41:56 -0700 Subject: Rename write button --- grapher/Constants/Constants.cs | 4 ++-- grapher/Form1.Designer.cs | 14 +++++++------- grapher/Models/Options/AccelTypeOptions.cs | 2 -- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/grapher/Constants/Constants.cs b/grapher/Constants/Constants.cs index a51b09c..2ce6763 100644 --- a/grapher/Constants/Constants.cs +++ b/grapher/Constants/Constants.cs @@ -60,7 +60,7 @@ namespace grapher /// Left placement of charts when narrowed public const int NarrowChartLeft = 482; - public const int WriteButtonVerticalOffset = 50; + public const int WriteButtonVerticalOffset = 80; /// Format string for shortened x and y textboxes. public const string ShortenedFormatString = "0.###"; @@ -84,7 +84,7 @@ namespace grapher public const string AccelDropDownDefaultShortText = "Accel Type"; /// Default text to be displayed on write button. - public const string WriteButtonDefaultText = "Write To Driver"; + public const string WriteButtonDefaultText = "Apply"; /// Default text to be displayed on write button. public const string WriteButtonDelayText = "Delay"; diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index 5d2a645..e108720 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -357,11 +357,11 @@ namespace grapher // // writeButton // - this.writeButton.Location = new System.Drawing.Point(153, 293); + this.writeButton.Location = new System.Drawing.Point(154, 270); this.writeButton.Name = "writeButton"; - this.writeButton.Size = new System.Drawing.Size(102, 23); + this.writeButton.Size = new System.Drawing.Size(76, 23); this.writeButton.TabIndex = 21; - this.writeButton.Text = "Write To Driver"; + this.writeButton.Text = "Apply"; this.writeButton.UseVisualStyleBackColor = true; // // sensitivityBoxY @@ -497,8 +497,8 @@ namespace grapher // this.graphsToolStripMenuItem.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.graphsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.showVelocityGainToolStripMenuItem, this.scaleByDPIToolStripMenuItem, + this.showVelocityGainToolStripMenuItem, this.showLastMouseMoveToolStripMenuItem}); this.graphsToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.graphsToolStripMenuItem.Name = "graphsToolStripMenuItem"; @@ -526,7 +526,7 @@ namespace grapher this.dPIToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.DPITextBox}); this.dPIToolStripMenuItem.Name = "dPIToolStripMenuItem"; - this.dPIToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.dPIToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.dPIToolStripMenuItem.Text = "DPI"; // // DPITextBox @@ -540,7 +540,7 @@ namespace grapher this.pollRateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.PollRateTextBox}); this.pollRateToolStripMenuItem.Name = "pollRateToolStripMenuItem"; - this.pollRateToolStripMenuItem.Size = new System.Drawing.Size(169, 22); + this.pollRateToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.pollRateToolStripMenuItem.Text = "Poll Rate"; // // PollRateTextBox @@ -552,7 +552,7 @@ namespace grapher // ScaleMenuItem // this.ScaleMenuItem.Name = "ScaleMenuItem"; - this.ScaleMenuItem.Size = new System.Drawing.Size(169, 22); + this.ScaleMenuItem.Size = new System.Drawing.Size(180, 22); this.ScaleMenuItem.Text = "Re-scale by above"; // // showLastMouseMoveToolStripMenuItem diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index ef0964b..16029ce 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -191,8 +191,6 @@ namespace grapher Acceleration.SetActiveValue(args.accel); LimitOrExponent.SetActiveValue(args.exponent); Midpoint.SetActiveValue(args.midpoint); - - //Layout(); } public void ShowFull() -- cgit v1.2.3 From 8ec99b8518f99e57830c2a95d5e8805e3e947294 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 14:53:48 -0700 Subject: Save option to show velocity and gain on gui startup --- grapher/Models/AccelGUIFactory.cs | 3 ++- grapher/Models/Serialized/GUISettings.cs | 3 +++ grapher/Models/Serialized/SettingsManager.cs | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/grapher/Models/AccelGUIFactory.cs b/grapher/Models/AccelGUIFactory.cs index eb30864..d986369 100644 --- a/grapher/Models/AccelGUIFactory.cs +++ b/grapher/Models/AccelGUIFactory.cs @@ -286,7 +286,8 @@ namespace grapher.Models accelCalculator.DPI, accelCalculator.PollRate, autoWriteMenuItem, - showLastMouseMoveMenuItem); + showLastMouseMoveMenuItem, + showVelocityGainToolStripMenuItem); return new AccelGUI( form, diff --git a/grapher/Models/Serialized/GUISettings.cs b/grapher/Models/Serialized/GUISettings.cs index 2543104..84e681b 100644 --- a/grapher/Models/Serialized/GUISettings.cs +++ b/grapher/Models/Serialized/GUISettings.cs @@ -33,6 +33,9 @@ namespace grapher.Models.Serialized [JsonProperty(Order = 4)] public bool ShowLastMouseMove { get; set; } + [JsonProperty(Order = 4)] + public bool ShowVelocityAndGain { get; set; } + #endregion Properties } } diff --git a/grapher/Models/Serialized/SettingsManager.cs b/grapher/Models/Serialized/SettingsManager.cs index ccffc3f..cac2bd0 100644 --- a/grapher/Models/Serialized/SettingsManager.cs +++ b/grapher/Models/Serialized/SettingsManager.cs @@ -13,13 +13,15 @@ namespace grapher.Models.Serialized Field dpiField, Field pollRateField, ToolStripMenuItem autoWrite, - ToolStripMenuItem showLastMouseMove) + ToolStripMenuItem showLastMouseMove, + ToolStripMenuItem showVelocityAndGain) { ActiveAccel = activeAccel; DpiField = dpiField; PollRateField = pollRateField; AutoWriteMenuItem = autoWrite; ShowLastMouseMoveMenuItem = showLastMouseMove; + ShowVelocityAndGainMoveMenuItem = showVelocityAndGain; } #endregion Constructors @@ -38,6 +40,8 @@ namespace grapher.Models.Serialized private ToolStripMenuItem ShowLastMouseMoveMenuItem { get; set; } + private ToolStripMenuItem ShowVelocityAndGainMoveMenuItem { get; set; } + #endregion Properties #region Methods @@ -53,6 +57,7 @@ namespace grapher.Models.Serialized DPI = (int)DpiField.Data, PollRate = (int)PollRateField.Data, ShowLastMouseMove = ShowLastMouseMoveMenuItem.Checked, + ShowVelocityAndGain = ShowVelocityAndGainMoveMenuItem.Checked, }; RawAccelSettings.Save(); @@ -69,6 +74,7 @@ namespace grapher.Models.Serialized PollRateField.SetToEntered(RawAccelSettings.GUISettings.PollRate); AutoWriteMenuItem.Checked = RawAccelSettings.GUISettings.AutoWriteToDriverOnStartup; ShowLastMouseMoveMenuItem.Checked = RawAccelSettings.GUISettings.ShowLastMouseMove; + ShowVelocityAndGainMoveMenuItem.Checked = RawAccelSettings.GUISettings.ShowVelocityAndGain; } public void Startup() -- cgit v1.2.3 From f4ff6334df8a3fd66d13082606b69a78fa592237 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 15:26:08 -0700 Subject: Remove sigmoidgain, only allow one instance of grapher to run at a time --- common/accel-sigmoidgain.hpp | 34 ----------------------------- common/common.vcxitems | 1 - common/rawaccel-settings.h | 2 +- common/rawaccel.hpp | 5 +---- grapher/Constants/Constants.cs | 4 +--- grapher/Form1.Designer.cs | 20 ++++++++--------- grapher/Layouts/SigmoidGainLayout.cs | 22 ------------------- grapher/Models/Charts/ChartXY.cs | 22 ++++++++++++++----- grapher/Models/Options/AccelTypeOptions.cs | 3 +-- grapher/Models/Serialized/DriverSettings.cs | 2 +- grapher/Program.cs | 10 +++++++++ grapher/grapher.csproj | 1 - 12 files changed, 41 insertions(+), 85 deletions(-) delete mode 100644 common/accel-sigmoidgain.hpp delete mode 100644 grapher/Layouts/SigmoidGainLayout.cs diff --git a/common/accel-sigmoidgain.hpp b/common/accel-sigmoidgain.hpp deleted file mode 100644 index bed2f16..0000000 --- a/common/accel-sigmoidgain.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include - -#include "accel-base.hpp" - -namespace rawaccel { - - /// Struct to hold sigmoid (s-shaped) gain implementation. - struct sigmoidgain_impl { - double rate; - double limit; - double additive_constant; - double integration_constant; - - sigmoidgain_impl(const accel_args& args) : - rate(args.rate), limit(args.limit - 1) - { - additive_constant = exp(rate * args.midpoint); - integration_constant = log(1 + additive_constant); - } - - inline double operator()(double speed) const { - //f(x) = k/(1+e^(-m(c-x))) - double scaled_speed = rate * speed; - return limit * ((log(additive_constant+exp(scaled_speed)) - integration_constant)/scaled_speed); - } - - inline double legacy_offset(double speed) const { return operator()(speed); } - }; - - using accel_sigmoidgain = additive_accel; - -} diff --git a/common/common.vcxitems b/common/common.vcxitems index fdf5cf4..3407cf2 100644 --- a/common/common.vcxitems +++ b/common/common.vcxitems @@ -24,7 +24,6 @@ - diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index 00289b6..2ba6a98 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -6,7 +6,7 @@ namespace rawaccel { enum class accel_mode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, motivity, noaccel + linear, classic, natural, naturalgain, power, logarithm, motivity, noaccel }; struct settings { diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index 3eb9181..2e627c9 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -12,7 +12,6 @@ #include "accel-natural.hpp" #include "accel-naturalgain.hpp" #include "accel-power.hpp" -#include "accel-sigmoidgain.hpp" #include "accel-motivity.hpp" #include "accel-noaccel.hpp" @@ -84,10 +83,9 @@ namespace rawaccel { case accel_mode::classic: return vis(var.u.classic); case accel_mode::natural: return vis(var.u.natural); case accel_mode::naturalgain: return vis(var.u.naturalgain); - case accel_mode::sigmoidgain: return vis(var.u.sigmoidgain); case accel_mode::power: return vis(var.u.power); case accel_mode::logarithm: return vis(var.u.logarithm); - case accel_mode::motivity: return vis(var.u.motivity); + case accel_mode::motivity: return vis(var.u.motivity); default: return vis(var.u.noaccel); } } @@ -102,7 +100,6 @@ namespace rawaccel { accel_classic classic; accel_natural natural; accel_naturalgain naturalgain; - accel_sigmoidgain sigmoidgain; accel_power power; accel_logarithm logarithm; accel_motivity motivity; diff --git a/grapher/Constants/Constants.cs b/grapher/Constants/Constants.cs index 2ce6763..b41ffa2 100644 --- a/grapher/Constants/Constants.cs +++ b/grapher/Constants/Constants.cs @@ -21,9 +21,6 @@ namespace grapher /// Ratio of max (X, Y) used in "by component" calulations to those used in "whole vector" calculations. public const double XYToCombinedRatio = 1.4; - /// Possible options to display in a layout. - public const int PossibleOptionsCount = 6; - /// Separation between X and Y active value labels, in pixels. public const int ActiveLabelXYSeparation = 2; @@ -60,6 +57,7 @@ namespace grapher /// Left placement of charts when narrowed public const int NarrowChartLeft = 482; + /// Vertical placement of write button above bottom of sensitivity graph public const int WriteButtonVerticalOffset = 80; /// Format string for shortened x and y textboxes. diff --git a/grapher/Form1.Designer.cs b/grapher/Form1.Designer.cs index e108720..c6a895d 100644 --- a/grapher/Form1.Designer.cs +++ b/grapher/Form1.Designer.cs @@ -98,13 +98,13 @@ namespace grapher this.GainChart = new System.Windows.Forms.DataVisualization.Charting.Chart(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.graphsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.showVelocityGainToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.scaleByDPIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.dPIToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.DPITextBox = new System.Windows.Forms.ToolStripTextBox(); this.pollRateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.PollRateTextBox = new System.Windows.Forms.ToolStripTextBox(); this.ScaleMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.showVelocityGainToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.showLastMouseMoveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.advancedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.capStyleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -505,12 +505,6 @@ namespace grapher this.graphsToolStripMenuItem.Size = new System.Drawing.Size(53, 20); this.graphsToolStripMenuItem.Text = "Charts"; // - // showVelocityGainToolStripMenuItem - // - this.showVelocityGainToolStripMenuItem.Name = "showVelocityGainToolStripMenuItem"; - this.showVelocityGainToolStripMenuItem.Size = new System.Drawing.Size(199, 22); - this.showVelocityGainToolStripMenuItem.Text = "Show Velocity && Gain"; - // // scaleByDPIToolStripMenuItem // this.scaleByDPIToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -526,7 +520,7 @@ namespace grapher this.dPIToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.DPITextBox}); this.dPIToolStripMenuItem.Name = "dPIToolStripMenuItem"; - this.dPIToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.dPIToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.dPIToolStripMenuItem.Text = "DPI"; // // DPITextBox @@ -540,7 +534,7 @@ namespace grapher this.pollRateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.PollRateTextBox}); this.pollRateToolStripMenuItem.Name = "pollRateToolStripMenuItem"; - this.pollRateToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.pollRateToolStripMenuItem.Size = new System.Drawing.Size(169, 22); this.pollRateToolStripMenuItem.Text = "Poll Rate"; // // PollRateTextBox @@ -552,9 +546,15 @@ namespace grapher // ScaleMenuItem // this.ScaleMenuItem.Name = "ScaleMenuItem"; - this.ScaleMenuItem.Size = new System.Drawing.Size(180, 22); + this.ScaleMenuItem.Size = new System.Drawing.Size(169, 22); this.ScaleMenuItem.Text = "Re-scale by above"; // + // showVelocityGainToolStripMenuItem + // + this.showVelocityGainToolStripMenuItem.Name = "showVelocityGainToolStripMenuItem"; + this.showVelocityGainToolStripMenuItem.Size = new System.Drawing.Size(199, 22); + this.showVelocityGainToolStripMenuItem.Text = "Show Velocity && Gain"; + // // showLastMouseMoveToolStripMenuItem // this.showLastMouseMoveToolStripMenuItem.Checked = true; diff --git a/grapher/Layouts/SigmoidGainLayout.cs b/grapher/Layouts/SigmoidGainLayout.cs deleted file mode 100644 index 684de83..0000000 --- a/grapher/Layouts/SigmoidGainLayout.cs +++ /dev/null @@ -1,22 +0,0 @@ -using grapher.Models.Serialized; - -namespace grapher.Layouts -{ - public class SigmoidGainLayout : LayoutBase - { - public SigmoidGainLayout() - : base() - { - Name = "SigmoidGain"; - Index = (int)AccelMode.sigmoidgain; - LogarithmicCharts = false; - - AccelLayout = new OptionLayout(true, Acceleration); - CapLayout = new OptionLayout(false, string.Empty); - WeightLayout = new OptionLayout(true, Weight); - OffsetLayout = new OptionLayout(false, string.Empty); - LimExpLayout = new OptionLayout(true, Limit); - MidpointLayout = new OptionLayout(true, Midpoint); - } - } -} diff --git a/grapher/Models/Charts/ChartXY.cs b/grapher/Models/Charts/ChartXY.cs index 253804e..c30c993 100644 --- a/grapher/Models/Charts/ChartXY.cs +++ b/grapher/Models/Charts/ChartXY.cs @@ -211,16 +211,26 @@ namespace grapher public void SetMinMax(double min, double max) { - ChartX.ChartAreas[0].AxisY.Minimum = min; - ChartX.ChartAreas[0].AxisY.Maximum = max; + if (min < max) + { + ChartX.ChartAreas[0].AxisY.Minimum = min; + ChartX.ChartAreas[0].AxisY.Maximum = max; + } } public void SetMinMaxXY(double minX, double maxX, double minY, double maxY) { - ChartX.ChartAreas[0].AxisY.Minimum = minX; - ChartX.ChartAreas[0].AxisY.Maximum = maxX; - ChartY.ChartAreas[0].AxisY.Minimum = minY; - ChartY.ChartAreas[0].AxisY.Maximum = maxY; + if (minX < maxX) + { + ChartX.ChartAreas[0].AxisY.Minimum = minX; + ChartX.ChartAreas[0].AxisY.Maximum = maxX; + } + + if (minY < maxY) + { + ChartY.ChartAreas[0].AxisY.Minimum = minY; + ChartY.ChartAreas[0].AxisY.Maximum = maxY; + } } public void SetCombined() diff --git a/grapher/Models/Options/AccelTypeOptions.cs b/grapher/Models/Options/AccelTypeOptions.cs index 16029ce..9bd42f5 100644 --- a/grapher/Models/Options/AccelTypeOptions.cs +++ b/grapher/Models/Options/AccelTypeOptions.cs @@ -17,10 +17,9 @@ namespace grapher new LinearLayout(), new ClassicLayout(), new NaturalLayout(), + new NaturalGainLayout(), new PowerLayout(), new LogarithmLayout(), - new NaturalGainLayout(), - new SigmoidGainLayout(), new MotivityLayout(), new OffLayout() }.ToDictionary(k => k.Name); diff --git a/grapher/Models/Serialized/DriverSettings.cs b/grapher/Models/Serialized/DriverSettings.cs index 119b684..5f9307c 100644 --- a/grapher/Models/Serialized/DriverSettings.cs +++ b/grapher/Models/Serialized/DriverSettings.cs @@ -8,7 +8,7 @@ namespace grapher.Models.Serialized public enum AccelMode { - linear, classic, natural, naturalgain, sigmoidgain, power, logarithm, motivity, noaccel + linear, classic, natural, naturalgain, power, logarithm, motivity, noaccel } #endregion Enumerations diff --git a/grapher/Program.cs b/grapher/Program.cs index 85fd040..485e074 100644 --- a/grapher/Program.cs +++ b/grapher/Program.cs @@ -11,9 +11,19 @@ namespace grapher [STAThread] static void Main() { + var mutex = new System.Threading.Mutex(true, "RawAccelGrapher", out bool result); + + if (!result) + { + MessageBox.Show("Another instance of the Raw Accel Grapher is already running."); + return; + } + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new RawAcceleration()); + + GC.KeepAlive(mutex); } } } diff --git a/grapher/grapher.csproj b/grapher/grapher.csproj index b283e37..bc9fcf2 100644 --- a/grapher/grapher.csproj +++ b/grapher/grapher.csproj @@ -57,7 +57,6 @@ - -- cgit v1.2.3 From 3d86fc913768f92d0c445ee51419d30db26c0503 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 17:06:43 -0700 Subject: Update credits --- grapher/ReadMe/ReadMe.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/grapher/ReadMe/ReadMe.md b/grapher/ReadMe/ReadMe.md index 1d0c282..9bc0894 100644 --- a/grapher/ReadMe/ReadMe.md +++ b/grapher/ReadMe/ReadMe.md @@ -11,4 +11,11 @@ Raw Accel will be signed to run as a fully trusted driver. It modifies mouse inp Development of Raw Accel is ongoing at https://github.com/a1xd/rawaccel. Being a signed driver, the guts of the Raw Accel driver will be updated infrequently. The GUI can be updated as often was we like, however, so please let us know if you find any bugs. ## Further Help -For an overview of everything Raw Accel has to offer, please see the guide (guide.md). For a list of frequently asked questions, please see the FAQ (FAQ.md). \ No newline at end of file +For an overview of everything Raw Accel has to offer, please see the guide (guide.md). For a list of frequently asked questions, please see the FAQ (FAQ.md). + +## Credits +simon - Driver & Acceleration Logic +\_m00se\_ - GUI, Gain features, Acceleration types +Sidiouth - Primary tester and sounding board +TauntyAmordillo - Originator of the ideas behind the Natural, Natural Gain, and Motivity types +Kovaak - Brought us together \ No newline at end of file -- cgit v1.2.3 From c122ae6945343fec145ccbf425316c03346626fe Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 17:35:49 -0700 Subject: Fix gain scaling --- grapher/Models/Calculations/AccelCalculator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grapher/Models/Calculations/AccelCalculator.cs b/grapher/Models/Calculations/AccelCalculator.cs index d9b51b2..f2a6c7c 100644 --- a/grapher/Models/Calculations/AccelCalculator.cs +++ b/grapher/Models/Calculations/AccelCalculator.cs @@ -125,8 +125,8 @@ namespace grapher.Models.Calculations data.OrderedVelocityPointsList.AddRange(data.VelocityPoints.Values.ToList()); data.MaxAccel = maxRatio; data.MinAccel = minRatio; - data.MaxGain = maxRatio; - data.MinGain = minRatio; + data.MaxGain = maxSlope; + data.MinGain = minSlope; } public void CalculateCombinedDiffSens(AccelData data, ManagedAccel accel, DriverSettings settings, ICollection magnitudeData) -- cgit v1.2.3 From 30ddf15eb6925e70eaa27e9d72a4c07e90cf9079 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Tue, 22 Sep 2020 19:59:31 -0700 Subject: Update credits --- grapher/ReadMe/ReadMe.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grapher/ReadMe/ReadMe.md b/grapher/ReadMe/ReadMe.md index 9bc0894..84afc2a 100644 --- a/grapher/ReadMe/ReadMe.md +++ b/grapher/ReadMe/ReadMe.md @@ -17,5 +17,5 @@ For an overview of everything Raw Accel has to offer, please see the guide (guid simon - Driver & Acceleration Logic \_m00se\_ - GUI, Gain features, Acceleration types Sidiouth - Primary tester and sounding board -TauntyAmordillo - Originator of the ideas behind the Natural, Natural Gain, and Motivity types +TauntyAmordillo - Originator of the alternate curve ideas (Natural and Motivity types) Kovaak - Brought us together \ No newline at end of file -- cgit v1.2.3