From 9a9d1e749bf129559d1c415ef3facdb26a95c1cb Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 1 Oct 2010 14:40:16 +0200 Subject: [PATCH 1/3] code cleanup --- .../Converters/BoolToBrushConverter.cs | 4 ---- Netduino.SimpleEmulator/ViewModels/GenericViewModel.cs | 10 ++-------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs b/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs index 50e6463..3b45623 100644 --- a/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs +++ b/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Windows.Data; using System.Windows.Media; @@ -22,7 +19,6 @@ public object Convert(object value, Type targetType, return _falseBrush; default: return _trueBrush; - break; } } public object ConvertBack(object value, Type targetType, diff --git a/Netduino.SimpleEmulator/ViewModels/GenericViewModel.cs b/Netduino.SimpleEmulator/ViewModels/GenericViewModel.cs index 09be0e0..77a54c8 100644 --- a/Netduino.SimpleEmulator/ViewModels/GenericViewModel.cs +++ b/Netduino.SimpleEmulator/ViewModels/GenericViewModel.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using System.ComponentModel.Composition; using Caliburn.Micro; using Netduino.Core.ViewModels; @@ -242,11 +239,8 @@ public bool OnBoardLed public void OnBoardSwitch() { _switchState = !_switchState; - if (_switchState) - Switch1ButtonText = "Turn Onboard LED Off"; - else - Switch1ButtonText = "Turn Onboard LED On"; - _eventAggregator.Publish(new InputGpioEventArgs(Pins.ONBOARD_SW1,_switchState)); + Switch1ButtonText = _switchState ? "Turn Onboard LED Off" : "Turn Onboard LED On"; + _eventAggregator.Publish(new InputGpioEventArgs(Pins.ONBOARD_SW1,_switchState)); } #region IHandle Members From ceae20d12005c860a5863b1fea3c7bf413a49d75 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 1 Oct 2010 15:04:08 +0200 Subject: [PATCH 2/3] code cleanup renamed service dir to services --- Netduino.Core/EmulatorBootstrapper.cs | 32 ++- Netduino.Core/InputGpioEventArgs.cs | 26 +-- Netduino.Core/OutputGpioEventArgs.cs | 41 ++-- Netduino.Core/Service/EmulatorService.cs | 201 ------------------ Netduino.Core/Service/IEmulatorService.cs | 11 - .../{Service => Services}/DebugLogger.cs | 5 +- .../{Service => Services}/Emulator2.cs | 85 ++++---- Netduino.Core/Services/EmulatorService.cs | 179 ++++++++++++++++ Netduino.Core/Services/IEmulatorService.cs | 6 + .../{Service => Services}/Log4NetLogger.cs | 7 +- .../{Service => Services}/TextFileLogger.cs | 7 +- .../ViewModels/IEmulatorViewModel.cs | 7 +- Netduino.Core/ViewModels/IShellViewModel.cs | 7 +- Netduino.Core/ViewModels/ShellViewModel.cs | 19 +- Netduino.Core/Views/ShellView.xaml.cs | 2 +- 15 files changed, 270 insertions(+), 365 deletions(-) delete mode 100644 Netduino.Core/Service/EmulatorService.cs delete mode 100644 Netduino.Core/Service/IEmulatorService.cs rename Netduino.Core/{Service => Services}/DebugLogger.cs (85%) rename Netduino.Core/{Service => Services}/Emulator2.cs (60%) create mode 100644 Netduino.Core/Services/EmulatorService.cs create mode 100644 Netduino.Core/Services/IEmulatorService.cs rename Netduino.Core/{Service => Services}/Log4NetLogger.cs (86%) rename Netduino.Core/{Service => Services}/TextFileLogger.cs (86%) diff --git a/Netduino.Core/EmulatorBootstrapper.cs b/Netduino.Core/EmulatorBootstrapper.cs index 3a49747..053bd32 100644 --- a/Netduino.Core/EmulatorBootstrapper.cs +++ b/Netduino.Core/EmulatorBootstrapper.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using Caliburn.Micro; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; @@ -10,9 +9,6 @@ using Netduino.Core.ViewModels; using Netduino.Core.Services; using System.IO; -using Microsoft.SPOT.Tasks; -using System.Xml; -using Netduino.Core.Service; namespace Netduino.Core { @@ -21,11 +17,11 @@ namespace Netduino.Core /// public class EmulatorBootstrapper : Bootstrapper { - private CompositionContainer container; + private CompositionContainer _container; static EmulatorBootstrapper() { - LogManager.GetLog = type => new Log4netLogger(type); + LogManager.GetLog = type => new Log4NetLogger(type); } /// @@ -34,25 +30,25 @@ static EmulatorBootstrapper() protected override void Configure() { - AggregateCatalog catalog = new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType()); - container = new CompositionContainer(catalog); + var catalog = new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType()); + _container = new CompositionContainer(catalog); var batch = new CompositionBatch(); batch.AddExportedValue(new WindowManager()); IEventAggregator aggregator = new EventAggregator(); - batch.AddExportedValue(aggregator); + batch.AddExportedValue(aggregator); - EmulatorService service = new EmulatorService(aggregator); - batch.AddExportedValue(service); + var emulatorService = new EmulatorService(aggregator); + batch.AddExportedValue(emulatorService); - batch.AddExportedValue(container); + batch.AddExportedValue(_container); - container.Compose(batch); + _container.Compose(batch); // Start the emulator - service.StartEmulator(); + emulatorService.StartEmulator(); } /// @@ -64,7 +60,7 @@ protected override void Configure() protected override object GetInstance(Type serviceType, string key) { string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key; - var exports = container.GetExportedValues(contract); + var exports = _container.GetExportedValues(contract); if (exports.Count() > 0) return exports.First(); @@ -74,12 +70,12 @@ protected override object GetInstance(Type serviceType, string key) protected override IEnumerable GetAllInstances(Type serviceType) { - return container.GetExportedValues(AttributedModelServices.GetContractName(serviceType)); + return _container.GetExportedValues(AttributedModelServices.GetContractName(serviceType)); } protected override void BuildUp(object instance) { - container.SatisfyImportsOnce(instance); + _container.SatisfyImportsOnce(instance); } /// @@ -88,7 +84,7 @@ protected override void BuildUp(object instance) /// protected override IEnumerable SelectAssemblies() { - return new Assembly[] { Assembly.GetExecutingAssembly(), Assembly.LoadFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Extensions\NetduinoEmulator.dll")) }; + return new[] { Assembly.GetExecutingAssembly(), Assembly.LoadFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Extensions\NetduinoEmulator.dll")) }; } /// diff --git a/Netduino.Core/InputGpioEventArgs.cs b/Netduino.Core/InputGpioEventArgs.cs index 1192826..d076d93 100644 --- a/Netduino.Core/InputGpioEventArgs.cs +++ b/Netduino.Core/InputGpioEventArgs.cs @@ -1,41 +1,25 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.SPOT.Emulator.Gpio; - -namespace Netduino.Core +namespace Netduino.Core { /// /// A simple DTO that represents the state of an input pin on the netduino /// public class InputGpioEventArgs { - private int _pin; - private bool _edge; public InputGpioEventArgs(int pin, bool edge) { - _pin = pin; - _edge = edge; + Pin = pin; + Edge = edge; } /// /// What pin this event is for /// - public int Pin - { - get { return _pin; } - set { _pin = value; } - } + public int Pin { get; set; } /// /// What state the pin transitioned to /// - public bool Edge - { - get { return _edge; } - set { _edge = value; } - } + public bool Edge { get; set; } } } diff --git a/Netduino.Core/OutputGpioEventArgs.cs b/Netduino.Core/OutputGpioEventArgs.cs index fec4e82..8cc0634 100644 --- a/Netduino.Core/OutputGpioEventArgs.cs +++ b/Netduino.Core/OutputGpioEventArgs.cs @@ -1,44 +1,27 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.SPOT.Emulator.Gpio; - -namespace Netduino.Core +namespace Netduino.Core { public class OutputGpioEventArgs { - private int _pin; - private bool _edge; - - /// + /// /// A simple DTO that represents the state of an output pin on the netduino /// /// /// public OutputGpioEventArgs(int pin, bool edge) { - _pin = pin; - _edge = edge; + Pin = pin; + Edge = edge; } - /// - /// The pin this event belongs to - /// - public int Pin - { - get { return _pin; } - set { _pin = value; } - } + /// + /// The pin this event belongs to + /// + public int Pin { get; set; } - /// - /// The state the pin should transition to - /// - public bool Edge - { - get { return _edge; } - set { _edge = value; } - } + /// + /// The state the pin should transition to + /// + public bool Edge { get; set; } } } diff --git a/Netduino.Core/Service/EmulatorService.cs b/Netduino.Core/Service/EmulatorService.cs deleted file mode 100644 index e04b319..0000000 --- a/Netduino.Core/Service/EmulatorService.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.SPOT.Emulator; -using Microsoft.SPOT.Emulator.Gpio; -using Microsoft.SPOT.Hardware; -using Caliburn.Micro; -using System.ComponentModel.Composition; -using Netduino.Core; - -namespace Netduino.Core.Services -{ - [Export(typeof(IEmulatorService))] - public class EmulatorService:Emulator2,IEmulatorService,IHandle,IHandle - { - //private readonly Emulator _emulator; - private GpioPort _onBoardLedPort; - private GpioPort _onBoardSwitch1; - private GpioPort _gpio_d0Port; - private GpioPort _gpio_d1Port; - private GpioPort _gpio_d2Port; - private GpioPort _gpio_d3Port; - private GpioPort _gpio_d4Port; - private GpioPort _gpio_d5Port; - private GpioPort _gpio_d6Port; - private GpioPort _gpio_d7Port; - private GpioPort _gpio_d8Port; - private GpioPort _gpio_d9Port; - private GpioPort _gpio_d10Port; - private GpioPort _gpio_d11Port; - private GpioPort _gpio_d12Port; - private GpioPort _gpio_d13Port; - //private GpioPort _gpio_a0Port; - private readonly IEventAggregator _eventAggregator; - private readonly ILog _log = LogManager.GetLog(typeof(EmulatorService)); - - - public EmulatorService(IEventAggregator eventAggregator) - { - _eventAggregator = eventAggregator; - } - - public override void Configure(System.Xml.XmlReader reader) - { - try - { - base.Configure(reader); - } - catch (Exception ex) - { - _log.Error(ex); - } - } - - public override void Run() - { - base.Run(); - - } - - /// Registers default components and settings for this emulator - protected override void LoadDefaultComponents() - { - base.LoadDefaultComponents(); - - } - - public override void SetupComponent() - { - base.SetupComponent(); - } - - public override void InitializeComponent() - { - base.InitializeComponent(); - _gpio_d0Port = RegisterOutput("GPIO_PIN_D0"); - _gpio_d1Port = RegisterOutput("GPIO_PIN_D1"); - _gpio_d2Port = RegisterOutput("GPIO_PIN_D2"); - _gpio_d3Port = RegisterOutput("GPIO_PIN_D3"); - _gpio_d4Port = RegisterOutput("GPIO_PIN_D4"); - _gpio_d5Port = RegisterOutput("GPIO_PIN_D5"); - _gpio_d6Port = RegisterOutput("GPIO_PIN_D6"); - _gpio_d7Port = RegisterOutput("GPIO_PIN_D7"); - _gpio_d8Port = RegisterOutput("GPIO_PIN_D8"); - _gpio_d9Port = RegisterOutput("GPIO_PIN_D9"); - _gpio_d10Port = RegisterOutput("GPIO_PIN_D10"); - _gpio_d11Port = RegisterOutput("GPIO_PIN_D11"); - _gpio_d12Port = RegisterOutput("GPIO_PIN_D12"); - _gpio_d13Port = RegisterOutput("GPIO_PIN_D13"); - _onBoardLedPort = RegisterOutput("ONBOARD_LED"); - _onBoardSwitch1 = this.FindComponentById("ONBOARD_SW1") as GpioPort; - - _eventAggregator.Subscribe(this); - } - - private GpioPort RegisterOutput(string id) - { - GpioPort port = this.FindComponentById(id) as GpioPort; - if (port != null) - { - if (port.ModesAllowed == GpioPortMode.InputOutputPort || port.ModesAllowed == GpioPortMode.OutputPort) - { - _log.Info("Id={0} is an output pin so register it for events", id); - port.OnGpioActivity += new GpioActivity(Port_OnGpioActivity); - } - else - { - _log.Warn("Id={0} must not be an output pin", id); - } - } - else - { - _log.Warn("Output was not registered Id={0}", id); - } - return port; - } - - public override void UninitializeComponent() - { - base.UninitializeComponent(); - } - - void Port_OnGpioActivity(GpioPort sender, bool edge) - { - _log.Info("Emulator Service GpioPort Fired {0} {1}",sender.Pin,edge); - _eventAggregator.Publish(new OutputGpioEventArgs((int)sender.Pin, edge)); - } - - public void Handle(InputGpioEventArgs message) - { - - if (message != null) - { - _log.Info("Emulator Service: Handle Input {0} {1}",message.Pin,message.Edge); - if (message.Pin == Pins.ONBOARD_SW1 && _onBoardSwitch1 != null) - { - _onBoardSwitch1.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D1 && _gpio_d1Port != null) - { - _gpio_d1Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D2 && _gpio_d2Port != null) - { - _gpio_d2Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D3 && _gpio_d3Port != null) - { - _gpio_d3Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D4 && _gpio_d4Port != null) - { - _gpio_d4Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D5 && _gpio_d5Port != null) - { - _gpio_d5Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D6 && _gpio_d6Port != null) - { - _gpio_d6Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D7 && _gpio_d7Port != null) - { - _gpio_d7Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D8 && _gpio_d8Port != null) - { - _gpio_d8Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D9 && _gpio_d9Port != null) - { - _gpio_d9Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D10 && _gpio_d10Port != null) - { - _gpio_d10Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D11 && _gpio_d11Port != null) - { - _gpio_d11Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D12 && _gpio_d12Port != null) - { - _gpio_d12Port.Write(message.Edge); - } - if (message.Pin == Pins.GPIO_PIN_D13 && _gpio_d13Port != null) - { - _gpio_d13Port.Write(message.Edge); - } - } - } - - public void Handle(OutputGpioEventArgs message) - { - _log.Info("Emulator Service Handle Output "); - - } - } -} diff --git a/Netduino.Core/Service/IEmulatorService.cs b/Netduino.Core/Service/IEmulatorService.cs deleted file mode 100644 index ebc5da6..0000000 --- a/Netduino.Core/Service/IEmulatorService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Netduino.Core.Services -{ - public interface IEmulatorService - { - } -} diff --git a/Netduino.Core/Service/DebugLogger.cs b/Netduino.Core/Services/DebugLogger.cs similarity index 85% rename from Netduino.Core/Service/DebugLogger.cs rename to Netduino.Core/Services/DebugLogger.cs index 56a8ce3..e59805c 100644 --- a/Netduino.Core/Service/DebugLogger.cs +++ b/Netduino.Core/Services/DebugLogger.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Caliburn.Micro; using System.Diagnostics; @@ -21,7 +18,7 @@ public DebugLogger(Type type) #endregion #region Helper Methods - private string CreateLogMessage(string format, params object[] args) + private static string CreateLogMessage(string format, params object[] args) { return string.Format("[{0}] {1}", DateTime.Now.ToString("o"), diff --git a/Netduino.Core/Service/Emulator2.cs b/Netduino.Core/Services/Emulator2.cs similarity index 60% rename from Netduino.Core/Service/Emulator2.cs rename to Netduino.Core/Services/Emulator2.cs index f32c07b..03c1513 100644 --- a/Netduino.Core/Service/Emulator2.cs +++ b/Netduino.Core/Services/Emulator2.cs @@ -1,16 +1,13 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Microsoft.SPOT.Emulator; using System.Threading; +using Microsoft.SPOT.Emulator; using Microsoft.SPOT.Emulator.Gpio; using Microsoft.SPOT.Hardware; namespace Netduino.Core.Services { /// Extension of standard Emulator to provide events for key state changes - /// The standard and derived classes go through + /// The standard and derived classes go through /// several stages of initialization. However, external classes, like a view model /// don't get to participate in the "notification" of state changes. Thus it is difficult /// for a view model to know when it is safe to attach to the emulators LCD changed event. @@ -24,16 +21,16 @@ public Emulator2( ) { } - /// Creates a new instance of an - /// Custom emulator HAL built from the .NET Micro Framework Porting kit - /// - /// This overload of the constructor allows setting the HAL/CLR implementation for the emulator. - /// You can create custom HAL/CLR configurations using the .NET Micro Framework Porting kit. - /// - //public Emulator2(IEmulator Hal) - // : base( Hal ) - //{ - //} + ///// Creates a new instance of an + ///// Custom emulator HAL built from the .NET Micro Framework Porting kit + ///// + ///// This overload of the constructor allows setting the HAL/CLR implementation for the emulator. + ///// You can create custom HAL/CLR configurations using the .NET Micro Framework Porting kit. + ///// + ////public Emulator2(IEmulator Hal) + //// : base( Hal ) + ////{ + ////} #region Emulator Thread /// Start the emulator engine on a new thread @@ -44,10 +41,10 @@ public void StartEmulator( ) } /// Start the emulator engine on a new thread - /// Command line arguments - public void StartEmulator( string[ ] Args ) + /// Command line arguments + public void StartEmulator( string[ ] args ) { - new Thread( Start ).Start( Args ); + new Thread( Start ).Start( args ); } #endregion @@ -85,56 +82,52 @@ public override void UninitializeComponent() #region GPIO Pins /// Registers a GPIO pin in the system - /// Pin number - /// Name for the pin + /// Pin number + /// Name for the pin /// /// Useful method for registering a pin - /// NOTE: This should only be called from an overload of the - /// Method + /// NOTE: This should only be called from an overload of the + /// Method /// - protected GpioPort RegisterPin(string Name, Cpu.Pin Pin) + protected GpioPort RegisterPin(string name, Cpu.Pin pin) { - return RegisterPin(Name, Pin, GpioPortMode.InputOutputPort, GpioPortMode.InputOutputPort); + return RegisterPin(name, pin, GpioPortMode.InputOutputPort, GpioPortMode.InputOutputPort); } /// Registers a GPIO pin in the system - /// Pin number - /// Name for the pin - /// Virtual Key to attach to the pin + /// Pin number + /// Name for the pin + /// Virtual Key to attach to the pin /// /// Useful method for registering a pin that acts as a button - /// NOTE: This should only be called from an overload of the - /// Method + /// NOTE: This should only be called from an overload of the + /// Method /// - protected GpioPort RegisterPin(string Name, Cpu.Pin Pin, VirtualKey Key) + protected GpioPort RegisterPin(string name, Cpu.Pin pin, VirtualKey key) { - GpioPort retVal = RegisterPin(Name, Pin); - retVal.VirtualKey = Key; + GpioPort retVal = RegisterPin(name, pin); + retVal.VirtualKey = key; return retVal; } /// Registers a GPIO pin in the system - /// Name for the pin - /// Pin number - /// Expected mode for the pin - /// Allowed modes for the pin + /// Name for the pin + /// Pin number + /// Expected mode for the pin + /// Allowed modes for the pin /// /// Useful method for registering a pin - /// NOTE: This should only be called from an overload of the - /// Method + /// NOTE: This should only be called from an overload of the + /// Method /// - protected GpioPort RegisterPin(string Name, Cpu.Pin Pin, GpioPortMode ExpectedMode, GpioPortMode AllowedMode) + protected GpioPort RegisterPin(string name, Cpu.Pin pin, GpioPortMode expectedMode, GpioPortMode allowedMode) { - if (this.State != EmulatorState.Configuration) + if (State != EmulatorState.Configuration) throw new InvalidOperationException( "Cannot register GPIO Pins unless emulator is in the Configuration state"); - GpioPort port = new GpioPort(); - port.Pin = Pin; - port.ModesAllowed = AllowedMode; - port.ModesExpected = ExpectedMode; - port.ComponentId = Name; - RegisterComponent(port); + var port = new GpioPort {Pin = pin, ModesAllowed = allowedMode, ModesExpected = expectedMode, ComponentId = name}; + RegisterComponent(port); return port; } #endregion diff --git a/Netduino.Core/Services/EmulatorService.cs b/Netduino.Core/Services/EmulatorService.cs new file mode 100644 index 0000000..33f73af --- /dev/null +++ b/Netduino.Core/Services/EmulatorService.cs @@ -0,0 +1,179 @@ +using System; +using System.ComponentModel.Composition; +using Caliburn.Micro; +using Microsoft.SPOT.Emulator.Gpio; + +namespace Netduino.Core.Services +{ + [Export(typeof(IEmulatorService))] + public class EmulatorService:Emulator2,IEmulatorService,IHandle,IHandle + { + //private readonly Emulator _emulator; + private GpioPort _onBoardLedPort; + private GpioPort _onBoardSwitch1; + private GpioPort _gpioD0Port; + private GpioPort _gpioD1Port; + private GpioPort _gpioD2Port; + private GpioPort _gpioD3Port; + private GpioPort _gpioD4Port; + private GpioPort _gpioD5Port; + private GpioPort _gpioD6Port; + private GpioPort _gpioD7Port; + private GpioPort _gpioD8Port; + private GpioPort _gpioD9Port; + private GpioPort _gpioD10Port; + private GpioPort _gpioD11Port; + private GpioPort _gpioD12Port; + private GpioPort _gpioD13Port; + //private GpioPort _gpio_a0Port; + private readonly IEventAggregator _eventAggregator; + private readonly ILog _log = LogManager.GetLog(typeof(EmulatorService)); + + + public EmulatorService(IEventAggregator eventAggregator) + { + _eventAggregator = eventAggregator; + } + + public override void Configure(System.Xml.XmlReader reader) + { + try + { + base.Configure(reader); + } + catch (Exception ex) + { + _log.Error(ex); + } + } + + /// Registers default components and settings for this emulator + protected override void LoadDefaultComponents() + { + base.LoadDefaultComponents(); + + } + + public override void InitializeComponent() + { + base.InitializeComponent(); + _gpioD0Port = RegisterOutput("GPIO_PIN_D0"); + _gpioD1Port = RegisterOutput("GPIO_PIN_D1"); + _gpioD2Port = RegisterOutput("GPIO_PIN_D2"); + _gpioD3Port = RegisterOutput("GPIO_PIN_D3"); + _gpioD4Port = RegisterOutput("GPIO_PIN_D4"); + _gpioD5Port = RegisterOutput("GPIO_PIN_D5"); + _gpioD6Port = RegisterOutput("GPIO_PIN_D6"); + _gpioD7Port = RegisterOutput("GPIO_PIN_D7"); + _gpioD8Port = RegisterOutput("GPIO_PIN_D8"); + _gpioD9Port = RegisterOutput("GPIO_PIN_D9"); + _gpioD10Port = RegisterOutput("GPIO_PIN_D10"); + _gpioD11Port = RegisterOutput("GPIO_PIN_D11"); + _gpioD12Port = RegisterOutput("GPIO_PIN_D12"); + _gpioD13Port = RegisterOutput("GPIO_PIN_D13"); + _onBoardLedPort = RegisterOutput("ONBOARD_LED"); + _onBoardSwitch1 = FindComponentById("ONBOARD_SW1") as GpioPort; + + _eventAggregator.Subscribe(this); + } + + private GpioPort RegisterOutput(string id) + { + var gpioPort = FindComponentById(id) as GpioPort; + if (gpioPort != null) + { + if (gpioPort.ModesAllowed == GpioPortMode.InputOutputPort || gpioPort.ModesAllowed == GpioPortMode.OutputPort) + { + _log.Info("Id={0} is an output pin so register it for events", id); + gpioPort.OnGpioActivity += Port_OnGpioActivity; + } + else + { + _log.Warn("Id={0} must not be an output pin", id); + } + } + else + { + _log.Warn("Output was not registered Id={0}", id); + } + return gpioPort; + } + + void Port_OnGpioActivity(GpioPort sender, bool edge) + { + _log.Info("Emulator Service GpioPort Fired {0} {1}",sender.Pin,edge); + _eventAggregator.Publish(new OutputGpioEventArgs((int)sender.Pin, edge)); + } + + public void Handle(InputGpioEventArgs message) + { + + if (message != null) + { + _log.Info("Emulator Service: Handle Input {0} {1}",message.Pin,message.Edge); + if (message.Pin == Pins.ONBOARD_SW1 && _onBoardSwitch1 != null) + { + _onBoardSwitch1.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D1 && _gpioD1Port != null) + { + _gpioD1Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D2 && _gpioD2Port != null) + { + _gpioD2Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D3 && _gpioD3Port != null) + { + _gpioD3Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D4 && _gpioD4Port != null) + { + _gpioD4Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D5 && _gpioD5Port != null) + { + _gpioD5Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D6 && _gpioD6Port != null) + { + _gpioD6Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D7 && _gpioD7Port != null) + { + _gpioD7Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D8 && _gpioD8Port != null) + { + _gpioD8Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D9 && _gpioD9Port != null) + { + _gpioD9Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D10 && _gpioD10Port != null) + { + _gpioD10Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D11 && _gpioD11Port != null) + { + _gpioD11Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D12 && _gpioD12Port != null) + { + _gpioD12Port.Write(message.Edge); + } + if (message.Pin == Pins.GPIO_PIN_D13 && _gpioD13Port != null) + { + _gpioD13Port.Write(message.Edge); + } + } + } + + public void Handle(OutputGpioEventArgs message) + { + _log.Info("Emulator Service Handle Output "); + + } + } +} diff --git a/Netduino.Core/Services/IEmulatorService.cs b/Netduino.Core/Services/IEmulatorService.cs new file mode 100644 index 0000000..a88df69 --- /dev/null +++ b/Netduino.Core/Services/IEmulatorService.cs @@ -0,0 +1,6 @@ +namespace Netduino.Core.Services +{ + public interface IEmulatorService + { + } +} diff --git a/Netduino.Core/Service/Log4NetLogger.cs b/Netduino.Core/Services/Log4NetLogger.cs similarity index 86% rename from Netduino.Core/Service/Log4NetLogger.cs rename to Netduino.Core/Services/Log4NetLogger.cs index ed1632b..699ee16 100644 --- a/Netduino.Core/Service/Log4NetLogger.cs +++ b/Netduino.Core/Services/Log4NetLogger.cs @@ -1,19 +1,16 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; using Caliburn.Micro; namespace Netduino.Core.Services { - public class Log4netLogger : ILog + public class Log4NetLogger : ILog { #region Fields private readonly log4net.ILog _innerLogger; #endregion #region Constructors - public Log4netLogger(Type type) + public Log4NetLogger(Type type) { //_innerLogger = log4net.LogManager.GetLogger(type); log4net.ILog[] loggers = log4net.LogManager.GetCurrentLoggers(); diff --git a/Netduino.Core/Service/TextFileLogger.cs b/Netduino.Core/Services/TextFileLogger.cs similarity index 86% rename from Netduino.Core/Service/TextFileLogger.cs rename to Netduino.Core/Services/TextFileLogger.cs index 042a58b..ee11833 100644 --- a/Netduino.Core/Service/TextFileLogger.cs +++ b/Netduino.Core/Services/TextFileLogger.cs @@ -1,11 +1,8 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Caliburn.Micro; using System.IO; +using Caliburn.Micro; -namespace Netduino.Core.Service +namespace Netduino.Core.Services { public class TextFileLogger : ILog { diff --git a/Netduino.Core/ViewModels/IEmulatorViewModel.cs b/Netduino.Core/ViewModels/IEmulatorViewModel.cs index bc069b7..618809f 100644 --- a/Netduino.Core/ViewModels/IEmulatorViewModel.cs +++ b/Netduino.Core/ViewModels/IEmulatorViewModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Netduino.Core.ViewModels +namespace Netduino.Core.ViewModels { /// /// All emulators need to implement this interface diff --git a/Netduino.Core/ViewModels/IShellViewModel.cs b/Netduino.Core/ViewModels/IShellViewModel.cs index 2e5e350..ffd8e5b 100644 --- a/Netduino.Core/ViewModels/IShellViewModel.cs +++ b/Netduino.Core/ViewModels/IShellViewModel.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Netduino.Core.ViewModels +namespace Netduino.Core.ViewModels { /// /// The shell marker interface diff --git a/Netduino.Core/ViewModels/ShellViewModel.cs b/Netduino.Core/ViewModels/ShellViewModel.cs index c40bb05..6b1f122 100644 --- a/Netduino.Core/ViewModels/ShellViewModel.cs +++ b/Netduino.Core/ViewModels/ShellViewModel.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Caliburn.Micro; -using System.ComponentModel.Composition; +using System.ComponentModel.Composition; using System.IO; +using Caliburn.Micro; namespace Netduino.Core.ViewModels { @@ -15,7 +11,7 @@ namespace Netduino.Core.ViewModels public class ShellViewModel :Conductor,IShellViewModel { private string _emulatorName; - private string _keyBase = @"HKEY_CURRENT_USER\Software\Microsoft\.NETMicroFramework\v4.1\Emulators\{45D406A2-51DD-4662-ABDD-499BD9589AF1}"; + private const string KeyBase = @"HKEY_CURRENT_USER\Software\Microsoft\.NETMicroFramework\v4.1\Emulators\{45D406A2-51DD-4662-ABDD-499BD9589AF1}"; private IWindowManager _windowManager; private IEmulatorViewModel _emulatorViewModel; private readonly ILog _log = LogManager.GetLog(typeof(ShellViewModel)); @@ -26,8 +22,7 @@ public ShellViewModel(IWindowManager windowManager,IEmulatorViewModel viewModel) _log.Info("ShellViewModel Constructor"); _windowManager = windowManager; _emulatorViewModel = viewModel; - this.DisplayName = "Netduino Emulator"; - + DisplayName = "Netduino Emulator"; } public string EmulatorName @@ -69,15 +64,15 @@ public void WriteRegistry() { string path = Path.Combine(Directory.GetCurrentDirectory(), "Netduino.Shell.exe"); ; - Microsoft.Win32.Registry.SetValue(_keyBase, "Name", EmulatorName); - Microsoft.Win32.Registry.SetValue(_keyBase, "Path", path); + Microsoft.Win32.Registry.SetValue(KeyBase, "Name", EmulatorName); + Microsoft.Win32.Registry.SetValue(KeyBase, "Path", path); } protected override void OnActivate() { base.OnActivate(); - Screen view = (Screen)IoC.Get(); + var view = (Screen)IoC.Get(); ChangeActiveItem(view, true); } } diff --git a/Netduino.Core/Views/ShellView.xaml.cs b/Netduino.Core/Views/ShellView.xaml.cs index 8d9f9a4..6e34356 100644 --- a/Netduino.Core/Views/ShellView.xaml.cs +++ b/Netduino.Core/Views/ShellView.xaml.cs @@ -17,7 +17,7 @@ namespace Netduino.Core.Views /// /// Interaction logic for ShellView.xaml /// - public partial class ShellView : UserControl + public partial class ShellView { public ShellView() { From d16d2077b8576d48b9dc60da033b03b1d8ea71d5 Mon Sep 17 00:00:00 2001 From: Spartaco Giubbolini Date: Fri, 1 Oct 2010 18:51:37 +0200 Subject: [PATCH 3/3] + added netduino's background image; + added post-build event to copy the emulator dll to the extensions dir; + other minor changes --- Netduino.Core/Netduino.Core.csproj | 12 +- .../Converters/BoolToBrushConverter.cs | 1 + Netduino.SimpleEmulator/Images/netduino.gif | Bin 0 -> 72272 bytes .../Netduino.SimpleEmulator.csproj | 7 +- .../ViewModels/GenericViewModel.cs | 4 +- .../Views/GenericView.xaml | 145 +++++++++--------- 6 files changed, 91 insertions(+), 78 deletions(-) create mode 100644 Netduino.SimpleEmulator/Images/netduino.gif diff --git a/Netduino.Core/Netduino.Core.csproj b/Netduino.Core/Netduino.Core.csproj index 15162eb..4c92ea0 100644 --- a/Netduino.Core/Netduino.Core.csproj +++ b/Netduino.Core/Netduino.Core.csproj @@ -70,12 +70,12 @@ - - - - - - + + + + + + diff --git a/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs b/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs index 3b45623..9efca36 100644 --- a/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs +++ b/Netduino.SimpleEmulator/Converters/BoolToBrushConverter.cs @@ -9,6 +9,7 @@ public class BoolToBrushConverter : IValueConverter { private Brush _falseBrush = Brushes.Red; private Brush _trueBrush = Brushes.Green; + #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) diff --git a/Netduino.SimpleEmulator/Images/netduino.gif b/Netduino.SimpleEmulator/Images/netduino.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2eab596dd33b814674dbb75d8a0fc9b7bc47b02 GIT binary patch literal 72272 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�AYxK}S?3YE}4j6sZ9`6_{q^+Mg~j{?dr{TDd()b*&DYFL(V zufUgjjF_|qh>FotomZOx~o;MRUT9HJQWQe`^yiInS=6+t7SPg+ZyT{#|WEGANP4H zG;I=>&o;lyy7*94sesnvxA_C^!1uDHf~Rs2fQh(A@_wVO=7k_I3ScXBkAO&#lTxA3 zF}!kI1w;cwwn^9;<9LkA0GyaIH?MpGU@@q2gvbJ@eNqa1o$6%ey8%rXkmXK`3jyB^ zXaCVjuBed()WIa8vrD`wl?{%~8Yx)$#qW!tu(e^Q+D*BVE7huMw0>T_-9pxlYK`(O z@S+UT!Y6M#OcDtU6X#9)@dJ<@WY&L;6*GPLXXD;Py2NU>7w^T*!><>AgnSItO3%|F zbov<)12+U(LO+>B8ADI*iF)ZF7dZ!oMs0Qf5npmd)sedyy{y1&AG1rf0=$v&DjA@gYF!^W+uQ5`uc73_u zq59!MAT8pQsW3+AosPU|Qh);EtuiEmgbqmw+x%48zqh(o#cBkk9=gUyM;GL5`}zKc z-u$TSJV3z|WPQKen#C~m7@Dnb_Q$nuP8l1ngeFw>pDC_q5e$AKLZrNTjJDyxf}gI( zWgFebES|~qmzc8RDQ$MAEl~?V`vk-E)ab)DUN;!=xVX!+dhRb z+#ufQwPHe^BjL!%fKkN;KGhk9wWg0+7zpzmg`5qUW%Y&|zD{Kfm#DKf4}Ox#=FSDr zaXyps=FKwpK5!a1j>Y!#;HT1KcdkJ+5UE>I zU2r|FytPIQJ61$N4JxG@5^jt#c(z`A+8DOh3_qfuI!S~9Mo z|IS;@F?F*`o0;=I>%f!$ydF8b&?z2nsyXn!#(ymTC6fC*EMqT8p=3?Lznh)T0-Y;_ zp|BhcA^W0;^^?KVM*{l*J|KWOJOf+N5LLI>>S++VlyF%WVg_772#JgoK!;8>6mvr9 zFgkGEBn7x85+wnE?=(lZ$8LDKZL<*OlhW_oSZ5jBZ(GJ|q`+h^`e8PIL)K}cRA{h+ z2@Al1a3!S!N!CZvLo z139*x9KB^2ec9=nxW!u^ZUDC2sSMVk^XN2iV3xtTtr_Qk?R<)DCmK0|_0{e_ROs4B zx%u8@o=k!jTaT{{y%35UJlY?1i4XKp?w{0qBiZJAY8bL=WGE_K6|x}9fP)V#z#FX5 zNA^QPPprX%kwOhISX~4QZe+*CmT8hQHJPAjF)SgAuSo(YkidFb{A4JC8S8c;?QX32 zu4W@UNDT83!{Soh;u=B8gS;RiESTYzbps~Li*zFjIXM}3HDlemes>MSIG-xxh3C#rQd)hbn*g(87G2i>_J#sv3v-NrYGUWN_cT1 zm>Gp1iACs5gMyfan;GoWe_)q0oYa@$@g#5%39LrqY;A;5-GLi}wBT5`8I}qv7H&X+ z%W7Pv7%}Jit2C}{XWy$qAYhqmOXd-$?-R)x^Ua)%?;!_~036t@ z-N*r!xf>%{a}H4Z6z&cN%eE1$Ee5`6z)PK4^a-s*A;i9H51b6$CgiTvLbONr{BZ!j zm9su1ZP6wJ+ZX_(oeLoY-zGWhDw2q81}4)Ja%I4_IWEN78$QRCD|-MTXUInZ_9Naq z<{&04P%bzFV$`bGD{&%2aU*+7NZydfy?})K!^g!Z7MxtRtJ_!pmI~!g+O5!owSneT ztvQgPrK0#5Xcp(3G{?Wjp$_m#&%G>{+@6&KOzYvr!izg7H_P6-?FPQqwb^9AZyZ+qJhVAq38dGw}KTwmuXq5lx z>zMB}*igbdFbz8NA1r)%YF8&Tei|M&2Mc8(LMg~&TlObzfx|~OEBY$Fl$iB>-Gv%~ zgi}CCTlO1H!$U{lDp;PO*$Z-!xtXui?M*2VF0yhi>2df#$D=cqA1qWtpqmSU$#x4xFzqGu~{~~of{HJh$ z%mc`1Dh=d42#T z*iHbkp=Ab2S&=}<;Bj6O4Y9wG7ud;9m+nq?L){MDe2*`4)BO=3V`kgI7X7oZVU2zC$GiacsG*0of8jFIWE}kWb zSeHwVo@Oc<4f}I+dD-t$TUC2Jhvon zP@fJvK6=CCc~0OmE-yBxj?CLEY}hTGt0S=@g$7C%JDzUh9vAW|aLvUo*IiejqZb0# zW-rBhY^(MvydBSbVN~-t&~oNf7M=X9Yp>%QVbOSy5(OSDWt}V?(Y9gXnLZIZ zS2mt0sZ!=A%)LHi`Z`Do=qp4Zr)gH-mt=>k!0JL+j8VqkFY>-ZcI*hu+Fjl*1$0na zWn$DL`0!@!IuM%jvL&!f-_h6EuT#6|S<<$as*8c{u?*1l=E?x#VzXPR-2oog31NP> zaCcrNJSp?pi3S==vbr|2FTAp3o&S3N03Pxvyv1Xe(#4u+IsE)~DOd87dw6|O+r{jt z&GH)~>o}A4+rcn~2sV6?uSkI_O2QMT=MB`tBbj_Ko}iQxu9NJ(eZ=w-@k(^nIAWS( z()oI8Ck!b8hYIAkh+*n@kSu16AAtuESwN)p!vQHcW{zcY4HjYq-Tg)W8w_!P0`nJg zxyp#RwF-m~2A6U_3|%kgRSSr3OAF%6Pdz|>nJIH^aoOzS7H#*9{0#k%@K&N z0N$BxdzA*@AM#2&4L?6ai-a&pC(J+&2u$Jb)to7$K!O-{=~#Gh){VGWIVG~dk9xiM zzx=u~zZ%+|67QUV7j~XQlP~{81ThLXRkF7!aP@o@ZNSfmjUR7RVT|Bx{W?rP*k;xm29 z>c{uO017{32!qbz`7pu7DS!=@oab#=4k_%+7Pgicbb@_y-w)LOJ7ex=7j~vN|6kbr zXuyX<<=?ryB%xs#8D1yk5tkvrkIVxMrH5_s7C9jGC>v713(P`w<_OKIAVFEafn))s zk$0ZS`$ujupu#}$&ZK`!!k72GUf&?fuO^iOg>`E%Lq>L}n76YLylds^o}D*#Be{4n zz(}D6Yyf}$60M6^3Mgy3^6$_+|9x7)yp0M2R4nVmIzoZMN?vAbVM7MnGXjhq&3XvFv7g-+=xVwqi*ZY~Uz}VTXH2zRKbbstg{NdmuMxZWi zc<2Z(j(P{e}QV-xb0m&bY`o7S~yf zx83;HsAiL!(%~4nAPFpvERZwgmr@``G~o6MzrF(qT9YH)`{3|_7bp>SV2cBmQSe3{ zJvO@@lj`l_r=4m=JND_Kxs1L<<4hQ2+~K)ajRhEYmXfp~2{M zUKl;!Y&$G1CM@b=llrwLohXdmB8U#SUiKJA%t2xp0AVeYA?3@|alzK!5Mv}CgM=HW zz>LXf22Zoq$^3(JWe;(p&X>RdBDp>jFfm%7J z2f!^nC`^ogSXaQ&-yKo0BsP>WJw zk^k?%)P7YBMEMYtX9rz)aJjP)UX$~@sfa)q(PRaI)}zJc)Q;fZUok%|7RM`WWv8s) zPbmO6|BI>2cS%s0l!3KG#jM=%eg^By)14k75i#BAE^69pa%}y5n zr#?fVI>8s0*^HZG(%-Q1z&*#y$p$*wX3h$R?Is9Yb6??7o+fWubD{U9s~2beRLIL9tu`d`^Y2Pp(5%{ zHrl+_BMc3qm+kEE{ueL~qcHBPDUR%up|x)S*eNR4Pe00#3S6g0Y+TpTh^m}9*${P! zZ3BZ(ZWnmOu{Q}ajN5?gC}WJMf6l1+>laFyXu1#ZN|Knf>kzTsE1)zf2!dfr=A9Zr z2a9XXYk_Ce#K%qV0^^$Usy%?a(}801O?iENDgeM>fzo2P#RH%b@UE+Eg6Xir8ecaQ zOoSA8m|+dXB(wCZ8J%6$Q!9lA3T|D`%qB zeK1>t1{ZNPwa7kvQf-;*=tc+c>_}RR=2rkVnOG)?&$V!P^$NL{CE%(IzOH(ObWf6G zslXTrzWjwYsdG)UF2%(wyD_KaL0^MgdUDbqMvfVilEH+N z3+J?Tx_9?wz{5L7A@N=7mjk)kvk!SnQO;2~y&e171pL5Ovi=yX`Od^*k2t; zEszVbT0eQFLpFdL9Vvvy?TY}y0kIt1fo04$*Da`g9j};zhw9-rPCJmS8))+IuEFlH zv+wPW2wbEUkc(8p@S!Vv{hn*lHC0Qad5Zc&@~LdRei#2pUX5A?st~0mI!rx35WJWn z+Thxl4bI=d0mi+}Fg&)(gEcqcPZ*yLjDWvXO*m%UP~yKB)2N0myS&ETSt~_` zRkU8q-}F(ZWo_EUfur-T@vX_sR!o@ZR}m@gjW$MN-DC!$QLS8@j~vq%jx^`80D^m z)_}(rH+#ZT+Yq{6f0jIjE(`kU0@Due`#28pVPj4F`4@uEr%**Rld_>NLKpe}37 z-tVcC``g)fizs&JjPut4mmPdPZ1;#W6pyyY5`iWh+5q;(DF;t;&JQg43kl5mot;>G z-6-l29;alHGN9pqad@Y=RYkH_Opj2$@N{>dCL{D;Q0S>Swf^|2P|6W!xC~TG{KYtX z2nWam(;&#(>p6k@nCEZKZXw-?)}#Xw=*hh-#t%%o+(|^|lJqFt=A(<1c`BR;=Jg;{;^A&Glg4|Y++CC|n@!APY(kRd0xrFwTq7)6iOLpbkeeM&Ayh%jJI%2h`!?_$ zg5PX>v@m4+m8E}Z^ff#Dcc7UBo{PT1%mm>Qr$UX;@_5?C8l?ISC==y_9|eO1T&o?w zp_)d03codW;f&1B=_TQBM6S8y4O(1ANMek4%Cq3UZ7_zhvHJR?dh%(b9f8|flrV<3 z`6U86c_KIBiw9UES_-uqXTe_}DW0VbXre^;Xiq1?tW&AT!3ZSpMh0uPu{mvPuc=`; zv`@;_Jlnk8gu%^&8J8q%MDa;@=X77jnLt5)^XnsFk^#$Z7Fdn;Mm?S3{L#O-%CPB% z`ojPzL35QcK`Db|V&9t_GiS?Z;Gu=f-(h94M@9jkt%t;nv*<$sn)F6LUNA?CKT=rn z7h(?F#lp?VVwTxK9rw0Q(D{z0vQVi|-7&fqBP^~wKg^vqf1D9YuW#d}rG3Q|Tg^47* zY9Ggt&g^A*_V~HvltcmG!LA`_exe<{M`x&wF@(5!tU2~&V#1Mat+S~1yv07czTOwZ z^XnoQu-vb9vy-QS!sq@c^2fDH0h8FHXuWB6%@wjXH+7iiGyPio8WIjIn=_^qj2LR2 z%Chv*uzc7b^%a0a`v`A2*Z+Vte%=jS-mN;z`SAk0rI@vC6IWf1gj#T>%J53wWN(I}Y0tguds!MJHk$r&;gIX%7O$tl zlBErtn`bZSr*X`ZfUWq4MzfT2r|$i*`>B*bY$J3F-!;E zlc0LX>D5 zK}_=Ia0IUD2vs>)Oo|OT8~aR<;$mvW25&>V{iNZV|Du2>7Ai1!FaYtStVL$c^7c5* zvGMe`a=!YIHLty0=ZcFx*Hlob|1d^%wHiD8GQxoKBCKb}{PM%M&$h#1J$-`Dfa0WA z&c*48VtDwlEBphd$a4g|-BtCV82M)j8O+kgSDj9|e@bEDa&3RM-`yGk_;c^sE0wOM ztC*hqh+~@u_YfLcWVTis02Tv)7)dbYmuQF)&0>Tn%S46aN!f%j&+0eIGaQBzrQ*0{ zuecN%B62`kU+%(6>6ej=??c0JjD5sdmNEdQQDhI)0x6cW6e}i6QP`*^WbLK1usjeX z4}^*BgRZfxMN~*W)y7k-(kw;-Vob2-e&chnHFlIoBfa-AMBfq7%=t+w-nR^Lu&Nj6PlOI@Bwk|I_wO2hd$V^Q zKg~8bcA`0l>);wqTXBjaSN&>N($IZKEXDEN?7j+Wx<`NdZZQnn=j=N#-xFgtt+RDi z5I)NaKd7u&O9k{n$1!@x^Em#g)!TYYxa3`LzJk*|Icm);OHUTjqUaLeQHg~D9~46; z#s2h%u74&R8T+>OxM(Oyzb$_A8sserIQ z$vY2LM%4@cTUx_Xiv?N7GBgTkTFW4e3V`utn=~g}xd=8R0pJWyxj!$R$-D4uhM)qD zde?7E=PIqfR~`gsGqQF9fElUpvMwM$lB;D>?|BfYc4g@~G*}p6Xvrh47?nRgL$oh> zhU~1m!m#>xiYBpIOR6&sqqR3rbF^p05hVC2SD&j?!Ks(APk~WbmBi#lsC_%QuuYV>A1o7xr{{$cSNCNCs z0CT#ZYVkwY>CEY7-!{#hQ*9fKzfwX zLje83`(2?50`M zBR?yKNx_NcR*uRT$Yy{;NTOOE^mIgVNoy-`JWFf!WmAZb`)9|UbbT2gtYlgDib#>P;O>FFt5iYdWVhhY9-k@!w9U@xno$aop&k77^PhH zz^LqvZ?NfHzX{UGa(wKb z0|*cFt97m#b>4Szycf;yBmWsNnFE_ga!U^)Yre|ACxO9V2iB+9dKuKk;E^p`2E9&? zC+YV+t9og2z@+}sH=mV$$n(bDZjL>Jy-DP#_GbW5T!8hff|Qq>GEIO*d56DRvwlI! zY@WJqkYP*$v}4(d#sm5>vSj-`*KZA7%8w8{FLhNs4}0A+nkKX{F6%QYTg{9IVQ_#A z2A(kUKZ?#gDyjVaq^Pt@P`L1ZXolOJ&*M2$Q7WZz} z4&P6pvgpe!rIkBueYdRy@k@4lxUvo6Zr-mI`p%^j*k+3l4(FR|%iEOMCwTqe$c zrG6q~-P?&CPa**=os(8^6MUV)+#+&j)yi!Daw`a0}h&!^RxC?%2-G&jCE`}6+QI8+;sxxNy z52>ECgd~aUXtdii|Nephxx_2`|Nil}`j77TLBnH;C6&VVVz(-rxnK7Ir=b;ri6aBC zcBZ|le@l?Kk2fRQB9TsIl)mT5=cWe@S5vcj)?m1zEdsad>=hb@<_!+%vOhDqxv*S8b2x=>Xha&16X{Wg(Gi;aWy>>x0tp!cWH{0?lt# zJUOKK*~aHCv^BT6rpPLQQ~~nrN@`>f1ny1&04JS=e2b%t82M@cK-ZB=zz-Yi+KA`U zF<5g#WwG_j%B`)n_MNg9YNXB)S7c3WzD!OUpC&@pYhcnpTU$F{h+t{LdMo?ho?+LX zzWpj7?_x>lYrwng(`)PUvU%`QgsD8#`FiTR*XDzr$G=n$>i8^*qWSSzHkO|b@voqh zI1=%)-}`n0Q}++u7YsJN>^6wYr5|%2{haDp(`rM_s)?BCE+fV9imjrtM{>5eEp)=2 zDY5yyc22Z|TN-yEdBh1HqY;|h!l$LX?>&+keH*@-oOjInZ;GKU{-|dQ;Rbke-?#Yk z!1o&0-U_Y6qRoNXr#Kn>qsXu7Pkr0yFR6?%v*&dS_kd? z-vjQWtm@-vw+b=3GbODv`g!g$i1jqo01=iCLN(F(KLdhW?gk9aG|zl?7yOqwdFPMe zcWJ%j+YMSCKF$crnHc>Mh}|ytcaVB{$Bp`}2#==drVQ*J@M#oJhV{K9m1iVK{&#&x zzfq0qty)cWoB~8-`t=}jkKyXrOHf)V+InaFp~19bt-bAfrQx2H{KtDUgkz64i~rnv&V5Z=B{h2I9$0>Gn8(^vA5(%h?g^zH<^nr^DY}BQq7?o zWnwK${)k)G;IMsmk8ad*-S+o^*oNVB(v{v*Kmr?E>-Et*5woS~{ip#uIb=0~9`v1` z4R1+(iRn}i>D#*NLu-1@x^k#`|ApTzH3EX2PY>VUGGpGiS@fqx8w1I_M9+761(HWU zMep1n&=%AIv!Np%I%ruy50Tr0|2kf=Bc=J8dApe0DsO_{+B*8j`fXABz{z(>%RZJ~ zlBn+4j;Qw>YEu8l{GZC$_hL8M-AC!9#EdcSrHlYlOsB;+QSmY=&52Ratlv~r@n=%2 znXswTLK{2c3IIS`*{&^pw!uJbggm+q%{Aa4-5lkJ)SkX$yH>C_FGWlK`#722J*PB! zuF3=2T4-mes4#>aJ}h4(&4=PMb864jKI?H_Xhxasl~Aw7J{i59`-#4U=l#@jDfh!8+ zAY-9&=CJoCwA)@-!WYBh0KXmPs4MrZZW}rt;knltA#5swT*sn?XME~4UP}rU<(eE( zUY1#HFEkDyhlBSDcPc1DDvl=8*EAV;uU&O~J3m|jAN9RZofmj=-@agwG$Rn@yqE&Z zo6%_qhCxs0tkqqmdqX9`v3Mo&en%JmFGD(Bp0{CN$p^#tc-swQ+N}wV>hITlDa$Td z``%>btX@<1ssy@IY!K766|CFKvAKO^^j%Ero_T%Qqq~H>A*$nJ4Bg_7??ra` zz^n8t1zU{1-rTiCL{{y}a=0oqW%!$yJ~Dx$CUfENGPcc^rQoaK1N9r`aa-2k3Zs~$ zf@agb-HxN?z*QmWCKcfwU#08|j)?rOH_&~LXR!K=ZTR#!ui9KX?JqcCd(s}2ql zXLRdiWx%&?Xn5SMxYx$tE+N@Xy&yS7jNxab2B=}iy|W9FY0a@wZ8^wETK*1)TPuKA zO#`|M6Qh@mzyPmA%(mQelM(1OtzLR5=+TG1uw_H5e|B1j`Q;3juiSp|bY0*V0P7*o3}5>0g4E_GgmYc{n;b)#M)2Rr+vr90QE9*-4It__!vPw(Hp?!K6x~OGCvQ&kGKo4MPJ8MB3AFU^4fl8GL5pt=Grqh_D0WGarQfBGtJ4Fmi}Gz!I1j%`JU+MVrOGK-0G1&z=0HSC z0kVfq+pDn55)f-8O{pSU`Mh2-%S3IhVMDO=+UT@80e;+^T!0{dE-c6@LW3pf53is3 zE$;JM1oLI%Z(jRN1Us&6VZwQ{BnH`2JZSUbbl?jQh#NCKVx}Y4 zT4@H76((i$;G8p{ zQVR5w%0tSbDR42rgvO0nzq?+*4xo!&?Pc zd(nSY7JV)dHUwc#DJWEN@pOC9?0T~1o>y%YhMb9)&SQOUPP|DY8mF*I?EAmkJHZ6# z6#@P{5gE*}&e#!aBe%$6>)crUrzk+W!~~oK2o4?LL?`h1GzzXhoIwHT@G1dVpfE@Z z%Se||=n!oIn9!T~mkS}<0GGIm*6$XTs~4R(PB#6IL-Oho=sjIMMf)n;TG6 zerxHp`+tv8irvEJZFlj~ywj*R?(HlhZ7~Hb*^$-|J~lc%(-g9Nt|DiGGH8=>c? z33o#9qUMh)tc%d`*j);8Bin?_hbJ>PY?jl$0=V?%Jqe2KIvf3q7SJzKNR2Av=OS%G zkm`FT9tN2Vv+dJG2Hs~{suV`wMBDZ;0-y5@bHDus~^M>bz=v0vfb<_-|GRRaIC4&Yttn8`?o0Zob&zQQnNm$#f=o)nSkfp)!su!QN zO$Ye|bx#fqAA$*oQ)1@{<81BQ7j?vPv$mHugOD*r4)>6oMSJv@h!836@D9kLjJvw0 z6y{AQ9^xYo(S7zY zFZ`gDbu?C3+#}_@~AReU?tYJ zyM%$L>mceg1P));+AG6$saUxREs~OCZRNPt;#}kQ1K3}Q1t7lM8&6s^<*}DR?s(CX&K|jC%24NKIJ7!eXU+VMU%v^J_u6-j% zyE`n>1F3QokD(nKIaygBIOS0`DazGYB-lPhm0PL^=91y&nPTMmAHQvuMixL(w30FJskO6%}9*VX|J|Rk|`=buF#aU z{(=kea*%eA4zB}2Kt%Q>z&ikt$cL@S%}rl|GpeL>fE1j^1PdMyudhM96sT@)v>EGD zY6uMi>Y~*9=eio=?@R+6)l^2_yJ|m7Ms&>|Kr#M^6BYhhofyWZU_mZbiO*>zRzbx| zz;2p;j)&gYb*qTVu3x7x2%o3?6k)H+4b);8@N?df+oq)kX`fZvD>AIFO4A&J9g>Me zil|*mx>^COXxykQiaQlZRTxb&$YuA;y6BDnf$+!W7D*~Ip{Uj|WX&TaJeNYF(ku9Y zW{spayv+Y0v0m)5_K-N4Zso41s7j^pMU9hI_uwU!-Y$V*2iw4=8Q9Bxl>$#=HERDpy z{m^>IAVZ|HIO3m2#~cz6Z2*hKB5)3%={y1&8B|Y5x9elFeNbh~wtIYshT31K72oS( zvbb^heW*N3b;6=~W}(gSU#R;dFy=JgdMw!~%6z@jBbJ?*4Ev>XYkZ@*9|A}FSI^o3 z&^RpvZBzs?M5C-8+|6dJ@X366p1PUv&5LGkPkv}SsLi_AVfAI4O-WXnJ(q395=t`} z_@#Qo@F7M(D$REpSW%?d3dqpwQwKZ%;|At`uf4LIZ}Rh6L`sA5d9u(b#;alId3TIJ zWWbfvIzXDIiki=8`nGOECMXSMecZ32Fy#gdF|(%h7hDFxdJnc-V4_LO{sd9no}pM> z?OYK49H53NfXQZTxh3Ti-E8&;6$?@IfbJkAc(I>pw@Op0jlS{`vF21Pf15hRHkI?n zz5GPWz08y20Vg{)jc-}JZ<@y}4g`8dUIk)U(tB_LJ`&Av? zVQS~8N#NG2*S319u3g;rVwb>JYC+UdnM#|@xe96+NSP#|toaB$fK8U8d2CGZfnUwf z8vt^gCx9B1UFn%O>wx6vaO6gooIoc6B0Z@n%0>nJq=M>$CO|daWI@Jo*Yfoc$Gfj2N!M>k{?}pw%gyNA>}usV94%bDTM!s{@{#s4_c-dSM@Eqq*VeLd)vq_^ zDV}y)f5Ae}R>sWue9xMBvr&b?R)*8kcgmmjr~O%XR{eFy%@7Dz7@Y?nRu#LiFuv@U z`<1)dgp2US3R;oK004+EerXY6+`;7Dng+^f*^u()cFo@AIfGg*Fdm;bm}3!Y*^Zb_ zf)J!79Y(-Jl=CX$!Owd3ugxR>(i(?wgK{hNMY`sp!7;`=Jx9=ncXg=HBYq}sVv0uO zBbX{+@>@X0=9uB_q@)t$c^TjbfF6+X$bo=c<0t)KHPd+~Uu`|OVavh44cAib$LS^e z&ii~o{le_(aqd7-mhx_z1t+jqZRG!c!Y}0p#z(e)?>H4U;xJ`e6E;*S`1}HPYTf)) z)L&*|Ho+81aNy@3XOkOz@tQcM=LPE(!PMW7F6XOu;QKqj`r!Y3nz8daW=?CPn>R5S z{QX7&dDbpZ4I&%-KLF+sGh_(+c=qp71IU-nt2bP2H{r7B{LlE|BA3=NP1OCJVcz`x zyl6shV@l1s&{MwnA72&Ya7vG3ulloRUt0TUb?Bu`m$=}P``jwuxSd{qTURi*y^KA? zl70At6b<7xd287}7>VdesMq_fvUBh;#?t4Os^Lz4c|0wx5WASCL;C@Sh0EBa7&-KO z-jF;V78BVT*`7eY&rBIQThOjYr$0D*la1sNnRd0d)5LjYJHJF}6WI~HbF-D~!P)vg z*u-Z8>$2_l&IU*1_DXKT`Teh|4hEEnd2U_7Yzk0X*u|uz+zggX9-u}aZE&kFeX`~B z(HkrOiT>QJ^cVc3ubg~E7}+tW%!;6Xs|Z>27r>JKJ#ll(s-@1V|3Y24sO9e?leY8! z<(2yHT?wf0N38@LL(Vk6AgIx5Ky}AajSx@Twz9W9*Z;{f2;Sbmk~8HvcwcGmIJBU| zIVUW09@tEUMOOxUCy(kn`UoMmo%QO>BbwIbwRFK=JGwWP3E}+XFbP zv40Xy6#QdrcaGPKjXP79Q{r&G${c5(j4Z|4Hb$tL_X<|nfArt3|I}zV<@I(Wpxz5N zI{Y)k<@qJb>$e1T7N!60r0eq;yS<01GM%+;(oQ+UnQ|aSxQ9AkUNE2bjL8S<14$o?aw@J0 zd1DQmkXE(?SA+i7@FXP+V|BY)Ka6=#_2PE~Ys{+tq~P}}PW{3D`|EyzsQ|UwrKK zj+F4fMzz@y&zo6$e{WO<>L-?^u=hOp8Gz54@y>1b|B%pzGea@A>cW5GUnu-h2_-hH{Z_FPWud+k0bWuCm_y>@ zCzb#c(-iV8(mA4eCDOG@vh9 z6u!4h{$OXIzDZQr^ikZsR$*A5BrGVr;&=(tf&OA>AuPjduDN`#w+lAjosDK^D2-w( zn=DthqI-+W{eipZ-U#JJ)cP?7e~+wm&OB*^4%#}y%A>zJ}zUe;TnKL<*sI#c`u<_U@+og zfMr%Squ1g}2f(;Y(}TK@<*3s8TyB7iUmu!tNLh77W@URx5w`Od$6y+N!eN|Mwv{R; z{bY{(1(V~p(E|uqj+?>D=OtSa^rY=y+gv?aFbw7;sc%k#~ zmU##y9dz?$iq2VX;$=q$X*fgrY8_*E20+cX{YM`uv zBoWT=^9%A-8N({~viX+TR>}}lA4nJA+=5=y&#T@#GsjEC&sr$exi_8Pv&*&&i(A=8 zZl-SCQ<9R;2fQXk7UtPtEUUDZvM^e`mKOEC%|3}j4P13SY|7DR-3c(UJL~5!7aR== z$-OeE$97uSNQ16NUR*6VMfc9M_m22sRqzbDlu zkCe69gyo)J>#7ocIH*=prm2bpwyS7fm0!T;`;6Se593ycDTZ?%?W)bmaEl#PYN>mb zB%%!cWr0yqyeFQKpnwump$6&{;1bMkbbMR@n||Js;fWN?vgh2oZSc1FQXH=PMJ!Qk zB=3kw18-E4mE4=9$%4dG;#SH;?wD1qJ8HL7*07Rq?c^l-({K;lbon9DaTmKcRMkSc zC%kN!vJ!gW-o^vH0*MZ#G7n^aM|<-MBsG5<&$)c?*>@>COZIn@@2@M~9TP}<1b?o0 zgUub0VmdWG`!G zC-%la-refJ*CkDV@nR;^(6a~Hp5!mfho27LSW|N(X_JT=Gy*SBaNhk5a72VZd1~A( z6?jplGav_khm7LBSR1w(30ONEl;&gwn6_titPANq(v2OVcb1Q`A>t#Yc*i>MIRM-j zaRT!ok`RcaZ#G`gxj{tK{*qg(q?H;R%^S^X?h6)Xla+nO73;tQ5Khz!-zo%#guqpK z;$=Ddl1A3y!9@@b#ll~bp)V6LH&mKXndYt5s0@8kg%~2b4go;wGVTTdA7r8b015|L zaNvIhw^g8<92_J9S4oUjzru|5|I?k{tM{(m zY8}Jvsg>^JD21iNX`j-TI{H%PQEQ6dYt}ISBzI(*EEctW;oE zX|SUULOJn(ixAS`5~V!Pu2K}xUxgR~bUwBv4l+?|JFx+|w*Jd@S{U7gZ2OA0ku~}T zC)l3n02*G39$WH_k)kIdR6kJJ4`BL*00)WbnW+qjiQX>iF!6mKa?gK<*YIAbPk&y0aCce#PuKu7Fc-q4&<(mL;ReEhY~ z{Ar3{Ti(gDLfVvW;;{p*PlI zmH(BO>gw5M!z<95rbef&kzF`nw-MVG+K@tstOA;I9ej|oj+N_K8 z5_71%obaHoEqCu?{p)an7PdF*>Q8-k_+3u(U#1Y*U@#~sV|nLi+t;Uf2*Cqwm22|T z3?_xR15DHq9XH5FD_QtSDL!TfGt6q*&C>Ebfa_*SP!O(1rLUCX`gyn*7CwoX_5B6n z01wv>;Sz&z{Y>0CsNk>=`OkV>nXHt1aPt{PYf?AGoQl|Se|ZgrJMHTo?=srD)(@fh-YT9>R`IGZ&c~s zlgQ8f&MVY2Jd7+@Pts>y`Ke9A&4Vx7txLh%<8Uyp*BvW+UnX{)3)XkX1z#WA{+7~J z^CyJ@TaGYaH^lA~sC$Ko7{7}h_`8DGT>HB)xhgwbgY5lHscs+mVokY}LjdtaBd;A- zWZTx;mAB>;tY$Qg09T0{Oup=%fHbSV$1fI$Dc1Sd32WUA_10yJcIS|S0?HFUTf_fF z_48?mwz^eOj%rZFs~84B^Y-0K+Yh+W4#3^6>)OT~H?k7+{_^Uu29!iugYT~cKT=mGt+GG) z!LF(n>hBLQZCS$sGhuXlEiQIvB>j@I=iM5^-?}<#BKr+Pz2E)Xer6dha4{VElFbo_ zr{)P7>UH0zfj9;CKs7c=%smG+pUw69WPsac9|a7n*G;+L^#SV>a*)YGPA#Ezin(iE z93|dA!4R|&co?6CB=Xn#p7=|>LiqR+xtFgqBnN!n!LJa3NjX4WLOo(huE^nQh?KXh zHT^mR>^`1lE_qD|+Y@itCdb+N;)(AFP6sd>gxHNd_(9%4KM!-mdrw0PfBdtof>KaCeCx77qpN#n>-SMOI)fB6 zlH?l_o_Pp+WyVk~L^?+U77&^N0fTZpz#{PU5y!k{5ECdFFk=>7R$bS5#mS6!%s-G@~A_Tb|8-j8VZ~**%+4%P#Kxybi ze&a-zN3W}eeqhMN-f8%LA`lYUmPOGgn@orrCvNqz&9(9HYgWjAQD=C@9zoz=>#&_m z)d$iK2_70(ERtQ;Xtq#{MAvlUCv>S#TFW%H%@{?bpfVipy^D0{{k)x{@~4)}6y|sQ z+HueIOl`$h&jybAWCvgI>-VFjm-YrntzIMaei_K#DK?7L2V#hbD*(PvSaC@TZn4lZ zBEqa7q(X(Kz`!y9zk!G_;NjnnQN7#^!XA%IA@MQvxiJ-PJqx#a5AG#hE1#}qB?W2x z%L7ZW80r3+=((droEN$|F3Ulvs61bZSP#WyCPZrRiaL2LjS*7laF_7kcu>e}52T&- z@NR*F{`pUL6E%+=^;B#;>#AE%-g)=RPH!L9u2Bg0coJynbm;8Gf-~rT0DqpnMl^pZ zRm+hAaA))ZQg0fE2pp24IncJB%#I!zw*wjnS=bzeVV^1h?8Q22|8YKR&tLys*Y#0H zwYx+OIz$~a*qI)Z{~P`x)!|_b&pn%?*V#e3Ja1GQ;a=6;LzQ)vYvV2Xn~6;1FOFKTSU6J^o+)GO<%1iD zs4FvQDB|%Ei);Gnb`%JvmZQNL(1foYEN!cZH;RFPC;&)cf}!o>e;Lf)`u&Lr|5X0p zU6YS*cAk0~q+6fur2qZ_&DdmiHy?;b!V^7F>zUiM44sbhapyIBOcwmvl8(F7apnyD zB1@Ywe!xw&@QsCAJ)`|VYW8NQTbGKkc%|utR9l181XKtcIr8O<8hM!o-)VW2x(55b zY)ww8=l0YG{dSI1OXQx$>*Jpu9QpUMY2RMSjKVcaFS}~v=ECqNALquFP+de|kp-K* z2pG||?80#`<>)(7yf=g$6M{?F-bSs_HK(Xyc9ecOVsZwZupTx6;cqZsJ-zNR%>xp8 zU;U)dZBW6_NPoHbyb|D?Ng^zy6 z*H+#;GCfbY9*94|f*k~aQ5Jq!h8tpPrMqekreZ@lYR3Q0;;edsgQ}_o0CRu`yT!Nu z#`J1qsGOhSUix$oTvc7$Wf&Lg{l|xEuV*j6wqr9C`}$=@Vz0IZ%VlIDzOxIvn}vIH z9)*L@p3+B|QV_}7F)hcyda)a35Dz?7d+w#4oC-|(-@Y|ZekZVSw}gLvchZXFBVz#$ zp%oug_}#RBXG|9#d^F;b22AjP+q}&O`2d=~=Sql|0Ki-(rVPusmwrFe)B9xV8E$OD zTi4cbD(Q2O%WSClKcVRa@!vZ!x)Xoh1O|oH)iXNwRp_HU^2Kc0lnjpsFdAN~h=_S4 z1ny>k?bF35m^!zGcpxGxutqf2M)!H6RlkcUSCtrnyIdy z_;X!Ch@DQ? z0=5p|UkT}P-RNcCA9d*()?vUDLoen8CyW!eti+|)3&Ib))b8ui>tRly^m|+)W7(v; zvpr&be>eAC9+>u=SD$JO1lc{X16{Wfqd(zTGd`?H6}Y zOQxG(t!Ov2>Rf248N6L$TNW|MEx@MAMf7^w%6#QIxbKpvF_akxiU@uS#QH56w_3ST z*WK>wB-${}=-@T7E=U#E(P`VVNGMHw33cmMR$uh{ ztq3*z(2%SyW&9~6<8yV*uDSl1(rthePF>*9!g7(&ImBZ3Hs6Q-KWhNj> zVNzcmPgbdKN8C@d%;>w+8vp%a+pj;2{&dsK`zI}cg2KxXwa=RWdCPuOpVU!vqWu!B zHs?~i)9M$YiBjagaab)n>vw9(+1v1^qu2{vVmv`uj<_7q@z;{vPTP0PZs^i#J*SfV z3a|MTOpIdPKC2CzBbs;c-LQ&bZI8w6>sw4`O6(5N5&rj|81b61-*_@B0U&qCQfHUK z!a!j6TFeRT#A|!S^9%Vh3b0$?6_;;8A+*pim z#0o}RG-w|9-jEaf<)E2#J1NEoA7&#gdB|M?gPyc(ni)hk*Q7bD`}JN7&xQ(SecV_c z5!M>LOx1S{&M(zs%u&W_u09ajWY!Cu;@n8z09|yP-f%nnc)*=rr+>!Yb3esRL~3TT0i_L1m83^tLEV1-)MDV(`Vq}`*^`W6o6v27Uj@!N{nMzQWzuQ0pd z<`VyS-l|$OM&`a*+pfoJhc3dMKuB`%M|Y&80M92yW2Ei*y?jhNZf;L(^F> zc6Boz|7sh8k->3-5v+MKYh!b+))&yAA153pT!2O6=q+fb%EO}%rj@GujmI1 z3W~xWm~}Fr{AcsdEoy03Q71FtX6`y?x4{?nSBT26-@4A%XaES$HBo)klYC_|0H2g1 z-|yd!PX5tPKrewn@)9a$Zn`f1z5R)n{xEzJ3yTvLkmf}AR2GZqxs<1JSZ=}w7fAfR z^?7O!ge$11tVD~TG^2%@m_yp@Bz*}F3d$bOebrx`*=Oh%|Kwr}1|*)&My1!$s-qfD zz&O3~bI(J>3Cz6VFY`L}J#L#Pj;y<_zWwaAGhABZ_q~5(Ji`RFi{(ALz0l{j1iAXb z&^TUWxfujl=N;Ike)ytaBEP_G`8=_naVz2_f1T-}Rn6a9M$hzJI~}Po*FWl8)3)l? z&Z}XL(H8ri(vuHML-_NAH0eB$zs&BHY%bJZZa%CLMRha=7~--5*3`*iRzX;-!^=_I zBSDw8%$FoQZ83`0NFC|yg3DL=hHo(ArYp?qnl@N}MkYP&*JKl=$k#OM zWNXu8Yw+p1V&}MKr2Whb%I@D&5B;+4-nqBCueZ+VblVb5u=&mU{T+Xa;fDfDf^7b0 zua)PT5dqVBCHvD$e(jkvUlcpa(OWg~tB$#5*pV@v3i5(nzIP4myhr{p>={gs1tmv^ zYbYue3`>E~{`||U&F;U6!3sLeN`nR#lcxV?dQb0sepbV3_c7Zay}wxqFBs6GO6~H6 zyQl4*s$53@5kzhsU3EIdaa*}|wJm_r6Y`CtG{w0*8)DWescp=FbLlFq-4H}2K6A^p zj!VLG3Qy|qEq72?SNh@?t7dwa+E4vGJhi6h)vNVi9<9505BL9&Rn!t}b1!nog7#Ss zGCoccA-@2pqI2tD0u``!0$wllX=t!pC^k6?T+_Q{wof6e!t@>#Q~?(3MRDE5&lIIE-(ys=3#(g%u=535Ng!E1QzEDYp}nnL~d3|ShA8h zS^k;Mg7{^0DhuM~60Mt8uYOlzt-p%!xjfj`v4>4Ml!s?{LWYpYQbSwHkQm8OiS&Zq znoWmizGbc$U_x6K;Dg(X&)lL$-gTJElszjs_A1Zl;ZT1Bra6j*%#XU)Cd&f&7#O{j_DIfO-*=?QwRtI5O{4o&c%8 z-3%+0-CxKLUxNEXM7KKI$WUK*adG*lt_UI}xm7~WRhZ3)aLf6a3D77|61OZe)`at! z5UUeTEkoetFrOkMqxX_UnDs87ZUdP_((K|?he-77POL*EEqJ7`+SKs%a8HOMKY#9f z3C7THDxvJE?ocg;5hE)&3PA~UQNXg;NPf$C=9ba2*g_^TRDUnbUXmz?&^X6$4(2!a zxc|O4$tXp80s|KaCGT(mN&}$GJ=Vz6bEKnzIs|J;gwuC=TX+6=>G{?^x@#q}F5pyv zRMK?P3-6ge#c9i77BB^-8T#G}qzxevo}ke% zWH$tG=5B7}Ns?x6YMjNkD#(@!8OuSu6z&666$HA#UU($YQ3O01-t?dv$s9#77eEN@Zij4#hDMS4X+-#&1yBHxvU3+Q0V^? z(2#nv%C$Snzbuu1l*zg$bWA<{@pZr^->dj;SQ;ku`&n_5y@ui+Ay{u)+e#-rYkW&@ z0%jx$L{tJjFM$q6LBz~ZeDng`-Sd<$fQV}3GIgnUq@g-vC~_5#+#LUP^j+}>VXUEb4Zq{+-p z?>YdH>n9(9FYVPeFMzSU?#M(OK(r`iiLiEP}?rXSkmX;6VF$G6euwzk@Q6kjs zIkm%1|Gxf6u3bwug?aqBx$*LdwpEkbh@>|Xz6&=1oO}DR`E7I)eGz5CY3vDwCZgx)-S<1nw;=4 z2t!Ah^yXP`#apckw#-PnUm*oT7(he`7GUlA1<{+4*pgX`Ixr*-(w!Lm;%&x|YDqt# zt?O`#>@(OmaZb$HLhwcpbdL@a^72!4P|!DhBX`%??`8q`WyF>uNyLO?f_t}y+E5eS9GoRnWK<6_Ar~29H@_f2rXx9kTx)|k z`3k;z2$eb{NhD4W0LT4@&dgy*86klIWivLmHI4!O5eHn&Dv`lulRJixsVZ2i5Ov+E z_H7Ei+RYu&aK#Y=HGBcT4Me2PSenI|_+$i`%}~lp+}`tu=v z(c`qa?$?L7XJwqjz#TllAeE0w$`x&riw`UpYKW_mWNO4dG-3!M*TGGMUDmh&yh*YB zuQMllYu&spY{2|b8+85PEoTk8eW<`ib;mgucDNIn5~qyd#jbctd{P`$Q9})mfYTFc=5S9uI~WI>}Uv`M1*Dor^ssI%Y1gCo96vgu$BHGcELeSDpLy3}{aGI})& z+MED#FfiXqQ)@utQda*ZaV0+q`L7}UAv148JHr8^SoHJ zGxG9D=b&SdcW0lj4&q>}mS8ysccJ>2y*N@|_-}6G3P^rsk zyXE;~7xSFus3u=P9ITN63(}a{J0cP@u=u%7L)5;+$yhhfUR6H?2|Imii75{=osU%T{rGogc>|K3@erFAsM@r$dD zVzwQf0NOAp+a-z5!MWp1WLod(GaJNPeTuEU79-;&{fWtL%!2nV@a@OzM>|vCV3L?Zp9jom3%ss|V>NN)&I}X~cB5`Us+wog7 zj#c%x#;Q9r4DHGUObKBtWMEQ|wAB8u$9b}2=`BW+{}dMg(#?OzjmQ(o#4y?79PCfm z!LM#tewz-Bn%T>H5C7Ljul$qU-Ra0kA7RW=o*5M~n}gPB$f~Nm$|o>^7nH$#rRUUb z_4&TlFfunzYa#`Lu~0ffk;4R_(+k|^rAEodhPoxd68eJ&eB7ioii*03fvvi$WdXxs zJ%LTcmI#bEl&2BSas)OxQOJ!1J}MOxZ%aq#$dOU)NWu^@U9;88fu+`o5S<`Go=5jQ zc|Nz}wfOj&87lh|_FgXDc~EB=gI(ovGOkQt!}N}(nxDPP8)Q}ct#j1+LyS;Y^M=^k zhZD{PB?UetmfVj^=HBR+Qzh;e+1lrkiM?>aqsH-mw|mD1Ui}|M=i<;}|G)A3-nnhH zwRY;fbzJ9l6q0QnRFb8GRI+sv!b*~ad+U5arBcMR4wMR&5Kq|FQH3JJ*TYK4c?j|J z)NjAPVV`~O_vdOw}rF_YuKeBKr|aCB4>Ih&0< zP+DD%6l+2?sC4aQB(5OGp(B=a*Cgr;_^KyIN( zZmV#c!b%2{j+bpI@okDWT^eS5`qEYvUD8Q(kCQs-KbSrjc&keKe1c7yDb~E4a{8vO z_~kQas2eP%w29k{RD!c=P;Yn?c37eE4Tpf;){$))jsU8Jay+ymjL$q)Zo0NS9yuy- z2=9bxtYm-Qz<`6Xxp%gS70v9#8=70rs56HpmGc~V;~ zxZ3q4J}s|&7-$pHoa)4+ecX5^!sEE8ZoIWvC)IQznBg;Z?62D8$hr5FygQXAdnw6gW^x%Ca{VIx)S$ffAJMF;Oz>bYKw zksmeu`+3_AqpY5#I}cmeYsL;QTnO+HJ~|(K{;G#x<*->>D8a96#o5h&&WANNHm&#} zz|En@LlOwL|Eo}ZB?S2o25qnW^#{2o!Pq><=J0=NUVzj%{l6pAr(+g0m^oH}brLEx zT8L&?XL*On9NBbfu8*BvAD`z@vW&!SSMmLL1R}!FHVVoh7MY!lf5Gt}hZ6T%rugw4 z+5uCXjsH;nC>cP&Ft+8d&CW>L#!`zxv_bp5)qu;{iq(F(Q^mv!5o3L*Jwyp)XG@pk zfVm09TKb|lO}g*A+V5x_^1OTvKz1BE!VY7w705%?sR8ka=YO2=qq4k;ZJDfe9-`{B z%AdYO&KdVc6l<17XsMs+`8NK2CVfuG(!7)BFI}(*w7b+#4P;+N>{-ViZO_Kp-T3+@ zfX$vvfoylX3oY!~X}n?h{LN*H2!;hI{)k(7Yo}!0TCKQbQ`?(EouMR|? zr>5C7%{(a5<^G#6T(@q*Nq$y4M+9oYXVh0(OGNt`Ez60oaCIJ;HRYWM<27dp}L<@5u#O#?j+f0)eKTV#8_ z#KblJgXCXe&)oR0f3E+pKL0QAw~oQ#eNQx2f62U^pC8~1lYK6BxLXYiyCrOXU;zDS zsmDTEua*TE0ZC|;6&+6gvxc6!0Mg!+wFPm zBxP>Y%rv3B``*NiX)(H*N4rri*2$3VxyQ@aE*tDLcwzoktpr^?oUD%ZI)b#uq|^VvQz8Jwct zn%0%7ui<;<;CL56255NzhN%4jCzJ_@OOe)$heb)jQVN;qpRp*?cr+nlbvMJ@_%M88 zO%8j1!pjgjVeF3E+OH5eO@aH7@~GmRVF{q$Wa zxtlmljn%l`tW>9>xaL>1zImj1njEsWdmYd$I~5}3i6hjRKVYmEUz^jF)^BtCM^bE0N|p`wGYV0TBbEn4mNKABBlr{dO*rb9@(8p?DmUh6y;!^BNv3{4ca)k5T)#8 zDuhlD$h9oU>&_1sv!F9+ysW##^%Y}@WGa;OsRqB9AZbukLxDCz^&U4Hp3%R?4la1tL7ge zjO`?>=$2X9zs78dNYP#{>O*-#kUF#iD{EG`!Wee-_7_WzhCEvRpnKq4;?ZTvqa3?h zApkF(GJeUb%20m4lTd9!^>kYA5IA*gHG)Z9se3j(+z}sFJK{0QJo`n~V08X&*vdEB zGV6u;zj}r%mp`aks*5MI6B3&n(4*bR6T8L5@y``hIY*Y=IG~edSFoAPK{`$_a<`}^ zEKJlvN{myK@y^aJ@}@GsfN6F_>31PSFnpX zN(sFOv&U%RtLEnDZTN8xO5JnW6zL(p-H!2MCXVMDfBb~b0iw0sAX=zW=yH+NAo%ubu}QSF3Z` zOI3BNpjVVj#0U2eeKd!%kSy+B&j}lwuOJiryYgPvZTS?aU2u3*0XKpG`=00DA_IF3 zf}95I?l#bzLx2nC0Em1}RO0CFML@?*^8CU}^GCoN=wi;Rms4*170bq z$=5zL+*_FN$60pEkhf(>IA4BTgW5$g6@1=f?g)06y$e~1uR^O$1fR54z zjFg!iZM}tXycAcR^PAN)k93come}+_)JAn<-3{3mK@L~>c|rF)Ki8rC zV2!Vj0*1y6Z2i{%8SlKSw{+yW>oD`nb7)>~BO9=-72#aej_zT0ZrPftrDJOs8W530 zyEFt)aPU10dpilWr_*#}%lN$rRMBkK<6PsLRU;DOjmKH+!qer|(+u|fppBCfOze6- z(v<;fWH{oqN=&E?>|>TMzefZ(aTx6n5G*g9=f}JX{9r2(UKP~+jM3sTzhV|5&0Da| z&Kt%%IS?<{y1XP^4S@>;;Bz3nM-I8lMARp?@l6dcY{84RGks z0Yc8P-$;U0kKBq5I8KT|QH_pw?rJ~Kt`>%vmAFqRW|qS%Jwo14^49H)LQH^0^KxUA ztiMj-q?9+fD+mjBSSs#{vLGhHo4AmnuL`a7+$9LaWklw z8Ltrc_zFgxKUu;17#=`A?YIHWt3VV?3>_UCqE3okCL~6a3d)$m*&SSU6HO@P+h+mG z4SL;6)O1qFP;du7zzB)H)4Fq`+ayoxmi+zbAWLiLa3c@EOgTs&*kz3!aDtrH3u!)s-8aL8sacNE7>sQ^O}?9eTl9x^vGIL(af5IFenJcrRpa}Yp)`v!|E z#ol2i8#C5Gct1(WlPj}fG2)k&n~MRL(Xbi`bpdW?0AJ35oK-NV$pEn6-fAM;x*D{% zFx0By&j;$=H{duT#CO{K4g@la&2pU1^$m?-oZi<=SZ!AD15aPUCqd{WL<5;? z<0*BJ!`=hF?uPz`{nej-ptdQ6A^iai84ULvW;k@zs!c)dss=n{&L4--LlQt5#!yLi zUOX33vSxp2d3I5Lso|!aL%6?l^38AJehYC~lN76u)0Z20Ha%R%77dabn+%R6T*L&IXax1bVvrVB7 zc-gzit)z+&S#{^6^~UP_jO3APtouD=o9;H)duhI9`d_~;6ki)9Y^*Nrg7U2vG=#2P1t8u1pgsv$;>DO%-vSU=s^h(e-+=MtI- z1e6jZh9oa^Gwb#v#skWaOi_1m39da-?oEI4~X>=X~Ia*`W)%K&e{ z2*I_Q>+o@ZCfI%W?{{%ds;W7wgP& ziSDEW25Wzw&QF@ct*U!w+!bNXUX#YseJ|Cr(%td$7TSgl>fn2w+S_*X%6mq&HXo5Z zJ!t$*^E|w#M8_1 z^%So~_rwEIzfz;*e6v7Da`prNaQk@xP;v9xB}-j?IH>I@YfN#cNXvK#ba+0wsZnod zOrh~CQ5E+Bpkrk{4TD6@>_PZS{;NEI1`TW2*z4=(guDO@bIuvgDdMKkmASK*I@i+O#pdcw`Xp0hA#Q6WV*diG$iUk%-PFy^ zyFc(B+I+#pmHWXSMfT;wo?Szoc3S*@h!5+X?L}__L#(|LDuFe-q*tY9Bjo{V=A>=*m(mUU1_tvMKV5aV zA@qo~)DJ!=+Wh^yvQ2}7m5ryy1`kY(;EBD*4LG8wCyW42Aj_Y5ru0S&EFJJNRs|Z7 zv;C?n^4Wb}3rR}{=E`o?7sS?M4tS3~-rR6{Z@Au8)51yJ2}-up5YH%7?DYK3Epq3{ zlk&>>(W@4@K&^!}rp)MH7&E?zdK7NI00X4*!lw$mWciVP*pDuW{kuu4cDSP%m*Fli zd?#TifllrUKq>o&uMZ%g)iaK%u4kO?F9=6JPU)Gm0IWHN_dMD<$ZGHy5r!`8S|^ z^ZjnQL2JPGvL%*%j3#EEYz-G+hjxcu_FO~i;X0B(v)NqIoP4zt_fNF6ndq148u>o6R%5$ot^}>de`t8T74QQ*{Z2RmN^n|6g*4 zMaBIQKQLSfA$?N=cknp{t#lN8ig62C2D2MQPH~4H`vtZi5j!Ec#F^ZtC-_ zO+LD`u?@0~W=epYm{_Nf0r!$W&r6*)SS$s5m&MLCyu|DcJRjhk6Hw6i1qIEHaTsRc z$BE*u2*Nifo~1kTd~xYnJj7u4!WO(%%z#S_MBgv&)jnP#e9D_XH%EOXe9rs-eYE_BsUCdqwX3 z#q&M|=ZvPtexP2o*=(Dm;ryO#mEXWBb@H*UL>?9{R690|l~{)gPvYqe)>FyhOIo#( zA5i{j)BS&jrg^#l*lz9?InF+ul7X9UW_VzvO^;V6UT*m(O1U=7=5PzkW46*dtatV9 zi^u{qW_}JBjh@APhZMQsW}j5^nfo$ZO&ClheXVAk{=M((jh2M95#xf(iPuv%0w^GL zsP+h)(I3{1zm|NRO;ipnUB!naa>iYG`A}%%)mqYBFP9NCAz-!iI?MUFX_sna+Rvj2Px~n+=9N?K00=J71t{sJ~1VZ9r%I&EULM|LTA4gtjd+ z=lnU3Zq51s!2dDO&a}dDdA}FcExax0<<>i|JkulEGo;5Vmx6F(9AN)!!dbfr4H0MI z=gOVMOR$Ceihpez*H?wLtehzY$^{%MmX*{`4&`t2p}bw;c-G3g#Tfjqi#OLMA0JWF=e3k8fI>#*^Q1|`l`7=++g^wyfBB+b*bL6ayuMV z{e{i9p#CV|;kPRE&>cHnQeUA3^zUo}TZY!_IdS`6dXD*)@T+XTQi?DtU5$HLO?wF* z*dNC^Y`3sp?s+K1_n77G^ZkYFp$3j=7%U-S7*6lLR}qvLI^>J$uwqKO~qYhp_R*yy>wLO2VA|n*CP86j`(tnik-v3@ncGWcVJv zov4vlKzh{80oRj_h+P2 zv(L}}ZT)S2zaVI2uMivB;kLY}ZQ^2eY|jrWJy|glL`^8-zJ6xC!#trP7&hxwtdXUv zi{7NyctZK_+>a*$m|+)9u=wq7npgP6xU<49*x%Df(4<2Vha(QXHwOTF$Fm$@Ndkt^ z@0V`qsNeq2wC-TUApI&6&51TkXpZo;u_a184<-Oi>C2?-S)3|+2}Oo4xLLafwpZ+MGkn&>oYu|7?9so-rW#>-uEuMpA|ZF3`aD9RaW<^bxy2+{=?=gz;9Q z0Ye?@P|3+?aNP73My7Lyoy}1zW&m4;PlQnAdJt-bel|N56#}q1l%^yF=El4a`&KOV z8lSXYe_8Re2eH)eerxJuzAlqh#8F@S4cJAOfxGE4*eyZ8h3Lvh&$@>_Ms)v~O};Wd z+4v^ryt~YxDhckJcAb|jRfYj0H7pR$^1yR~N9#)#7r?qCHHRW35#eJ2*D z@%^#B0ohTY+Kuy<`PdC8C7YBv=Zv{WWByCQ!b`eNM9z8vo*TF!&yT~X9nhY)+qDk| zp1ASo%ICd*eaL6bD~vU`xelo*SMIwbGHjgSd;j_u{bP~Kd~ooyPjF5>JMdQ|zI*43 z^cA?sS(B~aNPPYFuP@^xVvj;hwcXFT_~5ME?abHH;a7&QzbU@w{*!IIASG7R4dL&y zwXJ>S@VUnPs&fUoYqs|#z2nYgJ~j!qPjxH`^~?78Uu~OpNf@3sw1vR#H%mW&+xAj|4XnM|wXF{Q zPGiGzqKU25eIF0*(b$ud+Y%JzqNRwtv4iB57G;?erodt4IqHLXU-r4L$VED93u0w5 zsbai1CZfsn6mlTvTUY^awux)|F4<;Vbgu3J99&skU5z|sZW`!CuuVf!%B9%%KPdMa zx^u{|;0^tA+)H!bHN#a0)_=orE;UOnYp3+LoF05aJ6v$7>6M*fgiHLYcXhJD@VWe; zp?!gmoyJ*OE3mtMxh|h^^l@g`;jSx}-7dZE!)An7>9`frZ_lC}GUTwBl5AREH^L)B zjwJKr3_&8SE!?s$Ni!;3$71u&%qu7BeqC%O6!e3Oyp?Mwjy@^CqBQ6X4{qm7I6*~w zaLG01!&jvy{I4fgm_reYC9DDU-KMrvzXQacG7fIVrafD~dU-Ck1r1NW>!*Euc>8YN z{VD8H>h1NW#a^Lx*ni9pQEt3tPNQX6nD@p@T2izpL)Pew;f!8dBlhW)B8*j@Fkiu& z2(w?N?|p)8t6J-4tQ-GkTWXuO%p`srdU>}|`uayWSC82xS$cJ??A}!C!%(w~st?iL zpPXB~SNs_!2b!g++f;fmC7&ft>6)}dVp@(EbxwNVy_#Yw|M#bWFt0&4$%#hYdwwt8 zrL*N*_*f}BIXtM2*lDdoXskAa?NlBkD3VTtCc4A;INvT<5M}ErPqjO;Q&Pp5C zaDsBYFIp}iI&vpwskL&{P9yw7217!gAHGX1Hd6Boqm}e-V6w9?Mh`Ldv!Bb3=V@6~ zWJrm;S0j1bY7}VAucbmpA_wzfb-Wmy6~MH-Xaf+%qh6;m=)MBl$&+fQa7giWV-u}o z&vx9pF#^N#DJ^GpB~6rg(?ugm20}LaStI_bNii|sLUI|BEcc?}yul~@7wVk!X9eTOhG4ux-_y^=@qmBG!q zBoP4qk^QZJZpP2NIa5r1^%3~SpjB`Q9~rco`~56n+tI-*(c7lG zkp-wdtFn^S5>%rFN4G+~V13IiD6EC~*9gQv@j2DDmpJ%yyzp->i`iU=*~-d!8SfC= z{tCGjmR{^T}<{aCa^u8=?8vTn8G>r|LZA$drApfN2trE-y}6! zk6GYh5Y@g8NMsV&0)&Nf7hv}V$wxSV)YcDhKAB*=yCv5Lu`}8 z^a$<*U#?~p>y<7|87DDlSpwL{dqBGsy$Aw}N^+_=gUY7n0IqC6_XX4O_?+3|8)~`$ z%T|)vQtee&wO0%28%TnWMO`L2t=RRz3W&PEB;J~ey$E4rhIJKEssNx6{mcC7Mt3Dt z^YXn&+l9+>te@Mq`i4gy2KCti>RPFaa}AdV%z+~ANOjx(Q2%JCSvq#EmI1Rr+6tXy z(5OyX76^k+4iv46TOuEYMV1e@;kWq0)zJOwfE`o!h_R~27D#)IZvgST6#GZ1+1w91 z^uaWKiZ%oS7HU4A5MQn&ycn?x8Gx|>Dt-E{8u_dghja}F^HQ^2gi5DSqC zxKvMtiFeSYA`pNHhtxYnKuSQ|7}Re{<7nlww zn5>eWl+?2;PyvU3{o111d@QHTL#PbyaYt!j z8)=*B`2K~k+Q#1yt( zeqs)yFLLRu0@BWz-#NuM*___C*MMEW; z0I>_Q))g2`)&UYZbtsmeCB!arw^qwz$2e!*A$oP)*}v5JE@iEe$!s{6N(5Sn%l$8J zj60xLrS)%h=cZM-^P}NY&?x+%4nueHX4SQTg(;1qA>Bhl>MfA*hcS-%hz#@Pc!IcioKF+zUk ze@h?EIKq6Yf_x&u14J93suomz16D{0-GyLP#=@Vry?uxWu+%%>A*c4z-T&*=&;r<( zEP+W^N+yWAY3>b!Xntx>CX*5&@6SwLyyuJd6U3(IIdq;V+madQ#HHZg~0yfY0=`jUTs_UaX%41d(V_fNvh@JdabZ*_b*$B3cvkzvt` zURi3PL2BH$PF!31iemN6bipBVkNqw7r@#5$@2HyH_9ndl7^m$6s0q7P)l1NQON~|? zK9uT8(QR#$qdM3+(Z$$%WK#X*HZxUo!=M(nAdgFH`!%+n*QEQKoVcUocLJ~ex_MY{ zXfDj|z!d1w&>Hc>z3w8r)qAG0L6!9SP{J$M&VFWzy!G0%$7!KCOcqm^Fs*%vytjV|_T(K%NU zpD7>q`-&dxTV64hUM&87Y$^7l)NdxphBABfqVo4KZN8ikdyf`9lNo4c9p5lvVDe_b z#^w3P|J5{btM{0AR)?-T^U(Lg(}F?d^Pb zCMJcv!ld=Z;C^E9$-%V~SFvvCR4RY@X4w7ARIn}Ag#!DsXORJVp@vJu;464Z#1Yii^Z31~Fr?UnMjWUYJTK?@WJYrdSZ9wIA%K5)|z8Z!; zMKHJci!uL24R@V?c=l4__ybo|@45)qrqjF-@jBZY3dc$92p(%3u}*c#gXV{!Cm(d?(m`M3IB zM*oUy*gSrFu+8CSr&4~R6o&WjkSTik-jv5hx&(xZvs0)xYFT#-&B?49x*lwToG539 zw;_I{_QE~NHbm_5IlC{4dBg0-#F2GAK5I=4LQ`}CI+JoKYgtPd`g-9}Lez+JSJs{q zqj;s$D9c;ngk|4fI3Bbjwc86FXmVwmw$}DP*8qp`Kd#vI1(Y`@9DBR_6Qd6Prfj17 z6ZZ@|wZ&hp;djcuJ+vN{=AE>aRiA6NC0kv^miJG&6=`upTi~f1>tg|+bJ7Hd&K#OX z>h#IR&>Eey3cwJ_{<;>(0z^gj;H(g`?Wt81Q^DCgBjA36JpmxyKqj{u%mNF*-KD(< zpoi33qysGoi?*D!>Wbl!rLhA$dCz?-_z>5x=-_uQJ=g|yQvE;!Yb9c*L(%{GI`)Tx zG9AX7eEapMum9lK3i-r}Jax}KPUcl+g0SgaB2$D>=MDB3?ea2=CLeK|E@(Kqa;`f! zJLYcQ19+t2o$`%Qn6f^tv{ANiTToA#zAdi&n=j+IiidZ&O&6sw`w?G{%Zyu|u64+B z{rM!wW7VhnQ^lXizQ8~2sk+FP3Nx||4V6B-Ezb00v(F6kDmMIza3V+RudMoPt#xe2 zBJ1V}NwMKl=oIJ})>B_%0|4LDj8;0az-ITt!$F5`#yy$c4YQOCyC4JUF{hw3~_r39OQI89Py-Jv{W_~Kl_-$g{i+187Vn6;S~ftDO` z0KFFxR|vi$OZzR$b5vXqz5q zf;RPe6~Z5KF+8wPanyHq+$t}}tfD&EEn!7}M3N2wFd%~&cN7dSEeWpWxpwXEMZ0x# z5o1E#CPBYG!|UAX`CM{g(UH>`yo#n(>sSNqyx1V^-ZKkK4PP0`n%z(%>PLA-Wx#EC zL)b?VIh1#}scle4&2Q<<%GL~hrrK$0JbFaqyi{fdaPqAKB^oFJEahI!sMOCUwN=DJLQ$>1LrtMcsaKut~p!xRVhM?2LU!2GTkd2 zlvU(cBX#nad)*oS*{ysyQN~XGt_`zICh6*7w?c2kiFFWQE{&W-^vai?jqRarU^Ad`?2v6cb2F&IcCx&T@^DAN(XwHWn)HMx`G~m9UrpEib}!Y_!RDJ_>@EXp_$JYM4efw`A|A z39!GiUo%o$JG&s=eNkq$wD{@U?vQ4dUT#Z%i1z9MRn`6OLypCcV+!>U z_RBU$t`$Xmg?!bV>wJ!n(^JLb`vmzql7-?ZGXtQzyPw)@kaxqvkMeoBPnOCuC$wey z&YmkDzLChUpFXX;`(u+4N+K^&%URT!(uC^G99&EZoYu)EvLhVJsN61}PCy2xUOv7@ z_b21L?KH&VbOiTs`8mOa8}|~nCQMFW%|}V=X$PG`n)W16Po*)s+9jF*guCl^GAa<< z{ysne_s0O00~MRE7aJ^5c=Jd*CkS%a?=u!RBPqAQf))*v!+Bd4rIT*uK4i6G|lPUEt{Ett`EO?0W2}{>=qpl#f-&L z+xRcaY|dlLbo$$SN^(c;NT-?r>!&2nJL?_hn0lzW!{H^G1RGOCK>2u`x9bOPe|HY zrXEUX?67nlrZB0C=oBU^-6S^iP)5f~yyKXx_EI684Wla&W^7FD0BH%{(O;ukFCO5e>Jag1GUlWL$s;<`9TT>H|q}%w!Q5(TT zteo1GWlnFi#KoyZae#VFiF{sQ(aShh9IM@~07C$vq!Qhi!roDC@AFlH)=l3atYwB` z1PxB{B%NKL+wfDT_BiBFJ8+^OKP>eT1Y^i-@IR$S-g}MzIOxPlzQ31+M~a!O6un=x z!IXn0OjFy{2f-2M2^Gao({_;abvS4cIDVe(o%A%fNuV=x9I+i(k35;Oss?YEcu-s^nb|gQQ8y#ShJI2tLMYv(k89@WxI_10<&m7l4&&pNb6u`))T$6F#GWrFd;7SH8 za%qMea0U^;ex_6AA6467=RCYoBZXc4fE~5ZWymZha3lR=0nu^|*tpk(o~YUEtT`?K zh?m&}6|z$%E~>{Hv=gogaFV*E`Z}f|~x_b4x z#sDBqUbQCk?jw!Wped(K=tI~du52S0*f|Id!tY< zOok0)pB6(!+gW68ntjgKmD@8rG-^7OWXoaQ&Zh~E30tv-e4M8M+ct*iR3ePcOlHQh zGAS|)0_jRPMpd4;w#UYq0}?gYmf_Lu^|oK#my}vhh}LAjXS)({2||9Bft~z{i?4MN zDfN0n_feVFDj9wnl6Hx3tJLgj72yMsernvpa)v(j-STB{g-rsRk7l0n(LR$~v!j#r zKo7W5=TqA#&Sn5QdbockbEixjpDB!zp4$8VNn84U*63Neky=}&Ta$Z*29GL?Ns)T~ z4BTNQTBtn9s4R*Sxoq{bzx~WEjE{RH!iARN<$PRStad`2_Lec+uoSH;Q~zAJ%RpMR zu91bd!(J1_%>x}bT#+3(YCLUQlw*)_`TF%k$TSYRgQS_c=7Q=gia(~ACIf;58j%pz z*~Ow@f%@|-7L?(xh;TzhjLv(i8asJhBqg?M;m4RX7%r(aWmJTJ{=p>uo6a=Gq*<_h zJf9HVio41={z|0be_acD>-7&#S0&%55MmRR+GnQf&DUJKE>j!jYA|0jsB_mJL>iz> zJKpk$)g5>-m0qhGS?AiTn-#F+^X%d=lbC$aWEFRZiMY2lOrIxAJI7do{uWHp8ZUd0c9lH z2`j=fm%#n{1J1_ZbG3h`ki^<%9m3VuQ%G+R#yiR%eeFLv%x-%n!)LOOK}5`Y0QkrU zmH=d<$p7Ydk`L4JZEf112(L8|RrSn8MwJTZ9N6y=J6n`B}wn!a*h*!ge>z>%nf5h8kB#8BDU#@_MMRXpPV?h;)#|ggIerH1OjKyzS^;WH`W9kEl3WUL1ux>EX z?k*8>vvh-VJT?f({m#}LCe}0tdf7%Atgt0t7sSxwxYvRu)4UyxwfdWw`@swECTL`aMvK@K~WXeyCy6t zVwdpJH#+d76~B&;?>fjj%XQmL1g>4c?+8W8+Ap3fJ%1R}o*S&4?pb@oHT@M?Cr%h7 z6!JYBXPcDY_MGn5V#=_0mKYu)9E-CoHpb}rwj~pJue>)rCD*)1n7y}t>J<-VL z%&M!ge;M;{H<=yAtMYR1gOX4pBVRL929}uPqXht~mxYQm5kg=^HvV!c+LRxPk;2P2 z!Y@m4-oJDn9a`rhC!K>pBN4Jo368R9Xh?JOd%bw)3JioaVrzz~2r44VqR8O&9zFhL zEQPC~`)T!!Fp7<#PN`cEHh%lt35tNEYkRx)9pMLAjok+T#mMC_=PQS&9=qd-JiiMo z_P&=_*|j40bk`PTHu`+fkJ#6P8*Q=0`h^D`5;M0ycd8lUH z^Grz|s_5_yzU%1O;iY?amizJUg%i1oizW#p{orzx( z`Txg<8xaK+5b*-9@C;4M%yPgBkIY*%Gc+|VD=jN4w+0ZzGc`3TD?Bog}Sz&2w$F^#~KBBUb@{ zI5=Kz0&5Sjx0qg~&^>s340{Ub1Mps|ZO?xchRlh|^)?hGW!@v9(hi;haJh7V#fPOj zZ@!qddS(1QL}%4rzS*S^Ov=l2)b<#c_+1v%eEtVrmjjo6UD*2i)z2UQZ@GFCK20JN z5b{3x?=w**7m6j`)1 zP4Li{8qE6VVmkGxE1U;?0E})=_6P{vlp%EpPy>TF|QjTr#ze$#R2qllJf-6o9ZB z*&}==arMVuo>8D4I9y*uNqnN82T`_X%!mZQb*S*5NqnW1Hs-eME*znD~RatC766n0TWG9U0+n)=qnH zg9NK(5e&1tP$q_+v+Q$G1x$&#$Hg8ildU_G6_((shRWhwlr`LPv*~ug^_*%T4@|3X zcd8Imm)Z499jE0DZFxTZDo@mt)Vbs;rzCcFPE)qOSu5VCWFH^c2p5MBigO;sSZw;i z(i|siArZz6iytl=-%Lb#kNhZOR8{y=x-dGFSbnst=9BJXMsMOtW5`QR4Q+Y&V9-y!ce~gbVNG3(f2ApTvx^dV(k{8Y2anTjF%SME|s-?G; z=ip+na&j_%z;i4|moU*l`BZT-rOi#804i`6GO;ndqB!vcoO~Yy(Xx7dLa#!%F{l!p z-C7)_5W;u0lAbQ*H!^XZ@ZALJ5O`2l`KheI=$DqZrqU2b2HJ@(#TCA<MakAPf=^M=-dF*`eZr5F#&O;W57h^6(9sHZ|tb{0q$6lKC=lWmp;}t@cxZ_!m z4xzW(m_2W)5@y0$#FM;rtoIvOgp3^wQaa1AySB_6Ad2c+L_$ClM3y)Q(B`g4DoZL|Y;Qw? zZ8EB}U$D|ePwiNNmI<7O`PR{NIpwhoy(S}>pcqIgP4+~=U0loUtL4bIo+yX%)}<<0 z1)QSb$wF|WT~Ufl*4>}5s9??+a@n5_uJd|Y&12zvB*cZy_*&|Z6khwQlN|X|3Pe{1 zE&SZ--&>iTYW z^l>{`N*}TXUbNrE+0|E+YM0S6#N`*?7{rFlaeF({&DXI?BfRgC(r5aX2e1SLcQzH% z2|8DL!UH>=7+7M3F|RU8<2!IL+y-GZZ ze=6nn%teAYnSp2flY_ND#zO(|TE`YnX>dR#iL4hz5ih)+ z$@}ez1$!f9bGVT_S_!y+vZF*?OgCRCmu-%hUty_T&;W?h1^4)O&9b*W?fHWq4uz@B z22S~cFB}rZJyGVc1DR`t^Rt8zq1{(h!7S7|$a(yPu^GU*dTnhGJ~<%yf<8GSAH1%D z`yN@ruw&r@QV*VJQvn$gp=)@IEa`v+Wl^&^p;$=k|>PGa}OZ&HCZ@sHVv0^7( zuC<#V?|~n6`WlsN8E9(!NWSmdiB;(TDyS)zLDNv|cZ0;8rgQTW;xw`#h=n(ReZ!#OsgG*OEiLxWo7AIr zL-yU;4oc^KvZWL{@p0r~qTu*ROA!3>8!#6ut8a1y-*;W5>;7+AyQ0b5nd8HPM|ndZ zTKFhL7@NkE`P?p@W@kC>$h0H=cWYcGJhin1;q3RVyrc}}NJ%I;!h*-Q2z97}m>H24 zrnQSMVNqA&hrIx#L{%Yt7l!^WwT~*Y_VV{^nK#D8#ul z|I^=c#-8r@_W{U8At}@8ehEpTN!Yh-y*WlVj?PGXPPX6vVLLF>OaFp3DzWJI)$y^y zGP1Dv?G+|Nda5^4n{gq1rhd@AhI9gXfsJP6N)W8;BI$YBj3{EYIG{zG#4Ot4CEmgV zR#*EPszq%X6+Tggso8=|kU`~1sIH1#jB9j9Dt2Z8_Vhx-Y_vU70LX#Oa-+=^;@c4|_H+Rdj!I3rxWiFzNd)xK z(UzV|wT3dtfh*b9Qua@NSerLE2R-LE?eYv)JS~+4;7t(dhnzR(Om#vKy4Zqlx&ysKiV9cH+v^}LDKa_wNV*P{6Mm&VD^ zAqxgq`L$&w;n-1gs_nN)CC;EC9$v&B?cL>j_RD*NSD@1aT}~twy`z-Ky)WjeEAVdA zR4;L<2DOQbK#U+79yflSS9r_N-X@|gOz6)&SVF#N^Mb@xE^wKJBd|~sXn0PI#cx4f zlOrs7`Un7Ejw!VRJG6FvP>w(-#J;m3zu^ENugY7ESfe;r1sDNL2%#3~dqT05;*@Qz z4n&DJAEI|5mU%+!UN8b!^dyaVGyN1oExs*VvJS-?x`U!+(y(YyCx$QHqCqXwl;7B#k!9S{8JG6S7l)83%yNi+%m>oRio4* zHEI{z$!Pl%oJmQH7I3R6!>cU$6=HN1DlQw1?heEPuEa#QW$F`^+Cv9^*DLfKmZ`52%#fa{ zT5?aPZe6=X9k~l>8=->4-muH)y!475zU?ZX!|KEO&vb^F z7@heY2Z0JG%pm-b904X8FgyWw7?7eyER&;RvA1OP3EcQ=CY@p++pLnPcl`2lgn9`L zGQ$8h8ZknttPp2WS&Jk?UdwYh90F&AT2DJoasI2<9dETne_XON8*c4sxX+Qmm!p@- z1XgNfTyou3Hw0oFw#E~n(Zi#Dg3&XgiN~hP_%LQC;*JvopiXQam$%+-?gRL7&)I=W^$X-<0Y9*n>5KRY^G z_LwC)dV%$;`|j5tp_N?r?JL83DvwU|1BKM1`R%r{o9+2)EZwg?|7xDF4C(gZtyKEp z+NUlhZ+xtZEu7oE;WJA&xtol6P-a}}?`BC|e(QS(lp za&$XNted00@b(0FdC_{wsL1i6g%j2$AFw|`tLShvU@GSP(fS`t>_bJZ;RDiY#{Sk< zK61c(AgYTSKz2n$Gtp)PPo`5|#c)X$eDS{|c;#d4o+|YRHDXSR@(`=q^MH7u%5pF9 z-uG4L$|tMmL-L9*5tU`X88lCT)Kse;%k9|IgB?k-hYXawjcz-0V0??A@SjZhNC6Qh zA3nC}4DE-QXs!3>%d;u}DSYBXpIMz4$hu&rBi}4YeP*@V+lleuBlXN^Jd826%CKy4 z$AbcrHA5~5VFC0L1zMnCl*}>O6G-Jl%?+ZBGfOeYun2Ug@NNa%cox2vUzc2LpY}E- ze)hQCv=r7*cd+sGX$Rtd1C#wBsw0)CNR1i&oS7?4oZenM;9hh$L8^{CW-hF&mNKF> zZ_I-$pNN`|7?f0Y_gaQDpc8zGcty12cYlxHjpnbaAws8TP<-&o8F=-fb`b0ufB%!L zYZG{U*8bh)SI+daKf$imD2WykX5J0hwGfA^RyuDw6PJyOs~{xOCHCRy%|Hji%&e{G z0Y`4+v$6T}y&m)Vi+^#wd`>y|99w>;^zHL%*T25AGYm62P(@7(*UVdly0b7lH3DF* zG%68$GXXoMB#{VD<{Hho-?j+oH3jz|7`WWvT6?@wXE10DWo38w^yL!WZgNFKy_C zbQc_t{R}vEMw}oQZ|p>+biUA~7Np5PtF;@4 zv_Fb^m85S<#is*-;l+`NTIgJ*l!*oz=n<~=5io<6G0}=QNIg~OE{3p7SL-$jeEvJnM;%hra0cv}rLul`Y#-eYRlVX~zr?$r6}>&&faI-!w*Tsyw{+UH*3Y zIYn08ra2aCrSe1k&@0Eg`ZMMcJK8grYx%vaI=A54ae4NRe|OoND_}Y!^JY@0JbnGp zA8RO1UyfOP{>~5IBtvhSkz{CqfU37PuebT^ye?RnJtDzo)pyQ~H*HCfiohLVJUK=#Ny4Mvt$=pJ4cgxUeQd~}dnoj7XXG+3&qIiS z8QmXm&QxYN`TRKc^q&&JcpKxl^UoLA=?~AD-=~%xxbAtzw;R# zALdU4*-JueXv^AXhr1jaU4+-&!M{^ngH+hwuc@eD{EE-nsqKC}wj3 z{llrtXA{?84Oci8TB6F&mxi&vmhSo~0&l>Sw#|>kbk^j+1iU8jkF$>v1H7mhPav5O zUmGC_lE(ZXLn(Q8UKui1HC@`-c;mRCUi2^P^k?454J$~=%lkN0W1(xyJg@gfSv72R zddjq()gQB9a;$!1V!K?hJIiauUn$f zOZHes+K5#^q>i&)G*j`0iK7Otcek~vRY!I3Duey+RomAPQrG2$vz{t3>(}Y2Cy!N> z>$b<1we8;id;5{#&9_d*lu%q!(8W3e+wIe}Hh6gN0bd*$71Ne*f&@;={g0cjINa-5 z-E=>Ccj0cEZ;EIcyCtDM(qAC7ztf^Bm@|H-tQ9tu4%LiDy0pe{c26g)bRdhPU-F$y zW2FyQrQHYH;C?C$+HzgC&X>mQ>eh8r!J%wc+PyA-@7mn<{=YFMgM`Eyq~L1o3;IxF zHhXakoI5*KB#;^^E)T?%v#)p9|I1eK$o7zBO^M1rN*1A%TzGZi&852$Cece7X!3u5 zvP3`U1LG8y_lHN<8Qph6o14-AYtw-8>j^qv_aK?T zImzTDw}!F0PHoiRkMmLn40VrRuo*wcOHtWSLh~n|Jv+%NbHj(Sax#m#=nJY~ z5v3bD8NM_0)CFld92|2PJ=+#c$ zT$_k}AiY=J5CWj(l?5*6OJQ8c-7hn6j(11gbS*y(^oKYf3~w!Vy3zfGpm$`-P}fO4 zHhROn*Ye{QxliCmBSA-ICPGdJxfXb@sI*@uT@d-)A>k@JsWS3Hvi3Dgsn{XRGH=8AVF%jb?_mZ*FfYNO|5m>Yh<1LtySasCnY zm;2Wd=WZS=*ip=9_x)^P%@Ulq8Q^1EQiyjK0-d`9ElcSIBo2!Xe?GDnvG~?xi4PL1 z<_J!`8q`v!*#3HFl}W41n*8>s_AwSV*}(A|lLJ6msMddS*Wt7vbEvX_k`2xKj`^_rQ-CK%=K-&C%-jiT)Wa=6!tKFpe-fBD4H4o z7$l(Dva2bjO~t`*(0@4)E_R@Tx|kM$`S`Jt2$>*0U;Cvy3F;j}!kj7UKBueUC`+aY zmfDG^i4}OId>>rZdMsqJU>4)0+{tT)P}vrpSFZGajzJ%In&36>@a5ASy>;Z3ZnmK0 z7qO8tBopgq%oQ#hOVPSEC64z{RdHel;nFyVnlwj@uAm=U8keAw3?q1@lxA)KeCI4-+0x?QI&cjvc3W=aI@pKRE4r|RNR+S1uPn+9mJpUdBJftj{iA;{ zSPj3IB*|5H&xB2F(34IP>j5dJ*PA5QlzJ6yKi)}oW|F3wo1hS!yGeS6wj>c0#j5Cme?xY8W+E(2RZg}W& z(MwEBj63gcv21m7hIn_rRse^oj<4-L=e|G*%I-;~8^tHD>Z>yNPBQj&>~J_pyrkQ%cfjwZwsk zE};#0G`Eq`M7b>;fYR9f7MOK_%i{XB z*sj1$>p#&;!_(FWMs(o*RC!U3*_ib4acf{(S+}VH0lU7Ml`3p5efd7R>*aRbig3Q| zt|?-EQMKD~lB3V-qW6hmH`>P1q8TKxJibHJ79~?!9-J>c=B!C&{wMPL_L%ID>|r*E zRcI@zEa!h1B`l=IG9riTzCxq7Hos!9Ne-cAM8^?{0?c50vwgZ?V-#TR>AIv7;DI8d zoqJPAzdX+@_WwzU|F!an$%t>x`^3iWv+Tp4fjG8+t5%>d8cOF6u*7pW6g#@kpz zz-<;8>%D@qk#CY}V-4xsPT9G<4?h$*i70ol&4>^v51VKm$!Mw_SW0u^OipK2UqPwVw5Bq@|(Knr*|M5=pAPJd0scsSy?qmmOtw(sE zluiApQMuL;0mZ{MPnAKIVUe|&Zr(}#q->ORc!c!GjOqzS`eiAiZI)ooQ+S@&PR)i# zrV+hD@`VbKQ5_!GKdUqkA`CN=1RHU(dg_vFa4Gu*K4AoocqNmd7Ix#}ran484w>{g z!)gdMSDCJmHgD2b7OySOqdf5}aL)Zwm^r~Qd8H-!jg6E=^a8{ce{v3Pow`wC1rfpH}c69Ia0FW=h*4MER# zlyz(g;zlNK4d1WEuTqFT>a=8QrnQ~tHvD{Rq~_r zrNh5+ajPH3^J{PqBUNUuPq)db`Ddns`$|+!Dm;=9BIm^bC{~H#fWgIlIk2&0D zR44RpI{u+UXs=eekAVOmK=OPsiMm<}-9fIO84BW1QSZK;)XPb-%s@GMn(WpD9<(2i zk#Us3y`$$M9KH^v_1_K83t_X!XLF^+;uo*$I00f}F3?8_Ez{!HLnnkra*pdF8{VyO z<037+&|%(%Z?o@hpGDjG7ZfgO>0pTg7plwOU$uzZG}hT^kpF!k6d%Z|NW`Y$zvm7W zwQ#f+8P9HM{qXC*vg7Sz@BtNu3BB>z}x9)D1s~pCal|6;_vx<;j zsgDBgmLjo3DWZo|%ho;Im>g|Ly07Q?%D#o8#l<1yfm{X0I2Ve#hIFt|;+stCt4q=0 zAVbc^RHzIx6!ycQ<-|}$rEs|!Kpq1;yxAVP3WpgLH5Y*ci;3>h^9ww8amT5OMmjBx_&1=AWWaBW1(ix*kg zhzLy_Ju@(Lsb9=i`@0~6b7pZ76UpxtXlrjw4!EhPdSjyU)vhcmx1c{T95k$eU{jp+ z{g&~HL5D;buprFw3_sXe=CcTQ?wn>%y&1*E@}CAe0ne6M6|@3lfka%*h|YSY$)QD* zOkK1YU+BPtHZPLniGzkiMKiF_9FpYB)#y}Cl0$!;|AK#ldwS>y%AWMtez7=%h8XBL z)eiIR^41y}v5eRk+g(BDraq%7fti`W$4n7rql~Ajk4N;yf1*W7C*SQ&G8`8;`9%ic zWig$cpvcJ3wURQ{MDf#teZ0soY)RyEzfT4__TvJ=6#Q11ijEiFF5^(cMJyzs{iT4B zJK-K#eU`xey&785>9L>AW%I6_75&Iuv%tUkNZL2ajk>84kF*I*;GIR0BOf^6nVd=w z#6ITqAQgI{=+J(x77lWeimEI8jR%5UPcp+zUTAOi-ie`Nc#M;Dh<8=E?BPu6$s(CL zqYD)P)jZgIE~vbrC}%9_HzH*ntmI<0pB*Jr{M)Fh{M2c+%5-6HeTxdF;W&FMVSItP zO}{QE5GvsIB>0NNK4h|AFifi9 z`{0B3tAftkn*l&J08jzTP;CMMOehmN@em%Gf)7-j!vfrC1a7|2w=x`NL=w3riiteH zwi}W@&ny}Z+A*c3M(|e+I9} zFCZ=w-&w7`6@eK@ePgj260Ged6v`Y;~5Lw!bdc|_$C z?dzTmyPE@Zv*~l^W&$#{L+|_I)6vupj+b};7wmfHRJI2T^65nAERZ@vOLIsn*sRii zfsH}CD$x1T8c8DF@Ui}puiGEUS@xa}O8w&KVie(H1#%=cq2=p)h! zt71d{&i)|6^Sb)Q)$lhqKOZ2X`|Z^n3{vswoAMMz*YT?f!p#3&gwt|BIB>aOFx`~O zFeUhXZl42&E|<<8Hr-TNfi+m(p7C1LL#!R^Ke$$*HvxFea9o%O3k`@Zfb>1ziLzoS z5CZTPJ8AxUA5QvTt-APDP^wu**AkY^7*ef&=*R7zbWp~8x`uR4RFcQxh)}I+1~3nW zbfG>bRY{&b;gnVHS5dHB26qN)Sz{cGw*cl1qp7v>Be?V8S(gv@y4JxcV?tfcBfbpz z-UC~vL_=Lxp~zUjPN!m(K3|?#tn!-(FUYaE>jIB<92ZO8IUc*|C=JDIOnq~6-#Ns~ zBBxo!^x?m%C8rY8`ZuJZJ=$=UUnQ>N1^0(P=Wts7+6F_gK*LVevd2$@`8po|NJ=|9 zu(r$nY){QuN#y0>b5$dysi(UAO&P)$2sOu$Co)EA6>c2lS1z(ZL6_g%gk>8KBlJds z+JWMcUtxwNrUpxg)b?M6fHuQD;k@jRvmJRnRS?o?0*+aPDs$-49))oI z&a=RWh_Ql8~ z+nc}j@Bh#b3iyt;=Q>d@wf=eQeOtw+D?uCWIn~|bQ@e4Yb@dkg>=HxFW&KdyDjfvjD~s2_D48I(i4XbPgNX zuw9pA=b1IgO@qVh5C|8lVmV!b9v{TzgV<;#X+)?6C&Ly*%aI`E4yk(#P9t$c7CYSd z2#0aF=g6tU^NcJnf%8|D7IsWssDjB(VBqKKws(eeTc#Wba$lHw=2+bOdsqJ-d$N=kLvVAs0LH&Y z(BR&$EHr+0k$pVJVJ7FA5?-GYbav$FhkAX*0IIkmUX_+vVx<}VH`860=t8HBI**C6r4D% ztCK03%7CF41o~89c`4j-MqugAHaX%Knn{)X5E;!1QK`{XqVK8&kqc9K+Tw};5Uy$R zUDZK%0Tj+yKo`(+R;ysc2veKWtPx?U+1bQAhsUw=|9eG?z~&fYLh`9CXFV~p32Xo| z@pkaDeawOjuE_9wzEuV$!JEzf(skU#(%DQ9k zx8c+d>r*xl`}Z~AXfb2zi(mZx)y2MppfewdUM4iJ!v z*cU1xGoa7J?|+NiR)&gvX5pBuP6JlAuIJmc3lH|lIrI^sc?E}xgkKwjJ1_M)P6&N+ z*{gV<>jKAk)+~_~egRf;ooo8HZvF?~A2Y@(ToQ@F~91Z3r2xi-Br zOCliR5y|00!Q%sQo`Oh)!hQmBlD%A)3cW-_vZdR5LSGgEPJPq!o*%}_m)o%6?&^T1 z;DBSC<-`eu&i7 zg3DX`AMXjQw91@*7xv`3c<;pW^u``k9^1KJ<>21DA*kQ7;56GWo7#PEW-k^cf6(zW z#c^TOXc6|IsbEhpEY5LaJ=K?i?Q@>sI1j@=tQl|~=iFMM*brrnDAmpS_mE+Ct9#t3 zd-NB28Xd*Y>mS?)+p?Bje4nh!JbNf8vy{FO7-tV2QeYK*K6%P+Z(r81z_PoI$g8-# zk6b?8YSZ??wL&rYSg`0dmszeNHHkJa{Wtcq1x_1NkxSXG*&azX8zWo$g-+A<-DQz5 zzvWT*?9&Yu#iZ8gRtv=&cJW;&fbuFg&uxnY<_>cTZ}4X@S|hMV%?(7kh#T2fmGw3m zSK9&Xqqg1?y+PmCzrfX@k|U=c6*T6TyB&1Tcy!jUkV3WxvG%xT&aWoGZ7RlLX{WsH zvVNI;V}2cyl@_d1#%kofuY4K|IR1YG)SMi!!6T9b2LRH1Gz1W^XB`d%17|m0P47AQ zZK0+;{%Y3TXk*q`pLglzpa1>Y7Mn)Jf3m3@m{rzd&WC;bfO2f^h#=&R*!BJ(O*(Jf zeI=~B*yCfga+md|TeC`srTATW3d!0hu|0Se{O5mZ4@U3s^A;a>k9PQ4r*)3cveP_0 zw?Bt@A7ey)d|l(v8+X2HFZ65`I%UH-TFsxwH`aNkRZk#2M`RVT@wPQdqan+U(a+ii z(=y;iC#Xx04tb-R_mL{&5Q?>*md~DABPD6j?VV z-k-eUA43SvNX(rB&t6QZ5+aTo3R}(_XUWaU)8}Id{ zbTn>T&$My!yn1O`5JA-puNd+B*ytV`mYk*=i`#;t^7(I*um2I=t!E{cYiFY`4aHy%2T? z4^0B->-E!RiBW5 znyjwm>b(}b9`BD%0k!ezq^N`;q93_tV zo44D&JXbjt?o;DFHj*c(Kf11pZyR!AXGzi5h~4imtecd+t@-`c55&LM$8xvq$Su$j z>BTcUumu8#lT14T@By2AB0BUr9JR4mo?;3MeeQY#V^=#ZwE@@wY%N{}!Fc&!mLJdQ zJ;AR?uU+kkj~7AiN|0|foc@3*{e$o4u zFDgrpOuV6lw+P%@`1;HVxbY33(48*T&6G8wjrvh83Ii2wTt#8{)#Dl;tB6YhZwr`N zlkVXey8C805|07^@hh9uBy9?MXrvnP5O?3lVhbcz1N!Vk7RC96U(P^@;o{gniJ`<4w=Sf}j4FH5f zMRM_#62n}LqZh343i~RK8`6cJl}sM2XzC6yfbyQFEa^rliTu0)oU;T*T_d}@TvdTw z$x>Lp?&e_TM>ZU`P@H|9jRAgqM?y4rEoOk@)$v$>@SfDci8K5zRH8&l$c7bQpV0^? z%FPuuQrUWZ`YG;)ukB3yW#WNBxUf=e0O;P?GzlmbpQ??$>c6NN+#1L;*^ zD=DBu_NhdZeDGwl@f*_>ND$|_)Q@t`o9kiVO395g$qt|P2SqkXK`%FM5b*{vmL3{+ z!!{gixx4U>l)_GR6@vYgl;`Lo7=(!~0Q@{A^Rljrk8$I9q2hHnLORTDr zno>!D6$6Zj%jZlw<%l+-3I@-vFa^7{SLVB_vjP)c?RVli>#l(+8*raWM)NAI38TKa zsBzfQWK@}Uj~1}AvAG~Ka&%ewr^rUu%xjH^@l8Z%W1t*=_LkAw(o~x$R?3izLnN_2 z(gwcFIdda`UWz5cA37%r4FOMomy4$8vkUzsC+=NXtg9$aLC62EYD%lbfb2p+-Gl`N z#!g-u4cec3|GuL$GRG?lDI|!%;3KSDuUKZ|)((@w`=NWi_Sh-0tyrgUird7sdX@ff z+?t@&91&|=h2>PCv?K)}aRj`EX_0^hFSy1pQ}7gx5@x3nA!Y@z^VmLo69eM)P6CCV z{m2=*t_&2wT3GkoBue13Nn z>`E2JZ)U-p6`JsFTI#r4sjTbHy%9fi9)O z&WIOShCQB|61Z9%YLQa6V`e3q8U96JH?<&3@QFj;3O0`Vw!bKV`c3!SPWrZ3@!U`sn<~AQ#T*_X)xpM-azTjK> zizulT)lF;j^61WApVOSLL+1*hfq-Q6ye7ROw0GUqH5Y-vOHN_Y@rDY(OL_PmKB+m( zkVC}SC?6FI_X!)1;oFH}^<+5PxZCEO)n9wL%0r3G#FLubbh{)j1IVrCKpb}W23om1 zRHih}R#FxPcNf{l4Iz|qx%*A|8Z{kHmD65Xby`WJNQK#$kmMvsj4JiH0z6M)sm)rs zmBO`E;X;XVh7#YYH2b6pcY=(!30UsV_!hwu?RTqxISoHQg%DAX3FsW6?qlL#x>Lv; z;4eo?e!bC22BqUZ{MRD@#R^!5@BRgnHH6%RdNNZ^PI-u@P8!?vxzc^zb}DIklZcai zGEYF-jbH3m0Qp)@WBuY`+lzI5Bqxyg`q9$YOTTDcM&b3pQu=Q%DhNN88=Q8|G1qIJH5sLRw{IDnK$d;Yj6_<|k zhAWYU?4O3J8+OPwXfX4}9aQkBLy^^&43g>;Zj)7Oqfl%|wMTK1&n z0;p5Qf1M7sI?;hMFumcqCER)e_s!jNJL`3S=VWF8xN1HoPXUM5ql@1V=J^FX8HCY5 zT9qbTrNOo-X;}hVp2G5Gvgv3*w_(FeKx5iarTy|yT?EwI$qsk<_~zZ_zYD0>lTEuJ zi2S+{zpYZzcYlHkc-4pRVlI`L}YAv{P} zfC&1>^j|4VY_?F+Cr#2PBTMHIE|7C-C1u63MXqS^V46CzQT_X+K*Ptk<&WJlFq(lY z?I%Drog@C${!(g(O-R!l#vW9&k{(I}l*YK!FmA)C>@9)4h5U>FI^ylXO@?v5)nUlj zW?~3PnS@nobmpP6Xlr~&GA(>k`p4e{TE|QVJLHeMaFuHc2%rC5<&*nh4BUy{X&4+S zphc^T6kw^1Mazk7S6|%LWKPg?WVTnq9Kp61GeX4 zI+WObbXZ3{Wr_~V&*d7?VWkSLk;1%f(%+W}8)k^N(P5)(eU4g~HA&gV)@hqG+XmCE zR#2)z9XUvoD?%R$w2yxI<*#cqCMkYz;X=(~0At1eVajhED?BbP`Or8&{jS`^&k;@< z&_a%RpbV&geGDheg&TeAt9s|eF#s<65+pk{39wV3RZksX`zk(7QUb#OPcY&!d35sP@<1=nxRF7l|-*xXd+ zMHW9P0H`hMWq=a(l}}|s=-Uc-(iq%=kE!P4+vt?VbI?*do=jM~VdjVRcG zf`e2#Ayuj6zQEiLB~8EhxC$S zwi`UX9nE%-zH|Da0Mg}ziw&!9yQZZbg{LcM9rb8^keoLiXCm~#X?-3FlX3y|uu``f zKr6_eSTvFMl#mazC}&_7>vhIqZ_M1{Na%wUWU_2UTwWg)39d%)F_Dwukq*03H&F82 z@OZj;IAAuo&Co&t&k~%W>_)dFV|w}KRdoD3|MzehWduOooHQ;M=p!{fWAK+BnoYHP zln+^Yn;cBH$(QyQZp+PVGloMLsv?#!NeXtK0~~FQRCe3szm+#^?GPHg=_j1`^S{A> zJuHilx<^VCX!)IleUg8@>I0tGIUJlkDxV^Buyk79Unl_o2^HY#YF<0CXH71P)amQhCzMch>yZob-Q{8^O zDU3{73aKpwnnY#Y2qoX#$^PdmE3}^QRe-dU?nm&_;7WExC}}*V;)JzpV811GuVvXoVeis2j{{y0AxtXt|w&K zo2D{gc1&0*ck?YQ;2R>9S3*Qp!buLU>vg)_GtlP87Q-9mjZ`nCd zjU)5wbhClql8I=6$^GZXlsp09xXGIO(=U7K(w0wiA4Y7PqSJM5?Hl^&XJuR)v^T6X zDpg45zB;~?wtgTj8MZa7UdPG> z^`C+iW?yl93j7?1J*(MQqglVBo{7->otx}@9fr$gn9j=|X2EfJAhW(2l@2o44d@Av z9-h)aUV;52U-KF1kRm`ELZ}7-I$A((5){_mtNvhxza1H{c$Yh@(aBPB0k>{B(zuRR z)Y)8XUdz>gvnp|TN4a9dyxr~x^1x?s&)C{k-v5@9F0&RQPE;v%q9;#giZm&h*wJ7M z#fHo^=T|T`u4=e${QILwpYFP!{L_J_PU{lM>-5Rd-P(65qLp&XaEvJgw&A9n&iD=#)uHqYpr8p2$smW}8$mf7>GbM;4^sZ{-bv#ylc4Tr_;P+tV?#jQ z9P`t=eCu}?o%yDpr+(9AYp;0oD>-f9k3Iih2u!+%?}cPKAJO3BJgSCL1)c~9dUZRE z-Cy6nU%XQPespdluK#4zR7T5 zM*d_z=(@Q)AoFCs$@Pbw*EP%Z3zoh*^uxXC!Kw2fZ(d~0yAq63_`JT-o=ndx0?a2( zzn86PHv90)hZNoqR;=h@_BoHd>D+`%l;CqA)w(ll&xxQsr&X z3g0kkJPZPG`Q~m2cUVAPoCJ!!tp4_=HYrgV!PsqJSfmoLfMERsTsLIk#IJe)lm-Zp zuc9fV=h0OP%TIE2H{WOQ1^&l$b#ld_l7}d1DtJeLJS-p#L(8`DTeMW|*|h1p_F7{z zGD~BM=j){j^to(`9MWGuNz9-FUm;YUCaGC)XLo&FA)9hW;Z!T2=WVa8tD~07$?_)X z0sUZ8A$ot#QgwKm3105%v~f{=j@p??jC7$y*BkGouk3VMo06`@TBL)R+%`!%c%Hgb zmjVWw9K5}uFzILYM9fJ9HSFVS3wmGx{QHmmlzi*m2=nTc$1KgQe`V`VG3nC^TOIgU zJ%>=HL^Nu9Tw-kV%P6bV^Kotm*{+{+)oP@OriuyYP9z@Wb zuA*lkeYqUL18Fh~<548BE%}xi1!pKlHwa!Hy-&(&)6HVw`Ss{e;Ini9rR8VfAVL`9 zZ0+TcVh&K6Ow^~tv=$b9kQNT1>l9|!8GSniJ8N@Il6^SyREQnPR5K%s4W0c&UQPafX`?suR!umNb9kn4A;~0*l+)LvK%K# zkFY%$kPP2h@A{RQx#0{9QW5}_)>}_v%HA+^YgO9(C@Rm0{>C)^GCiPII+s!fn69?_ zj=j9$?9qLnz7}^!{9Xn$GD{7urpD}}+=9+swqLO|EYfSkTF)AXr=pni&|2;_+qjD{ zerayD2gj-%PIW}L-aJrjKho?bQl+GA8?%=!kK5sz{$Yd68@7n5^auu8d-jNXduq0l zT3Nd?cp?0zzb@_kWdR1w%SCt0brzosRDE!d9A4h{|5e&Ts6_Ol?NaMLh|?Z%HDdum zd{FAJ{bkdSw=sQi$3$4i4^uS#WiPUIG3R}XGA%>~M;5G3*pMQ-KG@Uw!tZSixM!i*P2`r@^4!U-)vv8_|q+g{j~JJ6>g$$r5_cq zu?nG%h9bhY1a&_VI9wf`4RqL4xw|_2d{$Smi_rvU(CN}5qQUW+hEoc|k1GMzVYyoc zyIE0H!SPlYf)@CRJgaiAeTuhb2Nq=*^IYJ70+vfUkXjiGkMuX(K>Gd`wu@w=VD^+6 zRu}MKw)J6#`ZZ4?!XDVhNf`u(?i_~1}Q0M21laKH&vaZ(E9#npTJB_FC{lALNJ)Y_PkK^BM z-`zKcZ4_mcJ2jH%kh$NrD7lr5kX#zMcG0wpxs3*W>kmKJkslJ2J$g5KsUt8vF;Yk!Lp<+ z?cRsnb>iHgj_a=xyY$p~nZEFVGDE2x2WDOLDZO@X&#;wGC_!ddC(-0npF1i_v@Js! zh0ZOvzi*E?K9>3bPu8PhbpvZE`(bKN2z=`gUu5OHZ6|FY8?HZ_8P2ENv579QAD+3d z-&_^#Ye|$zRtT06Nh%>{AV70_0#L4`Ke7FbfO-ai(QL>j`!yL)cDOzKh6~h_`D(5! zc;yAeG&Q{q2+t%DC!GFUlyLn^|1qsY+^``$&bdERWSLnrqiMlP?(sFhG}wzdzx8CV zo7E77+Kbdr62lR9Y?)k*b4sWS;X#$_&49F8L#&n8o6+F_NhrI;`Ii0cc1tFA1Yp(=IbmDa(l8!~>2XVlI1%jM(```6PFb(-Hy_h~%}6BgPg_oTU-U!L_f$Ljr9 z$KAVeyt{RC^HE(-%{6aa3gOK@U)?P(hca9&n=c2N1Dhoe-tWCKrb=QQ+2l;td2>*X z+nG*Vfz|yB$NplHGR7hJx*r_4ju;I6Wk4qSdRT0wQX%xbeS3z>{MRxXVI8WZ z*u8e9ayaS&)Gr-9Z0c_JBokp^(?i%0t{Q(9rGUVD>kiaiL~{Cis#4Fj8K9+t%kh~>X=Vz@PrfC(ZP2rv4c z)SNZg!8{$O#9f?p^&r@>@>HSKhSV;f;Hv^x`z5ZQLtad!f5?_w4m{KJuAs=E(vHpw z)&>*DX;_UHejkN_QME@mUQES?0}Nuw1;ViV8BB~)f!H$ds#(e2h2Iaf)P+KgZA#G) zM#klse(su37R;Lsv{1acrmrzjG7$m_32@XWa~NUl2FfG5WhH#-ETXH>P{UGgv0i#$ zclW0os3sQC9WF22J4r)Wj+uu9_rTWHL0cRdJsKcTge1maucE^6x8#L0>8CIIb>wM$ zWTV@{GtpP(d+nl&#%>dHo;bfKgik-JbrhR8Pn`0waz=UU+ zM5E+|i9Xw>n(aI5ldy$>Ke0rghXJlya|tK9E^2+vEFiW~hCDyYA%84FbkYs_$!iH) zMXGn(Tj-*(k8y%HAw!s@xT%V(1)V3v{mI^~=qD=_7*RY1T7ORc2!Kd<(|MHy@m_<2JG+--d-O5ECQSjIHftW6X%Aa?C&v7qKuN(G5-l^Pty&jfkVNs5g~i6HNs^% z!$&&5=C-?FjHgaKySYMv+sPa?gM^1Swyf2t+TxDcUwasS9ncWa*#I|SitsiuY}8}h7t^$x zkvLQ|EY4%#g@?Zjq?!g8(jhbyl0@UWn?h9#&v+V_B}I^=h(rJ*2Dlz5d>4af4&Z-@ zq2? z=bNBHv`^I$cQM*s5#QX1ju!(b=LJ>_6o!q8SLSrz7o5yS6z@m5QwppUf|EK0RbJrr zcSrb)!mfOjsN+bJwkqUC@liPjDk)Ep;N`;dEIN;g!e`0UyXcUR(28GlUUYUv;2{1BTg`2i+Dn=G7a6Zm zrk*%oL0iR-{DJb2SzV$XZ_h63n8#eDViSidld6xKs#=KB$V+0_9R)I1f%VPPQnfG~ zIVRDX=G@H}D*G`8+gqCQL_g9Vw zGJ~?_c%&@`fRz{(%R&f*&~<1bV}*?h^yXRvh^s%(3h0PfIsY;mfl;1i5MXW+)rv?R zEsCXbSu|05mhb?ohCl(D=lx>C}Nn zg9MRb6Yy&RP?OdSR5z&+;1mM+vkO*!THM+!etH9@$A-9C<6M;JQ?g7A;e|*S2!w)D zP*usaR;vVea{mhaF8LprEPW|m(GP7Sx z`2#@rz`7}QVTM~z4=}7zCEGS%OM62k(m_zpH)J7j_qN)x%M;~7(h376AtD4~==L$b zH34>!?dwP3lH@`>8!fqxeknb_HUTQx2eDEBnJ>AAIzY*KOl~-2ha9Rd4{+qfO5|lM z8Q%>+#NI%&7>)I}u&IQ`DmFTr+AR2&MP zf&>imF|_M@W3MYZu`R2~F?8%&! z!>_2)_DJ@M}k#DiVt8T-J~}cP%T5V*yV0))FUGJn*l8Z z&M|bnNGdKVA!fR9(`JvM;p>q-;Fco9Ro_Q;=5U6|~Hx=<(z(Sa8b zu$QQaKY^Bge(he3*!Ht~8x>exS^HXVRL*#CGk{v8kf~pQgGz8SL8Dgz%M~JH2wAO3l+fNCDcnfcLqRY%>Qn^KU?BR2E(kQEG zL$bI#mVitWs5)xk%yMf;5f8qscSQ`Cv&&yNfS;H3E)tM~3tXt*T?r_i6jeaG&=WC; z-&lSk6||BTXO9Bg!LQPmuXBNbTlHj1Bf17}4 zkpU12m_vi@BmivyAeaGX*ci3~qXI>@C^33e)LxUbi}swE)l796Y%kxKZ0o2n9z^`EnBHT zSW}=^jtDVAL@O6<2Rz<&7-7xog7!RiN0oIc<&45zB0zPk0V^rUyrA8$fv{1cs9n6N zB41;ITIUcqa`5iLAA`K&3OAtJk9zy;0Ull%U`M+{Z@Ihiq{Z3?-56b&dW0-zKh#x< zssD(Pe3W^OqV(wS>@B#hVpu5w9r6miP^krFthoejLX!{nk6ka*qEZ&)v5Vjn8{dZqn2l}mS!cUg^aF&laxV0uu0;{2toZ70M2E8sy!&zG^>AtI!^yM!w&1ugvh4#?nI-jsIBk*tsR(sFQ8>l~FtIt6PsI zl!~g~)>j*K1UY<6kkUa_jo_rW9K?fj_{W4buoP-}{i|_v#f+hB);6VqM4teU&C=NX zO=@6@Z1xapB=bQ1jaRd_SDOly$eDH8t}E2Z5*DIwLSUPak1MMAD`FyR9zmnm?zjxB z_2Cm9b|tbWBJT{1ScwAF@BvjXccx(EA@(^M;_C+H#J^5XP1ZGxymq+z9lQ#}X16#m1)G*aZ&^^UHfz8LA3y7B{jmRuh&{7A8^S zgqu8Cth(pY`qiPfSe*v$PymHAKs7E>D8u_a#;d|jkdW{77=PINo8Q52-p=1b?=Fs< zU-T?l-1!-prYw0xEpG8yN+lrGWVKsX<;ShG7D}6gt+oA2F%2x(4l#<_gr6ty=T-A3 zVT)hni-A*%e#cLT+{FeyR{y0~3?5S7QJ_||@n>KyZ&Hf&yNeAP|517TC!>m2{Q0{_ z7;k&6ia(C)V<}N9C6(9NSUA=6XTYfOHO)gY9*(WV?2DxBkW=ZGvR>E)Z@)lFwIw>K zXSWale{HZ|h}+>EST- zW%^p=Jta`U$o+gR{w*@)tA5I-+QUJayT49_DBD*62-My1L;)CQUWR(&N)UpWNFD2F zw}RE=Uf=bqff{688hq#*#kCT1gwzsr|-}K(!G;dp@u~OQGe1aV%V;hBFY!mtJx6~;BpSyF3U-AK#sxC?OYJ-K<8??2l52mcI|jcXe;%yBUGF)H2J zw&G(_tLLR-bcq@N3+-aUQ*iZ#! zTLZF9+nv6HG<7EeO}yP1xyDvVTck4RFwKBxk3IA^0|*_%)7OKxnLqCh+GgjZ0Icl) z-dPmr<-~vnEzmaa+N#62@jPVoK+%=Z@n|fEmi-1m3}#mYkOQ}V0{j$7buY?A8a@%yo_uW$6Ld6IPKU?GbCyn;3v)aMR!`wSkan}` z=E#ws`nOD3f4gE3b^JbP&&Wd>cPNgfcFvK*$#M46hY#i%G7J9ZjqQ#2wAp?o=HwPN z`_-qM+u_v-4KAMAndvSLv8Q*(sakk+Zszem-Df2qw#l-eV@vA{yoKOyqmk6k>7pvzwhtv9$#5OG61+e4N8`JLLk5&{{v%P BYI6Vp literal 0 HcmV?d00001 diff --git a/Netduino.SimpleEmulator/Netduino.SimpleEmulator.csproj b/Netduino.SimpleEmulator/Netduino.SimpleEmulator.csproj index 68e4a63..3ee8490 100644 --- a/Netduino.SimpleEmulator/Netduino.SimpleEmulator.csproj +++ b/Netduino.SimpleEmulator/Netduino.SimpleEmulator.csproj @@ -71,8 +71,13 @@ MSBuild:Compile - + + + + + copy "$(TargetDir)$(TargetFileName)" "$(TargetDir)..\Shell\Extensions\" /y +