Index: branches/PluginInfrastructure Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.AdvancedOptimizationFrontend/3.2/MainForm.cs	(revision 2504)
@@ -93,6 +93,6 @@
     /// is neither a view nor an editor.</exception>
     /// <param name="control">The control to display.</param>
-    public void ShowControl(IControl control) {
-      if (InvokeRequired) Invoke((Action<IControl>)ShowControl, control);
+    public void ShowControl(object control) {
+      if (InvokeRequired) Invoke((Action<object>)ShowControl, control);
       else {
         DockContent content;
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.Core/3.2/Interfaces/IView.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.Core/3.2/Interfaces/IView.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.Core/3.2/Interfaces/IView.cs	(revision 2504)
@@ -29,5 +29,5 @@
   /// An interface for all kinds visual representations of items (objects, operators...).
   /// </summary>
-  public interface IView : IControl {
+  public interface IView {
     /// <summary>
     /// Gets the current item instance.
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ApplicationDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ApplicationDescription.cs	(revision 2503)
+++ 	(revision )
@@ -1,91 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-  /// <summary>
-  /// Class that provides information about an application.
-  /// </summary>
-  [Serializable]
-  public class ApplicationDescription : IApplicationDescription {
-    private string name;
-
-    /// <summary>
-    /// Gets or sets the name of the application.
-    /// </summary>
-    public string Name {
-      get { return name; }
-      set { name = value; }
-    }
-    private Version version;
-
-    /// <summary>
-    /// Gets or sets the version of the application.
-    /// </summary>
-    public Version Version {
-      get { return version; }
-      set { version = value; }
-    }
-    private string description;
-
-    /// <summary>
-    /// Gets or sets the description of the application.
-    /// </summary>
-    public string Description {
-      get { return description; }
-      set { description = value; }
-    }
-
-    private bool autoRestart;
-    /// <summary>
-    /// Gets or sets the boolean flag if the application should be automatically restarted.
-    /// </summary>
-    public bool AutoRestart {
-      get { return autoRestart; }
-      set { autoRestart = value; }
-    }
-
-    private string declaringAssemblyName;
-    /// <summary>
-    /// Gets or sets the name of the assembly that contains the IApplication type.
-    /// </summary>
-    public string DeclaringAssemblyName {
-      get { return declaringAssemblyName; }
-      set { declaringAssemblyName = value; }
-    }
-
-    private string declaringTypeName;
-    /// <summary>
-    /// Gets or sets the name of the type that implements the interface IApplication.
-    /// </summary>
-    public string DeclaringTypeName {
-      get { return declaringTypeName; }
-      set { declaringTypeName = value; }
-    }
-
-    public override string ToString() {
-      return Name;
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationAttribute.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationAttribute.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/ApplicationAttribute.cs	(revision 2504)
@@ -27,42 +27,30 @@
   /// <summary>
   /// This attribute can be used to specify meta data for applications. 
-  /// For example to specify name, version and description of applications.
+  /// For example to specify name and description of applications.
   /// </summary>
   [AttributeUsage(AttributeTargets.Class)]
-  public class ApplicationAttribute : System.Attribute {
+  public sealed class ApplicationAttribute : System.Attribute {
     private string name;
     /// <summary>
-    /// Gets or sets the name of the application.
+    /// Gets the name of the application.
     /// </summary>
     public string Name {
       get { return name; }
-      set { name = value; }
     }
-
-    //private string version;
-    ///// <summary>
-    ///// Gets or sets the version of the application.
-    ///// </summary>
-    //public string Version {
-    //  get { return version; }
-    //  set { version = value; }
-    //}
 
     private string description;
     /// <summary>
-    /// Gets or sets the description of the application.
+    /// Gets the description of the application.
     /// </summary>
     public string Description {
       get { return description; }
-      set { description = value; }
     }
 
     private bool restartOnErrors;
     /// <summary>
-    /// Gets or sets the boolean flag whether the plugin should be automatically restarted when it is closed because of an exception (for services).
+    /// Gets whether the plugin should be automatically restarted when it is closed because of an exception (for services).
     /// </summary>
     public bool RestartOnErrors {
       get { return restartOnErrors; }
-      set { restartOnErrors = value; }
     }
 
@@ -72,5 +60,5 @@
     /// </summary>
     public ApplicationAttribute(string name)
-      : this(name, "") {
+      : this(name, String.Empty) {
     }
 
@@ -84,14 +72,4 @@
     }
 
-    ///// <summary>
-    ///// Initializes a new instance of <see cref="ApplicationAttribute"/>.
-    ///// <param name="name">Name of the application</param>
-    ///// <param name="description">Description of the application</param>
-    ///// <param name="version">Version string of the application</param>
-    ///// </summary>
-    //public ApplicationAttribute(string name, string description, string version)
-    //  : this(name, description, version, false) {
-    //}
-
     /// <summary>
     /// Initializes a new instance of <see cref="ApplicationAttribute"/>.
@@ -102,4 +80,6 @@
     /// </summary>
     public ApplicationAttribute(string name, string description, bool restartOnErrors) {
+      if (name == null) throw new ArgumentNullException("name", "Application name is null.");
+      if (description == null) throw new ArgumentNullException("description", "Application description is null.");
       this.name = name;
       this.description = description;
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/AssemblyBuildDateAttribute.cs	(revision 2504)
@@ -30,13 +30,13 @@
   /// </summary>
   [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
-  public class AssemblyBuildDateAttribute : Attribute {
+  public sealed class AssemblyBuildDateAttribute : Attribute {
     private DateTime buildDate;
     /// <summary>
-    /// Gets or sets the build date.
+    /// Gets the build date.
     /// </summary>
     public DateTime BuildDate {
       get { return buildDate; }
-      set { buildDate = value; }
     }
+
     /// <summary>
     /// Initializes a new instance of <see cref="AssemblyBuildDateAttribute"/> with the given 
@@ -44,10 +44,9 @@
     /// </summary>
     /// <exception cref="FormatException">Thrown when the time stamp could not be parsed as build date.</exception>
-    /// <param name="timeStamp">The build date of the assembly.</param>
-    public AssemblyBuildDateAttribute(string timeStamp)
+    /// <param name="buildDate">The build date of the assembly.</param>
+    public AssemblyBuildDateAttribute(string buildDate)
       : base() {
-
-      if(!DateTime.TryParse(timeStamp, out buildDate)) {
-        throw new FormatException("Can't parse AssemblyBuildDate " + timeStamp);
+      if (!DateTime.TryParse(buildDate, out this.buildDate)) {
+        throw new FormatException("Can't parse AssemblyBuildDate " + buildDate);
       }
     }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginAttribute.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginAttribute.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginAttribute.cs	(revision 2504)
@@ -27,33 +27,22 @@
   /// <summary>
   /// This attribute can be used to specify meta data for plugins. 
-  /// For example to specify name, version and description of plugins.
+  /// For example to specify name and description of plugins.
   /// </summary>
   [AttributeUsage(AttributeTargets.Class)]
-  public class PluginAttribute : System.Attribute {
+  public sealed class PluginAttribute : System.Attribute {
     private string name;
     /// <summary>
-    /// Gets or sets the name of the plugin.
+    /// Gets the name of the plugin.
     /// </summary>
     public string Name {
       get { return name; }
-      // set { name = value; }
     }
-
-    //private string version;
-    ///// <summary>
-    ///// Gets or sets the version of the plugin.
-    ///// </summary>
-    //public string Version {
-    //  get { return version; }
-    //  set { version = value; }
-    //}
 
     private string description;
     /// <summary>
-    /// Gets or sets the description of the plugin.
+    /// Gets the description of the plugin.
     /// </summary>
     public string Description {
       get { return description; }
-      // set { description = value; }
     }
 
@@ -75,16 +64,4 @@
       this.description = description;
     }
-
-    ///// <summary>
-    ///// Initializes a new instance of <see cref="PluginDescriptionAttribute"/>.
-    ///// <param name="name">Name of the plugin</param>
-    ///// <param name="description">Description of the plugin</param>
-    ///// <param name="version">Version string of the plugin</param>
-    ///// </summary>
-    //public PluginDescriptionAttribute(string name, string description, string version) {
-    //  this.name = name;
-    //  this.version = version;
-    //  this.description = description;
-    //}
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginDependencyAttribute.cs	(revision 2504)
@@ -33,9 +33,8 @@
 
     /// <summary>
-    /// Gets or sets the name of the plugin that is needed to load a plugin.
+    /// Gets the name of the plugin that is needed to load a plugin.
     /// </summary>
     public string Dependency {
       get { return dependency; }
-      // set { dependency = value; }
     }
 
@@ -45,4 +44,5 @@
     /// </summary>
     public PluginDependencyAttribute(string dependency) {
+      if (string.IsNullOrEmpty(dependency)) throw new ArgumentException("Dependency is null or empty.", "dependency");
       this.dependency = dependency;
     }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Attributes/PluginFileAttribute.cs	(revision 2504)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Text;
+using System.IO;
 
 namespace HeuristicLab.PluginInfrastructure {
@@ -40,33 +41,33 @@
   /// </summary>
   [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
-  public class PluginFileAttribute : System.Attribute {
-    private string filename;
+  public sealed class PluginFileAttribute : System.Attribute {
+    private string fileName;
 
     /// <summary>
-    /// Gets or sets the filename of the plugin.
+    /// Gets the file name of the plugin.
     /// </summary>
-    public string Filename {
-      get { return filename; }
-      //set { filename = value; }
+    public string FileName {
+      get { return fileName; }
     }
 
-    private PluginFileType filetype = PluginFileType.Data;
+    private PluginFileType fileType = PluginFileType.Data;
 
     /// <summary>
-    /// Gets or sets the filetype of the plugin file.
+    /// Gets the file type of the plugin file.
     /// </summary>
-    public PluginFileType Filetype {
-      get { return filetype; }
-      //set { filetype = value; }
+    public PluginFileType FileType {
+      get { return fileType; }
     }
 
     /// <summary>
     /// Initializes a new instance of <see cref="PluginFileAttribute"/>.
-    /// <param name="filename">Name of the file</param>
-    /// <param name="type">Type of the file (Assembly, Executable, Data, License)</param>
+    /// <param name="fileName">Name of the file</param>
+    /// <param name="fileType">Type of the file (Assembly, NativeDll, Data, License)</param>
     /// </summary>
-    public PluginFileAttribute(string filename, PluginFileType type) {
-      this.filename = filename;
-      this.filetype = type;
+    public PluginFileAttribute(string fileName, PluginFileType fileType) {
+      if (string.IsNullOrEmpty(fileName)) throw new ArgumentException("File name is empty.", "fileName");
+      // NB: doesn't check if the file actually exists
+      this.fileName = fileName;
+      this.fileType = fileType;
     }
   }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 2504)
@@ -27,5 +27,5 @@
 namespace HeuristicLab.PluginInfrastructure {
   /// <summary>
-  /// Default implementation for the IApplication interface.
+  /// Abstract base implementation for the IApplication interface.
   /// </summary>
   public abstract class ApplicationBase : IApplication {
@@ -33,5 +33,5 @@
     /// Initializes a new instance of <see cref="ApplicationBase"/>.
     /// </summary>
-    public ApplicationBase() { }
+    protected ApplicationBase() { }
 
     private ApplicationAttribute ApplicationAttribute {
@@ -40,5 +40,7 @@
 
         // exactly one attribute of the type ClassInfoAttribute must be given
-        if (appAttributes.Length != 1) {
+        if (appAttributes.Length == 0) {
+          throw new InvalidPluginException("ApplicationAttribute on type " + this.GetType() + " is missing.");
+        } else if (appAttributes.Length > 1) {
           throw new InvalidPluginException("Found multiple ApplicationAttributes on type " + this.GetType());
         }
@@ -58,33 +60,9 @@
 
     /// <summary>
-    /// Gets the version of the application.
-    /// </summary>
-    public Version Version {
-      get {
-        return this.GetType().Assembly.GetName().Version;
-      }
-    }
-
-    /// <summary>
     /// Gets the description of the application.
     /// </summary>
     public string Description {
       get {
-        var appDescAttribute = ApplicationAttribute;
-        // if the description is not explicitly set in the attribute then the name of the application is used as default
-        if (string.IsNullOrEmpty(appDescAttribute.Description)) {
-          return appDescAttribute.Name;
-        } else {
-          return appDescAttribute.Description;
-        }
-      }
-    }
-
-    /// <summary>
-    /// Gets the boolean flag whether the application should by restarted after exceptions.
-    /// </summary>
-    public bool RestartOnErrors {
-      get {
-        return ApplicationAttribute.RestartOnErrors;
+        return ApplicationAttribute.Description;
       }
     }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 2504)
@@ -29,5 +29,5 @@
 namespace HeuristicLab.PluginInfrastructure {
   /// <summary>
-  /// Default implementation of the IPlugin interface.
+  /// Abstract base implementation of the IPlugin interface.
   /// </summary>
   public abstract class PluginBase : IPlugin {
@@ -35,5 +35,5 @@
     /// Initializes a new instance of <see cref="PluginBase"/>.
     /// </summary>
-    public PluginBase() { }
+    protected PluginBase() { }
 
     private PluginAttribute PluginAttribute {
@@ -41,5 +41,7 @@
         object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(PluginAttribute), false);
         // exactly one attribute of the type PluginDescriptionAttribute must be given
-        if (pluginAttributes.Length != 1) {
+        if (pluginAttributes.Length == 0) {
+          throw new InvalidPluginException("PluginAttribute on type " + this.GetType() + " is missing.");
+        } else if (pluginAttributes.Length > 1) {
           throw new InvalidPluginException("Found multiple PluginAttributes on type " + this.GetType());
         }
@@ -56,15 +58,4 @@
     }
 
-
-    /// <inheritdoc/>
-    public IEnumerable<string> FileNames {
-      get {
-        // get all attributes of type PluginFileAttribute, multiple usage is possible
-        return from x in this.GetType().GetCustomAttributes(typeof(PluginFileAttribute), false)
-               let pluginFileAttr = (PluginFileAttribute)x
-               select pluginFileAttr.Filename;
-      }
-    }
-
     /// <inhertitdoc>
     public virtual void OnLoad() { }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ControlManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ControlManager.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/ControlManager.cs	(revision 2504)
@@ -30,5 +30,5 @@
 namespace HeuristicLab.PluginInfrastructure {
 
-  public class ControlManager {
+  public static class ControlManager {
     // singleton: only one control manager allowed in each application (i.e. AppDomain)
     private static IControlManager controlManager;
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/DefaultApplicationManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/DefaultApplicationManager.cs	(revision 2503)
+++ 	(revision )
@@ -1,239 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Security.Policy;
-using System.Reflection;
-using System.Diagnostics;
-using System.Security.Permissions;
-using System.Security;
-using System.Linq;
-using System.IO;
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-
-  public sealed class DefaultApplicationManager : MarshalByRefObject, IApplicationManager {
-    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
-    internal event EventHandler<PluginInfrastructureEventArgs> PluginUnloaded;
-
-    // cache for the AssemblyResolveEvent 
-    // which must be handled when assemblies are loaded dynamically after the application start
-    private Dictionary<string, Assembly> loadedAssemblies;
-
-    private List<IPlugin> loadedPlugins;
-
-    private List<IPluginDescription> plugins;
-    /// <summary>
-    /// Gets all plugins.
-    /// </summary>
-    public IEnumerable<IPluginDescription> Plugins {
-      get { return plugins; }
-      internal set { plugins = new List<IPluginDescription>(value); }
-    }
-
-    private List<IApplicationDescription> applications;
-    /// <summary>
-    /// Gets all installed applications.
-    /// </summary>
-    public IEnumerable<IApplicationDescription> Applications {
-      get { return applications; }
-    }
-
-    internal DefaultApplicationManager()
-      : base() {
-      loadedAssemblies = new Dictionary<string, Assembly>();
-      loadedPlugins = new List<IPlugin>();
-      // needed for the special case when assemblies are loaded dynamically via LoadAssemblies()
-      AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
-        if (loadedAssemblies.ContainsKey(args.Name)) {
-          return loadedAssemblies[args.Name];
-        }
-        return null;
-      };
-    }
-
-    internal void PrepareApplicationDomain(IEnumerable<IApplicationDescription> apps, IEnumerable<IPluginDescription> plugins) {
-      this.plugins = new List<IPluginDescription>(plugins);
-      this.applications = new List<IApplicationDescription>(apps);
-      PluginInfrastructure.ApplicationManager.RegisterApplicationManager(this);
-      LoadPlugins(plugins);
-    }
-
-    private void LoadPlugins(IEnumerable<IPluginDescription> plugins) {
-      // load all loadable plugins (all dependencies available) into the execution context
-      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
-        foreach (string assembly in desc.Assemblies) {
-          var asm = Assembly.LoadFrom(assembly);
-
-          // instantiate and load all plugins in this assembly
-          foreach (var plugin in GetInstances<IPlugin>(asm)) {
-            plugin.OnLoad();
-            loadedPlugins.Add(plugin);
-          }
-        }
-        OnPluginLoaded(new PluginInfrastructureEventArgs("Plugin loaded", desc));
-        desc.Load();
-      }
-    }
-
-    internal void Run(IApplicationDescription appInfo) {
-      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
-      try {
-        runnablePlugin.Run();
-      }
-      catch (Exception e) {
-        throw new Exception(String.Format(
-          "Unexpected exception caught: \"{0}\"\r\n" +
-          "Type: {1}\r\n" +
-          "Plugin {2}:\r\n{3}",
-          e.Message,
-          e.GetType().FullName,
-          appInfo.Name,
-          e.ToString()));
-      }
-      finally {
-        // unload plugins in reverse order
-        foreach (var plugin in loadedPlugins.Reverse<IPlugin>()) {
-          plugin.OnUnload();
-        }
-        foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
-          desc.Unload();
-          OnPluginUnloaded(new PluginInfrastructureEventArgs("Plugin unloaded", desc));
-        }
-      }
-    }
-
-    /// <summary>
-    /// Loads assemblies dynamically from a byte array
-    /// </summary>
-    /// <param name="plugins">bytearray of all assemblies that should be loaded</param>
-    public void LoadAssemblies(IEnumerable<byte[]> assemblies) {
-      foreach (byte[] asm in assemblies) {
-        Assembly loadedAsm = Assembly.Load(asm);
-        RegisterLoadedAssembly(loadedAsm);
-      }
-    }
-
-    // register assembly in the assembly cache for the AssemblyResolveEvent
-    private void RegisterLoadedAssembly(Assembly asm) {
-      loadedAssemblies.Add(asm.FullName, asm);
-      loadedAssemblies.Add(asm.GetName().Name, asm); // add short name
-    }
-
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
-      return from t in GetTypes(typeof(T), plugin)
-             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
-             select (T)Activator.CreateInstance(t);
-    }
-    /// <summary>
-    /// Creates an instance of all types declared in assembly <param name="asm"/> that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <param name="asm">Declaring assembly.</param>
-    /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
-      return from t in GetTypes(typeof(T), asm)
-             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
-             select (T)Activator.CreateInstance(t);
-    }
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type
-    /// </summary>
-    /// <typeparam name="T">Most general type.</typeparam>
-    /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<T> GetInstances<T>() where T : class {
-      return from i in GetInstances(typeof(T))
-             select (T)i;
-    }
-
-    /// <summary>
-    /// Creates an instance of all types that are subtypes or the same type of the specified type
-    /// </summary>
-    /// <typeparam name="type">Most general type.</typeparam>
-    /// <returns>Enumerable of the created instances.</returns>
-    public IEnumerable<object> GetInstances(Type type) {
-      return from t in GetTypes(type)
-             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
-             select Activator.CreateInstance(t);
-    }
-
-    /// <summary>
-    /// Finds all types that are subtypes or equal to the specified type.
-    /// </summary>
-    /// <param name="type">Most general type for which to find matching types.</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    public IEnumerable<Type> GetTypes(Type type) {
-      return from asm in AppDomain.CurrentDomain.GetAssemblies()
-             from t in GetTypes(type, asm)
-             select t;
-    }
-
-    /// <summary>
-    /// Finds all types that are subtypes or equal to the specified type if they are part of the given
-    /// <paramref name="plugin"/>.
-    /// </summary>
-    /// <param name="type">Most general type for which to find matching types.</param>
-    /// <param name="plugin">The plugin the subtypes must be part of.</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    public IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
-      return from asm in AppDomain.CurrentDomain.GetAssemblies()
-             where pluginDescription.Assemblies.Any(asmPath => Path.GetFullPath(asmPath) == Path.GetFullPath(asm.Location))
-             from t in GetTypes(type, asm)
-             select t;
-    }
-
-    /// <summary>
-    /// Gets types that are assignable (same of subtype) to the specified type only from the given assembly.
-    /// </summary>
-    /// <param name="type">Most general type we want to find.</param>
-    /// <param name="assembly">Assembly that should be searched for types.</param>
-    /// <returns>Enumerable of the discovered types.</returns>
-    private IEnumerable<Type> GetTypes(Type type, Assembly assembly) {
-      return from t in assembly.GetTypes()
-             where type.IsAssignableFrom(t)
-             select t;
-    }
-
-    private void OnPluginLoaded(PluginInfrastructureEventArgs e) {
-      if (PluginLoaded != null) PluginLoaded(this, e);
-    }
-
-    private void OnPluginUnloaded(PluginInfrastructureEventArgs e) {
-      if (PluginUnloaded != null) PluginUnloaded(this, e);
-    }
-
-    // infinite lease time
-    /// <summary>
-    /// Initializes the life time service with infinite lease time.
-    /// </summary>
-    /// <returns><c>null</c>.</returns>
-    public override object InitializeLifetimeService() {
-      return null;
-    }
-  }
-}
-
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 2504)
@@ -86,5 +86,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="ApplicationDescription.cs" />
     <Compile Include="Attributes\ApplicationAttribute.cs" />
     <Compile Include="Attributes\AssemblyBuildDateAttribute.cs" />
@@ -94,9 +93,7 @@
     <Compile Include="BaseClasses\ApplicationBase.cs" />
     <Compile Include="BaseClasses\PluginBase.cs" />
-    <Compile Include="DefaultApplicationManager.cs" />
     <Compile Include="Interfaces\IApplicationManager.cs" />
     <Compile Include="Interfaces\IApplicationDescription.cs" />
     <Compile Include="Interfaces\IApplication.cs" />
-    <Compile Include="Interfaces\IControl.cs" />
     <Compile Include="Interfaces\IControlManager.cs" />
     <Compile Include="Interfaces\IPlugin.cs" />
@@ -104,11 +101,13 @@
     <Compile Include="Interfaces\IPluginDescription.cs" />
     <Compile Include="InvalidPluginException.cs" />
-    <Compile Include="PluginDescription.cs" />
+    <Compile Include="Manager\ApplicationDescription.cs" />
+    <Compile Include="Manager\DefaultApplicationManager.cs" />
+    <Compile Include="Manager\PluginDescription.cs" />
+    <Compile Include="Manager\PluginInfrastructureEventArgs.cs" />
+    <Compile Include="Manager\PluginManager.cs" />
+    <Compile Include="Manager\PluginValidator.cs" />
     <Compile Include="PluginDescriptionIterator.cs" />
     <Compile Include="ApplicationManager.cs" />
-    <Compile Include="PluginInfrastructureEventArgs.cs" />
-    <Compile Include="PluginManager.cs" />
     <Compile Include="PluginState.cs" />
-    <Compile Include="PluginValidator.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <EmbeddedResource Include="Properties\Resources.resx">
@@ -116,4 +115,10 @@
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
       <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Starter\MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Starter\SplashScreen.resx">
+      <DependentUpon>SplashScreen.cs</DependentUpon>
     </EmbeddedResource>
     <Compile Include="Properties\Resources.Designer.cs">
@@ -134,7 +139,23 @@
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
+    <Compile Include="Starter\MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Starter\MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Starter\SplashScreen.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Starter\SplashScreen.Designer.cs">
+      <DependentUpon>SplashScreen.cs</DependentUpon>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
-    <Folder Include="Manager\" />
+    <Content Include="Resources\Details.gif" />
+    <Content Include="Resources\HeuristicLab.ico" />
+    <Content Include="Resources\LargeIcons.gif" />
+    <Content Include="Resources\List.gif" />
+    <Content Include="Resources\Logo_white.gif" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 2504)
@@ -27,7 +27,5 @@
   public interface IApplication {
     string Name { get; }
-    Version Version { get; }
     string Description { get; }
-    bool RestartOnErrors { get; }
     void Run();
   }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationDescription.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationDescription.cs	(revision 2504)
@@ -24,9 +24,16 @@
 
 namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Represents meta-data of an application.
+  /// </summary>
   public interface IApplicationDescription {
+    /// <summary>
+    /// Gets the name of the application.
+    /// </summary>
     string Name { get; }
-    Version Version { get; }
-    string DeclaringAssemblyName { get; }
-    string DeclaringTypeName { get; }
+    /// <summary>
+    /// Gets the description of the application.
+    /// </summary>
+    string Description { get; }
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationManager.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IApplicationManager.cs	(revision 2504)
@@ -31,14 +31,46 @@
   /// </summary>
   public interface IApplicationManager {
+    /// <summary>
+    /// Gets all discovered plugins.
+    /// </summary>
     IEnumerable<IPluginDescription> Plugins { get; }
+    /// <summary>
+    /// Gets all discovered applications.
+    /// </summary>
     IEnumerable<IApplicationDescription> Applications { get; }
 
+    /// <summary>
+    /// Dynamically loads assemblies given in binary form.
+    /// </summary>
+    /// <param name="assemblies">Assemblies that should be loaded in binary form.</param>
     void LoadAssemblies(IEnumerable<byte[]> assemblies);
 
+    /// <summary>
+    /// Discovers and creates instances of <typeparamref name="T"/> and all types implementing or inheriting <typeparamref name="T"/> (directly and indirectly) declared in any assembly of <paramref name="plugin"/>.
+    /// </summary>
+    /// <typeparam name="T">The type or super-type to discover.</typeparam>
+    /// <param name="plugin">The declaring plugin.</param>
+    /// <returns>An enumerable of instances of the discovered types.</returns>
     IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class;
+    /// <summary>
+    /// Discovers and creates instances of <typeparamref name="T"/> and all types implementing or inheriting <typeparamref name="T"/> (directly and indirectly).
+    /// </summary>
+    /// <typeparam name="T">The type or super-type to discover.</typeparam>
+    /// <returns>An enumerable of instances of the discovered types.</returns>
     IEnumerable<T> GetInstances<T>() where T : class;
 
+    /// <summary>
+    /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly).
+    /// </summary>
+    /// <param name="type">The type to discover.</param>
+    /// <returns>An enumerable of discovered types.</returns>
     IEnumerable<Type> GetTypes(Type type);
-    IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription);
+    /// <summary>
+    /// Discovers all types implementing or inheriting <paramref name="type"/> (directly and indirectly) that are declaed in any assembly of <paramref name="plugin"/>.
+    /// </summary>
+    /// <param name="type">The type to discover.</param>
+    /// <param name="plugin">The declaring plugin.</param>
+    /// <returns>An enumerable of discovered types.</returns>
+    IEnumerable<Type> GetTypes(Type type, IPluginDescription plugin);
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControl.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControl.cs	(revision 2503)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.PluginInfrastructure {
-  /// <summary>
-  /// Interface for controls.
-  /// </summary>
-  public interface IControl { }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs	(revision 2504)
@@ -34,5 +34,5 @@
     /// </summary>
     /// <param name="control">The control to display.</param>
-    void ShowControl(IControl control);
+    void ShowControl(object control);
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 2504)
@@ -28,7 +28,6 @@
   /// Represents a plugin.
   /// Plugin developers have to include exactly one class that implements this interface in one of the
-  /// assemblies of the plugin. Plugin developers can use the properties of this interface to store
-  /// plugin data (name, version, files, update location ...).
-  /// The method OnLoad() is called by the framework when the plugin is loaded (application start).
+  /// assemblies of the plugin. 
+  /// OnLoad() and OnUnLoad() are called by the framework when the plugin is loaded/unloaded.
   /// </summary>
   public interface IPlugin {
@@ -37,12 +36,4 @@
     /// </summary>
     string Name { get; }
-    ///// <summary>
-    ///// Gets the version of the plugin.
-    ///// </summary>
-    //Version Version { get; }
-    /// <summary>
-    /// Gets all file names that are bundled with this plugin including all assembly files (*.dll)
-    /// </summary>
-    IEnumerable<string> FileNames { get; }
 
     /// <summary>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Interfaces/IPluginDescription.cs	(revision 2504)
@@ -24,16 +24,12 @@
 
 namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Represents meta-data of a plugin.
+  /// </summary>
   public interface IPluginDescription {
+    /// <summary>
+    /// Gets the name of the plugin.
+    /// </summary>
     string Name { get; }
-    Version Version { get; }
-    DateTime BuildDate { get; }
-    PluginState PluginState { get; }
-    IEnumerable<string> Files { get; }
-    IEnumerable<IPluginDescription> Dependencies { get; }
-    IEnumerable<string> Assemblies { get; }
-    void Enable();
-    void Disable();
-    void Load();
-    void Unload();
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 2504)
@@ -23,4 +23,5 @@
 using System.Collections.Generic;
 using System.Text;
+using System.Runtime.Serialization;
 
 namespace HeuristicLab.PluginInfrastructure {
@@ -28,6 +29,10 @@
   /// Exception class for invalid plugins.
   /// </summary>
-  public class InvalidPluginException : Exception {
+  [Serializable]
+  public sealed class InvalidPluginException : Exception {
+    public InvalidPluginException() : base() { }
     public InvalidPluginException(string message) : base(message) { }
+    public InvalidPluginException(string message, Exception exception) : base(message, exception) { }
+    private InvalidPluginException(SerializationInfo info, StreamingContext contex) : base(info, contex) { }
   }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/ApplicationDescription.cs	(revision 2504)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  /// <summary>
+  /// Class that provides information about an application.
+  /// </summary>
+  [Serializable]
+  internal sealed class ApplicationDescription : IApplicationDescription {
+    private string name;
+
+    /// <summary>
+    /// Gets or sets the name of the application.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+
+    /// <summary>
+    /// Gets or sets the version of the application.
+    /// </summary>
+    internal Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private string description;
+
+    /// <summary>
+    /// Gets or sets the description of the application.
+    /// </summary>
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    private bool autoRestart;
+    /// <summary>
+    /// Gets or sets the boolean flag if the application should be automatically restarted.
+    /// </summary>
+    internal bool AutoRestart {
+      get { return autoRestart; }
+      set { autoRestart = value; }
+    }
+
+    private string declaringAssemblyName;
+    /// <summary>
+    /// Gets or sets the name of the assembly that contains the IApplication type.
+    /// </summary>
+    internal string DeclaringAssemblyName {
+      get { return declaringAssemblyName; }
+      set { declaringAssemblyName = value; }
+    }
+
+    private string declaringTypeName;
+    /// <summary>
+    /// Gets or sets the name of the type that implements the interface IApplication.
+    /// </summary>
+    internal string DeclaringTypeName {
+      get { return declaringTypeName; }
+      set { declaringTypeName = value; }
+    }
+
+    public override string ToString() {
+      return Name;
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/DefaultApplicationManager.cs	(revision 2504)
@@ -0,0 +1,229 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Security.Policy;
+using System.Reflection;
+using System.Diagnostics;
+using System.Security.Permissions;
+using System.Security;
+using System.Linq;
+using System.IO;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+
+  internal sealed class DefaultApplicationManager : MarshalByRefObject, IApplicationManager {
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginUnloaded;
+
+    // cache for the AssemblyResolveEvent 
+    // which must be handled when assemblies are loaded dynamically after the application start
+    private Dictionary<string, Assembly> loadedAssemblies;
+
+    private List<IPlugin> loadedPlugins;
+
+    private List<PluginDescription> plugins;
+    /// <summary>
+    /// Gets all plugins.
+    /// </summary>
+    public IEnumerable<IPluginDescription> Plugins {
+      get { return plugins.Cast<IPluginDescription>(); }
+    }
+
+    private List<ApplicationDescription> applications;
+    /// <summary>
+    /// Gets all installed applications.
+    /// </summary>
+    public IEnumerable<IApplicationDescription> Applications {
+      get { return applications.Cast<IApplicationDescription>(); }
+    }
+
+    internal DefaultApplicationManager()
+      : base() {
+      loadedAssemblies = new Dictionary<string, Assembly>();
+      loadedPlugins = new List<IPlugin>();
+      // needed for the special case when assemblies are loaded dynamically via LoadAssemblies()
+      AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
+        if (loadedAssemblies.ContainsKey(args.Name)) {
+          return loadedAssemblies[args.Name];
+        }
+        return null;
+      };
+    }
+
+    internal void PrepareApplicationDomain(IEnumerable<ApplicationDescription> apps, IEnumerable<PluginDescription> plugins) {
+      this.plugins = new List<PluginDescription>(plugins);
+      this.applications = new List<ApplicationDescription>(apps);
+      PluginInfrastructure.ApplicationManager.RegisterApplicationManager(this);
+      LoadPlugins(plugins);
+    }
+
+    private void LoadPlugins(IEnumerable<PluginDescription> plugins) {
+      // load all loadable plugins (all dependencies available) into the execution context
+      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
+        foreach (string assembly in desc.Assemblies) {
+          var asm = Assembly.LoadFrom(assembly);
+
+          // instantiate and load all plugins in this assembly
+          foreach (var plugin in GetInstances<IPlugin>(asm)) {
+            plugin.OnLoad();
+            loadedPlugins.Add(plugin);
+          }
+        }
+        OnPluginLoaded(new PluginInfrastructureEventArgs("Plugin loaded", desc));
+        desc.Load();
+      }
+    }
+
+    internal void Run(ApplicationDescription appInfo) {
+      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.DeclaringAssemblyName, appInfo.DeclaringTypeName).Unwrap();
+      try {
+        runnablePlugin.Run();
+      }
+      finally {
+        // unload plugins in reverse order
+        foreach (var plugin in loadedPlugins.Reverse<IPlugin>()) {
+          plugin.OnUnload();
+        }
+        foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(plugins.Where(x => x.PluginState != PluginState.Disabled))) {
+          desc.Unload();
+          OnPluginUnloaded(new PluginInfrastructureEventArgs("Plugin unloaded", desc));
+        }
+      }
+    }
+
+    /// <summary>
+    /// Loads assemblies dynamically from a byte array
+    /// </summary>
+    /// <param name="plugins">bytearray of all assemblies that should be loaded</param>
+    public void LoadAssemblies(IEnumerable<byte[]> assemblies) {
+      foreach (byte[] asm in assemblies) {
+        Assembly loadedAsm = Assembly.Load(asm);
+        RegisterLoadedAssembly(loadedAsm);
+      }
+    }
+
+    // register assembly in the assembly cache for the AssemblyResolveEvent
+    private void RegisterLoadedAssembly(Assembly asm) {
+      loadedAssemblies.Add(asm.FullName, asm);
+      loadedAssemblies.Add(asm.GetName().Name, asm); // add short name
+    }
+
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <returns>Enumerable of the created instances.</returns>
+    public IEnumerable<T> GetInstances<T>(IPluginDescription plugin) where T : class {
+      return from t in GetTypes(typeof(T), plugin)
+             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
+             select (T)Activator.CreateInstance(t);
+    }
+    /// <summary>
+    /// Creates an instance of all types declared in assembly <param name="asm"/> that are subtypes or the same type of the specified type and declared in <paramref name="plugin"/>
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <param name="asm">Declaring assembly.</param>
+    /// <returns>Enumerable of the created instances.</returns>
+    private static IEnumerable<T> GetInstances<T>(Assembly asm) where T : class {
+      return from t in GetTypes(typeof(T), asm)
+             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
+             select (T)Activator.CreateInstance(t);
+    }
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <returns>Enumerable of the created instances.</returns>
+    public IEnumerable<T> GetInstances<T>() where T : class {
+      return from i in GetInstances(typeof(T))
+             select (T)i;
+    }
+
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type
+    /// </summary>
+    /// <typeparam name="type">Most general type.</typeparam>
+    /// <returns>Enumerable of the created instances.</returns>
+    public IEnumerable<object> GetInstances(Type type) {
+      return from t in GetTypes(type)
+             where !t.IsAbstract && !t.IsInterface && !t.HasElementType
+             select Activator.CreateInstance(t);
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    public IEnumerable<Type> GetTypes(Type type) {
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             from t in GetTypes(type, asm)
+             select t;
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type if they are part of the given
+    /// <paramref name="plugin"/>.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <param name="plugin">The plugin the subtypes must be part of.</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    public IEnumerable<Type> GetTypes(Type type, IPluginDescription pluginDescription) {
+      PluginDescription pluginDesc = (PluginDescription)pluginDescription;
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             where pluginDesc.Assemblies.Any(asmPath => Path.GetFullPath(asmPath) == Path.GetFullPath(asm.Location))
+             from t in GetTypes(type, asm)
+             select t;
+    }
+
+    /// <summary>
+    /// Gets types that are assignable (same of subtype) to the specified type only from the given assembly.
+    /// </summary>
+    /// <param name="type">Most general type we want to find.</param>
+    /// <param name="assembly">Assembly that should be searched for types.</param>
+    /// <returns>Enumerable of the discovered types.</returns>
+    private static IEnumerable<Type> GetTypes(Type type, Assembly assembly) {
+      return from t in assembly.GetTypes()
+             where type.IsAssignableFrom(t)
+             select t;
+    }
+
+    private void OnPluginLoaded(PluginInfrastructureEventArgs e) {
+      if (PluginLoaded != null) PluginLoaded(this, e);
+    }
+
+    private void OnPluginUnloaded(PluginInfrastructureEventArgs e) {
+      if (PluginUnloaded != null) PluginUnloaded(this, e);
+    }
+
+    // infinite lease time
+    /// <summary>
+    /// Initializes the life time service with infinite lease time.
+    /// </summary>
+    /// <returns><c>null</c>.</returns>
+    public override object InitializeLifetimeService() {
+      return null;
+    }
+  }
+}
+
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginDescription.cs	(revision 2504)
@@ -0,0 +1,170 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  /// <summary>
+  /// Holds information of loaded plugins that is needed for plugin management.
+  /// Used to represent plugins in AppDomains without loading the plugin assemblies.
+  /// </summary>
+  [Serializable]
+  internal sealed class PluginDescription : IPluginDescription {
+    private int nTimesLoaded;
+
+    private string name;
+    /// <summary>
+    /// Gets or sets the name of the plugin.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      internal set { name = value; }
+    }
+    private Version version;
+    /// <summary>
+    /// Gets or sets the version of the plugin.
+    /// </summary>
+    internal Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private DateTime buildDate;
+    /// <summary>
+    /// Gets or sets the build date of the plugin.
+    /// </summary>
+    internal DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+
+    private PluginState pluginState;
+    /// <summary>
+    /// Gets or sets the plugin state.
+    /// </summary>
+    public PluginState PluginState {
+      get { return pluginState; }
+    }
+
+
+    private List<string> files = new List<string>();
+    /// <summary>
+    /// Gets the names of all files that belong to this plugin.
+    /// These files are deleted when the plugin is removed or updated.
+    /// </summary>
+    internal IEnumerable<string> Files {
+      get { return files; }
+    }
+
+    internal void AddFiles(IEnumerable<string> fileNames) {
+      files.AddRange(fileNames);
+    }
+
+    private List<PluginDescription> dependencies = new List<PluginDescription>();
+    /// <summary>
+    /// Gets all dependencies of the plugin.
+    /// </summary>
+    internal IEnumerable<PluginDescription> Dependencies {
+      get { return dependencies; }
+    }
+
+    internal void AddDependency(PluginDescription dependency) {
+      dependencies.Add(dependency);
+    }
+
+
+    private List<string> assemblies = new List<string>();
+    /// <summary>
+    /// Gets the names of the assemblies that belong to this plugin.
+    /// </summary>
+    internal IEnumerable<string> Assemblies {
+      get { return assemblies; }
+      // set { assemblies = value; }
+    }
+
+    internal void AddAssemblies(IEnumerable<string> assemblyNames) {
+      assemblies.AddRange(assemblyNames);
+    }
+
+    internal PluginDescription() {
+      pluginState = PluginState.Undefined;
+    }
+
+    internal void Disable() {
+      if (pluginState != PluginState.Undefined)
+        throw new InvalidOperationException("Can't disabled a plugin in state " + pluginState);
+      pluginState = PluginState.Disabled;
+    }
+
+    internal void Enable() {
+      if (pluginState != PluginState.Undefined)
+        throw new InvalidOperationException("Can't enabled a plugin in state " + pluginState);
+      pluginState = PluginState.Enabled;
+    }
+
+    internal void Load() {
+      if (!(pluginState == PluginState.Enabled || pluginState == PluginState.Loaded))
+        throw new InvalidOperationException("Can't loaded a plugin in state " + pluginState);
+      pluginState = PluginState.Loaded;
+      nTimesLoaded++;
+    }
+
+    internal void Unload() {
+      if (pluginState != PluginState.Loaded)
+        throw new InvalidOperationException("Can't unload a plugin in state " + pluginState);
+      nTimesLoaded--;
+      if (nTimesLoaded == 0) pluginState = PluginState.Enabled;
+    }
+
+
+    /// <summary>
+    /// Gets the string representation of the plugin.
+    /// </summary>
+    /// <returns>The name of the plugin.</returns>
+    public override string ToString() {
+      return Name;
+    }
+
+    // equals and hashcode have to be implemented because we want to compare PluginDescriptions from 
+    // different AppDomains and serialization destroys reference equality
+    /// <summary>
+    /// Checks whether the given object is equal to the current plugin.
+    /// </summary>
+    /// <param name="obj">The object to compare.</param>
+    /// <returns><c>true</c> if it is equal, <c>false</c> otherwise.</returns>
+    public override bool Equals(object obj) {
+      PluginDescription other = obj as PluginDescription;
+      if (other == null) return false;
+
+      return other.Name == this.Name && other.Version == this.Version;
+    }
+    /// <summary>
+    /// Gets the hash code of the current plugin.
+    /// </summary>
+    /// <returns>The hash code of the plugin.</returns>
+    public override int GetHashCode() {
+      if (version != null) {
+        return name.GetHashCode() + version.GetHashCode();
+      } else return name.GetHashCode();
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginInfrastructureEventArgs.cs	(revision 2504)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  // to be replaced by GenericEventArgs
+  [Serializable]
+  internal sealed class PluginInfrastructureEventArgs : EventArgs {
+    internal string Action { get; private set; }
+    internal object Entity { get; private set; }
+    internal PluginInfrastructureEventArgs(string action, object entity) {
+      this.Action = action;
+      this.Entity = entity;
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginManager.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginManager.cs	(revision 2504)
@@ -0,0 +1,168 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Security.Policy;
+using System.Reflection;
+using System.Diagnostics;
+using System.Security.Permissions;
+using System.Security;
+using System.Linq;
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+
+  // must extend MarshalByRefObject because of event passing between Loader and PluginManager (each in it's own AppDomain)
+  /// <summary>
+  /// Class to manage different plugins.
+  /// </summary>
+  internal sealed class PluginManager : MarshalByRefObject {
+    /// <summary>
+    /// Event handler for actions in the plugin manager.
+    /// </summary>
+    internal event EventHandler<PluginInfrastructureEventArgs> Action;
+
+    private string pluginDir;
+
+    private List<PluginDescription> plugins;
+
+    private List<ApplicationDescription> applications;
+    /// <summary>
+    /// Gets all installed applications.
+    /// </summary>
+    internal IEnumerable<ApplicationDescription> Applications {
+      get { return applications; }
+    }
+
+    private object locker = new object();
+    private bool initialized;
+
+    internal PluginManager(string pluginDir) {
+      this.pluginDir = pluginDir;
+      plugins = new List<PluginDescription>();
+      applications = new List<ApplicationDescription>();
+      Reset();
+    }
+
+    internal void Reset() {
+      initialized = false;
+      if (plugins != null && plugins.Any(x => x.PluginState == PluginState.Loaded)) throw new InvalidOperationException("Reset() is not allowed while applications are active.");
+      plugins.Clear();
+      applications.Clear();
+    }
+
+    /// <summary>
+    /// Determines installed plugins and checks if all plugins are loadable.
+    /// </summary>
+    internal void DiscoverAndCheckPlugins() {
+      OnAction(new PluginInfrastructureEventArgs("Initializing", "PluginInfrastructure"));
+      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+      setup.PrivateBinPath = pluginDir;
+      AppDomain pluginDomain = null;
+      try {
+        pluginDomain = AppDomain.CreateDomain("plugin domain", null, setup);
+        Type pluginValidatorType = typeof(PluginValidator);
+        PluginValidator remoteValidator = (PluginValidator)pluginDomain.CreateInstanceAndUnwrap(pluginValidatorType.Assembly.FullName, pluginValidatorType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null);
+        remoteValidator.PluginDir = pluginDir;
+        // forward all events from the remoteValidator to listeners
+        remoteValidator.PluginLoaded +=
+          delegate(object sender, PluginInfrastructureEventArgs e) {
+            OnAction(e);
+          };
+        // get list of plugins and applications from the validator
+        plugins.Clear(); applications.Clear();
+        plugins.AddRange(remoteValidator.Plugins);
+        applications.AddRange(remoteValidator.Applications);
+        OnAction(new PluginInfrastructureEventArgs("Initialized", "PluginInfrastructure"));
+      }
+      finally {
+        // discard the AppDomain that was used for plugin discovery
+        AppDomain.Unload(pluginDomain);
+        // unload all plugins
+        foreach (var pluginDescription in plugins)
+          pluginDescription.Unload();
+        initialized = true;
+      }
+    }
+
+
+    /// <summary>
+    /// Starts and application in a separate AppDomain.
+    /// Loads all enabled plugins and starts the application via a PluginRunner instance activated in the new AppDomain.
+    /// </summary>
+    /// <param name="appInfo">application to run</param>
+    internal void Run(ApplicationDescription appInfo) {
+      if (!initialized) throw new InvalidOperationException("PluginManager is not initialized. DiscoverAndCheckPlugins() must be called before Run()");
+      // create a separate AppDomain for the application
+      // initialize the static ApplicationManager in the AppDomain
+      // and remotely tell it to start the application
+
+      OnAction(new PluginInfrastructureEventArgs("Starting application", appInfo));
+      AppDomain applicationDomain = null;
+      try {
+        AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+        setup.PrivateBinPath = pluginDir;
+        applicationDomain = AppDomain.CreateDomain(appInfo.Name, null, setup);
+        Type applicationManagerType = typeof(DefaultApplicationManager);
+        DefaultApplicationManager applicationManager =
+          (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap(applicationManagerType.Assembly.FullName, applicationManagerType.FullName, true, BindingFlags.NonPublic | BindingFlags.Instance, null, null, null, null, null);
+        applicationManager.PluginLoaded += applicationManager_PluginLoaded;
+        applicationManager.PluginUnloaded += applicationManager_PluginUnloaded;
+        applicationManager.PrepareApplicationDomain(applications, plugins);
+        OnAction(new PluginInfrastructureEventArgs("Started application", appInfo));
+        applicationManager.Run(appInfo);
+      }
+      finally {
+        // make sure domain is unloaded in all cases
+        AppDomain.Unload(applicationDomain);
+      }
+    }
+
+    private void applicationManager_PluginUnloaded(object sender, PluginInfrastructureEventArgs e) {
+      // unload the matching plugin description (
+      PluginDescription desc = (PluginDescription)e.Entity;
+
+      // access to plugin descriptions has to be synchronized because multiple applications 
+      // can be started or stopped at the same time
+      lock (locker) {
+        plugins.First(x => x.Equals(desc)).Unload();
+      }
+      OnAction(new PluginInfrastructureEventArgs(e.Action, e.Entity));
+    }
+
+    private void applicationManager_PluginLoaded(object sender, PluginInfrastructureEventArgs e) {
+      // load the matching plugin description (
+      PluginDescription desc = (PluginDescription)e.Entity;
+      // access to plugin descriptions has to be synchronized because multiple applications 
+      // can be started or stopped at the same time
+      lock (locker) {
+        plugins.First(x => x.Equals(desc)).Load();
+      }
+      OnAction(new PluginInfrastructureEventArgs(e.Action, e.Entity));
+    }
+
+    private void OnAction(PluginInfrastructureEventArgs e) {
+      if (Action != null) {
+        Action(this, e);
+      }
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Manager/PluginValidator.cs	(revision 2504)
@@ -0,0 +1,330 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using System.IO;
+using System.Diagnostics;
+using System.Linq;
+
+
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  /// <summary>
+  /// Discovers all installed plugins in the plugin directory. Checks correctness of plugin meta-data and if
+  /// all plugin files are available and checks plugin dependencies. 
+  /// </summary>
+  internal sealed class PluginValidator : MarshalByRefObject {
+    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
+
+    private Dictionary<PluginDescription, List<string>> pluginDependencies;
+
+    private List<ApplicationDescription> applications;
+    internal IEnumerable<ApplicationDescription> Applications {
+      get {
+        if (string.IsNullOrEmpty(PluginDir)) throw new InvalidOperationException("PluginDir is not set.");
+        if (applications == null) DiscoverAndCheckPlugins();
+        return applications;
+      }
+    }
+
+    private IEnumerable<PluginDescription> plugins;
+    internal IEnumerable<PluginDescription> Plugins {
+      get {
+        if (string.IsNullOrEmpty(PluginDir)) throw new InvalidOperationException("PluginDir is not set.");
+        if (plugins == null) DiscoverAndCheckPlugins();
+        return plugins;
+      }
+    }
+
+    internal string PluginDir { get; set; }
+
+    internal PluginValidator() {
+      this.pluginDependencies = new Dictionary<PluginDescription, List<string>>();
+
+      // ReflectionOnlyAssemblyResolveEvent must be handled because we load assemblies from the plugin path 
+      // (which is not listed in the default assembly lookup locations)
+      AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += ReflectionOnlyAssemblyResolveEventHandler;
+    }
+
+    private Assembly ReflectionOnlyAssemblyResolveEventHandler(object sender, ResolveEventArgs args) {
+      return Assembly.ReflectionOnlyLoad(args.Name);
+    }
+
+
+    /// <summary>
+    /// Init first clears all internal datastructures (including plugin lists)
+    /// 1. All assemblies in the plugins directory are loaded into the reflection only context.
+    /// 2. The validator checks if all necessary files for each plugin are available.
+    /// 3. The validator builds the tree of plugin descriptions (dependencies)
+    /// 4. The validator checks if all dependencies for each plugin are ok.
+    /// 5. All plugins for which there are no dependencies missing are loaded into the execution context.
+    /// 6. Each loaded plugin (all assemblies) is searched for a types that implement IPlugin
+    ///    then one instance of each IPlugin type is activated and the OnLoad hook is called.
+    /// 7. All types implementing IApplication are discovered
+    /// </summary>
+    internal void DiscoverAndCheckPlugins() {
+      pluginDependencies.Clear();
+
+      IEnumerable<Assembly> reflectionOnlyAssemblies = ReflectionOnlyLoadDlls();
+      IEnumerable<PluginDescription> pluginDescriptions = GatherPluginDescriptions(reflectionOnlyAssemblies);
+      CheckPluginFiles(pluginDescriptions);
+
+      // a full list of plugin descriptions is available now we can build the dependency tree
+      BuildDependencyTree(pluginDescriptions);
+
+      // recursively check if all necessary plugins are available and not disabled
+      // disable plugins with missing or disabled dependencies
+      CheckPluginDependencies(pluginDescriptions);
+
+      // mark all plugins as enabled that were not disabled in CheckPluginFiles or CheckPluginDependencies
+      foreach (var desc in pluginDescriptions)
+        if (desc.PluginState != PluginState.Disabled)
+          desc.Enable();
+
+      // test full loading (in contrast to reflection only loading) of plugins
+      // disables plugins that are not loaded correctly
+      LoadPlugins(pluginDescriptions);
+
+      plugins = pluginDescriptions;
+      DiscoverApplications();
+    }
+
+    private void DiscoverApplications() {
+      applications = new List<ApplicationDescription>();
+
+      foreach (IApplication application in GetApplications()) {
+        Type appType = application.GetType();
+        ApplicationAttribute attr = (from x in appType.GetCustomAttributes(typeof(ApplicationAttribute), false)
+                                     select (ApplicationAttribute)x).Single();
+        ApplicationDescription info = new ApplicationDescription();
+        info.Name = application.Name;
+        info.Version = appType.Assembly.GetName().Version;
+        info.Description = application.Description;
+        info.AutoRestart = attr.RestartOnErrors;
+        info.DeclaringAssemblyName = appType.Assembly.GetName().Name;
+        info.DeclaringTypeName = appType.Namespace + "." + application.GetType().Name;
+
+        applications.Add(info);
+      }
+    }
+
+    private static IEnumerable<IApplication> GetApplications() {
+      return from asm in AppDomain.CurrentDomain.GetAssemblies()
+             from t in asm.GetTypes()
+             where typeof(IApplication).IsAssignableFrom(t) &&
+               !t.IsAbstract && !t.IsInterface && !t.HasElementType
+             select (IApplication)Activator.CreateInstance(t);
+    }
+
+    private IEnumerable<Assembly> ReflectionOnlyLoadDlls() {
+      List<Assembly> assemblies = new List<Assembly>();
+      // try to load each .dll file in the plugin directory into the reflection only context
+      foreach (string filename in Directory.GetFiles(PluginDir, "*.dll")) {
+        try {
+          assemblies.Add(Assembly.ReflectionOnlyLoadFrom(filename));
+        }
+        catch (BadImageFormatException) { } // just ignore the case that the .dll file is not a CLR assembly (e.g. a native dll)
+      }
+      return assemblies;
+    }
+
+    // find all types implementing IPlugin in the reflectionOnlyAssemblies and create a list of plugin descriptions
+    // the dependencies in the plugin descriptions are not yet set correctly because we need to create
+    // the full list of all plugin descriptions first
+    private IEnumerable<PluginDescription> GatherPluginDescriptions(IEnumerable<Assembly> assemblies) {
+      List<PluginDescription> pluginDescriptions = new List<PluginDescription>();
+      foreach (Assembly assembly in assemblies) {
+        // GetExportedTypes throws FileNotFoundException when a referenced assembly
+        // of the current assembly is missing.
+        try {
+          foreach (Type t in assembly.GetExportedTypes()) {
+            // if there is a type that implements IPlugin
+            // use AssemblyQualifiedName to compare the types because we can't directly 
+            // compare ReflectionOnly types and Execution types
+            if (!t.IsAbstract &&
+                t.GetInterfaces().Any(x => x.AssemblyQualifiedName == typeof(IPlugin).AssemblyQualifiedName)) {
+              // fetch the attributes of the IPlugin type
+              pluginDescriptions.Add(GetPluginDescription(t));
+            }
+          }
+        }
+        // ignore exceptions. Just don't yield a plugin description when an exception is thrown
+        catch (FileNotFoundException) {
+        }
+        catch (FileLoadException) {
+        }
+        catch (InvalidPluginException) {
+        }
+      }
+      return pluginDescriptions;
+    }
+
+    /// <summary>
+    /// Extracts plugin information for this type.
+    /// Reads plugin name, list and type of files and dependencies of the plugin. This information is necessary for
+    /// plugin dependency checking before plugin activation.
+    /// </summary>
+    /// <param name="t"></param>
+    private PluginDescription GetPluginDescription(Type pluginType) {
+      // get all attributes of that type
+      IList<CustomAttributeData> attributes = CustomAttributeData.GetCustomAttributes(pluginType);
+      List<string> pluginAssemblies = new List<string>();
+      List<string> pluginDependencies = new List<string>();
+      List<string> pluginFiles = new List<string>();
+      string pluginName = null;
+      // iterate through all custom attributes and search for attributed that we are interested in 
+      foreach (CustomAttributeData attributeData in attributes) {
+        if (IsAttributeDataForType(attributeData, typeof(PluginAttribute))) {
+          pluginName = (string)attributeData.ConstructorArguments[0].Value;
+        } else if (IsAttributeDataForType(attributeData, typeof(PluginDependencyAttribute))) {
+          pluginDependencies.Add((string)attributeData.ConstructorArguments[0].Value);
+        } else if (IsAttributeDataForType(attributeData, typeof(PluginFileAttribute))) {
+          string pluginFileName = (string)attributeData.ConstructorArguments[0].Value;
+          PluginFileType fileType = (PluginFileType)attributeData.ConstructorArguments[1].Value;
+          pluginFiles.Add(Path.Combine(PluginDir, pluginFileName));
+          if (fileType == PluginFileType.Assembly) {
+            pluginAssemblies.Add(Path.Combine(PluginDir, pluginFileName));
+          }
+        }
+      }
+
+      var buildDates = from attr in CustomAttributeData.GetCustomAttributes(pluginType.Assembly)
+                       where IsAttributeDataForType(attr, typeof(AssemblyBuildDateAttribute))
+                       select (string)attr.ConstructorArguments[0].Value;
+
+      // minimal sanity check of the attribute values
+      if (!string.IsNullOrEmpty(pluginName) &&
+          pluginFiles.Count > 0 &&
+          pluginAssemblies.Count > 0 &&
+          buildDates.Count() == 1) {
+        // create a temporary PluginDescription that contains the attribute values
+        PluginDescription info = new PluginDescription();
+        info.Name = pluginName;
+        info.Version = pluginType.Assembly.GetName().Version;
+        info.BuildDate = DateTime.Parse(buildDates.Single(), System.Globalization.CultureInfo.InvariantCulture);
+        info.AddAssemblies(pluginAssemblies);
+        info.AddFiles(pluginFiles);
+
+        this.pluginDependencies[info] = pluginDependencies;
+        return info;
+      } else {
+        throw new InvalidPluginException("Invalid metadata in plugin " + pluginType.ToString());
+      }
+    }
+
+    private static bool IsAttributeDataForType(CustomAttributeData attributeData, Type attributeType) {
+      return attributeData.Constructor.DeclaringType.AssemblyQualifiedName == attributeType.AssemblyQualifiedName;
+    }
+
+    // builds a dependency tree of all plugin descriptions
+    // searches matching plugin descriptions based on the list of dependency names for each plugin
+    // and sets the dependencies in the plugin descriptions
+    private void BuildDependencyTree(IEnumerable<PluginDescription> pluginDescriptions) {
+      foreach (var desc in pluginDescriptions) {
+        foreach (string pluginName in pluginDependencies[desc]) {
+          var matchingDescriptions = pluginDescriptions.Where(x => x.Name == pluginName);
+          if (matchingDescriptions.Count() > 0) {
+            desc.AddDependency(matchingDescriptions.First());
+          } else {
+            // no plugin description that matches the dependency name is available => plugin is disabled
+            desc.Disable();
+            break; // stop processing more dependencies
+          }
+        }
+      }
+    }
+
+    private void CheckPluginDependencies(IEnumerable<PluginDescription> pluginDescriptions) {
+      foreach (PluginDescription pluginDescription in pluginDescriptions.Where(x => x.PluginState != PluginState.Disabled)) {
+        if (IsAnyDependencyDisabled(pluginDescription)) {
+          pluginDescription.Disable();
+        }
+      }
+    }
+
+
+    private bool IsAnyDependencyDisabled(PluginDescription descr) {
+      if (descr.PluginState == PluginState.Disabled) return true;
+      foreach (PluginDescription dependency in descr.Dependencies) {
+        if (IsAnyDependencyDisabled(dependency)) return true;
+      }
+      return false;
+    }
+
+    private void LoadPlugins(IEnumerable<PluginDescription> pluginDescriptions) {
+      // load all loadable plugins (all dependencies available) into the execution context
+      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(pluginDescriptions
+                                                                                .Where(x => x.PluginState != PluginState.Disabled))) {
+        List<Type> types = new List<Type>();
+        foreach (string assembly in desc.Assemblies) {
+          var asm = Assembly.LoadFrom(assembly);
+          foreach (Type t in asm.GetTypes()) {
+            if (typeof(IPlugin).IsAssignableFrom(t)) {
+              types.Add(t);
+            }
+          }
+        }
+
+        foreach (Type pluginType in types) {
+          if (!pluginType.IsAbstract && !pluginType.IsInterface && !pluginType.HasElementType) {
+            IPlugin plugin = (IPlugin)Activator.CreateInstance(pluginType);
+            plugin.OnLoad();
+            OnPluginLoaded(new PluginInfrastructureEventArgs("Plugin loaded", plugin.Name));
+          }
+        }
+        desc.Load();
+      }
+    }
+
+    // checks if all declared plugin files are actually available and disables plugins with missing files
+    private static void CheckPluginFiles(IEnumerable<PluginDescription> pluginDescriptions) {
+      foreach (PluginDescription desc in pluginDescriptions) {
+        if (!CheckPluginFiles(desc)) {
+          desc.Disable();
+        }
+      }
+    }
+
+    private static bool CheckPluginFiles(PluginDescription pluginDescription) {
+      foreach (string filename in pluginDescription.Files) {
+        if (!File.Exists(filename)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    internal void OnPluginLoaded(PluginInfrastructureEventArgs e) {
+      if (PluginLoaded != null)
+        PluginLoaded(this, e);
+    }
+
+    /// <summary>
+    /// Initializes the life time service with an infinite lease time.
+    /// </summary>
+    /// <returns><c>null</c>.</returns>
+    public override object InitializeLifetimeService() {
+      return null;
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescription.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescription.cs	(revision 2503)
+++ 	(revision )
@@ -1,169 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-  /// <summary>
-  /// Holds information of loaded plugins that is needed for plugin management.
-  /// Used to represent plugins in AppDomains without loading the plugin assemblies.
-  /// </summary>
-  [Serializable]
-  public class PluginDescription : IPluginDescription {
-    private string name;
-    /// <summary>
-    /// Gets or sets the name of the plugin.
-    /// </summary>
-    public string Name {
-      get { return name; }
-      set { name = value; }
-    }
-    private Version version;
-    /// <summary>
-    /// Gets or sets the version of the plugin.
-    /// </summary>
-    public Version Version {
-      get { return version; }
-      set { version = value; }
-    }
-    private DateTime buildDate;
-    /// <summary>
-    /// Gets or sets the build date of the plugin.
-    /// </summary>
-    public DateTime BuildDate {
-      get { return buildDate; }
-      set { buildDate = value; }
-    }
-
-    private PluginState pluginState;
-    /// <summary>
-    /// Gets or sets the plugin state.
-    /// </summary>
-    public PluginState PluginState {
-      get { return pluginState; }
-    }
-
-    private int nTimesLoaded;
-    public void Disable() {
-      if (pluginState != PluginState.Undefined)
-        throw new InvalidOperationException("Can't disabled a plugin in state " + pluginState);
-      pluginState = PluginState.Disabled;
-    }
-
-    public void Enable() {
-      if (pluginState != PluginState.Undefined)
-        throw new InvalidOperationException("Can't enabled a plugin in state " + pluginState);
-      pluginState = PluginState.Enabled;
-    }
-
-    public void Load() {
-      if (!(pluginState == PluginState.Enabled || pluginState == PluginState.Loaded))
-        throw new InvalidOperationException("Can't loaded a plugin in state " + pluginState);
-      pluginState = PluginState.Loaded;
-      nTimesLoaded++;
-    }
-
-    public void Unload() {
-      if (pluginState != PluginState.Loaded)
-        throw new InvalidOperationException("Can't unload a plugin in state " + pluginState);
-      nTimesLoaded--;
-      if (nTimesLoaded == 0) pluginState = PluginState.Enabled;
-    }
-
-    private List<string> files = new List<string>();
-    /// <summary>
-    /// Gets the names of all files that belong to this plugin.
-    /// These files are deleted when the plugin is removed or updated.
-    /// </summary>
-    public IEnumerable<string> Files {
-      get { return files; }
-    }
-
-    internal void AddFiles(IEnumerable<string> fileNames) {
-      files.AddRange(fileNames);
-    }
-
-    private List<IPluginDescription> dependencies = new List<IPluginDescription>();
-    /// <summary>
-    /// Gets all dependencies of the plugin.
-    /// </summary>
-    public IEnumerable<IPluginDescription> Dependencies {
-      get { return dependencies; }
-    }
-
-    public void AddDependency(PluginDescription dependency) {
-      dependencies.Add(dependency);
-    }
-
-
-    private List<string> assemblies = new List<string>();
-    /// <summary>
-    /// Gets the names of the assemblies that belong to this plugin.
-    /// </summary>
-    public IEnumerable<string> Assemblies {
-      get { return assemblies; }
-      // set { assemblies = value; }
-    }
-
-    internal void AddAssemblies(IEnumerable<string> assemblyNames) {
-      assemblies.AddRange(assemblyNames);
-    }
-
-    public PluginDescription() {
-      nTimesLoaded = 0;
-      pluginState = PluginState.Undefined;
-    }
-
-    /// <summary>
-    /// Gets the string representation of the plugin.
-    /// </summary>
-    /// <returns>The name of the plugin.</returns>
-    public override string ToString() {
-      return Name;
-    }
-
-    // equals and hashcode have to be implemented because we want to compare PluginDescriptions from 
-    // different AppDomains and serialization destroys reference equality
-    /// <summary>
-    /// Checks whether the given object is equal to the current plugin.
-    /// </summary>
-    /// <param name="obj">The object to compare.</param>
-    /// <returns><c>true</c> if it is equal, <c>false</c> otherwise.</returns>
-    public override bool Equals(object obj) {
-      if (!(obj is PluginDescription))
-        return false;
-      PluginDescription other = (PluginDescription)obj;
-
-      return other.Name == this.Name && other.Version == this.Version;
-    }
-    /// <summary>
-    /// Gets the hash code of the current plugin.
-    /// </summary>
-    /// <returns>The hash code of the plugin.</returns>
-    public override int GetHashCode() {
-      if (version != null) {
-        return name.GetHashCode() + version.GetHashCode();
-      } else return name.GetHashCode();
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginDescriptionIterator.cs	(revision 2504)
@@ -24,9 +24,9 @@
 using System.Text;
 
-namespace HeuristicLab.PluginInfrastructure {
-  public static class PluginDescriptionIterator {
-    public static IEnumerable<IPluginDescription> IterateInDependencyOrder(IEnumerable<IPluginDescription> pluginDescriptions) {
+namespace HeuristicLab.PluginInfrastructure.Manager {
+  internal static class PluginDescriptionIterator {
+    internal static IEnumerable<PluginDescription> IterateInDependencyOrder(IEnumerable<PluginDescription> pluginDescriptions) {
       // list to make sure we yield each description only once
-      List<IPluginDescription> yieldedDescriptions = new List<IPluginDescription>();
+      List<PluginDescription> yieldedDescriptions = new List<PluginDescription>();
       foreach (var desc in pluginDescriptions) {
         foreach (var dependency in IterateInDependencyOrder(desc.Dependencies)) {
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginInfrastructureEventArgs.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginInfrastructureEventArgs.cs	(revision 2503)
+++ 	(revision )
@@ -1,37 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-  // to be replaced by GenericEventArgs
-  [Serializable]
-  public class PluginInfrastructureEventArgs : EventArgs {
-    public string Action { get; private set; }
-    public object Entity { get; private set; }
-    public PluginInfrastructureEventArgs(string action, object entity) {
-      this.Action = action;
-      this.Entity = entity;
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginManager.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginManager.cs	(revision 2503)
+++ 	(revision )
@@ -1,168 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Security.Policy;
-using System.Reflection;
-using System.Diagnostics;
-using System.Security.Permissions;
-using System.Security;
-using System.Linq;
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-
-  // must extend MarshalByRefObject because of event passing between Loader and PluginManager (each in it's own AppDomain)
-  /// <summary>
-  /// Class to manage different plugins.
-  /// </summary>
-  public sealed class PluginManager : MarshalByRefObject {
-    /// <summary>
-    /// Event handler for actions in the plugin manager.
-    /// </summary>
-    public event EventHandler<PluginInfrastructureEventArgs> Action;
-
-    private string pluginDir;
-
-    private List<PluginDescription> plugins;
-
-    private List<ApplicationDescription> applications;
-    /// <summary>
-    /// Gets all installed applications.
-    /// </summary>
-    public IEnumerable<ApplicationDescription> Applications {
-      get { return applications; }
-    }
-
-    private object locker = new object();
-    private bool initialized;
-
-    public PluginManager(string pluginDir) {
-      this.pluginDir = pluginDir;
-      plugins = new List<PluginDescription>();
-      applications = new List<ApplicationDescription>();
-      Reset();
-    }
-
-    public void Reset() {
-      initialized = false;
-      if (plugins != null && plugins.Any(x => x.PluginState == PluginState.Loaded)) throw new InvalidOperationException("Reset() is not allowed while applications are active.");
-      plugins.Clear();
-      applications.Clear();
-    }
-
-    /// <summary>
-    /// Determines installed plugins and checks if all plugins are loadable.
-    /// </summary>
-    public void DiscoverAndCheckPlugins() {
-      OnAction(new PluginInfrastructureEventArgs("Initializing", "PluginInfrastructure"));
-      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
-      setup.PrivateBinPath = pluginDir;
-      AppDomain pluginDomain = null;
-      try {
-        pluginDomain = AppDomain.CreateDomain("plugin domain", null, setup);
-        PluginValidator remoteValidator = (PluginValidator)pluginDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure.Manager", "HeuristicLab.PluginInfrastructure.Manager.Loader");
-        remoteValidator.PluginDir = pluginDir;
-        // forward all events from the remoteValidator to listeners
-        remoteValidator.PluginLoaded +=
-          delegate(object sender, PluginInfrastructureEventArgs e) {
-            OnAction(e);
-          };
-        // get list of plugins and applications from the validator
-        plugins.Clear(); applications.Clear();
-        plugins.AddRange(remoteValidator.Plugins);
-        applications.AddRange(remoteValidator.Applications);
-        OnAction(new PluginInfrastructureEventArgs("Initialized", "PluginInfrastructure"));
-      }
-      finally {
-        // discard the AppDomain that was used for plugin discovery
-        AppDomain.Unload(pluginDomain);
-        // unload all plugins
-        foreach (var pluginDescription in plugins)
-          pluginDescription.Unload();
-        initialized = true;
-      }
-    }
-
-
-    /// <summary>
-    /// Starts and application in a separate AppDomain.
-    /// Loads all enabled plugins and starts the application via a PluginRunner instance activated in the new AppDomain.
-    /// </summary>
-    /// <param name="appInfo">application to run</param>
-    public void Run(ApplicationDescription appInfo) {
-      if (!initialized) throw new InvalidOperationException("PluginManager is not initialized. DiscoverAndCheckPlugins() must be called before Run()");
-      // create a separate AppDomain for the application
-      // initialize the static ApplicationManager in the AppDomain
-      // and remotely tell it to start the application
-
-      OnAction(new PluginInfrastructureEventArgs("Starting application", appInfo));
-      AppDomain applicationDomain = null;
-      try {
-        AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
-        setup.PrivateBinPath = pluginDir;
-        applicationDomain = AppDomain.CreateDomain(appInfo.Name, null, setup);
-        DefaultApplicationManager applicationManager =
-          (DefaultApplicationManager)applicationDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure.Manager", "HeuristicLab.PluginInfrastructure.Manager.DefaultApplicationManager");
-        applicationManager.PluginLoaded += applicationManager_PluginLoaded;
-        applicationManager.PluginUnloaded += applicationManager_PluginUnloaded;
-        applicationManager.PrepareApplicationDomain(
-          new List<IApplicationDescription>(applications.Cast<IApplicationDescription>()),
-          new List<IPluginDescription>(plugins.Cast<IPluginDescription>()));
-        OnAction(new PluginInfrastructureEventArgs("Started application", appInfo));
-        applicationManager.Run(appInfo);
-      }
-      finally {
-        // make sure domain is unloaded in all cases
-        AppDomain.Unload(applicationDomain);
-      }
-    }
-
-    private void applicationManager_PluginUnloaded(object sender, PluginInfrastructureEventArgs e) {
-      // unload the matching plugin description (
-      PluginDescription desc = (PluginDescription)e.Entity;
-
-      // access to plugin descriptions has to be synchronized because multiple applications 
-      // can be started or stopped at the same time
-      lock (locker) {
-        plugins.First(x => x.Equals(desc)).Unload();
-      }
-      OnAction(new PluginInfrastructureEventArgs(e.Action, e.Entity));
-    }
-
-    private void applicationManager_PluginLoaded(object sender, PluginInfrastructureEventArgs e) {
-      // load the matching plugin description (
-      PluginDescription desc = (PluginDescription)e.Entity;
-      // access to plugin descriptions has to be synchronized because multiple applications 
-      // can be started or stopped at the same time
-      lock (locker) {
-        plugins.First(x => x.Equals(desc)).Load();
-      }
-      OnAction(new PluginInfrastructureEventArgs(e.Action, e.Entity));
-    }
-
-    private void OnAction(PluginInfrastructureEventArgs e) {
-      if (Action != null) {
-        Action(this, e);
-      }
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginValidator.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/PluginValidator.cs	(revision 2503)
+++ 	(revision )
@@ -1,322 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Reflection;
-using System.IO;
-using System.Diagnostics;
-using System.Linq;
-
-
-namespace HeuristicLab.PluginInfrastructure.Manager {
-  /// <summary>
-  /// Discovers all installed plugins in the plugin directory. Checks correctness of plugin meta-data and if
-  /// all plugin files are available and checks plugin dependencies. 
-  /// </summary>
-  internal sealed class PluginValidator : MarshalByRefObject {
-    internal event EventHandler<PluginInfrastructureEventArgs> PluginLoaded;
-
-    private Dictionary<PluginDescription, List<string>> pluginDependencies;
-
-    private List<ApplicationDescription> applications;
-    internal IEnumerable<ApplicationDescription> Applications {
-      get {
-        if (string.IsNullOrEmpty(PluginDir)) throw new InvalidOperationException("PluginDir is not set.");
-        if (applications == null) DiscoverAndCheckPlugins();
-        return applications;
-      }
-    }
-
-    private IEnumerable<PluginDescription> plugins;
-    internal IEnumerable<PluginDescription> Plugins {
-      get {
-        if (string.IsNullOrEmpty(PluginDir)) throw new InvalidOperationException("PluginDir is not set.");
-        if (plugins == null) DiscoverAndCheckPlugins();
-        return plugins;
-      }
-    }
-
-    public string PluginDir { get; set; }
-
-    public PluginValidator() {
-      this.pluginDependencies = new Dictionary<PluginDescription, List<string>>();
-
-      // ReflectionOnlyAssemblyResolveEvent must be handled because we load assemblies from the plugin path 
-      // (which is not listed in the default assembly lookup locations)
-      AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += ReflectionOnlyAssemblyResolveEventHandler;
-    }
-
-    private Assembly ReflectionOnlyAssemblyResolveEventHandler(object sender, ResolveEventArgs args) {
-      return Assembly.ReflectionOnlyLoad(args.Name);
-    }
-
-
-    /// <summary>
-    /// Init first clears all internal datastructures (including plugin lists)
-    /// 1. All assemblies in the plugins directory are loaded into the reflection only context.
-    /// 2. The validator checks if all necessary files for each plugin are available.
-    /// 3. The validator builds the tree of plugin descriptions (dependencies)
-    /// 4. The validator checks if all dependencies for each plugin are ok.
-    /// 5. All plugins for which there are no dependencies missing are loaded into the execution context.
-    /// 6. Each loaded plugin (all assemblies) is searched for a types that implement IPlugin
-    ///    then one instance of each IPlugin type is activated and the OnLoad hook is called.
-    /// 7. All types implementing IApplication are discovered
-    /// </summary>
-    internal void DiscoverAndCheckPlugins() {
-      pluginDependencies.Clear();
-
-      IEnumerable<Assembly> reflectionOnlyAssemblies = ReflectionOnlyLoadDlls();
-      IEnumerable<PluginDescription> pluginDescriptions = GatherPluginDescriptions(reflectionOnlyAssemblies);
-      CheckPluginFiles(pluginDescriptions);
-
-      // a full list of plugin descriptions is available now we can build the dependency tree
-      BuildDependencyTree(pluginDescriptions);
-
-      // recursively check if all necessary plugins are available and not disabled
-      // disable plugins with missing or disabled dependencies
-      CheckPluginDependencies(pluginDescriptions);
-
-      // mark all plugins as enabled that were not disabled in CheckPluginFiles or CheckPluginDependencies
-      foreach (var desc in pluginDescriptions)
-        if (desc.PluginState != PluginState.Disabled)
-          desc.Enable();
-
-      // test full loading (in contrast to reflection only loading) of plugins
-      // disables plugins that are not loaded correctly
-      LoadPlugins(pluginDescriptions);
-
-      plugins = pluginDescriptions;
-      DiscoverApplications();
-    }
-
-    private void DiscoverApplications() {
-      applications = new List<ApplicationDescription>();
-
-      foreach (IApplication application in GetApplications()) {
-        ApplicationDescription info = new ApplicationDescription();
-        info.Name = application.Name;
-        info.Version = application.Version;
-        info.Description = application.Description;
-        info.AutoRestart = application.RestartOnErrors;
-        info.DeclaringAssemblyName = application.GetType().Assembly.GetName().Name;
-        info.DeclaringTypeName = application.GetType().Namespace + "." + application.GetType().Name;
-
-        applications.Add(info);
-      }
-    }
-
-    private IEnumerable<IApplication> GetApplications() {
-      return from asm in AppDomain.CurrentDomain.GetAssemblies()
-             from t in asm.GetTypes()
-             where typeof(IApplication).IsAssignableFrom(t) &&
-               !t.IsAbstract && !t.IsInterface && !t.HasElementType
-             select (IApplication)Activator.CreateInstance(t);
-    }
-
-    private IEnumerable<Assembly> ReflectionOnlyLoadDlls() {
-      List<Assembly> assemblies = new List<Assembly>();
-      // try to load each .dll file in the plugin directory into the reflection only context
-      foreach (string filename in Directory.GetFiles(PluginDir, "*.dll")) {
-        try {
-          assemblies.Add(Assembly.ReflectionOnlyLoadFrom(filename));
-        }
-        catch (BadImageFormatException) { } // just ignore the case that the .dll file is not a CLR assembly (e.g. a native dll)
-      }
-      return assemblies;
-    }
-
-    // find all types implementing IPlugin in the reflectionOnlyAssemblies and create a list of plugin descriptions
-    // the dependencies in the plugin descriptions are not yet set correctly because we need to create
-    // the full list of all plugin descriptions first
-    private IEnumerable<PluginDescription> GatherPluginDescriptions(IEnumerable<Assembly> assemblies) {
-      List<PluginDescription> pluginDescriptions = new List<PluginDescription>();
-      foreach (Assembly assembly in assemblies) {
-        // GetExportedTypes throws FileNotFoundException when a referenced assembly
-        // of the current assembly is missing.
-        try {
-          foreach (Type t in assembly.GetExportedTypes()) {
-            // if there is a type that implements IPlugin
-            // use AssemblyQualifiedName to compare the types because we can't directly 
-            // compare ReflectionOnly types and Execution types
-            if (!t.IsAbstract &&
-                t.GetInterfaces().Any(x => x.AssemblyQualifiedName == typeof(IPlugin).AssemblyQualifiedName)) {
-              // fetch the attributes of the IPlugin type
-              pluginDescriptions.Add(GetPluginDescription(t));
-            }
-          }
-        }
-        // ignore exceptions. Just don't yield a plugin description when an exception is thrown
-        catch (FileNotFoundException) {
-        }
-        catch (FileLoadException) {
-        }
-        catch (InvalidPluginException) {
-        }
-      }
-      return pluginDescriptions;
-    }
-
-    /// <summary>
-    /// Extracts plugin information for this type.
-    /// Reads plugin name, list and type of files and dependencies of the plugin. This information is necessary for
-    /// plugin dependency checking before plugin activation.
-    /// </summary>
-    /// <param name="t"></param>
-    private PluginDescription GetPluginDescription(Type pluginType) {
-      // get all attributes of that type
-      IList<CustomAttributeData> attributes = CustomAttributeData.GetCustomAttributes(pluginType);
-      List<string> pluginAssemblies = new List<string>();
-      List<string> pluginDependencies = new List<string>();
-      List<string> pluginFiles = new List<string>();
-      string pluginName = null;
-      // iterate through all custom attributes and search for attributed that we are interested in 
-      foreach (CustomAttributeData attributeData in attributes) {
-        if (IsAttributeDataForType(attributeData, typeof(PluginAttribute))) {
-          pluginName = (string)attributeData.ConstructorArguments[0].Value;
-        } else if (IsAttributeDataForType(attributeData, typeof(PluginDependencyAttribute))) {
-          pluginDependencies.Add((string)attributeData.ConstructorArguments[0].Value);
-        } else if (IsAttributeDataForType(attributeData, typeof(PluginFileAttribute))) {
-          string pluginFileName = (string)attributeData.ConstructorArguments[0].Value;
-          PluginFileType fileType = (PluginFileType)attributeData.ConstructorArguments[1].Value;
-          pluginFiles.Add(Path.Combine(PluginDir, pluginFileName));
-          if (fileType == PluginFileType.Assembly) {
-            pluginAssemblies.Add(Path.Combine(PluginDir, pluginFileName));
-          }
-        }
-      }
-
-      // minimal sanity check of the attribute values
-      if (!string.IsNullOrEmpty(pluginName) &&
-          pluginFiles.Count > 0 &&
-          pluginAssemblies.Count > 0) {
-        // create a temporary PluginDescription that contains the attribute values
-        PluginDescription info = new PluginDescription();
-        info.Name = pluginName;
-        info.Version = pluginType.Assembly.GetName().Version;
-        info.AddAssemblies(pluginAssemblies);
-        info.AddFiles(pluginFiles);
-
-        this.pluginDependencies[info] = pluginDependencies;
-        return info;
-      } else {
-        throw new InvalidPluginException("Invalid metadata in plugin " + pluginType.ToString());
-      }
-    }
-
-    private bool IsAttributeDataForType(CustomAttributeData attributeData, Type attributeType) {
-      return attributeData.Constructor.DeclaringType.AssemblyQualifiedName == attributeType.AssemblyQualifiedName;
-    }
-
-    // builds a dependency tree of all plugin descriptions
-    // searches matching plugin descriptions based on the list of dependency names for each plugin
-    // and sets the dependencies in the plugin descriptions
-    private void BuildDependencyTree(IEnumerable<PluginDescription> pluginDescriptions) {
-      foreach (var desc in pluginDescriptions) {
-        foreach (string pluginName in pluginDependencies[desc]) {
-          var matchingDescriptions = pluginDescriptions.Where(x => x.Name == pluginName);
-          if (matchingDescriptions.Count() > 0) {
-            desc.AddDependency(matchingDescriptions.First());
-          } else {
-            // no plugin description that matches the dependency name is available => plugin is disabled
-            desc.Disable();
-            break; // stop processing more dependencies
-          }
-        }
-      }
-    }
-
-    private void CheckPluginDependencies(IEnumerable<PluginDescription> pluginDescriptions) {
-      foreach (PluginDescription pluginDescription in pluginDescriptions.Where(x => x.PluginState != PluginState.Disabled)) {
-        if (IsAnyDependencyDisabled(pluginDescription)) {
-          pluginDescription.Disable();
-        }
-      }
-    }
-
-
-    private bool IsAnyDependencyDisabled(PluginDescription descr) {
-      if (descr.PluginState == PluginState.Disabled) return true;
-      foreach (PluginDescription dependency in descr.Dependencies) {
-        if (IsAnyDependencyDisabled(dependency)) return true;
-      }
-      return false;
-    }
-
-    private void LoadPlugins(IEnumerable<PluginDescription> pluginDescriptions) {
-      // load all loadable plugins (all dependencies available) into the execution context
-      foreach (var desc in PluginDescriptionIterator.IterateInDependencyOrder(pluginDescriptions
-                                                                                .Cast<IPluginDescription>()
-                                                                                .Where(x => x.PluginState != PluginState.Disabled))) {
-        List<Type> types = new List<Type>();
-        foreach (string assembly in desc.Assemblies) {
-          var asm = Assembly.LoadFrom(assembly);
-          foreach (Type t in asm.GetTypes()) {
-            if (typeof(IPlugin).IsAssignableFrom(t)) {
-              types.Add(t);
-            }
-          }
-        }
-
-        foreach (Type pluginType in types) {
-          if (!pluginType.IsAbstract && !pluginType.IsInterface && !pluginType.HasElementType) {
-            IPlugin plugin = (IPlugin)Activator.CreateInstance(pluginType);
-            plugin.OnLoad();
-            OnPluginLoaded(new PluginInfrastructureEventArgs("Plugin loaded", plugin.Name));
-          }
-        }
-        desc.Load();
-      }
-    }
-
-    // checks if all declared plugin files are actually available and disables plugins with missing files
-    private void CheckPluginFiles(IEnumerable<PluginDescription> pluginDescriptions) {
-      foreach (PluginDescription desc in pluginDescriptions) {
-        if (!CheckPluginFiles(desc)) {
-          desc.Disable();
-        }
-      }
-    }
-
-    private bool CheckPluginFiles(PluginDescription PluginDescription) {
-      foreach (string filename in PluginDescription.Files) {
-        if (!File.Exists(filename)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    internal void OnPluginLoaded(PluginInfrastructureEventArgs e) {
-      if (PluginLoaded != null)
-        PluginLoaded(this, e);
-    }
-
-    /// <summary>
-    /// Initializes the life time service with an infinite lease time.
-    /// </summary>
-    /// <returns><c>null</c>.</returns>
-    public override object InitializeLifetimeService() {
-      return null;
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame	(revision 2504)
@@ -25,4 +25,5 @@
 using HeuristicLab.PluginInfrastructure;
 using System.Security;
+using System;
 
 // General Information about an assembly is controlled through the following 
@@ -37,5 +38,6 @@
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
-[assembly: AllowPartiallyTrustedCallers]
+[assembly: System.Resources.NeutralResourcesLanguage("en")]
+[assembly: CLSCompliant(true)]
 
 // Setting ComVisible to false makes the types in this assembly not visible 
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 2504)
@@ -1,27 +1,6 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-//------------------------------------------------------------------------------
+﻿//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.1433
+//     Runtime Version:2.0.50727.4200
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -81,4 +60,39 @@
             }
         }
+        
+        internal static System.Drawing.Bitmap Details {
+            get {
+                object obj = ResourceManager.GetObject("Details", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Icon HeuristicLab {
+            get {
+                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap LargeIcons {
+            get {
+                object obj = ResourceManager.GetObject("LargeIcons", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap List {
+            get {
+                object obj = ResourceManager.GetObject("List", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Logo_white {
+            get {
+                object obj = ResourceManager.GetObject("Logo_white", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
     }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 2504)
@@ -118,3 +118,19 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="LargeIcons" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 2504)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3053
+//     Runtime Version:2.0.50727.4200
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -32,4 +32,22 @@
             }
         }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string User {
+            get {
+                return ((string)(this["User"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string Organization {
+            get {
+                return ((string)(this["Organization"]));
+            }
+        }
     }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.settings
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 2504)
@@ -6,4 +6,10 @@
       <Value Profile="(Default)">plugins</Value>
     </Setting>
+    <Setting Name="User" Type="System.String" Scope="Application">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="Organization" Type="System.String" Scope="Application">
+      <Value Profile="(Default)" />
+    </Setting>
   </Settings>
 </SettingsFile>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.Designer.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.Designer.cs	(revision 2504)
@@ -0,0 +1,199 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure {
+  partial class MainForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Plugin Management", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Applications", System.Windows.Forms.HorizontalAlignment.Left);
+      this.startButton = new System.Windows.Forms.Button();
+      this.largeImageList = new System.Windows.Forms.ImageList(this.components);
+      this.applicationsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.versionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.descriptionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.smallImageList = new System.Windows.Forms.ImageList(this.components);
+      this.detailsButton = new System.Windows.Forms.Button();
+      this.listButton = new System.Windows.Forms.Button();
+      this.largeIconsButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.startButton.Enabled = false;
+      this.startButton.Location = new System.Drawing.Point(579, 511);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(75, 23);
+      this.startButton.TabIndex = 1;
+      this.startButton.Text = "Start";
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.applicationsListView_ItemActivate);
+      // 
+      // largeImageList
+      // 
+      this.largeImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("largeImageList.ImageStream")));
+      this.largeImageList.TransparentColor = System.Drawing.Color.Transparent;
+      this.largeImageList.Images.SetKeyName(0, "HeuristicLab.ico");
+      // 
+      // applicationsListView
+      // 
+      this.applicationsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.applicationsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.versionColumnHeader,
+            this.descriptionColumnHeader});
+      listViewGroup1.Header = "Plugin Management";
+      listViewGroup1.Name = "Plugin Management";
+      listViewGroup2.Header = "Applications";
+      listViewGroup2.Name = "Applications";
+      this.applicationsListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+            listViewGroup1,
+            listViewGroup2});
+      this.applicationsListView.LargeImageList = this.largeImageList;
+      this.applicationsListView.Location = new System.Drawing.Point(12, 12);
+      this.applicationsListView.MultiSelect = false;
+      this.applicationsListView.Name = "applicationsListView";
+      this.applicationsListView.ShowItemToolTips = true;
+      this.applicationsListView.Size = new System.Drawing.Size(642, 493);
+      this.applicationsListView.SmallImageList = this.smallImageList;
+      this.applicationsListView.TabIndex = 2;
+      this.applicationsListView.UseCompatibleStateImageBehavior = false;
+      this.applicationsListView.ItemActivate += new System.EventHandler(this.applicationsListView_ItemActivate);
+      this.applicationsListView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.applicationsListBox_SelectedIndexChanged);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 125;
+      // 
+      // versionColumnHeader
+      // 
+      this.versionColumnHeader.Text = "Version";
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 453;
+      // 
+      // smallImageList
+      // 
+      this.smallImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("smallImageList.ImageStream")));
+      this.smallImageList.TransparentColor = System.Drawing.Color.Transparent;
+      this.smallImageList.Images.SetKeyName(0, "HeuristicLab.ico");
+      // 
+      // detailsButton
+      // 
+      this.detailsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.detailsButton.AutoSize = true;
+      this.detailsButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.Details;
+      this.detailsButton.Location = new System.Drawing.Point(68, 511);
+      this.detailsButton.Name = "detailsButton";
+      this.detailsButton.Size = new System.Drawing.Size(22, 23);
+      this.detailsButton.TabIndex = 5;
+      this.detailsButton.UseVisualStyleBackColor = true;
+      this.detailsButton.Click += new System.EventHandler(this.detailsButton_Click);
+      // 
+      // listButton
+      // 
+      this.listButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.listButton.AutoSize = true;
+      this.listButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      this.listButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.List;
+      this.listButton.Location = new System.Drawing.Point(40, 511);
+      this.listButton.Name = "listButton";
+      this.listButton.Size = new System.Drawing.Size(22, 22);
+      this.listButton.TabIndex = 4;
+      this.listButton.UseVisualStyleBackColor = true;
+      this.listButton.Click += new System.EventHandler(this.listButton_Click);
+      // 
+      // largeIconsButton
+      // 
+      this.largeIconsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.largeIconsButton.AutoSize = true;
+      this.largeIconsButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      this.largeIconsButton.Image = HeuristicLab.PluginInfrastructure.Properties.Resources.LargeIcons;
+      this.largeIconsButton.Location = new System.Drawing.Point(12, 511);
+      this.largeIconsButton.Name = "largeIconsButton";
+      this.largeIconsButton.Size = new System.Drawing.Size(22, 22);
+      this.largeIconsButton.TabIndex = 3;
+      this.largeIconsButton.UseVisualStyleBackColor = true;
+      this.largeIconsButton.Click += new System.EventHandler(this.largeIconsButton_Click);
+      // 
+      // MainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(666, 546);
+      this.Controls.Add(this.detailsButton);
+      this.Controls.Add(this.listButton);
+      this.Controls.Add(this.largeIconsButton);
+      this.Controls.Add(this.applicationsListView);
+      this.Controls.Add(this.startButton);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "MainForm";
+      this.Text = "HeuristicLab Starter";
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.ImageList largeImageList;
+    private System.Windows.Forms.ListView applicationsListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader versionColumnHeader;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+    private System.Windows.Forms.Button largeIconsButton;
+    private System.Windows.Forms.Button listButton;
+    private System.Windows.Forms.Button detailsButton;
+    private System.Windows.Forms.ImageList smallImageList;
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.cs	(revision 2504)
@@ -0,0 +1,166 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Diagnostics;
+using HeuristicLab.PluginInfrastructure;
+using System.Threading;
+using HeuristicLab.PluginInfrastructure.Manager;
+using System.IO;
+
+namespace HeuristicLab.PluginInfrastructure {
+  public partial class MainForm : Form {
+
+    private ListViewItem pluginManagerListViewItem;
+    private bool abortRequested;
+    private PluginManager pluginManager;
+
+    public MainForm()
+      : base() {
+      InitializeComponent();
+
+      string pluginPath = Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
+      pluginManager = new PluginManager(pluginPath);
+      SplashScreen splashScreen = new SplashScreen(pluginManager, 1000, "Loading HeuristicLab...");
+      splashScreen.Owner = this;
+      splashScreen.Show();
+
+      Application.DoEvents();
+      this.Enabled = false;
+
+      pluginManager.DiscoverAndCheckPlugins();
+
+      applicationsListView.Items.Clear();
+
+      pluginManagerListViewItem = new ListViewItem("Plugin Manager", 0);
+      pluginManagerListViewItem.Group = applicationsListView.Groups["Plugin Management"];
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "-"));
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "Install, upgrade or delete plugins"));
+      pluginManagerListViewItem.ToolTipText = "Install, upgrade or delete plugins";
+
+      applicationsListView.Items.Add(pluginManagerListViewItem);
+
+      foreach (ApplicationDescription info in pluginManager.Applications) {
+        ListViewItem item = new ListViewItem(info.Name, 0);
+        item.Tag = info;
+        item.Group = applicationsListView.Groups["Applications"];
+        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Version.ToString()));
+        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Description));
+        item.ToolTipText = info.Description;
+        applicationsListView.Items.Add(item);
+      }
+
+
+      this.Enabled = true;
+      this.Visible = true;
+    }
+
+    private void applicationsListView_ItemActivate(object sender, EventArgs e) {
+      if (applicationsListView.SelectedItems.Count > 0) {
+        ListViewItem selected = applicationsListView.SelectedItems[0];
+        if (selected == pluginManagerListViewItem) {
+          try {
+            //Cursor = Cursors.AppStarting;
+            //ManagerForm form = new ManagerForm();
+            //this.Visible = false;
+            //form.ShowDialog(this);
+            //// RefreshApplicationsList();
+            //this.Visible = true;
+          }
+          finally {
+            Cursor = Cursors.Arrow;
+          }
+        } else {
+          ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag;
+          SplashScreen splashScreen = new SplashScreen(pluginManager, 2000, "Loading " + app.Name);
+          splashScreen.Owner = this;
+          splashScreen.Show();
+          Thread t = new Thread(delegate() {
+            bool stopped = false;
+            do {
+              try {
+                if (!abortRequested)
+                  pluginManager.Run(app);
+                stopped = true;
+              }
+              catch (Exception ex) {
+                stopped = false;
+                ThreadPool.QueueUserWorkItem(delegate(object exception) { ShowErrorMessageBox((Exception)exception); }, ex);
+                Thread.Sleep(5000); // sleep 5 seconds before autorestart
+              }
+            } while (!abortRequested && !stopped && app.AutoRestart);
+          });
+          t.SetApartmentState(ApartmentState.STA); // needed for the AdvancedOptimizationFrontent
+          t.Start();
+        }
+      }
+    }
+
+    private void applicationsListBox_SelectedIndexChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
+      if (e.IsSelected) {
+        startButton.Enabled = true;
+      } else {
+        startButton.Enabled = false;
+      }
+    }
+
+    private void largeIconsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.LargeIcon;
+    }
+
+    private void listButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.List;
+    }
+
+    private void detailsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.Details;
+    }
+
+    private void ShowErrorMessageBox(Exception ex) {
+      MessageBoxOptions options = RightToLeft == RightToLeft.Yes ? MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading : MessageBoxOptions.DefaultDesktopOnly;
+      MessageBox.Show(this,
+         BuildErrorMessage(ex),
+         "Error - " + ex.GetType().Name,
+         MessageBoxButtons.OK,
+         MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, options);
+    }
+    private static string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while (ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+
+    private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
+      abortRequested = true;
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.resx	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/MainForm.resx	(revision 2504)
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="largeImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>20, 15</value>
+  </metadata>
+  <data name="largeImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU
+        CQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+CAB7/YgAB8QIHAfMK/wHz
+        DQcB8QH/YgAB7wIAAW0K/wHzDQABEgH/YgAB/wEQAQABDgHzCv8BbQ0AAfFiAAH/AZICAAHsCv8B8Q0A
+        AW1iAAL/AQ4BAAEOC/8BEgIAAQcK/2IAAv8B7AIAAZIK/wEHAgABFAr/YgAC/wHzAQ4BAAEQC/8BFAIA
+        AbwJ/2IAA/8BbQIAAe8K/wGSAgABbQn/YgAD/wHxAgABFAv/ARACAAHxCP9iAAT/AW0CAAEHCv8BkgIA
+        AesI/2IABP8BBwIAAW0K/wHzAQ4BAAEOAfMH/2IABf8BFAIAAfEK/wHsAgAB7Af/YgAF/wHvAgABbQr/
+        AfMCAAEQB/9iAAb/ARABAAEOCxQBDgIAAZIG/2IABv8BkhAAARAG/2IAB/8BDhAAAQcF/2IAB/8B7AIA
+        ARQK7AHrAgABFAX/YgAH/wHzAQ4BAAEQC/8BFAIAAbwE/2IACP8BbQIAAe8K/wGSAgABbQT/YgAI/wHx
+        AgABFAv/ARACAAHxA/9iAAn/AW0CAAEHCv8BkgIAAesD/2IACf8BBwIAAW0L/wEOAQABDgHzAv9iAAr/
+        ARQCAAHxCv8B7AIAAewC/2IACv8B7wIAAW0K/wHzAQ4BAAEQAv9iAAv/ARABAAEOAfMK/wFtAgABkgH/
+        YgAL/wGSAgAB7Ar/AfECAAEQAf9iAAz/AQ4BAAEOAfMK/wFtAgABB2IADP8B7wLsAfEK/wG8AuwB72IA
+        Hv/hAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP//wD/AAMACw==
+</value>
+  </data>
+  <metadata name="smallImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>142, 17</value>
+  </metadata>
+  <data name="smallImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC0
+        BwAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8CAA//MgABbQX/BwAB/zEA
+        AZIBAAX/AfEGAAFtMQAB/wEAAZIF/wEAARQF/zEAAf8BbQEABf8BkgEABf8xAAL/AQABBwX/AQAB6wT/
+        MQAC/wEUAQAF/wHsAQAE/zEAA/8BAAYUAQABkgP/MQAD/wEOCAAD/zEAA/8B8wEABv8BAAG8Av8xAAT/
+        AQABFAX/ARABAAL/MQAE/wEHAQAG/wEAAfMB/zEABf8BAAFtBf8BDgEQAf8xAAX/AZIBAAX/AfEBAAH/
+        MQAG/wHsAfEF/wHsAe9wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL
+</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.Designer.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.Designer.cs	(revision 2504)
@@ -0,0 +1,236 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+namespace HeuristicLab.PluginInfrastructure {
+  partial class SplashScreen {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
+      this.panel = new System.Windows.Forms.Panel();
+      this.closeButton = new System.Windows.Forms.Button();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.companyLabel = new System.Windows.Forms.Label();
+      this.userNameLabel = new System.Windows.Forms.Label();
+      this.licensedToLabel = new System.Windows.Forms.Label();
+      this.titleLabel = new System.Windows.Forms.Label();
+      this.versionLabel = new System.Windows.Forms.Label();
+      this.infoLabel = new System.Windows.Forms.Label();
+      this.copyrightLabel = new System.Windows.Forms.Label();
+      this.pictureBox = new System.Windows.Forms.PictureBox();
+      this.panel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // panel
+      // 
+      this.panel.BackColor = System.Drawing.SystemColors.Window;
+      this.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.panel.Controls.Add(this.closeButton);
+      this.panel.Controls.Add(this.companyLabel);
+      this.panel.Controls.Add(this.userNameLabel);
+      this.panel.Controls.Add(this.licensedToLabel);
+      this.panel.Controls.Add(this.titleLabel);
+      this.panel.Controls.Add(this.versionLabel);
+      this.panel.Controls.Add(this.infoLabel);
+      this.panel.Controls.Add(this.copyrightLabel);
+      this.panel.Controls.Add(this.pictureBox);
+      this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel.Location = new System.Drawing.Point(0, 0);
+      this.panel.Name = "panel";
+      this.panel.Size = new System.Drawing.Size(625, 161);
+      this.panel.TabIndex = 0;
+      // 
+      // closeButton
+      // 
+      this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.closeButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+      this.closeButton.FlatAppearance.BorderColor = System.Drawing.Color.White;
+      this.closeButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
+      this.closeButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;
+      this.closeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+      this.closeButton.ForeColor = System.Drawing.Color.White;
+      this.closeButton.ImageIndex = 0;
+      this.closeButton.ImageList = this.imageList;
+      this.closeButton.Location = new System.Drawing.Point(604, 3);
+      this.closeButton.Name = "closeButton";
+      this.closeButton.Size = new System.Drawing.Size(16, 16);
+      this.closeButton.TabIndex = 7;
+      this.closeButton.UseVisualStyleBackColor = true;
+      this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
+      // 
+      // imageList
+      // 
+      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+      this.imageList.TransparentColor = System.Drawing.Color.Magenta;
+      this.imageList.Images.SetKeyName(0, "BuilderDialog_delete.bmp");
+      // 
+      // companyLabel
+      // 
+      this.companyLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.companyLabel.Location = new System.Drawing.Point(248, 88);
+      this.companyLabel.Name = "companyLabel";
+      this.companyLabel.Size = new System.Drawing.Size(364, 16);
+      this.companyLabel.TabIndex = 5;
+      this.companyLabel.Text = "Company";
+      this.companyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // userNameLabel
+      // 
+      this.userNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userNameLabel.BackColor = System.Drawing.SystemColors.Window;
+      this.userNameLabel.Location = new System.Drawing.Point(248, 72);
+      this.userNameLabel.Name = "userNameLabel";
+      this.userNameLabel.Size = new System.Drawing.Size(364, 16);
+      this.userNameLabel.TabIndex = 4;
+      this.userNameLabel.Text = "User";
+      this.userNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // licensedToLabel
+      // 
+      this.licensedToLabel.Location = new System.Drawing.Point(170, 72);
+      this.licensedToLabel.Name = "licensedToLabel";
+      this.licensedToLabel.Size = new System.Drawing.Size(72, 16);
+      this.licensedToLabel.TabIndex = 3;
+      this.licensedToLabel.Text = "Licensed to:";
+      this.licensedToLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // titleLabel
+      // 
+      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.titleLabel.Location = new System.Drawing.Point(170, 8);
+      this.titleLabel.Name = "titleLabel";
+      this.titleLabel.Size = new System.Drawing.Size(442, 16);
+      this.titleLabel.TabIndex = 0;
+      this.titleLabel.Text = "Title";
+      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // versionLabel
+      // 
+      this.versionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.versionLabel.Location = new System.Drawing.Point(170, 24);
+      this.versionLabel.Name = "versionLabel";
+      this.versionLabel.Size = new System.Drawing.Size(442, 16);
+      this.versionLabel.TabIndex = 1;
+      this.versionLabel.Text = "Version ";
+      this.versionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.infoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.infoLabel.ForeColor = System.Drawing.SystemColors.GradientActiveCaption;
+      this.infoLabel.Location = new System.Drawing.Point(170, 104);
+      this.infoLabel.Name = "infoLabel";
+      this.infoLabel.Size = new System.Drawing.Size(442, 47);
+      this.infoLabel.TabIndex = 6;
+      this.infoLabel.Text = "Startup Information";
+      this.infoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // copyrightLabel
+      // 
+      this.copyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.copyrightLabel.Location = new System.Drawing.Point(170, 56);
+      this.copyrightLabel.Name = "copyrightLabel";
+      this.copyrightLabel.Size = new System.Drawing.Size(442, 16);
+      this.copyrightLabel.TabIndex = 2;
+      this.copyrightLabel.Text = "Copyright";
+      this.copyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.pictureBox.Image = global::HeuristicLab.PluginInfrastructure.Properties.Resources.Logo_white;
+      this.pictureBox.Location = new System.Drawing.Point(-1, -1);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(165, 161);
+      this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+      this.pictureBox.TabIndex = 0;
+      this.pictureBox.TabStop = false;
+      // 
+      // SplashScreen
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(625, 161);
+      this.ControlBox = false;
+      this.Controls.Add(this.panel);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "SplashScreen";
+      this.Opacity = 0.99;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+      this.TopMost = true;
+      this.panel.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel panel;
+    private System.Windows.Forms.PictureBox pictureBox;
+    private System.Windows.Forms.Label companyLabel;
+    private System.Windows.Forms.Label userNameLabel;
+    private System.Windows.Forms.Label licensedToLabel;
+    private System.Windows.Forms.Label titleLabel;
+    private System.Windows.Forms.Label versionLabel;
+    private System.Windows.Forms.Label copyrightLabel;
+    private System.Windows.Forms.Label infoLabel;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.Button closeButton;
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.cs	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.cs	(revision 2504)
@@ -0,0 +1,147 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Reflection;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.PluginInfrastructure.Manager;
+
+namespace HeuristicLab.PluginInfrastructure {
+  internal partial class SplashScreen : Form {
+    private const int FADE_INTERVAL = 50;
+    private System.Timers.Timer fadeTimer;
+    private int initialInterval;
+    private object bigLock = new object();
+    private bool closing;
+    private PluginManager manager;
+
+    internal SplashScreen() {
+      InitializeComponent();
+    }
+
+    internal SplashScreen(PluginManager manager, int initialInterval, string initialText)
+      : this() {
+      this.initialInterval = initialInterval;
+      infoLabel.Text = initialText;
+      this.manager = manager;
+      manager.Action += managerActionEventHandler;
+      Assembly assembly = this.GetType().Assembly;
+      object[] attributes = assembly.GetCustomAttributes(false);
+      string user, company;
+
+      titleLabel.Text = Application.ProductName;
+      versionLabel.Text = "Version " + Application.ProductVersion;
+      infoLabel.Text = "";
+
+      foreach (object obj in attributes) {
+        var attr = obj as AssemblyCopyrightAttribute;
+        if (attr != null) {
+          copyrightLabel.Text = "Copyright " + attr.Copyright;
+        }
+      }
+
+      user = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.User;
+      company = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.Organization;
+
+      if (string.IsNullOrEmpty(user)) {
+        userNameLabel.Text = "-";
+      } else {
+        userNameLabel.Text = user;
+      }
+
+      if (string.IsNullOrEmpty(company)) {
+        companyLabel.Text = "-";
+      } else {
+        companyLabel.Text = company;
+      }
+    }
+
+    private void SetInfoText(string text) {
+      this.Invoke((MethodInvoker)delegate() { infoLabel.Text = text; });
+    }
+
+    private void managerActionEventHandler(object sender, PluginInfrastructureEventArgs e) {
+      string info = e.Action + ": " + e.Entity;
+      //if (e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
+      //else if (e.Action == PluginManagerAction.PluginLoaded) info = "Loaded plugin " + e.Id + " ...";
+      //else if (e.Action == PluginManagerAction.Initialized) {
+      //  info = "Initialization Completed";
+      //  fadeTimer = new System.Timers.Timer();
+      //  fadeTimer.SynchronizingObject = this;
+      //  fadeTimer.Elapsed += new System.Timers.ElapsedEventHandler(fadeTimer_Elapsed);
+      //  fadeTimer.Interval = initialInterval;
+      //  fadeTimer.AutoReset = true;
+      //  fadeTimer.Start();
+      //} else {
+      //  if (e.Id != null) info = e.Action.ToString() + "   (" + e.Id + ")";
+      //  else info = e.Action.ToString();
+      //}
+      SetInfoText(info);
+      Application.DoEvents();
+    }
+
+    private void fadeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      fadeTimer.Stop();
+      if (InvokeRequired) {
+        Invoke((MethodInvoker)UpdateOpacity);
+      } else {
+        UpdateOpacity();
+      }
+    }
+
+    private void UpdateOpacity() {
+      lock (bigLock) {
+        if (closing) return;
+        if (Opacity > 0.9) {
+          Opacity = 0.9;
+          fadeTimer.Interval = FADE_INTERVAL;
+          fadeTimer.Start();
+        } else if (this.Opacity > 0) {
+          Opacity -= 0.1;
+          fadeTimer.Start();
+        } else {
+          Opacity = 0;
+          CloseSplashScreen();
+        }
+      }
+    }
+
+    private void closeButton_Click(object sender, EventArgs e) {
+      CloseSplashScreen();
+    }
+
+    private void CloseSplashScreen() {
+      lock (bigLock) {
+        if (!closing) { // just close once
+          closing = true;
+          if (fadeTimer != null) fadeTimer.Stop();
+          manager.Action -= managerActionEventHandler; // remove event before calling close
+          Application.DoEvents(); // work up all existing events
+          Close(); // close
+        }
+      }
+    }
+  }
+}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.resx	(revision 2504)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/Starter/SplashScreen.resx	(revision 2504)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>219, 17</value>
+  </metadata>
+  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAi
+        AQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA
+        ARADAAEBAQABGAYAAQz8AAP/nwAD/8AAA/8VAAP/pQAD/xIAA/+rAAP/DwAD/64AA/8JAAP/ugAD/7oA
+        A//AAAP/tAAD/wYAA/+xAAP/DwAD/6gAA/8VAAP/nwAD/x4AA///AP8AFQABQgFNAT4HAAE+AwABKAMA
+        AUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAv8GAAH/AfkGAAHnAf8GAAHDAfMGAAHDAecGAAHhAccGAAHw
+        AY8GAAH4AR8GAAH8AT8GAAH4AR8GAAHwAZ8GAAHBAccGAAGDAeMGAAGPAfEGAAL/BgAC/wYACw==
+</value>
+  </data>
+</root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab.PluginInfrastructure/app.config	(revision 2504)
@@ -11,4 +11,10 @@
                 <value>plugins</value>
             </setting>
+            <setting name="User" serializeAs="String">
+                <value />
+            </setting>
+            <setting name="Organization" serializeAs="String">
+                <value />
+            </setting>
         </HeuristicLab.PluginInfrastructure.Properties.Settings>
     </applicationSettings>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/HeuristicLab.csproj
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/HeuristicLab.csproj	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/HeuristicLab.csproj	(revision 2504)
@@ -83,23 +83,9 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="MainForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="MainForm.Designer.cs">
-      <DependentUpon>MainForm.cs</DependentUpon>
-    </Compile>
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <EmbeddedResource Include="MainForm.resx">
-      <DependentUpon>MainForm.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
-    <EmbeddedResource Include="SplashScreen.resx">
-      <DependentUpon>SplashScreen.cs</DependentUpon>
       <SubType>Designer</SubType>
     </EmbeddedResource>
@@ -118,10 +104,4 @@
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-    <Compile Include="SplashScreen.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="SplashScreen.Designer.cs">
-      <DependentUpon>SplashScreen.cs</DependentUpon>
     </Compile>
   </ItemGroup>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.Designer.cs	(revision 2503)
+++ 	(revision )
@@ -1,199 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-namespace HeuristicLab {
-  partial class MainForm {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-      if(disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
-      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Plugin Management", System.Windows.Forms.HorizontalAlignment.Left);
-      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Applications", System.Windows.Forms.HorizontalAlignment.Left);
-      this.startButton = new System.Windows.Forms.Button();
-      this.largeImageList = new System.Windows.Forms.ImageList(this.components);
-      this.applicationsListView = new System.Windows.Forms.ListView();
-      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
-      this.versionColumnHeader = new System.Windows.Forms.ColumnHeader();
-      this.descriptionColumnHeader = new System.Windows.Forms.ColumnHeader();
-      this.smallImageList = new System.Windows.Forms.ImageList(this.components);
-      this.detailsButton = new System.Windows.Forms.Button();
-      this.listButton = new System.Windows.Forms.Button();
-      this.largeIconsButton = new System.Windows.Forms.Button();
-      this.SuspendLayout();
-      // 
-      // startButton
-      // 
-      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-      this.startButton.Enabled = false;
-      this.startButton.Location = new System.Drawing.Point(579, 511);
-      this.startButton.Name = "startButton";
-      this.startButton.Size = new System.Drawing.Size(75, 23);
-      this.startButton.TabIndex = 1;
-      this.startButton.Text = "Start";
-      this.startButton.UseVisualStyleBackColor = true;
-      this.startButton.Click += new System.EventHandler(this.applicationsListView_ItemActivate);
-      // 
-      // largeImageList
-      // 
-      this.largeImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("largeImageList.ImageStream")));
-      this.largeImageList.TransparentColor = System.Drawing.Color.Transparent;
-      this.largeImageList.Images.SetKeyName(0, "HeuristicLab.ico");
-      // 
-      // applicationsListView
-      // 
-      this.applicationsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.applicationsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
-            this.nameColumnHeader,
-            this.versionColumnHeader,
-            this.descriptionColumnHeader});
-      listViewGroup1.Header = "Plugin Management";
-      listViewGroup1.Name = "Plugin Management";
-      listViewGroup2.Header = "Applications";
-      listViewGroup2.Name = "Applications";
-      this.applicationsListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
-            listViewGroup1,
-            listViewGroup2});
-      this.applicationsListView.LargeImageList = this.largeImageList;
-      this.applicationsListView.Location = new System.Drawing.Point(12, 12);
-      this.applicationsListView.MultiSelect = false;
-      this.applicationsListView.Name = "applicationsListView";
-      this.applicationsListView.ShowItemToolTips = true;
-      this.applicationsListView.Size = new System.Drawing.Size(642, 493);
-      this.applicationsListView.SmallImageList = this.smallImageList;
-      this.applicationsListView.TabIndex = 2;
-      this.applicationsListView.UseCompatibleStateImageBehavior = false;
-      this.applicationsListView.ItemActivate += new System.EventHandler(this.applicationsListView_ItemActivate);
-      this.applicationsListView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.applicationsListBox_SelectedIndexChanged);
-      // 
-      // nameColumnHeader
-      // 
-      this.nameColumnHeader.Text = "Name";
-      this.nameColumnHeader.Width = 125;
-      // 
-      // versionColumnHeader
-      // 
-      this.versionColumnHeader.Text = "Version";
-      // 
-      // descriptionColumnHeader
-      // 
-      this.descriptionColumnHeader.Text = "Description";
-      this.descriptionColumnHeader.Width = 453;
-      // 
-      // smallImageList
-      // 
-      this.smallImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("smallImageList.ImageStream")));
-      this.smallImageList.TransparentColor = System.Drawing.Color.Transparent;
-      this.smallImageList.Images.SetKeyName(0, "HeuristicLab.ico");
-      // 
-      // detailsButton
-      // 
-      this.detailsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.detailsButton.AutoSize = true;
-      this.detailsButton.Image = global::HeuristicLab.Properties.Resources.Details;
-      this.detailsButton.Location = new System.Drawing.Point(68, 511);
-      this.detailsButton.Name = "detailsButton";
-      this.detailsButton.Size = new System.Drawing.Size(22, 23);
-      this.detailsButton.TabIndex = 5;
-      this.detailsButton.UseVisualStyleBackColor = true;
-      this.detailsButton.Click += new System.EventHandler(this.detailsButton_Click);
-      // 
-      // listButton
-      // 
-      this.listButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.listButton.AutoSize = true;
-      this.listButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-      this.listButton.Image = global::HeuristicLab.Properties.Resources.List;
-      this.listButton.Location = new System.Drawing.Point(40, 511);
-      this.listButton.Name = "listButton";
-      this.listButton.Size = new System.Drawing.Size(22, 22);
-      this.listButton.TabIndex = 4;
-      this.listButton.UseVisualStyleBackColor = true;
-      this.listButton.Click += new System.EventHandler(this.listButton_Click);
-      // 
-      // largeIconsButton
-      // 
-      this.largeIconsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-      this.largeIconsButton.AutoSize = true;
-      this.largeIconsButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-      this.largeIconsButton.Image = global::HeuristicLab.Properties.Resources.LargeIcons;
-      this.largeIconsButton.Location = new System.Drawing.Point(12, 511);
-      this.largeIconsButton.Name = "largeIconsButton";
-      this.largeIconsButton.Size = new System.Drawing.Size(22, 22);
-      this.largeIconsButton.TabIndex = 3;
-      this.largeIconsButton.UseVisualStyleBackColor = true;
-      this.largeIconsButton.Click += new System.EventHandler(this.largeIconsButton_Click);
-      // 
-      // MainForm
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(666, 546);
-      this.Controls.Add(this.detailsButton);
-      this.Controls.Add(this.listButton);
-      this.Controls.Add(this.largeIconsButton);
-      this.Controls.Add(this.applicationsListView);
-      this.Controls.Add(this.startButton);
-      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
-      this.Name = "MainForm";
-      this.Text = "HeuristicLab Starter";
-      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
-      this.ResumeLayout(false);
-      this.PerformLayout();
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Button startButton;
-    private System.Windows.Forms.ImageList largeImageList;
-    private System.Windows.Forms.ListView applicationsListView;
-    private System.Windows.Forms.ColumnHeader nameColumnHeader;
-    private System.Windows.Forms.ColumnHeader versionColumnHeader;
-    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
-    private System.Windows.Forms.Button largeIconsButton;
-    private System.Windows.Forms.Button listButton;
-    private System.Windows.Forms.Button detailsButton;
-    private System.Windows.Forms.ImageList smallImageList;
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.cs	(revision 2503)
+++ 	(revision )
@@ -1,165 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Text;
-using System.Windows.Forms;
-using System.Diagnostics;
-using HeuristicLab.PluginInfrastructure;
-using System.Threading;
-using HeuristicLab.PluginInfrastructure.Manager;
-using System.IO;
-
-namespace HeuristicLab {
-  public partial class MainForm : Form {
-
-    private ListViewItem pluginManagerListViewItem;
-    private bool abortRequested;
-    private PluginManager pluginManager;
-
-    public MainForm()
-      : base() {
-      InitializeComponent();
-
-      abortRequested = false;
-      string pluginPath = Path.GetFullPath(HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir);
-      pluginManager = new PluginManager(pluginPath);
-      SplashScreen splashScreen = new SplashScreen(pluginManager, 1000, "Loading HeuristicLab...");
-      splashScreen.Owner = this;
-      splashScreen.Show();
-
-      Application.DoEvents();
-      this.Enabled = false;
-
-      pluginManager.DiscoverAndCheckPlugins();
-
-      applicationsListView.Items.Clear();
-
-      pluginManagerListViewItem = new ListViewItem("Plugin Manager", 0);
-      pluginManagerListViewItem.Group = applicationsListView.Groups["Plugin Management"];
-      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "-"));
-      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "Install, upgrade or delete plugins"));
-      pluginManagerListViewItem.ToolTipText = "Install, upgrade or delete plugins";
-
-      applicationsListView.Items.Add(pluginManagerListViewItem);
-
-      foreach (ApplicationDescription info in pluginManager.Applications) {
-        ListViewItem item = new ListViewItem(info.Name, 0);
-        item.Tag = info;
-        item.Group = applicationsListView.Groups["Applications"];
-        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Version.ToString()));
-        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Description));
-        item.ToolTipText = info.Description;
-        applicationsListView.Items.Add(item);
-      }
-
-
-      this.Enabled = true;
-      this.Visible = true;
-    }
-
-    private void applicationsListView_ItemActivate(object sender, EventArgs e) {
-      if (applicationsListView.SelectedItems.Count > 0) {
-        ListViewItem selected = applicationsListView.SelectedItems[0];
-        if (selected == pluginManagerListViewItem) {
-          try {
-            //Cursor = Cursors.AppStarting;
-            //ManagerForm form = new ManagerForm();
-            //this.Visible = false;
-            //form.ShowDialog(this);
-            //// RefreshApplicationsList();
-            //this.Visible = true;
-          }
-          finally {
-            Cursor = Cursors.Arrow;
-          }
-        } else {
-          ApplicationDescription app = (ApplicationDescription)applicationsListView.SelectedItems[0].Tag;
-          SplashScreen splashScreen = new SplashScreen(pluginManager, 2000, "Loading " + app.Name);
-          splashScreen.Owner = this;
-          splashScreen.Show();
-          Thread t = new Thread(delegate() {
-            bool stopped = false;
-            do {
-              try {
-                if (!abortRequested)
-                  pluginManager.Run(app);
-                stopped = true;
-              }
-              catch (Exception ex) {
-                stopped = false;
-                ThreadPool.QueueUserWorkItem(delegate(object exception) { ShowErrorMessageBox((Exception)exception); }, ex);
-                Thread.Sleep(5000); // sleep 5 seconds before autorestart
-              }
-            } while (!abortRequested && !stopped && app.AutoRestart);
-          });
-          t.SetApartmentState(ApartmentState.STA); // needed for the AdvancedOptimizationFrontent
-          t.Start();
-        }
-      }
-    }
-
-    private void applicationsListBox_SelectedIndexChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
-      if (e.IsSelected) {
-        startButton.Enabled = true;
-      } else {
-        startButton.Enabled = false;
-      }
-    }
-
-    private void largeIconsButton_Click(object sender, EventArgs e) {
-      applicationsListView.View = View.LargeIcon;
-    }
-
-    private void listButton_Click(object sender, EventArgs e) {
-      applicationsListView.View = View.List;
-    }
-
-    private void detailsButton_Click(object sender, EventArgs e) {
-      applicationsListView.View = View.Details;
-    }
-
-    public void ShowErrorMessageBox(Exception ex) {
-      MessageBox.Show(BuildErrorMessage(ex),
-                      "Error - " + ex.GetType().Name,
-                      MessageBoxButtons.OK,
-                      MessageBoxIcon.Error);
-    }
-    private string BuildErrorMessage(Exception ex) {
-      StringBuilder sb = new StringBuilder();
-      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
-
-      while (ex.InnerException != null) {
-        ex = ex.InnerException;
-        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
-      }
-      return sb.ToString();
-    }
-
-    private void MainForm_FormClosing(object sender, FormClosingEventArgs e) {
-      abortRequested = true;
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/MainForm.resx	(revision 2503)
+++ 	(revision )
@@ -1,526 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="largeImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>20, 15</value>
-  </metadata>
-  <data name="largeImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
-        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU
-        CQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
-        AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
-        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
-        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
-        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
-        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
-        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
-        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
-        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
-        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
-        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
-        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
-        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
-        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
-        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
-        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
-        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
-        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
-        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
-        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
-        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
-        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
-        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
-        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
-        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
-        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
-        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
-        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
-        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+CAB7/YgAB8QIHAfMK/wHz
-        DQcB8QH/YgAB7wIAAW0K/wHzDQABEgH/YgAB/wEQAQABDgHzCv8BbQ0AAfFiAAH/AZICAAHsCv8B8Q0A
-        AW1iAAL/AQ4BAAEOC/8BEgIAAQcK/2IAAv8B7AIAAZIK/wEHAgABFAr/YgAC/wHzAQ4BAAEQC/8BFAIA
-        AbwJ/2IAA/8BbQIAAe8K/wGSAgABbQn/YgAD/wHxAgABFAv/ARACAAHxCP9iAAT/AW0CAAEHCv8BkgIA
-        AesI/2IABP8BBwIAAW0K/wHzAQ4BAAEOAfMH/2IABf8BFAIAAfEK/wHsAgAB7Af/YgAF/wHvAgABbQr/
-        AfMCAAEQB/9iAAb/ARABAAEOCxQBDgIAAZIG/2IABv8BkhAAARAG/2IAB/8BDhAAAQcF/2IAB/8B7AIA
-        ARQK7AHrAgABFAX/YgAH/wHzAQ4BAAEQC/8BFAIAAbwE/2IACP8BbQIAAe8K/wGSAgABbQT/YgAI/wHx
-        AgABFAv/ARACAAHxA/9iAAn/AW0CAAEHCv8BkgIAAesD/2IACf8BBwIAAW0L/wEOAQABDgHzAv9iAAr/
-        ARQCAAHxCv8B7AIAAewC/2IACv8B7wIAAW0K/wHzAQ4BAAEQAv9iAAv/ARABAAEOAfMK/wFtAgABkgH/
-        YgAL/wGSAgAB7Ar/AfECAAEQAf9iAAz/AQ4BAAEOAfMK/wFtAgABB2IADP8B7wLsAfEK/wG8AuwB72IA
-        Hv/hAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP//wD/AAMACw==
-</value>
-  </data>
-  <metadata name="smallImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>142, 17</value>
-  </metadata>
-  <data name="smallImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
-        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC0
-        BwAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
-        AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
-        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
-        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
-        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
-        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
-        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
-        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
-        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
-        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
-        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
-        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
-        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
-        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
-        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
-        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
-        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
-        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
-        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
-        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
-        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
-        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
-        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
-        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
-        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
-        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
-        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
-        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
-        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8CAA//MgABbQX/BwAB/zEA
-        AZIBAAX/AfEGAAFtMQAB/wEAAZIF/wEAARQF/zEAAf8BbQEABf8BkgEABf8xAAL/AQABBwX/AQAB6wT/
-        MQAC/wEUAQAF/wHsAQAE/zEAA/8BAAYUAQABkgP/MQAD/wEOCAAD/zEAA/8B8wEABv8BAAG8Av8xAAT/
-        AQABFAX/ARABAAL/MQAE/wEHAQAG/wEAAfMB/zEABf8BAAFtBf8BDgEQAf8xAAX/AZIBAAX/AfEBAAH/
-        MQAG/wHsAfEF/wHsAe9wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL
-</value>
-  </data>
-  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
-  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
-        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
-        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
-        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
-        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
-        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
-        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
-        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
-        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
-        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
-        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
-        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
-        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
-        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
-        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
-        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
-        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
-        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
-        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
-        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
-        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
-        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
-        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
-        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
-        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
-        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
-        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
-        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
-        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
-        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
-        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
-        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
-        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
-        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
-        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
-        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
-        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
-        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
-        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
-        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
-        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
-        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
-        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
-        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
-        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
-        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
-        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
-        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
-        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
-        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
-        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
-        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
-        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
-        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
-        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
-        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
-        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
-        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
-        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
-        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
-        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
-        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
-        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
-        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
-        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
-        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
-        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
-        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
-        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
-        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
-        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
-        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
-        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
-        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
-        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
-        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
-        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
-        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
-        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
-        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
-        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
-        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
-        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
-        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
-        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
-        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
-        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
-        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
-        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
-        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
-        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
-        ///////////////////////wD//////////////////////////////wD///////////////////////
-        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
-        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
-        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
-        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
-        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
-        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
-        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
-        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
-        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
-        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
-        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
-        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
-        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
-        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
-        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
-        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
-        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
-        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
-        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
-        /////////////////wAA////////////////////////////////////////////////////////////
-        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
-        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
-        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
-        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
-        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
-        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
-        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
-        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
-        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
-        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
-        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
-        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
-        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
-        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
-        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
-        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
-        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
-        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
-        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
-        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
-        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
-        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
-        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
-        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
-        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
-        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
-        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
-        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
-        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
-        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
-        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
-        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
-        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
-        /////////////////////////////////////////////////wAA////////////////////////////
-        /////////////////////////////////wAA////////////////////////////////////////////
-        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
-        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
-        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
-        //////////////////AP////////////////////////////////////////8A//////////////////
-        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
-        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
-        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
-        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
-        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
-        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
-        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
-        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
-        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
-        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
-        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
-        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
-        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
-        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
-        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
-        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
-        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
-        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
-        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
-        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
-        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
-        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
-        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
-        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
-        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
-        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
-        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
-        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
-        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
-        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
-        ////////////8A/////////////////////////////////////////wD///////////////////////
-        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
-        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
-        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
-        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
-        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
-        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
-        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
-        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
-        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
-        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
-        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
-        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
-        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
-        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
-        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
-        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
-        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
-        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
-        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
-        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
-        //////////////////////////////////////////////////////8KCv//////////////////////
-        ////////////////////////////////////////////////////////////Cgr/////////////////
-        /////////////////////////////////////////////////////////////////woK////////////
-        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
-        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
-        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
-        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
-        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
-        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
-        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
-        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
-        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
-        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
-        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
-        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
-        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
-        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
-        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
-        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
-        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
-        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
-        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
-        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
-        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
-        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
-        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
-        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
-        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
-        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
-        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
-        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
-        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
-        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
-        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
-        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
-        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
-        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
-        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
-        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
-        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
-        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
-        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
-        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
-        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
-        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
-        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
-        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
-        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
-        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
-        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
-        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
-        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
-        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
-        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
-        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
-        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
-        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
-        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
-        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
-        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
-        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
-        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
-        ////////////////////////////////////////////Cgr/////////////////////////////////
-        /////////////////////////////////////////////////woK////////////////////////////
-        //////////////////////////////////////////////////////8KCv//////////////////////
-        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
-        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
-</value>
-  </data>
-</root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Program.cs	(revision 2504)
@@ -63,9 +63,10 @@
     }
 
-    public static void ShowErrorMessageBox(Exception ex) {
-      MessageBox.Show(BuildErrorMessage(ex),
-                      "Error - " + ex.GetType().Name,
-                      MessageBoxButtons.OK,
-                      MessageBoxIcon.Error);
+    private static void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(null,
+        BuildErrorMessage(ex),
+        "Error - " + ex.GetType().Name,
+        MessageBoxButtons.OK,
+        MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
     }
 
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/AssemblyInfo.frame
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/AssemblyInfo.frame	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/AssemblyInfo.frame	(revision 2504)
@@ -36,4 +36,5 @@
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
+[assembly: System.Resources.NeutralResourcesLanguage("en")]
 
 // Setting ComVisible to false makes the types in this assembly not visible 
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.Designer.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.Designer.cs	(revision 2504)
@@ -1,27 +1,6 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-//------------------------------------------------------------------------------
+﻿//------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.1433
+//     Runtime Version:2.0.50727.4200
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -81,39 +60,4 @@
             }
         }
-        
-        internal static System.Drawing.Bitmap Details {
-            get {
-                object obj = ResourceManager.GetObject("Details", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        internal static System.Drawing.Icon HeuristicLab {
-            get {
-                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
-                return ((System.Drawing.Icon)(obj));
-            }
-        }
-        
-        internal static System.Drawing.Bitmap LargeIcons {
-            get {
-                object obj = ResourceManager.GetObject("LargeIcons", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        internal static System.Drawing.Bitmap List {
-            get {
-                object obj = ResourceManager.GetObject("List", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
-        internal static System.Drawing.Bitmap Logo_white {
-            get {
-                object obj = ResourceManager.GetObject("Logo_white", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
     }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.resx	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Resources.resx	(revision 2504)
@@ -118,19 +118,3 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="LargeIcons" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
-  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
 </root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.Designer.cs	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.Designer.cs	(revision 2504)
@@ -2,5 +2,5 @@
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.3053
+//     Runtime Version:2.0.50727.4200
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
@@ -23,22 +23,4 @@
             }
         }
-        
-        [global::System.Configuration.ApplicationScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
-        public string User {
-            get {
-                return ((string)(this["User"]));
-            }
-        }
-        
-        [global::System.Configuration.ApplicationScopedSettingAttribute()]
-        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
-        public string Organization {
-            get {
-                return ((string)(this["Organization"]));
-            }
-        }
     }
 }
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.settings
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.settings	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/Properties/Settings.settings	(revision 2504)
@@ -1,12 +1,5 @@
 ﻿<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Properties" GeneratedClassName="Settings">
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
   <Profiles />
-  <Settings>
-    <Setting Name="User" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">unknown</Value>
-    </Setting>
-    <Setting Name="Organization" Type="System.String" Scope="Application">
-      <Value Profile="(Default)">unknown</Value>
-    </Setting>
-  </Settings>
+  <Settings />
 </SettingsFile>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.Designer.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.Designer.cs	(revision 2503)
+++ 	(revision )
@@ -1,236 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.PluginInfrastructure;
-namespace HeuristicLab {
-  partial class SplashScreen {
-    /// <summary>
-    /// Required designer variable.
-    /// </summary>
-    private System.ComponentModel.IContainer components = null;
-
-    /// <summary>
-    /// Clean up any resources being used.
-    /// </summary>
-    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-    protected override void Dispose(bool disposing) {
-
-      if (disposing && (components != null)) {
-        components.Dispose();
-      }
-      base.Dispose(disposing);
-    }
-    
-
-    #region Windows Form Designer generated code
-
-    /// <summary>
-    /// Required method for Designer support - do not modify
-    /// the contents of this method with the code editor.
-    /// </summary>
-    private void InitializeComponent() {
-      this.components = new System.ComponentModel.Container();
-      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
-      this.panel = new System.Windows.Forms.Panel();
-      this.closeButton = new System.Windows.Forms.Button();
-      this.imageList = new System.Windows.Forms.ImageList(this.components);
-      this.companyLabel = new System.Windows.Forms.Label();
-      this.userNameLabel = new System.Windows.Forms.Label();
-      this.licensedToLabel = new System.Windows.Forms.Label();
-      this.titleLabel = new System.Windows.Forms.Label();
-      this.versionLabel = new System.Windows.Forms.Label();
-      this.infoLabel = new System.Windows.Forms.Label();
-      this.copyrightLabel = new System.Windows.Forms.Label();
-      this.pictureBox = new System.Windows.Forms.PictureBox();
-      this.panel.SuspendLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
-      this.SuspendLayout();
-      // 
-      // panel
-      // 
-      this.panel.BackColor = System.Drawing.SystemColors.Window;
-      this.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-      this.panel.Controls.Add(this.closeButton);
-      this.panel.Controls.Add(this.companyLabel);
-      this.panel.Controls.Add(this.userNameLabel);
-      this.panel.Controls.Add(this.licensedToLabel);
-      this.panel.Controls.Add(this.titleLabel);
-      this.panel.Controls.Add(this.versionLabel);
-      this.panel.Controls.Add(this.infoLabel);
-      this.panel.Controls.Add(this.copyrightLabel);
-      this.panel.Controls.Add(this.pictureBox);
-      this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.panel.Location = new System.Drawing.Point(0, 0);
-      this.panel.Name = "panel";
-      this.panel.Size = new System.Drawing.Size(625, 161);
-      this.panel.TabIndex = 0;
-      // 
-      // closeButton
-      // 
-      this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-      this.closeButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
-      this.closeButton.FlatAppearance.BorderColor = System.Drawing.Color.White;
-      this.closeButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
-      this.closeButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;
-      this.closeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-      this.closeButton.ForeColor = System.Drawing.Color.White;
-      this.closeButton.ImageIndex = 0;
-      this.closeButton.ImageList = this.imageList;
-      this.closeButton.Location = new System.Drawing.Point(604, 3);
-      this.closeButton.Name = "closeButton";
-      this.closeButton.Size = new System.Drawing.Size(16, 16);
-      this.closeButton.TabIndex = 7;
-      this.closeButton.UseVisualStyleBackColor = true;
-      this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
-      // 
-      // imageList
-      // 
-      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
-      this.imageList.TransparentColor = System.Drawing.Color.Magenta;
-      this.imageList.Images.SetKeyName(0, "BuilderDialog_delete.bmp");
-      // 
-      // companyLabel
-      // 
-      this.companyLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.companyLabel.Location = new System.Drawing.Point(248, 88);
-      this.companyLabel.Name = "companyLabel";
-      this.companyLabel.Size = new System.Drawing.Size(364, 16);
-      this.companyLabel.TabIndex = 5;
-      this.companyLabel.Text = "Company";
-      this.companyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // userNameLabel
-      // 
-      this.userNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.userNameLabel.BackColor = System.Drawing.SystemColors.Window;
-      this.userNameLabel.Location = new System.Drawing.Point(248, 72);
-      this.userNameLabel.Name = "userNameLabel";
-      this.userNameLabel.Size = new System.Drawing.Size(364, 16);
-      this.userNameLabel.TabIndex = 4;
-      this.userNameLabel.Text = "User";
-      this.userNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // licensedToLabel
-      // 
-      this.licensedToLabel.Location = new System.Drawing.Point(170, 72);
-      this.licensedToLabel.Name = "licensedToLabel";
-      this.licensedToLabel.Size = new System.Drawing.Size(72, 16);
-      this.licensedToLabel.TabIndex = 3;
-      this.licensedToLabel.Text = "Licensed to:";
-      this.licensedToLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // titleLabel
-      // 
-      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.titleLabel.Location = new System.Drawing.Point(170, 8);
-      this.titleLabel.Name = "titleLabel";
-      this.titleLabel.Size = new System.Drawing.Size(442, 16);
-      this.titleLabel.TabIndex = 0;
-      this.titleLabel.Text = "Title";
-      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // versionLabel
-      // 
-      this.versionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.versionLabel.Location = new System.Drawing.Point(170, 24);
-      this.versionLabel.Name = "versionLabel";
-      this.versionLabel.Size = new System.Drawing.Size(442, 16);
-      this.versionLabel.TabIndex = 1;
-      this.versionLabel.Text = "Version ";
-      this.versionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // infoLabel
-      // 
-      this.infoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.infoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.infoLabel.ForeColor = System.Drawing.SystemColors.GradientActiveCaption;
-      this.infoLabel.Location = new System.Drawing.Point(170, 104);
-      this.infoLabel.Name = "infoLabel";
-      this.infoLabel.Size = new System.Drawing.Size(442, 47);
-      this.infoLabel.TabIndex = 6;
-      this.infoLabel.Text = "Startup Information";
-      this.infoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // copyrightLabel
-      // 
-      this.copyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-                  | System.Windows.Forms.AnchorStyles.Right)));
-      this.copyrightLabel.Location = new System.Drawing.Point(170, 56);
-      this.copyrightLabel.Name = "copyrightLabel";
-      this.copyrightLabel.Size = new System.Drawing.Size(442, 16);
-      this.copyrightLabel.TabIndex = 2;
-      this.copyrightLabel.Text = "Copyright";
-      this.copyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
-      // 
-      // pictureBox
-      // 
-      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
-                  | System.Windows.Forms.AnchorStyles.Left)));
-      this.pictureBox.Image = global::HeuristicLab.Properties.Resources.Logo_white;
-      this.pictureBox.Location = new System.Drawing.Point(-1, -1);
-      this.pictureBox.Name = "pictureBox";
-      this.pictureBox.Size = new System.Drawing.Size(165, 161);
-      this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
-      this.pictureBox.TabIndex = 0;
-      this.pictureBox.TabStop = false;
-      // 
-      // SplashScreen
-      // 
-      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-      this.ClientSize = new System.Drawing.Size(625, 161);
-      this.ControlBox = false;
-      this.Controls.Add(this.panel);
-      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
-      this.MaximizeBox = false;
-      this.MinimizeBox = false;
-      this.Name = "SplashScreen";
-      this.Opacity = 0.99;
-      this.ShowInTaskbar = false;
-      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
-      this.TopMost = true;
-      this.panel.ResumeLayout(false);
-      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
-      this.ResumeLayout(false);
-
-    }
-
-    #endregion
-
-    private System.Windows.Forms.Panel panel;
-    private System.Windows.Forms.PictureBox pictureBox;
-    private System.Windows.Forms.Label companyLabel;
-    private System.Windows.Forms.Label userNameLabel;
-    private System.Windows.Forms.Label licensedToLabel;
-    private System.Windows.Forms.Label titleLabel;
-    private System.Windows.Forms.Label versionLabel;
-    private System.Windows.Forms.Label copyrightLabel;
-    private System.Windows.Forms.Label infoLabel;
-    private System.Windows.Forms.ImageList imageList;
-    private System.Windows.Forms.Button closeButton;
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.cs
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.cs	(revision 2503)
+++ 	(revision )
@@ -1,152 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Data;
-using System.Drawing;
-using System.Windows.Forms;
-using System.Reflection;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.PluginInfrastructure.Manager;
-
-namespace HeuristicLab {
-  public partial class SplashScreen : Form {
-    private const int FADE_INTERVAL = 50;
-    private System.Timers.Timer fadeTimer;
-    private int initialInterval;
-    private object bigLock = new object();
-    private bool closing = false;
-    private PluginManager manager;
-
-    public SplashScreen() {
-      InitializeComponent();
-    }
-
-    public SplashScreen(PluginManager manager, int initialInterval, string initialText)
-      : this() {
-      this.initialInterval = initialInterval;
-      infoLabel.Text = initialText;
-      this.manager = manager;
-      manager.Action += managerActionEventHandler;
-      Assembly assembly = this.GetType().Assembly;
-      object[] attributes = assembly.GetCustomAttributes(false);
-      string user, company;
-
-      titleLabel.Text = Application.ProductName;
-      versionLabel.Text = "Version " + Application.ProductVersion;
-      infoLabel.Text = "";
-
-      foreach (object obj in attributes) {
-        if (obj is AssemblyCopyrightAttribute) {
-          copyrightLabel.Text = "Copyright " + ((AssemblyCopyrightAttribute)obj).Copyright;
-        }
-      }
-
-      try {
-        user = HeuristicLab.Properties.Settings.Default.User;
-        company = HeuristicLab.Properties.Settings.Default.Organization;
-
-        if ((user == null) || (user.Equals(""))) {
-          userNameLabel.Text = "-";
-        } else {
-          userNameLabel.Text = user;
-        }
-
-        if ((company == null) || (company.Equals(""))) {
-          companyLabel.Text = "-";
-        } else {
-          companyLabel.Text = company;
-        }
-      }
-      catch (Exception) {
-        userNameLabel.Text = "-";
-        companyLabel.Text = "-";
-      }
-    }
-
-    private void SetInfoText(string text) {
-      this.Invoke((MethodInvoker)delegate() { infoLabel.Text = text; });
-    }
-
-    public void managerActionEventHandler(object sender, PluginInfrastructureEventArgs e) {
-      string info = e.Action + ": " + e.Entity;
-      //if (e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
-      //else if (e.Action == PluginManagerAction.PluginLoaded) info = "Loaded plugin " + e.Id + " ...";
-      //else if (e.Action == PluginManagerAction.Initialized) {
-      //  info = "Initialization Completed";
-      //  fadeTimer = new System.Timers.Timer();
-      //  fadeTimer.SynchronizingObject = this;
-      //  fadeTimer.Elapsed += new System.Timers.ElapsedEventHandler(fadeTimer_Elapsed);
-      //  fadeTimer.Interval = initialInterval;
-      //  fadeTimer.AutoReset = true;
-      //  fadeTimer.Start();
-      //} else {
-      //  if (e.Id != null) info = e.Action.ToString() + "   (" + e.Id + ")";
-      //  else info = e.Action.ToString();
-      //}
-      SetInfoText(info);
-      Application.DoEvents();
-    }
-
-    private void fadeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
-      fadeTimer.Stop();
-      if (InvokeRequired) {
-        Invoke((MethodInvoker)UpdateOpacity);
-      } else {
-        UpdateOpacity();
-      }
-    }
-
-    private void UpdateOpacity() {
-      lock (bigLock) {
-        if (closing) return;
-        if (Opacity > 0.9) {
-          Opacity = 0.9;
-          fadeTimer.Interval = FADE_INTERVAL;
-          fadeTimer.Start();
-        } else if (this.Opacity > 0) {
-          Opacity -= 0.1;
-          fadeTimer.Start();
-        } else {
-          Opacity = 0;
-          CloseSplashScreen();
-        }
-      }
-    }
-
-    private void closeButton_Click(object sender, EventArgs e) {
-      CloseSplashScreen();
-    }
-
-    private void CloseSplashScreen() {
-      lock (bigLock) {
-        if (!closing) { // just close once
-          closing = true;
-          if (fadeTimer != null) fadeTimer.Stop();
-          manager.Action -= managerActionEventHandler; // remove event before calling close
-          Application.DoEvents(); // work up all existing events
-          Close(); // close
-        }
-      }
-    }
-  }
-}
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.resx
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/SplashScreen.resx	(revision 2503)
+++ 	(revision )
@@ -1,135 +1,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>219, 17</value>
-  </metadata>
-  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
-        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAi
-        AQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA
-        ARADAAEBAQABGAYAAQz8AAP/nwAD/8AAA/8VAAP/pQAD/xIAA/+rAAP/DwAD/64AA/8JAAP/ugAD/7oA
-        A//AAAP/tAAD/wYAA/+xAAP/DwAD/6gAA/8VAAP/nwAD/x4AA///AP8AFQABQgFNAT4HAAE+AwABKAMA
-        AUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAv8GAAH/AfkGAAHnAf8GAAHDAfMGAAHDAecGAAHhAccGAAHw
-        AY8GAAH4AR8GAAH8AT8GAAH4AR8GAAHwAZ8GAAHBAccGAAGDAeMGAAGPAfEGAAL/BgAC/wYACw==
-</value>
-  </data>
-</root>
Index: branches/PluginInfrastructure Refactoring/HeuristicLab/app.config
===================================================================
--- branches/PluginInfrastructure Refactoring/HeuristicLab/app.config	(revision 2503)
+++ branches/PluginInfrastructure Refactoring/HeuristicLab/app.config	(revision 2504)
@@ -2,12 +2,7 @@
 <configuration>
     <configSections>
-        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
-            <section name="HeuristicLab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
-        </sectionGroup>
     </configSections>
   <connectionStrings>
   </connectionStrings>
-  <system.serviceModel>
-  </system.serviceModel>
   <runtime>
     <gcServer enabled="true" />
@@ -17,21 +12,11 @@
       <remove invariant="System.Data.SQLite"/>
       <add name="SQLite Data Provider" invariant="System.Data.SQLite"
-           description=".Net Framework Data Provider for SQLite"           
+           description=".Net Framework Data Provider for SQLite"
            type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
       <remove invariant="System.Data.SqlServerCe.3.5" />
-      <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" 
-           description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
+      <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5"
+           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
            type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
     </DbProviderFactories>
   </system.data>
-  <applicationSettings>
-    <HeuristicLab.Properties.Settings>
-      <setting name="User" serializeAs="String">
-        <value>unknown</value>
-      </setting>
-      <setting name="Organization" serializeAs="String">
-        <value>unknown</value>
-      </setting>
-    </HeuristicLab.Properties.Settings>
-  </applicationSettings>
 </configuration>
